summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS12
-rw-r--r--COPYING340
-rw-r--r--MAINTAINERS11
-rw-r--r--Makefile.am116
-rw-r--r--NEWS2810
-rw-r--r--README21
-rw-r--r--TODO3
-rwxr-xr-xautogen.sh23
-rw-r--r--backend/Makefile.am40
-rw-r--r--backend/backend.symbols1
-rw-r--r--backend/comics/Makefile.am32
-rw-r--r--backend/comics/comics-document.c936
-rw-r--r--backend/comics/comics-document.h38
-rw-r--r--backend/comics/comicsdocument.evince-backend.in4
-rw-r--r--backend/djvu/Makefile.am38
-rw-r--r--backend/djvu/djvu-document-private.h48
-rw-r--r--backend/djvu/djvu-document.c706
-rw-r--r--backend/djvu/djvu-document.h38
-rw-r--r--backend/djvu/djvu-links.c434
-rw-r--r--backend/djvu/djvu-links.h35
-rw-r--r--backend/djvu/djvu-text-page.c445
-rw-r--r--backend/djvu/djvu-text-page.h59
-rw-r--r--backend/djvu/djvudocument.evince-backend.in4
-rw-r--r--backend/dvi/Makefile.am47
-rw-r--r--backend/dvi/cairo-device.c373
-rw-r--r--backend/dvi/cairo-device.h41
-rw-r--r--backend/dvi/dvi-document.c610
-rw-r--r--backend/dvi/dvi-document.h38
-rw-r--r--backend/dvi/dvidocument.evince-backend.in4
-rw-r--r--backend/dvi/fonts.c57
-rw-r--r--backend/dvi/fonts.h6
-rw-r--r--backend/dvi/mdvi-lib/Makefile.am43
-rw-r--r--backend/dvi/mdvi-lib/afmparse.c1303
-rw-r--r--backend/dvi/mdvi-lib/afmparse.h307
-rw-r--r--backend/dvi/mdvi-lib/bitmap.c1035
-rw-r--r--backend/dvi/mdvi-lib/bitmap.h145
-rw-r--r--backend/dvi/mdvi-lib/color.c136
-rw-r--r--backend/dvi/mdvi-lib/color.h34
-rw-r--r--backend/dvi/mdvi-lib/common.c168
-rw-r--r--backend/dvi/mdvi-lib/common.h285
-rw-r--r--backend/dvi/mdvi-lib/defaults.h71
-rw-r--r--backend/dvi/mdvi-lib/dviopcodes.h72
-rw-r--r--backend/dvi/mdvi-lib/dviread.c1585
-rw-r--r--backend/dvi/mdvi-lib/files.c80
-rw-r--r--backend/dvi/mdvi-lib/font.c519
-rw-r--r--backend/dvi/mdvi-lib/fontmap.c1174
-rw-r--r--backend/dvi/mdvi-lib/fontmap.h82
-rw-r--r--backend/dvi/mdvi-lib/fontsrch.c371
-rw-r--r--backend/dvi/mdvi-lib/gf.c395
-rw-r--r--backend/dvi/mdvi-lib/hash.c224
-rw-r--r--backend/dvi/mdvi-lib/hash.h49
-rw-r--r--backend/dvi/mdvi-lib/list.c120
-rw-r--r--backend/dvi/mdvi-lib/mdvi.h623
-rw-r--r--backend/dvi/mdvi-lib/pagesel.c491
-rw-r--r--backend/dvi/mdvi-lib/paper.c171
-rw-r--r--backend/dvi/mdvi-lib/paper.h32
-rw-r--r--backend/dvi/mdvi-lib/pk.c570
-rw-r--r--backend/dvi/mdvi-lib/private.h65
-rw-r--r--backend/dvi/mdvi-lib/setup.c48
-rw-r--r--backend/dvi/mdvi-lib/sp-epsf.c311
-rw-r--r--backend/dvi/mdvi-lib/special.c249
-rw-r--r--backend/dvi/mdvi-lib/sysdeps.h116
-rw-r--r--backend/dvi/mdvi-lib/t1.c630
-rw-r--r--backend/dvi/mdvi-lib/tfm.c214
-rw-r--r--backend/dvi/mdvi-lib/tfmfile.c747
-rw-r--r--backend/dvi/mdvi-lib/tt.c495
-rw-r--r--backend/dvi/mdvi-lib/util.c550
-rw-r--r--backend/dvi/mdvi-lib/vf.c241
-rw-r--r--backend/dvi/texmfcnf.c64
-rw-r--r--backend/dvi/texmfcnf.h34
-rw-r--r--backend/impress/Makefile.am57
-rw-r--r--backend/impress/common.h40
-rw-r--r--backend/impress/document.c140
-rw-r--r--backend/impress/f_oasis.c170
-rw-r--r--backend/impress/f_oo13.c181
-rw-r--r--backend/impress/iksemel.c1882
-rw-r--r--backend/impress/iksemel.h402
-rw-r--r--backend/impress/imposter.h84
-rw-r--r--backend/impress/impress-document.c548
-rw-r--r--backend/impress/impress-document.h39
-rw-r--r--backend/impress/impressdocument.evince-backend.in4
-rw-r--r--backend/impress/internal.h85
-rw-r--r--backend/impress/r_back.c46
-rw-r--r--backend/impress/r_draw.c120
-rw-r--r--backend/impress/r_geometry.c208
-rw-r--r--backend/impress/r_gradient.c387
-rw-r--r--backend/impress/r_style.c111
-rw-r--r--backend/impress/r_text.c386
-rw-r--r--backend/impress/render.c54
-rw-r--r--backend/impress/zip.c349
-rw-r--r--backend/impress/zip.h18
-rw-r--r--backend/pdf/Makefile.am34
-rw-r--r--backend/pdf/ev-poppler.cc3290
-rw-r--r--backend/pdf/ev-poppler.h40
-rw-r--r--backend/pdf/pdfdocument.evince-backend.in6
-rw-r--r--backend/pixbuf/Makefile.am30
-rw-r--r--backend/pixbuf/pixbuf-document.c208
-rw-r--r--backend/pixbuf/pixbuf-document.h38
-rw-r--r--backend/pixbuf/pixbufdocument.evince-backend.in4
-rw-r--r--backend/ps/Makefile.am32
-rw-r--r--backend/ps/ev-spectre.c473
-rw-r--r--backend/ps/ev-spectre.h48
-rw-r--r--backend/ps/psdocument.evince-backend.in5
-rw-r--r--backend/tiff/Makefile.am33
-rw-r--r--backend/tiff/tiff-document.c533
-rw-r--r--backend/tiff/tiff-document.h38
-rw-r--r--backend/tiff/tiff2ps.c1872
-rw-r--r--backend/tiff/tiff2ps.h30
-rw-r--r--backend/tiff/tiffdocument.evince-backend.in4
-rw-r--r--config.h.in~191
-rw-r--r--configure.ac884
-rw-r--r--cut-n-paste/Makefile.am3
-rw-r--r--cut-n-paste/gimpcellrenderertoggle/Makefile.am38
-rw-r--r--cut-n-paste/gimpcellrenderertoggle/gimpcellrenderertoggle.c492
-rw-r--r--cut-n-paste/gimpcellrenderertoggle/gimpcellrenderertoggle.h77
-rw-r--r--cut-n-paste/gimpcellrenderertoggle/gimpwidgetsmarshal.list26
-rw-r--r--cut-n-paste/smclient/Makefile.am42
-rw-r--r--cut-n-paste/smclient/eggdesktopfile.c1477
-rw-r--r--cut-n-paste/smclient/eggdesktopfile.h159
-rw-r--r--cut-n-paste/smclient/eggsmclient-osx.c235
-rw-r--r--cut-n-paste/smclient/eggsmclient-private.h53
-rw-r--r--cut-n-paste/smclient/eggsmclient-win32.c353
-rw-r--r--cut-n-paste/smclient/eggsmclient-xsmp.c1370
-rw-r--r--cut-n-paste/smclient/eggsmclient.c589
-rw-r--r--cut-n-paste/smclient/eggsmclient.h117
-rw-r--r--cut-n-paste/synctex/Makefile.am14
-rw-r--r--cut-n-paste/synctex/synctex_parser.c4171
-rw-r--r--cut-n-paste/synctex/synctex_parser.h345
-rw-r--r--cut-n-paste/synctex/synctex_parser_utils.c462
-rw-r--r--cut-n-paste/synctex/synctex_parser_utils.h123
-rw-r--r--cut-n-paste/toolbar-editor/Makefile.am108
-rw-r--r--cut-n-paste/toolbar-editor/egg-editable-toolbar.c1828
-rw-r--r--cut-n-paste/toolbar-editor/egg-editable-toolbar.h91
-rw-r--r--cut-n-paste/toolbar-editor/egg-toolbar-editor.c672
-rw-r--r--cut-n-paste/toolbar-editor/egg-toolbar-editor.h63
-rw-r--r--cut-n-paste/toolbar-editor/egg-toolbars-model.c987
-rw-r--r--cut-n-paste/toolbar-editor/egg-toolbars-model.h190
-rw-r--r--cut-n-paste/toolbar-editor/eggmarshalers.list1
-rw-r--r--cut-n-paste/totem-screensaver/Makefile.am16
-rw-r--r--cut-n-paste/totem-screensaver/README3
-rw-r--r--cut-n-paste/totem-screensaver/totem-scrsaver.c554
-rw-r--r--cut-n-paste/totem-screensaver/totem-scrsaver.h57
-rw-r--r--cut-n-paste/zoom-control/Makefile.am16
-rw-r--r--cut-n-paste/zoom-control/ephy-zoom-action.c336
-rw-r--r--cut-n-paste/zoom-control/ephy-zoom-action.h68
-rw-r--r--cut-n-paste/zoom-control/ephy-zoom-control.c345
-rw-r--r--cut-n-paste/zoom-control/ephy-zoom-control.h63
-rw-r--r--cut-n-paste/zoom-control/ephy-zoom.c68
-rw-r--r--cut-n-paste/zoom-control/ephy-zoom.h81
-rw-r--r--data/Makefile.am109
-rw-r--r--data/evince-previewer-ui.xml34
-rw-r--r--data/evince-toolbar.xml39
-rw-r--r--data/evince-ui.xml138
-rw-r--r--data/evince.141
-rw-r--r--data/evince.convert2
-rw-r--r--data/evince.desktop.in.in17
-rw-r--r--data/evince.icobin0 -> 24998 bytes
-rw-r--r--data/hand-open.pngbin0 -> 1088 bytes
-rw-r--r--data/icons/16x16/Makefile.am3
-rw-r--r--data/icons/16x16/actions/Makefile.am27
-rw-r--r--data/icons/16x16/actions/object-rotate-left.pngbin0 -> 607 bytes
-rw-r--r--data/icons/16x16/actions/object-rotate-right.pngbin0 -> 632 bytes
-rw-r--r--data/icons/16x16/actions/view-page-continuous.pngbin0 -> 446 bytes
-rw-r--r--data/icons/16x16/actions/view-page-continuous.xcfbin0 -> 2190 bytes
-rw-r--r--data/icons/16x16/actions/view-page-facing.pngbin0 -> 471 bytes
-rw-r--r--data/icons/16x16/actions/view-page-facing.xcfbin0 -> 2158 bytes
-rw-r--r--data/icons/16x16/actions/zoom-fit-height.pngbin0 -> 811 bytes
-rw-r--r--data/icons/16x16/actions/zoom-fit-page.svg282
-rw-r--r--data/icons/16x16/actions/zoom-fit-width.pngbin0 -> 771 bytes
-rw-r--r--data/icons/16x16/actions/zoom-fit-width.svg278
-rw-r--r--data/icons/16x16/actions/zoom.pngbin0 -> 876 bytes
-rw-r--r--data/icons/16x16/actions/zoom.svg247
-rw-r--r--data/icons/16x16/apps/Makefile.am16
-rw-r--r--data/icons/16x16/apps/evince.pngbin0 -> 840 bytes
-rw-r--r--data/icons/16x16/mimetypes/Makefile.am14
-rw-r--r--data/icons/16x16/mimetypes/x-office-presentation.pngbin0 -> 668 bytes
-rw-r--r--data/icons/22x22/Makefile.am3
-rw-r--r--data/icons/22x22/actions/Makefile.am28
-rw-r--r--data/icons/22x22/actions/eye.pngbin0 -> 617 bytes
-rw-r--r--data/icons/22x22/actions/object-rotate-left.pngbin0 -> 911 bytes
-rw-r--r--data/icons/22x22/actions/object-rotate-right.pngbin0 -> 939 bytes
-rw-r--r--data/icons/22x22/actions/view-page-continuous.pngbin0 -> 722 bytes
-rw-r--r--data/icons/22x22/actions/view-page-continuous.xcfbin0 -> 4004 bytes
-rw-r--r--data/icons/22x22/actions/view-page-facing.pngbin0 -> 483 bytes
-rw-r--r--data/icons/22x22/actions/view-page-facing.xcfbin0 -> 1871 bytes
-rw-r--r--data/icons/22x22/actions/zoom-fit-page.pngbin0 -> 1377 bytes
-rw-r--r--data/icons/22x22/actions/zoom-fit-page.svg254
-rw-r--r--data/icons/22x22/actions/zoom-fit-width.pngbin0 -> 1405 bytes
-rw-r--r--data/icons/22x22/actions/zoom-fit-width.svg252
-rw-r--r--data/icons/22x22/actions/zoom.pngbin0 -> 1294 bytes
-rw-r--r--data/icons/22x22/actions/zoom.svg215
-rw-r--r--data/icons/22x22/apps/Makefile.am16
-rw-r--r--data/icons/22x22/apps/evince.pngbin0 -> 1209 bytes
-rw-r--r--data/icons/22x22/mimetypes/Makefile.am14
-rw-r--r--data/icons/22x22/mimetypes/x-office-presentation.pngbin0 -> 1024 bytes
-rw-r--r--data/icons/24x24/Makefile.am3
-rw-r--r--data/icons/24x24/actions/Makefile.am23
-rw-r--r--data/icons/24x24/actions/object-rotate-left.pngbin0 -> 924 bytes
-rw-r--r--data/icons/24x24/actions/object-rotate-right.pngbin0 -> 943 bytes
-rw-r--r--data/icons/24x24/actions/stock_filters-invert.pngbin0 -> 402 bytes
-rw-r--r--data/icons/24x24/actions/view-page-continuous.pngbin0 -> 724 bytes
-rw-r--r--data/icons/24x24/actions/view-page-facing.pngbin0 -> 471 bytes
-rw-r--r--data/icons/24x24/actions/zoom-fit-height.pngbin0 -> 1146 bytes
-rw-r--r--data/icons/24x24/actions/zoom-fit-width.pngbin0 -> 1170 bytes
-rw-r--r--data/icons/24x24/actions/zoom.pngbin0 -> 1344 bytes
-rw-r--r--data/icons/24x24/apps/Makefile.am16
-rw-r--r--data/icons/24x24/apps/evince.pngbin0 -> 1226 bytes
-rw-r--r--data/icons/24x24/mimetypes/Makefile.am14
-rw-r--r--data/icons/24x24/mimetypes/x-office-presentation.pngbin0 -> 1643 bytes
-rw-r--r--data/icons/32x32/Makefile.am3
-rw-r--r--data/icons/32x32/actions/Makefile.am19
-rw-r--r--data/icons/32x32/actions/object-rotate-left.pngbin0 -> 1319 bytes
-rw-r--r--data/icons/32x32/actions/object-rotate-right.pngbin0 -> 1353 bytes
-rw-r--r--data/icons/32x32/actions/view-page-continuous.pngbin0 -> 849 bytes
-rw-r--r--data/icons/32x32/actions/view-page-facing.pngbin0 -> 943 bytes
-rw-r--r--data/icons/32x32/mimetypes/Makefile.am14
-rw-r--r--data/icons/32x32/mimetypes/x-office-presentation.pngbin0 -> 1618 bytes
-rw-r--r--data/icons/48x48/Makefile.am4
-rw-r--r--data/icons/48x48/actions/Makefile.am20
-rw-r--r--data/icons/48x48/actions/close.pngbin0 -> 363 bytes
-rw-r--r--data/icons/48x48/actions/resize-se.pngbin0 -> 312 bytes
-rw-r--r--data/icons/48x48/actions/resize-sw.pngbin0 -> 295 bytes
-rw-r--r--data/icons/48x48/actions/view-page-continuous.pngbin0 -> 1494 bytes
-rw-r--r--data/icons/48x48/actions/view-page-facing.pngbin0 -> 1485 bytes
-rw-r--r--data/icons/48x48/apps/Makefile.am16
-rw-r--r--data/icons/48x48/apps/evince.pngbin0 -> 3314 bytes
-rw-r--r--data/icons/Makefile.am4
-rw-r--r--data/icons/scalable/Makefile.am3
-rw-r--r--data/icons/scalable/actions/Makefile.am15
-rw-r--r--data/icons/scalable/actions/object-rotate-left.svg208
-rw-r--r--data/icons/scalable/actions/object-rotate-right.svg210
-rw-r--r--data/icons/scalable/apps/Makefile.am16
-rw-r--r--data/icons/scalable/apps/evince.svg500
-rw-r--r--data/icons/scalable/mimetypes/Makefile.am14
-rw-r--r--data/icons/scalable/mimetypes/x-office-presentation.svg686
-rw-r--r--data/org.mate.Evince.gschema.xml.in51
-rw-r--r--data/org.mate.evince.Daemon.service.in3
-rw-r--r--evince-document.h62
-rw-r--r--evince-document.pc.in12
-rw-r--r--evince-view.h34
-rw-r--r--evince-view.pc.in11
-rw-r--r--help/C/evince.xml774
-rw-r--r--help/C/figures/evince_start_window.pngbin0 -> 17271 bytes
-rw-r--r--help/C/legal.xml76
-rw-r--r--help/ChangeLog362
-rw-r--r--help/Makefile.am17
-rw-r--r--help/bg/bg.po1015
-rw-r--r--help/bg/figures/evince_start_window.pngbin0 -> 22691 bytes
-rw-r--r--help/ca/ca.po1281
-rw-r--r--help/ca/figures/evince_start_window.pngbin0 -> 15084 bytes
-rw-r--r--help/cs/cs.po1257
-rw-r--r--help/cs/figures/evince_start_window.pngbin0 -> 16696 bytes
-rw-r--r--help/de/de.po1275
-rw-r--r--help/de/figures/evince_start_window.pngbin0 -> 12327 bytes
-rw-r--r--help/el/el.po943
-rw-r--r--help/el/figures/evince_start_window.pngbin0 -> 21766 bytes
-rw-r--r--help/en_GB/en_GB.po1256
-rw-r--r--help/es/es.po1281
-rw-r--r--help/es/figures/evince_start_window.pngbin0 -> 16965 bytes
-rw-r--r--help/eu/eu.po626
-rw-r--r--help/eu/figures/evince_start_window.pngbin0 -> 18535 bytes
-rw-r--r--help/evince.omf.in11
-rw-r--r--help/fi/fi.po1244
-rw-r--r--help/fi/figures/evince_start_window.pngbin0 -> 16351 bytes
-rw-r--r--help/fr/figures/evince_start_window.pngbin0 -> 15794 bytes
-rw-r--r--help/fr/fr.po1297
-rw-r--r--help/it/figures/evince_start_window.pngbin0 -> 13779 bytes
-rw-r--r--help/it/it.po1285
-rw-r--r--help/ja/figures/evince_start_window.pngbin0 -> 16465 bytes
-rw-r--r--help/ja/ja.po948
-rw-r--r--help/nl/figures/evince_start_window.pngbin0 -> 10972 bytes
-rw-r--r--help/nl/nl.po929
-rw-r--r--help/oc/oc.po817
-rw-r--r--help/pt_BR/pt_BR.po1272
-rw-r--r--help/reference/Makefile.am2
-rw-r--r--help/reference/libdocument/Makefile.am132
-rw-r--r--help/reference/libdocument/libevdocument-docs.xml191
-rw-r--r--help/reference/libdocument/libevdocument-overrides.txt0
-rw-r--r--help/reference/libdocument/libevdocument-sections.txt781
-rw-r--r--help/reference/libdocument/libevdocument.types55
-rw-r--r--help/reference/libdocument/version.xml.in1
-rw-r--r--help/reference/libview/Makefile.am139
-rw-r--r--help/reference/libview/libevview-docs.xml145
-rw-r--r--help/reference/libview/libevview-overrides.txt0
-rw-r--r--help/reference/libview/libevview-sections.txt338
-rw-r--r--help/reference/libview/libevview.types29
-rw-r--r--help/reference/libview/version.xml.in1
-rw-r--r--help/reference/shell/Makefile.am150
-rw-r--r--help/reference/shell/evince-docs.xml163
-rw-r--r--help/reference/shell/evince-overrides.txt0
-rw-r--r--help/reference/shell/evince-sections.txt472
-rw-r--r--help/reference/shell/evince.types24
-rw-r--r--help/reference/shell/version.xml.in1
-rw-r--r--help/ru/ru.po1238
-rw-r--r--help/sl/sl.po906
-rw-r--r--help/sr/sr.po1626
-rw-r--r--help/sv/figures/evince_start_window.pngbin0 -> 17118 bytes
-rw-r--r--help/sv/sv.po900
-rw-r--r--help/uk/figures/evince_start_window.pngbin0 -> 14049 bytes
-rw-r--r--help/uk/uk.po998
-rw-r--r--help/vi/vi.po898
-rw-r--r--help/zh_CN/zh_CN.po1183
-rw-r--r--libdocument/Makefile.am193
-rw-r--r--libdocument/ev-annotation.c1002
-rw-r--r--libdocument/ev-annotation.h161
-rw-r--r--libdocument/ev-async-renderer.c65
-rw-r--r--libdocument/ev-async-renderer.h65
-rw-r--r--libdocument/ev-attachment.c439
-rw-r--r--libdocument/ev-attachment.h79
-rw-r--r--libdocument/ev-backends-manager.c333
-rw-r--r--libdocument/ev-backends-manager.h48
-rw-r--r--libdocument/ev-debug.c177
-rw-r--r--libdocument/ev-debug.h106
-rw-r--r--libdocument/ev-document-annotations.c75
-rw-r--r--libdocument/ev-document-annotations.h99
-rw-r--r--libdocument/ev-document-attachments.c49
-rw-r--r--libdocument/ev-document-attachments.h59
-rw-r--r--libdocument/ev-document-factory.c397
-rw-r--r--libdocument/ev-document-factory.h39
-rw-r--r--libdocument/ev-document-find.c42
-rw-r--r--libdocument/ev-document-find.h65
-rw-r--r--libdocument/ev-document-fonts.c59
-rw-r--r--libdocument/ev-document-fonts.h78
-rw-r--r--libdocument/ev-document-forms.c161
-rw-r--r--libdocument/ev-document-forms.h128
-rw-r--r--libdocument/ev-document-images.c47
-rw-r--r--libdocument/ev-document-images.h65
-rw-r--r--libdocument/ev-document-info.h154
-rw-r--r--libdocument/ev-document-layers.c74
-rw-r--r--libdocument/ev-document-layers.h85
-rw-r--r--libdocument/ev-document-links.c129
-rw-r--r--libdocument/ev-document-links.h87
-rw-r--r--libdocument/ev-document-misc.c400
-rw-r--r--libdocument/ev-document-misc.h67
-rw-r--r--libdocument/ev-document-print.c41
-rw-r--r--libdocument/ev-document-print.h59
-rw-r--r--libdocument/ev-document-security.c48
-rw-r--r--libdocument/ev-document-security.h67
-rw-r--r--libdocument/ev-document-text.c70
-rw-r--r--libdocument/ev-document-text.h75
-rw-r--r--libdocument/ev-document-thumbnails.c63
-rw-r--r--libdocument/ev-document-thumbnails.h69
-rw-r--r--libdocument/ev-document-transition.c57
-rw-r--r--libdocument/ev-document-transition.h64
-rw-r--r--libdocument/ev-document-type-builtins.c.template44
-rw-r--r--libdocument/ev-document-type-builtins.h.template29
-rw-r--r--libdocument/ev-document.c867
-rw-r--r--libdocument/ev-document.h303
-rw-r--r--libdocument/ev-file-exporter.c84
-rw-r--r--libdocument/ev-file-exporter.h101
-rw-r--r--libdocument/ev-file-helpers.c683
-rw-r--r--libdocument/ev-file-helpers.h71
-rw-r--r--libdocument/ev-form-field.c209
-rw-r--r--libdocument/ev-form-field.h214
-rw-r--r--libdocument/ev-image.c181
-rw-r--r--libdocument/ev-image.h68
-rw-r--r--libdocument/ev-init.c154
-rw-r--r--libdocument/ev-init.h41
-rw-r--r--libdocument/ev-layer.c86
-rw-r--r--libdocument/ev-layer.h62
-rw-r--r--libdocument/ev-link-action.c341
-rw-r--r--libdocument/ev-link-action.h73
-rw-r--r--libdocument/ev-link-dest.c511
-rw-r--r--libdocument/ev-link-dest.h95
-rw-r--r--libdocument/ev-link.c202
-rw-r--r--libdocument/ev-link.h55
-rw-r--r--libdocument/ev-mapping-list.c146
-rw-r--r--libdocument/ev-mapping-list.h53
-rw-r--r--libdocument/ev-module.c196
-rw-r--r--libdocument/ev-module.h74
-rw-r--r--libdocument/ev-page.c62
-rw-r--r--libdocument/ev-page.h63
-rw-r--r--libdocument/ev-render-context.c101
-rw-r--r--libdocument/ev-render-context.h70
-rw-r--r--libdocument/ev-selection.c77
-rw-r--r--libdocument/ev-selection.h93
-rw-r--r--libdocument/ev-transition-effect.c224
-rw-r--r--libdocument/ev-transition-effect.h87
-rw-r--r--libdocument/ev-version.h.in69
-rw-r--r--libmisc/Makefile.am22
-rw-r--r--libmisc/ev-page-action-widget.c495
-rw-r--r--libmisc/ev-page-action-widget.h46
-rw-r--r--libmisc/ev-page-action.c239
-rw-r--r--libmisc/ev-page-action.h68
-rw-r--r--libview/Makefile.am163
-rw-r--r--libview/ev-annotation-window.c654
-rw-r--r--libview/ev-annotation-window.h57
-rw-r--r--libview/ev-document-model.c571
-rw-r--r--libview/ev-document-model.h87
-rw-r--r--libview/ev-job-scheduler.c305
-rw-r--r--libview/ev-job-scheduler.h48
-rw-r--r--libview/ev-jobs.c1577
-rw-r--r--libview/ev-jobs.h502
-rw-r--r--libview/ev-loading-window.c278
-rw-r--r--libview/ev-loading-window.h49
-rw-r--r--libview/ev-page-cache.c521
-rw-r--r--libview/ev-page-cache.h71
-rw-r--r--libview/ev-pixbuf-cache.c1192
-rw-r--r--libview/ev-pixbuf-cache.h89
-rw-r--r--libview/ev-print-operation.c2028
-rw-r--r--libview/ev-print-operation.h71
-rw-r--r--libview/ev-stock-icons.c143
-rw-r--r--libview/ev-stock-icons.h57
-rw-r--r--libview/ev-timeline.c450
-rw-r--r--libview/ev-timeline.h90
-rw-r--r--libview/ev-transition-animation.c676
-rw-r--r--libview/ev-transition-animation.h73
-rw-r--r--libview/ev-view-accessible.c911
-rw-r--r--libview/ev-view-accessible.h33
-rw-r--r--libview/ev-view-cursor.c55
-rw-r--r--libview/ev-view-cursor.h47
-rw-r--r--libview/ev-view-marshal.list2
-rw-r--r--libview/ev-view-presentation.c1498
-rw-r--r--libview/ev-view-presentation.h51
-rw-r--r--libview/ev-view-private.h225
-rw-r--r--libview/ev-view-type-builtins.c.template44
-rw-r--r--libview/ev-view-type-builtins.h.template29
-rw-r--r--libview/ev-view.c6274
-rw-r--r--libview/ev-view.h115
-rw-r--r--m4/gtk-doc.m461
-rw-r--r--m4/intltool.m4216
-rw-r--r--m4/libtool.m47831
-rw-r--r--m4/ltoptions.m4369
-rw-r--r--m4/ltsugar.m4123
-rw-r--r--m4/ltversion.m423
-rw-r--r--m4/lt~obsolete.m498
-rw-r--r--m4/mate-doc-utils.m456
-rw-r--r--po/ChangeLog4424
-rw-r--r--po/LINGUAS85
-rw-r--r--po/POTFILES.in66
-rw-r--r--po/POTFILES.skip16
-rw-r--r--po/af.po1423
-rw-r--r--po/ar.po1835
-rw-r--r--po/as.po1624
-rw-r--r--po/ast.po1813
-rw-r--r--po/be.po1354
-rw-r--r--po/[email protected]1428
-rw-r--r--po/bg.po1723
-rw-r--r--po/bn.po1813
-rw-r--r--po/bn_IN.po1647
-rw-r--r--po/br.po1475
-rw-r--r--po/ca.po2211
-rw-r--r--po/[email protected]2211
-rw-r--r--po/cs.po1562
-rw-r--r--po/cy.po1115
-rw-r--r--po/da.po2155
-rw-r--r--po/de.po1812
-rw-r--r--po/dz.po1603
-rw-r--r--po/el.po1709
-rw-r--r--po/[email protected]1537
-rw-r--r--po/en_CA.po1260
-rw-r--r--po/en_GB.po2359
-rw-r--r--po/eo.po1648
-rw-r--r--po/es.po1853
-rw-r--r--po/et.po1344
-rw-r--r--po/eu.po1722
-rw-r--r--po/fa.po1108
-rw-r--r--po/fi.po1764
-rw-r--r--po/fr.po1747
-rw-r--r--po/ga.po1462
-rw-r--r--po/gl.po1757
-rw-r--r--po/gu.po1740
-rw-r--r--po/he.po1719
-rw-r--r--po/hi.po1459
-rw-r--r--po/hu.po1694
-rw-r--r--po/id.po1717
-rw-r--r--po/it.po1742
-rw-r--r--po/ja.po1739
-rw-r--r--po/ka.po1251
-rw-r--r--po/kk.po1672
-rw-r--r--po/kn.po1620
-rw-r--r--po/ko.po1707
-rw-r--r--po/ks.po1393
-rw-r--r--po/ku.po1287
-rw-r--r--po/lt.po1818
-rw-r--r--po/lv.po1783
-rw-r--r--po/mai.po1404
-rw-r--r--po/mg.po1379
-rw-r--r--po/mk.po1331
-rw-r--r--po/ml.po1638
-rw-r--r--po/mn.po1601
-rw-r--r--po/mr.po1711
-rw-r--r--po/ms.po1680
-rw-r--r--po/nb.po1710
-rw-r--r--po/nds.po1464
-rw-r--r--po/ne.po1302
-rw-r--r--po/nl.po1801
-rw-r--r--po/nn.po1920
-rw-r--r--po/oc.po1304
-rw-r--r--po/or.po1598
-rw-r--r--po/pa.po1950
-rw-r--r--po/pl.po1723
-rw-r--r--po/ps.po1241
-rw-r--r--po/pt.po2105
-rw-r--r--po/pt_BR.po1969
-rw-r--r--po/ro.po1797
-rw-r--r--po/ru.po1676
-rw-r--r--po/rw.po841
-rw-r--r--po/si.po1363
-rw-r--r--po/sk.po1323
-rw-r--r--po/sl.po1776
-rw-r--r--po/sq.po1322
-rw-r--r--po/sr.po2123
-rw-r--r--po/[email protected]2123
-rw-r--r--po/sv.po1755
-rw-r--r--po/ta.po1770
-rw-r--r--po/te.po1790
-rw-r--r--po/th.po2196
-rw-r--r--po/tr.po1477
-rw-r--r--po/uk.po1546
-rw-r--r--po/vi.po1424
-rw-r--r--po/wa.po682
-rw-r--r--po/zh_CN.po1853
-rw-r--r--po/zh_HK.po1926
-rw-r--r--po/zh_TW.po1941
-rw-r--r--previewer/Makefile.am37
-rw-r--r--previewer/ev-previewer-window.c723
-rw-r--r--previewer/ev-previewer-window.h51
-rw-r--r--previewer/ev-previewer.c205
-rw-r--r--properties/Makefile.am35
-rw-r--r--properties/ev-properties-main.c159
-rw-r--r--properties/ev-properties-view.c399
-rw-r--r--properties/ev-properties-view.h50
-rw-r--r--shell/Makefile.am160
-rw-r--r--shell/eggfindbar.c740
-rw-r--r--shell/eggfindbar.h82
-rw-r--r--shell/ev-annotation-properties-dialog.c327
-rw-r--r--shell/ev-annotation-properties-dialog.h54
-rw-r--r--shell/ev-application.c1151
-rw-r--r--shell/ev-application.h88
-rw-r--r--shell/ev-convert-metadata.c302
-rw-r--r--shell/ev-daemon.c553
-rw-r--r--shell/ev-file-monitor.c168
-rw-r--r--shell/ev-file-monitor.h57
-rw-r--r--shell/ev-history.c148
-rw-r--r--shell/ev-history.h65
-rw-r--r--shell/ev-keyring.c116
-rw-r--r--shell/ev-keyring.h37
-rw-r--r--shell/ev-marshal.list1
-rw-r--r--shell/ev-media-player-keys.c233
-rw-r--r--shell/ev-media-player-keys.h49
-rw-r--r--shell/ev-message-area.c354
-rw-r--r--shell/ev-message-area.h74
-rw-r--r--shell/ev-metadata.c313
-rw-r--r--shell/ev-metadata.h69
-rw-r--r--shell/ev-navigation-action-widget.c214
-rw-r--r--shell/ev-navigation-action-widget.h46
-rw-r--r--shell/ev-navigation-action.c247
-rw-r--r--shell/ev-navigation-action.h64
-rw-r--r--shell/ev-open-recent-action.c101
-rw-r--r--shell/ev-open-recent-action.h52
-rw-r--r--shell/ev-password-view.c434
-rw-r--r--shell/ev-password-view.h59
-rw-r--r--shell/ev-progress-message-area.c198
-rw-r--r--shell/ev-progress-message-area.h64
-rw-r--r--shell/ev-properties-dialog.c138
-rw-r--r--shell/ev-properties-dialog.h47
-rw-r--r--shell/ev-properties-fonts.c224
-rw-r--r--shell/ev-properties-fonts.h48
-rw-r--r--shell/ev-properties-license.c169
-rw-r--r--shell/ev-properties-license.h50
-rw-r--r--shell/ev-sidebar-annotations.c542
-rw-r--r--shell/ev-sidebar-annotations.h62
-rw-r--r--shell/ev-sidebar-attachments.c707
-rw-r--r--shell/ev-sidebar-attachments.h62
-rw-r--r--shell/ev-sidebar-layers.c411
-rw-r--r--shell/ev-sidebar-layers.h58
-rw-r--r--shell/ev-sidebar-links.c760
-rw-r--r--shell/ev-sidebar-links.h66
-rw-r--r--shell/ev-sidebar-page.c92
-rw-r--r--shell/ev-sidebar-page.h64
-rw-r--r--shell/ev-sidebar-thumbnails.c974
-rw-r--r--shell/ev-sidebar-thumbnails.h59
-rw-r--r--shell/ev-sidebar.c543
-rw-r--r--shell/ev-sidebar.h67
-rw-r--r--shell/ev-utils.c389
-rw-r--r--shell/ev-utils.h47
-rw-r--r--shell/ev-window-title.c203
-rw-r--r--shell/ev-window-title.h47
-rw-r--r--shell/ev-window.c7149
-rw-r--r--shell/ev-window.h93
-rw-r--r--shell/evince-icon.rc1
-rw-r--r--shell/main.c328
-rw-r--r--test/Makefile.am19
-rw-r--r--test/test-encrypt.pdfbin0 -> 26501 bytes
-rw-r--r--test/test-links.pdfbin0 -> 15151 bytes
-rw-r--r--test/test-mime.binbin0 -> 15151 bytes
-rw-r--r--test/test-page-labels.pdfbin0 -> 10150 bytes
-rwxr-xr-xtest/test1.py36
-rwxr-xr-xtest/test2.py28
-rwxr-xr-xtest/test3.py15
-rwxr-xr-xtest/test4.py20
-rwxr-xr-xtest/test5.py24
-rwxr-xr-xtest/test6.py31
-rwxr-xr-xtest/test7.py33
-rw-r--r--thumbnailer/Makefile.am83
-rw-r--r--thumbnailer/evince-thumbnailer-comics.schemas.in106
-rw-r--r--thumbnailer/evince-thumbnailer-djvu.schemas.in30
-rw-r--r--thumbnailer/evince-thumbnailer-dvi.schemas.in83
-rw-r--r--thumbnailer/evince-thumbnailer-ps.schemas.in154
-rw-r--r--thumbnailer/evince-thumbnailer.c309
-rw-r--r--thumbnailer/evince-thumbnailer.schemas.in80
602 files changed, 287728 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 00000000..64fbaefb
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,12 @@
+The Xpdf software and documentation are
+Copyright 1996-2003 Glyph & Cog, LLC.
+
+Martin Kretzschmar <[email protected]>
+Marco Pesenti Gritti <[email protected]>
+Jonathan Blandford <[email protected]>
+Nickolay V. Shmyrev <[email protected]>
+Bryan Clark <[email protected]>
+Carlos Garcia Campos <[email protected]>
+Wouter Bolsterlee <[email protected]>
+
+And many others
diff --git a/COPYING b/COPYING
new file mode 100644
index 00000000..ecb192b2
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+ 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 Library 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 Library General
+Public License instead of this License.
diff --git a/MAINTAINERS b/MAINTAINERS
new file mode 100644
index 00000000..3c7bfb8e
--- /dev/null
+++ b/MAINTAINERS
@@ -0,0 +1,11 @@
+Jonathan Blandford
+Userid: jrb
+
+Nickolay V. Shmyrev
+Userid: nshmyrev
+
+Carlos Garcia Campos
+Userid: carlosgc
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 00000000..2468dae4
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,116 @@
+ACLOCAL_AMFLAGS = -I m4
+
+# Set the minimum required Windows version to Windows 2000 (0x0500).
+if PLATFORM_WIN32
+AM_CPPFLAGS = -D_WIN32_WINNT=0x0500
+endif
+
+SUBDIRS = \
+ cut-n-paste \
+ data \
+ libdocument \
+ backend \
+ libview \
+ libmisc \
+ properties \
+ shell \
+ po \
+ help
+
+if ENABLE_TESTS
+SUBDIRS += test
+endif
+
+if ENABLE_THUMBNAILER
+SUBDIRS += thumbnailer
+endif
+
+if ENABLE_PREVIEWER
+SUBDIRS += previewer
+endif
+
+NULL =
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = \
+ evince-document-$(EV_API_VERSION).pc \
+ evince-view-$(EV_API_VERSION).pc \
+ $(NULL)
+
+headerdir = $(includedir)/evince/$(EV_API_VERSION)
+header_DATA = \
+ evince-document.h \
+ evince-view.h \
+ $(NULL)
+
+# Applications
+
+intltool_extra = intltool-extract.in intltool-merge.in intltool-update.in
+
+EXTRA_DIST = \
+ $(intltool_extra) \
+ $(header_DATA) \
+ autogen.sh \
+ mate-doc-utils.make \
+ MAINTAINERS
+
+DISTCLEANFILES = \
+ mate-doc-utils.make \
+ intltool-extract \
+ intltool-merge \
+ intltool-update
+
+MAINTAINERCLEANFILES = \
+ ChangeLog \
+ $(srcdir)/INSTALL \
+ $(srcdir)/aclocal.m4 \
+ $(srcdir)/autoscan.log \
+ $(srcdir)/compile \
+ $(srcdir)/config.guess \
+ $(srcdir)/config.h.in \
+ $(srcdir)/config.sub \
+ $(srcdir)/configure \
+ $(srcdir)/configure.scan \
+ $(srcdir)/depcomp \
+ $(srcdir)/install-sh \
+ $(srcdir)/ltmain.sh \
+ $(srcdir)/missing \
+ $(srcdir)/mkinstalldirs \
+ $(srcdir)/omf.make \
+ $(srcdir)/xmldocs.make \
+ $(srcdir)/gtk-doc.make \
+ $(srcdir)/po/Makefile.in.in \
+ `find "$(srcdir)" -type f -name Makefile.in -print`
+
+DISTCHECK_CONFIGURE_FLAGS = \
+ --disable-schemas-install \
+ --disable-scrollkeeper \
+ --enable-gtk-doc \
+ --disable-caja \
+ --disable-tests \
+ --disable-silent-rules
+
+# Ignore scrollkeeper issues for now. @#*$& scrollkeeper
+distuninstallcheck_listfiles = find . -type f -print | grep -v scrollkeeper | grep -v /share/mate/help/ | grep -v \.omf
+
+distclean-local:
+ if test "$(srcdir)" = "."; then :; else \
+ rm -f ChangeLog; \
+ fi
+
+ChangeLog:
+ $(AM_V_GEN) if test -d "$(srcdir)/.git"; then \
+ (GIT_DIR=$(top_srcdir)/.git ./missing --run git log -M -C --name-status --date=short --no-color) | fmt --split-only > [email protected] \
+ && mv -f [email protected] $@ \
+ || ($(RM) [email protected]; \
+ echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
+ (test -f $@ || echo git log is required to generate this file >> $@)); \
+ else \
+ test -f $@ || \
+ (echo A git checkout and git log is required to generate ChangeLog >&2 && \
+ echo A git checkout and git log is required to generate this file >> $@); \
+ fi
+
+.PHONY: ChangeLog
+
+-include $(top_srcdir)/git.mk
diff --git a/NEWS b/NEWS
new file mode 100644
index 00000000..0af06a59
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,2810 @@
+================
+Evince 2.32.0
+================
+
+Bug fixes:
+
+ * Make "Shrink to Printable Area" default option for Page Scaling
+ (Marek Kasik)
+ * Fix build with --disable-dbus (#629498, Didier Roche)
+
+Translation updates:
+
+ * Damyan Ivanov (bg)
+ * Ivar Smolin (et)
+ * Iñaki Larrañaga Murgoitio (eu)
+ * Milan Bouchet-Valat (fr)
+ * Francesco Marletta (it)
+ * Shushi Kurose (ja)
+ * Changwoo Ryu (ko)
+ * Wouter Bolsterlee (nl)
+ * Piotr Drąg (pl)
+ * Henrique P. Machado (pt_BR)
+ * Lucian Adrian Grijincu (ro)
+ * Yuri Myasoedov (ru)
+
+================
+Evince 2.31.92
+================
+
+Bug fixes:
+
+ * Change gsettings schema path from /apps/evince to
+ /org/mate/evince (Christian Persch)
+ * A D-Bus signal is now emitted when document is loaded (#626561,
+ José Aliste)
+ * Use MateConf again for lockdown settings (#628945, Christian Persch)
+ * Fix a crash during selection when evince is built with gtk2
+ (Carlos Garcia Campos)
+ * Evince daemon can spawn an evince instance when finding a
+ document (#625971, José Aliste)
+
+Translation updates:
+
+ * Khaled Hosny (ar)
+ * Kenneth Nielsen (da)
+ * Christian Kirbach (de)
+ * Michael Kotsarinis (el)
+ * Bruce Cowan (en_GB)
+ * Ivar Smolin (et)
+ * Gabor Kelemen (hu)
+ * Andika Triwidada (id)
+ * Shushi Kurose (ja)
+ * Baurzhan Muftakhidinov (kk)
+ * Aurimas Černius (lt)
+ * Kjartan Maraas (nb)
+ * Duarte Loreto (pt)
+ * Miloš Popović (sr@latin)
+ * Милош Поповић (sr)
+ * Daniel Nylander (sv)
+ * 朱涛 (zh_CN)
+ * Chao-Hsiung Liao (zh_HK)
+ * Chao-Hsiung Liao (zh_TW)
+
+================
+Evince 2.31.90
+================
+
+Bug fixes:
+
+ * Do not jump to link dest when clicking with GDK_CONTROL_MASK
+ (#626407, Carlos Garcia Campos)
+ * Use GDK_BLANK_CURSOR instead of creating our own empty cursor
+ (Carlos Garcia Campos)
+ * Improve findbar message when there are no matches (#626334,
+ Carlos Garcia Campos, José Aliste)
+ * Remove #ifdefs for old cairo versions (#626147, Juanjo Marín)
+
+Translation updates:
+
+ * Paul Seyfert (de)
+ * Jorge González (es)
+ * Fran Dieguez (gl)
+ * Yaron Shahrabani (he)
+ * Torstein Adolf Winterseth (nn)
+ * A S Alam (pa)
+ * Matej Urbančič (sl)
+ * Xhacker Liu (zh_CN)
+
+================
+Evince 2.31.6.1
+================
+
+New Features and UI Improvements:
+
+ * Add --with-gtk=2.0|3.0 configure flag (#626030, Vincent Untz)
+
+Bug fixes:
+
+ * Fix a crash with DVI files and empty glyphs (#600552, Marek Kasik)
+ * Fix a crash when a page is manually entered (#624936, Marek Kasik)
+
+Translation updates:
+
+ * Jorge González (es)
+ * Fran Dieguez (gl)
+ * Yaron Shahrabani (he)
+ * Andika Triwidada (id)
+ * Kjartan Maraas (nb)
+ * Matej Urbančič (sl)
+ * Dr.T.Vasudevan (ta)
+
+================
+Evince 2.31.6
+================
+
+New Features and UI Improvements:
+
+ * Preliminary support for adding new annotations (#168304, Carlos
+ Garcia Campos)
+ * Add confirmation dialog on closing window when document has been
+ modified (Form fields have been filled out or annots have been
+ added/modified) (#168304, Carlos Garcia Campos)
+ * Add an action to edit menu to save current settings as
+ default. Default settings will be used only for new documents
+ that don't have metadata (#620325, Carlos Garcia Campos)
+ * Migrate lockdown to gsettings (Carlos Garcia Campos)
+
+Bug fixes:
+
+ * Update synctex parser from TexLive SVN repository (#624532,
+ Marek Kasik)
+ * Fix a crash when loading document with inverted colors enabled
+ (Carlos Garcia Campos)
+ * Several build improvements (Hib Eris)
+ * Fix memory leaks when document is reloaded (Carlos Garcia Campos)
+ * Fix position of window annotations when moved by the user (Jose
+ Aliste, Carlos Garcia Campos)
+ * Fix build with poppler 0.14 (#624904, Carlos Garcia Campos)
+ * Use cairo instead of gdk_draw API (Carlos Garcia Campos)
+ * Only set text and text_layout flags in page cache when a11y
+ might be enabled (Carlos Garcia Campos)
+
+Translation updates:
+
+ * Xandru Armesto (ast)
+ * Mario Blättermann (de)
+ * Jorge González (es)
+ * Ivar Smolin (et)
+ * Fran Diéguez (gl)
+ * Sweta Kothari (gu)
+ * Yaron Shahrabani (he)
+ * Shankar Prasad (kn)
+ * Sandeep Shedmake (mr)
+ * Kjartan Maraas (nb)
+ * Daniel Nylander (sv)
+ * Krishna Babu K (te)
+ * Eleanor Chen (zh_CN)
+ * Chao-Hsiung Liao (zh_HK)
+ * Chao-Hsiung Liao (zh_TW)
+
+================
+Evince 2.31.5
+================
+
+New Features and UI Improvements:
+
+ * Add a new sidebar page to show the list of annotations (Carlos
+ Garcia Campos)
+ * Finish DBus API for synctex support (#543503, Jose Aliste)
+ * Switch to GTK+ 3
+
+Bug fixes:
+
+ * Make sure annot popups never show up outside the main window
+ * (#604125, Carlos Garcia Campos)
+ * Set word wrapping mode for text in popup annotations (#623456,
+
+Translation updates:
+
+ * Baurzhan Muftakhidinov (kk)
+ * 朱涛 (zh_CN)
+
+================
+Evince 2.31.4.1
+================
+
+Bug fixes:
+
+ * Fix build when poppler_page_get_text_layout is not available
+ (#623080, Carlos Garcia Campos)
+
+================
+Evince 2.31.4
+================
+
+New Features and UI Improvements:
+
+ * Implement AtkText interface in EvView (#309015, Daniel Garcia)
+ * Add preliminary SyncTex support (#543503, Jose Aliste, Carlos
+ Garcia Campos)
+
+Bug fixes:
+
+ * Don't save print document settings into global file (#530018,
+ Carlos Garcia Campos)
+ * Reload presentation view when document changes (#621750, Carlos
+ Garcia Campos)
+ * Remove hard-coded reason in totem-scrsaver (#621386, Bastien
+ Nocera)
+ * Fix opening cbz files with [] in archive (#619248, Juanjo Marín)
+
+Translation updates:
+
+ * Carles Ferrando Garcia (ca)
+ * Kristjan SCHMIDT (eo)
+ * Fran Diéguez (gl)
+ * Kjartan Maraas (nb)
+ * Matej Urbančič (sl)
+ * 杨章 (zh_CN)
+
+================
+Evince 2.31.3
+================
+
+New Features and UI Improvements:
+
+ * Use a dynamic pixbuf cache size based on document page
+ size. It allows us caching more pages for lower scale factors
+ and increase zoom level by caching fewer pages. (#303365, Carlos
+ Garcia Campos)
+
+Bug fixes:
+
+ * Fix fade animations (#619825, Carlos Garcia Campos)
+ * Fix a crash when starting animation in presentation mode
+ (#619948, Carlos Garcia Campos)
+ * Remove set_focus_on_map and set NOTIFICATION type hint for
+ loading window. It prevents focus stealing and skips taskbar and
+ pager hints (#620548, Carlos Garcia Campos)
+ * Fix build with GSEAL enabled (#605776, Carlos Garcia Campos)
+ * Remove circular dependencies in Makefiles and fix some compiler
+ warnings (Hib Eris)
+
+Translation updates:
+
+ * Jorge González (es)
+ * Ivar Smolin (et)
+ * Fran Diéguez (gl)
+ * Yaron Shahrabani (he)
+ * Kjartan Maraas (nb)
+ * Sira Nokyoongtong (th)
+ * 甘露(Gan Lu) (zh_CN)
+
+================
+Evince 2.31.2
+================
+
+New Features and UI Improvements:
+
+ * Port to GDBus (Christian Persch, Carlos Garcia Campos)
+ * Do not use the mateconf gsettings backend any more (#619335,
+ Matthias Clasen)
+ * Use cairo to draw search results (Carlos Garcia Campos)
+ * Use a loading window to show loading progress information
+ instead of the old 'Loading ...' text rendered on every page
+ (Carlos Garcia Campos)
+
+Bug fixes:
+
+ * Fix localization on Windows (#610548, Hib Eris)
+ * Convert relative path to absolute path for evince-previewer
+ (Marek Kasik)
+ * Fix opening files with '#' in its name (#616515, Carlos Garcia
+ Campos)
+ * Accept keyboard focus in window annotations (Carlos Garcia
+ Campos)
+ * Fix most of the GSEAL build issues (#605776, Carlos Garcia
+ Campos)
+ * Add .c files to the introspection sources (#617736, Christian
+ Persch)
+
+Translation updates:
+
+ * Thomas Thurman (en@shaw)
+ * Kjartan Maraas (nb)
+ * Wouter Bolsterlee (nl)
+ * Manoj Kumar Giri (or)
+
+================
+Evince 2.31.1
+================
+
+New Features and UI Improvements:
+
+ * Add saved documents with "save a copy" to recent file list
+ (#617580, Carlos Garcia Campos)
+ * Port override_restrictions mateconf key to GSettings (Carlos Garcia
+ Campos)
+ * Add icons to the recent items, and always show them in menu
+ (#614400, Christian Persch)
+
+Bug fixes:
+
+ * Invert colors of pages and thumbanils when loading in inverted
+ color mode (#616110, #616111, Juanjo Marín)
+ * Take default settings from last document opened. Fixes
+ regression caused by migration to gio metadata (#606090,
+ Carlos Garcia Campos)
+ * Ellipsise the recent action's label (Christian Persch)
+ * Make inverted colors mode work in presentation mode too
+ (#614693, Carlos Garcia Campos)
+ * Respect MATE22_USER_DIR env variable (#613637, Ray Strode)
+ * Fix loading of local documents when uri contains a page
+ destination (#616515, Carlos Garcia Campos)
+ * Make mate-doc-utils optional (Hib Eris)
+ * Update icons to match mate-icon-theme appearance (#614747,
+ Hylke Bons, Carlos Garcia Campos)
+ * Make sure there's a new valid page range before updating caches
+ (fdo#27599, Carlos Garcia Campos)
+ * Fix .desktop file according to CorrectDesktopFiles GNIOME Goal
+ (#592733, Javier Jardón)
+ * Update FSF address everywhere (#514607, Arun Persaud)
+ * Fix loading of compressed password-protected documents (#613959,
+ Carlos Garcia Campos)
+ * Add command line option to open document at a given page index
+ (#613449, Daniel M. German)
+ * Fix build with GSEAL_ENABLE for libview and libdocument
+ (#605776, Hib Eris, Carlos Garcia Campos)
+ * Close previewer window with control + w (#612972, Carlos Garcia
+ Campos)
+ * Fix keybindings in previewer window (#612972, Carlos Garcia
+ Campos)
+
+Translation updates:
+
+ * Runa Bhattacharjee (bn_IN)
+ * Gil Forcada (ca)
+ * Gil Forcada (ca@valencia)
+ * Jorge González (es)
+ * Fran Diéguez (gl)
+ * Shankar Prasad (kn)
+ * Ani Peter (ml)
+ * Sandeep Shedmake (mr)
+ * Wouter Bolsterlee (nl)
+ * Andrej Žnidaršič (sl)
+
+================
+Evince 2.30.0
+================
+
+Bug fixes:
+
+ * Fix scale calculation on rotated monitors in presentation mode
+ (José Aliste, Carlos Garcia Campos)
+ * Save current page when closing window in presentation mode
+ (#612656, Carlos Garcia Campos)
+ * Fix rendering of documents with non uniform page size when in
+ presentation mode (Carlos Garcia Campos)
+ * Use monitor height instead of screen height to calculate page
+ scale in presentation mode (#608924, Carlos Garcia Campos)
+
+Translation updates:
+
+ * Sadia Afroz (bn)
+ * Lucas Lommer (cs)
+ * Kenneth Nielsen (da)
+ * Iñaki Larrañaga Murgoitio (eu)
+ * Tommi Vainikainen (fi)
+ * Gabor Kelemen (hu)
+ * Andika Triwidada (id)
+ * Francesco Marletta (it)
+ * Changwoo Ryu (ko)
+ * Badral (mn)
+ * Nils-Christoph Fiedler (nds)
+ * Wouter Bolsterlee (nl)
+ * A S Alam (pa)
+ * Duarte Loreto (pt)
+ * Daniel Nylander (sv)
+ * Maxim Dziumanenko (uk)
+
+================
+Evince 2.29.92
+================
+
+Bug fixes:
+
+ * Fix build with gtk+ >= 2.19.7
+
+Translation updates:
+
+ * Gil Forcada (ca)
+ * Bruce Cowan (en_GB)
+ * Iñaki Larrañaga Murgoitio (eu)
+ * Gabor Kelemen (hu)
+ * Gintautas Miliauskas (lt)
+ * Anita Reitere (lv)
+ * Umarzuki bin Mochlis Moktar (ms)
+ * Piotr Drąg (pl)
+ * Yuri Kozlov (ru)
+ * Miloš Popović (sr@latin)
+ * Милош Поповић (sr)
+ * Daniel Nylander (sv)
+
+================
+Evince 2.29.91
+================
+
+New Features and UI Improvements:
+
+ * DVI backend support on windows (#602910, Hib Eris)
+
+Documentation fixes:
+
+ * Modernise API docs (Christian Persch)
+
+Bug fixes:
+
+ * Fix dpi calculation (#608586, Juanjo Marín)
+ * Allow adding actions for more than one item in view popup menu
+ (#609497, Carlos Garcia Campos)
+ * Add mateconf schemas for comic cbt files (#609501, Carlos Garcia
+ Campos)
+ * Update totem-scrsaver from totem sources (#610173, Carlos Garcia
+ Campos)
+ * Fix linking with pedantic linkers (#609895, Hib Eris)
+ * Do not link evince shell to poppler directly (#608832, Hib Eris)
+ * Several translatable messages fixed (#608698, Philip Withnall)
+
+Translation updates:
+
+ * Khaled Hosny (ar)
+ * Krasimir \"Bfaf\" Chonov (bg)
+ * Sadia Afroz (bn)
+ * Christian Kirbach (de)
+ * nikosCharonitakis (el)
+ * Philip Withnall (en_GB)
+ * Jorge González (es)
+ * Ivar Smolin (et)
+ * Claude Paroz (fr)
+ * Fran Diéguez (gl)
+ * Hideki Yamane (Debian-JP) (ja)
+ * Kjartan Maraas (nb)
+ * Wouter Bolsterlee (nl)
+ * Henrique P. Machado (pt_BR)
+ * Adi Roiban (ro)
+ * Matej Urbančič (sl)
+ * Dr,T,Vasudevan (ta)
+ * Theppitak Karoonboonyanan (th)
+ * Chao-Hsiung Liao (zh_HK)
+ * Chao-Hsiung Liao (zh_TW)
+
+================
+Evince 2.29.5
+================
+
+New Features and UI Improvements:
+
+ * Make Home/End keys go to first/last page in presentation mode
+ too (#358462, Carlos Garcia Campos)
+ * Allow finish presentation by clicking on end page (#309364,
+ Carlos Garcia Campos)
+ * Add custom print tab to printing dialog with several page scale
+ options (#599468, #599470, #599547, Adrian Johnson)
+ * Add support for remote files in evince thumbnailers (#605218,
+ Carlos Garcia Campos)
+ * Add evince icon to the windows executable (#596401, Hib Eris)
+
+Bug fixes:
+
+ * Fix transition of pages with duration=0 in presentation mode
+ (Carlos Garcia Campos)
+ * Fix vertical white line shown in presentation mode with
+ documents with black background (#438760, Carlos Garcia Campos)
+ * Fix fickering and blank screen issues when changing pages fast
+ in presentation mode (#602738, Carlos Garcia Campos)
+ * Fix printing on Windows (#604705, Hib Eris)
+ * Disable text selection in presentation mode (#605554, Carlos
+ Garcia Campos)
+ * Make comics backend also compile on Windows (#605146, Hib Eris)
+ * Remove comics_regex_quote() in favor of always using
+ g_shell_quote() (#605092, Juanjo Marín)
+ * Properly redrawn properties view when document is reloaded
+ (#605169, Carlos Garcia Campos)
+
+Translation updates:
+
+ * Khaled Hosny (ar)
+ * Jorge González (es)
+ * Kjartan Maraas (nb)
+ * Matej Urbančič (sl)
+ * Daniel Nylander (sv)
+ * Theppitak Karoonboonyanan (th)
+ * Maxim Dziumanenko (uk)
+
+================
+Evince 2.29.4
+================
+
+New Features and UI Improvements:
+
+ * Always show rotate icons (#599398, Carlos Garcia Campos)
+ * EvPrintOperation has been moved to libview so that it can
+ be used by EvView users (#604750, Tomeu Vizoso)
+ * Support for cbt comic files (#588266, Juanjo Marín)
+
+Bug fixes:
+
+ * Do not fail to open external uri links that are relative paths
+ (#604716, Carlos Garcia Campos)
+ * Do not hardcode BINDIR on Windows (#605001, Hib Eris)
+ * Fix a crash in djvu backend on windows (#604919, Hib Eris)
+ * Replace mkdtemp with our own _ev_g_mkdtemp to make it portable
+ (#604917, Hib Eris)
+ * Include a copy of some icons from mate-icon-theme to be used as
+ fallback on platforms like window where mate-icon-theme is not
+ available (#596400, Hib Eris)
+ * Fix 0x0 page size always shown in properties view (Carlos Garcia
+ Campos)
+ * Do not hide page selector widget on invalid input (#603714,
+ Carlos Garcia Campos)
+ * Split EvPixbufCache into dynamic and static data. Static page
+ data (links, annots, images, text and forms) that don't
+ depend on current scale/rotation, have been moved to EvPageCache
+ and are never removed. (#602405, Carlos Garcia Campos)
+ * Fix a typo in EV_RENDER_CONTEXT macro definition (#603857,
+ Gustavo Carneiro)
+ * Code cleanups and improvements in libview (#603858, Carlos
+ Garcia Campos)
+
+Translation updates:
+
+ * Khaled Hosny (ar)
+ * Yaron Shahrabani (he)
+ * Kjartan Maraas (nb)
+ * Matej Urbančič (sl)
+ * Tao Wei (zh_CN)
+
+================
+Evince 2.29.3
+================
+
+New Features and UI Improvements:
+
+ * Add inverted colors view mode (#321823, Juanjo Marín, Carlos
+ Garcia Campos)
+ * Add options to open/save attachment annotations to context menu
+ (Carlos Garcia Campos)
+
+Bug fixes:
+
+ * Fix infinite loop when scrollbar visibility changes in fit-with
+ mode (Carlos Garcia Campos)
+ * Fix rendering issue in dual/continuous mode (#602742, José
+ Aliste)
+ * Do not resize the window when zoom in/out with CTRL+Scroll
+ (#602798, Carlos Garcia Campos)
+ * Keep scroll position when reloading (#602445, Carlos Garcia
+ Campos)
+ * Make "p" and "n" accels unsensitive while searching (Carlos
+ Garcia Campos)
+
+Translation updates:
+
+ * Jorge González (es)
+ * Ivar Smolin (et)
+ * Yaron Shahrabani (he)
+ * Nils-Christoph Fiedler (nds)
+ * Matej Urbančič (sl)
+ * Tao Wei (zh_CN)
+
+================
+Evince 2.29.2
+================
+
+New Features and UI Improvements:
+
+ * Add support for PDF File Attachment Annotations (#601839, Carlos
+ Garcia Campos)
+ * Use "n" and "p" keys for page jump (#601217, Carlos Garcia
+ Campos)
+ * Update actions sensitivity when mateconf keys change (#568433,
+ Carlos Garcia Campos)
+
+Documentation fixes:
+
+ * Make series ID unique (#599726, Christian Persch)
+
+Bug fixes:
+
+ * Fix saving attachments (Carlos Garcia Campos)
+ * Make sure view is redrawn as soon as current page is rendered
+ (#601433, Carlos Garcia Campos)
+ * Fix documentation of default flag values in configure (Emmanuel
+ Fleury)
+ * Do not mark properties name and desc as translatable (#509824,
+ Carlos Garcia Campos)
+ * Fix build with glib < 2.22.0 (#600338, Christian Spurk)
+ * Disable print page setup options according to lockdown (#568433,
+ Carlos Garcia Campos)
+ * Fix loading of remote files (Carlos Garcia Campos)
+ * Correctly process --with-smclient arguments (#590174, Christian
+ Persch)
+
+Translation updates:
+
+ * Thomas Thurman (en@shaw)
+ * Jorge González (es)
+ * Ivar Smolin (et)
+ * Antón Méixome (gl)
+ * Kjartan Maraas (nb)
+ * Matej Urbančič (sl)
+ * Daniel Nylander (sv)
+ * Dr.T.Vasudevan (ta)
+ * 樊栖江(Fan Qijiang) (zh_CN)
+
+================
+Evince 2.29.1
+================
+
+New Features and UI Improvements:
+
+ * Embed page setup settings in the print dialog (#591551, Marek
+ Kašík, Carlos Garcia Campos)
+ * A new tab has been added to properties dialog to show
+ * information about the document license (#349173, Juanjo Marín,
+ Carlos Garcia Campos)
+ * Use different processes for every document opened. (#583680,
+ #434966, #497388, #524633, #586087, Carlos Garcia Campos)
+ * Use GVFS metadata instead of our own xml based
+ implementation. (#586841, Carlos Garcia Campos)
+ * When scrolling a page, move one screen leaving one line context
+ to help to visually track the document as it moves. (#170871,
+ Carlos Garcia Campos)
+ * Use GtkInfoBar instead of GeditMessageArea for the message area
+ (#592785, Carlos Garcia Campos)
+ * EvPageCache has been splitted up into document part (moved to
+ EvDocument which has been converted into an abstract class
+ instead of an interface) and view part: EvDocumentModel. This
+ allows to have more than one EvView for the same document, so
+ that "Open a Copy" can be implemented without using the symlink
+ hack. (#573641, Carlos Garcia Campos)
+
+Bug fixes:
+
+ * Several fixes and cleanups in comics backend (Christian Persch)
+ * Don't exit with non-writable $HOME (Christian Persch)
+ * Clean up temp file handling to make sure we can cope with not
+ being able to create our temp directory (#595372, Christian Persch)
+ * Set page orientation of each page when printing so that
+ documents with mixed portrait/landscape pages print correctly
+ (#599470, Adrian Johnson)
+ * Preserve aspect ratio when scaling page for printing (#599468,
+ Adrian Johnson)
+ * Fix a crash when we don't have a DBUS connection (Christian Persch)
+ * Make sure total_num_bytes > 0 before using it in progress
+ callbacks (#597691, Carlos Garcia Campos)
+ * Escape document URI before showing it in progress area (#597691,
+ Carlos Garcia Campos)
+ * Fix a crash due to an uninitialized variable (#597154, Carlos
+ Garcia Campos)
+ * Fix a crash when there are form field widgets active during
+ rotation (#593316, Carlos Garcia Campos)
+ * Remarks the selected thumbnail after rotation (#595548, Juanjo Marín)
+ * Don't change current page when rotating documents with different
+ page sizes (#595704, Carlos Garcia Campos)
+ * Fix thumbnails rotation when loading a rotated document
+ (#595718, Carlos Garcia Campos)
+ * Save images as png or jpg when the filename has no extensions
+ (#595079, Patrick Ammann)
+ * Populate destination page when reloading the document (#570054,
+ Fernando Herrera)
+
+Translation updates:
+
+ * Khaled Hosny (ar)
+ * Astur (ast)
+ * Krasimir \"Bfaf\" Chonov (bg)
+ * Runa Bhattacharjee (bn_IN)
+ * Gil Forcada (ca)
+ * Marek Černocký (cs)
+ * Kenneth Nielsen (da)
+ * Mario Blättermann (de)
+ * Kostas Papadimas (el)
+ * Philip Withnall (en_GB)
+ * Jorge González (es)
+ * Ivar Smolin (et)
+ * Iñaki Larrañaga Murgoitio (eu)
+ * Tommi Vainikainen (fi)
+ * Claude Paroz (fr)
+ * Antón Méixome (gl)
+ * Sweta Kothari (gu)
+ * Gabor Kelemen (hu)
+ * Andika Triwidada (id)
+ * Francesco Marletta (it)
+ * Shushi Kurose (ja)
+ * Shankar Prasad (kn)
+ * Changwoo Ryu (ko)
+ * Gintautas Miliauskas (lt)
+ * Sangeeta Kumari (mai)
+ * Ani Peter (ml)
+ * Sandeep Shedmake (mr)
+ * Kjartan Maraas (nb)
+ * Reinout van Schouwen (nl)
+ * Manoj Kumar Giri (or)
+ * A S Alam (pa)
+ * Piotr Drąg (pl)
+ * André Gondim (pt_BR)
+ * Duarte Loreto (pt)
+ * Lucian Adrian Grijincu (ro)
+ * Matej Urbančič (sl)
+ * Miloš Popović (sr@latin)
+ * Милош Поповић (sr)
+ * Daniel Nylander (sv)
+ * Dr.T.Vasudevan (ta)
+ * Krishna Babu K (te)
+ * Theppitak Karoonboonyanan (th)
+ * Baris Cicek (tr)
+ * Maxim Dziumanenko (uk)
+ * Aron Xu (zh_CN)
+ * Chao-Hsiung Liao (zh_HK)
+ * Chao-Hsiung Liao (zh_TW)
+
+================
+Evince 2.27.90
+================
+
+Bug fixes:
+
+ * Let scroll wheel change page when in non-continuous best-fit
+ mode (#562257, Philip Langdale)
+ * Show print progress information when using GtkPrintOperation
+ * Don't show crash recovery dialog when requested file is the only
+ one to be recovered (#578894, Carlos Garcia Campos)
+ * Disable crash recovery when D-BUS is disabled (#578894, Carlos
+ Garcia Campos)
+ * Grab focus on view widget after setting metadata (#589300,
+ Nickolay V. Shmyrev)
+ * Fixes segmentation violation when print file format is empty
+ (#589226, Andreas Liebe)
+ * Use AM_V_GEN to make custom commands silent (#585355, Javier Jardón)
+ * Don't install schema files when building without mateconf (Nickolay
+ V. Shmyrev)
+
+Translation updates:
+
+ * Khaled Hosny (ar)
+ * Maruf Ovee (bn)
+ * Denis (br)
+ * Gil Forcada (ca)
+ * Carles Ferrando Garcia (ca@valencia)
+ * Marek Černocký (cs)
+ * Mario Blättermann (de)
+ * Seán de Búrca (ga)
+ * Antón Méixome (gl)
+ * Kjartan Maraas (nb)
+ * André Gondim (pt_BR)
+ * Daniel Nylander (sv)
+ * Theppitak Karoonboonyanan (th)
+ * Chao-Hsiung Liao (zh_HK)
+ * Chao-Hsiung Liao (zh_TW)
+
+================
+Evince 2.27.4
+================
+
+Bug fixes:
+
+ * Compute selections on button press for word/line selections
+ (#562059, Carlos Garcia Campos)
+ * Fix several even/odd multipage issues (#583429, Bartek Kostrzewa)
+ * Register thumbnailing for gzip/gzip dvi files (#588013, Emilio
+ Pozuelo Monfort)
+ * Get rid of shave with AM_SILENT_RULES automake option (#585355,
+ Javier Jardón)
+ * Make evince output pdf on supported printers (#585442, Johan Brannlund)
+ * Fix build on windows (Fridrich Strba)
+ * Determine data directory on runtime on windows (Fridrich Strba)
+ * Fix build without MateConf (Nickolay V. Shmyrev)
+ * Fix several introspection build issues (#585971, Christian Persch)
+
+Translation updates:
+
+ * Giannis Katsampirhs (el)
+ * Jonathan Ernst (fr)
+ * Daniel Nylander (sv)
+ * Maxim Dziumanenko (uk)
+ * Clytie Siddall (vi)
+ * Nguyễn Đình Trung (vi)
+
+================
+Evince 2.27.3
+================
+
+New Features and UI Improvements:
+
+ * Update the hildon port (Christian Persch)
+ * Complete the win32 port (#339172, Hib Eris)
+ * Allow activate the menubar in fullscreen mode (#504243, Carlos
+ Garcia Campos)
+ * Do not create popup window if the annot doesn't have a popup
+ (Carlos Garcia Campos)
+ * Add tests for printer settings (#583976, Bartek Kostrzewa)
+ * Remember and reuse "Save a Copy..." path (#485195, Carlos Garcia Campos)
+ * Support for cb7 using the p7zip commands in comics backend
+ (#565174, Juanjo Marín)
+ * Parse xml metadata to detect PDF/A documents (#582206, Davide Capodaglio)
+
+Bug fixes:
+
+ * Several build fixes and improvements (Christian Persch)
+ * Fix page transitions in presentation mode (#583652, #581881,
+ Carlos Garcia Campos)
+ * Scale according to paper size before rendering for printing
+ (Carlos Garcia Campos)
+ * Fix multipage even/odd printing issues (#583429, #583388, Bartek
+ Kostrzewa)
+ * Gracefully work with FITB destinations and friends (#583276,
+ Matthias Drochner)
+ * Fix double to int conversion in thumbnails_get_dimensions
+ (#581524, Carlos Garcia Campos)
+ * Ohter bugs fixed: #584617, #585497
+
+Translation updates:
+
+ * Runa Bhattacharjee (bn_IN)
+ * Mario Blättermann (de)
+ * Jorge González (es)
+ * Ivar Smolin (et)
+ * Kjartan Maraas (nb)
+ * Vladimir Melo (pt_BR)
+ * Dr.T.Vaasudevan (ta)
+
+================
+Evince 2.27.1
+================
+
+New Features and UI Improvements:
+
+ * Use GtkPrintOperation when printing for the backends that
+ support rendering into a cairo context (#557112, Carlos Garcia Campos)
+ * Recover previous session when running evince after a crash
+ (#578894, Carlos Garcia Campos)
+ * Preliminary annotations support (#315002, Carlos Garcia Campos,
+ Iñigo Martínez)
+ * Rename Print Setup menu entry as Page Setup for consistency with
+ the GTK+ dialog title (#581109, Nickolay V. Shmyrev)
+ * Added F3 as a find-next accelerator key (#579072, Michael J. Chudobiak)
+ * Support the free Gna! unrar tool in comics backend (#552074,
+ Juanjo Marín)
+ * Add evince-previewer as a separate applicaton that implements
+ the printing preview (Carlos Garcia Campos)
+
+Bug fixes:
+
+ * Fix handling of the tmp folder (#582108, Juanjo Marín)
+ * Abort dnd operations originated in the same Evince window
+ (#582077, Carlos Garcia Campos)
+ * Disable bouncing during scrolling (#533534, Martin Pohlack)
+ * Fix build without mateconftool-2 (#581441, Christian Persch)
+ * Fix documentation build (#579671, Nickolay V. Shmyrev)
+ * Fix error handling of broken documents (#580886, Nickolay V. Shmyrev)
+ * Fix several memory leaks in comics backend (#552074, Juanjo Marín)
+ * Escape URIs for display (#581064, Nickolay V. Shmyrev)
+ * Resync with libegg to remove deprecated GTK+ symbols (#580556,
+ Javier Jardón)
+ * Correct check for exit status of commands in comics backend
+ (#579656, Juanjo Marín)
+ * Add -no-undefined flag for Cygwin build (#580058, Yaakov Selkowitz)
+ * Use g_file_make_symbolic_link to create symlinks (#339172, Hib Eris)
+ * Delete the temp symlink created when opening a copy (Carlos
+ Garcia Campos)
+ * Don't redraw again when zoom is set more than once to the same
+ scale factor (Carlos Garcia Campos)
+ * Fix print preview of empty selection (#517735, Juanjo Marín)
+ * Don't prevent unmounting in case the initial cwd is on an
+ external device (#575436, Carlos Garcia Campos)
+ * Create and load the document based on the mime-type provided by
+ caja instead of using our own documents factory. (#533917,
+ Carlos Garcia Campos)
+ * Fix endianess issues in dvi and tiff backends (#578433, #509920,
+ Benjamin Berg)
+ * Fix memory leak in tiff backend (#578285, Nickolay V. Shmyrev)
+ * Fix path where accels file is saved (#577500, Nickolay
+ V. Shmyrev)
+ * Fix fading animations (Nickolay V. Shmyrev)
+ * Translate the categories in the caja properties tab
+ (#575085, Christian Persch)
+ * Other bugs fixed: #539972, #578436, #582543
+
+Translation updates:
+
+ * Jorge Gonzalez (es)
+ * Manoj Kumar Giri (or)
+ * Ivar Smolin (et)
+ * Vladimir Melo (pt_BR)
+ * Matej Urban (sl)
+ * Khaled Hosny (ar)
+ * Miloš Popović (sr)
+ * Funda Wang (zh_CN)
+ * Amitakhya Phukan (as)
+ * Baris Cicek (tr)
+
+================
+Evince 2.26.0
+================
+
+Bug fixes:
+
+ * Fix compiler warning when building with -Wformat (#574168,
+ Tobias Mueller)
+ * Fix a crash with encrypted documents (Christian Persch)
+
+Translation updates:
+
+ * F Wolff (af)
+ * Martin Picek (cs)
+ * Fotis Tsamis (el)
+ * Ivar Smolin (et)
+ * Suso Baleato (gl)
+ * Yaron Shahrabani (he)
+ * Gabor Kelemen (hu)
+ * Francesco Marletta (it)
+ * Shankar Prasad (kn)
+ * Gintautas Miliauskas (lt)
+ * Sangeeta Kumari (mai)
+ * Ani Peter (ml)
+ * Sandeep Shedmake (mr)
+ * Manoj Kumar Giri (or)
+ * Fabrício Godoy (pt_BR)
+ * Mișu Moldovan (ro)
+ * Yuriy Penkin (ru)
+ * I. Felix (ta)
+ * Krishna Babu K (te)
+
+================
+Evince 2.25.92
+================
+
+Bug fixes:
+
+ * Show the 'jump to page' window in the right GdkScreen (#560541,
+ Carlos Garcia Campos)
+ * Make our own thumbnail when the provided one doesn't have the
+ needed size (#323198, #307357, Christian Spurk, Carlos Garcia Campos)
+ * Reduce the restriction on the minimum size of thumbnails from 40
+ to 1 (#323198, Christian Spurk)
+ * Use GOption in thumbnailer (Carlos Garcia Campos)
+ * Fix saving a copy of encrypted PDF documents (#566791, Carlos
+ Garcia Campos)
+ * Don't use g_quark_from_static_string in a loadable module
+ (Christian Persch)
+ * Use g_object_unref() instead of gdk_pixbuf_unref() in impress
+ backend (#571707, Thomas H.P. Andersen)
+
+Translation updates:
+
+ * Ihar Hrachyshka (be@latin)
+ * Alexander Shopov (bg)
+ * Gil Forcada (ca)
+ * Petr Kovar (cs)
+ * Christian Kirbach (de)
+ * David Lodge (en_GB)
+ * Juanje Ojeda Croissier (es)
+ * Iñaki Larrañaga Murgoitio (eu)
+ * Ilkka Tuohela (fi)
+ * Claude Paroz (fr)
+ * Sweta Kothari (gu)
+ * Yuval Tanny (he)
+ * Takeshi AIHANA (ja)
+ * Changwoo Ryu (ko)
+ * Kjartan Maraas (nb)
+ * Duarte Loreto (pt)
+ * Daniel Nylander (sv)
+ * Chao-Hsiung Liao (zh_HK)
+ * Chao-Hsiung Liao (zh_TW)
+
+================
+Evince 2.25.91
+================
+
+Bug fixes:
+
+ * Fix several memory leaks (Christian Persch)
+ * Fix errors handling and propagation (Christian Persch)
+ * Fix several translation strings in properties dialog (#571787,
+ Nickolay V. Shmyrev)
+ * Do not resize the window on reloading (#571051, #304249, Carlos
+ Garcia Campos)
+ * Experimental introspection support (#569083, Christian Persch)
+ * Use g_set_error_literal() (Christian Persch)
+ * Other firxes for win32 (#339172, Hib Eris)
+ * Make session manager code compile for win32 (#339172, Carlos
+ Garcia Campos)
+ * Update totem-screensaver from totem svn to make it build for
+ win32 (#339172, Hib Eris)
+ * Make use of MateConf optional (#339172, Hib Eris, Carlos Garcia Campos)
+ * Fix i18n in libdocument (Christian Persch)
+ * Include gi18n-lib.h instead of gi18n.h in libs and backends
+ (Christian Persch)
+
+Translation updates:
+
+ * Mikel González (ast)
+ * Ihar Hrachyshka (be@latin)
+ * Kenneth Nielsen (da)
+ * Dawa pemo (dz)
+ * Juanje Ojeda Croissier (es)
+ * Ivar Smolin (et)
+ * Iñaki Larrañaga Murgoitio (eu)
+ * Gabor Kelemen (hu)
+ * Takeshi AIHANA (ja)
+ * Shankar Prasad (kn)
+ * Arangel Angov (mk)
+ * Wouter Bolsterlee (nl)
+ * Tomasz Dominikowski (pl)
+ * Taylon (pt_BR)
+ * Горан Ракић (sr)
+ * Daniel Nylander (sv)
+ * Theppitak Karoonboonyanan (th)
+ * Clytie Siddall (vi)
+ * Gan Lu (zh_CN)
+ * Chao-Hsiung Liao (zh_HK)
+ * Chao-Hsiung Liao (zh_TW)
+
+================
+Evince 2.25.90
+================
+
+Bug fixes:
+
+ * Split API documentation into libdocument, libview and shell
+ (#568465, Carlos Garcia Campos)
+ * Fix symbols conflict in impress backend (#569998, Christian Persch)
+ * Add mnemonics to buttons in search bar (#569212, Carlos Garcia
+ Campos)
+ * Fix a crash when printing (#569328, Carlos Garcia Campos)
+ * Fix --version command line option (#562869, Christian Persch)
+ * Use versioned directory for backends (#569082, Christian Persch)
+ * Add EV_DEFINE_BOXED_TYPE and EV_DEFINE_INTERFACE macros
+ (#568228, Carlos Garcia Campos)
+ * Sync EggToolbarEditor with libegg (Nickolay V. Shmyrev)
+ * Respect directory umask and setgid when saving files (#568593,
+ Michael J. Chudobiak)
+ * Add libtool versioning, pkg-config files and single headers for
+ libdocument and libview (#568224, #568220, #568229, #568227,
+ Christian Persch)
+ * Remove G_OBJECT casts from g_signal_connect calls (#568386, Hiroyuki
+ Ikezoe)
+ * Install several missing header files of libdocument and libview
+ (#567787, #567790, Tomeu Vizoso)
+ * Other bugs fixed: #569120, #569231, #569327, #570077
+
+Translation updates:
+
+ * Hendrik Richter (de)
+ * Ivar Smolin (et)
+ * Gabor Kelemen (hu)
+ * Changwoo Ryu (ko)
+ * Kjartan Maraas (nb)
+ * Daniel Nylander (sv)
+
+================
+Evince 2.25.5
+================
+
+Code changes:
+
+ * Move EvView specific code to a libevview library so that it can
+ be embbeded in other applications (#567751, Tomeu Vizoso, Carlos
+ Garcia Campos)
+ * Other improvements for embbeders (#567785, #567788, #567789,
+ Tomeu Vizoso)
+
+Bug fixes:
+
+ * Fix a minor typo (Michal Vaner)
+ * Fix the API docs build (#568171, Christian Persch)
+ * Simplify drag data handling (#558084, Christian Persch)
+ * Several portability issues (#339172, Hib Eris)
+ * Fix mnemonic conflict (#567937, Carlos Garcia Campos)
+ * Other bugs fixed: #567910
+
+Translation updates:
+
+ * Gil Forcada (ca)
+ * Hendrik Richter (de)
+ * Juanje Ojeda Croissier (es)
+ * Kjartan Maraas (nb)
+ * Gan Lu (zh_CN)
+
+================
+Evince 2.25.4
+================
+
+New Features and UI Improvements:
+
+ * Show progress information when loading/saving remote files
+ (#370958, Carlos Garcia Campos)
+ * Remember page setup options (#525185, #349102, Carlos Garcia Campos)
+ * Show a confirmation dialog when there are pending print jobs
+ while closing the main window (#480964, Carlos Garcia Campos)
+ * Show progress information when printing (#482770, Carlos Garcia Campos)
+ * Add document URI to properties page (#555376, Carlos Garcia Campos)
+
+Bug fixes:
+
+ * Bump glib requirement to fix build with older versions
+ (Christian Spurk)
+ * Fix mime type handling (Hib Eris)
+ * Fix saving images to remote locations (Carlos Garcia Campos)
+ * Do not try to jump to the location of the find result for every
+ match, but only for the first one. It makes searching really
+ faster. (#564774, Michael Hunold)
+ * Fix zip mime-type in comics backend (Juanjo Marín)
+ * Fix several memory leaks (Carlos Garcia Campos)
+
+Translation updates:
+
+ * Ihar Hrachyshka (be@latin)
+ * Juanje Ojeda Croissier (es)
+ * Yuval Tanny (he)
+ * Kjartan Maraas (nb)
+ * Taylon (pt_BR)
+ * Gan Lu (zh_CN)
+
+================
+Evince 2.25.2
+================
+
+New Features and UI Improvements:
+
+ * PDF Optional content (layers) support. (Carlos Garcia Campos)
+ * The password dialog has been reworked in order to make it more
+ hig compliant and consistent (#562496, Carlos Garcia Campos)
+ * Improved keyring support. Password dialog is not shown anymore
+ when the password is already in the keyring (Carlos Garcia Campos)
+ * Support for monitor and reload of remote documents
+ (#555399, Carlos Garcia Campos)
+
+Bug fixes:
+
+ * Fix opening comic documents with a wrong but valid extension
+ (#562143, Carlos Garcia Campos)
+ * Fix a crash when searching (#558377, Carlos Garcia Campos)
+ * Fix several crashes when selecting text (#561393, Marek Kašík)
+
+Translation updates:
+
+ * Jorge González (es)
+ * Nguyễn Đình Trung (vi)
+
+================
+Evince 2.25.1
+================
+
+New Features and UI Improvements:
+
+ * Use the message area instead of popup dialogs for any error and
+ warning messages (Carlos Garcia Campos)
+
+Bug fixes:
+
+ * Adapt to the new single-include policy (#558064, Christian Persch)
+ * Fix page transition in presentation mode (#516749, Nickolay V. Shmyrev)
+ * Other bugs fixed: (#558066, Christian Persch)
+
+Translation updates:
+
+ * Hendrik Richter (de)
+
+================
+Evince 2.24.1
+================
+
+Bug fixes:
+
+ * Disable toggle function of F5 when in presentation mode
+ (#556162, Dave Neary)
+ * Create a loading thumbnail for every different page size
+ (#556264, Carlos Garcia Campos)
+ * Fix several memory leaks (Carlos Garcia Campos)
+ * Do not show bad titles like 'Microsoft Word' in the window title
+ bar (#534684, Robin Sonefors and Nickolay V. Shmyrev)
+ * Fix mailto links which were considered as http uris (#555801,
+ Carlos Garcia Campos)
+ * Fix launching external applications (#554500, Carlos Garcia Campos)
+ * Other bugs fixed (#552382, #553369, #555134, Carlos Garcia Campos)
+
+Translation updates:
+
+ * Ihar Hrachyshka (be@latin)
+ * Adrian Guniš (cs)
+ * Kenneth Nielsen (da)
+ * Ivar Smolin (et)
+ * Takeshi AIHANA (ja)
+
+================
+Evince 2.24.0
+================
+
+Bug fixes:
+
+ * Use GdkAppLaunchContext when available to launch external uris
+ (Carlos Garcia Campos)
+ * Use the message area to show errors when lauching external uris
+ instead of a popup window (Carlos Garcia Campos)
+ * Assume invalid uris are http uris (#552071, Carlos Garcia
+ Campos)
+
+Translation updates:
+
+ * Usama Akkad (ar)
+ * Gil Forcada (ca)
+ * Kenneth Nielsen (da)
+ * Hendrik Richter (de)
+ * nikosCharonitakis (el)
+ * Ilkka Tuohela (fi)
+ * Sweta Kothari (gu)
+ * Gabor Kelemen (hu)
+ * Francesco Marletta (it)
+ * Shankar Prasad (kn)
+ * Changwoo Ryu (ko)
+ * Gintautas Miliauskas (lt)
+ * Arangel Angov (mk)
+ * Santhosh Thottingal (ml)
+ * Sandeep Shedmake (mr)
+ * wadim dziedzic (pl)
+ * Mișu Moldovan (ro)
+ * Alexandre Prokoudine (ru)
+ * Горан Ракић (sr)
+ * Dr.T.Vasudevan (ta)
+ * Baris Cicek (tr)
+ * Chao-Hsiung Liao (zh_HK)
+ * Chao-Hsiung Liao (zh_TW)
+
+================
+Evince 2.23.92
+================
+
+Bug fixes:
+
+ * Allow page scrolling with PageUp/PageDown keys when find bar is
+ active (#529833, Carlos Garcia Campos)
+ * Search in page labels is now case-insensitive (#550136, Michael Lee)
+ * Do not append the file extension twice when saving an image
+ (Carlos Garcia Campos)
+ * Correctly restore the cursor after showing the context menu
+ (Carlos Garcia Campos)
+ * Grab the mediakeys with a low priority so that it doesn't
+ interfere with other applications like a music player
+ (#547164, Eric Piel)
+
+Translation updates:
+
+ * Alexander Shopov (bg)
+ * Petr Kovar (cs)
+ * David Lodge (en_GB)
+ * Jorge González (es)
+ * Ivar Smolin (et)
+ * Iñaki Larrañaga Murgoitio (eu)
+ * Robert-André Mauchin (fr)
+ * Ignacio Casal Quinteiro (gl)
+ * Kjartan Maraas (nb)
+ * Wouter Bolsterlee (nl)
+ * Leonardo Ferreira Fontenelle (pt_BR)
+ * Duarte Loreto (pt)
+ * Laurent Dhima (sq)
+ * Daniel Nylander (sv)
+ * Theppitak Karoonboonyanan (th)
+ * Clytie Siddall (vi)
+ * Funda Wang (zh_CN)
+
+================
+Evince 2.23.91
+================
+
+New Features and UI Improvements:
+
+ * Use EggSMClient from libegg instead of mate-client and remove
+ libmate and libmateui dependencies (Carlos Garcia Campos)
+ * Implement document_get_page_label in tiff backend (Carlos Garcia
+ Campos)
+
+Bug fixes:
+
+ * Start up in the right workspace when resuming a previous session
+ (Carlos Garcia Campos)
+ * Fix marco warnings shown in ~/.xsession-errors (Carlos
+ Garcia Campos)
+ * Fix a crash due to an idle function called with an already
+ destroyed object (#549163, Carlos Garcia Campos)
+ * Fix problems when opening or saving attachments (#548653, Carlos
+ Garcia Campos)
+ * Handle document orientation in tiff backend (#548444, Carlos
+ Garcia Campos)
+ * Fix a crash when adjustment page size is 0 (#547440, Carlos
+ Garcia Campos)
+ * Other bugs fixed: #548462
+
+Translation updates:
+
+ * Runa Bhattacharjee (bn_IN)
+ * Gil Forcada (ca)
+ * Mario Blättermann (de)
+ * Dawa pemo (dz)
+ * Jorge González (es)
+ * Iñaki Larrañaga Murgoitio (eu)
+ * Ilkka Tuohela (fi)
+ * Takeshi AIHANA (ja)
+ * Shankar Prasad (kn)
+ * Gintautas Miliauskas (lt)
+ * Arangel Angov (mk)
+ * Manoj Kumar Giri (or)
+ * Vladimir Melo (pt_BR)
+ * Chao-Hsiung Liao (zh_HK)
+
+================
+Evince 2.23.6
+================
+
+Bug fixes:
+
+ * Correctly build desktop file (#544237, Götz Waschk)
+
+Other changes:
+
+ * Cleanup #include statements. (Wouter Bolsterlee)
+ * The jobs system has been reworked in order to make it simpler
+ and easier to extend. (Carlos Garcia Campos)
+ * Add a profile mode available when debug is enabled (Carlos
+ Garcia Campos)
+
+Translation updates:
+
+ * Djihed Afifi (ar)
+ * Adrian Guniš (cs)
+ * Pierre Lemaire (fr)
+ * Duarte Loreto (pt)
+
+================
+Evince 2.23.5
+================
+
+New Features and UI Improvements:
+
+ * Intercept window manager's fullscreen request in order to
+ run/stop fullscreen mode (#493541, Carlos Garcia Campos)
+ * 7-zip compressed commics support (#532312, Kartik Rustagi)
+ * Add Alt+Left and Alt+Right shortcuts to rotate (#539972, Bastien
+ Nocera)
+ * Media player keys support (#539971, Bastien Nocera)
+
+Bug fixes:
+
+ * Restart the job search when the find bar is opened for the
+ second time (#531956, Carlos Garcia Campos)
+ * Fixes caja crash caused by evince properties page extension
+ (#542548, Carlos Garcia Campos)
+ * Fix Solaris build (#542924, Darren Kenny)
+ * Fix endianess bug (#540950, Benjamin Jacobs)
+ * Other bugs fixed: #542001
+
+Translation updates:
+
+ * Jorge González (es)
+ * Ivar Smolin (et)
+ * Ignacio Casal Quinteiro (gl)
+ * Yuval Tanny (he)
+ * Rakesh Pandit (ks)
+ * Kjartan Maraas (nb)
+ * Wouter Bolsterlee (nl)
+ * Zabeeh Khan (ps)
+ * Daniel Nylander (sv)
+ * Theppitak Karoonboonyanan (th)
+
+================
+Evince 2.23.4
+================
+
+New Features and UI Improvements:
+
+ * A warning message is shown in the message area when the document
+ has no pages (#171588, Carlos Garcia Campos)
+ * Automaticly reload the document when the file has changed on
+ disk (#304249, Carlos Garcia Campos)
+ * Added Ctrl-Insert keybinding for copying text and Ctrl+N for
+ opening a copy (#526523, #532239, Carlos Garcia Campos)
+ * Save as action has been added as a toolbar button too. (Abhishek Mukherjee)
+ * Primary selection is also updated when copying a link address
+ (#520855, Carlos Garcia Campos)
+ * Added GtkMountOperation, copied from gtk+. (Carlos Garcia Campos)
+ * GS code has been removed, libspectre is now required to build the
+ PostScript backend. (Carlos Garcia Campos)
+
+Bug fixes:
+
+ * Fixed a crash when opening documents with no pages
+ (#537574, Carlos Garcia Campos)
+ * Fixed a crash when running in debug mode (Daniel M. German)
+ * Fixed a crash in impress backend (#530852, Hans Petter Jansson)
+ * Improved error handling in djvu backend (#530202, Carlos Garcia Campos)
+ * Do not use the pixbuf backend for rendering tiff documents when
+ the tiff backend is available (#520290, Carlos Garcia Campos)
+ * Fixed T1 font rendering in dvi backend (#536883, Mattias Nissler)
+ * Other bugs fixed: #533323, #533897, #533896, #534493, #537535
+
+Thanks:
+
+ Matthias Drochner, Frederic Peters, Cosimo Cecchi
+
+Translation updates:
+
+ * Djihed Afifi (ar)
+
+
+================
+Evince 2.22.1.1
+================
+
+Bug fixes:
+
+ * Fix build in FreeBSD (#526799, Michael Johnson, Carlos Garcia Campos)
+ * Fixes djvu backend links (#526517, Carlos Garcia Campos)
+
+===============
+Evince 2.22.1
+===============
+
+Bug fixes:
+
+ * Add compressed dvi to the list of supported mime types
+ (#307087, Ed Catmur)
+ * Fix a crash when printing a range that doesn't specify the start
+ or end page (#524288, Carlos Garcia Campos)
+ * Fix a crash when thumbnail failed to render in PS backend
+ (#525015, Carlos Garcia Campos)
+ * Open default application when launching an external uri
+ (#525009, Emil Soleyman)
+ * Add a configure option to enable/diable DBus (#521797, Rémi Cardona)
+ * Fix printing in documents with rotated pages (#512648, Eugen Dedu)
+ * Do not append file extension twice when saving an image
+ (#523069, Carlos Garcia Campos, Wouter Bolsterlee)
+ * Cancel find operation when the find bar is closed
+ (#508845, Carlos Garcia Campos)
+ * Several printing fixes: collate, reverse and copies were broken
+ (#365332, Eugen Dedu)
+ * Fix selection rendering when poppler is compiled with splash
+ backend (Carlos Garcia Campos).
+ * Other bugs fixed: #521224, #524112
+
+Translation updates:
+
+ * Alexander Nyakhaychyk (be)
+ * Yavor Doganov (bg)
+ * David Lodge (en_GB)
+ * Jorge González (es)
+ * Ivar Smolin (et)
+ * Clytie Siddall (vi)
+
+===============
+Evince 2.22.0
+===============
+
+Bug fixes:
+
+ * Do not print when Escape is pressed to close printing dialog
+ (#495107, Wouter Bolsterlee)
+ * Fix a crash in caja properties page (#519679, Carlos Garcia Campos)
+ * Fix a crash with transition effects (#519106, Carlos Garnacho)
+ * Fix document mime type detection (#518874, Carlos Garcia Campos)
+ * Fix a crash in forms (#518831, Carlos Garcia Campos)
+ * Fix images extraction (#516237, Carlos Garcia Campos)
+
+Translation updates:
+
+ * Djihed Afifi (ar)
+ * Ihar Hrachyshka (be@latin)
+ * Petr Kovar (cs)
+ * Kenneth Nielsen (da)
+ * nikosCharonitakis (el)
+ * David Lodge (en_GB)
+ * Jorge González (es)
+ * Ivar Smolin (et)
+ * Ilkka Tuohela (fi)
+ * Claude Paroz (fr)
+ * Ignacio Casal Quinteiro (gl)
+ * Ankit Patel (gu)
+ * Yuval Tanny (he)
+ * Gabor Kelemen (hu)
+ * Luca Ferretti (it)
+ * Takeshi Aihana (ja)
+ * Shankar Prasad (kn)
+ * Changwoo Ryu (ko)
+ * Gintautas Miliauskas (lt)
+ * Arangel Angov (mk)
+ * Sandeep Shedmake (mr)
+ * Narayan Kumar Magar (ne)
+ * Åsmund Skjæveland (nn)
+ * Yannig Marchegay (Kokoyaya) (oc)
+ * Hugo Doria (pt_BR)
+ * Laurent Dhima (sq)
+
+===============
+Evince 2.21.91
+===============
+
+Bug fixes:
+
+ * mate-print code has been removed (#512370, Carlos Garcia Campos)
+ * Fix thumbnailer crash (#513934, Matthias Clasen)
+ * Fix djvu rendering (#482720, Carlos Garcia Campos)
+ * Fix mime type detection based on file contents (Cosimo Cecchi, Carlos Garcia Campos)
+ * Other bugs fixed: #512719, #512720, #512718, #512771, #513203
+
+Translation updates:
+
+ * Khaled Hosny (ar)
+ * Amitakhya Phukan (as)
+ * Hendrik Richter (de)
+ * Jorge González (es)
+ * Kjartan Maraas (nb)
+ * Yannig Marchegay (Kokoyaya) (oc)
+ * Tomasz Dominikowski (pl)
+ * Vladimir Melo (pt_BR)
+ * Duarte Loreto (pt)
+ * Theppitak Karoonboonyanan (th)
+ * Serdar CICEK (tr)
+ * Woodman Tuen (zh_HK)
+
+===============
+Evince 2.21.90
+===============
+
+Important notice for distributors:
+
+ * This release overrides document permissions by default. See
+ http://bugzilla.mate.org/show_bug.cgi?id=382700 for more information
+ about this.
+ * Ghostscript interface for PostScript documents is now deprecated.
+ Please use libspectre (http://libspectre.freedesktop.org/)
+ instead.
+
+New features and UI improvements:
+
+ * Port to gio and drop mate-vfs dependency. (#510401, Cosimo Cecchi, Carlos Garcia Campos)
+ * Scroll pages in page entry with mouse wheel (#324122, David Turner)
+ * Automatic scrolling in context menu (#323670, David Turner)
+ * Kinetic scrolling (#461271, David Turner)
+ * New plugin system for backends (#351348, Carlos Garcia Campos)
+ * Allow saving images in formats other than PNG (#500209, Carl-Anton
+ Ingmarsson, Nickolay V. Shmyrev)
+ * Add support for page transitions (#458460, Carlos Garnacho)
+ * Override document restrictions by default (#382700, Wouter Bolsterlee)
+ * Use up/down arrows instead of left/right (#170081, Wouter Bolsterlee)
+
+Bug fixes:
+
+ * Reset cursor correctly (#501603, #509958, Carlos Garcia Campos)
+ * Use GSlice to allocate memory (#475972, Christian Persch)
+ * Do not limit minimum zoom factor in best fit/fit width mode (#503805,
+ Carlos Garcia Campos)
+ * Use libspectre, if available, for the ps backend. (#317106, #499787,
+ #501235, #421879, #445797, #443859, #486547, #386005, #507705, Carlos Garcia Campos)
+ * Put RTL marker in recent file list (#509076, Djihed Afifi)
+ * Put Caja extension in right place (#505359, Matthias Clasen, Brian
+ Pepple, Damien Carbery, Wouter Bolsterlee)
+ * Avoid filename quoting issues (#502500, Tom Parker)
+ * Repair horizontal scrolling with shift (#483412, Nickolay V. Shmyrev)
+ * Mate Keyring is now an optional dependency (#509676, Marcelo Lira)
+ * Reduce memory consumption by rendering images on demand (Carlos Garcia Campos)
+ * Fix printing in dvi backend when filename contains white spaces. (#502839, Carlos Garcia Campos)
+ * Other bugs fixed: #502843, #460658, #504721, #511635
+
+Thanks:
+
+ * Carlos Garcia Campos
+ * Christian Persch
+ * Yaakov Selkowitz
+ * David Turner
+ * Carl-Anton Ingmarsson
+ * Carlos Garnacho
+ * Djihed Afifi
+ * Nickolay V. Shmyrev
+ * Wouter Bolsterlee
+ * Marcelo Lira
+
+Translation updates:
+
+ * Djihed Afifi (ar)
+ * Ihar Hrachyshka (be@latin)
+ * Gil Forcada (ca)
+ * Jorge Gonzalez (es)
+ * Priit Laes (et)
+ * Inaki Larranaga Murgoitio (eu)
+ * Stéphane Raimbault (fr)
+ * Seán de Búrca (ga)
+ * Ignacio Casal Quinteiro (gl)
+ * Kjartan Maraas (nb)
+ * Wouter Bolsterlee (nl)
+ * Thierry Randrianiriana (mg)
+ * Yannig Marchegay (oc)
+ * Leonardo Ferreira Fontenelle, Hugo Doria, Rodrigo Flores (pt_BR)
+ * Daniel Nylander (sv)
+ * Clytie Siddall (vi)
+
+===============
+Evince 2.21.1
+===============
+
+New Features and UI Improvements:
+
+ * Use message area for notification about errors
+ * Some print settings for documents are stored in metadata
+ * Added command line option for search
+ * Expander with a recent documents is added to toolbar
+ * Egg-recent code dropped
+ * Djvu, dvi and comics are enabled by default
+ * Support for links with URI's like mailto (Pascal Terjan)
+ * Removed the shadow of the fullscreen toolbar
+
+Bug fixes:
+
+ * A lot of bug fixes from a stable branch
+
+Thanks:
+
+ To Carlos Garcia Campos who did the all the amazing work above :)
+
+Translations:
+
+ Changwoo Ryu (ko)
+ Daniel Nylander (sv)
+ Djihed Afifi (ar)
+ Jorge Gonzalez (es)
+ Francesco Marletta (it)
+ Gabor Kelemen (hu)
+ Gintautas Miliauskas (lt)
+ Ignacio Casal Quinteiro (gl)
+ Ihar Hrachyshka (be@latin)
+ Ilkka Tuohela (fi)
+ Ivar Smolin (et)
+ Jorge González (es)
+ Kjartan Maraas (nb)
+ Matej Urbančič (sl)
+ Peter Bach (da)
+ Yannig Marchegay (Kokoyaya) (oc)
+
+===============
+Evince 2.20.2
+===============
+
+Bug fixes:
+
+ * Tiff documents were rendered with wrong colors (Matthias Clasen)
+ * Fix endless loop when zero pages per sheet is selected (Darren Kenny)
+ * Do not jump to the first page when reloading from command line (Carlos Garcia Campos)
+ * Memory leak fix (Hiroyuki Ikezoe)
+ * Fix printing with poppler splash backend (Carlos Garcia Campos)
+ * Fix a crash when printing with the mate-print dialog (Carlos Garcia Campos)
+ * Warning fix (Sebastien Bacher)
+
+Translations:
+
+ Matej Urbančič (sl)
+ Youssef Chahibi (ar)
+
+===============
+Evince 2.20.1
+===============
+
+Bug fixes:
+
+ * Printing multiple pages per sheet fixes (Carlos Garcia Campos)
+ * Respect ranges order during print (Carlos Garcia Campos)
+ * Silently ignore unknown form fields (Matthias Drochner)
+ * Do not show the toolbar in fullscreen mode if the main toolbar is not visible (Carlos Garcia Campos)
+ * Give priority to form fields over images (Carlos Garcia Campos)
+
+Translations:
+
+ Changwoo Ryu (ko)
+ Francesco Marletta (it)
+ Ilkka Tuohela (fi)
+ Peter Bach (da)
+
+===============
+Evince 2.20.0
+===============
+
+Bug fixes:
+
+ * Forms support broken by forgotten ifdef fix (Carlos Garcia Campos)
+ * Issue with making a copy and xfer to different file system (Carlos Garcia Campos)
+ * Desktop file fixes (Götz Waschk)
+
+Translations:
+
+ Youssef Chahibi (ar)
+ Alexander Shopov (bg)
+ Peter Bach (da)
+ Ivar Smolin (et)
+ Ignacio Casal Quinteiro (gl)
+ Francesco Marletta (it)
+ Gintautas Miliauskas (lt)
+ Espen Stefansen (nb)
+ Yannig Marchegay (Kokoyaya) (oc)
+ Mişu Moldovan (ro)
+ Peter Tuhársky (sk)
+ Laurent Dhima (sq)
+ Горан Ракић (sr)
+ Maxim Dziumanenko (uk)
+
+===============
+Evince 2.19.92
+===============
+
+Bug fixes:
+
+ * Bump requirements to poppler 0.6 (Carlos Garcia Campos)
+ * Restart the search when reloading a document with the find bar visible (Carlos Garcia Campos)
+ * Do not jump to the first page when reloading a document from the last page (Carlos Garcia Campos)
+ * Do not update visibility when changing a chrome flag (Carlos Garcia Campos)
+ * Use GTK_UNIT_POINTS instead of GTK_UNIT_PIXEL (Carlos Garcia Campos)
+ * Make sure current-page <= end-page in continuous mode (Carlos Garcia Campos)
+ * Ignore outline items without a title (Carlos Garcia Campos)
+ * Use only drag mouse cursor during a drag operation (Carlos Garcia Campos)
+ * Actually fix printing regressions (Carlos Garcia Campos)
+ * Add support for double and triple click selections (Carlos Garcia Campos)
+
+Translations:
+
+ Gil Forcada (ca)
+
+===============
+Evince 2.19.4
+===============
+
+Bug fixes:
+
+ * Find works when findbar is hidden (Justin Blanchard)
+ * Use directly cairo_surface_get_content (Jeff Muizelaar)
+ * Great speedup by using CAIRO_FORMAT_RGB24 instead of CAIRO_FORMAT_ARGB32 (Jeff Muizelaar)
+ * Fix for embedded thumbnails dimension and rotation (Carlos Garcia Campos)
+ * Avoid ifdefs inside macros (Jens Granseuer)
+ * Memory leak fixes (Justin Blanchard, Hiroyuki Ikezoe)
+ * New icon sizes (Andreas Nilsson)
+ * Invalid read fix (Justin Blanchard)
+ * Fix multihead problems in toolbar editor (Carlos Garcia Campos)
+ * Use the same cairo context for every page in the same expose event (Carlos Garcia Campos)
+
+Translations:
+
+ Adam Weinberger (en_CA)
+ Danishka Navin (si)
+ Duarte Loreto (pt)
+ Hendrik Richter (de)
+ Ihar Hrachyshka (be@latin)
+ Raphael Higino (pt_BR)
+ Stéphane Raimbault (fr)
+ Takeshi Aihana (ja)
+
+==============
+Evince 0.9.3
+==============
+
+New Features and UI Improvements:
+
+ * Use new GTK+ tootlips (Carlos Garcia Campos)
+ * Printing multiple pages per sheet (Carlos Garcia Campos)
+ * Added UNIX-like key bindings hjkl (Cosimo Cecchi)
+
+Bug fixes:
+
+ * Do not block while enumerating printers in preview mode (Christian Persch)
+ * Show new pages as soon as they are rendered even if other page
+ elements like forms, images or links are not ready yet (Carlos Garcia Campos)
+ * Provide different options in the print dialog depending on document
+ type backend capabilities (Carlos Garcia Campos)
+
+Translations:
+
+ Jorge González (es)
+ Iñaki Larrañaga Murgoitio (eu)
+ Ilkka Tuohela (fi)
+ Gabor Kelemen (hu)
+ Arangel Angov (mk)
+ Wouter Bolsterlee (nl)
+ Funda Wang (zh_CN)
+
+==============
+Evince 0.9.2
+==============
+
+New Features and UI Improvements:
+
+ * Forms support (Julien Rebetez, Carlos Garcia Campos)
+ * Toolbar editor icons on dragging (Jaap Haitsma)
+
+Bug fixes:
+
+ * Program description translation issue fixed (Gabor Kelemen)
+ * Do not change page after presentation (Cesar Fernandez)
+
+Translations:
+
+ Ankit Patel (gu)
+ Arangel Angov (mk)
+ Bharat Kumar (te)
+ Clytie Siddall (vi)
+ Daniel Nylander (sv)
+ Dr.T.Vasudevan (ta)
+ Espen Stefansen (nb)
+ Ivar Smolin (et)
+ Takeshi Aihana (ja)
+ Theppitak Karoonboonyanan (th)
+ Tomasz Dominikowski (pl)
+ Tshewang Norbu (dz)
+
+==============
+Evince 0.9.1
+==============
+
+New Features and UI Improvements:
+
+ * Cairo-based renderer for pages and selections of PDF, DVJU and DVI documents (Carlos Garcia Campos)
+ * PDF exporter for printing DVI documents (Alaska Subedi)
+ * Zoom icon artwork (Michael Monreal)
+ * Patch to avoid frequent process wakeup for metadata handling (Bastien Nocera, Arjan van de Ven)
+ * Bumped poppler requirements to 0.5.9 (Carlos Garcia Campos)
+ * Changed sidebar ordering (Wouter Bolsterlee)
+ * Removed extra locking of a main loop to speed up rendering (Carlos Garcia Campos)
+
+Bug fixes:
+
+ * Print job is released quickly (Carlos Garcia Campos)
+ * Update a cursor and tooltips after scrolling (Carlos Garcia Campos)
+ * More safe mkdir_with_parents (Eduardo Lima)
+ * Safe saving of a document copy to a remote location (Carlos Garcia Campos)
+ * Build fix without libmate (Marc Brockschmidt)
+ * Selections don't disappear after zoom (Carlos Garcia Campos)
+ * Preview button added to the print dialog (Carlos Garcia Campos)
+
+Translations:
+
+ Daniel Nylander (sv)
+ David Lodge (en_GB)
+ Dr.T.Vasudevan (ta)
+ Espen Stefansen (nb)
+ Gil Forcada (ca)
+ Ignacio Casal Quinteiro (gl)
+ Ivar Smolin (et)
+ Jorge González (es)
+ Sonam Pelden (dz)
+ Theppitak Karoonboonyanan (th)
+ Yuval Tanny (he)
+
+==============
+Evince 0.9.0
+==============
+
+New Features and UI Improvements:
+
+ * Printing support in djvu documents (Alaska Subedi)
+ * Optional drop of libmate dependency (Ross Burton)
+ * Print button for preview mode (Carlos Garcia Campos)
+ * Remember print settings (Carlos Garcia Campos)
+ * Use gtk+ builtin paper list to identify the document's paper size (Carlos Garcia Campos)
+ * Start rendering pages before any other jobs (Carlos Garcia Campos)
+ * Developer documentation updated. (Iñigo Martínez)
+ * History button improvements (Nickolay Shmyrev)
+
+Bug Fixes:
+
+ * Fixes for issues with fullscreen toolbar (Carlos Garcia Campos)
+ * Open document in empty window with EggRecent (Eduardo Lima)
+ * Compilation fixes for FreeBSD (Roy Marples)
+ * A lot of calls to parent class methos added (Christian Persch)
+ * Update gtk-icon-cache in uninstall hook (Brian Pepple)
+ * Fix for crash in comics backend when filename contains quote (Nickolay Shmyrev)
+ * Always add application-specific icons to the theme (Nickolay Shmyrev)
+
+Translations:
+
+ Jakub Friedl (cs)
+ Dimitris Glezos (el)
+ David Lodge (en_GB)
+ Jorge González (es)
+ Ivar Smolin (et)
+ Francesco Marletta (it)
+ Espen Stefansen (nb)
+ Yannig Marchegay (oc)
+ Washington Lins (pt_BR)
+ Daniel Nylander (sv)
+
+==============
+Evince 0.8.1
+==============
+
+Bug Fixes:
+
+ * Default resolution is used when it's not provided by TIFF
+ document (Carlos Garcia Campos)
+ * Added support for ps, eps and compressed documents
+ thumbnails (Carlos Garcia Campos)
+ * Implemented font color specials in the DVI backend (Ricardo Markiewicz)
+ * DOCUMENTS folder from xdg-data-dirs is used as default folder when
+ opening a file chooser (Matthias Clasen)
+ * unlink-tempfile is used instead of unlink-temp-file (Carlos Garcia Campos)
+
+Translations:
+
+ Gil Forcada (ca)
+ Ignacio Casal Quinteiro (gl)
+ Iñaki Larrañaga Murgoitio (eu)
+ Jorge González (es)
+ Jakub Friedl (cs)
+ Sonam Pelden (dz)
+
+==============
+Evince 0.8.0
+==============
+
+Features and UI Improvements:
+
+ * Thumbnails for postscript documents (Carlos Garcia Campos)
+ * Copy of compressed document is saved compressed (Carlos Garcia Campos)
+
+Bug Fixes:
+
+ * Properly handle PostScript page orientation (Carlos Garcia Campos)
+ * Do not render thumbnails when sidebar thumbnail page is not visible
+ on startup (Carlos Garcia Campos)
+ * Warning when document has one page (Carlos Garcia Campos)
+ * Djvu backend builds on Mac (Carlos Garcia Campos)
+ * Allow deleting in goto window in presentation mode (Carlos Garcia Campos)
+
+Translations:
+
+ Ankit Patel (gu)
+ Changwoo Ryu (ko)
+ Christian Kintner (de)
+ Clytie Siddall (vi)
+ Daniel Nylander (sv)
+ Djihed Afifi (ar)
+ Duarte Loreto (pt)
+ Erdal Ronahi (ku)
+ Funda Wang (zh_CN)
+ Gabor Kelemen (hu)
+ Gil Forcada (ca)
+ Gintautas Miliauskas (lt)
+ Ihar Hrachyshka (be)
+ Ivar Smolin (et)
+ Kjartan Maraas (nb)
+ Matic Žgur (sl)
+ Maxim Dziumanenko (uk)
+ Mişu Moldovan (ro)
+ Nickolay V. Shmyrev (ru)
+ Raphael Higino (pt_BR)
+ Takeshi Aihana (ja)
+ Thierry Randrianiriana (mg)
+ Wadim Dziedzic (pl)
+ Woodman Tuen (zh_HK)
+ Woodman Tuen (zh_TW)
+ Yuval Tanny (he)
+ Игор Несторовић (sr)
+
+==============
+Evince 0.7.2
+==============
+
+New Features and UI Improvements:
+
+ * Document thumbnail is used as window icon (Carlos Garcia Campos)
+ * Support for gzipped and bzipped
+ document types (Carlos Garcia Campos)
+ * A lot of new icons (Luca Feretti, Andreas Nilsson)
+ * Finally working history button (Nickolay V. Shmyrev)
+
+Internal Improvements:
+
+ * Developer gtk-doc based documentation (Nickolay V. Shmyrev)
+ * More dogtail tests (Nickolay V. Shmyrev)
+
+Bug Fixes:
+
+ * Fontconfig lock to avoid crashes (Carlos Garcia Campos)
+ * Critical crash fix by checking return value from
+ psscan (Tom Parker)
+ * Critical crash fix in caja property page and
+ broken ODF (Tom Parker)
+ * Critical crash fix with multifile djvu
+ documents (Carlos Garcia Campos)
+ * Multithreaded gtk problems fix by using async
+ mate-vfs (Carlos Garcia Campos)
+
+Translations:
+
+ Changwoo Ryu (ko)
+ Clytie Siddall (vi)
+ Daniel Nylander (sv)
+ David Lodge (en_GB)
+ Dimitris Glezos (el)
+ Dorji Tashi (dz)
+ Duarte Loreto (pt)
+ Gabor Kelemen (hu)
+ Ihar Hrachyshka (be)
+ Ilkka Tuohela (fi)
+ Ivar Smolin (et)
+ Jovan Naumovski (mk)
+ Khaled Hosny (ar)
+ Kjartan Maraas (nb)
+ Nickolay V. Shmyrev (ru)
+ Stéphane Raimbault (fr)
+ Theppitak Karoonboonyanan (th)
+ Vladimir Petkov (bg)
+ Wouter Bolsterlee (nl)
+ Yuval Tanny (he)
+
+Thanks:
+
+ Ed Catmur, Esteban Sanchez, Theppitak Karoonboonyanan, Wouter Bolsterlee
+
+==============
+Evince 0.7.1
+==============
+
+New Features:
+
+ * Popup window to jump to another page in presentation mode. (Carlos Garcia Campos)
+ * Page transition support in presentation mode. (Carlos Garcia Campos)
+
+Bug Fixes:
+
+ * Fix random crashes related to threads and Font Config (Carlos Garcia Campos)
+ * Fix icon name in desktop file (Luca Ferretti)
+ * Always use "best fit" zoom in presentation mode (Wouter Bolsterlee)
+ * Don't restore the view on the last page when a document is reopened
+ (Wouter Bolsterlee)
+ * Fix build due to libxml2 (Elijah Newren)
+
+Translations:
+
+ * Djihed Afifi (ar)
+ * Ales Nyakhaychyk (be)
+ * Alexander Shopov (bg)
+ * Josep Puigdemont i Casamajó (ca)
+ * David Lodge (en_GB)
+ * Francisco Javier F. Serrador (es)
+ * Priit Laes (et)
+ * Raivis Dejus (lv)
+ * Jovan Naumovski (mk)
+ * Kjartan Maraas (nb)
+ * Wouter Bolsterlee (nl)
+ * Matic Žgur (sl)
+ * Daniel Nylander (sv)
+ * Theppitak Karoonboonyanan (th)
+ * Clytie Siddall (vi)
+
+Thanks:
+
+ Damien Carbery, Jens Granseuer, Yevgen Muntyan
+
+==============
+Evince 0.7.0
+==============
+
+New Features:
+
+ * History. Preliminary implementation, not finished yet. (Nickolay V. Shmyrev)
+ * Option to open a copy of the document in a new window. (Carlos Garcia Campos)
+ * Multihead systems support. (Carlos Garcia Campos)
+ * Added paper size field to the properties dialog. (Kasper Svendsen, Wouter Bolsterlee)
+ * Added automated UI tests with dogtail (Nickolay V. Shmyrev)
+
+Bug Fixes:
+
+ * Links support in rotated documents. (Radoslav Dorcik)
+ * Side pane disabled when entering and leaving fullscreen mode. (Nickolay V. Shmyrev)
+ * Fixed crash in DVI backend. (Nickolay V. Shmyrev)
+ * Printing settings scale, copies, collate, reverse, odd/even work again (Carlos Garcia Campos)
+ * Added page setup dialog for printing. (Carlos Garcia Campos)
+ * Support for printing to a PDF file. (Carlos Garcia Campos)
+ * Allow blank screen in presentation mode. (Carlos Garcia Campos)
+ * Added "End of presentation" page in presentation mode. (Carlos Garcia Campos)
+ * Screensaver detection in presentation mode. (Wouter Bolsterlee)
+ * "Loading..." text is not shown in presentation mode. (Wouter Bolsterlee)
+
+Security Fixes:
+
+ * Buffer overflow in PS backend. CVE-2006-5864. (Carlos Garcia Campos)
+
+Translations:
+
+ * Djihed Afifi (ar)
+ * Runa Bhattacharjee (bn_IN)
+ * Gil Forcada (ca)
+ * Jakub Friedl (cs)
+ * Mindu Dorji (dz)
+ * Dimitris Glezos (el)
+ * David Lodge (en_GB)
+ * Francisco Javier F. Serrador (es)
+ * Ilkka Tuohela (fi)
+ * Claude Paroz (fr)
+ * Ankit Patel (gu)
+ * Rajesh Ranjan (hi)
+ * Gabor Kelemen (hu)
+ * Satoru SATOH (ja)
+ * Vladimer Sichinava (ka)
+ * Fano Rajaonarisoa (mg)
+ * Kjartan Maraas (nb)
+ * Wouter Bolsterlee (nl)
+ * Leonardo Ferreira Fontenelle (pt_BR)
+ * Leonid Kanter (ru)
+ * Steve Murphy (rw)
+ * Daniel Nylander (sv)
+ * Theppitak Karoonboonyanan (th)
+ * Baris Cicek (tr)
+
+Thanks:
+
+ Claudio Saavedra, Gabriel Felipe Cornejo, Mathias Hasselmann, Michael Monreal,
+ Julien Rebetez, P. Henrique Silva, Yevgen Muntyan
+
+==============
+Evince 0.6.1
+==============
+
+Bug Fixes:
+
+ * Current page follows find page
+ * Reopen reloads document
+ * Document size is guessed correctly
+ * Icons are installed in correct folders
+ * Memory leak fixed, etc
+
+Translations:
+
+ * da dz el en_GB es fa gl it ka nn ro
+ * documentation: fi it sv
+
+Thanks:
+
+ Carlos Garcia Campos, Mathias Hasselmann, Wouter Bolsterlee,
+ Christian Persch
+
+ and especially translators:
+
+ Alessio Frusciante, Åsmund Skjæveland, David Lodge,
+ Francisco Javier F. Serrador, Ignacio Casal Quinteiro, Kostas Papadimas,
+ Mugurel Tudorm, Ole Laursen, Pema Geyleg, Roozbeh Pournader,
+ Vladimer Sichinava, Daniel Nylander, Tommi Vainikainen, Luca Ferretti
+
+==============
+Evince 0.6.0
+==============
+
+Bug Fixes:
+
+ * Links aren't lost while resizing
+ * Tiff backend crash is fixed
+ * Recent code and icons code are screen safe
+ * Crash while handling password-protected documents is fixed
+
+Translations:
+
+ * bg bn bn_IN ca de dz el et fa fi fr gu hi hu ja ko lt lv mk ml
+ mr nb or pt pt_BR ro ru sl sv th tr vi zh_CN zh_HK zh_TW
+
+Thanks:
+
+ Carlos Garcia Campos, Julien Rebetez, Sebastien Bacher, Wouter Bolsterlee
+
+ and especially translators:
+
+ Abel Cheung, Alexander Shopov, Ani Peter, Ankit Patel, Baris Cicek,
+ Changwoo Ryu, Chao-Hsiung Liao, Christophe Merlet, Claude Paroz, Clytie
+ Siddall, Daniel Nylander, Duarte Loreto, Funda Wang, Gabor Kelemen,
+ Guntupalli Karunakar, Hendrik Richter, Ilkka Tuohela, Ivar Smolin, Josep
+ Puigdemont i Casamajó, Jovan Naumovski, Khandakar Mujahidul Islam,
+ Kjartan Maraas, Leonardo Ferreira Fontenelle, Leonid Kanter, Lucas
+ Rocha, Matic Žgur, Meelad Zakaria, Mişu Moldovan, Mugurel Tudor, Nikos
+ Charonitakis, Priit Laes, Rahul Bhalerao, Raivis Dejus, Rajesh Ranjan,
+ Roozbeh Pournader, Runa Bhattacharjee, Satoru SATOH, Subhransu Behera,
+ Theppitak Karoonboonyanan, Žygimantas Beručka
+
+==============
+Evince 0.5.5
+==============
+
+New Features:
+
+ * Evince have preview mode for using with gtk+
+ * New print dialog is used with gtk 2.10
+ * New recent files framework is used
+
+UI Improvements:
+
+ * Sidebar is unified with Epiphany
+ * Escape unfocus page entry
+
+Bug Fixes:
+
+ * Automake updates
+ * Link coordinates now used correctly
+ * Desktop file is corrected
+ * Memory leak fixes
+
+Translations:
+
+ * ca cs de dz el es et eu fi fr gu ja ko mk nl ru sl sv th zh_HK zh_TW
+
+Thanks:
+
+ Carlos Garcia Campos, Christian Persch, Radoslav Dorcik,
+ Ricardo Markiewicz, Sebastien Bacher, Wouter Bolsterlee
+
+ and especially translators:
+
+ Ankit Patel, Arangel Angov, Benoît Dejean, Changwoo Ryu, Chao-Hsiung
+ Liao, Christophe Merlet, Daniel Nylander, Francisco Javier F. Serrador,
+ Guntupalli Karunakar, Hendrik Richter, Ilkka Tuohela, Inaki Larranaga,
+ Jakub Friedl, Josep Puigdemont i Casamajó, Jovan Naumovski, Nikos
+ Charonitakis, Priit Laes, Takeshi Aihana, Theppitak Karoonboonyanan
+
+==============
+Evince 0.5.4
+==============
+
+New Features:
+
+ * Evince supports impress slides with --enable-impress
+ * URI's with anchors can be opened
+
+Bug Fixes:
+
+ * PAPI printing crash was fixed
+ * Threads-related crash was fixed
+ * Assertion on document types that don't support
+ links don't cause crash now
+ * Reload crash was fixed as loading of
+ password-protected documents
+ * Page-label command line option works again
+
+Translations:
+
+ * be bg bn_IN ca cs de dz es et eu fi fr gl gu he id ko mk nb ne
+ nl ru ta th vi zh_CN zh_HK zh_TW
+
+Thanks:
+
+ Bastien Nocera, Carlos Garcia Campos, Ghee Teo, Pat Rondon,
+ Ricardo Markiewicz, Wouter Bolsterlee
+
+ and especially translators:
+
+ Ahmad Riza H Nst, Ales Nyakhaychyk, Alexander Shopov, Ankit Patel,
+ Benoît Dejean, Changwoo Ryu, Chao-Hsiung Liao, Clytie Siddall,
+ Francisco Javier F. Serrador, Funda Wang, Hendrik Richter,
+ I. Felix, Ignacio Casal Quinteiro, Ilkka Tuohela, Inaki Larranaga,
+ Jakub Friedl, Jayaradha, Josep Puigdemont Casamajó,
+ Jovan Naumovski, Kjartan Maraas, Pawan Chitrakar, Pema Geyleg,
+ Priit Laes, Runa Bhattacharjee, Theppitak Karoonboonyanan,
+ Vincent van Adrighem, Yair Hershkovitz
+
+==============
+Evince 0.5.3
+==============
+
+New Features:
+
+ * Evince supports attachments in PDF files
+ * We require gtk 2.8 and djvulibre 3.5.17 now
+ * Links system is reworked allowing named links
+
+Interface imporovements:
+
+ * Esc closes properties dialog
+ * Cursor is hidden in presentation mode
+ * Find previous item is added to the menu
+
+Bug Fixes:
+
+ * GOption port and po/LINGUAS work
+ * Fixed mime type detection by file contents
+ * Several memory leaks were found
+ * Crash on exit related to thumbnailer
+ * Current page is selected more intelligently
+ * Work around libtool build bug is created
+
+Translations:
+
+
+ * bg bn br dz es et fi gl gu nb nl nn no ro vi zh_CN zh_HK zh_TW
+
+Thanks:
+
+ Michael Plump, Carlos Garcia Campos, Wouter Bolsterlee, Francisco
+ Javier F. Serrador, Kjartan Maraas and especially all translators.
+
+==============
+Evince 0.5.2
+==============
+
+Bug Fixes:
+
+ * View don't jump on scrolling
+ * In presentation mode we scroll by one page
+
+Translations:
+
+ * bg bn da de et fa fr hi hu ja ka pt pt_BR ro ru sv uk vi
+
+==============
+Evince 0.5.1
+==============
+
+New Features:
+
+ * Evince can search text in DJVU files
+
+Interface improvements:
+
+ * Odd pages are placed to the right in dual page mode
+
+Bug Fixes:
+
+ * Produce thumbnails for comic books and carefully work with
+ unzip
+ * Correctly interoperate with DBUS 0.60
+ * Ghostscript interpreter is checked in runtime
+ * PS mime types are listed in desktop file
+ * It's possible to add sidebar checkbutton on toolbar
+ * It's possible to print in inverse order
+ * Filechooser now will ask for overwrite confirmation
+ * Search now takes account for scrolling
+ * It's allowed to scroll view from find entry
+ * Evince don't jump to find result if window was scrolled during search
+ * It's now clear what page the toolbar page number applies to
+
+Translations:
+
+ * bg ca cs cy da el en_CA es et eu fi gl gu he hu ja lt nb nl no pl
+ pt_BR pt ru sq sr th vi zh_CN zh_HK zh_TW
+ * Spanish docs are updated and we have Bulgarian translation now
+
+Thanks:
+
+ Ricardo Markiewicz, Rostislav Raykov, Stanislav Slusny,
+ Francisco Javier F. Serrador, Antoine Dopffer, Michael Hofmann,
+ Gary Coady, Luca Ferretti, Carlos Garcia Campos, Eduardo de Barros Lima,
+ Christopher Aillon and all translators.
+
+==============
+Evince 0.5.0
+==============
+
+New Features:
+
+ * Various types of PDF links are now supported
+ * New backend for comic books (CBR/CBZ archives)
+ * Storage of passwords for protected documents in mate-keyring
+ * Layout settings for new documents are taken from the last used document
+
+Interface Improvements:
+
+ * Statusbar was removed to save space
+ * Notification about page processing is shown on the page
+ * More key bindings
+ * Improved intelligent window title that shouldn't confuse users
+ * Show index by default if available
+ * Tooltips for links
+ * Now we have right click context menu
+
+Bug Fixes:
+
+ * Crashes on reload and window close are fixed
+ * DBus usage cleaned
+ * Printing of multiple copies start to work
+ * Crash on structured ps document
+ * Improved session handling
+ * Vertical and horizontal scrolling on selection
+
+Translations:
+
+ * be, bg, bn, ca, cs, de, en_CA, es, et, eu, fi, fr, gl, gu
+ hu, it, ku, lt, nb, nl, no, ro, ru, sr, sv, th, vi, zh_CN, zh_HK, zh_TW
+ * nl for documentation.
+
+==============
+Evince 0.4.0
+==============
+
+Bug Fixes:
+
+ * Depend on poppler 0.4.0
+ * Pass in timestamp to to handle opening multiple windows over dbus
+ better (Ryan Lortie)
+ * Really quit when rendering postscript files.
+ * Set textdomain to libglade.
+ * Fix rotation of thumbnails multiple times
+ * Fix selection for non-continuous case
+ * Disable selection and links for rotated case
+ * findbar fixes
+
+==============
+Evince 0.3.4
+==============
+
+Bug Fixes:
+
+ * Depend on poppler 0.4.0
+ * Convert filenames to utf8 when showing them in the UI
+ * Return focus back to view on escape
+ * Fix compatibility with dbus 0.34.2
+ * Fix some build warnings
+ * Fix dvi backend compilation with t1lib-5.0
+
+==============
+Evince 0.3.3
+==============
+
+New Features:
+
+ * real text selection, complete with theming and I-Beam support
+ * Respect lockdown mateconf keys
+ * Metadata support per document
+ * Font properties dialog
+ * dbus support to create a factory
+ * Implement caja plugin for properties.
+
+Interface Improvements:
+
+ * HIG Fixes
+ * Hide menu entry in .desktop file
+ * Get the correct mime types in the open dialog
+
+Bug Fixes:
+
+ * Improved rotation support
+ * Backwards searching
+ * Use unzipped document when printing
+ * Persist the print settings
+ * Support pdf's with 0 pages
+ * Fix find flickering
+ * mate-doc-utils for manual
+ * Add keypad accelerators for zooming. Fix for bug 308128.
+ * fix mem leaks
+ * MIME Fixes
+ * tiff/djvu backend fixes
+
+Translations:
+
+ * eu, gl, gu, he, hi, ne, pa, pl, sk, sr, st@Latn, tr
+
+==============
+Evince 0.3.2
+==============
+
+New Features:
+
+ * Multi page tiff support
+ * Document properties
+ * Document rotation
+ * Mate vfs support
+
+Interface Improvements:
+
+ * Faster dvi rendering
+ * More compact layout for documents with different page formats
+ * Stock icons for all toolbar editor items
+ * Multiple selection in the open dialog
+ * Loading progress feedback
+ * Multiple column thumbnails
+ * Expand links when specified by the document
+ * Several new handy keybindings
+ * Ellipsize recent items labels
+
+Bug Fixes:
+
+ * Fix rendering of several postscript documents
+ * Fix reloading of postcript documents
+ * Fix a lot of memory leaks
+ * Fix compilation on gcc 4
+ * Several minor fixes
+
+==============
+Evince 0.3.1
+==============
+
+New Features:
+
+ * Toolbar editor
+ * Middle button scrolling
+ * Support for printing page ranges
+ * Support for printing chapters (from the index)
+
+Interface Improvements:
+
+ * Move best fit items in the toolbar control at the top
+ * In the sidebar make drop down menu as large as the button
+ * Several keybindings improvements
+ * Faster scrolling
+ * Only render the visible thumbnails (less memory usage)
+ * Get rid of confusing Normal size menu
+
+Bug Fixes:
+
+ * Better mime detection
+ * Several minor fixes
+ * Fix printing on LPD printers
+
+==============
+Evince 0.3.0
+==============
+
+New Features:
+
+ * Continous mode
+ * Dual page mode
+ * Control + Scroll does zooming
+ * Shift + Scroll scrolls horizontally
+ * Zoom control in the toolbar
+
+Interface Improvements:
+
+ * If all page labels are numeric show only
+ the page total
+
+Bug Fixes:
+
+ * Fix size of dvi thumbnails
+ * Fix crash on exit
+ * Make thumbnailer schemas translatable
+ * Fix build problems with t1lib
+
+==============
+Evince 0.2.1
+==============
+
+New Features:
+
+ * new backend to support DJVU files.
+ * new backend to support DVI.
+ * Initial implementation of doc metadata. No UI for this yet,
+ though we respect docs requesting UI changes.
+ * support application/x-gzpostscript
+ * consolidate mime handling code so thumbnailer and main page
+ can use them. Thumbnail all types we support.
+ * Respect document orientation
+ * Implement print and save a copy for the ps backend.
+ * Badass completion of the document in the entry. Only works
+ with GTK+ >= 2.7.1
+ * User docs
+
+Bug Fixes:
+
+ * Faster Zooming
+ * Clean up Schemas
+ * README added.
+ * Small rework of sidebar code. Now sidebar pages should implement
+ EvSidebarPage interface.
+ * lots of small bug fixes
+ * Actually fix the "FIXME: update priority" comment.
+ * Update egg-recent from libegg. This should fix long startup
+ problem.
+
+Interface Improvements:
+
+ * Shift + Space scrolls up.
+ * Removed fullscreen toolbar hard-coded style
+ * Fix normal size zoom. Make zoom in/zoom out unsensitive when
+ they are behyond the limits.
+ * Doesn't show resize grip when maximized
+ * don't draw border in fullscreen
+ * Doesn't show thumbnails if document has 1 page. Make sidebar
+ menu entries sensitive only if if they have sense.
+ * Work around the Escape conflict (find bar and unfullscreen)
+ * Save accelerators on exit.
+ * Add Edit->Find Next
+
+Translations:
+
+ * Make all toolbar items translatable
+ * ru (Nickolay Shmyrev)
+
+==============
+Evince 0.2.0
+==============
+
+Code changes
+
+ * Use poppler glib api
+
+Interface improvements
+
+ * Rewrite most of the backend code to use threads and make
+ the interface more responsive
+
+New features
+
+ * Use page labels as page numbers (Jonathan)
+
+==============
+Evince 0.1.9
+==============
+
+ * Fix a crash in the caja thumbnailer (Fernando Herrera)
+
+==============
+Evince 0.1.8
+==============
+
+BugFixes
+
+ * Fix crash when opening pdf documents with only 1 page
+
+==============
+Evince 0.1.7
+==============
+
+New features
+
+ * Caja thumbnailer for pdf (Fernando Herrera)
+
+BugFixes
+
+ * Make code C89 compliant (Jens Granseuer)
+ * Fix some issues in the caja thumbnailer (Marco)
+ * Do not read ps defaults from ggv prefs! (Marco)
+
+==============
+Evince 0.1.6
+==============
+
+Code changes
+
+ * Use poppler instead of our own xpdf fork (Kristian Høgsberg)
+
+Interface improvements
+
+ * Use an entry for the page control instead of
+ spin buttons (Marco)
+ * Expand the sidebar selection widget (Carlos)
+
+Bug fixes
+
+ * Fix crash in links loading (Jonathan)
+ * Fix crashes when reloading document (Marco)
+
+==============
+Evince 0.1.5
+==============
+
+New features
+
+ * Reload menu (Kai Willadsen)
+
+Interface improvements
+
+ * Support for DnD of files (Carlos Garcia Campos)
+ * Set the "Previous" and "Next" toolbar
+ buttons as important (Vincent Noel)
+ * Make the "best fit" and "fit width"
+ values act as toggle buttons (Jonathan)
+ * Autohide the fullscreen button (Kristian Høgsberg)
+ * Added ellipsis to Print item (Bryan)
+ * Change the fullscreen toolbar to always be in
+ the popup window (Jonathan)
+ * Improved sidebar widget (Carlos Garcia Campos)
+ * Minimal size for the sidebar (Marco)
+ * Hide the sidebar if the type doesn't
+ support thumbnailing and indexing (Jonathan)
+ * Remember the sidebar size (Carlos Garcia Campos)
+
+Bug fixes
+
+ * Fix compilation on non-gcc platforms (Marco)
+ * Fix thumbnails generation (Crispin Flowerday)
+ * Fix best fit size allocation (Martin)
+ * Replace newlines in the title by spaces (Martin)
+ * Get rid of the black flash when resizing the window (Jonathan)
+ * Sync selection with zoom levels (Marco)
+ * Fix clipboard operations (Marco)
+ * Fix a crash when the ps document cannot be opened (Marco)
+ * Fix postcript page selection (Marco)
+ * Fix page sizing to be idempotent (Marco)
+ * Fix page sizing toggle buttons (Marco)
+ * Fix freezing on document with unrecognized links (Marco)
+ * Check ghostscript minimal version (Marco)
+ * Fix rendering of landscape documents (Marco)
+ * Unescape filenames for display (Marco)
+
+==============
+Evince 0.1.4
+==============
+
+Code changes
+
+ * Add debugging/logging helpers (Marco)
+ * Add warnings about unimplemented/unknown link
+ types (Marco)
+
+Interface improvements
+
+ * Epiphany like fullscreen mode (Christian Persch)
+ * Save chromes state between sessions (Christian Persch)
+ * Improve toolbar layout and icons (Luca Ferretti)
+
+Bug fixes
+
+ * Really fix postscript rendering (Marco)
+ * Do not leak gs processes on exit (Marco)
+ * Fix a buffer overflow fix (Marco)
+
+==============
+Evince 0.1.3
+==============
+
+Code changes
+
+ * Beginnings of continuous viewing (Jonathan)
+
+New features
+
+ * Support eps (Marco)
+ * Support gzipped ps (Marco)
+
+Bug fixes
+
+ * Fix a crash with the postscript view (Marco)
+ * Fix image view (Jeff Muizelaar)
+ * Fix a warning when opening documents without
+ thumbnails (Martin)
+ * Fix crashes when searched word is not found (Marco)
+ * Fix a crash when changing page with keys (Marco)
+
+==============
+Evince 0.1.2
+==============
+
+New features
+
+ * Make search really work (Marco)
+
+Interface improvements
+
+ * Show password state in the view (Jonathan)
+ * add GTK_SHADOW_IN to the scrolled window (Martin)
+ * make sure the selected thumbnail stays visible (Martin)
+ * Remove history buttons from the toolbar (Marco)
+
+Bug fixes
+
+ * Fix CID fonts with freetype 2.1.9 (Marco)
+ * Fix inverted up/down buttons (Marco)
+
+==============
+Evince 0.1.1
+==============
+
+New features
+
+ * Actually print PDF files
+ * Navigation history
+ * Support Links
+ * Support encrypted PDFs
+ * A desktop file
+
+Interface improvements
+
+ * Rename Bookmarks sidebar to Index
+ * Use filename as title if the file doesn't have a title (Jeff
+ Muizelaar) or if the title is empty
+ * Make navigation with thumbnails possible (Anders Carlsson)
+ * (De)Sensitize actions as necessary (Dave Malcolm)
+ * Show a wait cursor while the page is rendering
+ * Center the page; draw a page border
+ * Undo selection on page change
+ * Shorter toolbar item labels
+ * Make selection work in any direction
+
+Code changes
+
+ * Render PDFs directly as packed RGB
+ * Update egg-recent code (not used yet)
+ * Update to latest Xpdf patchlevel
+
+Bug fixes
+
+ * PostScript backend fixes
+ * Pixbuf backend fixes (Jeff Muizelaar)
+ * Set page spin button limits correctly (Anders Carlsson)
+ * Fix problem when base fonts are installed as pcf files.
+ * Keep search selection highlighting correct even when
+ zooming/changing window size (Stephane LOEUILLET)
+
+Translation updates
+
+ * cs (Miloslav Trmac)
+ * de (Frank Arnold)
+ * en_CA (Adam Weinberger)
+ * es (Antonio Ognio)
+ * nb (Kjartan Maraas)
+ * nl (Tino Meinen)
+
+evince 0.1.0
+------------
+
+Initial release.
diff --git a/README b/README
new file mode 100644
index 00000000..88a44a24
--- /dev/null
+++ b/README
@@ -0,0 +1,21 @@
+Evince
+==================================================
+Evince is a document viewer capable of displaying
+multiple and single page document formats like PDF
+and Postscript. For more general information about
+Evince please visit our website at
+
+http://www.mate.org/projects/evince/
+
+This software is licensed under the GPL
+
+Evince Requirements
+==================================================
+MATE Platform libraries [ http://www.mate.org/start/ ]
+Poppler for PDF viewing [ http://poppler.freedesktop.org/ ]
+GhostScript for Postscript viewing [ http://www.cs.wisc.edu/~ghost/ ]
+
+Evince Optional Backend Libraries
+==================================================
+DjVuLibre for DjVu viewing [ http://djvulibre.djvuzone.org/ ]
+Rar for viewing CBR comics [ http://www.rarsoft.com/ ]
diff --git a/TODO b/TODO
new file mode 100644
index 00000000..715d57b3
--- /dev/null
+++ b/TODO
@@ -0,0 +1,3 @@
+See our bugzilla for list of entries we are working at
+
+http://bugzilla.mate.org/buglist.cgi?product=evince&bug_status=NEW \ No newline at end of file
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 00000000..eb12863a
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+PKG_NAME="evince"
+
+(test -f $srcdir/configure.ac) || {
+ echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
+ echo " top-level $PKG_NAME directory"
+ exit 1
+}
+
+which mate-autogen.sh || {
+ echo "You need to install mate-common from the MATE CVS"
+ exit 1
+}
+
+REQUIRED_AUTOMAKE_VERSION=1.10
+REQUIRED_GTK_DOC_VERSION=1.13
+USE_MATE2_MACROS=1
+. mate-autogen.sh
diff --git a/backend/Makefile.am b/backend/Makefile.am
new file mode 100644
index 00000000..a6dc6e58
--- /dev/null
+++ b/backend/Makefile.am
@@ -0,0 +1,40 @@
+SUBDIRS =
+
+# Backends
+
+if ENABLE_PDF
+SUBDIRS += pdf
+endif
+
+if ENABLE_PS
+SUBDIRS += ps
+endif
+
+if ENABLE_PIXBUF
+SUBDIRS += pixbuf
+endif
+
+if ENABLE_DJVU
+SUBDIRS += djvu
+endif
+
+if ENABLE_TIFF
+SUBDIRS += tiff
+endif
+
+if ENABLE_DVI
+SUBDIRS += dvi
+endif
+
+if ENABLE_COMICS
+ SUBDIRS += comics
+endif
+
+if ENABLE_IMPRESS
+ SUBDIRS += impress
+endif
+
+EXTRA_DIST = \
+ backend.symbols
+
+-include $(top_srcdir)/git.mk
diff --git a/backend/backend.symbols b/backend/backend.symbols
new file mode 100644
index 00000000..6c41cf8f
--- /dev/null
+++ b/backend/backend.symbols
@@ -0,0 +1 @@
+register_evince_backend
diff --git a/backend/comics/Makefile.am b/backend/comics/Makefile.am
new file mode 100644
index 00000000..0b06ecbc
--- /dev/null
+++ b/backend/comics/Makefile.am
@@ -0,0 +1,32 @@
+INCLUDES = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libdocument \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DEVINCE_COMPILATION \
+ $(BACKEND_CFLAGS) \
+ $(LIB_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+backend_LTLIBRARIES = libcomicsdocument.la
+
+libcomicsdocument_la_SOURCES = \
+ comics-document.c \
+ comics-document.h
+
+libcomicsdocument_la_LDFLAGS = $(BACKEND_LIBTOOL_FLAGS)
+libcomicsdocument_la_LIBADD = \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(BACKEND_LIBS) \
+ $(LIB_LIBS)
+
+backend_in_files = comicsdocument.evince-backend.in
+backend_DATA = $(backend_in_files:.evince-backend.in=.evince-backend)
+
+EXTRA_DIST = $(backend_in_files)
+
+CLEANFILES = $(backend_DATA)
+
+@EV_INTLTOOL_EVINCE_BACKEND_RULE@
+
+-include $(top_srcdir)/git.mk
diff --git a/backend/comics/comics-document.c b/backend/comics/comics-document.c
new file mode 100644
index 00000000..4d74385a
--- /dev/null
+++ b/backend/comics/comics-document.c
@@ -0,0 +1,936 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2009-2010 Juanjo Marín <[email protected]>
+ * Copyright (C) 2005, Teemu Tervo <[email protected]>
+ *
+ * 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, 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 <config.h>
+
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+#include <glib/gstdio.h>
+#include <gio/gio.h>
+
+#ifdef G_OS_WIN32
+# define WIFEXITED(x) ((x) != 3)
+# define WEXITSTATUS(x) (x)
+#else
+# include <sys/wait.h>
+#endif
+
+#include "comics-document.h"
+#include "ev-document-misc.h"
+#include "ev-document-thumbnails.h"
+#include "ev-file-helpers.h"
+
+#ifdef G_OS_WIN32
+/* On windows g_spawn_command_line_sync reads stdout in O_BINARY mode, not in O_TEXT mode.
+ * As a consequence, newlines are in a platform dependent representation (\r\n). This
+ * might be considered a bug in glib.
+ */
+#define EV_EOL "\r\n"
+#else
+#define EV_EOL "\n"
+#endif
+
+typedef enum
+{
+ RARLABS,
+ GNAUNRAR,
+ UNZIP,
+ P7ZIP,
+ TAR
+} ComicBookDecompressType;
+
+typedef struct _ComicsDocumentClass ComicsDocumentClass;
+
+struct _ComicsDocumentClass
+{
+ EvDocumentClass parent_class;
+};
+
+struct _ComicsDocument
+{
+ EvDocument parent_instance;
+
+ gchar *archive, *dir;
+ GPtrArray *page_names;
+ gchar *selected_command, *alternative_command;
+ gchar *extract_command, *list_command, *decompress_tmp;
+ gboolean regex_arg;
+ gint offset;
+ ComicBookDecompressType command_usage;
+};
+
+#define OFFSET_7Z 53
+#define OFFSET_ZIP 2
+#define NO_OFFSET 0
+
+/* For perfomance reasons of 7z* we've choosen to decompress on the temporary
+ * directory instead of decompressing on the stdout */
+
+/**
+ * @extract: command line arguments to pass to extract a file from the archive
+ * to stdout.
+ * @list: command line arguments to list the archive contents
+ * @decompress_tmp: command line arguments to pass to extract the archive
+ * into a directory.
+ * @regex_arg: whether the command can accept regex expressions
+ * @offset: the position offset of the filename on each line in the output of
+ * running the @list command
+ */
+typedef struct {
+ char *extract;
+ char *list;
+ char *decompress_tmp;
+ gboolean regex_arg;
+ gint offset;
+} ComicBookDecompressCommand;
+
+static const ComicBookDecompressCommand command_usage_def[] = {
+ /* RARLABS unrar */
+ {"%s p -c- -ierr --", "%s vb -c- -- %s", NULL , FALSE, NO_OFFSET},
+
+ /* GNA! unrar */
+ {NULL , "%s t %s" , "%s -xf %s %s" , FALSE, NO_OFFSET},
+
+ /* unzip */
+ {"%s -p -C --" , "%s %s" , NULL , TRUE , OFFSET_ZIP},
+
+ /* 7zip */
+ {NULL , "%s l -- %s" , "%s x -y %s -o%s", FALSE, OFFSET_7Z},
+
+ /* tar */
+ {"%s -xOf" , "%s -tf %s" , NULL , FALSE, NO_OFFSET}
+};
+
+static void comics_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
+
+static GSList* get_supported_image_extensions (void);
+static void get_page_size_area_prepared_cb (GdkPixbufLoader *loader,
+ gpointer data);
+static void render_pixbuf_size_prepared_cb (GdkPixbufLoader *loader,
+ gint width,
+ gint height,
+ gpointer data);
+static char** extract_argv (EvDocument *document,
+ gint page);
+
+
+EV_BACKEND_REGISTER_WITH_CODE (ComicsDocument, comics_document,
+ {
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
+ comics_document_document_thumbnails_iface_init);
+ } );
+
+/**
+ * comics_regex_quote:
+ * @unquoted_string: a literal string
+ *
+ * Quotes a string so unzip will not interpret the regex expressions of
+ * @unquoted_string. Basically, this functions uses [] to disable regex
+ * expressions. The return value must be freed with * g_free()
+ *
+ * Return value: quoted and disabled-regex string
+ **/
+static gchar *
+comics_regex_quote (const gchar *unquoted_string)
+{
+ const gchar *p;
+ GString *dest;
+
+ dest = g_string_new ("'");
+
+ p = unquoted_string;
+
+ while (*p) {
+ switch (*p) {
+ /* * matches a sequence of 0 or more characters */
+ case ('*'):
+ /* ? matches exactly 1 charactere */
+ case ('?'):
+ /* [...] matches any single character found inside
+ * the brackets. Disabling the first bracket is enough.
+ */
+ case ('['):
+ g_string_append (dest, "[");
+ g_string_append_c (dest, *p);
+ g_string_append (dest, "]");
+ break;
+ /* Because \ escapes regex expressions that we are
+ * disabling for unzip, we need to disable \ too */
+ case ('\\'):
+ g_string_append (dest, "[\\\\]");
+ break;
+ /* Escape single quote inside the string */
+ case ('\''):
+ g_string_append (dest, "'\\''");
+ break;
+ default:
+ g_string_append_c (dest, *p);
+ break;
+ }
+ ++p;
+ }
+ g_string_append_c (dest, '\'');
+ return g_string_free (dest, FALSE);
+}
+
+
+/* This function manages the command for decompressing a comic book */
+static gboolean
+comics_decompress_temp_dir (const gchar *command_decompress_tmp,
+ const gchar *command,
+ GError **error)
+{
+ gboolean success;
+ gchar *std_out, *basename;
+ GError *err = NULL;
+ gint retval;
+
+ success = g_spawn_command_line_sync (command_decompress_tmp, &std_out,
+ NULL, &retval, &err);
+ basename = g_path_get_basename (command);
+ if (!success) {
+ g_set_error (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("Error launching the command “%s” in order to "
+ "decompress the comic book: %s"),
+ basename,
+ err->message);
+ g_error_free (err);
+ } else if (WIFEXITED (retval)) {
+ if (WEXITSTATUS (retval) == EXIT_SUCCESS) {
+ g_free (std_out);
+ g_free (basename);
+ return TRUE;
+ } else {
+ g_set_error (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("The command “%s” failed at "
+ "decompressing the comic book."),
+ basename);
+ g_free (std_out);
+ }
+ } else {
+ g_set_error (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("The command “%s” did not end normally."),
+ basename);
+ g_free (std_out);
+ }
+ g_free (basename);
+ return FALSE;
+}
+
+/* This function shows how to use the choosen command for decompressing a
+ * comic book file. It modifies fields of the ComicsDocument struct with
+ * this information */
+static gboolean
+comics_generate_command_lines (ComicsDocument *comics_document,
+ GError **error)
+{
+ gchar *quoted_file, *quoted_file_aux;
+ gchar *quoted_command;
+ ComicBookDecompressType type;
+
+ type = comics_document->command_usage;
+ comics_document->regex_arg = command_usage_def[type].regex_arg;
+ quoted_command = g_shell_quote (comics_document->selected_command);
+ if (comics_document->regex_arg) {
+ quoted_file = comics_regex_quote (comics_document->archive);
+ quoted_file_aux = g_shell_quote (comics_document->archive);
+ comics_document->list_command =
+ g_strdup_printf (command_usage_def[type].list,
+ comics_document->alternative_command,
+ quoted_file_aux);
+ g_free (quoted_file_aux);
+ } else {
+ quoted_file = g_shell_quote (comics_document->archive);
+ comics_document->list_command =
+ g_strdup_printf (command_usage_def[type].list,
+ quoted_command, quoted_file);
+ }
+ comics_document->extract_command =
+ g_strdup_printf (command_usage_def[type].extract,
+ quoted_command);
+ comics_document->offset = command_usage_def[type].offset;
+ if (command_usage_def[type].decompress_tmp) {
+ comics_document->dir = ev_mkdtemp ("evince-comics-XXXXXX", error);
+ if (comics_document->dir == NULL)
+ return FALSE;
+
+ /* unrar-free can't create directories, but ev_mkdtemp already created the dir */
+
+ comics_document->decompress_tmp =
+ g_strdup_printf (command_usage_def[type].decompress_tmp,
+ quoted_command, quoted_file,
+ comics_document->dir);
+ g_free (quoted_file);
+ g_free (quoted_command);
+
+ if (!comics_decompress_temp_dir (comics_document->decompress_tmp,
+ comics_document->selected_command, error))
+ return FALSE;
+ else
+ return TRUE;
+ } else {
+ g_free (quoted_file);
+ g_free (quoted_command);
+ return TRUE;
+ }
+
+}
+
+/* This function chooses an external command for decompressing a comic
+ * book based on its mime tipe. */
+static gboolean
+comics_check_decompress_command (gchar *mime_type,
+ ComicsDocument *comics_document,
+ GError **error)
+{
+ gboolean success;
+ gchar *std_out, *std_err;
+ gint retval;
+ GError *err = NULL;
+
+ /* FIXME, use proper cbr/cbz mime types once they're
+ * included in shared-mime-info */
+
+ if (!strcmp (mime_type, "application/x-cbr") ||
+ !strcmp (mime_type, "application/x-rar")) {
+ /* The RARLAB provides a no-charge proprietary (freeware)
+ * decompress-only client for Linux called unrar. Another
+ * option is a GPLv2-licensed command-line tool developed by
+ * the Gna! project. Confusingly enough, the free software RAR
+ * decoder is also named unrar. For this reason we need to add
+ * some lines for disambiguation. Sorry for the added the
+ * complexity but it's life :)
+ * Finally, some distributions, like Debian, rename this free
+ * option as unrar-free.
+ * */
+ comics_document->selected_command =
+ g_find_program_in_path ("unrar");
+ if (comics_document->selected_command) {
+ /* We only use std_err to avoid printing useless error
+ * messages on the terminal */
+ success =
+ g_spawn_command_line_sync (
+ comics_document->selected_command,
+ &std_out, &std_err,
+ &retval, &err);
+ if (!success) {
+ g_propagate_error (error, err);
+ g_error_free (err);
+ return FALSE;
+ /* I don't check retval status because RARLAB unrar
+ * doesn't have a way to return 0 without involving an
+ * operation with a file*/
+ } else if (WIFEXITED (retval)) {
+ if (g_strrstr (std_out,"freeware") != NULL)
+ /* The RARLAB freeware client */
+ comics_document->command_usage = RARLABS;
+ else
+ /* The Gna! free software client */
+ comics_document->command_usage = GNAUNRAR;
+
+ g_free (std_out);
+ g_free (std_err);
+ return TRUE;
+ }
+ }
+ /* The Gna! free software client with Debian naming convention */
+ comics_document->selected_command =
+ g_find_program_in_path ("unrar-free");
+ if (comics_document->selected_command) {
+ comics_document->command_usage = GNAUNRAR;
+ return TRUE;
+ }
+
+ } else if (!strcmp (mime_type, "application/x-cbz") ||
+ !strcmp (mime_type, "application/zip")) {
+ /* InfoZIP's unzip program */
+ comics_document->selected_command =
+ g_find_program_in_path ("unzip");
+ comics_document->alternative_command =
+ g_find_program_in_path ("zipnote");
+ if (comics_document->selected_command &&
+ comics_document->alternative_command) {
+ comics_document->command_usage = UNZIP;
+ return TRUE;
+ }
+
+ } else if (!strcmp (mime_type, "application/x-cb7") ||
+ !strcmp (mime_type, "application/x-7z-compressed")) {
+ /* 7zr, 7za and 7z are the commands from the p7zip project able
+ * to decompress .7z files */
+ comics_document->selected_command =
+ g_find_program_in_path ("7zr");
+ if (comics_document->selected_command) {
+ comics_document->command_usage = P7ZIP;
+ return TRUE;
+ }
+ comics_document->selected_command =
+ g_find_program_in_path ("7za");
+ if (comics_document->selected_command) {
+ comics_document->command_usage = P7ZIP;
+ return TRUE;
+ }
+ comics_document->selected_command =
+ g_find_program_in_path ("7z");
+ if (comics_document->selected_command) {
+ comics_document->command_usage = P7ZIP;
+ return TRUE;
+ }
+ } else if (!strcmp (mime_type, "application/x-cbt") ||
+ !strcmp (mime_type, "application/x-tar")) {
+ /* tar utility (Tape ARchive) */
+ comics_document->selected_command =
+ g_find_program_in_path ("tar");
+ if (comics_document->selected_command) {
+ comics_document->command_usage = TAR;
+ return TRUE;
+ }
+ } else {
+ g_set_error (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("Not a comic book MIME type: %s"),
+ mime_type);
+ return FALSE;
+ }
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("Can't find an appropriate command to "
+ "decompress this type of comic book"));
+ return FALSE;
+}
+
+static int
+sort_page_names (gconstpointer a,
+ gconstpointer b)
+{
+ return strcmp (* (const char **) a, * (const char **) b);
+}
+
+static gboolean
+comics_document_load (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ ComicsDocument *comics_document = COMICS_DOCUMENT (document);
+ GSList *supported_extensions;
+ gchar *std_out;
+ gchar *mime_type;
+ gchar **cb_files, *cb_file;
+ gboolean success;
+ int i, retval;
+ GError *err = NULL;
+
+ comics_document->archive = g_filename_from_uri (uri, NULL, error);
+ if (!comics_document->archive)
+ return FALSE;
+
+ mime_type = ev_file_get_mime_type (uri, FALSE, &err);
+ if (!mime_type) {
+ if (err) {
+ g_propagate_error (error, err);
+ } else {
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("Unknown MIME Type"));
+ }
+
+ return FALSE;
+ }
+
+ if (!comics_check_decompress_command (mime_type, comics_document,
+ error)) {
+ g_free (mime_type);
+ return FALSE;
+ } else if (!comics_generate_command_lines (comics_document, error)) {
+ g_free (mime_type);
+ return FALSE;
+ }
+
+ g_free (mime_type);
+
+ /* Get list of files in archive */
+ success = g_spawn_command_line_sync (comics_document->list_command,
+ &std_out, NULL, &retval, error);
+
+ if (!success) {
+ return FALSE;
+ } else if (!WIFEXITED(retval) || WEXITSTATUS(retval) != EXIT_SUCCESS) {
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("File corrupted"));
+ return FALSE;
+ }
+
+ /* FIXME: is this safe against filenames containing \n in the archive ? */
+ cb_files = g_strsplit (std_out, EV_EOL, 0);
+
+ g_free (std_out);
+
+ if (!cb_files) {
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("No files in archive"));
+ return FALSE;
+ }
+
+ comics_document->page_names = g_ptr_array_sized_new (64);
+
+ supported_extensions = get_supported_image_extensions ();
+ for (i = 0; cb_files[i] != NULL; i++) {
+ if (comics_document->offset != NO_OFFSET) {
+ if (g_utf8_strlen (cb_files[i],-1) >
+ comics_document->offset) {
+ cb_file =
+ g_utf8_offset_to_pointer (cb_files[i],
+ comics_document->offset);
+ } else {
+ continue;
+ }
+ } else {
+ cb_file = cb_files[i];
+ }
+ gchar *suffix = g_strrstr (cb_file, ".");
+ if (!suffix)
+ continue;
+ suffix = g_ascii_strdown (suffix + 1, -1);
+ if (g_slist_find_custom (supported_extensions, suffix,
+ (GCompareFunc) strcmp) != NULL) {
+ g_ptr_array_add (comics_document->page_names,
+ g_strstrip (g_strdup (cb_file)));
+ }
+ g_free (suffix);
+ }
+ g_strfreev (cb_files);
+ g_slist_foreach (supported_extensions, (GFunc) g_free, NULL);
+ g_slist_free (supported_extensions);
+
+ if (comics_document->page_names->len == 0) {
+ g_set_error (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("No images found in archive %s"),
+ uri);
+ return FALSE;
+ }
+
+ /* Now sort the pages */
+ g_ptr_array_sort (comics_document->page_names, sort_page_names);
+
+ return TRUE;
+}
+
+
+static gboolean
+comics_document_save (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ ComicsDocument *comics_document = COMICS_DOCUMENT (document);
+
+ return ev_xfer_uri_simple (comics_document->archive, uri, error);
+}
+
+static int
+comics_document_get_n_pages (EvDocument *document)
+{
+ ComicsDocument *comics_document = COMICS_DOCUMENT (document);
+
+ if (comics_document->page_names == NULL)
+ return 0;
+
+ return comics_document->page_names->len;
+}
+
+static void
+comics_document_get_page_size (EvDocument *document,
+ EvPage *page,
+ double *width,
+ double *height)
+{
+ GdkPixbufLoader *loader;
+ char **argv;
+ guchar buf[1024];
+ gboolean success, got_size = FALSE;
+ gint outpipe = -1;
+ GPid child_pid;
+ gssize bytes;
+ GdkPixbuf *pixbuf;
+ gchar *filename;
+ ComicsDocument *comics_document = COMICS_DOCUMENT (document);
+
+ if (!comics_document->decompress_tmp) {
+ argv = extract_argv (document, page->index);
+ success = g_spawn_async_with_pipes (NULL, argv, NULL,
+ G_SPAWN_SEARCH_PATH |
+ G_SPAWN_STDERR_TO_DEV_NULL,
+ NULL, NULL,
+ &child_pid,
+ NULL, &outpipe, NULL, NULL);
+ g_strfreev (argv);
+ g_return_if_fail (success == TRUE);
+
+ loader = gdk_pixbuf_loader_new ();
+ g_signal_connect (loader, "area-prepared",
+ G_CALLBACK (get_page_size_area_prepared_cb),
+ &got_size);
+
+ while (outpipe >= 0) {
+ bytes = read (outpipe, buf, 1024);
+
+ if (bytes > 0)
+ gdk_pixbuf_loader_write (loader, buf, bytes, NULL);
+ if (bytes <= 0 || got_size) {
+ close (outpipe);
+ outpipe = -1;
+ gdk_pixbuf_loader_close (loader, NULL);
+ }
+ }
+
+ if (gdk_pixbuf_loader_get_pixbuf (loader)) {
+ pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
+ if (width)
+ *width = gdk_pixbuf_get_width (pixbuf);
+ if (height)
+ *height = gdk_pixbuf_get_height (pixbuf);
+ }
+
+ g_spawn_close_pid (child_pid);
+ g_object_unref (loader);
+ } else {
+ filename = g_build_filename (comics_document->dir,
+ (char *) comics_document->page_names->pdata[page->index],
+ NULL);
+ pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
+ g_free (filename);
+ if (width)
+ *width = gdk_pixbuf_get_width (pixbuf);
+ if (height)
+ *height = gdk_pixbuf_get_height (pixbuf);
+ }
+}
+
+static void
+get_page_size_area_prepared_cb (GdkPixbufLoader *loader,
+ gpointer data)
+{
+ gboolean *got_size = data;
+ *got_size = TRUE;
+}
+
+static GdkPixbuf *
+comics_document_render_pixbuf (EvDocument *document,
+ EvRenderContext *rc)
+{
+ GdkPixbufLoader *loader;
+ GdkPixbuf *rotated_pixbuf;
+ char **argv;
+ guchar buf[4096];
+ gboolean success;
+ gint outpipe = -1;
+ GPid child_pid;
+ gssize bytes;
+ gint width, height;
+ gchar *filename;
+ ComicsDocument *comics_document = COMICS_DOCUMENT (document);
+
+ if (!comics_document->decompress_tmp) {
+ argv = extract_argv (document, rc->page->index);
+ success = g_spawn_async_with_pipes (NULL, argv, NULL,
+ G_SPAWN_SEARCH_PATH |
+ G_SPAWN_STDERR_TO_DEV_NULL,
+ NULL, NULL,
+ &child_pid,
+ NULL, &outpipe, NULL, NULL);
+ g_strfreev (argv);
+ g_return_val_if_fail (success == TRUE, NULL);
+
+ loader = gdk_pixbuf_loader_new ();
+ g_signal_connect (loader, "size-prepared",
+ G_CALLBACK (render_pixbuf_size_prepared_cb),
+ &rc->scale);
+
+ while (outpipe >= 0) {
+ bytes = read (outpipe, buf, 4096);
+
+ if (bytes > 0) {
+ gdk_pixbuf_loader_write (loader, buf, bytes,
+ NULL);
+ } else if (bytes <= 0) {
+ close (outpipe);
+ gdk_pixbuf_loader_close (loader, NULL);
+ outpipe = -1;
+ }
+ }
+
+ rotated_pixbuf = gdk_pixbuf_rotate_simple (
+ gdk_pixbuf_loader_get_pixbuf (loader),
+ 360 - rc->rotation);
+ g_spawn_close_pid (child_pid);
+ g_object_unref (loader);
+ } else {
+ filename =
+ g_build_filename (comics_document->dir,
+ (char *) comics_document->page_names->pdata[rc->page->index],
+ NULL);
+
+ gdk_pixbuf_get_file_info (filename, &width, &height);
+
+ rotated_pixbuf =
+ gdk_pixbuf_rotate_simple (gdk_pixbuf_new_from_file_at_size (
+ filename, width * (rc->scale) + 0.5,
+ height * (rc->scale) + 0.5, NULL),
+ 360 - rc->rotation);
+ g_free (filename);
+
+ }
+ return rotated_pixbuf;
+}
+
+static cairo_surface_t *
+comics_document_render (EvDocument *document,
+ EvRenderContext *rc)
+{
+ GdkPixbuf *pixbuf;
+ cairo_surface_t *surface;
+
+ pixbuf = comics_document_render_pixbuf (document, rc);
+ surface = ev_document_misc_surface_from_pixbuf (pixbuf);
+ g_object_unref (pixbuf);
+
+ return surface;
+}
+
+static void
+render_pixbuf_size_prepared_cb (GdkPixbufLoader *loader,
+ gint width,
+ gint height,
+ gpointer data)
+{
+ double *scale = data;
+ int w = (width * (*scale) + 0.5);
+ int h = (height * (*scale) + 0.5);
+
+ gdk_pixbuf_loader_set_size (loader, w, h);
+}
+
+/**
+ * comics_remove_dir: Removes a directory recursively.
+ * Returns:
+ * 0 if it was successfully deleted,
+ * -1 if an error occurred
+ */
+static int
+comics_remove_dir (gchar *path_name)
+{
+ GDir *content_dir;
+ const gchar *filename;
+ gchar *filename_with_path;
+
+ if (g_file_test (path_name, G_FILE_TEST_IS_DIR)) {
+ content_dir = g_dir_open (path_name, 0, NULL);
+ filename = g_dir_read_name (content_dir);
+ while (filename) {
+ filename_with_path =
+ g_build_filename (path_name,
+ filename, NULL);
+ comics_remove_dir (filename_with_path);
+ g_free (filename_with_path);
+ filename = g_dir_read_name (content_dir);
+ }
+ g_dir_close (content_dir);
+ }
+ /* Note from g_remove() documentation: on Windows, it is in general not
+ * possible to remove a file that is open to some process, or mapped
+ * into memory.*/
+ return (g_remove (path_name));
+}
+
+static void
+comics_document_finalize (GObject *object)
+{
+ ComicsDocument *comics_document = COMICS_DOCUMENT (object);
+
+ if (comics_document->decompress_tmp) {
+ if (comics_remove_dir (comics_document->dir) == -1)
+ g_warning (_("There was an error deleting “%s”."),
+ comics_document->dir);
+ g_free (comics_document->dir);
+ }
+
+ if (comics_document->page_names) {
+ g_ptr_array_foreach (comics_document->page_names, (GFunc) g_free, NULL);
+ g_ptr_array_free (comics_document->page_names, TRUE);
+ }
+
+ g_free (comics_document->archive);
+ g_free (comics_document->selected_command);
+ g_free (comics_document->alternative_command);
+ g_free (comics_document->extract_command);
+ g_free (comics_document->list_command);
+
+ G_OBJECT_CLASS (comics_document_parent_class)->finalize (object);
+}
+
+static void
+comics_document_class_init (ComicsDocumentClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass);
+
+ gobject_class->finalize = comics_document_finalize;
+
+ ev_document_class->load = comics_document_load;
+ ev_document_class->save = comics_document_save;
+ ev_document_class->get_n_pages = comics_document_get_n_pages;
+ ev_document_class->get_page_size = comics_document_get_page_size;
+ ev_document_class->render = comics_document_render;
+}
+
+static void
+comics_document_init (ComicsDocument *comics_document)
+{
+ comics_document->archive = NULL;
+ comics_document->page_names = NULL;
+ comics_document->extract_command = NULL;
+}
+
+/* Returns a list of file extensions supported by gdk-pixbuf */
+static GSList*
+get_supported_image_extensions()
+{
+ GSList *extensions = NULL;
+ GSList *formats = gdk_pixbuf_get_formats ();
+ GSList *l;
+
+ for (l = formats; l != NULL; l = l->next) {
+ int i;
+ gchar **ext = gdk_pixbuf_format_get_extensions (l->data);
+
+ for (i = 0; ext[i] != NULL; i++) {
+ extensions = g_slist_append (extensions,
+ g_strdup (ext[i]));
+ }
+
+ g_strfreev (ext);
+ }
+
+ g_slist_free (formats);
+ return extensions;
+}
+
+static GdkPixbuf *
+comics_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gboolean border)
+{
+ GdkPixbuf *thumbnail;
+
+ thumbnail = comics_document_render_pixbuf (EV_DOCUMENT (document), rc);
+
+ if (border) {
+ GdkPixbuf *tmp_pixbuf = thumbnail;
+
+ thumbnail = ev_document_misc_get_thumbnail_frame (-1, -1, tmp_pixbuf);
+ g_object_unref (tmp_pixbuf);
+ }
+
+ return thumbnail;
+}
+
+static void
+comics_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gint *width,
+ gint *height)
+{
+ gdouble page_width, page_height;
+
+ comics_document_get_page_size (EV_DOCUMENT (document), rc->page,
+ &page_width, &page_height);
+
+ if (rc->rotation == 90 || rc->rotation == 270) {
+ *width = (gint) (page_height * rc->scale);
+ *height = (gint) (page_width * rc->scale);
+ } else {
+ *width = (gint) (page_width * rc->scale);
+ *height = (gint) (page_height * rc->scale);
+ }
+}
+
+static void
+comics_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
+{
+ iface->get_thumbnail = comics_document_thumbnails_get_thumbnail;
+ iface->get_dimensions = comics_document_thumbnails_get_dimensions;
+}
+
+static char**
+extract_argv (EvDocument *document, gint page)
+{
+ ComicsDocument *comics_document = COMICS_DOCUMENT (document);
+ char **argv;
+ char *command_line, *quoted_archive, *quoted_filename;
+ GError *err = NULL;
+
+ if (page >= comics_document->page_names->len)
+ return NULL;
+
+ if (comics_document->regex_arg) {
+ quoted_archive = comics_regex_quote (comics_document->archive);
+ quoted_filename =
+ comics_regex_quote (comics_document->page_names->pdata[page]);
+ } else {
+ quoted_archive = g_shell_quote (comics_document->archive);
+ quoted_filename = g_shell_quote (comics_document->page_names->pdata[page]);
+ }
+
+ command_line = g_strdup_printf ("%s %s %s",
+ comics_document->extract_command,
+ quoted_archive,
+ quoted_filename);
+ g_shell_parse_argv (command_line, NULL, &argv, &err);
+
+ if (err) {
+ g_warning (_("Error %s"), err->message);
+ g_error_free (err);
+ return NULL;
+ }
+
+ g_free (command_line);
+ g_free (quoted_archive);
+ g_free (quoted_filename);
+ return argv;
+}
diff --git a/backend/comics/comics-document.h b/backend/comics/comics-document.h
new file mode 100644
index 00000000..76feef05
--- /dev/null
+++ b/backend/comics/comics-document.h
@@ -0,0 +1,38 @@
+/* comics-document.h: Implementation of EvDocument for comic book archives
+ * Copyright (C) 2005, Teemu Tervo <[email protected]>
+ *
+ * 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, 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 __COMICS_DOCUMENT_H__
+#define __COMICS_DOCUMENT_H__
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+#define COMICS_TYPE_DOCUMENT (comics_document_get_type ())
+#define COMICS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COMICS_TYPE_DOCUMENT, ComicsDocument))
+#define COMICS_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), COMICS_TYPE_DOCUMENT))
+
+typedef struct _ComicsDocument ComicsDocument;
+
+GType comics_document_get_type (void) G_GNUC_CONST;
+
+G_MODULE_EXPORT GType register_evince_backend (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* __COMICS_DOCUMENT_H__ */
diff --git a/backend/comics/comicsdocument.evince-backend.in b/backend/comics/comicsdocument.evince-backend.in
new file mode 100644
index 00000000..90d4c01b
--- /dev/null
+++ b/backend/comics/comicsdocument.evince-backend.in
@@ -0,0 +1,4 @@
+[Evince Backend]
+Module=comicsdocument
+_TypeDescription=Comic Books
+MimeType=application/x-cbr;application/x-cbz;application/x-cb7;application/x-cbt;
diff --git a/backend/djvu/Makefile.am b/backend/djvu/Makefile.am
new file mode 100644
index 00000000..6bc9d06e
--- /dev/null
+++ b/backend/djvu/Makefile.am
@@ -0,0 +1,38 @@
+INCLUDES = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libdocument \
+ -DMATEICONDIR=\""${prefix}/${DATADIRNAME}/pixmaps"\" \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DEVINCE_COMPILATION \
+ $(BACKEND_CFLAGS) \
+ $(DJVU_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+backend_LTLIBRARIES = libdjvudocument.la
+
+libdjvudocument_la_SOURCES = \
+ djvu-document.c \
+ djvu-document.h \
+ djvu-document-private.h \
+ djvu-links.c \
+ djvu-links.h \
+ djvu-text-page.c \
+ djvu-text-page.h
+
+libdjvudocument_la_LDFLAGS = $(BACKEND_LIBTOOL_FLAGS)
+libdjvudocument_la_LIBADD = \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(BACKEND_LIBS) \
+ $(DJVU_LIBS)
+
+backend_in_files = djvudocument.evince-backend.in
+backend_DATA = $(backend_in_files:.evince-backend.in=.evince-backend)
+
+EXTRA_DIST = $(backend_in_files)
+
+CLEANFILES = $(backend_DATA)
+
+@EV_INTLTOOL_EVINCE_BACKEND_RULE@
+
+-include $(top_srcdir)/git.mk
diff --git a/backend/djvu/djvu-document-private.h b/backend/djvu/djvu-document-private.h
new file mode 100644
index 00000000..2ec9b67a
--- /dev/null
+++ b/backend/djvu/djvu-document-private.h
@@ -0,0 +1,48 @@
+/*
+ * Declarations used throughout the djvu classes
+ *
+ * Copyright (C) 2006, Michael Hofmann <[email protected]>
+ *
+ * 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, 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 __DJVU_DOCUMENT_INTERNAL_H__
+#define __DJVU_DOCUMENT_INTERNAL_H__
+
+#include "djvu-document.h"
+
+#include <libdjvu/ddjvuapi.h>
+
+struct _DjvuDocument {
+ EvDocument parent_instance;
+
+ ddjvu_context_t *d_context;
+ ddjvu_document_t *d_document;
+ ddjvu_format_t *d_format;
+ ddjvu_format_t *thumbs_format;
+
+ gchar *uri;
+
+ /* PS exporter */
+ gchar *ps_filename;
+ GString *opts;
+};
+
+int djvu_document_get_n_pages (EvDocument *document);
+void djvu_handle_events (DjvuDocument *djvu_document,
+ int wait,
+ GError **error);
+
+#endif /* __DJVU_DOCUMENT_INTERNAL_H__ */
diff --git a/backend/djvu/djvu-document.c b/backend/djvu/djvu-document.c
new file mode 100644
index 00000000..aa0e595d
--- /dev/null
+++ b/backend/djvu/djvu-document.c
@@ -0,0 +1,706 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2005, Nickolay V. Shmyrev <[email protected]>
+ *
+ * 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, 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 "config.h"
+
+#include <config.h>
+#include "djvu-document.h"
+#include "djvu-text-page.h"
+#include "djvu-links.h"
+#include "djvu-document-private.h"
+#include "ev-document-thumbnails.h"
+#include "ev-file-exporter.h"
+#include "ev-document-misc.h"
+#include "ev-document-find.h"
+#include "ev-document-links.h"
+#include "ev-selection.h"
+#include "ev-file-helpers.h"
+
+#include <glib.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <glib/gi18n-lib.h>
+#include <string.h>
+
+#define SCALE_FACTOR 0.2
+
+enum {
+ PROP_0,
+ PROP_TITLE
+};
+
+struct _DjvuDocumentClass
+{
+ EvDocumentClass parent_class;
+};
+
+typedef struct _DjvuDocumentClass DjvuDocumentClass;
+
+static void djvu_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
+static void djvu_document_file_exporter_iface_init (EvFileExporterInterface *iface);
+static void djvu_document_find_iface_init (EvDocumentFindInterface *iface);
+static void djvu_document_document_links_iface_init (EvDocumentLinksInterface *iface);
+static void djvu_selection_iface_init (EvSelectionInterface *iface);
+
+EV_BACKEND_REGISTER_WITH_CODE (DjvuDocument, djvu_document,
+ {
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS, djvu_document_document_thumbnails_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER, djvu_document_file_exporter_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_FIND, djvu_document_find_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_LINKS, djvu_document_document_links_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_SELECTION, djvu_selection_iface_init);
+ });
+
+
+#define EV_DJVU_ERROR ev_djvu_error_quark ()
+
+static GQuark
+ev_djvu_error_quark (void)
+{
+ static GQuark q = 0;
+ if (q == 0)
+ q = g_quark_from_string ("ev-djvu-quark");
+
+ return q;
+}
+
+static void
+handle_message (const ddjvu_message_t *msg, GError **error)
+{
+ switch (msg->m_any.tag) {
+ case DDJVU_ERROR: {
+ gchar *error_str;
+
+ if (msg->m_error.filename) {
+ error_str = g_strdup_printf ("DjvuLibre error: %s:%d",
+ msg->m_error.filename,
+ msg->m_error.lineno);
+ } else {
+ error_str = g_strdup_printf ("DjvuLibre error: %s",
+ msg->m_error.message);
+ }
+
+ if (error) {
+ g_set_error_literal (error, EV_DJVU_ERROR, 0, error_str);
+ } else {
+ g_warning ("%s", error_str);
+ }
+
+ g_free (error_str);
+ return;
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void
+djvu_handle_events (DjvuDocument *djvu_document, int wait, GError **error)
+{
+ ddjvu_context_t *ctx = djvu_document->d_context;
+ const ddjvu_message_t *msg;
+
+ if (!ctx)
+ return;
+
+ if (wait)
+ ddjvu_message_wait (ctx);
+
+ while ((msg = ddjvu_message_peek (ctx))) {
+ handle_message (msg, error);
+ ddjvu_message_pop (ctx);
+ if (error && *error)
+ return;
+ }
+}
+
+static void
+djvu_wait_for_message (DjvuDocument *djvu_document, ddjvu_message_tag_t message, GError **error)
+{
+ ddjvu_context_t *ctx = djvu_document->d_context;
+ const ddjvu_message_t *msg;
+
+ ddjvu_message_wait (ctx);
+ while ((msg = ddjvu_message_peek (ctx)) && (msg->m_any.tag != message)) {
+ handle_message (msg, error);
+ ddjvu_message_pop (ctx);
+ if (error && *error)
+ return;
+ }
+ if (msg && msg->m_any.tag == message)
+ ddjvu_message_pop (ctx);
+}
+
+static gboolean
+djvu_document_load (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (document);
+ ddjvu_document_t *doc;
+ gchar *filename;
+ gboolean missing_files = FALSE;
+ GError *djvu_error = NULL;
+
+ /* FIXME: We could actually load uris */
+ filename = g_filename_from_uri (uri, NULL, error);
+ if (!filename)
+ return FALSE;
+
+ doc = ddjvu_document_create_by_filename (djvu_document->d_context, filename, TRUE);
+
+ if (!doc) {
+ g_free (filename);
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("DjVu document has incorrect format"));
+ return FALSE;
+ }
+
+ if (djvu_document->d_document)
+ ddjvu_document_release (djvu_document->d_document);
+
+ djvu_document->d_document = doc;
+
+ djvu_wait_for_message (djvu_document, DDJVU_DOCINFO, &djvu_error);
+ if (djvu_error) {
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ djvu_error->message);
+ g_error_free (djvu_error);
+ g_free (filename);
+ ddjvu_document_release (djvu_document->d_document);
+ djvu_document->d_document = NULL;
+
+ return FALSE;
+ }
+
+ if (ddjvu_document_decoding_error (djvu_document->d_document))
+ djvu_handle_events (djvu_document, TRUE, &djvu_error);
+
+ if (djvu_error) {
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ djvu_error->message);
+ g_error_free (djvu_error);
+ g_free (filename);
+ ddjvu_document_release (djvu_document->d_document);
+ djvu_document->d_document = NULL;
+
+ return FALSE;
+ }
+
+ g_free (djvu_document->uri);
+ djvu_document->uri = g_strdup (uri);
+
+ if (ddjvu_document_get_type (djvu_document->d_document) == DDJVU_DOCTYPE_INDIRECT) {
+ gint n_files;
+ gint i;
+ gchar *base;
+
+ base = g_path_get_dirname (filename);
+
+ n_files = ddjvu_document_get_filenum (djvu_document->d_document);
+ for (i = 0; i < n_files; i++) {
+ struct ddjvu_fileinfo_s fileinfo;
+ gchar *file;
+
+ ddjvu_document_get_fileinfo (djvu_document->d_document,
+ i, &fileinfo);
+
+ if (fileinfo.type != 'P')
+ continue;
+
+ file = g_build_filename (base, fileinfo.id, NULL);
+ if (!g_file_test (file, G_FILE_TEST_EXISTS)) {
+ missing_files = TRUE;
+ g_free (file);
+
+ break;
+ }
+ g_free (file);
+ }
+ g_free (base);
+ }
+ g_free (filename);
+
+ if (missing_files) {
+ g_set_error_literal (error,
+ G_FILE_ERROR,
+ G_FILE_ERROR_EXIST,
+ _("The document is composed of several files. "
+ "One or more of these files cannot be accessed."));
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+static gboolean
+djvu_document_save (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (document);
+
+ return ev_xfer_uri_simple (djvu_document->uri, uri, error);
+}
+
+int
+djvu_document_get_n_pages (EvDocument *document)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (document);
+
+ g_return_val_if_fail (djvu_document->d_document, 0);
+
+ return ddjvu_document_get_pagenum (djvu_document->d_document);
+}
+
+static void
+document_get_page_size (DjvuDocument *djvu_document,
+ gint page,
+ double *width,
+ double *height)
+{
+ ddjvu_pageinfo_t info;
+ ddjvu_status_t r;
+
+ while ((r = ddjvu_document_get_pageinfo(djvu_document->d_document, page, &info)) < DDJVU_JOB_OK)
+ djvu_handle_events(djvu_document, TRUE, NULL);
+
+ if (r >= DDJVU_JOB_FAILED)
+ djvu_handle_events(djvu_document, TRUE, NULL);
+
+ *width = info.width * SCALE_FACTOR;
+ *height = info.height * SCALE_FACTOR;
+}
+
+static void
+djvu_document_get_page_size (EvDocument *document,
+ EvPage *page,
+ double *width,
+ double *height)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (document);
+
+ g_return_if_fail (djvu_document->d_document);
+
+ document_get_page_size (djvu_document, page->index,
+ width, height);
+}
+
+static cairo_surface_t *
+djvu_document_render (EvDocument *document,
+ EvRenderContext *rc)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (document);
+ cairo_surface_t *surface;
+ gchar *pixels;
+ gint rowstride;
+ ddjvu_rect_t rrect;
+ ddjvu_rect_t prect;
+ ddjvu_page_t *d_page;
+ ddjvu_page_rotation_t rotation;
+ double page_width, page_height, tmp;
+
+ d_page = ddjvu_page_create_by_pageno (djvu_document->d_document, rc->page->index);
+
+ while (!ddjvu_page_decoding_done (d_page))
+ djvu_handle_events(djvu_document, TRUE, NULL);
+
+ page_width = ddjvu_page_get_width (d_page) * rc->scale * SCALE_FACTOR + 0.5;
+ page_height = ddjvu_page_get_height (d_page) * rc->scale * SCALE_FACTOR + 0.5;
+
+ switch (rc->rotation) {
+ case 90:
+ rotation = DDJVU_ROTATE_90;
+ tmp = page_height;
+ page_height = page_width;
+ page_width = tmp;
+
+ break;
+ case 180:
+ rotation = DDJVU_ROTATE_180;
+
+ break;
+ case 270:
+ rotation = DDJVU_ROTATE_270;
+ tmp = page_height;
+ page_height = page_width;
+ page_width = tmp;
+
+ break;
+ default:
+ rotation = DDJVU_ROTATE_0;
+ }
+
+ surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
+ page_width, page_height);
+ rowstride = cairo_image_surface_get_stride (surface);
+ pixels = (gchar *)cairo_image_surface_get_data (surface);
+
+ prect.x = 0;
+ prect.y = 0;
+ prect.w = page_width;
+ prect.h = page_height;
+ rrect = prect;
+
+ ddjvu_page_set_rotation (d_page, rotation);
+
+ ddjvu_page_render (d_page, DDJVU_RENDER_COLOR,
+ &prect,
+ &rrect,
+ djvu_document->d_format,
+ rowstride,
+ pixels);
+
+ cairo_surface_mark_dirty (surface);
+
+ return surface;
+}
+
+static void
+djvu_document_finalize (GObject *object)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (object);
+
+ if (djvu_document->d_document)
+ ddjvu_document_release (djvu_document->d_document);
+
+ if (djvu_document->opts)
+ g_string_free (djvu_document->opts, TRUE);
+
+ if (djvu_document->ps_filename)
+ g_free (djvu_document->ps_filename);
+
+ ddjvu_context_release (djvu_document->d_context);
+ ddjvu_format_release (djvu_document->d_format);
+ ddjvu_format_release (djvu_document->thumbs_format);
+ g_free (djvu_document->uri);
+
+ G_OBJECT_CLASS (djvu_document_parent_class)->finalize (object);
+}
+
+static void
+djvu_document_class_init (DjvuDocumentClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass);
+
+ gobject_class->finalize = djvu_document_finalize;
+
+ ev_document_class->load = djvu_document_load;
+ ev_document_class->save = djvu_document_save;
+ ev_document_class->get_n_pages = djvu_document_get_n_pages;
+ ev_document_class->get_page_size = djvu_document_get_page_size;
+ ev_document_class->render = djvu_document_render;
+}
+
+static gchar *
+djvu_text_copy (DjvuDocument *djvu_document,
+ gint page,
+ EvRectangle *rectangle)
+{
+ miniexp_t page_text;
+ gchar *text = NULL;
+
+ while ((page_text =
+ ddjvu_document_get_pagetext (djvu_document->d_document,
+ page, "char")) == miniexp_dummy)
+ djvu_handle_events (djvu_document, TRUE, NULL);
+
+ if (page_text != miniexp_nil) {
+ DjvuTextPage *page = djvu_text_page_new (page_text);
+
+ text = djvu_text_page_copy (page, rectangle);
+ djvu_text_page_free (page);
+ ddjvu_miniexp_release (djvu_document->d_document, page_text);
+ }
+
+ return text;
+}
+
+static gchar *
+djvu_selection_get_selected_text (EvSelection *selection,
+ EvPage *page,
+ EvSelectionStyle style,
+ EvRectangle *points)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (selection);
+ double width, height;
+ EvRectangle rectangle;
+ gchar *text;
+
+ djvu_document_get_page_size (EV_DOCUMENT (djvu_document),
+ page, &width, &height);
+ rectangle.x1 = points->x1 / SCALE_FACTOR;
+ rectangle.y1 = (height - points->y2) / SCALE_FACTOR;
+ rectangle.x2 = points->x2 / SCALE_FACTOR;
+ rectangle.y2 = (height - points->y1) / SCALE_FACTOR;
+
+ text = djvu_text_copy (djvu_document, page->index, &rectangle);
+
+ if (text == NULL)
+ text = g_strdup ("");
+
+ return text;
+}
+
+static void
+djvu_selection_iface_init (EvSelectionInterface *iface)
+{
+ iface->get_selected_text = djvu_selection_get_selected_text;
+}
+
+static void
+djvu_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gint *width,
+ gint *height)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (document);
+ gdouble page_width, page_height;
+
+ djvu_document_get_page_size (EV_DOCUMENT(djvu_document), rc->page,
+ &page_width, &page_height);
+
+ if (rc->rotation == 90 || rc->rotation == 270) {
+ *width = (gint) (page_height * rc->scale);
+ *height = (gint) (page_width * rc->scale);
+ } else {
+ *width = (gint) (page_width * rc->scale);
+ *height = (gint) (page_height * rc->scale);
+ }
+}
+
+static GdkPixbuf *
+djvu_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gboolean border)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (document);
+ GdkPixbuf *pixbuf, *rotated_pixbuf;
+ gdouble page_width, page_height;
+ gint thumb_width, thumb_height;
+ guchar *pixels;
+
+ g_return_val_if_fail (djvu_document->d_document, NULL);
+
+ djvu_document_get_page_size (EV_DOCUMENT(djvu_document), rc->page,
+ &page_width, &page_height);
+
+ thumb_width = (gint) (page_width * rc->scale);
+ thumb_height = (gint) (page_height * rc->scale);
+
+ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
+ thumb_width, thumb_height);
+ gdk_pixbuf_fill (pixbuf, 0xffffffff);
+ pixels = gdk_pixbuf_get_pixels (pixbuf);
+
+ while (ddjvu_thumbnail_status (djvu_document->d_document, rc->page->index, 1) < DDJVU_JOB_OK)
+ djvu_handle_events(djvu_document, TRUE, NULL);
+
+ ddjvu_thumbnail_render (djvu_document->d_document, rc->page->index,
+ &thumb_width, &thumb_height,
+ djvu_document->thumbs_format,
+ gdk_pixbuf_get_rowstride (pixbuf),
+ (gchar *)pixels);
+
+ rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, 360 - rc->rotation);
+ g_object_unref (pixbuf);
+
+ if (border) {
+ GdkPixbuf *tmp_pixbuf = rotated_pixbuf;
+
+ rotated_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, tmp_pixbuf);
+ g_object_unref (tmp_pixbuf);
+ }
+
+ return rotated_pixbuf;
+}
+
+static void
+djvu_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
+{
+ iface->get_thumbnail = djvu_document_thumbnails_get_thumbnail;
+ iface->get_dimensions = djvu_document_thumbnails_get_dimensions;
+}
+
+/* EvFileExporterIface */
+static void
+djvu_document_file_exporter_begin (EvFileExporter *exporter,
+ EvFileExporterContext *fc)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (exporter);
+
+ if (djvu_document->ps_filename)
+ g_free (djvu_document->ps_filename);
+ djvu_document->ps_filename = g_strdup (fc->filename);
+
+ g_string_assign (djvu_document->opts, "-page=");
+}
+
+static void
+djvu_document_file_exporter_do_page (EvFileExporter *exporter,
+ EvRenderContext *rc)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (exporter);
+
+ g_string_append_printf (djvu_document->opts, "%d,", (rc->page->index) + 1);
+}
+
+static void
+djvu_document_file_exporter_end (EvFileExporter *exporter)
+{
+ int d_optc = 1;
+ const char *d_optv[d_optc];
+
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (exporter);
+
+ FILE *fn = fopen (djvu_document->ps_filename, "w");
+ if (fn == NULL) {
+ g_warning ("Cannot open file “%s”.", djvu_document->ps_filename);
+ return;
+ }
+
+ d_optv[0] = djvu_document->opts->str;
+
+ ddjvu_job_t * job = ddjvu_document_print(djvu_document->d_document, fn, d_optc, d_optv);
+ while (!ddjvu_job_done(job)) {
+ djvu_handle_events (djvu_document, TRUE, NULL);
+ }
+
+ fclose(fn);
+}
+
+static EvFileExporterCapabilities
+djvu_document_file_exporter_get_capabilities (EvFileExporter *exporter)
+{
+ return EV_FILE_EXPORTER_CAN_PAGE_SET |
+ EV_FILE_EXPORTER_CAN_COPIES |
+ EV_FILE_EXPORTER_CAN_COLLATE |
+ EV_FILE_EXPORTER_CAN_REVERSE |
+ EV_FILE_EXPORTER_CAN_GENERATE_PS;
+}
+
+static void
+djvu_document_file_exporter_iface_init (EvFileExporterInterface *iface)
+{
+ iface->begin = djvu_document_file_exporter_begin;
+ iface->do_page = djvu_document_file_exporter_do_page;
+ iface->end = djvu_document_file_exporter_end;
+ iface->get_capabilities = djvu_document_file_exporter_get_capabilities;
+}
+
+static void
+djvu_document_init (DjvuDocument *djvu_document)
+{
+ guint masks[4] = { 0xff0000, 0xff00, 0xff, 0xff000000 };
+
+ djvu_document->d_context = ddjvu_context_create ("Evince");
+ djvu_document->d_format = ddjvu_format_create (DDJVU_FORMAT_RGBMASK32, 4, masks);
+ ddjvu_format_set_row_order (djvu_document->d_format, 1);
+
+ djvu_document->thumbs_format = ddjvu_format_create (DDJVU_FORMAT_RGB24, 0, 0);
+ ddjvu_format_set_row_order (djvu_document->thumbs_format, 1);
+
+ djvu_document->ps_filename = NULL;
+ djvu_document->opts = g_string_new ("");
+
+ djvu_document->d_document = NULL;
+}
+
+static GList *
+djvu_document_find_find_text (EvDocumentFind *document,
+ EvPage *page,
+ const char *text,
+ gboolean case_sensitive)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (document);
+ miniexp_t page_text;
+ gdouble width, height;
+ GList *matches = NULL, *l;
+
+ g_return_val_if_fail (text != NULL, NULL);
+
+ while ((page_text = ddjvu_document_get_pagetext (djvu_document->d_document,
+ page->index,
+ "char")) == miniexp_dummy)
+ djvu_handle_events (djvu_document, TRUE, NULL);
+
+ if (page_text != miniexp_nil) {
+ DjvuTextPage *tpage = djvu_text_page_new (page_text);
+
+ djvu_text_page_prepare_search (tpage, case_sensitive);
+ if (tpage->links->len > 0) {
+ djvu_text_page_search (tpage, text);
+ matches = tpage->results;
+ }
+ djvu_text_page_free (tpage);
+ ddjvu_miniexp_release (djvu_document->d_document, page_text);
+ }
+
+ if (!matches)
+ return NULL;
+
+ document_get_page_size (djvu_document, page->index, &width, &height);
+ for (l = matches; l && l->data; l = g_list_next (l)) {
+ EvRectangle *r = (EvRectangle *)l->data;
+ gdouble tmp;
+
+ tmp = r->y1;
+
+ r->x1 *= SCALE_FACTOR;
+ r->x2 *= SCALE_FACTOR;
+
+ tmp = r->y1;
+ r->y1 = height - r->y2 * SCALE_FACTOR;
+ r->y2 = height - tmp * SCALE_FACTOR;
+ }
+
+
+ return matches;
+}
+
+static void
+djvu_document_find_iface_init (EvDocumentFindInterface *iface)
+{
+ iface->find_text = djvu_document_find_find_text;
+}
+
+static EvMappingList *
+djvu_document_links_get_links (EvDocumentLinks *document_links,
+ EvPage *page)
+{
+ return djvu_links_get_links (document_links, page->index, SCALE_FACTOR);
+}
+
+static void
+djvu_document_document_links_iface_init (EvDocumentLinksInterface *iface)
+{
+ iface->has_document_links = djvu_links_has_document_links;
+ iface->get_links_model = djvu_links_get_links_model;
+ iface->get_links = djvu_document_links_get_links;
+ iface->find_link_dest = djvu_links_find_link_dest;
+}
diff --git a/backend/djvu/djvu-document.h b/backend/djvu/djvu-document.h
new file mode 100644
index 00000000..bcb916af
--- /dev/null
+++ b/backend/djvu/djvu-document.h
@@ -0,0 +1,38 @@
+/* djvu-document.h: Implementation of EvDocument for djvu documents
+ * Copyright (C) 2005, Nickolay V. Shmyrev <[email protected]>
+ *
+ * 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, 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 __DJVU_DOCUMENT_H__
+#define __DJVU_DOCUMENT_H__
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+#define DJVU_TYPE_DOCUMENT (djvu_document_get_type ())
+#define DJVU_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DJVU_TYPE_DOCUMENT, DjvuDocument))
+#define DJVU_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DJVU_TYPE_DOCUMENT))
+
+typedef struct _DjvuDocument DjvuDocument;
+
+GType djvu_document_get_type (void) G_GNUC_CONST;
+
+G_MODULE_EXPORT GType register_evince_backend (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* __DJVU_DOCUMENT_H__ */
diff --git a/backend/djvu/djvu-links.c b/backend/djvu/djvu-links.c
new file mode 100644
index 00000000..d13af0be
--- /dev/null
+++ b/backend/djvu/djvu-links.c
@@ -0,0 +1,434 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Implements hyperlink functionality for Djvu files.
+ * Copyright (C) 2006 Pauli Virtanen <[email protected]>
+ *
+ * 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, 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 <config.h>
+#include <string.h>
+#include <glib.h>
+#include <libdjvu/miniexp.h>
+#include "djvu-document.h"
+#include "djvu-links.h"
+#include "djvu-document-private.h"
+#include "ev-document-links.h"
+#include "ev-mapping-list.h"
+
+static gboolean number_from_miniexp(miniexp_t sexp, int *number)
+{
+ if (miniexp_numberp (sexp)) {
+ *number = miniexp_to_int (sexp);
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+static gboolean string_from_miniexp(miniexp_t sexp, const char **str)
+{
+ if (miniexp_stringp (sexp)) {
+ *str = miniexp_to_str (sexp);
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+static gboolean number_from_string_10(const gchar *str, guint64 *number)
+{
+ gchar *end_ptr;
+
+ *number = g_ascii_strtoull(str, &end_ptr, 10);
+ if (*end_ptr == '\0') {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+static EvLinkDest *
+get_djvu_link_dest (const DjvuDocument *djvu_document, const gchar *link_name, int base_page)
+{
+ guint64 page_num = 0;
+
+ /* #pagenum, #+pageoffset, #-pageoffset */
+ if (g_str_has_prefix (link_name, "#")) {
+ if (base_page > 0 && g_str_has_prefix (link_name+1, "+")) {
+ if (number_from_string_10 (link_name + 2, &page_num)) {
+ return ev_link_dest_new_page (base_page + page_num);
+ }
+ } else if (base_page > 0 && g_str_has_prefix (link_name+1, "-")) {
+ if (number_from_string_10 (link_name + 2, &page_num)) {
+ return ev_link_dest_new_page (base_page - page_num);
+ }
+ } else {
+ if (number_from_string_10 (link_name + 1, &page_num)) {
+ return ev_link_dest_new_page (page_num - 1);
+ }
+ }
+ } else {
+ /* FIXME: component file identifiers */
+ }
+
+ return NULL;
+}
+
+static EvLinkAction *
+get_djvu_link_action (const DjvuDocument *djvu_document, const gchar *link_name, int base_page)
+{
+ EvLinkDest *ev_dest = NULL;
+ EvLinkAction *ev_action = NULL;
+
+ ev_dest = get_djvu_link_dest (djvu_document, link_name, base_page);
+
+ if (ev_dest) {
+ ev_action = ev_link_action_new_dest (ev_dest);
+ } else if (strstr(link_name, "://") != NULL) {
+ /* It's probably an URI */
+ ev_action = ev_link_action_new_external_uri (link_name);
+ } else {
+ /* FIXME: component file identifiers */
+ }
+
+ return ev_action;
+}
+
+static gchar *
+str_to_utf8 (const gchar *text)
+{
+ static const gchar *encodings_to_try[2];
+ static gint n_encodings_to_try = 0;
+ gchar *utf8_text = NULL;
+ gint i;
+
+ if (n_encodings_to_try == 0) {
+ const gchar *charset;
+ gboolean charset_is_utf8;
+
+ charset_is_utf8 = g_get_charset (&charset);
+ if (!charset_is_utf8) {
+ encodings_to_try[n_encodings_to_try++] = charset;
+ }
+
+ if (g_ascii_strcasecmp (charset, "ISO-8859-1") != 0) {
+ encodings_to_try[n_encodings_to_try++] = "ISO-8859-1";
+ }
+ }
+
+ for (i = 0; i < n_encodings_to_try; i++) {
+ utf8_text = g_convert (text, -1, "UTF-8",
+ encodings_to_try[i],
+ NULL, NULL, NULL);
+ if (utf8_text)
+ break;
+ }
+
+ return utf8_text;
+}
+
+/**
+ * Builds the index GtkTreeModel from DjVu s-expr
+ *
+ * (bookmarks
+ * ("title1" "dest1"
+ * ("title12" "dest12"
+ * ... )
+ * ... )
+ * ("title2" "dest2"
+ * ... )
+ * ... )
+ */
+static void
+build_tree (const DjvuDocument *djvu_document,
+ GtkTreeModel *model,
+ GtkTreeIter *parent,
+ miniexp_t iter)
+{
+ const char *title, *link_dest;
+ char *title_markup;
+
+ EvLinkAction *ev_action = NULL;
+ EvLink *ev_link = NULL;
+ GtkTreeIter tree_iter;
+
+ if (miniexp_car (iter) == miniexp_symbol ("bookmarks")) {
+ /* The (bookmarks) cons */
+ iter = miniexp_cdr (iter);
+ } else if ( miniexp_length (iter) >= 2 ) {
+ gchar *utf8_title = NULL;
+
+ /* An entry */
+ if (!string_from_miniexp (miniexp_car (iter), &title)) goto unknown_entry;
+ if (!string_from_miniexp (miniexp_cadr (iter), &link_dest)) goto unknown_entry;
+
+
+ if (!g_utf8_validate (title, -1, NULL)) {
+ utf8_title = str_to_utf8 (title);
+ title_markup = g_markup_escape_text (utf8_title, -1);
+ } else {
+ title_markup = g_markup_escape_text (title, -1);
+ }
+
+ ev_action = get_djvu_link_action (djvu_document, link_dest, -1);
+
+ if (g_str_has_suffix (link_dest, ".djvu")) {
+ /* FIXME: component file identifiers */
+ } else if (ev_action) {
+ ev_link = ev_link_new (utf8_title ? utf8_title : title, ev_action);
+ gtk_tree_store_append (GTK_TREE_STORE (model), &tree_iter, parent);
+ gtk_tree_store_set (GTK_TREE_STORE (model), &tree_iter,
+ EV_DOCUMENT_LINKS_COLUMN_MARKUP, title_markup,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, ev_link,
+ EV_DOCUMENT_LINKS_COLUMN_EXPAND, FALSE,
+ -1);
+ g_object_unref (ev_link);
+ } else {
+ gtk_tree_store_append (GTK_TREE_STORE (model), &tree_iter, parent);
+ gtk_tree_store_set (GTK_TREE_STORE (model), &tree_iter,
+ EV_DOCUMENT_LINKS_COLUMN_MARKUP, title_markup,
+ EV_DOCUMENT_LINKS_COLUMN_EXPAND, FALSE,
+ -1);
+ }
+
+ g_free (title_markup);
+ g_free (utf8_title);
+ iter = miniexp_cddr (iter);
+ parent = &tree_iter;
+ } else {
+ goto unknown_entry;
+ }
+
+ for (; iter != miniexp_nil; iter = miniexp_cdr (iter)) {
+ build_tree (djvu_document, model, parent, miniexp_car (iter));
+ }
+ return;
+
+ unknown_entry:
+ g_warning ("DjvuLibre error: Unknown entry in bookmarks");
+ return;
+}
+
+static gboolean
+get_djvu_hyperlink_area (ddjvu_pageinfo_t *page_info,
+ miniexp_t sexp,
+ EvMapping *ev_link_mapping)
+{
+ miniexp_t iter;
+
+ iter = sexp;
+
+ if ((miniexp_car (iter) == miniexp_symbol ("rect") || miniexp_car (iter) == miniexp_symbol ("oval"))
+ && miniexp_length (iter) == 5) {
+ /* FIXME: get bounding box for (oval) since Evince doesn't support shaped links */
+ int minx, miny, width, height;
+
+ iter = miniexp_cdr (iter);
+ if (!number_from_miniexp (miniexp_car (iter), &minx)) goto unknown_link;
+ iter = miniexp_cdr (iter);
+ if (!number_from_miniexp (miniexp_car (iter), &miny)) goto unknown_link;
+ iter = miniexp_cdr (iter);
+ if (!number_from_miniexp (miniexp_car (iter), &width)) goto unknown_link;
+ iter = miniexp_cdr (iter);
+ if (!number_from_miniexp (miniexp_car (iter), &height)) goto unknown_link;
+
+ ev_link_mapping->area.x1 = minx;
+ ev_link_mapping->area.x2 = (minx + width);
+ ev_link_mapping->area.y1 = (page_info->height - (miny + height));
+ ev_link_mapping->area.y2 = (page_info->height - miny);
+ } else if (miniexp_car (iter) == miniexp_symbol ("poly")
+ && miniexp_length (iter) >= 5 && miniexp_length (iter) % 2 == 1) {
+
+ /* FIXME: get bounding box since Evince doesn't support shaped links */
+ int minx = G_MAXINT, miny = G_MAXINT;
+ int maxx = G_MININT, maxy = G_MININT;
+
+ iter = miniexp_cdr(iter);
+ while (iter != miniexp_nil) {
+ int x, y;
+
+ if (!number_from_miniexp (miniexp_car(iter), &x)) goto unknown_link;
+ iter = miniexp_cdr (iter);
+ if (!number_from_miniexp (miniexp_car(iter), &y)) goto unknown_link;
+ iter = miniexp_cdr (iter);
+
+ minx = MIN (minx, x);
+ miny = MIN (miny, y);
+ maxx = MAX (maxx, x);
+ maxy = MAX (maxy, y);
+ }
+
+ ev_link_mapping->area.x1 = minx;
+ ev_link_mapping->area.x2 = maxx;
+ ev_link_mapping->area.y1 = (page_info->height - maxy);
+ ev_link_mapping->area.y2 = (page_info->height - miny);
+ } else {
+ /* unknown */
+ goto unknown_link;
+ }
+
+ return TRUE;
+
+ unknown_link:
+ g_warning("DjvuLibre error: Unknown hyperlink area %s", miniexp_to_name(miniexp_car(sexp)));
+ return FALSE;
+}
+
+static EvMapping *
+get_djvu_hyperlink_mapping (DjvuDocument *djvu_document,
+ int page,
+ ddjvu_pageinfo_t *page_info,
+ miniexp_t sexp)
+{
+ EvMapping *ev_link_mapping = NULL;
+ EvLinkAction *ev_action = NULL;
+ miniexp_t iter;
+ const char *url, *url_target, *comment;
+
+ ev_link_mapping = g_new (EvMapping, 1);
+
+ iter = sexp;
+
+ if (miniexp_car (iter) != miniexp_symbol ("maparea")) goto unknown_mapping;
+
+ iter = miniexp_cdr(iter);
+
+ if (miniexp_caar(iter) == miniexp_symbol("url")) {
+ if (!string_from_miniexp (miniexp_cadr (miniexp_car (iter)), &url)) goto unknown_mapping;
+ if (!string_from_miniexp (miniexp_caddr (miniexp_car (iter)), &url_target)) goto unknown_mapping;
+ } else {
+ if (!string_from_miniexp (miniexp_car(iter), &url)) goto unknown_mapping;
+ url_target = NULL;
+ }
+
+ iter = miniexp_cdr (iter);
+ if (!string_from_miniexp (miniexp_car(iter), &comment)) goto unknown_mapping;
+
+ iter = miniexp_cdr (iter);
+ if (!get_djvu_hyperlink_area (page_info, miniexp_car(iter), ev_link_mapping)) goto unknown_mapping;
+
+ iter = miniexp_cdr (iter);
+ /* FIXME: DjVu hyperlink attributes are ignored */
+
+ ev_action = get_djvu_link_action (djvu_document, url, page);
+ if (!ev_action) goto unknown_mapping;
+
+ ev_link_mapping->data = ev_link_new (comment, ev_action);
+
+ return ev_link_mapping;
+
+ unknown_mapping:
+ if (ev_link_mapping) g_free(ev_link_mapping);
+ g_warning("DjvuLibre error: Unknown hyperlink %s", miniexp_to_name(miniexp_car(sexp)));
+ return NULL;
+}
+
+
+gboolean
+djvu_links_has_document_links (EvDocumentLinks *document_links)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (document_links);
+ miniexp_t outline;
+
+ while ((outline = ddjvu_document_get_outline (djvu_document->d_document)) == miniexp_dummy)
+ djvu_handle_events (djvu_document, TRUE, NULL);
+
+ if (outline) {
+ ddjvu_miniexp_release (djvu_document->d_document, outline);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+EvMappingList *
+djvu_links_get_links (EvDocumentLinks *document_links,
+ gint page,
+ double scale_factor)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (document_links);
+ GList *retval = NULL;
+ miniexp_t page_annotations = miniexp_nil;
+ miniexp_t *hyperlinks = NULL, *iter = NULL;
+ EvMapping *ev_link_mapping;
+ ddjvu_pageinfo_t page_info;
+
+ while ((page_annotations = ddjvu_document_get_pageanno (djvu_document->d_document, page)) == miniexp_dummy)
+ djvu_handle_events (djvu_document, TRUE, NULL);
+
+ while (ddjvu_document_get_pageinfo (djvu_document->d_document, page, &page_info) < DDJVU_JOB_OK)
+ djvu_handle_events(djvu_document, TRUE, NULL);
+
+ if (page_annotations) {
+ hyperlinks = ddjvu_anno_get_hyperlinks (page_annotations);
+ if (hyperlinks) {
+ for (iter = hyperlinks; *iter; ++iter) {
+ ev_link_mapping = get_djvu_hyperlink_mapping (djvu_document, page, &page_info, *iter);
+ if (ev_link_mapping) {
+ ev_link_mapping->area.x1 *= scale_factor;
+ ev_link_mapping->area.x2 *= scale_factor;
+ ev_link_mapping->area.y1 *= scale_factor;
+ ev_link_mapping->area.y2 *= scale_factor;
+ retval = g_list_prepend (retval, ev_link_mapping);
+ }
+ }
+ free (hyperlinks);
+ }
+ ddjvu_miniexp_release (djvu_document->d_document, page_annotations);
+ }
+
+ return ev_mapping_list_new (page, retval, (GDestroyNotify)g_object_unref);
+}
+
+EvLinkDest *
+djvu_links_find_link_dest (EvDocumentLinks *document_links,
+ const gchar *link_name)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (document_links);
+ EvLinkDest *ev_dest = NULL;
+
+ ev_dest = get_djvu_link_dest (djvu_document, link_name, -1);
+
+ if (!ev_dest) {
+ g_warning ("DjvuLibre error: unknown link destination %s", link_name);
+ }
+
+ return ev_dest;
+}
+
+GtkTreeModel *
+djvu_links_get_links_model (EvDocumentLinks *document_links)
+{
+ DjvuDocument *djvu_document = DJVU_DOCUMENT (document_links);
+ GtkTreeModel *model = NULL;
+ miniexp_t outline = miniexp_nil;
+
+ while ((outline = ddjvu_document_get_outline (djvu_document->d_document)) == miniexp_dummy)
+ djvu_handle_events (djvu_document, TRUE, NULL);
+
+ if (outline) {
+ model = (GtkTreeModel *) gtk_tree_store_new (EV_DOCUMENT_LINKS_COLUMN_NUM_COLUMNS,
+ G_TYPE_STRING,
+ G_TYPE_OBJECT,
+ G_TYPE_BOOLEAN,
+ G_TYPE_STRING);
+ build_tree (djvu_document, model, NULL, outline);
+
+ ddjvu_miniexp_release (djvu_document->d_document, outline);
+ }
+
+ return model;
+}
diff --git a/backend/djvu/djvu-links.h b/backend/djvu/djvu-links.h
new file mode 100644
index 00000000..76d9072c
--- /dev/null
+++ b/backend/djvu/djvu-links.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2006 Pauli Virtanen <[email protected]>
+ *
+ * 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, 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 __DJVU_LINK_H__
+#define __DJVU_LINK_H__
+
+#include "ev-document-links.h"
+#include "djvu-document.h"
+
+#include <glib.h>
+
+GtkTreeModel *djvu_links_get_links_model (EvDocumentLinks *document_links);
+EvMappingList *djvu_links_get_links (EvDocumentLinks *document_links,
+ gint page,
+ double scale_factor);
+EvLinkDest *djvu_links_find_link_dest (EvDocumentLinks *document_links,
+ const gchar *link_name);
+gboolean djvu_links_has_document_links (EvDocumentLinks *document_links);
+
+#endif /* __DJVU_LINK_H__ */
diff --git a/backend/djvu/djvu-text-page.c b/backend/djvu/djvu-text-page.c
new file mode 100644
index 00000000..3f171d1e
--- /dev/null
+++ b/backend/djvu/djvu-text-page.c
@@ -0,0 +1,445 @@
+/*
+ * Implements search and copy functionality for Djvu files.
+ * Copyright (C) 2006 Michael Hofmann <[email protected]>
+ *
+ * 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, 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 <config.h>
+#include <string.h>
+#include <glib.h>
+#include <libdjvu/miniexp.h>
+#include "djvu-text-page.h"
+
+
+/**
+ * djvu_text_page_selection_process:
+ * @page: #DjvuTextPage instance
+ * @p: s-expression to append
+ * @delimit: character/word/... delimiter
+ *
+ * Appends the string in @p to the page text.
+ *
+ * Returns: whether the end was not reached in this s-expression
+ */
+static gboolean
+djvu_text_page_selection_process (DjvuTextPage *page,
+ miniexp_t p,
+ int delimit)
+{
+ if (page->text || p == page->start) {
+ char *token_text = (char *) miniexp_to_str (miniexp_nth (5, p));
+ if (page->text) {
+ char *new_text =
+ g_strjoin (delimit & 2 ? "\n" :
+ delimit & 1 ? " " : NULL,
+ page->text, token_text,
+ NULL);
+ g_free (page->text);
+ page->text = new_text;
+ } else
+ page->text = g_strdup (token_text);
+ if (p == page->end)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**
+ * djvu_text_page_selection:
+ * @page: #DjvuTextPage instance
+ * @p: tree to append
+ * @delimit: character/word/... delimiter
+ *
+ * Walks the tree in @p and appends the text with
+ * djvu_text_page_selection_process() for all s-expressions
+ * between the start and end fields.
+ *
+ * Returns: whether the end was not reached in this subtree
+ */
+static gboolean
+djvu_text_page_selection (DjvuTextPage *page,
+ miniexp_t p,
+ int delimit)
+{
+ g_return_val_if_fail (miniexp_consp (p) && miniexp_symbolp
+ (miniexp_car (p)), FALSE);
+
+ if (miniexp_car (p) != page->char_symbol)
+ delimit |= miniexp_car (p) == page->word_symbol ? 1 : 2;
+
+ miniexp_t deeper = miniexp_cddr (miniexp_cdddr (p));
+ while (deeper != miniexp_nil) {
+ miniexp_t str = miniexp_car (deeper);
+ if (miniexp_stringp (str)) {
+ if (!djvu_text_page_selection_process
+ (page, p, delimit))
+ return FALSE;
+ } else {
+ if (!djvu_text_page_selection
+ (page, str, delimit))
+ return FALSE;
+ }
+ delimit = 0;
+ deeper = miniexp_cdr (deeper);
+ }
+ return TRUE;
+}
+
+static void
+djvu_text_page_limits_process (DjvuTextPage *page,
+ miniexp_t p,
+ EvRectangle *rect)
+{
+ EvRectangle current;
+
+ current.x1 = miniexp_to_int (miniexp_nth (1, p));
+ current.y1 = miniexp_to_int (miniexp_nth (2, p));
+ current.x2 = miniexp_to_int (miniexp_nth (3, p));
+ current.y2 = miniexp_to_int (miniexp_nth (4, p));
+ if (current.x2 >= rect->x1 && current.y1 <= rect->y2 &&
+ current.x1 <= rect->x2 && current.y2 >= rect->y1) {
+ if (page->start == miniexp_nil)
+ page->start = p;
+ page->end = p;
+ }
+}
+
+
+static void
+djvu_text_page_limits (DjvuTextPage *page,
+ miniexp_t p,
+ EvRectangle *rect)
+{
+ g_return_if_fail (miniexp_consp (p) &&
+ miniexp_symbolp (miniexp_car (p)));
+
+ miniexp_t deeper = miniexp_cddr (miniexp_cdddr (p));
+ while (deeper != miniexp_nil) {
+ miniexp_t str = miniexp_car (deeper);
+ if (miniexp_stringp (str))
+ djvu_text_page_limits_process (page, p, rect);
+ else
+ djvu_text_page_limits (page, str, rect);
+
+ deeper = miniexp_cdr (deeper);
+ }
+}
+
+char *
+djvu_text_page_copy (DjvuTextPage *page,
+ EvRectangle *rectangle)
+{
+ char* text;
+
+ page->start = miniexp_nil;
+ page->end = miniexp_nil;
+ djvu_text_page_limits (page, page->text_structure, rectangle);
+ djvu_text_page_selection (page, page->text_structure, 0);
+
+ /* Do not free the string */
+ text = page->text;
+ page->text = NULL;
+
+ return text;
+}
+
+/**
+ * djvu_text_page_position:
+ * @page: #DjvuTextPage instance
+ * @position: index in the page text
+ *
+ * Returns the closest s-expression that contains the given position in
+ * the page text.
+ *
+ * Returns: closest s-expression
+ */
+static miniexp_t
+djvu_text_page_position (DjvuTextPage *page,
+ int position)
+{
+ GArray *links = page->links;
+ int low = 0;
+ int hi = links->len - 1;
+ int mid = 0;
+
+ g_return_val_if_fail (hi >= 0, miniexp_nil);
+
+ /* Shamelessly copied from GNU classpath */
+ while (low <= hi) {
+ mid = (low + hi) >> 1;
+ DjvuTextLink *link =
+ &g_array_index (links, DjvuTextLink, mid);
+ if (link->position == position)
+ break;
+ else if (link->position > position)
+ hi = --mid;
+ else
+ low = mid + 1;
+ }
+
+ return g_array_index (page->links, DjvuTextLink, mid).pair;
+}
+
+/**
+ * djvu_text_page_union:
+ * @target: first rectangle and result
+ * @source: second rectangle
+ *
+ * Calculates the bounding box of two rectangles and stores the reuslt
+ * in the first.
+ */
+static void
+djvu_text_page_union (EvRectangle *target,
+ EvRectangle *source)
+{
+ if (source->x1 < target->x1)
+ target->x1 = source->x1;
+ if (source->x2 > target->x2)
+ target->x2 = source->x2;
+ if (source->y1 < target->y1)
+ target->y1 = source->y1;
+ if (source->y2 > target->y2)
+ target->y2 = source->y2;
+}
+
+/**
+ * djvu_text_page_sexpr_process:
+ * @page: #DjvuTextPage instance
+ * @p: s-expression to append
+ * @start: first s-expression in the selection
+ * @end: last s-expression in the selection
+ *
+ * Appends the rectangle defined by @p to the internal bounding box rectangle.
+ *
+ * Returns: whether the end was not reached in this s-expression
+ */
+static gboolean
+djvu_text_page_sexpr_process (DjvuTextPage *page,
+ miniexp_t p,
+ miniexp_t start,
+ miniexp_t end)
+{
+ if (page->bounding_box || p == start) {
+ EvRectangle *new_rectangle = ev_rectangle_new ();
+ new_rectangle->x1 = miniexp_to_int (miniexp_nth (1, p));
+ new_rectangle->y1 = miniexp_to_int (miniexp_nth (2, p));
+ new_rectangle->x2 = miniexp_to_int (miniexp_nth (3, p));
+ new_rectangle->y2 = miniexp_to_int (miniexp_nth (4, p));
+ if (page->bounding_box) {
+ djvu_text_page_union (page->bounding_box,
+ new_rectangle);
+ g_free (new_rectangle);
+ } else
+ page->bounding_box = new_rectangle;
+ if (p == end)
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**
+ * djvu_text_page_sexpr:
+ * @page: #DjvuTextPage instance
+ * @p: tree to append
+ * @start: first s-expression in the selection
+ * @end: last s-expression in the selection
+ *
+ * Walks the tree in @p and extends the rectangle with
+ * djvu_text_page_process() for all s-expressions between @start and @end.
+ *
+ * Returns: whether the end was not reached in this subtree
+ */
+static gboolean
+djvu_text_page_sexpr (DjvuTextPage *page,
+ miniexp_t p,
+ miniexp_t start,
+ miniexp_t end)
+{
+ g_return_val_if_fail (miniexp_consp (p) && miniexp_symbolp
+ (miniexp_car (p)), FALSE);
+
+ miniexp_t deeper = miniexp_cddr (miniexp_cdddr (p));
+ while (deeper != miniexp_nil) {
+ miniexp_t str = miniexp_car (deeper);
+ if (miniexp_stringp (str)) {
+ if (!djvu_text_page_sexpr_process
+ (page, p, start, end))
+ return FALSE;
+ } else {
+ if (!djvu_text_page_sexpr
+ (page, str, start, end))
+ return FALSE;
+ }
+ deeper = miniexp_cdr (deeper);
+ }
+ return TRUE;
+}
+
+/**
+ * djvu_text_page_box:
+ * @page: #DjvuTextPage instance
+ * @start: first s-expression in the selection
+ * @end: last s-expression in the selection
+ *
+ * Builds a rectangle that contains all s-expressions in the given range.
+ */
+static EvRectangle *
+djvu_text_page_box (DjvuTextPage *page,
+ miniexp_t start,
+ miniexp_t end)
+{
+ page->bounding_box = NULL;
+ djvu_text_page_sexpr (page, page->text_structure, start, end);
+ return page->bounding_box;
+}
+
+/**
+ * djvu_text_page_append_search:
+ * @page: #DjvuTextPage instance
+ * @p: tree to append
+ * @case_sensitive: do not ignore case
+ * @delimit: insert spaces because of higher (sentence/paragraph/...) break
+ *
+ * Appends the tree in @p to the internal text string.
+ */
+static void
+djvu_text_page_append_text (DjvuTextPage *page,
+ miniexp_t p,
+ gboolean case_sensitive,
+ gboolean delimit)
+{
+ char *token_text;
+
+ g_return_if_fail (miniexp_consp (p) &&
+ miniexp_symbolp (miniexp_car (p)));
+
+ delimit |= page->char_symbol != miniexp_car (p);
+
+ miniexp_t deeper = miniexp_cddr (miniexp_cdddr (p));
+ while (deeper != miniexp_nil) {
+ miniexp_t data = miniexp_car (deeper);
+ if (miniexp_stringp (data)) {
+ DjvuTextLink link;
+ link.position = page->text == NULL ? 0 :
+ strlen (page->text);
+ link.pair = p;
+ g_array_append_val (page->links, link);
+
+ token_text = (char *) miniexp_to_str (data);
+ if (!case_sensitive)
+ token_text = g_utf8_casefold (token_text, -1);
+ if (page->text == NULL)
+ page->text = g_strdup (token_text);
+ else {
+ char *new_text =
+ g_strjoin (delimit ? " " : NULL,
+ page->text, token_text,
+ NULL);
+ g_free (page->text);
+ page->text = new_text;
+ }
+ if (!case_sensitive)
+ g_free (token_text);
+ } else
+ djvu_text_page_append_text (page, data,
+ case_sensitive, delimit);
+ delimit = FALSE;
+ deeper = miniexp_cdr (deeper);
+ }
+}
+
+/**
+ * djvu_text_page_search:
+ * @page: #DjvuTextPage instance
+ * @text: text to search
+ *
+ * Searches the page for the given text. The results list has to be
+ * externally freed afterwards.
+ */
+void
+djvu_text_page_search (DjvuTextPage *page,
+ const char *text)
+{
+ char *haystack = page->text;
+ int search_len;
+ EvRectangle *result;
+ if (page->links->len == 0)
+ return;
+
+ search_len = strlen (text);
+ while ((haystack = strstr (haystack, text)) != NULL) {
+ int start_p = haystack - page->text;
+ miniexp_t start = djvu_text_page_position (page, start_p);
+ int end_p = start_p + search_len - 1;
+ miniexp_t end = djvu_text_page_position (page, end_p);
+ result = djvu_text_page_box (page, start, end);
+ g_assert (result);
+ page->results = g_list_prepend (page->results, result);
+ haystack = haystack + search_len;
+ }
+ page->results = g_list_reverse (page->results);
+}
+
+
+/**
+ * djvu_text_page_prepare_search:
+ * @page: #DjvuTextPage instance
+ * @case_sensitive: do not ignore case
+ *
+ * Indexes the page text and prepares the page for subsequent searches.
+ */
+void
+djvu_text_page_prepare_search (DjvuTextPage *page,
+ gboolean case_sensitive)
+{
+ djvu_text_page_append_text (page, page->text_structure,
+ case_sensitive, FALSE);
+}
+
+/**
+ * djvu_text_page_new:
+ * @text: S-expression of the page text
+ *
+ * Creates a new page to search.
+ *
+ * Returns: new #DjvuTextPage instance
+ */
+DjvuTextPage *
+djvu_text_page_new (miniexp_t text)
+{
+ DjvuTextPage *page;
+
+ page = g_new0 (DjvuTextPage, 1);
+ page->links = g_array_new (FALSE, FALSE, sizeof (DjvuTextLink));
+ page->char_symbol = miniexp_symbol ("char");
+ page->word_symbol = miniexp_symbol ("word");
+ page->text_structure = text;
+ return page;
+}
+
+/**
+ * djvu_text_page_free:
+ * @page: #DjvuTextPage instance
+ *
+ * Frees the given #DjvuTextPage instance.
+ */
+void
+djvu_text_page_free (DjvuTextPage *page)
+{
+ g_free (page->text);
+ g_array_free (page->links, TRUE);
+ g_free (page);
+}
diff --git a/backend/djvu/djvu-text-page.h b/backend/djvu/djvu-text-page.h
new file mode 100644
index 00000000..6e16f259
--- /dev/null
+++ b/backend/djvu/djvu-text-page.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2006 Michael Hofmann <[email protected]>
+ *
+ * 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, 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 __DJVU_TEXT_PAGE_H__
+#define __DJVU_TEXT_PAGE_H__
+
+#include "ev-document.h"
+
+#include <string.h>
+#include <glib.h>
+#include <libdjvu/miniexp.h>
+
+
+typedef struct _DjvuTextPage DjvuTextPage;
+typedef struct _DjvuTextLink DjvuTextLink;
+
+struct _DjvuTextPage {
+ char *text;
+ GArray *links;
+ GList *results;
+ miniexp_t char_symbol;
+ miniexp_t word_symbol;
+ EvRectangle *bounding_box;
+ miniexp_t text_structure;
+ miniexp_t start;
+ miniexp_t end;
+};
+
+struct _DjvuTextLink {
+ int position;
+ miniexp_t pair;
+};
+
+char * djvu_text_page_copy (DjvuTextPage *page,
+ EvRectangle *rectangle);
+void djvu_text_page_prepare_search (DjvuTextPage *page,
+ gboolean case_sensitive);
+void djvu_text_page_search (DjvuTextPage *page,
+ const char *text);
+DjvuTextPage* djvu_text_page_new (miniexp_t text);
+void djvu_text_page_free (DjvuTextPage *page);
+
+#endif /* __DJVU_TEXT_PAGE_H__ */
+
diff --git a/backend/djvu/djvudocument.evince-backend.in b/backend/djvu/djvudocument.evince-backend.in
new file mode 100644
index 00000000..485af118
--- /dev/null
+++ b/backend/djvu/djvudocument.evince-backend.in
@@ -0,0 +1,4 @@
+[Evince Backend]
+Module=djvudocument
+_TypeDescription=DjVu Documents
+MimeType=image/vnd.djvu
diff --git a/backend/dvi/Makefile.am b/backend/dvi/Makefile.am
new file mode 100644
index 00000000..6dcd50ed
--- /dev/null
+++ b/backend/dvi/Makefile.am
@@ -0,0 +1,47 @@
+SUBDIRS = mdvi-lib
+
+INCLUDES = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libdocument \
+ -I$(srcdir)/mdvi-lib \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DEVINCE_COMPILATION \
+ $(WARN_CFLAGS) \
+ $(BACKEND_CFLAGS) \
+ $(SPECTRE_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+backend_LTLIBRARIES = libdvidocument.la
+
+libdvidocument_la_SOURCES = \
+ dvi-document.c \
+ dvi-document.h \
+ cairo-device.c \
+ cairo-device.h \
+ texmfcnf.c \
+ texmfcnf.h \
+ fonts.c \
+ fonts.h
+
+libdvidocument_la_LDFLAGS = $(BACKEND_LIBTOOL_FLAGS)
+libdvidocument_la_LIBADD = \
+ mdvi-lib/libmdvi.la \
+ -lkpathsea \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(BACKEND_LIBS) \
+ $(SPECTRE_LIBS)
+
+if WITH_TYPE1_FONTS
+libdvidocument_la_LIBADD += -lt1
+endif
+
+backend_in_files = dvidocument.evince-backend.in
+backend_DATA = $(backend_in_files:.evince-backend.in=.evince-backend)
+
+EXTRA_DIST = $(backend_in_files)
+
+CLEANFILES = $(backend_DATA)
+
+@EV_INTLTOOL_EVINCE_BACKEND_RULE@
+
+-include $(top_srcdir)/git.mk
diff --git a/backend/dvi/cairo-device.c b/backend/dvi/cairo-device.c
new file mode 100644
index 00000000..47425cad
--- /dev/null
+++ b/backend/dvi/cairo-device.c
@@ -0,0 +1,373 @@
+/*
+ * Copyright (C) 2007 Carlos Garcia Campos <[email protected]>
+ *
+ * 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, 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 <config.h>
+
+#include <stdlib.h>
+#include <gdk/gdk.h>
+#ifdef HAVE_SPECTRE
+#include <libspectre/spectre.h>
+#endif
+
+#include "cairo-device.h"
+
+typedef struct {
+ cairo_t *cr;
+
+ gint xmargin;
+ gint ymargin;
+
+ gdouble scale;
+
+ Ulong fg;
+ Ulong bg;
+
+} DviCairoDevice;
+
+static void
+dvi_cairo_draw_glyph (DviContext *dvi,
+ DviFontChar *ch,
+ int x0,
+ int y0)
+{
+ DviCairoDevice *cairo_device;
+ int x, y, w, h;
+ gboolean isbox;
+ DviGlyph *glyph;
+ cairo_surface_t *surface;
+
+ cairo_device = (DviCairoDevice *) dvi->device.device_data;
+
+ glyph = &ch->grey;
+
+ isbox = (glyph->data == NULL ||
+ (dvi->params.flags & MDVI_PARAM_CHARBOXES) ||
+ MDVI_GLYPH_ISEMPTY (glyph->data));
+
+ x = - glyph->x + x0 + cairo_device->xmargin;
+ y = - glyph->y + y0 + cairo_device->ymargin;
+ w = glyph->w;
+ h = glyph->h;
+
+ surface = cairo_get_target (cairo_device->cr);
+ if (x < 0 || y < 0
+ || x + w > cairo_image_surface_get_width (surface)
+ || y + h > cairo_image_surface_get_height (surface))
+ return;
+
+ cairo_save (cairo_device->cr);
+ if (isbox) {
+ cairo_rectangle (cairo_device->cr,
+ x - cairo_device->xmargin,
+ y - cairo_device->ymargin,
+ w, h);
+ cairo_stroke (cairo_device->cr);
+ } else {
+ cairo_translate (cairo_device->cr, x, y);
+ cairo_set_source_surface (cairo_device->cr,
+ (cairo_surface_t *) glyph->data,
+ 0, 0);
+ cairo_paint (cairo_device->cr);
+ }
+
+ cairo_restore (cairo_device->cr);
+}
+
+static void
+dvi_cairo_draw_rule (DviContext *dvi,
+ int x,
+ int y,
+ Uint width,
+ Uint height,
+ int fill)
+{
+ DviCairoDevice *cairo_device;
+ Ulong color;
+
+ cairo_device = (DviCairoDevice *) dvi->device.device_data;
+
+ color = cairo_device->fg;
+
+ cairo_save (cairo_device->cr);
+
+ cairo_set_line_width (cairo_device->cr,
+ cairo_get_line_width (cairo_device->cr) * cairo_device->scale);
+ cairo_set_source_rgb (cairo_device->cr,
+ ((color >> 16) & 0xff) / 255.,
+ ((color >> 8) & 0xff) / 255.,
+ ((color >> 0) & 0xff) / 255.);
+
+ cairo_rectangle (cairo_device->cr,
+ x + cairo_device->xmargin,
+ y + cairo_device->ymargin,
+ width, height);
+ if (fill == 0) {
+ cairo_stroke (cairo_device->cr);
+ } else {
+ cairo_fill (cairo_device->cr);
+ }
+
+ cairo_restore (cairo_device->cr);
+}
+
+#ifdef HAVE_SPECTRE
+static void
+dvi_cairo_draw_ps (DviContext *dvi,
+ const char *filename,
+ int x,
+ int y,
+ Uint width,
+ Uint height)
+{
+ DviCairoDevice *cairo_device;
+ unsigned char *data = NULL;
+ int row_length;
+ SpectreDocument *psdoc;
+ SpectreRenderContext *rc;
+ int w, h;
+ SpectreStatus status;
+ cairo_surface_t *image;
+
+ cairo_device = (DviCairoDevice *) dvi->device.device_data;
+
+ psdoc = spectre_document_new ();
+ spectre_document_load (psdoc, filename);
+ if (spectre_document_status (psdoc)) {
+ spectre_document_free (psdoc);
+ return;
+ }
+
+ spectre_document_get_page_size (psdoc, &w, &h);
+
+ rc = spectre_render_context_new ();
+ spectre_render_context_set_scale (rc,
+ (double)width / w,
+ (double)height / h);
+ spectre_document_render_full (psdoc, rc, &data, &row_length);
+ status = spectre_document_status (psdoc);
+
+ spectre_render_context_free (rc);
+ spectre_document_free (psdoc);
+
+ if (status) {
+ g_warning ("Error rendering PS document %s: %s\n",
+ filename, spectre_status_to_string (status));
+ free (data);
+
+ return;
+ }
+
+ image = cairo_image_surface_create_for_data ((unsigned char *)data,
+ CAIRO_FORMAT_RGB24,
+ width, height,
+ row_length);
+
+ cairo_save (cairo_device->cr);
+
+ cairo_translate (cairo_device->cr,
+ x + cairo_device->xmargin,
+ y + cairo_device->ymargin);
+ cairo_set_source_surface (cairo_device->cr, image, 0, 0);
+ cairo_paint (cairo_device->cr);
+
+ cairo_restore (cairo_device->cr);
+
+ cairo_surface_destroy (image);
+ free (data);
+}
+#endif /* HAVE_SPECTRE */
+
+static int
+dvi_cairo_alloc_colors (void *device_data,
+ Ulong *pixels,
+ int npixels,
+ Ulong fg,
+ Ulong bg,
+ double gamma,
+ int density)
+{
+ double frac;
+ GdkColor color, color_fg, color_bg;
+ int i, n;
+
+ color_bg.red = (bg >> 16) & 0xff;
+ color_bg.green = (bg >> 8) & 0xff;
+ color_bg.blue = (bg >> 0) & 0xff;
+
+ color_fg.red = (fg >> 16) & 0xff;
+ color_fg.green = (fg >> 8) & 0xff;
+ color_fg.blue = (fg >> 0) & 0xff;
+
+ n = npixels - 1;
+ for (i = 0; i < npixels; i++) {
+ frac = (gamma > 0) ?
+ pow ((double)i / n, 1 / gamma) :
+ 1 - pow ((double)(n - i) / n, -gamma);
+
+ color.red = frac * ((double)color_fg.red - color_bg.red) + color_bg.red;
+ color.green = frac * ((double)color_fg.green - color_bg.green) + color_bg.green;
+ color.blue = frac * ((double)color_fg.blue - color_bg.blue) + color_bg.blue;
+
+ pixels[i] = (color.red << 16) + (color.green << 8) + color.blue + 0xff000000;
+ }
+
+ return npixels;
+}
+
+static void *
+dvi_cairo_create_image (void *device_data,
+ Uint width,
+ Uint height,
+ Uint bpp)
+{
+ return cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
+}
+
+static void
+dvi_cairo_free_image (void *ptr)
+{
+ cairo_surface_destroy ((cairo_surface_t *)ptr);
+}
+
+static void
+dvi_cairo_put_pixel (void *image, int x, int y, Ulong color)
+{
+ cairo_surface_t *surface;
+ gint rowstride;
+ guint32 *p;
+
+ surface = (cairo_surface_t *) image;
+
+ rowstride = cairo_image_surface_get_stride (surface);
+ p = (guint32*) (cairo_image_surface_get_data (surface) + y * rowstride + x * 4);
+
+ *p = color;
+}
+
+static void
+dvi_cairo_set_color (void *device_data, Ulong fg, Ulong bg)
+{
+ DviCairoDevice *cairo_device = (DviCairoDevice *) device_data;
+
+ cairo_device->fg = fg;
+ cairo_device->bg = bg;
+}
+
+/* Public methods */
+void
+mdvi_cairo_device_init (DviDevice *device)
+{
+ device->device_data = g_new0 (DviCairoDevice, 1);
+
+ device->draw_glyph = dvi_cairo_draw_glyph;
+ device->draw_rule = dvi_cairo_draw_rule;
+ device->alloc_colors = dvi_cairo_alloc_colors;
+ device->create_image = dvi_cairo_create_image;
+ device->free_image = dvi_cairo_free_image;
+ device->put_pixel = dvi_cairo_put_pixel;
+ device->set_color = dvi_cairo_set_color;
+#ifdef HAVE_SPECTRE
+ device->draw_ps = dvi_cairo_draw_ps;
+#else
+ device->draw_ps = NULL;
+#endif
+ device->refresh = NULL;
+}
+
+void
+mdvi_cairo_device_free (DviDevice *device)
+{
+ DviCairoDevice *cairo_device;
+
+ cairo_device = (DviCairoDevice *) device->device_data;
+
+ if (cairo_device->cr)
+ cairo_destroy (cairo_device->cr);
+
+ g_free (cairo_device);
+}
+
+cairo_surface_t *
+mdvi_cairo_device_get_surface (DviDevice *device)
+{
+ DviCairoDevice *cairo_device;
+
+ cairo_device = (DviCairoDevice *) device->device_data;
+
+ return cairo_surface_reference (cairo_get_target (cairo_device->cr));
+}
+
+void
+mdvi_cairo_device_render (DviContext* dvi)
+{
+ DviCairoDevice *cairo_device;
+ gint page_width;
+ gint page_height;
+ cairo_surface_t *surface;
+ guchar *pixels;
+ gint rowstride;
+ static const cairo_user_data_key_t key;
+
+ cairo_device = (DviCairoDevice *) dvi->device.device_data;
+
+ if (cairo_device->cr)
+ cairo_destroy (cairo_device->cr);
+
+ page_width = dvi->dvi_page_w * dvi->params.conv + 2 * cairo_device->xmargin;
+ page_height = dvi->dvi_page_h * dvi->params.vconv + 2 * cairo_device->ymargin;
+
+ rowstride = page_width * 4;
+ pixels = (guchar *) g_malloc (page_height * rowstride);
+ memset (pixels, 0xff, page_height * rowstride);
+
+ surface = cairo_image_surface_create_for_data (pixels,
+ CAIRO_FORMAT_RGB24,
+ page_width, page_height,
+ rowstride);
+ cairo_surface_set_user_data (surface, &key,
+ pixels, (cairo_destroy_func_t)g_free);
+
+ cairo_device->cr = cairo_create (surface);
+ cairo_surface_destroy (surface);
+
+ mdvi_dopage (dvi, dvi->currpage);
+}
+
+void
+mdvi_cairo_device_set_margins (DviDevice *device,
+ gint xmargin,
+ gint ymargin)
+{
+ DviCairoDevice *cairo_device;
+
+ cairo_device = (DviCairoDevice *) device->device_data;
+
+ cairo_device->xmargin = xmargin;
+ cairo_device->ymargin = ymargin;
+}
+
+void
+mdvi_cairo_device_set_scale (DviDevice *device,
+ gdouble scale)
+{
+ DviCairoDevice *cairo_device;
+
+ cairo_device = (DviCairoDevice *) device->device_data;
+
+ cairo_device->scale = scale;
+}
diff --git a/backend/dvi/cairo-device.h b/backend/dvi/cairo-device.h
new file mode 100644
index 00000000..bf76d2af
--- /dev/null
+++ b/backend/dvi/cairo-device.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2007 Carlos Garcia Campos <[email protected]>
+ *
+ * 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, 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 MDVI_CAIRO_DEVICE
+#define MDVI_CAIRO_DEVICE
+
+#include <glib.h>
+#include <cairo.h>
+
+#include "mdvi.h"
+
+G_BEGIN_DECLS
+
+void mdvi_cairo_device_init (DviDevice *device);
+void mdvi_cairo_device_free (DviDevice *device);
+cairo_surface_t *mdvi_cairo_device_get_surface (DviDevice *device);
+void mdvi_cairo_device_render (DviContext* dvi);
+void mdvi_cairo_device_set_margins (DviDevice *device,
+ gint xmargin,
+ gint ymargin);
+void mdvi_cairo_device_set_scale (DviDevice *device,
+ gdouble scale);
+
+G_END_DECLS
+
+#endif /* MDVI_CAIRO_DEVICE */
diff --git a/backend/dvi/dvi-document.c b/backend/dvi/dvi-document.c
new file mode 100644
index 00000000..a4a3dc6d
--- /dev/null
+++ b/backend/dvi/dvi-document.c
@@ -0,0 +1,610 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2005, Nickolay V. Shmyrev <[email protected]>
+ *
+ * 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, 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 "config.h"
+
+#include "dvi-document.h"
+#include "texmfcnf.h"
+#include "ev-document-thumbnails.h"
+#include "ev-document-misc.h"
+#include "ev-file-exporter.h"
+#include "ev-file-helpers.h"
+
+#include "mdvi.h"
+#include "fonts.h"
+#include "color.h"
+#include "cairo-device.h"
+
+#include <glib/gi18n-lib.h>
+#include <ctype.h>
+#ifdef G_OS_WIN32
+# define WIFEXITED(x) ((x) != 3)
+# define WEXITSTATUS(x) (x)
+#else
+# include <sys/wait.h>
+#endif
+#include <stdlib.h>
+
+GMutex *dvi_context_mutex = NULL;
+
+enum {
+ PROP_0,
+ PROP_TITLE
+};
+
+struct _DviDocumentClass
+{
+ EvDocumentClass parent_class;
+};
+
+struct _DviDocument
+{
+ EvDocument parent_instance;
+
+ DviContext *context;
+ DviPageSpec *spec;
+ DviParams *params;
+
+ /* To let document scale we should remember width and height */
+ double base_width;
+ double base_height;
+
+ gchar *uri;
+
+ /* PDF exporter */
+ gchar *exporter_filename;
+ GString *exporter_opts;
+};
+
+typedef struct _DviDocumentClass DviDocumentClass;
+
+static void dvi_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
+static void dvi_document_file_exporter_iface_init (EvFileExporterInterface *iface);
+static void dvi_document_do_color_special (DviContext *dvi,
+ const char *prefix,
+ const char *arg);
+
+EV_BACKEND_REGISTER_WITH_CODE (DviDocument, dvi_document,
+ {
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS, dvi_document_document_thumbnails_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER, dvi_document_file_exporter_iface_init);
+ });
+
+static gboolean
+dvi_document_load (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ gchar *filename;
+ DviDocument *dvi_document = DVI_DOCUMENT(document);
+
+ filename = g_filename_from_uri (uri, NULL, error);
+ if (!filename)
+ return FALSE;
+
+ g_mutex_lock (dvi_context_mutex);
+ if (dvi_document->context)
+ mdvi_destroy_context (dvi_document->context);
+
+ dvi_document->context = mdvi_init_context(dvi_document->params, dvi_document->spec, filename);
+ g_mutex_unlock (dvi_context_mutex);
+ g_free (filename);
+
+ if (!dvi_document->context) {
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("DVI document has incorrect format"));
+ return FALSE;
+ }
+
+ mdvi_cairo_device_init (&dvi_document->context->device);
+
+
+ dvi_document->base_width = dvi_document->context->dvi_page_w * dvi_document->context->params.conv
+ + 2 * unit2pix(dvi_document->params->dpi, MDVI_HMARGIN) / dvi_document->params->hshrink;
+
+ dvi_document->base_height = dvi_document->context->dvi_page_h * dvi_document->context->params.vconv
+ + 2 * unit2pix(dvi_document->params->vdpi, MDVI_VMARGIN) / dvi_document->params->vshrink;
+
+ g_free (dvi_document->uri);
+ dvi_document->uri = g_strdup (uri);
+
+ return TRUE;
+}
+
+
+static gboolean
+dvi_document_save (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ DviDocument *dvi_document = DVI_DOCUMENT (document);
+
+ return ev_xfer_uri_simple (dvi_document->uri, uri, error);
+}
+
+static int
+dvi_document_get_n_pages (EvDocument *document)
+{
+ DviDocument *dvi_document = DVI_DOCUMENT (document);
+
+ return dvi_document->context->npages;
+}
+
+static void
+dvi_document_get_page_size (EvDocument *document,
+ EvPage *page,
+ double *width,
+ double *height)
+{
+ DviDocument *dvi_document = DVI_DOCUMENT (document);
+
+ *width = dvi_document->base_width;
+ *height = dvi_document->base_height;;
+}
+
+static cairo_surface_t *
+dvi_document_render (EvDocument *document,
+ EvRenderContext *rc)
+{
+ cairo_surface_t *surface;
+ cairo_surface_t *rotated_surface;
+ DviDocument *dvi_document = DVI_DOCUMENT(document);
+ gint required_width, required_height;
+ gint proposed_width, proposed_height;
+ gint xmargin = 0, ymargin = 0;
+
+ /* We should protect our context since it's not
+ * thread safe. The work to the future -
+ * let context render page independently
+ */
+ g_mutex_lock (dvi_context_mutex);
+
+ mdvi_setpage (dvi_document->context, rc->page->index);
+
+ mdvi_set_shrink (dvi_document->context,
+ (int)((dvi_document->params->hshrink - 1) / rc->scale) + 1,
+ (int)((dvi_document->params->vshrink - 1) / rc->scale) + 1);
+
+ required_width = dvi_document->base_width * rc->scale + 0.5;
+ required_height = dvi_document->base_height * rc->scale + 0.5;
+ proposed_width = dvi_document->context->dvi_page_w * dvi_document->context->params.conv;
+ proposed_height = dvi_document->context->dvi_page_h * dvi_document->context->params.vconv;
+
+ if (required_width >= proposed_width)
+ xmargin = (required_width - proposed_width) / 2;
+ if (required_height >= proposed_height)
+ ymargin = (required_height - proposed_height) / 2;
+
+ mdvi_cairo_device_set_margins (&dvi_document->context->device, xmargin, ymargin);
+ mdvi_cairo_device_set_scale (&dvi_document->context->device, rc->scale);
+ mdvi_cairo_device_render (dvi_document->context);
+ surface = mdvi_cairo_device_get_surface (&dvi_document->context->device);
+
+ g_mutex_unlock (dvi_context_mutex);
+
+ rotated_surface = ev_document_misc_surface_rotate_and_scale (surface,
+ required_width,
+ required_height,
+ rc->rotation);
+ cairo_surface_destroy (surface);
+
+ return rotated_surface;
+}
+
+static void
+dvi_document_finalize (GObject *object)
+{
+ DviDocument *dvi_document = DVI_DOCUMENT(object);
+
+ g_mutex_lock (dvi_context_mutex);
+ if (dvi_document->context) {
+ mdvi_cairo_device_free (&dvi_document->context->device);
+ mdvi_destroy_context (dvi_document->context);
+ }
+ g_mutex_unlock (dvi_context_mutex);
+
+ if (dvi_document->params)
+ g_free (dvi_document->params);
+
+ if (dvi_document->exporter_filename)
+ g_free (dvi_document->exporter_filename);
+
+ if (dvi_document->exporter_opts)
+ g_string_free (dvi_document->exporter_opts, TRUE);
+
+ g_free (dvi_document->uri);
+
+ G_OBJECT_CLASS (dvi_document_parent_class)->finalize (object);
+}
+
+static gboolean
+dvi_document_support_synctex (EvDocument *document)
+{
+ return TRUE;
+}
+
+static void
+dvi_document_class_init (DviDocumentClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass);
+ gchar *texmfcnf;
+
+ gobject_class->finalize = dvi_document_finalize;
+
+ texmfcnf = get_texmfcnf();
+ mdvi_init_kpathsea ("evince", MDVI_MFMODE, MDVI_FALLBACK_FONT, MDVI_DPI, texmfcnf);
+ g_free(texmfcnf);
+
+ mdvi_register_special ("Color", "color", NULL, dvi_document_do_color_special, 1);
+ mdvi_register_fonts ();
+
+ dvi_context_mutex = g_mutex_new ();
+
+ ev_document_class->load = dvi_document_load;
+ ev_document_class->save = dvi_document_save;
+ ev_document_class->get_n_pages = dvi_document_get_n_pages;
+ ev_document_class->get_page_size = dvi_document_get_page_size;
+ ev_document_class->render = dvi_document_render;
+ ev_document_class->support_synctex = dvi_document_support_synctex;
+}
+
+static void
+dvi_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gint *width,
+ gint *height)
+{
+ DviDocument *dvi_document = DVI_DOCUMENT (document);
+ gdouble page_width = dvi_document->base_width;
+ gdouble page_height = dvi_document->base_height;
+
+ if (rc->rotation == 90 || rc->rotation == 270) {
+ *width = (gint) (page_height * rc->scale);
+ *height = (gint) (page_width * rc->scale);
+ } else {
+ *width = (gint) (page_width * rc->scale);
+ *height = (gint) (page_height * rc->scale);
+ }
+}
+
+static GdkPixbuf *
+dvi_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gboolean border)
+{
+ DviDocument *dvi_document = DVI_DOCUMENT (document);
+ GdkPixbuf *pixbuf;
+ GdkPixbuf *rotated_pixbuf;
+ cairo_surface_t *surface;
+ gint thumb_width, thumb_height;
+ gint proposed_width, proposed_height;
+
+ thumb_width = (gint) (dvi_document->base_width * rc->scale);
+ thumb_height = (gint) (dvi_document->base_height * rc->scale);
+
+ g_mutex_lock (dvi_context_mutex);
+
+ mdvi_setpage (dvi_document->context, rc->page->index);
+
+ mdvi_set_shrink (dvi_document->context,
+ (int)dvi_document->base_width * dvi_document->params->hshrink / thumb_width,
+ (int)dvi_document->base_height * dvi_document->params->vshrink / thumb_height);
+
+ proposed_width = dvi_document->context->dvi_page_w * dvi_document->context->params.conv;
+ proposed_height = dvi_document->context->dvi_page_h * dvi_document->context->params.vconv;
+
+ if (border) {
+ mdvi_cairo_device_set_margins (&dvi_document->context->device,
+ MAX (thumb_width - proposed_width, 0) / 2,
+ MAX (thumb_height - proposed_height, 0) / 2);
+ } else {
+ mdvi_cairo_device_set_margins (&dvi_document->context->device,
+ MAX (thumb_width - proposed_width - 2, 0) / 2,
+ MAX (thumb_height - proposed_height - 2, 0) / 2);
+ }
+
+ mdvi_cairo_device_set_scale (&dvi_document->context->device, rc->scale);
+ mdvi_cairo_device_render (dvi_document->context);
+ surface = mdvi_cairo_device_get_surface (&dvi_document->context->device);
+ g_mutex_unlock (dvi_context_mutex);
+
+ pixbuf = ev_document_misc_pixbuf_from_surface (surface);
+ cairo_surface_destroy (surface);
+
+ rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, 360 - rc->rotation);
+ g_object_unref (pixbuf);
+
+ if (border) {
+ GdkPixbuf *tmp_pixbuf = rotated_pixbuf;
+
+ rotated_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, tmp_pixbuf);
+ g_object_unref (tmp_pixbuf);
+ }
+
+ return rotated_pixbuf;
+}
+
+static void
+dvi_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
+{
+ iface->get_thumbnail = dvi_document_thumbnails_get_thumbnail;
+ iface->get_dimensions = dvi_document_thumbnails_get_dimensions;
+}
+
+/* EvFileExporterIface */
+static void
+dvi_document_file_exporter_begin (EvFileExporter *exporter,
+ EvFileExporterContext *fc)
+{
+ DviDocument *dvi_document = DVI_DOCUMENT(exporter);
+
+ if (dvi_document->exporter_filename)
+ g_free (dvi_document->exporter_filename);
+ dvi_document->exporter_filename = g_strdup (fc->filename);
+
+ if (dvi_document->exporter_opts) {
+ g_string_free (dvi_document->exporter_opts, TRUE);
+ }
+ dvi_document->exporter_opts = g_string_new ("-s ");
+}
+
+static void
+dvi_document_file_exporter_do_page (EvFileExporter *exporter,
+ EvRenderContext *rc)
+{
+ DviDocument *dvi_document = DVI_DOCUMENT(exporter);
+
+ g_string_append_printf (dvi_document->exporter_opts, "%d,", (rc->page->index) + 1);
+}
+
+static void
+dvi_document_file_exporter_end (EvFileExporter *exporter)
+{
+ gchar *command_line;
+ gint exit_stat;
+ GError *err = NULL;
+ gboolean success;
+
+ DviDocument *dvi_document = DVI_DOCUMENT(exporter);
+
+ command_line = g_strdup_printf ("dvipdfm %s -o %s \"%s\"", /* dvipdfm -s 1,2,.., -o exporter_filename dvi_filename */
+ dvi_document->exporter_opts->str,
+ dvi_document->exporter_filename,
+ dvi_document->context->filename);
+
+ success = g_spawn_command_line_sync (command_line,
+ NULL,
+ NULL,
+ &exit_stat,
+ &err);
+
+ g_free (command_line);
+
+ if (success == FALSE) {
+ g_warning ("Error: %s", err->message);
+ } else if (!WIFEXITED(exit_stat) || WEXITSTATUS(exit_stat) != EXIT_SUCCESS){
+ g_warning ("Error: dvipdfm does not end normally or exit with a failure status.");
+ }
+
+ if (err)
+ g_error_free (err);
+}
+
+static EvFileExporterCapabilities
+dvi_document_file_exporter_get_capabilities (EvFileExporter *exporter)
+{
+ return EV_FILE_EXPORTER_CAN_PAGE_SET |
+ EV_FILE_EXPORTER_CAN_COPIES |
+ EV_FILE_EXPORTER_CAN_COLLATE |
+ EV_FILE_EXPORTER_CAN_REVERSE |
+ EV_FILE_EXPORTER_CAN_GENERATE_PDF;
+}
+
+static void
+dvi_document_file_exporter_iface_init (EvFileExporterInterface *iface)
+{
+ iface->begin = dvi_document_file_exporter_begin;
+ iface->do_page = dvi_document_file_exporter_do_page;
+ iface->end = dvi_document_file_exporter_end;
+ iface->get_capabilities = dvi_document_file_exporter_get_capabilities;
+}
+
+#define RGB2ULONG(r,g,b) ((0xFF<<24)|(r<<16)|(g<<8)|(b))
+
+static gboolean
+hsb2rgb (float h, float s, float v, guchar *red, guchar *green, guchar *blue)
+{
+ float i, f, p, q, t, r, g, b;
+
+ if (h == 360)
+ h = 0;
+ else if ((h > 360) || (h < 0))
+ return FALSE;
+
+ s /= 100;
+ v /= 100;
+ h /= 60;
+ i = floor (h);
+ f = h - i;
+ p = v * (1 - s);
+ q = v * (1 - (s * f));
+ t = v * (1 - (s * (1 - f)));
+
+ if (i == 0) {
+ r = v;
+ g = t;
+ b = p;
+ } else if (i == 1) {
+ r = q;
+ g = v;
+ b = p;
+ } else if (i == 2) {
+ r = p;
+ g = v;
+ b = t;
+ } else if (i == 3) {
+ r = p;
+ g = q;
+ b = v;
+ } else if (i == 4) {
+ r = t;
+ g = p;
+ b = v;
+ } else if (i == 5) {
+ r = v;
+ g = p;
+ b = q;
+ }
+
+ *red = (guchar)floor(r * 255.0);
+ *green = (guchar)floor(g * 255.0);
+ *blue = (guchar)floor(b * 255.0);
+
+ return TRUE;
+}
+
+static void
+parse_color (const gchar *ptr,
+ gdouble *color,
+ gint n_color)
+{
+ gchar *p = (gchar *)ptr;
+ gint i;
+
+ for (i = 0; i < n_color; i++) {
+ while (isspace (*p)) p++;
+ color[i] = g_ascii_strtod (p, NULL);
+ while (!isspace (*p) && *p != '\0') p++;
+ if (*p == '\0')
+ break;
+ }
+}
+
+static void
+dvi_document_do_color_special (DviContext *dvi, const char *prefix, const char *arg)
+{
+ if (strncmp (arg, "pop", 3) == 0) {
+ mdvi_pop_color (dvi);
+ } else if (strncmp (arg, "push", 4) == 0) {
+ /* Find color source: Named, CMYK or RGB */
+ const char *tmp = arg + 4;
+
+ while (isspace (*tmp)) tmp++;
+
+ if (!strncmp ("rgb", tmp, 3)) {
+ gdouble rgb[3];
+ guchar red, green, blue;
+
+ parse_color (tmp + 4, rgb, 3);
+
+ red = 255 * rgb[0];
+ green = 255 * rgb[1];
+ blue = 255 * rgb[2];
+
+ mdvi_push_color (dvi, RGB2ULONG (red, green, blue), 0xFFFFFFFF);
+ } else if (!strncmp ("hsb", tmp, 4)) {
+ gdouble hsb[3];
+ guchar red, green, blue;
+
+ parse_color (tmp + 4, hsb, 3);
+
+ if (hsb2rgb (hsb[0], hsb[1], hsb[2], &red, &green, &blue))
+ mdvi_push_color (dvi, RGB2ULONG (red, green, blue), 0xFFFFFFFF);
+ } else if (!strncmp ("cmyk", tmp, 4)) {
+ gdouble cmyk[4];
+ double r, g, b;
+ guchar red, green, blue;
+
+ parse_color (tmp + 5, cmyk, 4);
+
+ r = 1.0 - cmyk[0] - cmyk[3];
+ if (r < 0.0)
+ r = 0.0;
+ g = 1.0 - cmyk[1] - cmyk[3];
+ if (g < 0.0)
+ g = 0.0;
+ b = 1.0 - cmyk[2] - cmyk[3];
+ if (b < 0.0)
+ b = 0.0;
+
+ red = r * 255 + 0.5;
+ green = g * 255 + 0.5;
+ blue = b * 255 + 0.5;
+
+ mdvi_push_color (dvi, RGB2ULONG (red, green, blue), 0xFFFFFFFF);
+ } else if (!strncmp ("gray ", tmp, 5)) {
+ gdouble gray;
+ guchar rgb;
+
+ parse_color (tmp + 5, &gray, 1);
+
+ rgb = gray * 255 + 0.5;
+
+ mdvi_push_color (dvi, RGB2ULONG (rgb, rgb, rgb), 0xFFFFFFFF);
+ } else {
+ GdkColor color;
+
+ if (gdk_color_parse (tmp, &color)) {
+ guchar red, green, blue;
+
+ red = color.red * 255 / 65535.;
+ green = color.green * 255 / 65535.;
+ blue = color.blue * 255 / 65535.;
+
+ mdvi_push_color (dvi, RGB2ULONG (red, green, blue), 0xFFFFFFFF);
+ }
+ }
+ }
+}
+
+static void
+dvi_document_init_params (DviDocument *dvi_document)
+{
+ dvi_document->params = g_new0 (DviParams, 1);
+
+ dvi_document->params->dpi = MDVI_DPI;
+ dvi_document->params->vdpi = MDVI_VDPI;
+ dvi_document->params->mag = MDVI_MAGNIFICATION;
+ dvi_document->params->density = MDVI_DEFAULT_DENSITY;
+ dvi_document->params->gamma = MDVI_DEFAULT_GAMMA;
+ dvi_document->params->flags = MDVI_PARAM_ANTIALIASED;
+ dvi_document->params->hdrift = 0;
+ dvi_document->params->vdrift = 0;
+ dvi_document->params->hshrink = MDVI_SHRINK_FROM_DPI(dvi_document->params->dpi);
+ dvi_document->params->vshrink = MDVI_SHRINK_FROM_DPI(dvi_document->params->vdpi);
+ dvi_document->params->orientation = MDVI_ORIENT_TBLR;
+
+ dvi_document->spec = NULL;
+
+ dvi_document->params->bg = 0xffffffff;
+ dvi_document->params->fg = 0xff000000;
+}
+
+static void
+dvi_document_init (DviDocument *dvi_document)
+{
+ dvi_document->context = NULL;
+ dvi_document_init_params (dvi_document);
+
+ dvi_document->exporter_filename = NULL;
+ dvi_document->exporter_opts = NULL;
+}
diff --git a/backend/dvi/dvi-document.h b/backend/dvi/dvi-document.h
new file mode 100644
index 00000000..845301b6
--- /dev/null
+++ b/backend/dvi/dvi-document.h
@@ -0,0 +1,38 @@
+/* dvi-document.h: Implementation of EvDocument for dvi documents
+ * Copyright (C) 2005, Nickolay V. Shmyrev <[email protected]>
+ *
+ * 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, 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 __DVI_DOCUMENT_H__
+#define __DVI_DOCUMENT_H__
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+#define DVI_TYPE_DOCUMENT (dvi_document_get_type ())
+#define DVI_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DVI_TYPE_DOCUMENT, DviDocument))
+#define DVI_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DVI_TYPE_DOCUMENT))
+
+typedef struct _DviDocument DviDocument;
+
+GType dvi_document_get_type (void) G_GNUC_CONST;
+
+G_MODULE_EXPORT GType register_evince_backend (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* __DVI_DOCUMENT_H__ */
diff --git a/backend/dvi/dvidocument.evince-backend.in b/backend/dvi/dvidocument.evince-backend.in
new file mode 100644
index 00000000..cb5fe6ed
--- /dev/null
+++ b/backend/dvi/dvidocument.evince-backend.in
@@ -0,0 +1,4 @@
+[Evince Backend]
+Module=dvidocument
+_TypeDescription=DVI Documents
+MimeType=application/x-dvi;application/x-bzdvi;application/x-gzdvi
diff --git a/backend/dvi/fonts.c b/backend/dvi/fonts.c
new file mode 100644
index 00000000..99be63ce
--- /dev/null
+++ b/backend/dvi/fonts.c
@@ -0,0 +1,57 @@
+#include "config.h"
+#include "fonts.h"
+#include "mdvi.h"
+
+static int registered = 0;
+
+extern DviFontInfo pk_font_info;
+extern DviFontInfo pkn_font_info;
+extern DviFontInfo gf_font_info;
+extern DviFontInfo vf_font_info;
+extern DviFontInfo ovf_font_info;
+#if 0
+extern DviFontInfo tt_font_info;
+#endif
+#ifdef WITH_TYPE1_FONTS
+extern DviFontInfo t1_font_info;
+#endif
+extern DviFontInfo afm_font_info;
+extern DviFontInfo tfm_font_info;
+extern DviFontInfo ofm_font_info;
+
+static struct fontinfo {
+ DviFontInfo *info;
+ char *desc;
+ int klass;
+} known_fonts[] = {
+ {&vf_font_info, "Virtual fonts", 0},
+ {&ovf_font_info, "Omega's virtual fonts", 0},
+#if 0
+ {&tt_font_info, "TrueType fonts", 0},
+#endif
+#ifdef WITH_TYPE1_FONTS
+ {&t1_font_info, "Type1 PostScript fonts", 0},
+#endif
+ {&pk_font_info, "Packed bitmap (auto-generated)", 1},
+ {&pkn_font_info, "Packed bitmap", -2},
+ {&gf_font_info, "Metafont's generic font format", 1},
+ {&ofm_font_info, "Omega font metrics", -1},
+ {&tfm_font_info, "TeX font metrics", -1},
+ {&afm_font_info, "Adobe font metrics", -1},
+ {0, 0}
+};
+
+void mdvi_register_fonts (void)
+{
+ struct fontinfo *type;
+
+ if (!registered) {
+ for(type = known_fonts; type->info; type++) {
+ mdvi_register_font_type(type->info, type->klass);
+ }
+ registered = 1;
+ }
+ return;
+}
+
+
diff --git a/backend/dvi/fonts.h b/backend/dvi/fonts.h
new file mode 100644
index 00000000..e55a8ddf
--- /dev/null
+++ b/backend/dvi/fonts.h
@@ -0,0 +1,6 @@
+#ifndef MDVI_FONTS_REGISTRATION_H
+#define MDVI_FONTS_REGISTRATION_H
+
+void mdvi_register_fonts (void);
+
+#endif /* MDVI_FONTS_REGISTRATION_H */
diff --git a/backend/dvi/mdvi-lib/Makefile.am b/backend/dvi/mdvi-lib/Makefile.am
new file mode 100644
index 00000000..e976aa60
--- /dev/null
+++ b/backend/dvi/mdvi-lib/Makefile.am
@@ -0,0 +1,43 @@
+INCLUDES = $(WARN_CFLAGS)
+noinst_LTLIBRARIES = libmdvi.la
+
+libmdvi_la_SOURCES = \
+ afmparse.c \
+ afmparse.h \
+ bitmap.c \
+ bitmap.h \
+ color.c \
+ color.h \
+ common.c \
+ common.h \
+ defaults.h \
+ dviopcodes.h \
+ dviread.c \
+ files.c \
+ font.c \
+ fontmap.c \
+ fontmap.h \
+ fontsrch.c \
+ gf.c \
+ hash.c \
+ hash.h \
+ list.c \
+ mdvi.h \
+ pagesel.c \
+ paper.c \
+ paper.h \
+ pk.c \
+ private.h \
+ setup.c \
+ special.c \
+ sp-epsf.c \
+ sysdeps.h \
+ t1.c \
+ tfm.c \
+ tfmfile.c \
+ tt.c \
+ util.c \
+ vf.c
+
+
+-include $(top_srcdir)/git.mk
diff --git a/backend/dvi/mdvi-lib/afmparse.c b/backend/dvi/mdvi-lib/afmparse.c
new file mode 100644
index 00000000..164366b0
--- /dev/null
+++ b/backend/dvi/mdvi-lib/afmparse.c
@@ -0,0 +1,1303 @@
+/*
+ * (C) 1988, 1989, 1990 by Adobe Systems Incorporated. All rights reserved.
+ *
+ * This file may be freely copied and redistributed as long as:
+ * 1) This entire notice continues to be included in the file,
+ * 2) If the file has been modified in any way, a notice of such
+ * modification is conspicuously indicated.
+ *
+ * PostScript, Display PostScript, and Adobe are registered trademarks of
+ * Adobe Systems Incorporated.
+ *
+ * ************************************************************************
+ * THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT
+ * NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS
+ * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR
+ * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY
+ * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION,
+ * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+ * ************************************************************************
+ */
+
+/*
+ * modified for MDVI:
+ * - some names changed to avoid conflicts with T1lib
+ * - changed to ANSI C prototypes, as used by MDVI
+ * mal - 3/01
+ */
+
+/* parseAFM.c
+ *
+ * This file is used in conjuction with the parseAFM.h header file.
+ * This file contains several procedures that are used to parse AFM
+ * files. It is intended to work with an application program that needs
+ * font metric information. The program can be used as is by making a
+ * procedure call to "parseFile" (passing in the expected parameters)
+ * and having it fill in a data structure with the data from the
+ * AFM file, or an application developer may wish to customize this
+ * code.
+ *
+ * There is also a file, parseAFMclient.c, that is a sample application
+ * showing how to call the "parseFile" procedure and how to use the data
+ * after "parseFile" has returned.
+ *
+ * Please read the comments in parseAFM.h and parseAFMclient.c.
+ *
+ * History:
+ * original: DSM Thu Oct 20 17:39:59 PDT 1988
+ * modified: DSM Mon Jul 3 14:17:50 PDT 1989
+ * - added 'storageProblem' return code
+ * - fixed bug of not allocating extra byte for string duplication
+ * - fixed typos
+ * modified: DSM Tue Apr 3 11:18:34 PDT 1990
+ * - added free(ident) at end of parseFile routine
+ * modified: DSM Tue Jun 19 10:16:29 PDT 1990
+ * - changed (width == 250) to (width = 250) in initializeArray
+ */
+
+#include <config.h>
+#include "sysdeps.h"
+
+#ifdef WITH_AFM_FILES
+
+#include <stdlib.h> /* added for MDVI */
+#include <string.h> /* added for MDVI */
+
+#include <stdio.h>
+#include <errno.h>
+#include <sys/file.h>
+#include <math.h>
+#include "afmparse.h"
+#undef VERSION
+
+#define lineterm EOL /* line terminating character */
+#define normalEOF 1 /* return code from parsing routines used only */
+ /* in this module */
+#define Space "space" /* used in string comparison to look for the width */
+ /* of the space character to init the widths array */
+#define False "false" /* used in string comparison to check the value of */
+ /* boolean keys (e.g. IsFixedPitch) */
+
+#define MATCH(A,B) (strncmp((A),(B), MAX_NAME) == 0)
+
+
+
+/*************************** GLOBALS ***********************/
+
+static char *ident = NULL; /* storage buffer for keywords */
+
+
+/* "shorts" for fast case statement
+ * The values of each of these enumerated items correspond to an entry in the
+ * table of strings defined below. Therefore, if you add a new string as
+ * new keyword into the keyStrings table, you must also add a corresponding
+ * parseKey AND it MUST be in the same position!
+ *
+ * IMPORTANT: since the sorting algorithm is a binary search, the strings of
+ * keywords must be placed in lexicographical order, below. [Therefore, the
+ * enumerated items are not necessarily in lexicographical order, depending
+ * on the name chosen. BUT, they must be placed in the same position as the
+ * corresponding key string.] The NOPE shall remain in the last position,
+ * since it does not correspond to any key string, and it is used in the
+ * "recognize" procedure to calculate how many possible keys there are.
+ */
+
+enum parseKey {
+ ASCENDER, CHARBBOX, CODE, COMPCHAR, CAPHEIGHT, COMMENT,
+ DESCENDER, ENCODINGSCHEME, ENDCHARMETRICS, ENDCOMPOSITES,
+ ENDFONTMETRICS, ENDKERNDATA, ENDKERNPAIRS, ENDTRACKKERN,
+ FAMILYNAME, FONTBBOX, FONTNAME, FULLNAME, ISFIXEDPITCH,
+ ITALICANGLE, KERNPAIR, KERNPAIRXAMT, LIGATURE, CHARNAME,
+ NOTICE, COMPCHARPIECE, STARTCHARMETRICS, STARTCOMPOSITES,
+ STARTFONTMETRICS, STARTKERNDATA, STARTKERNPAIRS,
+ STARTTRACKKERN, TRACKKERN, UNDERLINEPOSITION,
+ UNDERLINETHICKNESS, VERSION, XYWIDTH, XWIDTH, WEIGHT, XHEIGHT,
+ NOPE } ;
+
+/* keywords for the system:
+ * This a table of all of the current strings that are vaild AFM keys.
+ * Each entry can be referenced by the appropriate parseKey value (an
+ * enumerated data type defined above). If you add a new keyword here,
+ * a corresponding parseKey MUST be added to the enumerated data type
+ * defined above, AND it MUST be added in the same position as the
+ * string is in this table.
+ *
+ * IMPORTANT: since the sorting algorithm is a binary search, the keywords
+ * must be placed in lexicographical order. And, NULL should remain at the
+ * end.
+ */
+
+static char *keyStrings[] = {
+ "Ascender", "B", "C", "CC", "CapHeight", "Comment",
+ "Descender", "EncodingScheme", "EndCharMetrics", "EndComposites",
+ "EndFontMetrics", "EndKernData", "EndKernPairs", "EndTrackKern",
+ "FamilyName", "FontBBox", "FontName", "FullName", "IsFixedPitch",
+ "ItalicAngle", "KP", "KPX", "L", "N",
+ "Notice", "PCC", "StartCharMetrics", "StartComposites",
+ "StartFontMetrics", "StartKernData", "StartKernPairs",
+ "StartTrackKern", "TrackKern", "UnderlinePosition",
+ "UnderlineThickness", "Version", "W", "WX", "Weight", "XHeight",
+ NULL };
+
+/*************************** PARSING ROUTINES **************/
+
+/*************************** token *************************/
+
+/* A "AFM File Conventions" tokenizer. That means that it will
+ * return the next token delimited by white space. See also
+ * the `linetoken' routine, which does a similar thing but
+ * reads all tokens until the next end-of-line.
+ */
+
+static char *token(FILE *stream)
+{
+ int ch, idx;
+
+ /* skip over white space */
+ while ((ch = fgetc(stream)) == ' ' || ch == lineterm ||
+ ch == ',' || ch == '\t' || ch == ';');
+
+ idx = 0;
+ while (ch != EOF && ch != ' ' && ch != lineterm
+ && ch != '\t' && ch != ':' && ch != ';')
+ {
+ ident[idx++] = ch;
+ ch = fgetc(stream);
+ } /* while */
+
+ if (ch == EOF && idx < 1) return ((char *)NULL);
+ if (idx >= 1 && ch != ':' ) ungetc(ch, stream);
+ if (idx < 1 ) ident[idx++] = ch; /* single-character token */
+ ident[idx] = 0;
+
+ return(ident); /* returns pointer to the token */
+
+} /* token */
+
+
+/*************************** linetoken *************************/
+
+/* "linetoken" will get read all tokens until the EOL character from
+ * the given stream. This is used to get any arguments that can be
+ * more than one word (like Comment lines and FullName).
+ */
+
+static char *linetoken(FILE *stream)
+{
+ int ch, idx;
+
+ while ((ch = fgetc(stream)) == ' ' || ch == '\t' );
+
+ idx = 0;
+ while (ch != EOF && ch != lineterm)
+ {
+ ident[idx++] = ch;
+ ch = fgetc(stream);
+ } /* while */
+
+ ungetc(ch, stream);
+ ident[idx] = 0;
+
+ return(ident); /* returns pointer to the token */
+
+} /* linetoken */
+
+
+/*************************** recognize *************************/
+
+/* This function tries to match a string to a known list of
+ * valid AFM entries (check the keyStrings array above).
+ * "ident" contains everything from white space through the
+ * next space, tab, or ":" character.
+ *
+ * The algorithm is a standard Knuth binary search.
+ */
+
+static enum parseKey recognize(char *ident)
+{
+ int lower = 0, upper = (int) NOPE, midpoint, cmpvalue;
+ BOOL found = FALSE;
+
+ while ((upper >= lower) && !found)
+ {
+ midpoint = (lower + upper)/2;
+ if (keyStrings[midpoint] == NULL) break;
+ cmpvalue = strncmp(ident, keyStrings[midpoint], MAX_NAME);
+ if (cmpvalue == 0) found = TRUE;
+ else if (cmpvalue < 0) upper = midpoint - 1;
+ else lower = midpoint + 1;
+ } /* while */
+
+ if (found) return (enum parseKey) midpoint;
+ else return NOPE;
+
+} /* recognize */
+
+
+/************************* parseGlobals *****************************/
+
+/* This function is called by "parseFile". It will parse the AFM File
+ * up to the "StartCharMetrics" keyword, which essentially marks the
+ * end of the Global Font Information and the beginning of the character
+ * metrics information.
+ *
+ * If the caller of "parseFile" specified that it wanted the Global
+ * Font Information (as defined by the "AFM File Specification"
+ * document), then that information will be stored in the returned
+ * data structure.
+ *
+ * Any Global Font Information entries that are not found in a
+ * given file, will have the usual default initialization value
+ * for its type (i.e. entries of type int will be 0, etc).
+ *
+ * This function returns an error code specifying whether there was
+ * a premature EOF or a parsing error. This return value is used by
+ * parseFile to determine if there is more file to parse.
+ */
+
+static BOOL parseGlobals(FILE *fp, GlobalFontInfo *gfi)
+{
+ BOOL cont = TRUE, save = (gfi != NULL);
+ int error = ok;
+ register char *keyword;
+
+ while (cont)
+ {
+ keyword = token(fp);
+
+ if (keyword == NULL)
+ /* Have reached an early and unexpected EOF. */
+ /* Set flag and stop parsing */
+ {
+ error = earlyEOF;
+ break; /* get out of loop */
+ }
+ if (!save)
+ /* get tokens until the end of the Global Font info section */
+ /* without saving any of the data */
+ switch (recognize(keyword))
+ {
+ case STARTCHARMETRICS:
+ cont = FALSE;
+ break;
+ case ENDFONTMETRICS:
+ cont = FALSE;
+ error = normalEOF;
+ break;
+ default:
+ break;
+ } /* switch */
+ else
+ /* otherwise parse entire global font info section, */
+ /* saving the data */
+ switch(recognize(keyword))
+ {
+ case STARTFONTMETRICS:
+ keyword = token(fp);
+ gfi->afmVersion = (char *) malloc(strlen(keyword) + 1);
+ strcpy(gfi->afmVersion, keyword);
+ break;
+ case COMMENT:
+ keyword = linetoken(fp);
+ break;
+ case FONTNAME:
+ keyword = token(fp);
+ gfi->fontName = (char *) malloc(strlen(keyword) + 1);
+ strcpy(gfi->fontName, keyword);
+ break;
+ case ENCODINGSCHEME:
+ keyword = token(fp);
+ gfi->encodingScheme = (char *)
+ malloc(strlen(keyword) + 1);
+ strcpy(gfi->encodingScheme, keyword);
+ break;
+ case FULLNAME:
+ keyword = linetoken(fp);
+ gfi->fullName = (char *) malloc(strlen(keyword) + 1);
+ strcpy(gfi->fullName, keyword);
+ break;
+ case FAMILYNAME:
+ keyword = linetoken(fp);
+ gfi->familyName = (char *) malloc(strlen(keyword) + 1);
+ strcpy(gfi->familyName, keyword);
+ break;
+ case WEIGHT:
+ keyword = token(fp);
+ gfi->weight = (char *) malloc(strlen(keyword) + 1);
+ strcpy(gfi->weight, keyword);
+ break;
+ case ITALICANGLE:
+ keyword = token(fp);
+ gfi->italicAngle = atof(keyword);
+ if (errno == ERANGE) error = parseError;
+ break;
+ case ISFIXEDPITCH:
+ keyword = token(fp);
+ if (MATCH(keyword, False))
+ gfi->isFixedPitch = 0;
+ else
+ gfi->isFixedPitch = 1;
+ break;
+ case UNDERLINEPOSITION:
+ keyword = token(fp);
+ gfi->underlinePosition = atoi(keyword);
+ break;
+ case UNDERLINETHICKNESS:
+ keyword = token(fp);
+ gfi->underlineThickness = atoi(keyword);
+ break;
+ case VERSION:
+ keyword = token(fp);
+ gfi->version = (char *) malloc(strlen(keyword) + 1);
+ strcpy(gfi->version, keyword);
+ break;
+ case NOTICE:
+ keyword = linetoken(fp);
+ gfi->notice = (char *) malloc(strlen(keyword) + 1);
+ strcpy(gfi->notice, keyword);
+ break;
+ case FONTBBOX:
+ keyword = token(fp);
+ gfi->fontBBox.llx = atoi(keyword);
+ keyword = token(fp);
+ gfi->fontBBox.lly = atoi(keyword);
+ keyword = token(fp);
+ gfi->fontBBox.urx = atoi(keyword);
+ keyword = token(fp);
+ gfi->fontBBox.ury = atoi(keyword);
+ break;
+ case CAPHEIGHT:
+ keyword = token(fp);
+ gfi->capHeight = atoi(keyword);
+ break;
+ case XHEIGHT:
+ keyword = token(fp);
+ gfi->xHeight = atoi(keyword);
+ break;
+ case DESCENDER:
+ keyword = token(fp);
+ gfi->descender = atoi(keyword);
+ break;
+ case ASCENDER:
+ keyword = token(fp);
+ gfi->ascender = atoi(keyword);
+ break;
+ case STARTCHARMETRICS:
+ cont = FALSE;
+ break;
+ case ENDFONTMETRICS:
+ cont = FALSE;
+ error = normalEOF;
+ break;
+ case NOPE:
+ default:
+ error = parseError;
+ break;
+ } /* switch */
+ } /* while */
+
+ return(error);
+
+} /* parseGlobals */
+
+
+
+#if 0 /* this function does not seem to be used anywhere */
+/************************* initializeArray ************************/
+
+/* Unmapped character codes are (at Adobe Systems) assigned the
+ * width of the space character (if one exists) else they get the
+ * value of 250 ems. This function initializes all entries in the
+ * char widths array to have this value. Then any mapped character
+ * codes will be replaced with the width of the appropriate character
+ * when parsing the character metric section.
+
+ * This function parses the Character Metrics Section looking
+ * for a space character (by comparing character names). If found,
+ * the width of the space character will be used to initialize the
+ * values in the array of character widths.
+ *
+ * Before returning, the position of the read/write pointer of the
+ * file is reset to be where it was upon entering this function.
+ */
+
+static int initializeArray(FILE *fp, int *cwi)
+{
+ BOOL cont = TRUE, found = FALSE;
+ long opos = ftell(fp);
+ int code = 0, width = 0, i = 0, error = 0;
+ register char *keyword;
+
+ while (cont)
+ {
+ keyword = token(fp);
+ if (keyword == NULL)
+ {
+ error = earlyEOF;
+ break; /* get out of loop */
+ }
+ switch(recognize(keyword))
+ {
+ case COMMENT:
+ keyword = linetoken(fp);
+ break;
+ case CODE:
+ code = atoi(token(fp));
+ break;
+ case XWIDTH:
+ width = atoi(token(fp));
+ break;
+ case CHARNAME:
+ keyword = token(fp);
+ if (MATCH(keyword, Space))
+ {
+ cont = FALSE;
+ found = TRUE;
+ }
+ break;
+ case ENDCHARMETRICS:
+ cont = FALSE;
+ break;
+ case ENDFONTMETRICS:
+ cont = FALSE;
+ error = normalEOF;
+ break;
+ case NOPE:
+ default:
+ error = parseError;
+ break;
+ } /* switch */
+ } /* while */
+
+ if (!found)
+ width = 250;
+
+ for (i = 0; i < 256; ++i)
+ cwi[i] = width;
+
+ fseek(fp, opos, 0);
+
+ return(error);
+
+} /* initializeArray */
+#endif /* unused */
+
+/************************* parseCharWidths **************************/
+
+/* This function is called by "parseFile". It will parse the AFM File
+ * up to the "EndCharMetrics" keyword. It will save the character
+ * width info (as opposed to all of the character metric information)
+ * if requested by the caller of parseFile. Otherwise, it will just
+ * parse through the section without saving any information.
+ *
+ * If data is to be saved, parseCharWidths is passed in a pointer
+ * to an array of widths that has already been initialized by the
+ * standard value for unmapped character codes. This function parses
+ * the Character Metrics section only storing the width information
+ * for the encoded characters into the array using the character code
+ * as the index into that array.
+ *
+ * This function returns an error code specifying whether there was
+ * a premature EOF or a parsing error. This return value is used by
+ * parseFile to determine if there is more file to parse.
+ */
+
+static int parseCharWidths(FILE *fp, int *cwi)
+{
+ BOOL cont = TRUE, save = (cwi != NULL);
+ int pos = 0, error = ok;
+ register char *keyword;
+
+ while (cont)
+ {
+ keyword = token(fp);
+ /* Have reached an early and unexpected EOF. */
+ /* Set flag and stop parsing */
+ if (keyword == NULL)
+ {
+ error = earlyEOF;
+ break; /* get out of loop */
+ }
+ if (!save)
+ /* get tokens until the end of the Char Metrics section without */
+ /* saving any of the data*/
+ switch (recognize(keyword))
+ {
+ case ENDCHARMETRICS:
+ cont = FALSE;
+ break;
+ case ENDFONTMETRICS:
+ cont = FALSE;
+ error = normalEOF;
+ break;
+ default:
+ break;
+ } /* switch */
+ else
+ /* otherwise parse entire char metrics section, saving */
+ /* only the char x-width info */
+ switch(recognize(keyword))
+ {
+ case COMMENT:
+ keyword = linetoken(fp);
+ break;
+ case CODE:
+ keyword = token(fp);
+ pos = atoi(keyword);
+ break;
+ case XYWIDTH:
+ /* PROBLEM: Should be no Y-WIDTH when doing "quick & dirty" */
+ keyword = token(fp); keyword = token(fp); /* eat values */
+ error = parseError;
+ break;
+ case XWIDTH:
+ keyword = token(fp);
+ if (pos >= 0) /* ignore unmapped chars */
+ cwi[pos] = atoi(keyword);
+ break;
+ case ENDCHARMETRICS:
+ cont = FALSE;
+ break;
+ case ENDFONTMETRICS:
+ cont = FALSE;
+ error = normalEOF;
+ break;
+ case CHARNAME: /* eat values (so doesn't cause parseError) */
+ keyword = token(fp);
+ break;
+ case CHARBBOX:
+ keyword = token(fp); keyword = token(fp);
+ keyword = token(fp); keyword = token(fp);
+ break;
+ case LIGATURE:
+ keyword = token(fp); keyword = token(fp);
+ break;
+ case NOPE:
+ default:
+ error = parseError;
+ break;
+ } /* switch */
+ } /* while */
+
+ return(error);
+
+} /* parseCharWidths */
+
+
+/************************* parseCharMetrics ************************/
+
+/* This function is called by parseFile if the caller of parseFile
+ * requested that all character metric information be saved
+ * (as opposed to only the character width information).
+ *
+ * parseCharMetrics is passed in a pointer to an array of records
+ * to hold information on a per character basis. This function
+ * parses the Character Metrics section storing all character
+ * metric information for the ALL characters (mapped and unmapped)
+ * into the array.
+ *
+ * This function returns an error code specifying whether there was
+ * a premature EOF or a parsing error. This return value is used by
+ * parseFile to determine if there is more file to parse.
+ */
+
+static int parseCharMetrics(FILE *fp, FontInfo *fi)
+{
+ BOOL cont = TRUE, firstTime = TRUE;
+ int error = ok, count = 0;
+ register CharMetricInfo *temp = fi->cmi;
+ register char *keyword;
+
+ while (cont)
+ {
+ keyword = token(fp);
+ if (keyword == NULL)
+ {
+ error = earlyEOF;
+ break; /* get out of loop */
+ }
+ switch(recognize(keyword))
+ {
+ case COMMENT:
+ keyword = linetoken(fp);
+ break;
+ case CODE:
+ if (count < fi->numOfChars)
+ {
+ if (firstTime) firstTime = FALSE;
+ else temp++;
+ temp->code = atoi(token(fp));
+ count++;
+ }
+ else
+ {
+ error = parseError;
+ cont = FALSE;
+ }
+ break;
+ case XYWIDTH:
+ temp->wx = atoi(token(fp));
+ temp->wy = atoi(token(fp));
+ break;
+ case XWIDTH:
+ temp->wx = atoi(token(fp));
+ break;
+ case CHARNAME:
+ keyword = token(fp);
+ temp->name = (char *) malloc(strlen(keyword) + 1);
+ strcpy(temp->name, keyword);
+ break;
+ case CHARBBOX:
+ temp->charBBox.llx = atoi(token(fp));
+ temp->charBBox.lly = atoi(token(fp));
+ temp->charBBox.urx = atoi(token(fp));
+ temp->charBBox.ury = atoi(token(fp));
+ break;
+ case LIGATURE: {
+ Ligature **tail = &(temp->ligs);
+ Ligature *node = *tail;
+
+ if (*tail != NULL)
+ {
+ while (node->next != NULL)
+ node = node->next;
+ tail = &(node->next);
+ }
+
+ *tail = (Ligature *) calloc(1, sizeof(Ligature));
+ keyword = token(fp);
+ (*tail)->succ = (char *) malloc(strlen(keyword) + 1);
+ strcpy((*tail)->succ, keyword);
+ keyword = token(fp);
+ (*tail)->lig = (char *) malloc(strlen(keyword) + 1);
+ strcpy((*tail)->lig, keyword);
+ break; }
+ case ENDCHARMETRICS:
+ cont = FALSE;;
+ break;
+ case ENDFONTMETRICS:
+ cont = FALSE;
+ error = normalEOF;
+ break;
+ case NOPE:
+ default:
+ error = parseError;
+ break;
+ } /* switch */
+ } /* while */
+
+ if ((error == ok) && (count != fi->numOfChars))
+ error = parseError;
+
+ return(error);
+
+} /* parseCharMetrics */
+
+
+
+/************************* parseTrackKernData ***********************/
+
+/* This function is called by "parseFile". It will parse the AFM File
+ * up to the "EndTrackKern" or "EndKernData" keywords. It will save the
+ * track kerning data if requested by the caller of parseFile.
+ *
+ * parseTrackKernData is passed in a pointer to the FontInfo record.
+ * If data is to be saved, the FontInfo record will already contain
+ * a valid pointer to storage for the track kerning data.
+ *
+ * This function returns an error code specifying whether there was
+ * a premature EOF or a parsing error. This return value is used by
+ * parseFile to determine if there is more file to parse.
+ */
+
+static int parseTrackKernData(FILE *fp, FontInfo *fi)
+{
+ BOOL cont = TRUE, save = (fi->tkd != NULL);
+ int pos = 0, error = ok, tcount = 0;
+ register char *keyword;
+
+ while (cont)
+ {
+ keyword = token(fp);
+
+ if (keyword == NULL)
+ {
+ error = earlyEOF;
+ break; /* get out of loop */
+ }
+ if (!save)
+ /* get tokens until the end of the Track Kerning Data */
+ /* section without saving any of the data */
+ switch(recognize(keyword))
+ {
+ case ENDTRACKKERN:
+ case ENDKERNDATA:
+ cont = FALSE;
+ break;
+ case ENDFONTMETRICS:
+ cont = FALSE;
+ error = normalEOF;
+ break;
+ default:
+ break;
+ } /* switch */
+ else
+ /* otherwise parse entire Track Kerning Data section, */
+ /* saving the data */
+ switch(recognize(keyword))
+ {
+ case COMMENT:
+ keyword = linetoken(fp);
+ break;
+ case TRACKKERN:
+ if (tcount < fi->numOfTracks)
+ {
+ keyword = token(fp);
+ fi->tkd[pos].degree = atoi(keyword);
+ keyword = token(fp);
+ fi->tkd[pos].minPtSize = atof(keyword);
+ if (errno == ERANGE) error = parseError;
+ keyword = token(fp);
+ fi->tkd[pos].minKernAmt = atof(keyword);
+ if (errno == ERANGE) error = parseError;
+ keyword = token(fp);
+ fi->tkd[pos].maxPtSize = atof(keyword);
+ if (errno == ERANGE) error = parseError;
+ keyword = token(fp);
+ fi->tkd[pos++].maxKernAmt = atof(keyword);
+ if (errno == ERANGE) error = parseError;
+ tcount++;
+ }
+ else
+ {
+ error = parseError;
+ cont = FALSE;
+ }
+ break;
+ case ENDTRACKKERN:
+ case ENDKERNDATA:
+ cont = FALSE;
+ break;
+ case ENDFONTMETRICS:
+ cont = FALSE;
+ error = normalEOF;
+ break;
+ case NOPE:
+ default:
+ error = parseError;
+ break;
+ } /* switch */
+ } /* while */
+
+ if (error == ok && tcount != fi->numOfTracks)
+ error = parseError;
+
+ return(error);
+
+} /* parseTrackKernData */
+
+
+/************************* parsePairKernData ************************/
+
+/* This function is called by "parseFile". It will parse the AFM File
+ * up to the "EndKernPairs" or "EndKernData" keywords. It will save
+ * the pair kerning data if requested by the caller of parseFile.
+ *
+ * parsePairKernData is passed in a pointer to the FontInfo record.
+ * If data is to be saved, the FontInfo record will already contain
+ * a valid pointer to storage for the pair kerning data.
+ *
+ * This function returns an error code specifying whether there was
+ * a premature EOF or a parsing error. This return value is used by
+ * parseFile to determine if there is more file to parse.
+ */
+
+static int parsePairKernData(FILE *fp, FontInfo *fi)
+{
+ BOOL cont = TRUE, save = (fi->pkd != NULL);
+ int pos = 0, error = ok, pcount = 0;
+ register char *keyword;
+
+ while (cont)
+ {
+ keyword = token(fp);
+
+ if (keyword == NULL)
+ {
+ error = earlyEOF;
+ break; /* get out of loop */
+ }
+ if (!save)
+ /* get tokens until the end of the Pair Kerning Data */
+ /* section without saving any of the data */
+ switch(recognize(keyword))
+ {
+ case ENDKERNPAIRS:
+ case ENDKERNDATA:
+ cont = FALSE;
+ break;
+ case ENDFONTMETRICS:
+ cont = FALSE;
+ error = normalEOF;
+ break;
+ default:
+ break;
+ } /* switch */
+ else
+ /* otherwise parse entire Pair Kerning Data section, */
+ /* saving the data */
+ switch(recognize(keyword))
+ {
+ case COMMENT:
+ keyword = linetoken(fp);
+ break;
+ case KERNPAIR:
+ if (pcount < fi->numOfPairs)
+ {
+ keyword = token(fp);
+ fi->pkd[pos].name1 = (char *)
+ malloc(strlen(keyword) + 1);
+ strcpy(fi->pkd[pos].name1, keyword);
+ keyword = token(fp);
+ fi->pkd[pos].name2 = (char *)
+ malloc(strlen(keyword) + 1);
+ strcpy(fi->pkd[pos].name2, keyword);
+ keyword = token(fp);
+ fi->pkd[pos].xamt = atoi(keyword);
+ keyword = token(fp);
+ fi->pkd[pos++].yamt = atoi(keyword);
+ pcount++;
+ }
+ else
+ {
+ error = parseError;
+ cont = FALSE;
+ }
+ break;
+ case KERNPAIRXAMT:
+ if (pcount < fi->numOfPairs)
+ {
+ keyword = token(fp);
+ fi->pkd[pos].name1 = (char *)
+ malloc(strlen(keyword) + 1);
+ strcpy(fi->pkd[pos].name1, keyword);
+ keyword = token(fp);
+ fi->pkd[pos].name2 = (char *)
+ malloc(strlen(keyword) + 1);
+ strcpy(fi->pkd[pos].name2, keyword);
+ keyword = token(fp);
+ fi->pkd[pos++].xamt = atoi(keyword);
+ pcount++;
+ }
+ else
+ {
+ error = parseError;
+ cont = FALSE;
+ }
+ break;
+ case ENDKERNPAIRS:
+ case ENDKERNDATA:
+ cont = FALSE;
+ break;
+ case ENDFONTMETRICS:
+ cont = FALSE;
+ error = normalEOF;
+ break;
+ case NOPE:
+ default:
+ error = parseError;
+ break;
+ } /* switch */
+ } /* while */
+
+ if (error == ok && pcount != fi->numOfPairs)
+ error = parseError;
+
+ return(error);
+
+} /* parsePairKernData */
+
+
+/************************* parseCompCharData **************************/
+
+/* This function is called by "parseFile". It will parse the AFM File
+ * up to the "EndComposites" keyword. It will save the composite
+ * character data if requested by the caller of parseFile.
+ *
+ * parseCompCharData is passed in a pointer to the FontInfo record, and
+ * a boolean representing if the data should be saved.
+ *
+ * This function will create the appropriate amount of storage for
+ * the composite character data and store a pointer to the storage
+ * in the FontInfo record.
+ *
+ * This function returns an error code specifying whether there was
+ * a premature EOF or a parsing error. This return value is used by
+ * parseFile to determine if there is more file to parse.
+ */
+
+static int parseCompCharData(FILE *fp, FontInfo *fi)
+{
+ BOOL cont = TRUE, firstTime = TRUE, save = (fi->ccd != NULL);
+ int pos = 0, j = 0, error = ok, ccount = 0, pcount = 0;
+ register char *keyword;
+
+ while (cont)
+ {
+ keyword = token(fp);
+ if (keyword == NULL)
+ /* Have reached an early and unexpected EOF. */
+ /* Set flag and stop parsing */
+ {
+ error = earlyEOF;
+ break; /* get out of loop */
+ }
+ if (ccount > fi->numOfComps)
+ {
+ error = parseError;
+ break; /* get out of loop */
+ }
+ if (!save)
+ /* get tokens until the end of the Composite Character info */
+ /* section without saving any of the data */
+ switch(recognize(keyword))
+ {
+ case ENDCOMPOSITES:
+ cont = FALSE;
+ break;
+ case ENDFONTMETRICS:
+ cont = FALSE;
+ error = normalEOF;
+ break;
+ default:
+ break;
+ } /* switch */
+ else
+ /* otherwise parse entire Composite Character info section, */
+ /* saving the data */
+ switch(recognize(keyword))
+ {
+ case COMMENT:
+ keyword = linetoken(fp);
+ break;
+ case COMPCHAR:
+ if (ccount < fi->numOfComps)
+ {
+ keyword = token(fp);
+ if (pcount != fi->ccd[pos].numOfPieces)
+ error = parseError;
+ pcount = 0;
+ if (firstTime) firstTime = FALSE;
+ else pos++;
+ fi->ccd[pos].ccName = (char *)
+ malloc(strlen(keyword) + 1);
+ strcpy(fi->ccd[pos].ccName, keyword);
+ keyword = token(fp);
+ fi->ccd[pos].numOfPieces = atoi(keyword);
+ fi->ccd[pos].pieces = (Pcc *)
+ calloc(fi->ccd[pos].numOfPieces, sizeof(Pcc));
+ j = 0;
+ ccount++;
+ }
+ else
+ {
+ error = parseError;
+ cont = FALSE;
+ }
+ break;
+ case COMPCHARPIECE:
+ if (pcount < fi->ccd[pos].numOfPieces)
+ {
+ keyword = token(fp);
+ fi->ccd[pos].pieces[j].pccName = (char *)
+ malloc(strlen(keyword) + 1);
+ strcpy(fi->ccd[pos].pieces[j].pccName, keyword);
+ keyword = token(fp);
+ fi->ccd[pos].pieces[j].deltax = atoi(keyword);
+ keyword = token(fp);
+ fi->ccd[pos].pieces[j++].deltay = atoi(keyword);
+ pcount++;
+ }
+ else
+ error = parseError;
+ break;
+ case ENDCOMPOSITES:
+ cont = FALSE;
+ break;
+ case ENDFONTMETRICS:
+ cont = FALSE;
+ error = normalEOF;
+ break;
+ case NOPE:
+ default:
+ error = parseError;
+ break;
+ } /* switch */
+ } /* while */
+
+ if (error == ok && ccount != fi->numOfComps)
+ error = parseError;
+
+ return(error);
+
+} /* parseCompCharData */
+
+
+
+
+/*************************** 'PUBLIC' FUNCTION ********************/
+
+
+/*************************** parseFile *****************************/
+
+/* parseFile is the only 'public' procedure available. It is called
+ * from an application wishing to get information from an AFM file.
+ * The caller of this function is responsible for locating and opening
+ * an AFM file and handling all errors associated with that task.
+ *
+ * parseFile expects 3 parameters: a vaild file pointer, a pointer
+ * to a (FontInfo *) variable (for which storage will be allocated and
+ * the data requested filled in), and a mask specifying which
+ * data from the AFM File should be saved in the FontInfo structure.
+ *
+ * The file will be parsed and the requested data will be stored in
+ * a record of type FontInfo (refer to ParseAFM.h).
+ *
+ * parseFile returns an error code as defined in parseAFM.h.
+ *
+ * The position of the read/write pointer associated with the file
+ * pointer upon return of this function is undefined.
+ */
+
+extern int afm_parse_file(FILE *fp, FontInfo **fi, FLAGS flags)
+{
+
+ int code = ok; /* return code from each of the parsing routines */
+ int error = ok; /* used as the return code from this function */
+
+ register char *keyword; /* used to store a token */
+
+
+ /* storage data for the global variable ident */
+ ident = (char *) calloc(MAX_NAME, sizeof(char));
+ if (ident == NULL) {error = storageProblem; return(error);}
+
+ (*fi) = (FontInfo *) calloc(1, sizeof(FontInfo));
+ if ((*fi) == NULL) {error = storageProblem; return(error);}
+
+ if (flags & P_G)
+ {
+ (*fi)->gfi = (GlobalFontInfo *) calloc(1, sizeof(GlobalFontInfo));
+ if ((*fi)->gfi == NULL) {error = storageProblem; return(error);}
+ }
+
+ /* The AFM File begins with Global Font Information. This section */
+ /* will be parsed whether or not information should be saved. */
+ code = parseGlobals(fp, (*fi)->gfi);
+
+ if (code < 0) error = code;
+
+ /* The Global Font Information is followed by the Character Metrics */
+ /* section. Which procedure is used to parse this section depends on */
+ /* how much information should be saved. If all of the metrics info */
+ /* is wanted, parseCharMetrics is called. If only the character widths */
+ /* is wanted, parseCharWidths is called. parseCharWidths will also */
+ /* be called in the case that no character data is to be saved, just */
+ /* to parse through the section. */
+
+ if ((code != normalEOF) && (code != earlyEOF))
+ {
+ (*fi)->numOfChars = atoi(token(fp));
+ if (flags & (P_M ^ P_W))
+ {
+ (*fi)->cmi = (CharMetricInfo *)
+ calloc((*fi)->numOfChars, sizeof(CharMetricInfo));
+ if ((*fi)->cmi == NULL) {error = storageProblem; return(error);}
+ code = parseCharMetrics(fp, *fi);
+ }
+ else
+ {
+ if (flags & P_W)
+ {
+ (*fi)->cwi = (int *) calloc(256, sizeof(int));
+ if ((*fi)->cwi == NULL)
+ {
+ error = storageProblem;
+ return(error);
+ }
+ }
+ /* parse section regardless */
+ code = parseCharWidths(fp, (*fi)->cwi);
+ } /* else */
+ } /* if */
+
+ if ((error != earlyEOF) && (code < 0)) error = code;
+
+ /* The remaining sections of the AFM are optional. This code will */
+ /* look at the next keyword in the file to determine what section */
+ /* is next, and then allocate the appropriate amount of storage */
+ /* for the data (if the data is to be saved) and call the */
+ /* appropriate parsing routine to parse the section. */
+
+ while ((code != normalEOF) && (code != earlyEOF))
+ {
+ keyword = token(fp);
+ if (keyword == NULL)
+ /* Have reached an early and unexpected EOF. */
+ /* Set flag and stop parsing */
+ {
+ code = earlyEOF;
+ break; /* get out of loop */
+ }
+ switch(recognize(keyword))
+ {
+ case STARTKERNDATA:
+ break;
+ case ENDKERNDATA:
+ break;
+ case STARTTRACKKERN:
+ keyword = token(fp);
+ if (flags & P_T)
+ {
+ (*fi)->numOfTracks = atoi(keyword);
+ (*fi)->tkd = (TrackKernData *)
+ calloc((*fi)->numOfTracks, sizeof(TrackKernData));
+ if ((*fi)->tkd == NULL)
+ {
+ error = storageProblem;
+ return(error);
+ }
+ } /* if */
+ code = parseTrackKernData(fp, *fi);
+ break;
+ case STARTKERNPAIRS:
+ keyword = token(fp);
+ if (flags & P_P)
+ {
+ (*fi)->numOfPairs = atoi(keyword);
+ (*fi)->pkd = (PairKernData *)
+ calloc((*fi)->numOfPairs, sizeof(PairKernData));
+ if ((*fi)->pkd == NULL)
+ {
+ error = storageProblem;
+ return(error);
+ }
+ } /* if */
+ code = parsePairKernData(fp, *fi);
+ break;
+ case STARTCOMPOSITES:
+ keyword = token(fp);
+ if (flags & P_C)
+ {
+ (*fi)->numOfComps = atoi(keyword);
+ (*fi)->ccd = (CompCharData *)
+ calloc((*fi)->numOfComps, sizeof(CompCharData));
+ if ((*fi)->ccd == NULL)
+ {
+ error = storageProblem;
+ return(error);
+ }
+ } /* if */
+ code = parseCompCharData(fp, *fi);
+ break;
+ case ENDFONTMETRICS:
+ code = normalEOF;
+ break;
+ case NOPE:
+ default:
+ code = parseError;
+ break;
+ } /* switch */
+
+ if ((error != earlyEOF) && (code < 0)) error = code;
+
+ } /* while */
+
+ if ((error != earlyEOF) && (code < 0)) error = code;
+
+ if (ident != NULL) { free(ident); ident = NULL; }
+
+ return(error);
+
+} /* parseFile */
+
+/* added for MDVI: this function was copied from `parseAFMclient.c' */
+
+void afm_free_fontinfo(FontInfo *fi)
+{
+ if (fi != NULL)
+ {
+ if (fi->gfi != NULL)
+ {
+ free(fi->gfi->afmVersion); fi->gfi->afmVersion = NULL;
+ free(fi->gfi->fontName); fi->gfi->fontName = NULL;
+ free(fi->gfi->fullName); fi->gfi->fullName = NULL;
+ free(fi->gfi->familyName); fi->gfi->familyName = NULL;
+ free(fi->gfi->weight); fi->gfi->weight = NULL;
+ free(fi->gfi->version); fi->gfi->version = NULL;
+ free(fi->gfi->notice); fi->gfi->notice = NULL;
+ free(fi->gfi->encodingScheme); fi->gfi->encodingScheme = NULL;
+ free(fi->gfi); fi->gfi = NULL;
+ }
+
+ if (fi->cwi != NULL)
+ { free(fi->cwi); fi->cwi = NULL; }
+
+ if (fi->cmi != NULL)
+ {
+ int i = 0;
+ CharMetricInfo *temp = fi->cmi;
+ Ligature *node = temp->ligs;
+
+ for (i = 0; i < fi->numOfChars; ++i)
+ {
+ for (node = temp->ligs; node != NULL; node = node->next)
+ {
+ free(node->succ); node->succ = NULL;
+ free(node->lig); node->lig = NULL;
+ }
+
+ free(temp->name); temp->name = NULL;
+ temp++;
+ }
+
+ free(fi->cmi); fi->cmi = NULL;
+ }
+
+ if (fi->tkd != NULL)
+ { free(fi->tkd); fi->tkd = NULL; }
+
+ if (fi->pkd != NULL)
+ {
+ free(fi->pkd->name1); fi->pkd->name1 = NULL;
+ free(fi->pkd->name2); fi->pkd->name2 = NULL;
+ free(fi->pkd); fi->pkd = NULL;
+ }
+
+ if (fi->ccd != NULL)
+ {
+ int i = 0, j = 0;
+ CompCharData *ccd = fi->ccd;
+
+ for (i = 0; i < fi->numOfComps; ++i)
+ {
+ for (j = 0; j < ccd[i].numOfPieces; ++j)
+ {
+ free(ccd[i].pieces[j].pccName);
+ ccd[i].pieces[j].pccName = NULL;
+ }
+
+ free(ccd[i].ccName); ccd[i].ccName = NULL;
+ }
+
+ free(fi->ccd); fi->ccd = NULL;
+ }
+
+ free(fi);
+
+ } /* if */
+
+} /* afm_free_fontinfo */
+
+#endif /* WITH_AFM_FILES */
diff --git a/backend/dvi/mdvi-lib/afmparse.h b/backend/dvi/mdvi-lib/afmparse.h
new file mode 100644
index 00000000..6cce780c
--- /dev/null
+++ b/backend/dvi/mdvi-lib/afmparse.h
@@ -0,0 +1,307 @@
+/* modified for MDVI -- some names changed to avoid conflicts with T1lib */
+/*
+ * (C) 1988, 1989 by Adobe Systems Incorporated. All rights reserved.
+ *
+ * This file may be freely copied and redistributed as long as:
+ * 1) This entire notice continues to be included in the file,
+ * 2) If the file has been modified in any way, a notice of such
+ * modification is conspicuously indicated.
+ *
+ * PostScript, Display PostScript, and Adobe are registered trademarks of
+ * Adobe Systems Incorporated.
+ *
+ * ************************************************************************
+ * THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO CHANGE WITHOUT
+ * NOTICE, AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ADOBE SYSTEMS
+ * INCORPORATED. ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY OR
+ * LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO WARRANTY OF ANY
+ * KIND (EXPRESS, IMPLIED OR STATUTORY) WITH RESPECT TO THIS INFORMATION,
+ * AND EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+ * ************************************************************************
+ */
+
+/* ParseAFM.h
+ *
+ * This header file is used in conjuction with the parseAFM.c file.
+ * Together these files provide the functionality to parse Adobe Font
+ * Metrics files and store the information in predefined data structures.
+ * It is intended to work with an application program that needs font metric
+ * information. The program can be used as is by making a procedure call to
+ * parse an AFM file and have the data stored, or an application developer
+ * may wish to customize the code.
+ *
+ * This header file defines the data structures used as well as the key
+ * strings that are currently recognized by this version of the AFM parser.
+ * This program is based on the document "Adobe Font Metrics Files,
+ * Specification Version 2.0".
+ *
+ * AFM files are separated into distinct sections of different data. Because
+ * of this, the parseAFM program can parse a specified file to only save
+ * certain sections of information based on the application's needs. A record
+ * containing the requested information will be returned to the application.
+ *
+ * AFM files are divided into five sections of data:
+ * 1) The Global Font Information
+ * 2) The Character Metrics Information
+ * 3) The Track Kerning Data
+ * 4) The Pair-Wise Kerning Data
+ * 5) The Composite Character Data
+ *
+ * Basically, the application can request any of these sections independent
+ * of what other sections are requested. In addition, in recognizing that
+ * many applications will want ONLY the x-width of characters and not all
+ * of the other character metrics information, there is a way to receive
+ * only the width information so as not to pay the storage cost for the
+ * unwanted data. An application should never request both the
+ * "quick and dirty" char metrics (widths only) and the Character Metrics
+ * Information since the Character Metrics Information will contain all
+ * of the character widths as well.
+ *
+ * There is a procedure in parseAFM.c, called parseFile, that can be
+ * called from any application wishing to get information from the AFM File.
+ * This procedure expects 3 parameters: a vaild file descriptor, a pointer
+ * to a (FontInfo *) variable (for which space will be allocated and then
+ * will be filled in with the data requested), and a mask specifying
+ * which data from the AFM File should be saved in the FontInfo structure.
+ *
+ * The flags that can be used to set the appropriate mask are defined below.
+ * In addition, several commonly used masks have already been defined.
+ *
+ * History:
+ * original: DSM Thu Oct 20 17:39:59 PDT 1988
+ * modified: DSM Mon Jul 3 14:17:50 PDT 1989
+ * - added 'storageProblem' return code
+ * - fixed typos
+ */
+#ifndef _MDVI_PARSEAFM_H
+#define _MDVI_PARSEAFM_H 1
+
+#include "sysdeps.h"
+
+#include <stdio.h>
+
+/* your basic constants */
+#define TRUE 1
+#define FALSE 0
+#define EOL '\n' /* end-of-line indicator */
+#define MAX_NAME 4096 /* max length for identifiers */
+#define BOOL int
+#define FLAGS int
+
+/* Flags that can be AND'ed together to specify exactly what
+ * information from the AFM file should be saved. */
+#define P_G 0x01 /* 0000 0001 */ /* Global Font Info */
+#define P_W 0x02 /* 0000 0010 */ /* Character Widths ONLY */
+#define P_M 0x06 /* 0000 0110 */ /* All Char Metric Info */
+#define P_P 0x08 /* 0000 1000 */ /* Pair Kerning Info */
+#define P_T 0x10 /* 0001 0000 */ /* Track Kerning Info */
+#define P_C 0x20 /* 0010 0000 */ /* Composite Char Info */
+
+/* Commonly used flags */
+#define P_GW (P_G | P_W)
+#define P_GM (P_G | P_M)
+#define P_GMP (P_G | P_M | P_P)
+#define P_GMK (P_G | P_M | P_P | P_T)
+#define P_ALL (P_G | P_M | P_P | P_T | P_C)
+
+/* Possible return codes from the parseFile procedure.
+ *
+ * ok means there were no problems parsing the file.
+ *
+ * parseError means that there was some kind of parsing error, but the
+ * parser went on. This could include problems like the count for any given
+ * section does not add up to how many entries there actually were, or
+ * there was a key that was not recognized. The return record may contain
+ * vaild data or it may not.
+ *
+ * earlyEOF means that an End of File was encountered before expected. This
+ * may mean that the AFM file had been truncated, or improperly formed.
+ *
+ * storageProblem means that there were problems allocating storage for
+ * the data structures that would have contained the AFM data.
+ */
+#define ok 0
+#define parseError -1
+#define earlyEOF -2
+#define storageProblem -3
+
+/************************* TYPES *********************************/
+/* Below are all of the data structure definitions. These structures
+ * try to map as closely as possible to grouping and naming of data
+ * in the AFM Files.
+ */
+
+/* Bounding box definition. Used for the Font BBox as well as the
+ * Character BBox.
+ */
+typedef struct
+{
+ int llx; /* lower left x-position */
+ int lly; /* lower left y-position */
+ int urx; /* upper right x-position */
+ int ury; /* upper right y-position */
+} BBox;
+
+/* Global Font information.
+ * The key that each field is associated with is in comments. For an
+ * explanation about each key and its value please refer to the AFM
+ * documentation (full title & version given above).
+ */
+typedef struct
+{
+ char *afmVersion; /* key: StartFontMetrics */
+ char *fontName; /* key: FontName */
+ char *fullName; /* key: FullName */
+ char *familyName; /* key: FamilyName */
+ char *weight; /* key: Weight */
+ float italicAngle; /* key: ItalicAngle */
+ BOOL isFixedPitch; /* key: IsFixedPitch */
+ BBox fontBBox; /* key: FontBBox */
+ int underlinePosition; /* key: UnderlinePosition */
+ int underlineThickness; /* key: UnderlineThickness */
+ char *version; /* key: Version */
+ char *notice; /* key: Notice */
+ char *encodingScheme; /* key: EncodingScheme */
+ int capHeight; /* key: CapHeight */
+ int xHeight; /* key: XHeight */
+ int ascender; /* key: Ascender */
+ int descender; /* key: Descender */
+} GlobalFontInfo;
+
+/* Ligature definition is a linked list since any character can have
+ * any number of ligatures.
+ */
+typedef struct _t_ligature
+{
+ char *succ, *lig;
+ struct _t_ligature *next;
+} Ligature;
+
+/* Character Metric Information. This structure is used only if ALL
+ * character metric information is requested. If only the character
+ * widths is requested, then only an array of the character x-widths
+ * is returned.
+ *
+ * The key that each field is associated with is in comments. For an
+ * explanation about each key and its value please refer to the
+ * Character Metrics section of the AFM documentation (full title
+ * & version given above).
+ */
+typedef struct
+{
+ int code, /* key: C */
+ wx, /* key: WX */
+ wy; /* together wx and wy are associated with key: W */
+ char *name; /* key: N */
+ BBox charBBox; /* key: B */
+ Ligature *ligs; /* key: L (linked list; not a fixed number of Ls */
+} CharMetricInfo;
+
+/* Track kerning data structure.
+ * The fields of this record are the five values associated with every
+ * TrackKern entry.
+ *
+ * For an explanation about each value please refer to the
+ * Track Kerning section of the AFM documentation (full title
+ * & version given above).
+ */
+typedef struct
+{
+ int degree;
+ float minPtSize,
+ minKernAmt,
+ maxPtSize,
+ maxKernAmt;
+} TrackKernData;
+
+/* Pair Kerning data structure.
+ * The fields of this record are the four values associated with every
+ * KP entry. For KPX entries, the yamt will be zero.
+ *
+ * For an explanation about each value please refer to the
+ * Pair Kerning section of the AFM documentation (full title
+ * & version given above).
+ */
+typedef struct
+{
+ char *name1;
+ char *name2;
+ int xamt,
+ yamt;
+} PairKernData;
+
+/* PCC is a piece of a composite character. This is a sub structure of a
+ * compCharData described below.
+ * These fields will be filled in with the values from the key PCC.
+ *
+ * For an explanation about each key and its value please refer to the
+ * Composite Character section of the AFM documentation (full title
+ * & version given above).
+ */
+typedef struct
+{
+ char *pccName;
+ int deltax,
+ deltay;
+} Pcc;
+
+/* Composite Character Information data structure.
+ * The fields ccName and numOfPieces are filled with the values associated
+ * with the key CC. The field pieces points to an array (size = numOfPieces)
+ * of information about each of the parts of the composite character. That
+ * array is filled in with the values from the key PCC.
+ *
+ * For an explanation about each key and its value please refer to the
+ * Composite Character section of the AFM documentation (full title
+ * & version given above).
+ */
+typedef struct
+{
+ char *ccName;
+ int numOfPieces;
+ Pcc *pieces;
+} CompCharData;
+
+/* FontInfo
+ * Record type containing pointers to all of the other data
+ * structures containing information about a font.
+ * A a record of this type is filled with data by the
+ * parseFile function.
+ */
+typedef struct
+{
+ GlobalFontInfo *gfi; /* ptr to a GlobalFontInfo record */
+ int *cwi; /* ptr to 256 element array of just char widths */
+ int numOfChars; /* number of entries in char metrics array */
+ CharMetricInfo *cmi; /* ptr to char metrics array */
+ int numOfTracks; /* number to entries in track kerning array */
+ TrackKernData *tkd; /* ptr to track kerning array */
+ int numOfPairs; /* number to entries in pair kerning array */
+ PairKernData *pkd; /* ptr to pair kerning array */
+ int numOfComps; /* number to entries in comp char array */
+ CompCharData *ccd; /* ptr to comp char array */
+} FontInfo;
+
+/************************* PROCEDURES ****************************/
+
+/* Call this procedure to do the grunt work of parsing an AFM file.
+ *
+ * "fp" should be a valid file pointer to an AFM file.
+ *
+ * "fi" is a pointer to a pointer to a FontInfo record sturcture
+ * (defined above). Storage for the FontInfo structure will be
+ * allocated in parseFile and the structure will be filled in
+ * with the requested data from the AFM File.
+ *
+ * "flags" is a mask with bits set representing what data should
+ * be saved. Defined above are valid flags that can be used to set
+ * the mask, as well as a few commonly used masks.
+ *
+ * The possible return codes from parseFile are defined above.
+ */
+
+extern int afm_parse_file __PROTO((FILE *, FontInfo **, FLAGS));
+extern void afm_free_fontinfo __PROTO((FontInfo *));
+
+#endif /* _MDVI_PARSEAFM_H */
diff --git a/backend/dvi/mdvi-lib/bitmap.c b/backend/dvi/mdvi-lib/bitmap.c
new file mode 100644
index 00000000..53f21207
--- /dev/null
+++ b/backend/dvi/mdvi-lib/bitmap.c
@@ -0,0 +1,1035 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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.
+ */
+
+/* Bitmap manipulation routines */
+
+#include <config.h>
+#include <stdlib.h>
+
+#include "mdvi.h"
+#include "color.h"
+
+/* bit_masks[n] contains a BmUnit with `n' contiguous bits */
+
+static BmUnit bit_masks[] = {
+ 0x0, 0x1, 0x3, 0x7,
+ 0xf, 0x1f, 0x3f, 0x7f,
+ 0xff,
+#if BITMAP_BYTES > 1
+ 0x1ff, 0x3ff, 0x7ff,
+ 0xfff, 0x1fff, 0x3fff, 0x7fff,
+ 0xffff,
+#if BITMAP_BYTES > 2
+ 0x1ffff, 0x3ffff, 0x7ffff,
+ 0xfffff, 0x1fffff, 0x3fffff, 0x7fffff,
+ 0xffffff, 0x1ffffff, 0x3ffffff, 0x7ffffff,
+ 0xfffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff,
+ 0xffffffff
+#endif /* BITMAP_BYTES > 2 */
+#endif /* BITMAP_BYTES > 1 */
+};
+
+#ifndef NODEBUG
+#define SHOW_OP_DATA (DEBUGGING(BITMAP_OPS) && DEBUGGING(BITMAP_DATA))
+#endif
+
+/*
+ * Some useful macros to manipulate bitmap data
+ * SEGMENT(m,n) = bit mask for a segment of `m' contiguous bits
+ * starting at column `n'. These macros assume that
+ * m + n <= BITMAP_BITS, 0 <= m, n.
+ */
+#ifdef WORD_BIG_ENDIAN
+#define SEGMENT(m,n) (bit_masks[m] << (BITMAP_BITS - (m) - (n)))
+#else
+#define SEGMENT(m,n) (bit_masks[m] << (n))
+#endif
+
+/* sampling and shrinking routines shamelessly stolen from xdvi */
+
+static int sample_count[] = {
+ 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
+ 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
+};
+
+/* bit_swap[j] = j with all bits inverted (i.e. msb -> lsb) */
+static Uchar bit_swap[] = {
+ 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
+ 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
+ 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
+ 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
+ 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
+ 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
+ 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
+ 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
+ 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
+ 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
+ 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
+ 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
+ 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
+ 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
+ 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
+ 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
+ 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
+ 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
+ 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
+ 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
+ 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
+ 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
+ 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
+ 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
+ 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
+ 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
+ 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
+ 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
+ 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
+ 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
+ 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
+ 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
+};
+
+
+/*
+ * next we have three bitmap functions to convert bitmaps in LSB bit order
+ * with 8, 16 and 32 bits per unit, to our internal format. The differences
+ * are minimal, but writing a generic function to handle all unit sizes is
+ * hopelessly slow.
+ */
+
+BITMAP *bitmap_convert_lsb8(Uchar *bits, int w, int h, int stride)
+{
+ BITMAP *bm;
+ int i;
+ Uchar *unit;
+ register Uchar *curr;
+ Uchar *end;
+ int bytes;
+
+ DEBUG((DBG_BITMAP_OPS, "convert LSB %dx%d@8 -> bitmap\n", w, h));
+
+ bm = bitmap_alloc_raw(w, h);
+
+ /* this is the number of bytes in the original bitmap */
+ bytes = ROUND(w, 8);
+ unit = (Uchar *)bm->data;
+ end = unit + bm->stride;
+ curr = bits;
+ /* we try to do this as fast as we can */
+ for(i = 0; i < h; i++) {
+#ifdef WORD_LITTLE_ENDIAN
+ memcpy(unit, curr, bytes);
+ curr += stride;
+#else
+ int j;
+
+ for(j = 0; j < bytes; curr++, j++)
+ unit[j] = bit_swap[*curr];
+ cur += stride - bytes;
+#endif
+ memzero(unit + bytes, bm->stride - bytes);
+ unit += bm->stride;
+ }
+ if(SHOW_OP_DATA)
+ bitmap_print(stderr, bm);
+ return bm;
+}
+
+BITMAP *bitmap_convert_msb8(Uchar *data, int w, int h, int stride)
+{
+ BITMAP *bm;
+ Uchar *unit;
+ Uchar *curr;
+ int i;
+ int bytes;
+
+ bm = bitmap_alloc(w, h);
+ bytes = ROUND(w, 8);
+ unit = (Uchar *)bm->data;
+ curr = data;
+ for(i = 0; i < h; i++) {
+#ifdef WORD_LITTLE_ENDIAN
+ int j;
+
+ for(j = 0; j < bytes; curr++, j++)
+ unit[j] = bit_swap[*curr];
+ curr += stride - bytes;
+#else
+ memcpy(unit, curr, bytes);
+ curr += stride;
+#endif
+ memzero(unit + bytes, bm->stride - bytes);
+ unit += bm->stride;
+ }
+ if(SHOW_OP_DATA)
+ bitmap_print(stderr, bm);
+ return bm;
+}
+
+
+BITMAP *bitmap_copy(BITMAP *bm)
+{
+ BITMAP *nb = bitmap_alloc(bm->width, bm->height);
+
+ DEBUG((DBG_BITMAP_OPS, "copy %dx%d\n", bm->width, bm->height));
+ memcpy(nb->data, bm->data, bm->height * bm->stride);
+ return nb;
+}
+
+BITMAP *bitmap_alloc(int w, int h)
+{
+ BITMAP *bm;
+
+ bm = xalloc(BITMAP);
+ bm->width = w;
+ bm->height = h;
+ bm->stride = BM_BYTES_PER_LINE(bm);
+ if(h && bm->stride)
+ bm->data = (BmUnit *)mdvi_calloc(h, bm->stride);
+ else
+ bm->data = NULL;
+
+ return bm;
+}
+
+BITMAP *bitmap_alloc_raw(int w, int h)
+{
+ BITMAP *bm;
+
+ bm = xalloc(BITMAP);
+ bm->width = w;
+ bm->height = h;
+ bm->stride = BM_BYTES_PER_LINE(bm);
+ if(h && bm->stride)
+ bm->data = (BmUnit *)mdvi_malloc(h * bm->stride);
+ else
+ bm->data = NULL;
+
+ return bm;
+}
+
+void bitmap_destroy(BITMAP *bm)
+{
+ if(bm->data)
+ free(bm->data);
+ free(bm);
+}
+
+void bitmap_print(FILE *out, BITMAP *bm)
+{
+ int i, j;
+ BmUnit *a, mask;
+ static const char labels[] = {
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'
+ };
+ int sub;
+
+ a = bm->data;
+ fprintf(out, " ");
+ if(bm->width > 10) {
+ putchar('0');
+ sub = 0;
+ for(j = 2; j <= bm->width; j++)
+ if((j %10) == 0) {
+ if((j % 100) == 0) {
+ fprintf(out, "*");
+ sub += 100;
+ } else
+ fprintf(out, "%d", (j - sub)/10);
+ } else
+ putc(' ', out);
+ fprintf(out, "\n ");
+ }
+ for(j = 0; j < bm->width; j++)
+ putc(labels[j % 10], out);
+ putchar('\n');
+ for(i = 0; i < bm->height; i++) {
+ mask = FIRSTMASK;
+ a = (BmUnit *)((char *)bm->data + i * bm->stride);
+ fprintf(out, "%3d ", i+1);
+ for(j = 0; j < bm->width; j++) {
+ if(*a & mask)
+ putc('#', out);
+ else
+ putc('.', out);
+ if(mask == LASTMASK) {
+ a++;
+ mask = FIRSTMASK;
+ } else
+ NEXTMASK(mask);
+ }
+ putchar('\n');
+ }
+}
+
+void bitmap_set_col(BITMAP *bm, int row, int col, int count, int state)
+{
+ BmUnit *ptr;
+ BmUnit mask;
+
+ ptr = __bm_unit_ptr(bm, col, row);
+ mask = FIRSTMASKAT(col);
+
+ while(count-- > 0) {
+ if(state)
+ *ptr |= mask;
+ else
+ *ptr &= ~mask;
+ /* move to next row */
+ ptr = bm_offset(ptr, bm->stride);
+ }
+}
+
+/*
+ * to use this function you should first make sure that
+ * there is room for `count' bits in the scanline
+ *
+ * A general-purpose (but not very efficient) function to paint `n' pixels
+ * on a bitmap, starting at position (x, y) would be:
+ *
+ * bitmap_paint_bits(__bm_unit_ptr(bitmap, x, y), x % BITMAP_BITS, n)
+ *
+ */
+void bitmap_paint_bits(BmUnit *ptr, int n, int count)
+{
+ /* paint the head */
+ if(n + count > BITMAP_BITS) {
+ *ptr |= SEGMENT(BITMAP_BITS - n, n);
+ count -= BITMAP_BITS - n;
+ ptr++;
+ } else {
+ *ptr |= SEGMENT(count, n);
+ return;
+ }
+
+ /* paint the middle */
+ for(; count >= BITMAP_BITS; count -= BITMAP_BITS)
+ *ptr++ = bit_masks[BITMAP_BITS];
+
+ /* paint the tail */
+ if(count > 0)
+ *ptr |= SEGMENT(count, 0);
+}
+
+/*
+ * same as paint_bits but clears pixels instead of painting them. Written
+ * as a separate function for efficiency reasons.
+ */
+void bitmap_clear_bits(BmUnit *ptr, int n, int count)
+{
+ if(n + count > BITMAP_BITS) {
+ *ptr &= ~SEGMENT(BITMAP_BITS - n, n);
+ count -= BITMAP_BITS;
+ ptr++;
+ } else {
+ *ptr &= ~SEGMENT(count, n);
+ return;
+ }
+
+ for(; count >= BITMAP_BITS; count -= BITMAP_BITS)
+ *ptr++ = 0;
+
+ if(count > 0)
+ *ptr &= ~SEGMENT(count, 0);
+}
+
+/* the general function to paint rows. Still used by the PK reader, but that
+ * will change soon (The GF reader already uses bitmap_paint_bits()).
+ */
+void bitmap_set_row(BITMAP *bm, int row, int col, int count, int state)
+{
+ BmUnit *ptr;
+
+ ptr = __bm_unit_ptr(bm, col, row);
+ if(state)
+ bitmap_paint_bits(ptr, col & (BITMAP_BITS-1), count);
+ else
+ bitmap_clear_bits(ptr, col & (BITMAP_BITS-1), count);
+}
+
+/*
+ * Now several `flipping' operations
+ */
+
+void bitmap_flip_horizontally(BITMAP *bm)
+{
+ BITMAP nb;
+ BmUnit *fptr, *tptr;
+ BmUnit fmask, tmask;
+ int w, h;
+
+ nb.width = bm->width;
+ nb.height = bm->height;
+ nb.stride = bm->stride;
+ nb.data = mdvi_calloc(bm->height, bm->stride);
+
+ fptr = bm->data;
+ tptr = __bm_unit_ptr(&nb, nb.width-1, 0);
+ for(h = 0; h < bm->height; h++) {
+ BmUnit *fline, *tline;
+
+ fline = fptr;
+ tline = tptr;
+ fmask = FIRSTMASK;
+ tmask = FIRSTMASKAT(nb.width-1);
+ for(w = 0; w < bm->width; w++) {
+ if(*fline & fmask)
+ *tline |= tmask;
+ if(fmask == LASTMASK) {
+ fmask = FIRSTMASK;
+ fline++;
+ } else
+ NEXTMASK(fmask);
+ if(tmask == FIRSTMASK) {
+ tmask = LASTMASK;
+ tline--;
+ } else
+ PREVMASK(tmask);
+ }
+ fptr = bm_offset(fptr, bm->stride);
+ tptr = bm_offset(tptr, bm->stride);
+ }
+ DEBUG((DBG_BITMAP_OPS, "flip_horizontally (%d,%d) -> (%d,%d)\n",
+ bm->width, bm->height, nb.width, nb.height));
+ mdvi_free(bm->data);
+ bm->data = nb.data;
+ if(SHOW_OP_DATA)
+ bitmap_print(stderr, bm);
+}
+
+void bitmap_flip_vertically(BITMAP *bm)
+{
+ BITMAP nb;
+ BmUnit *fptr, *tptr;
+ BmUnit fmask;
+ int w, h;
+
+ nb.width = bm->width;
+ nb.height = bm->height;
+ nb.stride = bm->stride;
+ nb.data = mdvi_calloc(bm->height, bm->stride);
+
+ fptr = bm->data;
+ tptr = __bm_unit_ptr(&nb, 0, nb.height-1);
+ for(h = 0; h < bm->height; h++) {
+ BmUnit *fline, *tline;
+
+ fline = fptr;
+ tline = tptr;
+ fmask = FIRSTMASK;
+ for(w = 0; w < bm->width; w++) {
+ if(*fline & fmask)
+ *tline |= fmask;
+ if(fmask == LASTMASK) {
+ fmask = FIRSTMASK;
+ fline++;
+ tline++;
+ } else
+ NEXTMASK(fmask);
+ }
+ fptr = bm_offset(fptr, bm->stride);
+ tptr = (BmUnit *)((char *)tptr - bm->stride);
+ }
+ DEBUG((DBG_BITMAP_OPS, "flip_vertically (%d,%d) -> (%d,%d)\n",
+ bm->width, bm->height, nb.width, nb.height));
+ mdvi_free(bm->data);
+ bm->data = nb.data;
+ if(SHOW_OP_DATA)
+ bitmap_print(stderr, bm);
+}
+
+void bitmap_flip_diagonally(BITMAP *bm)
+{
+ BITMAP nb;
+ BmUnit *fptr, *tptr;
+ BmUnit fmask, tmask;
+ int w, h;
+
+ nb.width = bm->width;
+ nb.height = bm->height;
+ nb.stride = bm->stride;
+ nb.data = mdvi_calloc(bm->height, bm->stride);
+
+ fptr = bm->data;
+ tptr = __bm_unit_ptr(&nb, nb.width-1, nb.height-1);
+ for(h = 0; h < bm->height; h++) {
+ BmUnit *fline, *tline;
+
+ fline = fptr;
+ tline = tptr;
+ fmask = FIRSTMASK;
+ tmask = FIRSTMASKAT(nb.width-1);
+ for(w = 0; w < bm->width; w++) {
+ if(*fline & fmask)
+ *tline |= tmask;
+ if(fmask == LASTMASK) {
+ fmask = FIRSTMASK;
+ fline++;
+ } else
+ NEXTMASK(fmask);
+ if(tmask == FIRSTMASK) {
+ tmask = LASTMASK;
+ tline--;
+ } else
+ PREVMASK(tmask);
+ }
+ fptr = bm_offset(fptr, bm->stride);
+ tptr = bm_offset(tptr, -nb.stride);
+ }
+ DEBUG((DBG_BITMAP_OPS, "flip_diagonally (%d,%d) -> (%d,%d)\n",
+ bm->width, bm->height, nb.width, nb.height));
+ mdvi_free(bm->data);
+ bm->data = nb.data;
+ if(SHOW_OP_DATA)
+ bitmap_print(stderr, bm);
+}
+
+void bitmap_rotate_clockwise(BITMAP *bm)
+{
+ BITMAP nb;
+ BmUnit *fptr, *tptr;
+ BmUnit fmask, tmask;
+ int w, h;
+
+ nb.width = bm->height;
+ nb.height = bm->width;
+ nb.stride = BM_BYTES_PER_LINE(&nb);
+ nb.data = mdvi_calloc(nb.height, nb.stride);
+
+ fptr = bm->data;
+ tptr = __bm_unit_ptr(&nb, nb.width - 1, 0);
+
+ tmask = FIRSTMASKAT(nb.width-1);
+ for(h = 0; h < bm->height; h++) {
+ BmUnit *fline, *tline;
+
+ fmask = FIRSTMASK;
+ fline = fptr;
+ tline = tptr;
+ for(w = 0; w < bm->width; w++) {
+ if(*fline & fmask)
+ *tline |= tmask;
+ if(fmask == LASTMASK) {
+ fmask = FIRSTMASK;
+ fline++;
+ } else
+ NEXTMASK(fmask);
+ /* go to next row */
+ tline = bm_offset(tline, nb.stride);
+ }
+ fptr = bm_offset(fptr, bm->stride);
+ if(tmask == FIRSTMASK) {
+ tmask = LASTMASK;
+ tptr--;
+ } else
+ PREVMASK(tmask);
+ }
+
+ DEBUG((DBG_BITMAP_OPS, "rotate_clockwise (%d,%d) -> (%d,%d)\n",
+ bm->width, bm->height, nb.width, nb.height));
+ mdvi_free(bm->data);
+ bm->data = nb.data;
+ bm->width = nb.width;
+ bm->height = nb.height;
+ bm->stride = nb.stride;
+ if(SHOW_OP_DATA)
+ bitmap_print(stderr, bm);
+}
+
+void bitmap_rotate_counter_clockwise(BITMAP *bm)
+{
+ BITMAP nb;
+ BmUnit *fptr, *tptr;
+ BmUnit fmask, tmask;
+ int w, h;
+
+ nb.width = bm->height;
+ nb.height = bm->width;
+ nb.stride = BM_BYTES_PER_LINE(&nb);
+ nb.data = mdvi_calloc(nb.height, nb.stride);
+
+ fptr = bm->data;
+ tptr = __bm_unit_ptr(&nb, 0, nb.height - 1);
+
+ tmask = FIRSTMASK;
+ for(h = 0; h < bm->height; h++) {
+ BmUnit *fline, *tline;
+
+ fmask = FIRSTMASK;
+ fline = fptr;
+ tline = tptr;
+ for(w = 0; w < bm->width; w++) {
+ if(*fline & fmask)
+ *tline |= tmask;
+ if(fmask == LASTMASK) {
+ fmask = FIRSTMASK;
+ fline++;
+ } else
+ NEXTMASK(fmask);
+ /* go to previous row */
+ tline = bm_offset(tline, -nb.stride);
+ }
+ fptr = bm_offset(fptr, bm->stride);
+ if(tmask == LASTMASK) {
+ tmask = FIRSTMASK;
+ tptr++;
+ } else
+ NEXTMASK(tmask);
+ }
+
+ DEBUG((DBG_BITMAP_OPS, "rotate_counter_clockwise (%d,%d) -> (%d,%d)\n",
+ bm->width, bm->height, nb.width, nb.height));
+ mdvi_free(bm->data);
+ bm->data = nb.data;
+ bm->width = nb.width;
+ bm->height = nb.height;
+ bm->stride = nb.stride;
+ if(SHOW_OP_DATA)
+ bitmap_print(stderr, bm);
+}
+
+void bitmap_flip_rotate_clockwise(BITMAP *bm)
+{
+ BITMAP nb;
+ BmUnit *fptr, *tptr;
+ BmUnit fmask, tmask;
+ int w, h;
+
+ nb.width = bm->height;
+ nb.height = bm->width;
+ nb.stride = BM_BYTES_PER_LINE(&nb);
+ nb.data = mdvi_calloc(nb.height, nb.stride);
+
+ fptr = bm->data;
+ tptr = __bm_unit_ptr(&nb, nb.width-1, nb.height-1);
+
+ tmask = FIRSTMASKAT(nb.width-1);
+ for(h = 0; h < bm->height; h++) {
+ BmUnit *fline, *tline;
+
+ fmask = FIRSTMASK;
+ fline = fptr;
+ tline = tptr;
+ for(w = 0; w < bm->width; w++) {
+ if(*fline & fmask)
+ *tline |= tmask;
+ if(fmask == LASTMASK) {
+ fmask = FIRSTMASK;
+ fline++;
+ } else
+ NEXTMASK(fmask);
+ /* go to previous line */
+ tline = bm_offset(tline, -nb.stride);
+ }
+ fptr = bm_offset(fptr, bm->stride);
+ if(tmask == FIRSTMASK) {
+ tmask = LASTMASK;
+ tptr--;
+ } else
+ PREVMASK(tmask);
+ }
+ DEBUG((DBG_BITMAP_OPS, "flip_rotate_clockwise (%d,%d) -> (%d,%d)\n",
+ bm->width, bm->height, nb.width, nb.height));
+ mdvi_free(bm->data);
+ bm->data = nb.data;
+ bm->width = nb.width;
+ bm->height = nb.height;
+ bm->stride = nb.stride;
+ if(SHOW_OP_DATA)
+ bitmap_print(stderr, bm);
+}
+
+void bitmap_flip_rotate_counter_clockwise(BITMAP *bm)
+{
+ BITMAP nb;
+ BmUnit *fptr, *tptr;
+ BmUnit fmask, tmask;
+ int w, h;
+
+ nb.width = bm->height;
+ nb.height = bm->width;
+ nb.stride = BM_BYTES_PER_LINE(&nb);
+ nb.data = mdvi_calloc(nb.height, nb.stride);
+
+ fptr = bm->data;
+ tptr = nb.data;
+ tmask = FIRSTMASK;
+
+ for(h = 0; h < bm->height; h++) {
+ BmUnit *fline, *tline;
+
+ fmask = FIRSTMASK;
+ fline = fptr;
+ tline = tptr;
+ for(w = 0; w < bm->width; w++) {
+ if(*fline & fmask)
+ *tline |= tmask;
+ if(fmask == LASTMASK) {
+ fmask = FIRSTMASK;
+ fline++;
+ } else
+ NEXTMASK(fmask);
+ /* go to next line */
+ tline = bm_offset(tline, nb.stride);
+ }
+ fptr = bm_offset(fptr, bm->stride);
+ if(tmask == LASTMASK) {
+ tmask = FIRSTMASK;
+ tptr++;
+ } else
+ NEXTMASK(tmask);
+ }
+
+ DEBUG((DBG_BITMAP_OPS, "flip_rotate_counter_clockwise (%d,%d) -> (%d,%d)\n",
+ bm->width, bm->height, nb.width, nb.height));
+ mdvi_free(bm->data);
+ bm->data = nb.data;
+ bm->width = nb.width;
+ bm->height = nb.height;
+ bm->stride = nb.stride;
+ if(SHOW_OP_DATA)
+ bitmap_print(stderr, bm);
+}
+
+#if 0
+void bitmap_transform(BITMAP *map, DviOrientation orient)
+{
+ switch(orient) {
+ case MDVI_ORIENT_TBLR:
+ break;
+ case MDVI_ORIENT_TBRL:
+ bitmap_flip_horizontally(map);
+ break;
+ case MDVI_ORIENT_BTLR:
+ bitmap_flip_vertically(map);
+ break;
+ case MDVI_ORIENT_BTRL:
+ bitmap_flip_diagonally(map);
+ break;
+ case MDVI_ORIENT_RP90:
+ bitmap_rotate_counter_clockwise(map);
+ break;
+ case MDVI_ORIENT_RM90:
+ bitmap_rotate_clockwise(map);
+ break;
+ case MDVI_ORIENT_IRP90:
+ bitmap_flip_rotate_counter_clockwise(map);
+ break;
+ case MDVI_ORIENT_IRM90:
+ bitmap_flip_rotate_clockwise(map);
+ break;
+ }
+}
+#endif
+
+/*
+ * Count the number of non-zero bits in a box of dimensions w x h, starting
+ * at column `step' in row `data'.
+ *
+ * Shamelessly stolen from xdvi.
+ */
+static int do_sample(BmUnit *data, int stride, int step, int w, int h)
+{
+ BmUnit *ptr, *end, *cp;
+ int shift, n;
+ int bits_left;
+ int wid;
+
+ ptr = data + step / BITMAP_BITS;
+ end = bm_offset(data, h * stride);
+ shift = FIRSTSHIFTAT(step);
+ bits_left = w;
+ n = 0;
+ while(bits_left) {
+#ifndef WORD_BIG_ENDIAN
+ wid = BITMAP_BITS - shift;
+#else
+ wid = shift;
+#endif
+ if(wid > bits_left)
+ wid = bits_left;
+ if(wid > 8)
+ wid = 8;
+#ifdef WORD_BIG_ENDIAN
+ shift -= wid;
+#endif
+ for(cp = ptr; cp < end; cp = bm_offset(cp, stride))
+ n += sample_count[(*cp >> shift) & bit_masks[wid]];
+#ifndef WORD_BIG_ENDIAN
+ shift += wid;
+#endif
+#ifdef WORD_BIG_ENDIAN
+ if(shift == 0) {
+ shift = BITMAP_BITS;
+ ptr++;
+ }
+#else
+ if(shift == BITMAP_BITS) {
+ shift = 0;
+ ptr++;
+ }
+#endif
+ bits_left -= wid;
+ }
+ return n;
+}
+
+void mdvi_shrink_box(DviContext *dvi, DviFont *font,
+ DviFontChar *pk, DviGlyph *dest)
+{
+ int x, y, z;
+ DviGlyph *glyph;
+ int hs, vs;
+
+ hs = dvi->params.hshrink;
+ vs = dvi->params.vshrink;
+ glyph = &pk->glyph;
+
+ x = (int)glyph->x / hs;
+ if((int)glyph->x - x * hs > 0)
+ x++;
+ dest->w = x + ROUND((int)glyph->w - glyph->x, hs);
+
+ z = (int)glyph->y + 1;
+ y = z / vs;
+ if(z - y * vs <= 0)
+ y--;
+ dest->h = y + ROUND((int)glyph->h - z, vs) + 1;
+ dest->x = x;
+ dest->y = glyph->y / vs;
+ dest->data = MDVI_GLYPH_EMPTY;
+ DEBUG((DBG_BITMAPS, "shrink_box: (%dw,%dh,%dx,%dy) -> (%dw,%dh,%dx,%dy)\n",
+ glyph->w, glyph->h, glyph->x, glyph->y,
+ dest->w, dest->h, dest->x, dest->y));
+}
+
+void mdvi_shrink_glyph(DviContext *dvi, DviFont *font,
+ DviFontChar *pk, DviGlyph *dest)
+{
+ int rows_left, rows, init_cols;
+ int cols_left, cols;
+ BmUnit *old_ptr, *new_ptr;
+ BITMAP *oldmap, *newmap;
+ BmUnit m, *cp;
+ DviGlyph *glyph;
+ int sample, min_sample;
+ int old_stride;
+ int new_stride;
+ int x, y;
+ int w, h;
+ int hs, vs;
+
+ hs = dvi->params.hshrink;
+ vs = dvi->params.vshrink;
+
+ min_sample = vs * hs * dvi->params.density / 100;
+
+ glyph = &pk->glyph;
+ oldmap = (BITMAP *)glyph->data;
+
+ x = (int)glyph->x / hs;
+ init_cols = (int)glyph->x - x * hs;
+ if(init_cols <= 0)
+ init_cols += hs;
+ else
+ x++;
+ w = x + ROUND((int)glyph->w - glyph->x, hs);
+
+ cols = (int)glyph->y + 1;
+ y = cols / vs;
+ rows = cols - y * vs;
+ if(rows <= 0) {
+ rows += vs;
+ y--;
+ }
+ h = y + ROUND((int)glyph->h - cols, vs) + 1;
+
+ /* create the new glyph */
+ newmap = bitmap_alloc(w, h);
+ dest->data = newmap;
+ dest->x = x;
+ dest->y = glyph->y / vs;
+ dest->w = w;
+ dest->h = h;
+
+ old_ptr = oldmap->data;
+ old_stride = oldmap->stride;
+ new_ptr = newmap->data;
+ new_stride = newmap->stride;
+ rows_left = glyph->h;
+
+ while(rows_left) {
+ if(rows > rows_left)
+ rows = rows_left;
+ cols_left = glyph->w;
+ m = FIRSTMASK;
+ cp = new_ptr;
+ cols = init_cols;
+ while(cols_left > 0) {
+ if(cols > cols_left)
+ cols = cols_left;
+ sample = do_sample(old_ptr, old_stride,
+ glyph->w - cols_left, cols, rows);
+ if(sample >= min_sample)
+ *cp |= m;
+ if(m == LASTMASK) {
+ m = FIRSTMASK;
+ cp++;
+ } else
+ NEXTMASK(m);
+ cols_left -= cols;
+ cols = hs;
+ }
+ new_ptr = bm_offset(new_ptr, new_stride);
+ old_ptr = bm_offset(old_ptr, rows * old_stride);
+ rows_left -= rows;
+ rows = vs;
+ }
+ DEBUG((DBG_BITMAPS, "shrink_glyph: (%dw,%dh,%dx,%dy) -> (%dw,%dh,%dx,%dy)\n",
+ glyph->w, glyph->h, glyph->x, glyph->y,
+ dest->w, dest->h, dest->x, dest->y));
+ if(DEBUGGING(BITMAP_DATA))
+ bitmap_print(stderr, newmap);
+}
+
+void mdvi_shrink_glyph_grey(DviContext *dvi, DviFont *font,
+ DviFontChar *pk, DviGlyph *dest)
+{
+ int rows_left, rows;
+ int cols_left, cols, init_cols;
+ long sampleval, samplemax;
+ BmUnit *old_ptr;
+ void *image;
+ int w, h;
+ int x, y;
+ DviGlyph *glyph;
+ BITMAP *map;
+ Ulong *pixels;
+ int npixels;
+ Ulong colortab[2];
+ int hs, vs;
+ DviDevice *dev;
+
+ hs = dvi->params.hshrink;
+ vs = dvi->params.vshrink;
+ dev = &dvi->device;
+
+ glyph = &pk->glyph;
+ map = (BITMAP *)glyph->data;
+
+ x = (int)glyph->x / hs;
+ init_cols = (int)glyph->x - x * hs;
+ if(init_cols <= 0)
+ init_cols += hs;
+ else
+ x++;
+ w = x + ROUND((int)glyph->w - glyph->x, hs);
+
+ cols = (int)glyph->y + 1;
+ y = cols / vs;
+ rows = cols - y * vs;
+ if(rows <= 0) {
+ rows += vs;
+ y--;
+ }
+ h = y + ROUND((int)glyph->h - cols, vs) + 1;
+ ASSERT(w && h);
+
+ /* before touching anything, do this */
+ image = dev->create_image(dev->device_data, w, h, BITMAP_BITS);
+ if(image == NULL) {
+ mdvi_shrink_glyph(dvi, font, pk, dest);
+ return;
+ }
+
+ /* save these colors */
+ pk->fg = MDVI_CURRFG(dvi);
+ pk->bg = MDVI_CURRBG(dvi);
+
+ samplemax = vs * hs;
+ npixels = samplemax + 1;
+ pixels = get_color_table(&dvi->device, npixels, pk->fg, pk->bg,
+ dvi->params.gamma, dvi->params.density);
+ if(pixels == NULL) {
+ npixels = 2;
+ colortab[0] = pk->fg;
+ colortab[1] = pk->bg;
+ pixels = &colortab[0];
+ }
+
+ /* setup the new glyph */
+ dest->data = image;
+ dest->x = x;
+ dest->y = glyph->y / vs;
+ dest->w = w;
+ dest->h = h;
+
+ y = 0;
+ old_ptr = map->data;
+ rows_left = glyph->h;
+
+ while(rows_left && y < h) {
+ x = 0;
+ if(rows > rows_left)
+ rows = rows_left;
+ cols_left = glyph->w;
+ cols = init_cols;
+ while(cols_left && x < w) {
+ if(cols > cols_left)
+ cols = cols_left;
+ sampleval = do_sample(old_ptr, map->stride,
+ glyph->w - cols_left, cols, rows);
+ /* scale the sample value by the number of grey levels */
+ if(npixels - 1 != samplemax)
+ sampleval = ((npixels-1) * sampleval) / samplemax;
+ ASSERT(sampleval < npixels);
+ dev->put_pixel(image, x, y, pixels[sampleval]);
+ cols_left -= cols;
+ cols = hs;
+ x++;
+ }
+ for(; x < w; x++)
+ dev->put_pixel(image, x, y, pixels[0]);
+ old_ptr = bm_offset(old_ptr, rows * map->stride);
+ rows_left -= rows;
+ rows = vs;
+ y++;
+ }
+
+ for(; y < h; y++) {
+ for(x = 0; x < w; x++)
+ dev->put_pixel(image, x, y, pixels[0]);
+ }
+ DEBUG((DBG_BITMAPS, "shrink_glyph_grey: (%dw,%dh,%dx,%dy) -> (%dw,%dh,%dx,%dy)\n",
+ glyph->w, glyph->h, glyph->x, glyph->y,
+ dest->w, dest->h, dest->x, dest->y));
+}
+
diff --git a/backend/dvi/mdvi-lib/bitmap.h b/backend/dvi/mdvi-lib/bitmap.h
new file mode 100644
index 00000000..4d98fecd
--- /dev/null
+++ b/backend/dvi/mdvi-lib/bitmap.h
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 _BITMAP_H
+#define _BITMAP_H 1
+
+#include "sysdeps.h"
+
+/* Structures and functions to manipulate bitmaps */
+
+/* bitmap unit (as in X's docs) */
+typedef Uint32 BmUnit;
+
+/* size (in bytes) of a bitmap atom */
+#define BITMAP_BYTES 4
+
+/* size (in bits) of a bitmap atom */
+#define BITMAP_BITS (BITMAP_BYTES << 3)
+
+typedef struct {
+ int width;
+ int height;
+ int stride;
+ BmUnit *data;
+} BITMAP;
+
+#define BM_BYTES_PER_LINE(b) \
+ (ROUND((b)->width, BITMAP_BITS) * BITMAP_BYTES)
+#define BM_WIDTH(b) (((BITMAP *)(b))->width)
+#define BM_HEIGHT(b) (((BITMAP *)(b))->height)
+
+#define BMBIT(n) ((BmUnit)1 << (n))
+
+/* Macros to manipulate individual pixels in a bitmap
+ * (they are slow, don't use them)
+ */
+
+#define bm_offset(b,o) (BmUnit *)((Uchar *)(b) + (o))
+
+#define __bm_unit_ptr(b,x,y) \
+ bm_offset((b)->data, (y) * (b)->stride + \
+ ((x) / BITMAP_BITS) * BITMAP_BYTES)
+
+#define __bm_unit(b,x,y) __bm_unit_ptr((b), (x), (y))[0]
+
+#define BM_GETPIXEL(b,x,y) __bm_unit((b), (x), (y))
+#define BM_SETPIXEL(b,x,y) (__bm_unit((b), (x), (y)) |= FIRSTMASKAT(x))
+#define BM_CLRPIXEL(b,x,y) (__bm_unit((b), (x), (y)) &= ~FIRSTMASKAT(x))
+
+/*
+ * These macros are used to access pixels in a bitmap. They are supposed
+ * to be used like this:
+ */
+#if 0
+ BmUnit *row, mask;
+
+ mask = FIRSTMASK;
+
+ /* position `unit' at coordinates (column_number, row_number) */
+ unit = (BmUnit *)((char *)bitmap->data + row_number * bitmap->stride
+ + (column_number / BITMAP_BITS);
+ /* loop over all pixels IN THE SAME ROW */
+ for(i = 0; i < number_of_pixels; i++) {
+ /* to test if a pixel is set */
+ if(*unit & mask) {
+ /* yes, it is, do something with it */
+ }
+ /* to set/clear a pixel */
+ if(painting)
+ *unit |= mask; /* now you see it */
+ else
+ *unit &= ~mask; /* now you don't */
+ /* move to next pixel */
+ if(mask == LASTMASK) {
+ unit++;
+ UPDATEMASK(mask);
+ }
+ }
+/* end of sample code */
+#endif
+
+/* bitmaps are stored in native byte order */
+#ifdef WORD_BIG_ENDIAN
+#define FIRSTSHIFT (BITMAP_BITS - 1)
+#define LASTSHIFT 0
+#define NEXTMASK(m) ((m) >>= 1)
+#define PREVMASK(m) ((m) <<= 1)
+#define FIRSTSHIFTAT(c) (BITMAP_BITS - ((c) % BITMAP_BITS) - 1)
+#else
+#define FIRSTSHIFT 0
+#define LASTSHIFT (BITMAP_BITS - 1)
+#define NEXTMASK(m) ((m) <<= 1)
+#define PREVMASK(m) ((m) >>= 1)
+#define FIRSTSHIFTAT(c) ((c) % BITMAP_BITS)
+#endif
+
+#define FIRSTMASK BMBIT(FIRSTSHIFT)
+#define FIRSTMASKAT(c) BMBIT(FIRSTSHIFTAT(c))
+#define LASTMASK BMBIT(LASTSHIFT)
+
+extern BITMAP *bitmap_alloc __PROTO((int, int));
+extern BITMAP *bitmap_alloc_raw __PROTO((int, int));
+extern void bitmap_destroy __PROTO((BITMAP *));
+
+/*
+ * set_row(bm, row, col, count, state):
+ * sets `count' pixels to state `onoff', starting from pixel
+ * at position (col, row). All pixels must lie in the same
+ * row.
+ */
+extern void bitmap_set_col __PROTO((BITMAP *, int, int, int, int));
+extern void bitmap_set_row __PROTO((BITMAP *, int, int, int, int));
+
+extern void bitmap_paint_bits __PROTO((BmUnit *, int, int));
+extern void bitmap_clear_bits __PROTO((BmUnit *, int, int));
+
+extern BITMAP *bitmap_copy __PROTO((BITMAP *));
+extern void bitmap_flip_horizontally __PROTO((BITMAP *));
+extern void bitmap_flip_vertically __PROTO((BITMAP *));
+extern void bitmap_flip_diagonally __PROTO((BITMAP *));
+extern void bitmap_rotate_clockwise __PROTO((BITMAP *));
+extern void bitmap_rotate_counter_clockwise __PROTO((BITMAP *));
+extern void bitmap_flip_rotate_clockwise __PROTO((BITMAP *));
+extern void bitmap_flip_rotate_counter_clockwise __PROTO((BITMAP *));
+extern BITMAP *bitmap_convert_lsb8 __PROTO((Uchar *, int, int, int));
+extern BITMAP *bitmap_convert_msb8 __PROTO((Uchar *, int, int, int));
+
+#include <stdio.h>
+extern void bitmap_print __PROTO((FILE *, BITMAP *));
+
+#endif /* _BITMAP_H */
diff --git a/backend/dvi/mdvi-lib/color.c b/backend/dvi/mdvi-lib/color.c
new file mode 100644
index 00000000..c28107fd
--- /dev/null
+++ b/backend/dvi/mdvi-lib/color.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include "mdvi.h"
+#include "color.h"
+
+void mdvi_set_color(DviContext *dvi, Ulong fg, Ulong bg)
+{
+ if(dvi->curr_fg != fg || dvi->curr_bg != bg) {
+ DEBUG((DBG_DEVICE, "setting color to (%lu,%lu)\n", fg, bg));
+ if(dvi->device.set_color)
+ dvi->device.set_color(dvi->device.device_data, fg, bg);
+ dvi->curr_fg = fg;
+ dvi->curr_bg = bg;
+ }
+}
+
+void mdvi_push_color(DviContext *dvi, Ulong fg, Ulong bg)
+{
+ if(dvi->color_top == dvi->color_size) {
+ dvi->color_size += 32;
+ dvi->color_stack = mdvi_realloc(dvi->color_stack,
+ dvi->color_size * sizeof(DviColorPair));
+ }
+ dvi->color_stack[dvi->color_top].fg = dvi->curr_fg;
+ dvi->color_stack[dvi->color_top].bg = dvi->curr_bg;
+ dvi->color_top++;
+ mdvi_set_color(dvi, fg, bg);
+}
+
+void mdvi_pop_color(DviContext *dvi)
+{
+ Ulong fg, bg;
+
+ if(dvi->color_top == 0)
+ return;
+ dvi->color_top--;
+ fg = dvi->color_stack[dvi->color_top].fg;
+ bg = dvi->color_stack[dvi->color_top].bg;
+ mdvi_set_color(dvi, fg, bg);
+}
+
+void mdvi_reset_color(DviContext *dvi)
+{
+ dvi->color_top = 0;
+ mdvi_set_color(dvi, dvi->params.fg, dvi->params.bg);
+}
+
+/* cache for color tables, to avoid creating them for every glyph */
+typedef struct {
+ Ulong fg;
+ Ulong bg;
+ Uint nlevels;
+ Ulong *pixels;
+ int density;
+ double gamma;
+ Uint hits;
+} ColorCache;
+
+#define CCSIZE 256
+static ColorCache color_cache[CCSIZE];
+static int cc_entries;
+
+#define GAMMA_DIFF 0.005
+
+
+/* create a color table */
+Ulong *get_color_table(DviDevice *dev,
+ int nlevels, Ulong fg, Ulong bg, double gamma, int density)
+{
+ ColorCache *cc, *tofree;
+ int lohits;
+ Ulong *pixels;
+ int status;
+
+ lohits = color_cache[0].hits;
+ tofree = &color_cache[0];
+ /* look in the cache and see if we have one that matches this request */
+ for(cc = &color_cache[0]; cc < &color_cache[cc_entries]; cc++) {
+ if(cc->hits < lohits) {
+ lohits = cc->hits;
+ tofree = cc;
+ }
+ if(cc->fg == fg && cc->bg == bg && cc->density == density &&
+ cc->nlevels == nlevels && fabs(cc->gamma - gamma) <= GAMMA_DIFF)
+ break;
+ }
+
+ if(cc < &color_cache[cc_entries]) {
+ cc->hits++;
+ return cc->pixels;
+ }
+
+ DEBUG((DBG_DEVICE, "Adding color table to cache (fg=%lu, bg=%lu, n=%d)\n",
+ fg, bg, nlevels));
+
+ /* no entry was found in the cache, create a new one */
+ if(cc_entries < CCSIZE) {
+ cc = &color_cache[cc_entries++];
+ cc->pixels = NULL;
+ } else {
+ cc = tofree;
+ mdvi_free(cc->pixels);
+ }
+ pixels = xnalloc(Ulong, nlevels);
+ status = dev->alloc_colors(dev->device_data,
+ pixels, nlevels, fg, bg, gamma, density);
+ if(status < 0) {
+ mdvi_free(pixels);
+ return NULL;
+ }
+ cc->fg = fg;
+ cc->bg = bg;
+ cc->gamma = gamma;
+ cc->density = density;
+ cc->nlevels = nlevels;
+ cc->pixels = pixels;
+ cc->hits = 1;
+ return pixels;
+}
diff --git a/backend/dvi/mdvi-lib/color.h b/backend/dvi/mdvi-lib/color.h
new file mode 100644
index 00000000..35b2f923
--- /dev/null
+++ b/backend/dvi/mdvi-lib/color.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 _COLOR_H_
+#define _COLOR_H_
+
+#include "common.h"
+
+extern Ulong *get_color_table(DviDevice *dev,
+ int nlevels, Ulong fg, Ulong bg, double gamma, int density);
+
+extern void mdvi_set_color __PROTO((DviContext *, Ulong, Ulong));
+extern void mdvi_push_color __PROTO((DviContext *, Ulong, Ulong));
+extern void mdvi_pop_color __PROTO((DviContext *));
+extern void mdvi_reset_color __PROTO((DviContext *));
+
+#endif /* _COLOR_H_ */
+
diff --git a/backend/dvi/mdvi-lib/common.c b/backend/dvi/mdvi-lib/common.c
new file mode 100644
index 00000000..97b34b56
--- /dev/null
+++ b/backend/dvi/mdvi-lib/common.c
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "common.h"
+
+long fsgetn(FILE *p, size_t n)
+{
+ long v;
+
+ v = fgetbyte(p);
+ if(v & 0x80)
+ v -= 0x100;
+ while(--n > 0)
+ v = (v << 8) | fgetbyte(p);
+ return v;
+}
+
+Ulong fugetn(FILE *p, size_t n)
+{
+ Ulong v;
+
+ v = fgetbyte(p);
+ while(--n > 0)
+ v = (v << 8) | fgetbyte(p);
+ return v;
+}
+
+long msgetn(const Uchar *p, size_t n)
+{
+ long v = (long)*p++;
+
+ if(v & 0x80)
+ v -= 0x100;
+ while(--n > 0)
+ v = (v << 8) | *p++;
+ return v;
+}
+
+Ulong mugetn(const Uchar *p, size_t n)
+{
+ Ulong v = (Ulong)*p++;
+
+ while(--n > 0)
+ v = (v << 8) | *p++;
+ return v;
+}
+
+char *read_string(FILE *in, int s, char *buffer, size_t len)
+{
+ int n;
+ char *str;
+
+ n = fugetn(in, s ? s : 1);
+ if((str = buffer) == NULL || n + 1 > len)
+ str = mdvi_malloc(n + 1);
+ if(fread(str, 1, n, in) != n) {
+ if(str != buffer) mdvi_free(str);
+ return NULL;
+ }
+ str[n] = 0;
+ return str;
+}
+
+size_t read_bcpl(FILE *in, char *buffer, size_t maxlen, size_t wanted)
+{
+ size_t i;
+
+ i = (int)fuget1(in);
+ if(maxlen && i > maxlen)
+ i = maxlen;
+ if(fread(buffer, i, 1, in) != 1)
+ return -1;
+ buffer[i] = '\0';
+ while(wanted-- > i)
+ (void)fgetc(in);
+ return i;
+}
+
+char *read_alloc_bcpl(FILE *in, size_t maxlen, size_t *size)
+{
+ size_t i;
+ char *buffer;
+
+ i = (size_t)fuget1(in);
+ if(maxlen && i > maxlen)
+ i = maxlen;
+ buffer = (char *)malloc(i + 1);
+ if(buffer == NULL)
+ return NULL;
+ if(fread(buffer, i, 1, in) != 1) {
+ free(buffer);
+ return NULL;
+ }
+ buffer[i] = '\0';
+ if(size) *size = i;
+ return buffer;
+}
+
+/* buffers */
+
+void buff_free(Buffer *buf)
+{
+ if(buf->data)
+ mdvi_free(buf->data);
+ buff_init(buf);
+}
+
+void buff_init(Buffer *buf)
+{
+ buf->data = NULL;
+ buf->size = 0;
+ buf->length = 0;
+}
+
+size_t buff_add(Buffer *buf, const char *data, size_t len)
+{
+ if(!len && data)
+ len = strlen(data);
+ if(buf->length + len + 1 > buf->size) {
+ buf->size = buf->length + len + 256;
+ buf->data = mdvi_realloc(buf->data, buf->size);
+ }
+ memcpy(buf->data + buf->length, data, len);
+ buf->length += len;
+ return buf->length;
+}
+
+char *buff_gets(Buffer *buf, size_t *length)
+{
+ char *ptr;
+ char *ret;
+ size_t len;
+
+ ptr = strchr(buf->data, '\n');
+ if(ptr == NULL)
+ return NULL;
+ ptr++; /* include newline */
+ len = ptr - buf->data;
+ ret = mdvi_malloc(len + 1);
+ if(len > 0) {
+ memcpy(ret, buf->data, len);
+ memmove(buf->data, buf->data + len, buf->length - len);
+ buf->length -= len;
+ }
+ ret[len] = 0;
+ if(length) *length = len;
+ return ret;
+}
+
diff --git a/backend/dvi/mdvi-lib/common.h b/backend/dvi/mdvi-lib/common.h
new file mode 100644
index 00000000..27a7d8f9
--- /dev/null
+++ b/backend/dvi/mdvi-lib/common.h
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 _MDVI_COMMON_H
+#define _MDVI_COMMON_H 1
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <math.h>
+
+#include "sysdeps.h"
+
+#if STDC_HEADERS
+# include <string.h>
+#endif
+
+#if !defined(STDC_HEADERS) || defined(__STRICT_ANSI__)
+# ifndef HAVE_STRCHR
+# define strchr index
+# define strrchr rindex
+# endif
+# ifndef HAVE_MEMCPY
+# define memcpy(a,b,n) bcopy((b), (a), (n))
+# define memmove(a,b,n) bcopy((b), (a), (n))
+# endif
+#endif
+
+#if defined(STDC_HEADERS) || defined(HAVE_MEMCPY)
+#define memzero(a,n) memset((a), 0, (n))
+#else
+#define memzero(a,n) bzero((a), (n))
+#endif
+
+typedef struct _List {
+ struct _List *next;
+ struct _List *prev;
+} List;
+#define LIST(x) ((List *)(x))
+
+typedef struct {
+ char *data;
+ size_t size;
+ size_t length;
+} Buffer;
+
+typedef struct {
+ List *head;
+ List *tail;
+ int count;
+} ListHead;
+#define MDVI_EMPTY_LIST_HEAD {NULL, NULL, 0}
+
+typedef struct {
+ char *data;
+ size_t size;
+ size_t length;
+} Dstring;
+
+/* Functions to read numbers from streams and memory */
+
+#define fgetbyte(p) ((unsigned)getc(p))
+
+extern char *program_name;
+
+extern Ulong fugetn __PROTO((FILE *, size_t));
+extern long fsgetn __PROTO((FILE *, size_t));
+extern Ulong mugetn __PROTO((const Uchar *, size_t));
+extern long msgetn __PROTO((const Uchar *, size_t));
+
+/* To read from a stream (fu: unsigned, fs: signed) */
+#define fuget4(p) fugetn((p), 4)
+#define fuget3(p) fugetn((p), 3)
+#define fuget2(p) fugetn((p), 2)
+#define fuget1(p) fgetbyte(p)
+#define fsget4(p) fsgetn((p), 4)
+#define fsget3(p) fsgetn((p), 3)
+#define fsget2(p) fsgetn((p), 2)
+#define fsget1(p) fsgetn((p), 1)
+
+/* To read from memory (mu: unsigned, ms: signed) */
+#define MUGETN(p,n) ((p) += (n), mugetn((p)-(n), (n)))
+#define MSGETN(p,n) ((p) += (n), msgetn((p)-(n), (n)))
+#define muget4(p) MUGETN((p), 4)
+#define muget3(p) MUGETN((p), 3)
+#define muget2(p) MUGETN((p), 2)
+#define muget1(p) MUGETN((p), 1)
+#define msget4(p) MSGETN((p), 4)
+#define msget3(p) MSGETN((p), 3)
+#define msget2(p) MSGETN((p), 2)
+#define msget1(p) MSGETN((p), 1)
+
+#define ROUND(x,y) (((x) + (y) - 1) / (y))
+#define FROUND(x) (int)((x) + 0.5)
+#define SFROUND(x) (int)((x) >= 0 ? floor((x) + 0.5) : ceil((x) + 0.5))
+
+#define Max(a,b) (((a) > (b)) ? (a) : (b))
+#define Min(a,b) (((a) < (b)) ? (a) : (b))
+
+/* make 2byte number from 2 8bit quantities */
+#define HALFWORD(a,b) ((((a) << 8) & 0xf) | (b))
+#define FULLWORD(a,b,c,d) \
+ ((((Int8)(a) << 24) & 0xff000000) | \
+ (((Uint8)(b) << 16) & 0x00ff0000) | \
+ (((Uint8)(c) << 8) & 0x0000ff00) | \
+ ((Uint8)(d) & 0xff))
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+#define SWAPINT(a,b) \
+ ({ int _s = a; a = b; b = _s; })
+#else
+#define SWAPINT(a,b) do { int _s = a; a = b; b = _s; } while(0)
+#endif
+
+#define STREQ(a,b) (strcmp((a), (b)) == 0)
+#define STRNEQ(a,b,n) (strncmp((a), (b), (n)) == 0)
+#define STRCEQ(a,b) (strcasecmp((a), (b)) == 0)
+#define STRNCEQ(a,b,n) (strncasecmp((a), (b), (n)) == 0)
+
+extern char *read_string __PROTO((FILE *, int, char *, size_t));
+extern size_t read_bcpl __PROTO((FILE *, char *, size_t, size_t));
+extern char *read_alloc_bcpl __PROTO((FILE *, size_t, size_t *));
+
+/* miscellaneous */
+
+extern void mdvi_message __PROTO((const char *, ...));
+extern void mdvi_crash __PROTO((const char *, ...));
+extern void mdvi_fatal __PROTO((const char *, ...));
+extern void mdvi_error __PROTO((const char *, ...));
+extern void mdvi_warning __PROTO((const char *, ...));
+extern int unit2pix __PROTO((int, const char *));
+extern double unit2pix_factor __PROTO((const char *));
+
+#define LOG_NONE -1
+#define LOG_INFO 0
+#define LOG_WARN 1
+#define LOG_ERROR 2
+#define LOG_DEBUG 3
+
+#define DBG_OPCODE (1 << 0)
+#define DBG_FONTS (1 << 1)
+#define DBG_FILES (1 << 2)
+#define DBG_DVI (1 << 3)
+#define DBG_PARAMS (1 << 4)
+#define DBG_SPECIAL (1 << 5)
+#define DBG_DEVICE (1 << 6)
+#define DBG_GLYPHS (1 << 7)
+#define DBG_BITMAPS (1 << 8)
+#define DBG_PATHS (1 << 9)
+#define DBG_SEARCH (1 << 10)
+#define DBG_VARS (1 << 11)
+#define DBG_BITMAP_OPS (1 << 12)
+#define DBG_BITMAP_DATA (1 << 13)
+#define DBG_TYPE1 (1 << 14)
+#define DBG_TT (1 << 15)
+#define DBG_FT2 (1 << 16)
+#define DBG_FMAP (1 << 17)
+
+#define DBG_SILENT (1 << 31)
+
+#ifdef NODEBUG
+#define DEBUGGING(x) 0
+#else
+#define DEBUGGING(x) (_mdvi_debug_mask & DBG_##x)
+#endif
+
+#ifndef NODEBUG
+extern Uint32 _mdvi_debug_mask;
+extern void __debug __PROTO((int, const char *, ...));
+#define DEBUG(x) __debug x
+#define ASSERT(x) do { \
+ if(!(x)) mdvi_crash("%s:%d: Assertion %s failed\n", \
+ __FILE__, __LINE__, #x); \
+ } while(0)
+#define ASSERT_VALUE(x,y) do { \
+ if((x) != (y)) \
+ mdvi_crash("%s:%d: Assertion failed (%d = %s != %s)\n", \
+ __FILE__, __LINE__, (x), #x, #x); \
+ } while(0)
+#else
+#define DEBUG(x) do { } while(0)
+#define ASSERT(x) do { } while(0)
+#define ASSERT_VALUE(x,y) do { } while(0)
+#endif
+
+#define set_debug_mask(m) (_mdvi_debug_mask = (Uint32)(m))
+#define add_debug_mask(m) (_mdvi_debug_mask |= (Uint32)(m))
+#define get_debug_mask() _mdvi_debug_mask
+
+/* memory allocation */
+
+extern void mdvi_free __PROTO((void *));
+extern void *mdvi_malloc __PROTO((size_t));
+extern void *mdvi_realloc __PROTO((void *, size_t));
+extern void *mdvi_calloc __PROTO((size_t, size_t));
+extern char *mdvi_strncpy __PROTO((char *, const char *, size_t));
+extern char *mdvi_strdup __PROTO((const char *));
+extern char *mdvi_strndup __PROTO((const char *, size_t));
+extern void *mdvi_memdup __PROTO((const void *, size_t));
+extern char *mdvi_build_path_from_cwd __PROTO((const char *));
+extern char *mdvi_strrstr __PROTO((const char *, const char *));
+
+/* macros to make memory allocation nicer */
+#define xalloc(t) (t *)mdvi_malloc(sizeof(t))
+#define xnalloc(t,n) (t *)mdvi_calloc((n), sizeof(t))
+#define xresize(p,t,n) (t *)mdvi_realloc((p), (n) * sizeof(t))
+
+extern char *xstradd __PROTO((char *, size_t *, size_t, const char *, size_t));
+
+extern Ulong get_mtime __PROTO((int));
+
+/* lists */
+extern void listh_init __PROTO((ListHead *));
+extern void listh_prepend __PROTO((ListHead *, List *));
+extern void listh_append __PROTO((ListHead *, List *));
+extern void listh_add_before __PROTO((ListHead *, List *, List *));
+extern void listh_add_after __PROTO((ListHead *, List *, List *));
+extern void listh_remove __PROTO((ListHead *, List *));
+extern void listh_concat __PROTO((ListHead *, ListHead *));
+extern void listh_catcon __PROTO((ListHead *, ListHead *));
+
+extern void buff_init __PROTO((Buffer *));
+extern size_t buff_add __PROTO((Buffer *, const char *, size_t));
+extern char *buff_gets __PROTO((Buffer *, size_t *));
+extern void buff_free __PROTO((Buffer *));
+
+extern char *getword __PROTO((char *, const char *, char **));
+extern char *getstring __PROTO((char *, const char *, char **));
+
+extern void dstring_init __PROTO((Dstring *));
+extern int dstring_new __PROTO((Dstring *, const char *, int));
+extern int dstring_append __PROTO((Dstring *, const char *, int));
+extern int dstring_copy __PROTO((Dstring *, int, const char *, int));
+extern int dstring_insert __PROTO((Dstring *, int, const char *, int));
+extern void dstring_reset __PROTO((Dstring *));
+
+#define dstring_length(d) ((d)->length)
+#define dstring_strcat(d,s) dstring_append((d), (s), -1)
+
+extern char *dgets __PROTO((Dstring *, FILE *));
+extern int file_readable __PROTO((const char *));
+extern int file_exists __PROTO((const char *));
+extern const char *file_basename __PROTO((const char *));
+extern const char *file_extension __PROTO((const char *));
+
+/*
+ * Miscellaneous macros
+ */
+
+#define LIST_FOREACH(ptr, type, list) \
+ for(ptr = (type *)(list)->head; ptr; ptr = (ptr)->next)
+
+#define Size(x) (sizeof(x) / sizeof((x)[0]))
+
+/* multiply a fix_word by a 32bit number */
+#define B0(x) ((x) & 0xff)
+#define B1(x) B0((x) >> 8)
+#define B2(x) B0((x) >> 16)
+#define B3(x) B0((x) >> 24)
+#define __tfm_mul(z,t) \
+ (((((B0(t) * (z)) >> 8) + (B1(t) * (z))) >> 8) + B2(t) * (z))
+#define TFMSCALE(z,t,a,b) \
+ ((B3(t) == 255) ? \
+ __tfm_mul((z), (t)) / (b) - (a) : \
+ __tfm_mul((z), (t)) / (b))
+#define TFMPREPARE(x,z,a,b) do { \
+ a = 16; z = (x); \
+ while(z > 040000000L) { z >>= 1; a <<= 1; } \
+ b = 256 / a; a *= z; \
+ } while(0)
+
+#endif /* _MDVI_COMMON_H */
diff --git a/backend/dvi/mdvi-lib/defaults.h b/backend/dvi/mdvi-lib/defaults.h
new file mode 100644
index 00000000..7e63f81e
--- /dev/null
+++ b/backend/dvi/mdvi-lib/defaults.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 _MDVI_DEFAULTS_H
+#define _MDVI_DEFAULTS_H 1
+
+/* resolution */
+#define MDVI_DPI 600
+#define MDVI_VDPI MDVI_DPI
+
+/* horizontal margins */
+#define MDVI_HMARGIN "1in"
+
+/* vertical margins */
+#define MDVI_VMARGIN "1in"
+
+/* rulers */
+#define MDVI_HRUNITS "1in"
+#define MDVI_VRUNITS "1in"
+
+/* paper */
+#define MDVI_PAPERNAME "letter"
+
+/* magnification */
+#define MDVI_MAGNIFICATION 1.0
+
+/* fallback font */
+#define MDVI_FALLBACK_FONT "cmr10"
+
+/* metafont mode */
+#define MDVI_MFMODE NULL
+
+/* default shrinking factor */
+#define MDVI_DEFAULT_SHRINKING -1 /* based on resolution */
+
+/* default pixel density */
+#define MDVI_DEFAULT_DENSITY 50
+
+/* default gamma correction */
+#define MDVI_DEFAULT_GAMMA 1.0
+
+/* default window geometry */
+#define MDVI_GEOMETRY NULL
+
+/* default orientation */
+#define MDVI_ORIENTATION "tblr"
+
+/* colors */
+#define MDVI_FOREGROUND "black"
+#define MDVI_BACKGROUND "white"
+
+/* flags */
+#define MDVI_DEFAULT_FLAGS MDVI_ANTIALIASED
+
+#define MDVI_DEFAULT_CONFIG "mdvi.conf"
+
+#endif /* _MDVI_DEAFAULTS_H */
diff --git a/backend/dvi/mdvi-lib/dviopcodes.h b/backend/dvi/mdvi-lib/dviopcodes.h
new file mode 100644
index 00000000..f99af05e
--- /dev/null
+++ b/backend/dvi/mdvi-lib/dviopcodes.h
@@ -0,0 +1,72 @@
+#ifndef _MDVI_DVIOPCODES_H
+#define _MDVI_DVIOPCODES_H 1
+
+#define DVI_SET_CHAR0 0
+#define DVI_SET_CHAR1 1
+#define DVI_SET_CHAR_MAX 127
+#define DVI_SET1 128
+#define DVI_SET2 129
+#define DVI_SET3 130
+#define DVI_SET4 131
+#define DVI_SET_RULE 132
+#define DVI_PUT1 133
+#define DVI_PUT2 134
+#define DVI_PUT3 135
+#define DVI_PUT4 136
+#define DVI_PUT_RULE 137
+#define DVI_NOOP 138
+#define DVI_BOP 139
+#define DVI_EOP 140
+#define DVI_PUSH 141
+#define DVI_POP 142
+#define DVI_RIGHT1 143
+#define DVI_RIGHT2 144
+#define DVI_RIGHT3 145
+#define DVI_RIGHT4 146
+#define DVI_W0 147
+#define DVI_W1 148
+#define DVI_W2 149
+#define DVI_W3 150
+#define DVI_W4 151
+#define DVI_X0 152
+#define DVI_X1 153
+#define DVI_X2 154
+#define DVI_X3 155
+#define DVI_X4 156
+#define DVI_DOWN1 157
+#define DVI_DOWN2 158
+#define DVI_DOWN3 159
+#define DVI_DOWN4 160
+#define DVI_Y0 161
+#define DVI_Y1 162
+#define DVI_Y2 163
+#define DVI_Y3 164
+#define DVI_Y4 165
+#define DVI_Z0 166
+#define DVI_Z1 167
+#define DVI_Z2 168
+#define DVI_Z3 169
+#define DVI_Z4 170
+#define DVI_FNT_NUM0 171
+#define DVI_FNT_NUM1 172
+#define DVI_FNT_NUM_MAX 234
+#define DVI_FNT1 235
+#define DVI_FNT2 236
+#define DVI_FNT3 237
+#define DVI_FNT4 238
+#define DVI_XXX1 239
+#define DVI_XXX2 240
+#define DVI_XXX3 241
+#define DVI_XXX4 242
+#define DVI_FNT_DEF1 243
+#define DVI_FNT_DEF2 244
+#define DVI_FNT_DEF3 245
+#define DVI_FNT_DEF4 246
+#define DVI_PRE 247
+#define DVI_POST 248
+#define DVI_POST_POST 249
+
+#define DVI_ID 2
+#define DVI_TRAILER 223
+
+#endif /* _MDVI_DVIOPCODES_H */
diff --git a/backend/dvi/mdvi-lib/dviread.c b/backend/dvi/mdvi-lib/dviread.c
new file mode 100644
index 00000000..97b7b844
--- /dev/null
+++ b/backend/dvi/mdvi-lib/dviread.c
@@ -0,0 +1,1585 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <math.h>
+#include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "mdvi.h"
+#include "private.h"
+#include "color.h"
+
+typedef int (*DviCommand) __PROTO((DviContext *, int));
+
+#define DVICMDDEF(x) static int x __PROTO((DviContext *, int))
+
+DVICMDDEF(set_char);
+DVICMDDEF(set_rule);
+DVICMDDEF(no_op);
+DVICMDDEF(push);
+DVICMDDEF(pop);
+DVICMDDEF(move_right);
+DVICMDDEF(move_down);
+DVICMDDEF(move_w);
+DVICMDDEF(move_x);
+DVICMDDEF(move_y);
+DVICMDDEF(move_z);
+DVICMDDEF(sel_font);
+DVICMDDEF(sel_fontn);
+DVICMDDEF(special);
+DVICMDDEF(def_font);
+DVICMDDEF(undefined);
+DVICMDDEF(unexpected);
+
+static const DviCommand dvi_commands[] = {
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char,
+ set_char, set_char, set_char, set_char, /* 0 - 127 */
+ set_char, set_char, set_char, set_char, /* 128 - 131 */
+ set_rule, /* 132 */
+ set_char, set_char, set_char, set_char, /* 133 - 136 */
+ set_rule, /* 137 */
+ no_op, /* 138 */
+ unexpected, /* 139 (BOP) */
+ unexpected, /* 140 (EOP) */
+ push, /* 141 */
+ pop, /* 142 */
+ move_right, move_right, move_right, move_right, /* 143 - 146 */
+ move_w, move_w, move_w, move_w, move_w, /* 147 - 151 */
+ move_x, move_x, move_x, move_x, move_x, /* 152 - 156 */
+ move_down, move_down, move_down, move_down, /* 157 - 160 */
+ move_y, move_y, move_y, move_y, move_y, /* 161 - 165 */
+ move_z, move_z, move_z, move_z, move_z, /* 166 - 170 */
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font,
+ sel_font, sel_font, sel_font, sel_font, /* 171 - 234 */
+ sel_fontn, sel_fontn, sel_fontn, sel_fontn, /* 235 - 238 */
+ special, special, special, special, /* 239 - 242 */
+ def_font, def_font, def_font, def_font, /* 243 - 246 */
+ unexpected, /* 247 (PRE) */
+ unexpected, /* 248 (POST) */
+ unexpected, /* 249 (POST_POST) */
+ undefined, undefined, undefined,
+ undefined, undefined, undefined /* 250 - 255 */
+};
+
+#define DVI_BUFLEN 4096
+
+static int mdvi_run_macro(DviContext *dvi, Uchar *macro, size_t len);
+
+static void dummy_draw_glyph(DviContext *dvi, DviFontChar *ch, int x, int y)
+{
+}
+
+static void dummy_draw_rule(DviContext *dvi, int x, int y, Uint w, Uint h, int f)
+{
+}
+
+static int dummy_alloc_colors(void *a, Ulong *b, int c, Ulong d, Ulong e, double f, int g)
+{
+ return -1;
+}
+
+static void *dummy_create_image(void *a, Uint b, Uint c, Uint d)
+{
+ return NULL;
+}
+
+static void dummy_free_image(void *a)
+{
+}
+
+static void dummy_dev_destroy(void *a)
+{
+}
+
+static void dummy_dev_putpixel(void *a, int x, int y, Ulong c)
+{
+}
+
+static void dummy_dev_refresh(DviContext *a, void *b)
+{
+}
+
+static void dummy_dev_set_color(void *a, Ulong b, Ulong c)
+{
+}
+
+/* functions to report errors */
+static void dvierr(DviContext *dvi, const char *format, ...)
+{
+ va_list ap;
+
+ va_start(ap, format);
+ fprintf(stderr, "%s[%d]: Error: ",
+ dvi->filename, dvi->currpage);
+ vfprintf(stderr, format, ap);
+ va_end(ap);
+}
+
+static void dviwarn(DviContext *dvi, const char *format, ...)
+{
+ va_list ap;
+
+ fprintf(stderr, "%s[%d]: Warning: ",
+ dvi->filename, dvi->currpage);
+ va_start(ap, format);
+ vfprintf(stderr, format, ap);
+ va_end(ap);
+}
+
+#define NEEDBYTES(d,n) \
+ ((d)->buffer.pos + (n) > (d)->buffer.length)
+
+static int get_bytes(DviContext *dvi, size_t n)
+{
+ /*
+ * caller wants to read `n' bytes from dvi->buffer + dvi->pos.
+ * Make sure there is enough data to satisfy the request
+ */
+ if(NEEDBYTES(dvi, n)) {
+ size_t required;
+ int newlen;
+
+ if(dvi->buffer.frozen || dvi->in == NULL || feof(dvi->in)) {
+ /* this is EOF */
+ dviwarn(dvi, _("unexpected EOF\n"));
+ return -1;
+ }
+ /* get more data */
+ if(dvi->buffer.data == NULL) {
+ /* first allocation */
+ dvi->buffer.size = Max(DVI_BUFLEN, n);
+ dvi->buffer.data = (Uchar *)mdvi_malloc(dvi->buffer.size);
+ dvi->buffer.length = 0;
+ dvi->buffer.frozen = 0;
+ } else if(dvi->buffer.pos < dvi->buffer.length) {
+ /* move whatever we want to keep */
+ dvi->buffer.length -= dvi->buffer.pos;
+ memmove(dvi->buffer.data,
+ dvi->buffer.data + dvi->buffer.pos,
+ dvi->buffer.length);
+ } else {
+ /* we can discard all the data in this buffer */
+ dvi->buffer.length = 0;
+ }
+
+ required = n - dvi->buffer.length;
+ if(required > dvi->buffer.size - dvi->buffer.length) {
+ /* need to allocate more memory */
+ dvi->buffer.size = dvi->buffer.length + required + 128;
+ dvi->buffer.data = (Uchar *)xresize(dvi->buffer.data,
+ char, dvi->buffer.size);
+ }
+ /* now read into the buffer */
+ newlen = fread(dvi->buffer.data + dvi->buffer.length,
+ 1, dvi->buffer.size - dvi->buffer.length, dvi->in);
+ if(newlen == -1) {
+ mdvi_error("%s: %s\n", dvi->filename, strerror(errno));
+ return -1;
+ }
+ dvi->buffer.length += newlen;
+ dvi->buffer.pos = 0;
+ }
+ return 0;
+}
+
+/* only relative forward seeks are supported by this function */
+static int dskip(DviContext *dvi, long offset)
+{
+ ASSERT(offset > 0);
+
+ if(NEEDBYTES(dvi, offset) && get_bytes(dvi, offset) == -1)
+ return -1;
+ dvi->buffer.pos += offset;
+ return 0;
+}
+
+/* DVI I/O functions (note: here `n' must be <= 4) */
+static long dsgetn(DviContext *dvi, size_t n)
+{
+ long val;
+
+ if(NEEDBYTES(dvi, n) && get_bytes(dvi, n) == -1)
+ return -1;
+ val = msgetn(dvi->buffer.data + dvi->buffer.pos, n);
+ dvi->buffer.pos += n;
+ return val;
+}
+
+static int dread(DviContext *dvi, char *buffer, size_t len)
+{
+ if(NEEDBYTES(dvi, len) && get_bytes(dvi, len) == -1)
+ return -1;
+ memcpy(buffer, dvi->buffer.data + dvi->buffer.pos, len);
+ dvi->buffer.pos += len;
+ return 0;
+}
+
+static long dugetn(DviContext *dvi, size_t n)
+{
+ long val;
+
+ if(NEEDBYTES(dvi, n) && get_bytes(dvi, n) == -1)
+ return -1;
+ val = mugetn(dvi->buffer.data + dvi->buffer.pos, n);
+ dvi->buffer.pos += n;
+ return val;
+}
+
+static long dtell(DviContext *dvi)
+{
+ return dvi->depth ?
+ dvi->buffer.pos :
+ ftell(dvi->in) - dvi->buffer.length + dvi->buffer.pos;
+}
+
+static void dreset(DviContext *dvi)
+{
+ if(!dvi->buffer.frozen && dvi->buffer.data)
+ mdvi_free(dvi->buffer.data);
+ dvi->buffer.data = NULL;
+ dvi->buffer.size = 0;
+ dvi->buffer.length = 0;
+ dvi->buffer.pos = 0;
+}
+
+#define dsget1(d) dsgetn((d), 1)
+#define dsget2(d) dsgetn((d), 2)
+#define dsget3(d) dsgetn((d), 3)
+#define dsget4(d) dsgetn((d), 4)
+#define duget1(d) dugetn((d), 1)
+#define duget2(d) dugetn((d), 2)
+#define duget3(d) dugetn((d), 3)
+#define duget4(d) dugetn((d), 4)
+
+#ifndef NODEBUG
+static void dviprint(DviContext *dvi, const char *command, int sub, const char *fmt, ...)
+{
+ int i;
+ va_list ap;
+
+ printf("%s: ", dvi->filename);
+ for(i = 0; i < dvi->depth; i++)
+ printf(" ");
+ printf("%4lu: %s", dtell(dvi), command);
+ if(sub >= 0) printf("%d", sub);
+ if(*fmt) printf(": ");
+ va_start(ap, fmt);
+ vprintf(fmt, ap);
+ va_end(ap);
+}
+#define SHOWCMD(x) \
+ if(_mdvi_debug_mask & DBG_OPCODE) do { dviprint x; } while(0)
+#else
+#define SHOWCMD(x) do { } while(0)
+#endif
+
+int mdvi_find_tex_page(DviContext *dvi, int tex_page)
+{
+ int i;
+
+ for(i = 0; i < dvi->npages; i++)
+ if(dvi->pagemap[i][1] == tex_page)
+ return i;
+ return -1;
+}
+
+/* page sorting functions */
+static int sort_up(const void *p1, const void *p2)
+{
+ return ((long *)p1)[1] - ((long *)p2)[1];
+}
+static int sort_down(const void *p1, const void *p2)
+{
+ return ((long *)p2)[1] - ((long *)p1)[1];
+}
+static int sort_random(const void *p1, const void *p2)
+{
+ return (rand() % 1) ? -1 : 1;
+}
+static int sort_dvi_up(const void *p1, const void *p2)
+{
+ return ((long *)p1)[0] - ((long *)p2)[0];
+}
+static int sort_dvi_down(const void *p1, const void *p2)
+{
+ return ((long *)p1)[0] - ((long *)p2)[0];
+}
+
+void mdvi_sort_pages(DviContext *dvi, DviPageSort type)
+{
+ int (*sortfunc) __PROTO((const void *, const void *));
+
+ switch(type) {
+ case MDVI_PAGE_SORT_UP:
+ sortfunc = sort_up;
+ break;
+ case MDVI_PAGE_SORT_DOWN:
+ sortfunc = sort_down;
+ break;
+ case MDVI_PAGE_SORT_RANDOM:
+ sortfunc = sort_random;
+ break;
+ case MDVI_PAGE_SORT_DVI_UP:
+ sortfunc = sort_dvi_up;
+ break;
+ case MDVI_PAGE_SORT_DVI_DOWN:
+ sortfunc = sort_dvi_down;
+ break;
+ case MDVI_PAGE_SORT_NONE:
+ default:
+ sortfunc = NULL;
+ break;
+ }
+
+ if(sortfunc)
+ qsort(dvi->pagemap, dvi->npages, sizeof(PageNum), sortfunc);
+}
+
+static DviFontRef *define_font(DviContext *dvi, int op)
+{
+ Int32 arg;
+ Int32 scale;
+ Int32 dsize;
+ Int32 checksum;
+ int hdpi;
+ int vdpi;
+ int n;
+ char *name;
+ DviFontRef *ref;
+
+ arg = dugetn(dvi, op - DVI_FNT_DEF1 + 1);
+ checksum = duget4(dvi);
+ scale = duget4(dvi);
+ dsize = duget4(dvi);
+ hdpi = FROUND(dvi->params.mag * dvi->params.dpi * scale / dsize);
+ vdpi = FROUND(dvi->params.mag * dvi->params.vdpi * scale / dsize);
+ n = duget1(dvi) + duget1(dvi);
+ name = mdvi_malloc(n + 1);
+ dread(dvi, name, n);
+ name[n] = 0;
+ DEBUG((DBG_FONTS, "requesting font %d = `%s' at %.1fpt (%dx%d dpi)\n",
+ arg, name, (double)scale / (dvi->params.tfm_conv * 0x100000),
+ hdpi, vdpi));
+ ref = font_reference(&dvi->params, arg, name, checksum, hdpi, vdpi, scale);
+ if(ref == NULL) {
+ mdvi_error(_("could not load font `%s'\n"), name);
+ mdvi_free(name);
+ return NULL;
+ }
+ mdvi_free(name);
+ return ref;
+}
+
+static char *opendvi(const char *name)
+{
+ int len;
+ char *file;
+
+ len = strlen(name);
+ /* if file ends with .dvi and it exists, that's it */
+ if(len >= 4 && STREQ(name+len-4, ".dvi")) {
+ DEBUG((DBG_DVI|DBG_FILES, "opendvi: Trying `%s'\n", name));
+ if(access(name, R_OK) == 0)
+ return mdvi_strdup(name);
+ }
+
+ /* try appending .dvi */
+ file = mdvi_malloc(len + 5);
+ strcpy(file, name);
+ strcpy(file+len, ".dvi");
+ DEBUG((DBG_DVI|DBG_FILES, "opendvi: Trying `%s'\n", file));
+ if(access(file, R_OK) == 0)
+ return file;
+ /* try the given name */
+ file[len] = 0;
+ DEBUG((DBG_DVI|DBG_FILES, "opendvi: Trying `%s'\n", file));
+ if(access(file, R_OK) == 0)
+ return file;
+ mdvi_free(file);
+ return NULL;
+}
+
+int mdvi_reload(DviContext *dvi, DviParams *np)
+{
+ DviContext *newdvi;
+ DviParams *pars;
+
+ /* close our file */
+ if(dvi->in) {
+ fclose(dvi->in);
+ dvi->in = NULL;
+ }
+
+ pars = np ? np : &dvi->params;
+ DEBUG((DBG_DVI, "%s: reloading\n", dvi->filename));
+
+ /* load it again */
+ newdvi = mdvi_init_context(pars, dvi->pagesel, dvi->filename);
+ if(newdvi == NULL) {
+ mdvi_warning(_("could not reload `%s'\n"), dvi->filename);
+ return -1;
+ }
+
+ /* drop all our font references */
+ font_drop_chain(dvi->fonts);
+ /* destroy our font map */
+ if(dvi->fontmap)
+ mdvi_free(dvi->fontmap);
+ dvi->currfont = NULL;
+
+ /* and use the ones we just loaded */
+ dvi->fonts = newdvi->fonts;
+ dvi->fontmap = newdvi->fontmap;
+ dvi->nfonts = newdvi->nfonts;
+
+ /* copy the new information */
+ dvi->params = newdvi->params;
+ dvi->num = newdvi->num;
+ dvi->den = newdvi->den;
+ dvi->dvimag = newdvi->dvimag;
+ dvi->dviconv = newdvi->dviconv;
+ dvi->dvivconv = newdvi->dvivconv;
+ dvi->modtime = newdvi->modtime;
+
+ if(dvi->fileid) mdvi_free(dvi->fileid);
+ dvi->fileid = newdvi->fileid;
+
+ dvi->dvi_page_w = newdvi->dvi_page_w;
+ dvi->dvi_page_h = newdvi->dvi_page_h;
+
+ mdvi_free(dvi->pagemap);
+ dvi->pagemap = newdvi->pagemap;
+ dvi->npages = newdvi->npages;
+ if(dvi->currpage > dvi->npages-1)
+ dvi->currpage = 0;
+
+ mdvi_free(dvi->stack);
+ dvi->stack = newdvi->stack;
+ dvi->stacksize = newdvi->stacksize;
+
+ /* remove fonts that are not being used anymore */
+ font_free_unused(&dvi->device);
+
+ mdvi_free(newdvi->filename);
+ mdvi_free(newdvi);
+
+ DEBUG((DBG_DVI, "%s: reload successful\n", dvi->filename));
+ if(dvi->device.refresh)
+ dvi->device.refresh(dvi, dvi->device.device_data);
+
+ return 0;
+}
+
+/* function to change parameters ia DVI context
+ * The DVI context is modified ONLY if this function is successful */
+int mdvi_configure(DviContext *dvi, DviParamCode option, ...)
+{
+ va_list ap;
+ int reset_all;
+ int reset_font;
+ DviParams np;
+
+ va_start(ap, option);
+
+ reset_font = 0;
+ reset_all = 0;
+ np = dvi->params; /* structure copy */
+ while(option != MDVI_PARAM_LAST) {
+ switch(option) {
+ case MDVI_SET_DPI:
+ np.dpi = np.vdpi = va_arg(ap, Uint);
+ reset_all = 1;
+ break;
+ case MDVI_SET_XDPI:
+ np.dpi = va_arg(ap, Uint);
+ reset_all = 1;
+ break;
+ case MDVI_SET_YDPI:
+ np.vdpi = va_arg(ap, Uint);
+ break;
+ case MDVI_SET_SHRINK:
+ np.hshrink = np.vshrink = va_arg(ap, Uint);
+ reset_font = MDVI_FONTSEL_GREY|MDVI_FONTSEL_BITMAP;
+ break;
+ case MDVI_SET_XSHRINK:
+ np.hshrink = va_arg(ap, Uint);
+ reset_font = MDVI_FONTSEL_GREY|MDVI_FONTSEL_BITMAP;
+ break;
+ case MDVI_SET_YSHRINK:
+ np.vshrink = va_arg(ap, Uint);
+ reset_font = MDVI_FONTSEL_GREY|MDVI_FONTSEL_BITMAP;
+ break;
+ case MDVI_SET_ORIENTATION:
+ np.orientation = va_arg(ap, DviOrientation);
+ reset_font = MDVI_FONTSEL_GLYPH;
+ break;
+ case MDVI_SET_GAMMA:
+ np.gamma = va_arg(ap, double);
+ reset_font = MDVI_FONTSEL_GREY;
+ break;
+ case MDVI_SET_DENSITY:
+ np.density = va_arg(ap, Uint);
+ reset_font = MDVI_FONTSEL_BITMAP;
+ break;
+ case MDVI_SET_MAGNIFICATION:
+ np.mag = va_arg(ap, double);
+ reset_all = 1;
+ break;
+ case MDVI_SET_DRIFT:
+ np.hdrift = np.vdrift = va_arg(ap, int);
+ break;
+ case MDVI_SET_HDRIFT:
+ np.hdrift = va_arg(ap, int);
+ break;
+ case MDVI_SET_VDRIFT:
+ np.vdrift = va_arg(ap, int);
+ break;
+ case MDVI_SET_FOREGROUND:
+ np.fg = va_arg(ap, Ulong);
+ reset_font = MDVI_FONTSEL_GREY;
+ break;
+ case MDVI_SET_BACKGROUND:
+ np.bg = va_arg(ap, Ulong);
+ reset_font = MDVI_FONTSEL_GREY;
+ break;
+ default:
+ break;
+ }
+ option = va_arg(ap, DviParamCode);
+ }
+ va_end(ap);
+
+ /* check that all values make sense */
+ if(np.dpi <= 0 || np.vdpi <= 0)
+ return -1;
+ if(np.mag <= 0.0)
+ return -1;
+ if(np.density < 0)
+ return -1;
+ if(np.hshrink < 1 || np.vshrink < 1)
+ return -1;
+ if(np.hdrift < 0 || np.vdrift < 0)
+ return -1;
+ if(np.fg == np.bg)
+ return -1;
+
+ /*
+ * If the dpi or the magnification change, we basically have to reload
+ * the DVI file again from scratch.
+ */
+
+ if(reset_all)
+ return (mdvi_reload(dvi, &np) == 0);
+
+ if(np.hshrink != dvi->params.hshrink) {
+ np.conv = dvi->dviconv;
+ if(np.hshrink)
+ np.conv /= np.hshrink;
+ }
+ if(np.vshrink != dvi->params.vshrink) {
+ np.vconv = dvi->dvivconv;
+ if(np.vshrink)
+ np.vconv /= np.vshrink;
+ }
+
+ if(reset_font) {
+ font_reset_chain_glyphs(&dvi->device, dvi->fonts, reset_font);
+ }
+ dvi->params = np;
+ if((reset_font & MDVI_FONTSEL_GLYPH) && dvi->device.refresh) {
+ dvi->device.refresh(dvi, dvi->device.device_data);
+ return 0;
+ }
+
+ return 1;
+}
+/*
+ * Read the initial data from the DVI file. If something is wrong with the
+ * file, we just spit out an error message and refuse to load the file,
+ * without giving any details. This makes sense because DVI files are ok
+ * 99.99% of the time, and dvitype(1) can be used to check the other 0.01%.
+ */
+DviContext *mdvi_init_context(DviParams *par, DviPageSpec *spec, const char *file)
+{
+ FILE *p;
+ Int32 arg;
+ int op;
+ long offset;
+ int n;
+ DviContext *dvi;
+ char *filename;
+ int pagecount;
+
+ /*
+ * 1. Open the file and initialize the DVI context
+ */
+
+ filename = opendvi(file);
+ if(filename == NULL) {
+ perror(file);
+ return NULL;
+ }
+ p = fopen(filename, "rb");
+ if(p == NULL) {
+ perror(file);
+ mdvi_free(filename);
+ return NULL;
+ }
+ dvi = xalloc(DviContext);
+ memzero(dvi, sizeof(DviContext));
+ dvi->pagemap = NULL;
+ dvi->filename = filename;
+ dvi->stack = NULL;
+ dvi->modtime = get_mtime(fileno(p));
+ dvi->buffer.data = NULL;
+ dvi->pagesel = spec;
+ dvi->in = p; /* now we can use the dget*() functions */
+
+ /*
+ * 2. Read the preamble, extract scaling information, and
+ * setup the DVI parameters.
+ */
+
+ if(fuget1(p) != DVI_PRE)
+ goto bad_dvi;
+ if((arg = fuget1(p)) != DVI_ID) {
+ mdvi_error(_("%s: unsupported DVI format (version %u)\n"),
+ file, arg);
+ goto error; /* jump to the end of this routine,
+ * where we handle errors */
+ }
+ /* get dimensions */
+ dvi->num = fuget4(p);
+ dvi->den = fuget4(p);
+ dvi->dvimag = fuget4(p);
+
+ /* check that these numbers make sense */
+ if(!dvi->num || !dvi->den || !dvi->dvimag)
+ goto bad_dvi;
+
+ dvi->params.mag =
+ (par->mag > 0 ? par->mag : (double)dvi->dvimag / 1000.0);
+ dvi->params.hdrift = par->hdrift;
+ dvi->params.vdrift = par->vdrift;
+ dvi->params.dpi = par->dpi ? par->dpi : MDVI_DPI;
+ dvi->params.vdpi = par->vdpi ? par->vdpi : par->dpi;
+ dvi->params.hshrink = par->hshrink;
+ dvi->params.vshrink = par->vshrink;
+ dvi->params.density = par->density;
+ dvi->params.gamma = par->gamma;
+ dvi->params.conv = (double)dvi->num / dvi->den;
+ dvi->params.conv *= (dvi->params.dpi / 254000.0) * dvi->params.mag;
+ dvi->params.vconv = (double)dvi->num / dvi->den;
+ dvi->params.vconv *= (dvi->params.vdpi / 254000.0) * dvi->params.mag;
+ dvi->params.tfm_conv = (25400000.0 / dvi->num) *
+ ((double)dvi->den / 473628672) / 16.0;
+ dvi->params.flags = par->flags;
+ dvi->params.orientation = par->orientation;
+ dvi->params.fg = par->fg;
+ dvi->params.bg = par->bg;
+
+ /* initialize colors */
+ dvi->curr_fg = par->fg;
+ dvi->curr_bg = par->bg;
+ dvi->color_stack = NULL;
+ dvi->color_top = 0;
+ dvi->color_size = 0;
+
+ /* pixel conversion factors */
+ dvi->dviconv = dvi->params.conv;
+ dvi->dvivconv = dvi->params.vconv;
+ if(dvi->params.hshrink)
+ dvi->params.conv /= dvi->params.hshrink;
+ if(dvi->params.vshrink)
+ dvi->params.vconv /= dvi->params.vshrink;
+
+ /* get the comment from the preamble */
+ n = fuget1(p);
+ dvi->fileid = mdvi_malloc(n + 1);
+ fread(dvi->fileid, 1, n, p);
+ dvi->fileid[n] = 0;
+ DEBUG((DBG_DVI, "%s: %s\n", filename, dvi->fileid));
+
+ /*
+ * 3. Read postamble, extract page information (number of
+ * pages, dimensions) and stack depth.
+ */
+
+ /* jump to the end of the file */
+ if(fseek(p, (long)-1, SEEK_END) == -1)
+ goto error;
+ for(n = 0; (op = fuget1(p)) == DVI_TRAILER; n++)
+ if(fseek(p, (long)-2, SEEK_CUR) < 0)
+ break;
+ if(op != arg || n < 4)
+ goto bad_dvi;
+ /* get the pointer to postamble */
+ fseek(p, (long)-5, SEEK_CUR);
+ arg = fuget4(p);
+ /* jump to it */
+ fseek(p, (long)arg, SEEK_SET);
+ if(fuget1(p) != DVI_POST)
+ goto bad_dvi;
+ offset = fuget4(p);
+ if(dvi->num != fuget4(p) || dvi->den != fuget4(p) ||
+ dvi->dvimag != fuget4(p))
+ goto bad_dvi;
+ dvi->dvi_page_h = fuget4(p);
+ dvi->dvi_page_w = fuget4(p);
+ dvi->stacksize = fuget2(p);
+ dvi->npages = fuget2(p);
+ DEBUG((DBG_DVI, "%s: from postamble: stack depth %d, %d page%s\n",
+ filename, dvi->stacksize, dvi->npages, dvi->npages > 1 ? "s" : ""));
+
+ /*
+ * 4. Process font definitions.
+ */
+
+ /* process font definitions */
+ dvi->nfonts = 0;
+ dvi->fontmap = NULL;
+ /*
+ * CAREFUL: here we need to use the dvi->buffer, but it might leave the
+ * the file cursor in the wrong position after reading fonts (because of
+ * buffering). It's ok, though, because after the font definitions we read
+ * the page offsets, and we fseek() to the relevant part of the file with
+ * SEEK_SET. Nothing is read after the page offsets.
+ */
+ while((op = duget1(dvi)) != DVI_POST_POST) {
+ DviFontRef *ref;
+
+ if(op == DVI_NOOP)
+ continue;
+ else if(op < DVI_FNT_DEF1 || op > DVI_FNT_DEF4)
+ goto error;
+ ref = define_font(dvi, op);
+ if(ref == NULL)
+ goto error;
+ ref->next = dvi->fonts;
+ dvi->fonts = ref;
+ dvi->nfonts++;
+ }
+ /* we don't need the buffer anymore */
+ dreset(dvi);
+
+ if(op != DVI_POST_POST)
+ goto bad_dvi;
+ font_finish_definitions(dvi);
+ DEBUG((DBG_DVI, "%s: %d font%s required by this job\n",
+ filename, dvi->nfonts, dvi->nfonts > 1 ? "s" : ""));
+ dvi->findref = font_find_mapped;
+
+ /*
+ * 5. Build the page map.
+ */
+
+ dvi->pagemap = xnalloc(PageNum, dvi->npages);
+ memzero(dvi->pagemap, sizeof(PageNum) * dvi->npages);
+
+ n = dvi->npages - 1;
+ pagecount = n;
+ while(offset != -1) {
+ int i;
+ PageNum page;
+
+ fseek(p, offset, SEEK_SET);
+ op = fuget1(p);
+ if(op != DVI_BOP || n < 0)
+ goto bad_dvi;
+ for(i = 1; i <= 10; i++)
+ page[i] = fsget4(p);
+ page[0] = offset;
+ offset = fsget4(p);
+ /* check if the page is selected */
+ if(spec && mdvi_page_selected(spec, page, n) == 0) {
+ DEBUG((DBG_DVI, "Page %d (%ld.%ld.%ld.%ld.%ld.%ld.%ld.%ld.%ld.%ld) ignored by request\n",
+ n, page[1], page[2], page[3], page[4], page[5],
+ page[6], page[7], page[8], page[9], page[10]));
+ } else {
+ memcpy(&dvi->pagemap[pagecount], page, sizeof(PageNum));
+ pagecount--;
+ }
+ n--;
+ }
+ pagecount++;
+ if(pagecount >= dvi->npages) {
+ mdvi_error(_("no pages selected\n"));
+ goto error;
+ }
+ if(pagecount) {
+ DEBUG((DBG_DVI, "%d of %d pages selected\n",
+ dvi->npages - pagecount, dvi->npages));
+ dvi->npages -= pagecount;
+ memmove(dvi->pagemap, &dvi->pagemap[pagecount],
+ dvi->npages * sizeof(PageNum));
+ }
+
+ /*
+ * 6. Setup stack, initialize device functions
+ */
+
+ dvi->curr_layer = 0;
+ dvi->stack = xnalloc(DviState, dvi->stacksize + 8);
+
+ dvi->device.draw_glyph = dummy_draw_glyph;
+ dvi->device.draw_rule = dummy_draw_rule;
+ dvi->device.alloc_colors = dummy_alloc_colors;
+ dvi->device.create_image = dummy_create_image;
+ dvi->device.free_image = dummy_free_image;
+ dvi->device.dev_destroy = dummy_dev_destroy;
+ dvi->device.put_pixel = dummy_dev_putpixel;
+ dvi->device.refresh = dummy_dev_refresh;
+ dvi->device.set_color = dummy_dev_set_color;
+ dvi->device.device_data = NULL;
+
+ DEBUG((DBG_DVI, "%s read successfully\n", filename));
+ return dvi;
+
+bad_dvi:
+ mdvi_error(_("%s: File corrupted, or not a DVI file\n"), file);
+error:
+ /* if we came from the font definitions, this will be non-trivial */
+ dreset(dvi);
+ mdvi_destroy_context(dvi);
+ return NULL;
+}
+
+void mdvi_destroy_context(DviContext *dvi)
+{
+ if(dvi->device.dev_destroy)
+ dvi->device.dev_destroy(dvi->device.device_data);
+ /* release all fonts */
+ if(dvi->fonts) {
+ font_drop_chain(dvi->fonts);
+ font_free_unused(&dvi->device);
+ }
+ if(dvi->fontmap)
+ mdvi_free(dvi->fontmap);
+ if(dvi->filename)
+ mdvi_free(dvi->filename);
+ if(dvi->stack)
+ mdvi_free(dvi->stack);
+ if(dvi->pagemap)
+ mdvi_free(dvi->pagemap);
+ if(dvi->fileid)
+ mdvi_free(dvi->fileid);
+ if(dvi->in)
+ fclose(dvi->in);
+ if(dvi->buffer.data && !dvi->buffer.frozen)
+ mdvi_free(dvi->buffer.data);
+ if(dvi->color_stack)
+ mdvi_free(dvi->color_stack);
+
+ mdvi_free(dvi);
+}
+
+void mdvi_setpage(DviContext *dvi, int pageno)
+{
+ if(pageno < 0)
+ pageno = 0;
+ if(pageno > dvi->npages-1)
+ pageno = dvi->npages - 1;
+ dvi->currpage = pageno;
+}
+
+static int mdvi_run_macro(DviContext *dvi, Uchar *macro, size_t len)
+{
+ DviFontRef *curr, *fonts;
+ DviBuffer saved_buffer;
+ FILE *saved_file;
+ int opcode;
+ int oldtop;
+
+ dvi->depth++;
+ push(dvi, DVI_PUSH);
+ dvi->pos.w = 0;
+ dvi->pos.x = 0;
+ dvi->pos.y = 0;
+ dvi->pos.z = 0;
+
+ /* save our state */
+ curr = dvi->currfont;
+ fonts = dvi->fonts;
+ saved_buffer = dvi->buffer;
+ saved_file = dvi->in;
+ dvi->currfont = curr->ref->subfonts;
+ dvi->fonts = curr->ref->subfonts;
+ dvi->buffer.data = macro;
+ dvi->buffer.pos = 0;
+ dvi->buffer.length = len;
+ dvi->buffer.frozen = 1;
+ dvi->in = NULL;
+ oldtop = dvi->stacktop;
+
+ /* execute commands */
+ while((opcode = duget1(dvi)) != DVI_EOP) {
+ if(dvi_commands[opcode](dvi, opcode) < 0)
+ break;
+ }
+ if(opcode != DVI_EOP)
+ dviwarn(dvi, _("%s: vf macro had errors\n"),
+ curr->ref->fontname);
+ if(dvi->stacktop != oldtop)
+ dviwarn(dvi, _("%s: stack not empty after vf macro\n"),
+ curr->ref->fontname);
+
+ /* restore things */
+ pop(dvi, DVI_POP);
+ dvi->currfont = curr;
+ dvi->fonts = fonts;
+ dvi->buffer = saved_buffer;
+ dvi->in = saved_file;
+ dvi->depth--;
+
+ return (opcode != DVI_EOP ? -1 : 0);
+}
+
+int mdvi_dopage(DviContext *dvi, int pageno)
+{
+ int op;
+ int ppi;
+ int reloaded = 0;
+
+again:
+ if(dvi->in == NULL) {
+ /* try reopening the file */
+ dvi->in = fopen(dvi->filename, "rb");
+ if(dvi->in == NULL) {
+ mdvi_warning(_("%s: could not reopen file (%s)\n"),
+ dvi->filename,
+ strerror(errno));
+ return -1;
+ }
+ DEBUG((DBG_FILES, "reopen(%s) -> Ok\n", dvi->filename));
+ }
+
+ /* check if we need to reload the file */
+ if(!reloaded && get_mtime(fileno(dvi->in)) > dvi->modtime) {
+ mdvi_reload(dvi, &dvi->params);
+ /* we have to reopen the file, again */
+ reloaded = 1;
+ goto again;
+ }
+
+ if(pageno < 0 || pageno > dvi->npages-1) {
+ mdvi_error(_("%s: page %d out of range\n"),
+ dvi->filename, pageno);
+ return -1;
+ }
+
+ fseek(dvi->in, (long)dvi->pagemap[pageno][0], SEEK_SET);
+ if((op = fuget1(dvi->in)) != DVI_BOP) {
+ mdvi_error(_("%s: bad offset at page %d\n"),
+ dvi->filename, pageno+1);
+ return -1;
+ }
+
+ /* skip bop */
+ fseek(dvi->in, (long)44, SEEK_CUR);
+
+ /* reset state */
+ dvi->currfont = NULL;
+ memzero(&dvi->pos, sizeof(DviState));
+ dvi->stacktop = 0;
+ dvi->currpage = pageno;
+ dvi->curr_layer = 0;
+
+ if(dvi->buffer.data && !dvi->buffer.frozen)
+ mdvi_free(dvi->buffer.data);
+
+ /* reset our buffer */
+ dvi->buffer.data = NULL;
+ dvi->buffer.length = 0;
+ dvi->buffer.pos = 0;
+ dvi->buffer.frozen = 0;
+
+#if 0 /* make colors survive page breaks */
+ /* reset color stack */
+ mdvi_reset_color(dvi);
+#endif
+
+ /* set max horizontal and vertical drift (from dvips) */
+ if(dvi->params.hdrift < 0) {
+ ppi = dvi->params.dpi / dvi->params.hshrink; /* shrunk pixels per inch */
+ if(ppi < 600)
+ dvi->params.hdrift = ppi / 100;
+ else if(ppi < 1200)
+ dvi->params.hdrift = ppi / 200;
+ else
+ dvi->params.hdrift = ppi / 400;
+ }
+ if(dvi->params.vdrift < 0) {
+ ppi = dvi->params.vdpi / dvi->params.vshrink; /* shrunk pixels per inch */
+ if(ppi < 600)
+ dvi->params.vdrift = ppi / 100;
+ else if(ppi < 1200)
+ dvi->params.vdrift = ppi / 200;
+ else
+ dvi->params.vdrift = ppi / 400;
+ }
+
+ dvi->params.thinsp = FROUND(0.025 * dvi->params.dpi / dvi->params.conv);
+ dvi->params.vsmallsp = FROUND(0.025 * dvi->params.vdpi / dvi->params.vconv);
+
+ /* execute all the commands in the page */
+ while((op = duget1(dvi)) != DVI_EOP) {
+ if(dvi_commands[op](dvi, op) < 0)
+ break;
+ }
+
+ fflush(stdout);
+ fflush(stderr);
+ if(op != DVI_EOP)
+ return -1;
+ if(dvi->stacktop)
+ dviwarn(dvi, _("stack not empty at end of page\n"));
+ return 0;
+}
+
+static int inline move_vertical(DviContext *dvi, int amount)
+{
+ int rvv;
+
+ dvi->pos.v += amount;
+ rvv = vpixel_round(dvi, dvi->pos.v);
+ if(!dvi->params.vdrift)
+ return rvv;
+ if(amount > dvi->params.vsmallsp || amount <= -dvi->params.vsmallsp)
+ return rvv;
+ else {
+ int newvv;
+
+ newvv = dvi->pos.vv + vpixel_round(dvi, amount);
+ if(rvv - newvv > dvi->params.vdrift)
+ return rvv - dvi->params.vdrift;
+ else if(newvv - rvv > dvi->params.vdrift)
+ return rvv + dvi->params.vdrift;
+ else
+ return newvv;
+ }
+}
+
+static int inline move_horizontal(DviContext *dvi, int amount)
+{
+ int rhh;
+
+ dvi->pos.h += amount;
+ rhh = pixel_round(dvi, dvi->pos.h);
+ if(!dvi->params.hdrift)
+ return rhh;
+ else if(amount > dvi->params.thinsp || amount <= -6 * dvi->params.thinsp)
+ return rhh;
+ else {
+ int newhh;
+
+ newhh = dvi->pos.hh + pixel_round(dvi, amount);
+ if(rhh - newhh > dvi->params.hdrift)
+ return rhh - dvi->params.hdrift;
+ else if(newhh - rhh > dvi->params.hdrift)
+ return rhh + dvi->params.hdrift;
+ else
+ return newhh;
+ }
+}
+
+static void inline fix_after_horizontal(DviContext *dvi)
+{
+ int rhh;
+
+ rhh = pixel_round(dvi, dvi->pos.h);
+ if(!dvi->params.hdrift)
+ dvi->pos.hh = rhh;
+ else if(rhh - dvi->pos.hh > dvi->params.hdrift)
+ dvi->pos.hh = rhh - dvi->params.hdrift;
+ else if(dvi->pos.hh - rhh > dvi->params.hdrift)
+ dvi->pos.hh = rhh + dvi->params.hdrift;
+}
+
+/* commands */
+
+#define DBGSUM(a,b,c) \
+ (a), (b) > 0 ? '+' : '-', \
+ (b) > 0 ? (b) : -(b), (c)
+
+/*
+ * Draw rules with some sort of antialias support. Usefult for high-rate
+ * scale factors.
+ */
+
+static void draw_shrink_rule (DviContext *dvi, int x, int y, Uint w, Uint h, int f)
+{
+ int hs, vs, npixels;
+ Ulong fg, bg;
+ Ulong *pixels;
+
+ hs = dvi->params.hshrink;
+ vs = dvi->params.vshrink;
+ fg = dvi->curr_fg;
+ bg = dvi->curr_bg;
+
+ if (MDVI_ENABLED(dvi, MDVI_PARAM_ANTIALIASED)) {
+ npixels = vs * hs + 1;
+ pixels = get_color_table(&dvi->device, npixels, bg, fg,
+ dvi->params.gamma, dvi->params.density);
+
+ if (pixels) {
+ int color;
+
+ /* Lines with width 1 should be perfectly visible
+ * in shrink about 15. That is the reason of constant
+ */
+
+ color = (pow (vs / h * hs, 2) + pow (hs / w * vs, 2)) / 225;
+ if (color < npixels) {
+ fg = pixels[color];
+ } else {
+ fg = pixels[npixels - 1];
+ }
+ }
+ }
+
+ mdvi_push_color (dvi, fg, bg);
+ dvi->device.draw_rule(dvi, x, y, w, h, f);
+ mdvi_pop_color (dvi);
+
+ return;
+}
+
+/*
+ * The only commands that actually draw something are:
+ * set_char, set_rule
+ */
+
+static void draw_box(DviContext *dvi, DviFontChar *ch)
+{
+ DviGlyph *glyph = NULL;
+ int x, y, w, h;
+
+ if(!MDVI_GLYPH_UNSET(ch->shrunk.data))
+ glyph = &ch->shrunk;
+ else if(!MDVI_GLYPH_UNSET(ch->grey.data))
+ glyph = &ch->grey;
+ else if(!MDVI_GLYPH_UNSET(ch->glyph.data))
+ glyph = &ch->glyph;
+ if(glyph == NULL)
+ return;
+ x = glyph->x;
+ y = glyph->y;
+ w = glyph->w;
+ h = glyph->h;
+ /* this is bad -- we have to undo the orientation */
+ switch(dvi->params.orientation) {
+ case MDVI_ORIENT_TBLR:
+ break;
+ case MDVI_ORIENT_TBRL:
+ x = w - x;
+ break;
+ case MDVI_ORIENT_BTLR:
+ y = h - y;
+ break;
+ case MDVI_ORIENT_BTRL:
+ x = w - x;
+ y = h - y;
+ break;
+ case MDVI_ORIENT_RP90:
+ SWAPINT(w, h);
+ SWAPINT(x, y);
+ x = w - x;
+ break;
+ case MDVI_ORIENT_RM90:
+ SWAPINT(w, h);
+ SWAPINT(x, y);
+ y = h - y;
+ break;
+ case MDVI_ORIENT_IRP90:
+ SWAPINT(w, h);
+ SWAPINT(x, y);
+ break;
+ case MDVI_ORIENT_IRM90:
+ SWAPINT(w, h);
+ SWAPINT(x, y);
+ x = w - x;
+ y = h - y;
+ break;
+ }
+
+ draw_shrink_rule(dvi, dvi->pos.hh - x, dvi->pos.vv - y, w, h, 1);
+}
+
+int set_char(DviContext *dvi, int opcode)
+{
+ int num;
+ int h;
+ int hh;
+ DviFontChar *ch;
+ DviFont *font;
+
+ if(opcode < 128)
+ num = opcode;
+ else
+ num = dugetn(dvi, opcode - DVI_SET1 + 1);
+ if(dvi->currfont == NULL) {
+ dvierr(dvi, _("no default font set yet\n"));
+ return -1;
+ }
+ font = dvi->currfont->ref;
+ ch = font_get_glyph(dvi, font, num);
+ if(ch == NULL || ch->missing) {
+ /* try to display something anyway */
+ ch = FONTCHAR(font, num);
+ if(!glyph_present(ch)) {
+ dviwarn(dvi,
+ _("requested character %d does not exist in `%s'\n"),
+ num, font->fontname);
+ return 0;
+ }
+ draw_box(dvi, ch);
+ } else if(dvi->curr_layer <= dvi->params.layer) {
+ if(ISVIRTUAL(font))
+ mdvi_run_macro(dvi, (Uchar *)font->private +
+ ch->offset, ch->width);
+ else if(ch->width && ch->height)
+ dvi->device.draw_glyph(dvi, ch,
+ dvi->pos.hh, dvi->pos.vv);
+ }
+ if(opcode >= DVI_PUT1 && opcode <= DVI_PUT4) {
+ SHOWCMD((dvi, "putchar", opcode - DVI_PUT1 + 1,
+ "char %d (%s)\n",
+ num, dvi->currfont->ref->fontname));
+ } else {
+ h = dvi->pos.h + ch->tfmwidth;
+ hh = dvi->pos.hh + pixel_round(dvi, ch->tfmwidth);
+ SHOWCMD((dvi, "setchar", num, "(%d,%d) h:=%d%c%d=%d, hh:=%d (%s)\n",
+ dvi->pos.hh, dvi->pos.vv,
+ DBGSUM(dvi->pos.h, ch->tfmwidth, h), hh,
+ font->fontname));
+ dvi->pos.h = h;
+ dvi->pos.hh = hh;
+ fix_after_horizontal(dvi);
+ }
+
+ return 0;
+}
+
+int set_rule(DviContext *dvi, int opcode)
+{
+ Int32 a, b;
+ int h, w;
+
+ a = dsget4(dvi);
+ b = dsget4(dvi); w = rule_round(dvi, b);
+ if(a > 0 && b > 0) {
+ h = vrule_round(dvi, a);
+ SHOWCMD((dvi, opcode == DVI_SET_RULE ? "setrule" : "putrule", -1,
+ "width %d, height %d (%dx%d pixels)\n",
+ b, a, w, h));
+ /* the `draw' functions expect the origin to be at the top left
+ * corner of the rule, not the bottom left, as in DVI files */
+ if(dvi->curr_layer <= dvi->params.layer) {
+ draw_shrink_rule(dvi,
+ dvi->pos.hh, dvi->pos.vv - h + 1, w, h, 1);
+ }
+ } else {
+ SHOWCMD((dvi, opcode == DVI_SET_RULE ? "setrule" : "putrule", -1,
+ "(moving left only, by %d)\n", b));
+ }
+
+ if(opcode == DVI_SET_RULE) {
+ dvi->pos.h += b;
+ dvi->pos.hh += w;
+ fix_after_horizontal(dvi);
+ }
+ return 0;
+}
+
+int no_op(DviContext *dvi, int opcode)
+{
+ SHOWCMD((dvi, "noop", -1, ""));
+ return 0;
+}
+
+int push(DviContext *dvi, int opcode)
+{
+ if(dvi->stacktop == dvi->stacksize) {
+ if(!dvi->depth)
+ dviwarn(dvi, _("enlarging stack\n"));
+ dvi->stacksize += 8;
+ dvi->stack = xresize(dvi->stack,
+ DviState, dvi->stacksize);
+ }
+ memcpy(&dvi->stack[dvi->stacktop], &dvi->pos, sizeof(DviState));
+ SHOWCMD((dvi, "push", -1,
+ "level %d: (h=%d,v=%d,w=%d,x=%d,y=%d,z=%d,hh=%d,vv=%d)\n",
+ dvi->stacktop,
+ dvi->pos.h, dvi->pos.v, dvi->pos.w, dvi->pos.x,
+ dvi->pos.y, dvi->pos.z, dvi->pos.hh, dvi->pos.vv));
+ dvi->stacktop++;
+ return 0;
+}
+
+int pop(DviContext *dvi, int opcode)
+{
+ if(dvi->stacktop == 0) {
+ dvierr(dvi, _("stack underflow\n"));
+ return -1;
+ }
+ memcpy(&dvi->pos, &dvi->stack[dvi->stacktop-1], sizeof(DviState));
+ SHOWCMD((dvi, "pop", -1,
+ "level %d: (h=%d,v=%d,w=%d,x=%d,y=%d,z=%d,hh=%d,vv=%d)\n",
+ dvi->stacktop,
+ dvi->pos.h, dvi->pos.v, dvi->pos.w, dvi->pos.x,
+ dvi->pos.y, dvi->pos.z, dvi->pos.hh, dvi->pos.vv));
+ dvi->stacktop--;
+ return 0;
+}
+
+int move_right(DviContext *dvi, int opcode)
+{
+ Int32 arg;
+ int h, hh;
+
+ arg = dsgetn(dvi, opcode - DVI_RIGHT1 + 1);
+ h = dvi->pos.h;
+ hh = move_horizontal(dvi, arg);
+ SHOWCMD((dvi, "right", opcode - DVI_RIGHT1 + 1,
+ "%d h:=%d%c%d=%d, hh:=%d\n",
+ arg, DBGSUM(h, arg, dvi->pos.h), hh));
+ dvi->pos.hh = hh;
+ return 0;
+}
+
+int move_down(DviContext *dvi, int opcode)
+{
+ Int32 arg;
+ int v, vv;
+
+ arg = dsgetn(dvi, opcode - DVI_DOWN1 + 1);
+ v = dvi->pos.v;
+ vv = move_vertical(dvi, arg);
+ SHOWCMD((dvi, "down", opcode - DVI_DOWN1 + 1,
+ "%d v:=%d%c%d=%d, vv:=%d\n",
+ arg, DBGSUM(v, arg, dvi->pos.v), vv));
+ dvi->pos.vv = vv;
+ return 0;
+}
+
+int move_w(DviContext *dvi, int opcode)
+{
+ int h, hh;
+
+ if(opcode != DVI_W0)
+ dvi->pos.w = dsgetn(dvi, opcode - DVI_W0);
+ h = dvi->pos.h;
+ hh = move_horizontal(dvi, dvi->pos.w);
+ SHOWCMD((dvi, "w", opcode - DVI_W0,
+ "%d h:=%d%c%d=%d, hh:=%d\n",
+ dvi->pos.w, DBGSUM(h, dvi->pos.w, dvi->pos.h), hh));
+ dvi->pos.hh = hh;
+ return 0;
+}
+
+int move_x(DviContext *dvi, int opcode)
+{
+ int h, hh;
+
+ if(opcode != DVI_X0)
+ dvi->pos.x = dsgetn(dvi, opcode - DVI_X0);
+ h = dvi->pos.h;
+ hh = move_horizontal(dvi, dvi->pos.x);
+ SHOWCMD((dvi, "x", opcode - DVI_X0,
+ "%d h:=%d%c%d=%d, hh:=%d\n",
+ dvi->pos.x, DBGSUM(h, dvi->pos.x, dvi->pos.h), hh));
+ dvi->pos.hh = hh;
+ return 0;
+}
+
+int move_y(DviContext *dvi, int opcode)
+{
+ int v, vv;
+
+ if(opcode != DVI_Y0)
+ dvi->pos.y = dsgetn(dvi, opcode - DVI_Y0);
+ v = dvi->pos.v;
+ vv = move_vertical(dvi, dvi->pos.y);
+ SHOWCMD((dvi, "y", opcode - DVI_Y0,
+ "%d h:=%d%c%d=%d, hh:=%d\n",
+ dvi->pos.y, DBGSUM(v, dvi->pos.y, dvi->pos.v), vv));
+ dvi->pos.vv = vv;
+ return 0;
+}
+
+int move_z(DviContext *dvi, int opcode)
+{
+ int v, vv;
+
+ if(opcode != DVI_Z0)
+ dvi->pos.z = dsgetn(dvi, opcode - DVI_Z0);
+ v = dvi->pos.v;
+ vv = move_vertical(dvi, dvi->pos.z);
+ SHOWCMD((dvi, "z", opcode - DVI_Z0,
+ "%d h:=%d%c%d=%d, hh:=%d\n",
+ dvi->pos.z, DBGSUM(v, dvi->pos.z, dvi->pos.v), vv));
+ dvi->pos.vv = vv;
+ return 0;
+}
+
+int sel_font(DviContext *dvi, int opcode)
+{
+ DviFontRef *ref;
+ int ndx;
+
+ ndx = opcode - DVI_FNT_NUM0;
+ if(dvi->depth)
+ ref = font_find_flat(dvi, ndx);
+ else
+ ref = dvi->findref(dvi, ndx);
+ if(ref == NULL) {
+ dvierr(dvi, _("font %d is not defined\n"),
+ opcode - DVI_FNT_NUM0);
+ return -1;
+ }
+ SHOWCMD((dvi, "fntnum", opcode - DVI_FNT_NUM0,
+ "current font is %s\n",
+ ref->ref->fontname));
+ dvi->currfont = ref;
+ return 0;
+}
+
+int sel_fontn(DviContext *dvi, int opcode)
+{
+ Int32 arg;
+ DviFontRef *ref;
+
+ arg = dugetn(dvi, opcode - DVI_FNT1 + 1);
+ if(dvi->depth)
+ ref = font_find_flat(dvi, arg);
+ else
+ ref = dvi->findref(dvi, arg);
+ if(ref == NULL) {
+ dvierr(dvi, _("font %d is not defined\n"), arg);
+ return -1;
+ }
+ SHOWCMD((dvi, "fnt", opcode - DVI_FNT1 + 1,
+ "current font is %s (id %d)\n",
+ ref->ref->fontname, arg));
+ dvi->currfont = ref;
+ return 0;
+}
+
+int special(DviContext *dvi, int opcode)
+{
+ char *s;
+ Int32 arg;
+
+ arg = dugetn(dvi, opcode - DVI_XXX1 + 1);
+ s = mdvi_malloc(arg + 1);
+ dread(dvi, s, arg);
+ s[arg] = 0;
+ mdvi_do_special(dvi, s);
+ SHOWCMD((dvi, "XXXX", opcode - DVI_XXX1 + 1,
+ "[%s]", s));
+ mdvi_free(s);
+ return 0;
+}
+
+int def_font(DviContext *dvi, int opcode)
+{
+ DviFontRef *ref;
+ Int32 arg;
+
+ arg = dugetn(dvi, opcode - DVI_FNT_DEF1 + 1);
+ if(dvi->depth)
+ ref = font_find_flat(dvi, arg);
+ else
+ ref = dvi->findref(dvi, arg);
+ /* skip the rest */
+ dskip(dvi, 12);
+ dskip(dvi, duget1(dvi) + duget1(dvi));
+ if(ref == NULL) {
+ dvierr(dvi, _("font %d is not defined in postamble\n"), arg);
+ return -1;
+ }
+ SHOWCMD((dvi, "fntdef", opcode - DVI_FNT_DEF1 + 1,
+ "%d -> %s (%d links)\n",
+ ref->fontid, ref->ref->fontname,
+ ref->ref->links));
+ return 0;
+}
+
+int unexpected(DviContext *dvi, int opcode)
+{
+ dvierr(dvi, _("unexpected opcode %d\n"), opcode);
+ return -1;
+}
+
+int undefined(DviContext *dvi, int opcode)
+{
+ dvierr(dvi, _("undefined opcode %d\n"), opcode);
+ return -1;
+}
+
diff --git a/backend/dvi/mdvi-lib/files.c b/backend/dvi/mdvi-lib/files.c
new file mode 100644
index 00000000..b7065068
--- /dev/null
+++ b/backend/dvi/mdvi-lib/files.c
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#include "common.h"
+
+char *dgets(Dstring *dstr, FILE *in)
+{
+ char buffer[256];
+
+ dstr->length = 0;
+ if(feof(in))
+ return NULL;
+ while(fgets(buffer, 256, in) != NULL) {
+ int len = strlen(buffer);
+
+ if(buffer[len-1] == '\n') {
+ dstring_append(dstr, buffer, len - 1);
+ break;
+ }
+ dstring_append(dstr, buffer, len);
+ }
+ if(dstr->data)
+ dstr->data[dstr->length] = 0;
+ return dstr->data;
+}
+
+/* some simple helper functions to manipulate file names */
+
+const char *file_basename(const char *filename)
+{
+ const char *ptr = strrchr(filename, '/');
+
+ return (ptr ? ptr + 1 : filename);
+}
+
+const char *file_extension(const char *filename)
+{
+ const char *ptr = strchr(file_basename(filename), '.');
+
+ return (ptr ? ptr + 1 : NULL);
+}
+
+int file_readable(const char *filename)
+{
+ int status = (access(filename, R_OK) == 0);
+
+ DEBUG((DBG_FILES, "file_redable(%s) -> %s\n",
+ filename, status ? "Yes" : "No"));
+ return status;
+}
+
+int file_exists(const char *filename)
+{
+ int status = (access(filename, F_OK) == 0);
+
+ DEBUG((DBG_FILES, "file_exists(%s) -> %s\n",
+ filename, status ? "Yes" : "No"));
+ return status;
+}
+
diff --git a/backend/dvi/mdvi-lib/font.c b/backend/dvi/mdvi-lib/font.c
new file mode 100644
index 00000000..2f655df0
--- /dev/null
+++ b/backend/dvi/mdvi-lib/font.c
@@ -0,0 +1,519 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include <stdlib.h>
+
+#include "mdvi.h"
+#include "private.h"
+
+static ListHead fontlist;
+
+extern char *_mdvi_fallback_font;
+
+extern void vf_free_macros(DviFont *);
+
+#define finfo search.info
+#define TYPENAME(font) \
+ ((font)->finfo ? (font)->finfo->name : "none")
+
+int font_reopen(DviFont *font)
+{
+ if(font->in)
+ fseek(font->in, (long)0, SEEK_SET);
+ else if((font->in = fopen(font->filename, "rb")) == NULL) {
+ DEBUG((DBG_FILES, "reopen(%s) -> Error\n", font->filename));
+ return -1;
+ }
+ DEBUG((DBG_FILES, "reopen(%s) -> Ok.\n", font->filename));
+ return 0;
+}
+
+/* used from context: params and device */
+static int load_font_file(DviParams *params, DviFont *font)
+{
+ int status;
+
+ if(SEARCH_DONE(font->search))
+ return -1;
+ if(font->in == NULL && font_reopen(font) < 0)
+ return -1;
+ DEBUG((DBG_FONTS, "%s: loading %s font from `%s'\n",
+ font->fontname,
+ font->finfo->name, font->filename));
+ do {
+ status = font->finfo->load(params, font);
+ } while(status < 0 && mdvi_font_retry(params, font) == 0);
+ if(status < 0)
+ return -1;
+ if(font->in) {
+ fclose(font->in);
+ font->in = NULL;
+ }
+ DEBUG((DBG_FONTS, "reload_font(%s) -> %s\n",
+ font->fontname, status < 0 ? "Error" : "Ok"));
+ return 0;
+}
+
+void font_drop_one(DviFontRef *ref)
+{
+ DviFont *font;
+
+ font = ref->ref;
+ mdvi_free(ref);
+ /* drop all children */
+ for(ref = font->subfonts; ref; ref = ref->next) {
+ /* just adjust the reference counts */
+ ref->ref->links--;
+ }
+ if(--font->links == 0) {
+ /*
+ * this font doesn't have any more references, but
+ * we still keep it around in case a virtual font
+ * requests it.
+ */
+ if(font->in) {
+ fclose(font->in);
+ font->in = NULL;
+ }
+ if(LIST(font) != fontlist.tail) {
+ /* move it to the end of the list */
+ listh_remove(&fontlist, LIST(font));
+ listh_append(&fontlist, LIST(font));
+ }
+ }
+ DEBUG((DBG_FONTS, "%s: reference dropped, %d more left\n",
+ font->fontname, font->links));
+}
+
+void font_drop_chain(DviFontRef *head)
+{
+ DviFontRef *ptr;
+
+ for(; (ptr = head); ) {
+ head = ptr->next;
+ font_drop_one(ptr);
+ }
+}
+
+int font_free_unused(DviDevice *dev)
+{
+ DviFont *font, *next;
+ int count = 0;
+
+ DEBUG((DBG_FONTS, "destroying unused fonts\n"));
+ for(font = (DviFont *)fontlist.head; font; font = next) {
+ DviFontRef *ref;
+
+ next = font->next;
+ if(font->links)
+ continue;
+ count++;
+ DEBUG((DBG_FONTS, "removing unused %s font `%s'\n",
+ TYPENAME(font), font->fontname));
+ listh_remove(&fontlist, LIST(font));
+ if(font->in)
+ fclose(font->in);
+ /* get rid of subfonts (but can't use `drop_chain' here) */
+ for(; (ref = font->subfonts); ) {
+ font->subfonts = ref->next;
+ mdvi_free(ref);
+ }
+ /* remove this font */
+ font_reset_font_glyphs(dev, font, MDVI_FONTSEL_GLYPH);
+ /* let the font destroy its private data */
+ if(font->finfo->freedata)
+ font->finfo->freedata(font);
+ /* destroy characters */
+ if(font->chars)
+ mdvi_free(font->chars);
+ mdvi_free(font->fontname);
+ mdvi_free(font->filename);
+ mdvi_free(font);
+ }
+ DEBUG((DBG_FONTS, "%d unused fonts removed\n", count));
+ return count;
+}
+
+/* used from context: params and device */
+DviFontRef *
+font_reference(
+ DviParams *params, /* rendering parameters */
+ Int32 id, /* external id number */
+ const char *name, /* font name */
+ Int32 sum, /* checksum (from DVI of VF) */
+ int hdpi, /* resolution */
+ int vdpi,
+ Int32 scale) /* scaling factor (from DVI or VF) */
+{
+ DviFont *font;
+ DviFontRef *ref;
+ DviFontRef *subfont_ref;
+
+ /* see if there is a font with the same characteristics */
+ for(font = (DviFont *)fontlist.head; font; font = font->next) {
+ if(strcmp(name, font->fontname) == 0
+ && (!sum || !font->checksum || font->checksum == sum)
+ && font->hdpi == hdpi
+ && font->vdpi == vdpi
+ && font->scale == scale)
+ break;
+ }
+ /* try to load the font */
+ if(font == NULL) {
+ font = mdvi_add_font(name, sum, hdpi, vdpi, scale);
+ if(font == NULL)
+ return NULL;
+ listh_append(&fontlist, LIST(font));
+ }
+ if(!font->links && !font->chars && load_font_file(params, font) < 0) {
+ DEBUG((DBG_FONTS, "font_reference(%s) -> Error\n", name));
+ return NULL;
+ }
+ ref = xalloc(DviFontRef);
+ ref->ref = font;
+
+ font->links++;
+ for(subfont_ref = font->subfonts; subfont_ref; subfont_ref = subfont_ref->next) {
+ /* just adjust the reference counts */
+ subfont_ref->ref->links++;
+ }
+
+ ref->fontid = id;
+
+ if(LIST(font) != fontlist.head) {
+ listh_remove(&fontlist, LIST(font));
+ listh_prepend(&fontlist, LIST(font));
+ }
+
+ DEBUG((DBG_FONTS, "font_reference(%s) -> %d links\n",
+ font->fontname, font->links));
+ return ref;
+}
+
+void font_transform_glyph(DviOrientation orient, DviGlyph *g)
+{
+ BITMAP *map;
+ int x, y;
+
+ map = (BITMAP *)g->data;
+ if(MDVI_GLYPH_ISEMPTY(map))
+ map = NULL;
+
+ /* put the glyph in the right orientation */
+ switch(orient) {
+ case MDVI_ORIENT_TBLR:
+ break;
+ case MDVI_ORIENT_TBRL:
+ g->x = g->w - g->x;
+ if(map) bitmap_flip_horizontally(map);
+ break;
+ case MDVI_ORIENT_BTLR:
+ g->y = g->h - g->y;
+ if(map) bitmap_flip_vertically(map);
+ break;
+ case MDVI_ORIENT_BTRL:
+ g->x = g->w - g->x;
+ g->y = g->h - g->y;
+ if(map) bitmap_flip_diagonally(map);
+ break;
+ case MDVI_ORIENT_RP90:
+ if(map) bitmap_rotate_counter_clockwise(map);
+ y = g->y;
+ x = g->w - g->x;
+ g->x = y;
+ g->y = x;
+ SWAPINT(g->w, g->h);
+ break;
+ case MDVI_ORIENT_RM90:
+ if(map) bitmap_rotate_clockwise(map);
+ y = g->h - g->y;
+ x = g->x;
+ g->x = y;
+ g->y = x;
+ SWAPINT(g->w, g->h);
+ break;
+ case MDVI_ORIENT_IRP90:
+ if(map) bitmap_flip_rotate_counter_clockwise(map);
+ y = g->y;
+ x = g->x;
+ g->x = y;
+ g->y = x;
+ SWAPINT(g->w, g->h);
+ break;
+ case MDVI_ORIENT_IRM90:
+ if(map) bitmap_flip_rotate_clockwise(map);
+ y = g->h - g->y;
+ x = g->w - g->x;
+ g->x = y;
+ g->y = x;
+ SWAPINT(g->w, g->h);
+ break;
+ }
+}
+
+static int load_one_glyph(DviContext *dvi, DviFont *font, int code)
+{
+ BITMAP *map;
+ DviFontChar *ch;
+ int status;
+
+#ifndef NODEBUG
+ ch = FONTCHAR(font, code);
+ DEBUG((DBG_GLYPHS, "loading glyph code %d in %s (at %u)\n",
+ code, font->fontname, ch->offset));
+#endif
+ if(font->finfo->getglyph == NULL) {
+ /* font type does not need to load glyphs (e.g. vf) */
+ return 0;
+ }
+
+ status = font->finfo->getglyph(&dvi->params, font, code);
+ if(status < 0)
+ return -1;
+ /* get the glyph again (font->chars may have changed) */
+ ch = FONTCHAR(font, code);
+#ifndef NODEBUG
+ map = (BITMAP *)ch->glyph.data;
+ if(DEBUGGING(BITMAP_DATA)) {
+ DEBUG((DBG_BITMAP_DATA,
+ "%s: new %s bitmap for character %d:\n",
+ font->fontname, TYPENAME(font), code));
+ if(MDVI_GLYPH_ISEMPTY(map))
+ DEBUG((DBG_BITMAP_DATA, "blank bitmap\n"));
+ else
+ bitmap_print(stderr, map);
+ }
+#endif
+ /* check if we have to scale it */
+ if(!font->finfo->scalable && font->hdpi != font->vdpi) {
+ int hs, vs, d;
+
+ /* we scale it ourselves */
+ d = Max(font->hdpi, font->vdpi);
+ hs = d / font->hdpi;
+ vs = d / font->vdpi;
+ if(ch->width && ch->height && (hs > 1 || vs > 1)) {
+ int h, v;
+ DviGlyph glyph;
+
+ DEBUG((DBG_FONTS,
+ "%s: scaling glyph %d to resolution %dx%d\n",
+ font->fontname, code, font->hdpi, font->vdpi));
+ h = dvi->params.hshrink;
+ v = dvi->params.vshrink;
+ d = dvi->params.density;
+ dvi->params.hshrink = hs;
+ dvi->params.vshrink = vs;
+ dvi->params.density = 50;
+ /* shrink it */
+ font->finfo->shrink0(dvi, font, ch, &glyph);
+ /* restore parameters */
+ dvi->params.hshrink = h;
+ dvi->params.vshrink = v;
+ dvi->params.density = d;
+ /* update glyph data */
+ if(!MDVI_GLYPH_ISEMPTY(ch->glyph.data))
+ bitmap_destroy((BITMAP *)ch->glyph.data);
+ ch->glyph.data = glyph.data;
+ ch->glyph.x = glyph.x;
+ ch->glyph.y = glyph.y;
+ ch->glyph.w = glyph.w;
+ ch->glyph.h = glyph.h;
+ }
+
+ }
+ font_transform_glyph(dvi->params.orientation, &ch->glyph);
+
+ return 0;
+}
+
+DviFontChar *font_get_glyph(DviContext *dvi, DviFont *font, int code)
+{
+ DviFontChar *ch;
+
+again:
+ /* if we have not loaded the font yet, do so now */
+ if(!font->chars && load_font_file(&dvi->params, font) < 0)
+ return NULL;
+
+ /* get the unscaled glyph, maybe loading it from disk */
+ ch = FONTCHAR(font, code);
+ if(!ch || !glyph_present(ch))
+ return NULL;
+ if(!ch->loaded && load_one_glyph(dvi, font, code) == -1) {
+ if(font->chars == NULL) {
+ /* we need to try another font class */
+ goto again;
+ }
+ return NULL;
+ }
+ /* yes, we have to do this again */
+ ch = FONTCHAR(font, code);
+
+ /* Got the glyph. If we also have the right scaled glyph, do no more */
+ if(!ch->width || !ch->height ||
+ font->finfo->getglyph == NULL ||
+ (dvi->params.hshrink == 1 && dvi->params.vshrink == 1))
+ return ch;
+
+ /* If the glyph is empty, we just need to shrink the box */
+ if(ch->missing || MDVI_GLYPH_ISEMPTY(ch->glyph.data)) {
+ if(MDVI_GLYPH_UNSET(ch->shrunk.data))
+ mdvi_shrink_box(dvi, font, ch, &ch->shrunk);
+ return ch;
+ } else if(MDVI_ENABLED(dvi, MDVI_PARAM_ANTIALIASED)) {
+ if(ch->grey.data &&
+ !MDVI_GLYPH_ISEMPTY(ch->grey.data) &&
+ ch->fg == dvi->curr_fg &&
+ ch->bg == dvi->curr_bg)
+ return ch;
+ if(ch->grey.data &&
+ !MDVI_GLYPH_ISEMPTY(ch->grey.data)) {
+ if(dvi->device.free_image)
+ dvi->device.free_image(ch->grey.data);
+ ch->grey.data = NULL;
+ }
+ font->finfo->shrink1(dvi, font, ch, &ch->grey);
+ } else if(!ch->shrunk.data)
+ font->finfo->shrink0(dvi, font, ch, &ch->shrunk);
+
+ return ch;
+}
+
+void font_reset_one_glyph(DviDevice *dev, DviFontChar *ch, int what)
+{
+ if(!glyph_present(ch))
+ return;
+ if(what & MDVI_FONTSEL_BITMAP) {
+ if(MDVI_GLYPH_NONEMPTY(ch->shrunk.data))
+ bitmap_destroy((BITMAP *)ch->shrunk.data);
+ ch->shrunk.data = NULL;
+ }
+ if(what & MDVI_FONTSEL_GREY) {
+ if(MDVI_GLYPH_NONEMPTY(ch->grey.data)) {
+ if(dev->free_image)
+ dev->free_image(ch->grey.data);
+ }
+ ch->grey.data = NULL;
+ }
+ if(what & MDVI_FONTSEL_GLYPH) {
+ if(MDVI_GLYPH_NONEMPTY(ch->glyph.data))
+ bitmap_destroy((BITMAP *)ch->glyph.data);
+ ch->glyph.data = NULL;
+ ch->loaded = 0;
+ }
+}
+
+void font_reset_font_glyphs(DviDevice *dev, DviFont *font, int what)
+{
+ int i;
+ DviFontChar *ch;
+
+ if(what & MDVI_FONTSEL_GLYPH)
+ what |= MDVI_FONTSEL_BITMAP|MDVI_FONTSEL_GREY;
+ if(font->subfonts) {
+ DviFontRef *ref;
+
+ for(ref = font->subfonts; ref; ref = ref->next)
+ font_reset_font_glyphs(dev, ref->ref, what);
+ }
+ if(font->in) {
+ DEBUG((DBG_FILES, "close(%s)\n", font->filename));
+ fclose(font->in);
+ font->in = NULL;
+ }
+ if(font->finfo->getglyph == NULL)
+ return;
+ DEBUG((DBG_FONTS, "resetting glyphs in font `%s'\n", font->fontname));
+ for(ch = font->chars, i = font->loc; i <= font->hic; ch++, i++) {
+ if(glyph_present(ch))
+ font_reset_one_glyph(dev, ch, what);
+ }
+ if((what & MDVI_FONTSEL_GLYPH) && font->finfo->reset)
+ font->finfo->reset(font);
+}
+
+void font_reset_chain_glyphs(DviDevice *dev, DviFontRef *head, int what)
+{
+ DviFontRef *ref;
+
+ for(ref = head; ref; ref = ref->next)
+ font_reset_font_glyphs(dev, ref->ref, what);
+}
+
+static int compare_refs(const void *p1, const void *p2)
+{
+ return ((*(DviFontRef **)p1)->fontid - (*(DviFontRef **)p2)->fontid);
+}
+
+void font_finish_definitions(DviContext *dvi)
+{
+ int count;
+ DviFontRef **map, *ref;
+
+ /* first get rid of unused fonts */
+ font_free_unused(&dvi->device);
+
+ if(dvi->fonts == NULL) {
+ mdvi_warning(_("%s: no fonts defined\n"), dvi->filename);
+ return;
+ }
+ map = xnalloc(DviFontRef *, dvi->nfonts);
+ for(count = 0, ref = dvi->fonts; ref; ref = ref->next)
+ map[count++] = ref;
+ /* sort the array by font id */
+ qsort(map, dvi->nfonts, sizeof(DviFontRef *), compare_refs);
+ dvi->fontmap = map;
+}
+
+DviFontRef *font_find_flat(DviContext *dvi, Int32 id)
+{
+ DviFontRef *ref;
+
+ for(ref = dvi->fonts; ref; ref = ref->next)
+ if(ref->fontid == id)
+ break;
+ return ref;
+}
+
+DviFontRef *font_find_mapped(DviContext *dvi, Int32 id)
+{
+ int lo, hi, n;
+ DviFontRef **map;
+
+ /* do a binary search */
+ lo = 0; hi = dvi->nfonts;
+ map = dvi->fontmap;
+ while(lo < hi) {
+ int sign;
+
+ n = (hi + lo) >> 1;
+ sign = (map[n]->fontid - id);
+ if(sign == 0)
+ break;
+ else if(sign < 0)
+ lo = n;
+ else
+ hi = n;
+ }
+ if(lo >= hi)
+ return NULL;
+ return map[n];
+}
+
diff --git a/backend/dvi/mdvi-lib/fontmap.c b/backend/dvi/mdvi-lib/fontmap.c
new file mode 100644
index 00000000..c3c3a8d3
--- /dev/null
+++ b/backend/dvi/mdvi-lib/fontmap.c
@@ -0,0 +1,1174 @@
+/* encoding.c - functions to manipulate encodings and fontmaps */
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <sys/stat.h>
+
+#include "mdvi.h"
+#include "private.h"
+
+#include <kpathsea/expand.h>
+#include <kpathsea/pathsearch.h>
+
+typedef struct _DviFontMap DviFontMap;
+
+struct _DviFontMap {
+ ListHead entries;
+ DviHashTable fonts;
+};
+
+typedef struct _PSFontMap {
+ struct _PSFontMap *next;
+ struct _PSFontMap *prev;
+ char *psname;
+ char *mapname;
+ char *fullname;
+} PSFontMap;
+
+/* these variables control PS font maps */
+static char *pslibdir = NULL; /* path where we look for PS font maps */
+static char *psfontdir = NULL; /* PS font search path */
+static int psinitialized = 0; /* did we expand the path already? */
+
+static ListHead psfonts = MDVI_EMPTY_LIST_HEAD;
+static DviHashTable pstable = MDVI_EMPTY_HASH_TABLE;
+
+static ListHead fontmaps;
+static DviHashTable maptable;
+static int fontmaps_loaded = 0;
+
+#define MAP_HASH_SIZE 57
+#define ENC_HASH_SIZE 31
+#define PSMAP_HASH_SIZE 57
+
+/* this hash table should be big enough to
+ * hold (ideally) one glyph name per bucket */
+#define ENCNAME_HASH_SIZE 131 /* most TeX fonts have 128 glyphs */
+
+static ListHead encodings = MDVI_EMPTY_LIST_HEAD;
+static DviEncoding *tex_text_encoding = NULL;
+static DviEncoding *default_encoding = NULL;
+
+/* we keep two hash tables for encodings: one for their base files (e.g.
+ * "8r.enc"), and another one for their names (e.g. "TeXBase1Encoding") */
+static DviHashTable enctable = MDVI_EMPTY_HASH_TABLE;
+static DviHashTable enctable_file = MDVI_EMPTY_HASH_TABLE;
+
+/* the TeX text encoding, from dvips */
+static char *tex_text_vector[256] = {
+ "Gamma", "Delta", "Theta", "Lambda", "Xi", "Pi", "Sigma", "Upsilon",
+ "Phi", "Psi", "Omega", "arrowup", "arrowdown", "quotesingle",
+ "exclamdown", "questiondown", "dotlessi", "dotlessj", "grave",
+ "acute", "caron", "breve", "macron", "ring", "cedilla",
+ "germandbls", "ae", "oe", "oslash", "AE", "OE", "Oslash", "space",
+ "exclam", "quotedbl", "numbersign", "dollar", "percent",
+ "ampersand", "quoteright", "parenleft", "parenright", "asterisk",
+ "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two",
+ "three", "four", "five", "six", "seven", "eight", "nine", "colon",
+ "semicolon", "less", "equal", "greater", "question", "at", "A", "B",
+ "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
+ "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
+ "bracketleft", "backslash", "bracketright", "circumflex",
+ "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h",
+ "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u",
+ "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "tilde",
+ "dieresis", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static void ps_init_default_paths __PROTO((void));
+static int mdvi_set_default_encoding __PROTO((const char *name));
+static int mdvi_init_fontmaps __PROTO((void));
+
+/*
+ * What we do here is allocate one block large enough to hold the entire
+ * file (these files are small) minus the leading comments. This is much
+ * better than allocating up to 256 tiny strings per encoding vector. */
+static int read_encoding(DviEncoding *enc)
+{
+ FILE *in;
+ int curr;
+ char *line;
+ char *name;
+ char *next;
+ struct stat st;
+
+ ASSERT(enc->private == NULL);
+
+ in = fopen(enc->filename, "rb");
+ if(in == NULL) {
+ DEBUG((DBG_FMAP, "%s: could not read `%s' (%s)\n",
+ enc->name, enc->filename, strerror(errno)));
+ return -1;
+ }
+ if(fstat(fileno(in), &st) < 0) {
+ /* should not happen */
+ fclose(in);
+ return -1;
+ }
+ st.st_size -= enc->offset;
+
+ /* this will be one big string */
+ enc->private = (char *)malloc(st.st_size + 1);
+ /* setup the hash table */
+ mdvi_hash_create(&enc->nametab, ENCNAME_HASH_SIZE);
+ /* setup the encoding vector */
+ enc->vector = (char **)mdvi_malloc(256 * sizeof(char *));
+
+ /* jump to the beginning of the interesting part */
+ fseek(in, enc->offset, SEEK_SET);
+ /* and read everything */
+ if(fread(enc->private, st.st_size, 1, in) != 1) {
+ fclose(in);
+ mdvi_free(enc->private);
+ enc->private = NULL;
+ return -1;
+ }
+ /* we don't need this anymore */
+ fclose(in);
+ curr = 0;
+
+ next = name = NULL;
+ DEBUG((DBG_FMAP, "%s: reading encoding vector\n", enc->name));
+ for(line = enc->private; *line && curr < 256; line = next) {
+ SKIPSP(line);
+ if(*line == ']') {
+ line++; SKIPSP(line);
+ if(STRNEQ(line, "def", 3))
+ break;
+ }
+ name = getword(line, " \t\n", &next);
+ if(name == NULL)
+ break;
+ /* next > line */
+ if(*name < ' ')
+ continue;
+ if(*name == '%') {
+ while(*next && *next != '\n')
+ next++;
+ if(*next) next++; /* skip \n */
+ continue;
+ }
+
+ /* got a name */
+ if(*next) *next++ = 0;
+
+ if(*name == '/')
+ name++;
+ enc->vector[curr] = name;
+ /* add it to the hash table */
+ if(!STREQ(name, ".notdef")) {
+ mdvi_hash_add(&enc->nametab, MDVI_KEY(name),
+ Int2Ptr(curr + 1), MDVI_HASH_REPLACE);
+ }
+ curr++;
+ }
+ if(curr == 0) {
+ mdvi_hash_reset(&enc->nametab, 0);
+ mdvi_free(enc->private);
+ mdvi_free(enc);
+ return -1;
+ }
+ while(curr < 256)
+ enc->vector[curr++] = NULL;
+ return 0;
+}
+
+static DviEncoding *find_encoding(const char *name)
+{
+ return (DviEncoding *)(encodings.count ?
+ mdvi_hash_lookup(&enctable, MDVI_KEY(name)) : NULL);
+}
+
+static void destroy_encoding(DviEncoding *enc)
+{
+ if(enc == default_encoding) {
+ default_encoding = tex_text_encoding;
+ /* now we use reference counts again */
+ mdvi_release_encoding(enc, 1);
+ }
+ if(enc != tex_text_encoding) {
+ mdvi_hash_reset(&enc->nametab, 0);
+ if(enc->private) {
+ mdvi_free(enc->private);
+ mdvi_free(enc->vector);
+ }
+ if(enc->name)
+ mdvi_free(enc->name);
+ if(enc->filename)
+ mdvi_free(enc->filename);
+ mdvi_free(enc);
+ }
+}
+
+/* this is used for the `enctable_file' hash table */
+static void file_hash_free(DviHashKey key, void *data)
+{
+ mdvi_free(key);
+}
+
+static DviEncoding *register_encoding(const char *basefile, int replace)
+{
+ DviEncoding *enc;
+ FILE *in;
+ char *filename;
+ char *name;
+ Dstring input;
+ char *line;
+ long offset;
+
+ DEBUG((DBG_FMAP, "register_encoding(%s)\n", basefile));
+
+ if(encodings.count) {
+ enc = mdvi_hash_lookup(&enctable_file, MDVI_KEY(basefile));
+ if(enc != NULL) {
+ DEBUG((DBG_FMAP, "%s: already there\n", basefile));
+ return enc; /* no error */
+ }
+ }
+
+ /* try our own files first */
+ filename = kpse_find_file(basefile,
+ kpse_program_text_format, 0);
+
+ /* then try the system-wide ones */
+ if(filename == NULL)
+ filename = kpse_find_file(basefile,
+ kpse_tex_ps_header_format, 0);
+ if(filename == NULL)
+ filename = kpse_find_file(basefile,
+ kpse_dvips_config_format, 0);
+
+ /* finally try the given name */
+ if(filename == NULL)
+ filename = mdvi_strdup(basefile);
+
+ in = fopen(filename, "rb");
+ if(in == NULL) {
+ mdvi_free(filename);
+ return NULL;
+ }
+
+ /* just lookup the name of the encoding */
+ name = NULL;
+ dstring_init(&input);
+ while((line = dgets(&input, in)) != NULL) {
+ if(STRNEQ(line, "Encoding=", 9)) {
+ name = getword(line + 9, " \t", &line);
+ if(*line) *line++ = 0;
+ break;
+ } else if(*line == '/') {
+ char *label = getword(line + 1, " \t", &line);
+ if(*line) {
+ *line++ = 0;
+ SKIPSP(line);
+ if(*line == '[') {
+ *line = 0;
+ name = label;
+ break;
+ }
+ }
+ }
+ }
+ offset = ftell(in);
+ fclose(in);
+ if(name == NULL || *name == 0) {
+ DEBUG((DBG_FMAP,
+ "%s: could not determine name of encoding\n",
+ basefile));
+ mdvi_free(filename);
+ return NULL;
+ }
+
+ /* check if the encoding is already there */
+ enc = find_encoding(name);
+ if(enc == tex_text_encoding) {
+ /* A special case: if the vector we found is the static one,
+ * allow the user to override it with an external file */
+ listh_remove(&encodings, LIST(enc));
+ mdvi_hash_remove(&enctable, MDVI_KEY(enc->name));
+ if(enc == default_encoding)
+ default_encoding = NULL;
+ } else if(enc) {
+ /* if the encoding is being used, refuse to remove it */
+ if(enc->links) {
+ mdvi_free(filename);
+ dstring_reset(&input);
+ return NULL;
+ }
+ if(replace) {
+ mdvi_hash_remove(&enctable, MDVI_KEY(name));
+ mdvi_hash_remove(&enctable_file, MDVI_KEY(basefile));
+ listh_remove(&encodings, LIST(enc));
+ if(enc == default_encoding) {
+ default_encoding = NULL;
+ mdvi_release_encoding(enc, 1);
+ }
+ DEBUG((DBG_FMAP, "%s: overriding encoding\n", name));
+ destroy_encoding(enc);
+ } else {
+ mdvi_free(filename);
+ dstring_reset(&input);
+ return enc; /* no error */
+ }
+ }
+ enc = xalloc(DviEncoding);
+ enc->name = mdvi_strdup(name);
+ enc->filename = filename;
+ enc->links = 0;
+ enc->offset = offset;
+ enc->private = NULL;
+ enc->vector = NULL;
+ mdvi_hash_init(&enc->nametab);
+ dstring_reset(&input);
+ if(default_encoding == NULL)
+ default_encoding = enc;
+ mdvi_hash_add(&enctable, MDVI_KEY(enc->name),
+ enc, MDVI_HASH_UNCHECKED);
+ mdvi_hash_add(&enctable_file, MDVI_KEY(mdvi_strdup(basefile)),
+ enc, MDVI_HASH_REPLACE);
+ listh_prepend(&encodings, LIST(enc));
+ DEBUG((DBG_FMAP, "%s: encoding `%s' registered\n",
+ basefile, enc->name));
+ return enc;
+}
+
+DviEncoding *mdvi_request_encoding(const char *name)
+{
+ DviEncoding *enc = find_encoding(name);
+
+ if(enc == NULL) {
+ DEBUG((DBG_FMAP, "%s: encoding not found, returning default `%s'\n",
+ name, default_encoding->name));
+ return default_encoding;
+ }
+ /* we don't keep reference counts for this */
+ if(enc == tex_text_encoding)
+ return enc;
+ if(!enc->private && read_encoding(enc) < 0)
+ return NULL;
+ enc->links++;
+
+ /* if the hash table is empty, rebuild it */
+ if(enc->nametab.nkeys == 0) {
+ int i;
+
+ DEBUG((DBG_FMAP, "%s: rehashing\n", enc->name));
+ for(i = 0; i < 256; i++) {
+ if(enc->vector[i] == NULL)
+ continue;
+ mdvi_hash_add(&enc->nametab,
+ MDVI_KEY(enc->vector[i]),
+ (DviHashKey)Int2Ptr(i),
+ MDVI_HASH_REPLACE);
+ }
+ }
+ return enc;
+}
+
+void mdvi_release_encoding(DviEncoding *enc, int should_free)
+{
+ /* ignore our static encoding */
+ if(enc == tex_text_encoding)
+ return;
+ if(!enc->links || --enc->links > 0 || !should_free)
+ return;
+ DEBUG((DBG_FMAP, "%s: resetting encoding vector\n", enc->name));
+ mdvi_hash_reset(&enc->nametab, 1); /* we'll reuse it */
+}
+
+int mdvi_encode_glyph(DviEncoding *enc, const char *name)
+{
+ void *data;
+
+ data = mdvi_hash_lookup(&enc->nametab, MDVI_KEY(name));
+ if(data == NULL)
+ return -1;
+ /* we added +1 to the hashed index just to distinguish
+ * a failed lookup from a zero index. Adjust it now. */
+ return (Ptr2Int(data) - 1);
+}
+
+/****************
+ * Fontmaps *
+ ****************/
+
+static void parse_spec(DviFontMapEnt *ent, char *spec)
+{
+ char *arg, *command;
+
+ /* this is a ridiculously simple parser, and recognizes only
+ * things of the form <argument> <command>. Of these, only
+ * command=SlantFont, ExtendFont and ReEncodeFont are handled */
+ while(*spec) {
+ arg = getword(spec, " \t", &spec);
+ if(*spec) *spec++ = 0;
+ command = getword(spec, " \t", &spec);
+ if(*spec) *spec++ = 0;
+ if(!arg || !command)
+ continue;
+ if(STREQ(command, "SlantFont")) {
+ double x = 10000 * strtod(arg, 0);
+
+ /* SFROUND evaluates arguments twice */
+ ent->slant = SFROUND(x);
+ } else if(STREQ(command, "ExtendFont")) {
+ double x = 10000 * strtod(arg, 0);
+
+ ent->extend = SFROUND(x);
+ } else if(STREQ(command, "ReEncodeFont")) {
+ if(ent->encoding)
+ mdvi_free(ent->encoding);
+ ent->encoding = mdvi_strdup(arg);
+ }
+ }
+}
+
+#if 0
+static void print_ent(DviFontMapEnt *ent)
+{
+ printf("Entry for `%s':\n", ent->fontname);
+ printf(" PS name: %s\n", ent->psname ? ent->psname : "(none)");
+ printf(" Encoding: %s\n", ent->encoding ? ent->encoding : "(default)");
+ printf(" EncFile: %s\n", ent->encfile ? ent->encfile : "(none)");
+ printf(" FontFile: %s\n", ent->fontfile ? ent->fontfile : "(same)");
+ printf(" Extend: %ld\n", ent->extend);
+ printf(" Slant: %ld\n", ent->slant);
+}
+#endif
+
+DviFontMapEnt *mdvi_load_fontmap(const char *file)
+{
+ char *ptr;
+ FILE *in;
+ int lineno = 1;
+ Dstring input;
+ ListHead list;
+ DviFontMapEnt *ent;
+ DviEncoding *last_encoding;
+ char *last_encfile;
+
+ ptr = kpse_find_file(file, kpse_program_text_format, 0);
+ if(ptr == NULL)
+ ptr = kpse_find_file(file, kpse_tex_ps_header_format, 0);
+ if(ptr == NULL)
+ ptr = kpse_find_file(file, kpse_dvips_config_format, 0);
+ if(ptr == NULL)
+ in = fopen(file, "rb");
+ else {
+ in = fopen(ptr, "rb");
+ mdvi_free(ptr);
+ }
+ if(in == NULL)
+ return NULL;
+
+ ent = NULL;
+ listh_init(&list);
+ dstring_init(&input);
+ last_encoding = NULL;
+ last_encfile = NULL;
+
+ while((ptr = dgets(&input, in)) != NULL) {
+ char *font_file;
+ char *tex_name;
+ char *ps_name;
+ char *vec_name;
+ int is_encoding;
+ DviEncoding *enc;
+
+ lineno++;
+ SKIPSP(ptr);
+
+ /* we skip what dvips does */
+ if(*ptr <= ' ' || *ptr == '*' || *ptr == '#' ||
+ *ptr == ';' || *ptr == '%')
+ continue;
+
+ font_file = NULL;
+ tex_name = NULL;
+ ps_name = NULL;
+ vec_name = NULL;
+ is_encoding = 0;
+
+ if(ent == NULL) {
+ ent = xalloc(DviFontMapEnt);
+ ent->encoding = NULL;
+ ent->slant = 0;
+ ent->extend = 0;
+ }
+ while(*ptr) {
+ char *hdr_name = NULL;
+
+ while(*ptr && *ptr <= ' ')
+ ptr++;
+ if(*ptr == 0)
+ break;
+ if(*ptr == '"') {
+ char *str;
+
+ str = getstring(ptr, " \t", &ptr);
+ if(*ptr) *ptr++ = 0;
+ parse_spec(ent, str);
+ continue;
+ } else if(*ptr == '<') {
+ ptr++;
+ if(*ptr == '<')
+ ptr++;
+ else if(*ptr == '[') {
+ is_encoding = 1;
+ ptr++;
+ }
+ SKIPSP(ptr);
+ hdr_name = ptr;
+ } else if(!tex_name)
+ tex_name = ptr;
+ else if(!ps_name)
+ ps_name = ptr;
+ else
+ hdr_name = ptr;
+
+ /* get next word */
+ getword(ptr, " \t", &ptr);
+ if(*ptr) *ptr++ = 0;
+
+ if(hdr_name) {
+ const char *ext = file_extension(hdr_name);
+
+ if(is_encoding || (ext && STRCEQ(ext, "enc")))
+ vec_name = hdr_name;
+ else
+ font_file = hdr_name;
+ }
+ }
+
+ if(tex_name == NULL)
+ continue;
+ ent->fontname = mdvi_strdup(tex_name);
+ ent->psname = ps_name ? mdvi_strdup(ps_name) : NULL;
+ ent->fontfile = font_file ? mdvi_strdup(font_file) : NULL;
+ ent->encfile = vec_name ? mdvi_strdup(vec_name) : NULL;
+ ent->fullfile = NULL;
+ enc = NULL; /* we don't have this yet */
+
+ /* if we have an encoding file, register it */
+ if(ent->encfile) {
+ /* register_encoding is smart enough not to load the
+ * same file twice */
+ if(!last_encfile || !STREQ(last_encfile, ent->encfile)) {
+ last_encfile = ent->encfile;
+ last_encoding = register_encoding(ent->encfile, 1);
+ }
+ enc = last_encoding;
+ }
+ if(ent->encfile && enc){
+ if(ent->encoding && !STREQ(ent->encoding, enc->name)) {
+ mdvi_warning(
+ _("%s: %d: [%s] requested encoding `%s' does not match vector `%s'\n"),
+ file, lineno, ent->encfile,
+ ent->encoding, enc->name);
+ } else if(!ent->encoding)
+ ent->encoding = mdvi_strdup(enc->name);
+ }
+
+ /* add it to the list */
+ /*print_ent(ent);*/
+ listh_append(&list, LIST(ent));
+ ent = NULL;
+ }
+ dstring_reset(&input);
+ fclose(in);
+
+ return (DviFontMapEnt *)list.head;
+}
+
+static void free_ent(DviFontMapEnt *ent)
+{
+ ASSERT(ent->fontname != NULL);
+ mdvi_free(ent->fontname);
+ if(ent->psname)
+ mdvi_free(ent->psname);
+ if(ent->fontfile)
+ mdvi_free(ent->fontfile);
+ if(ent->encoding)
+ mdvi_free(ent->encoding);
+ if(ent->encfile)
+ mdvi_free(ent->encfile);
+ if(ent->fullfile)
+ mdvi_free(ent->fullfile);
+ mdvi_free(ent);
+}
+
+void mdvi_install_fontmap(DviFontMapEnt *head)
+{
+ DviFontMapEnt *ent, *next;
+
+ for(ent = head; ent; ent = next) {
+ /* add all the entries, overriding old ones */
+ DviFontMapEnt *old;
+
+ old = (DviFontMapEnt *)
+ mdvi_hash_remove(&maptable, MDVI_KEY(ent->fontname));
+ if(old != NULL) {
+ DEBUG((DBG_FMAP, "%s: overriding fontmap entry\n",
+ old->fontname));
+ listh_remove(&fontmaps, LIST(old));
+ free_ent(old);
+ }
+ next = ent->next;
+ mdvi_hash_add(&maptable, MDVI_KEY(ent->fontname),
+ ent, MDVI_HASH_UNCHECKED);
+ listh_append(&fontmaps, LIST(ent));
+ }
+}
+
+static void init_static_encoding()
+{
+ DviEncoding *encoding;
+ int i;
+
+ DEBUG((DBG_FMAP, "installing static TeX text encoding\n"));
+ encoding = xalloc(DviEncoding);
+ encoding->private = "";
+ encoding->filename = "";
+ encoding->name = "TeXTextEncoding";
+ encoding->vector = tex_text_vector;
+ encoding->links = 1;
+ encoding->offset = 0;
+ mdvi_hash_create(&encoding->nametab, ENCNAME_HASH_SIZE);
+ for(i = 0; i < 256; i++) {
+ if(encoding->vector[i]) {
+ mdvi_hash_add(&encoding->nametab,
+ MDVI_KEY(encoding->vector[i]),
+ (DviHashKey)Int2Ptr(i),
+ MDVI_HASH_UNCHECKED);
+ }
+ }
+ ASSERT_VALUE(encodings.count, 0);
+ mdvi_hash_create(&enctable, ENC_HASH_SIZE);
+ mdvi_hash_create(&enctable_file, ENC_HASH_SIZE);
+ enctable_file.hash_free = file_hash_free;
+ mdvi_hash_add(&enctable, MDVI_KEY(encoding->name),
+ encoding, MDVI_HASH_UNCHECKED);
+ listh_prepend(&encodings, LIST(encoding));
+ tex_text_encoding = encoding;
+ default_encoding = tex_text_encoding;
+}
+
+static int mdvi_set_default_encoding(const char *name)
+{
+ DviEncoding *enc, *old;
+
+ enc = find_encoding(name);
+ if(enc == NULL)
+ return -1;
+ if(enc == default_encoding)
+ return 0;
+ /* this will read it from file if necessary,
+ * but it can fail if the file is corrupted */
+ enc = mdvi_request_encoding(name);
+ if(enc == NULL)
+ return -1;
+ old = default_encoding;
+ default_encoding = enc;
+ if(old != tex_text_encoding)
+ mdvi_release_encoding(old, 1);
+ return 0;
+}
+
+static int mdvi_init_fontmaps(void)
+{
+ char *file;
+ char *line;
+ FILE *in;
+ Dstring input;
+ int count = 0;
+ char *config;
+
+ if(fontmaps_loaded)
+ return 0;
+ /* we will only try this once */
+ fontmaps_loaded = 1;
+
+ DEBUG((DBG_FMAP, "reading fontmaps\n"));
+
+ /* make sure the static encoding is there */
+ init_static_encoding();
+
+ /* create the fontmap hash table */
+ mdvi_hash_create(&maptable, MAP_HASH_SIZE);
+
+ /* get the name of our configuration file */
+ config = kpse_cnf_get("mdvi-config");
+ if(config == NULL)
+ config = MDVI_DEFAULT_CONFIG;
+ /* let's ask kpathsea for the file first */
+ file = kpse_find_file(config, kpse_program_text_format, 0);
+ if(file == NULL)
+ in = fopen(config, "rb");
+ else {
+ in = fopen(file, "rb");
+ mdvi_free(file);
+ }
+ if(in == NULL)
+ return -1;
+ dstring_init(&input);
+ while((line = dgets(&input, in)) != NULL) {
+ char *arg;
+
+ SKIPSP(line);
+ if(*line < ' ' || *line == '#' || *line == '%')
+ continue;
+ if(STRNEQ(line, "fontmap", 7)) {
+ DviFontMapEnt *ent;
+
+ arg = getstring(line + 7, " \t", &line); *line = 0;
+ DEBUG((DBG_FMAP, "%s: loading fontmap\n", arg));
+ ent = mdvi_load_fontmap(arg);
+ if(ent == NULL)
+ mdvi_warning(_("%s: could not load fontmap\n"), arg);
+ else {
+ DEBUG((DBG_FMAP,
+ "%s: installing fontmap\n", arg));
+ mdvi_install_fontmap(ent);
+ count++;
+ }
+ } else if(STRNEQ(line, "encoding", 8)) {
+ arg = getstring(line + 8, " \t", &line); *line = 0;
+ if(arg && *arg)
+ register_encoding(arg, 1);
+ } else if(STRNEQ(line, "default-encoding", 16)) {
+ arg = getstring(line + 16, " \t", &line); *line = 0;
+ if(mdvi_set_default_encoding(arg) < 0)
+ mdvi_warning(_("%s: could not set as default encoding\n"),
+ arg);
+ } else if(STRNEQ(line, "psfontpath", 10)) {
+ arg = getstring(line + 11, " \t", &line); *line = 0;
+ if(!psinitialized)
+ ps_init_default_paths();
+ if(psfontdir)
+ mdvi_free(psfontdir);
+ psfontdir = kpse_path_expand(arg);
+ } else if(STRNEQ(line, "pslibpath", 9)) {
+ arg = getstring(line + 10, " \t", &line); *line = 0;
+ if(!psinitialized)
+ ps_init_default_paths();
+ if(pslibdir)
+ mdvi_free(pslibdir);
+ pslibdir = kpse_path_expand(arg);
+ } else if(STRNEQ(line, "psfontmap", 9)) {
+ arg = getstring(line + 9, " \t", &line); *line = 0;
+ if(mdvi_ps_read_fontmap(arg) < 0)
+ mdvi_warning("%s: %s: could not read PS fontmap\n",
+ config, arg);
+ }
+ }
+ fclose(in);
+ dstring_reset(&input);
+ fontmaps_loaded = 1;
+ DEBUG((DBG_FMAP, "%d files installed, %d fontmaps\n",
+ count, fontmaps.count));
+ return count;
+}
+
+int mdvi_query_fontmap(DviFontMapInfo *info, const char *fontname)
+{
+ DviFontMapEnt *ent;
+
+ if(!fontmaps_loaded && mdvi_init_fontmaps() < 0)
+ return -1;
+ ent = (DviFontMapEnt *)mdvi_hash_lookup(&maptable, MDVI_KEY(fontname));
+
+ if(ent == NULL)
+ return -1;
+ info->psname = ent->psname;
+ info->encoding = ent->encoding;
+ info->fontfile = ent->fontfile;
+ info->extend = ent->extend;
+ info->slant = ent->slant;
+ info->fullfile = ent->fullfile;
+
+ return 0;
+}
+
+int mdvi_add_fontmap_file(const char *name, const char *fullpath)
+{
+ DviFontMapEnt *ent;
+
+ if(!fontmaps_loaded && mdvi_init_fontmaps() < 0)
+ return -1;
+ ent = (DviFontMapEnt *)mdvi_hash_lookup(&maptable, MDVI_KEY(name));
+ if(ent == NULL)
+ return -1;
+ if(ent->fullfile)
+ mdvi_free(ent->fullfile);
+ ent->fullfile = mdvi_strdup(fullpath);
+ return 0;
+}
+
+
+void mdvi_flush_encodings(void)
+{
+ DviEncoding *enc;
+
+ if(enctable.nbucks == 0)
+ return;
+
+ DEBUG((DBG_FMAP, "flushing %d encodings\n", encodings.count));
+ /* asked to remove all encodings */
+ for(; (enc = (DviEncoding *)encodings.head); ) {
+ encodings.head = LIST(enc->next);
+ if((enc != tex_text_encoding && enc->links) || enc->links > 1) {
+ mdvi_warning(_("encoding vector `%s' is in use\n"),
+ enc->name);
+ }
+ destroy_encoding(enc);
+ }
+ /* destroy the static encoding */
+ if(tex_text_encoding->nametab.buckets)
+ mdvi_hash_reset(&tex_text_encoding->nametab, 0);
+ mdvi_hash_reset(&enctable, 0);
+ mdvi_hash_reset(&enctable_file, 0);
+}
+
+void mdvi_flush_fontmaps(void)
+{
+ DviFontMapEnt *ent;
+
+ if(!fontmaps_loaded)
+ return;
+
+ DEBUG((DBG_FMAP, "flushing %d fontmaps\n", fontmaps.count));
+ for(; (ent = (DviFontMapEnt *)fontmaps.head); ) {
+ fontmaps.head = LIST(ent->next);
+ free_ent(ent);
+ }
+ mdvi_hash_reset(&maptable, 0);
+ fontmaps_loaded = 0;
+}
+
+/* reading of PS fontmaps */
+
+void ps_init_default_paths(void)
+{
+ char *kppath;
+ char *kfpath;
+
+ ASSERT(psinitialized == 0);
+
+ kppath = getenv("GS_LIB");
+ kfpath = getenv("GS_FONTPATH");
+
+ if(kppath != NULL)
+ pslibdir = kpse_path_expand(kppath);
+ if(kfpath != NULL)
+ psfontdir = kpse_path_expand(kfpath);
+
+ listh_init(&psfonts);
+ mdvi_hash_create(&pstable, PSMAP_HASH_SIZE);
+ psinitialized = 1;
+}
+
+int mdvi_ps_read_fontmap(const char *name)
+{
+ char *fullname;
+ FILE *in;
+ Dstring dstr;
+ char *line;
+ int count = 0;
+
+ if(!psinitialized)
+ ps_init_default_paths();
+ if(pslibdir)
+ fullname = kpse_path_search(pslibdir, name, 1);
+ else
+ fullname = (char *)name;
+ in = fopen(fullname, "rb");
+ if(in == NULL) {
+ if(fullname != name)
+ mdvi_free(fullname);
+ return -1;
+ }
+ dstring_init(&dstr);
+
+ while((line = dgets(&dstr, in)) != NULL) {
+ char *name;
+ char *mapname;
+ const char *ext;
+ PSFontMap *ps;
+
+ SKIPSP(line);
+ /* we're looking for lines of the form
+ * /FONT-NAME (fontfile)
+ * /FONT-NAME /FONT-ALIAS
+ */
+ if(*line != '/')
+ continue;
+ name = getword(line + 1, " \t", &line);
+ if(*line) *line++ = 0;
+ mapname = getword(line, " \t", &line);
+ if(*line) *line++ = 0;
+
+ if(!name || !mapname || !*name)
+ continue;
+ if(*mapname == '(') {
+ char *end;
+
+ mapname++;
+ for(end = mapname; *end && *end != ')'; end++);
+ *end = 0;
+ }
+ if(!*mapname)
+ continue;
+ /* dont add `.gsf' fonts, which require a full blown
+ * PostScript interpreter */
+ ext = file_extension(mapname);
+ if(ext && STREQ(ext, "gsf")) {
+ DEBUG((DBG_FMAP, "(ps) %s: font `%s' ignored\n",
+ name, mapname));
+ continue;
+ }
+ ps = (PSFontMap *)mdvi_hash_lookup(&pstable, MDVI_KEY(name));
+ if(ps != NULL) {
+ if(STREQ(ps->mapname, mapname))
+ continue;
+ DEBUG((DBG_FMAP,
+ "(ps) replacing font `%s' (%s) by `%s'\n",
+ name, ps->mapname, mapname));
+ mdvi_free(ps->mapname);
+ ps->mapname = mdvi_strdup(mapname);
+ if(ps->fullname) {
+ mdvi_free(ps->fullname);
+ ps->fullname = NULL;
+ }
+ } else {
+ DEBUG((DBG_FMAP, "(ps) adding font `%s' as `%s'\n",
+ name, mapname));
+ ps = xalloc(PSFontMap);
+ ps->psname = mdvi_strdup(name);
+ ps->mapname = mdvi_strdup(mapname);
+ ps->fullname = NULL;
+ listh_append(&psfonts, LIST(ps));
+ mdvi_hash_add(&pstable, MDVI_KEY(ps->psname),
+ ps, MDVI_HASH_UNCHECKED);
+ count++;
+ }
+ }
+ fclose(in);
+ dstring_reset(&dstr);
+
+ DEBUG((DBG_FMAP, "(ps) %s: %d PostScript fonts registered\n",
+ fullname, count));
+ return 0;
+}
+
+void mdvi_ps_flush_fonts(void)
+{
+ PSFontMap *map;
+
+ if(!psinitialized)
+ return;
+ DEBUG((DBG_FMAP, "(ps) flushing PS font map (%d) entries\n",
+ psfonts.count));
+ mdvi_hash_reset(&pstable, 0);
+ for(; (map = (PSFontMap *)psfonts.head); ) {
+ psfonts.head = LIST(map->next);
+ mdvi_free(map->psname);
+ mdvi_free(map->mapname);
+ if(map->fullname)
+ mdvi_free(map->fullname);
+ mdvi_free(map);
+ }
+ listh_init(&psfonts);
+ if(pslibdir) {
+ mdvi_free(pslibdir);
+ pslibdir = NULL;
+ }
+ if(psfontdir) {
+ mdvi_free(psfontdir);
+ psfontdir = NULL;
+ }
+ psinitialized = 0;
+}
+
+char *mdvi_ps_find_font(const char *psname)
+{
+ PSFontMap *map, *smap;
+ char *filename;
+ int recursion_limit = 32;
+
+ DEBUG((DBG_FMAP, "(ps) resolving PS font `%s'\n", psname));
+ if(!psinitialized)
+ return NULL;
+ map = (PSFontMap *)mdvi_hash_lookup(&pstable, MDVI_KEY(psname));
+ if(map == NULL)
+ return NULL;
+ if(map->fullname)
+ return mdvi_strdup(map->fullname);
+
+ /* is it an alias? */
+ smap = map;
+ while(recursion_limit-- > 0 && smap && *smap->mapname == '/')
+ smap = (PSFontMap *)mdvi_hash_lookup(&pstable,
+ MDVI_KEY(smap->mapname + 1));
+ if(smap == NULL) {
+ if(recursion_limit == 0)
+ DEBUG((DBG_FMAP,
+ "(ps) %s: possible loop in PS font map\n",
+ psname));
+ return NULL;
+ }
+
+ if(psfontdir)
+ filename = kpse_path_search(psfontdir, smap->mapname, 1);
+ else if(file_exists(map->mapname))
+ filename = mdvi_strdup(map->mapname);
+ else
+ filename = NULL;
+ if(filename)
+ map->fullname = mdvi_strdup(filename);
+
+ return filename;
+}
+
+/*
+ * To get metric info for a font, we proceed as follows:
+ * - We try to find NAME.<tfm,ofm,afm>.
+ * - We query the fontmap for NAME.
+ * - We get back a PSNAME, and use to find the file in the PS font map.
+ * - We get the PSFONT file name, replace its extension by "afm" and
+ * lookup the file in GS's font search path.
+ * - We finally read the data, transform it as specified in our font map,
+ * and return it to the caller. The new data is left in the font metrics
+ * cache, so the next time it will be found at the first step (when we look
+ * up NAME.afm).
+ *
+ * The name `_ps_' in this function is not meant to imply that it can be
+ * used for Type1 fonts only. It should be usable for TrueType fonts as well.
+ *
+ * The returned metric info is subjected to the same caching mechanism as
+ * all the other metric data, as returned by get_font_metrics(). One should
+ * not modify the returned data at all, and it should be disposed with
+ * free_font_metrics().
+ */
+TFMInfo *mdvi_ps_get_metrics(const char *fontname)
+{
+ TFMInfo *info;
+ DviFontMapInfo map;
+ char buffer[64]; /* to avoid mallocs */
+ char *psfont;
+ char *basefile;
+ char *afmfile;
+ char *ext;
+ int baselen;
+ int nc;
+ TFMChar *ch;
+ double efactor;
+ double sfactor;
+
+ DEBUG((DBG_FMAP, "(ps) %s: looking for metric data\n", fontname));
+ info = get_font_metrics(fontname, DviFontAny, NULL);
+ if(info != NULL)
+ return info;
+
+ /* query the fontmap */
+ if(mdvi_query_fontmap(&map, fontname) < 0 || !map.psname)
+ return NULL;
+
+ /* get the PS font */
+ psfont = mdvi_ps_find_font(map.psname);
+ if(psfont == NULL)
+ return NULL;
+ DEBUG((DBG_FMAP, "(ps) %s: found as PS font `%s'\n",
+ fontname, psfont));
+ /* replace its extension */
+ basefile = strrchr(psfont, '/');
+ if(basefile == NULL)
+ basefile = psfont;
+ baselen = strlen(basefile);
+ ext = strrchr(basefile, '.');
+ if(ext != NULL)
+ *ext = 0;
+ if(baselen + 4 < 64)
+ afmfile = &buffer[0];
+ else
+ afmfile = mdvi_malloc(baselen + 5);
+ strcpy(afmfile, basefile);
+ strcpy(afmfile + baselen, ".afm");
+ /* we don't need this anymore */
+ mdvi_free(psfont);
+ DEBUG((DBG_FMAP, "(ps) %s: looking for `%s'\n",
+ fontname, afmfile));
+ /* lookup the file */
+ psfont = kpse_path_search(psfontdir, afmfile, 1);
+ /* don't need this anymore */
+ if(afmfile != &buffer[0])
+ mdvi_free(afmfile);
+ if(psfont != NULL) {
+ info = get_font_metrics(fontname, DviFontAFM, psfont);
+ mdvi_free(psfont);
+ } else
+ info = NULL;
+ if(info == NULL || (!map.extend && !map.slant))
+ return info;
+
+ /*
+ * transform the data as prescribed -- keep in mind that `info'
+ * points to CACHED data, so we're modifying the metric cache
+ * in place.
+ */
+
+#define DROUND(x) ((x) >= 0 ? floor((x) + 0.5) : ceil((x) - 0.5))
+#define TRANSFORM(x,y) DROUND(efactor * (x) + sfactor * (y))
+
+ efactor = (double)map.extend / 10000.0;
+ sfactor = (double)map.slant / 10000.0;
+ DEBUG((DBG_FMAP, "(ps) %s: applying extend=%f, slant=%f\n",
+ efactor, sfactor));
+
+ nc = info->hic - info->loc + 1;
+ for(ch = info->chars; ch < info->chars + nc; ch++) {
+ /* the AFM bounding box is:
+ * wx = ch->advance
+ * llx = ch->left
+ * lly = -ch->depth
+ * urx = ch->right
+ * ury = ch->height
+ * what we do here is transform wx, llx, and urx by
+ * newX = efactor * oldX + sfactor * oldY
+ * where for `wx' oldY = 0. Also, these numbers are all in
+ * TFM units (i.e. TFM's fix-words, which is just the actual
+ * number times 2^20, no need to do anything to it).
+ */
+ if(ch->present) {
+ ch->advance = TRANSFORM(ch->advance, 0);
+ ch->left = TRANSFORM(ch->left, -ch->depth);
+ ch->right = TRANSFORM(ch->right, ch->height);
+ }
+ }
+
+ return info;
+}
diff --git a/backend/dvi/mdvi-lib/fontmap.h b/backend/dvi/mdvi-lib/fontmap.h
new file mode 100644
index 00000000..bb5a944d
--- /dev/null
+++ b/backend/dvi/mdvi-lib/fontmap.h
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 _MDVI_FONTMAP_H
+#define _MDVI_FONTMAP_H 1
+
+typedef struct _DviFontMapEnt DviFontMapEnt;
+typedef struct _DviEncoding DviEncoding;
+
+typedef struct {
+ const char *psname;
+ const char *encoding;
+ const char *fontfile;
+ const char *fullfile;
+ const char *fmfile;
+ int fmtype;
+ long extend;
+ long slant;
+} DviFontMapInfo;
+
+struct _DviEncoding {
+ DviEncoding *next;
+ DviEncoding *prev;
+ char *private;
+ char *filename;
+ char *name;
+ char **vector; /* table with exactly 256 strings */
+ int links;
+ long offset;
+ DviHashTable nametab;
+};
+
+struct _DviFontMapEnt {
+ DviFontMapEnt *next;
+ DviFontMapEnt *prev;
+ char *private;
+ char *fontname;
+ char *psname;
+ char *encoding;
+ char *encfile;
+ char *fontfile;
+ char *fullfile;
+ long extend;
+ long slant;
+};
+
+#define MDVI_FMAP_SLANT(x) ((double)(x)->slant / 10000.0)
+#define MDVI_FMAP_EXTEND(x) ((double)(x)->extend / 10000.0)
+
+extern DviEncoding *mdvi_request_encoding __PROTO((const char *));
+extern void mdvi_release_encoding __PROTO((DviEncoding *, int));
+extern int mdvi_encode_glyph __PROTO((DviEncoding *, const char *));
+extern DviFontMapEnt *mdvi_load_fontmap __PROTO((const char *));
+extern void mdvi_install_fontmap __PROTO((DviFontMapEnt *));
+extern int mdvi_load_fontmaps __PROTO((void));
+extern int mdvi_query_fontmap __PROTO((DviFontMapInfo *, const char *));
+extern void mdvi_flush_encodings __PROTO((void));
+extern void mdvi_flush_fontmaps __PROTO((void));
+
+extern int mdvi_add_fontmap_file __PROTO((const char *, const char *));
+
+/* PS font maps */
+extern int mdvi_ps_read_fontmap __PROTO((const char *));
+extern char *mdvi_ps_find_font __PROTO((const char *));
+extern TFMInfo *mdvi_ps_get_metrics __PROTO((const char *));
+extern void mdvi_ps_flush_fonts __PROTO((void));
+
+#endif /* _MDVI_FONTMAP_H */
diff --git a/backend/dvi/mdvi-lib/fontsrch.c b/backend/dvi/mdvi-lib/fontsrch.c
new file mode 100644
index 00000000..8ebaa5ca
--- /dev/null
+++ b/backend/dvi/mdvi-lib/fontsrch.c
@@ -0,0 +1,371 @@
+/* fontsearch.c -- implements the font lookup mechanism in MDVI */
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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.
+ */
+
+/*
+ * How this works:
+ * Fonts are divided into MAX_CLASS priority classes. The first
+ * MAX_CLASS-1 ones correspond to `real' fonts (pk, gf, vf, type1, truetype,
+ * etc). The last one corresponds to `metric' fonts that are used as a last
+ * resort (tfm, afm, ofm, ...). When a font is looked up, it is tried in a
+ * `high' priority class (0 being the highest priority). The priority is
+ * lowered until it reaches MAX_CLASS-1. Then the whole thing is repeated
+ * for the fallback font. When the search reaches MAX_CLASS-1, we lookup the
+ * original font, and then the fallback font. The search can be done
+ * incrementally, with several calls to mdvi_lookup_font(). If this function
+ * is called again to continue a search, the function assumes the previous
+ * font it returned was not valid, and it goes on to the next step.
+ *
+ * Reason for this:
+ * Some font types are quite expensive to load (e.g. Type1), so loading
+ * them is deferred until the last possible moment. This means that a font that
+ * was supposed to exist may have to be discarded. Until now, MDVI had no ability to
+ * "resume" a search, so in this case it would have produced an error, regardless
+ * of whether the offending font existed in other formats.
+ * Also, given the large number of font types supported by MDVI, some mechanism
+ * was necessary to bring some order into the chaos.
+ *
+ * This mechanism fixes these two problems. For the first one, a search can
+ * be "resumed" and all the font formats tried for the missing font, and
+ * again for the fallback font (see above). As for the second, the
+ * hierarchical division in classes gives a lot of flexibility in how the
+ * fonts are configured.
+ */
+
+#include <config.h>
+#include "mdvi.h"
+
+#define HAVE_PROTOTYPES 1
+#include <kpathsea/tex-file.h>
+#include <kpathsea/tex-glyph.h>
+
+struct _DviFontClass {
+ DviFontClass *next;
+ DviFontClass *prev;
+ DviFontInfo info;
+ int links;
+ int id;
+};
+
+char *_mdvi_fallback_font = MDVI_FALLBACK_FONT;
+
+/* this leaves classes 0 and 1 for `real' fonts */
+#define MAX_CLASS 3
+static ListHead font_classes[MAX_CLASS];
+static int initialized = 0;
+
+static void init_font_classes(void)
+{
+ int i;
+
+ for(i = 0; i < MAX_CLASS; i++)
+ listh_init(&font_classes[i]);
+ initialized = 1;
+}
+
+int mdvi_get_font_classes(void)
+{
+ return (MAX_CLASS - 2);
+}
+
+char **mdvi_list_font_class(int klass)
+{
+ char **list;
+ int i, n;
+ DviFontClass *fc;
+
+ if(klass == -1)
+ klass = MAX_CLASS-1;
+ if(klass < 0 || klass >= MAX_CLASS)
+ return NULL;
+ n = font_classes[klass].count;
+ list = xnalloc(char *, n + 1);
+ fc = (DviFontClass *)font_classes[klass].head;
+ for(i = 0; i < n; fc = fc->next, i++) {
+ list[i] = mdvi_strdup(fc->info.name);
+ }
+ list[i] = NULL;
+ return list;
+}
+
+int mdvi_register_font_type(DviFontInfo *info, int klass)
+{
+ DviFontClass *fc;
+
+ if(klass == -1)
+ klass = MAX_CLASS-1;
+ if(klass < 0 || klass >= MAX_CLASS)
+ return -1;
+ if(!initialized)
+ init_font_classes();
+ fc = xalloc(struct _DviFontClass);
+ fc->links = 0;
+ fc->id = klass;
+ fc->info.name = mdvi_strdup(info->name);
+ fc->info.scalable = info->scalable;
+ fc->info.load = info->load;
+ fc->info.getglyph = info->getglyph;
+ fc->info.shrink0 = info->shrink0;
+ fc->info.shrink1 = info->shrink1;
+ fc->info.freedata = info->freedata;
+ fc->info.reset = info->reset;
+ fc->info.lookup = info->lookup;
+ fc->info.kpse_type = info->kpse_type;
+ listh_append(&font_classes[klass], LIST(fc));
+ return 0;
+}
+
+int mdvi_unregister_font_type(const char *name, int klass)
+{
+ DviFontClass *fc;
+ int k;
+
+ if(klass == -1)
+ klass = MAX_CLASS - 1;
+
+ if(klass >= 0 && klass < MAX_CLASS) {
+ k = klass;
+ LIST_FOREACH(fc, DviFontClass, &font_classes[k]) {
+ if(STREQ(fc->info.name, name))
+ break;
+ }
+ } else if(klass < 0) {
+ for(k = 0; k < MAX_CLASS; k++) {
+ LIST_FOREACH(fc, DviFontClass, &font_classes[k]) {
+ if(STREQ(fc->info.name, name))
+ break;
+ }
+ if(fc) break;
+ }
+ } else
+ return -1;
+
+ if(fc == NULL || fc->links)
+ return -1;
+ /* remove it */
+ listh_remove(&font_classes[k], LIST(fc));
+
+ /* and destroy it */
+ mdvi_free(fc->info.name);
+ mdvi_free(fc);
+ return 0;
+}
+
+static char *lookup_font(DviFontClass *ptr, const char *name, Ushort *h, Ushort *v)
+{
+ char *filename;
+
+ /*
+ * If the font type registered a function to do the lookup, use that.
+ * Otherwise we use kpathsea.
+ */
+ if(ptr->info.lookup)
+ filename = ptr->info.lookup(name, h, v);
+ else if(ptr->info.kpse_type <= kpse_any_glyph_format) {
+ kpse_glyph_file_type type;
+
+ filename = kpse_find_glyph(name, Max(*h, *v),
+ ptr->info.kpse_type, &type);
+ /* if kpathsea returned a fallback font, reject it */
+ if(filename && type.source == kpse_glyph_source_fallback) {
+ mdvi_free(filename);
+ filename = NULL;
+ } else if(filename)
+ *h = *v = type.dpi;
+ } else
+ filename = kpse_find_file(name, ptr->info.kpse_type, 1);
+ return filename;
+}
+
+/*
+ * Class MAX_CLASS-1 is special: it consists of `metric' fonts that should
+ * be tried as a last resort
+ */
+char *mdvi_lookup_font(DviFontSearch *search)
+{
+ int kid;
+ int k;
+ DviFontClass *ptr;
+ DviFontClass *last;
+ char *filename = NULL;
+ const char *name;
+ Ushort hdpi, vdpi;
+
+ if(search->id < 0)
+ return NULL;
+
+ if(search->curr == NULL) {
+ /* this is the initial search */
+ name = search->wanted_name;
+ hdpi = search->hdpi;
+ vdpi = search->vdpi;
+ kid = 0;
+ last = NULL;
+ } else {
+ name = search->actual_name;
+ hdpi = search->actual_hdpi;
+ vdpi = search->actual_vdpi;
+ kid = search->id;
+ last = search->curr;
+ }
+
+ ptr = NULL;
+again:
+ /* try all classes except MAX_CLASS-1 */
+ for(k = kid; !filename && k < MAX_CLASS-1; k++) {
+ if(last == NULL)
+ ptr = (DviFontClass *)font_classes[k].head;
+ else
+ ptr = last->next;
+ while(ptr) {
+ DEBUG((DBG_FONTS, "%d: trying `%s' at (%d,%d)dpi as `%s'\n",
+ k, name, hdpi, vdpi, ptr->info.name));
+ /* lookup the font in this class */
+ filename = lookup_font(ptr, name, &hdpi, &vdpi);
+ if(filename)
+ break;
+ ptr = ptr->next;
+ }
+ last = NULL;
+ }
+ if(filename != NULL) {
+ search->id = k-1;
+ search->curr = ptr;
+ search->actual_name = name;
+ search->actual_hdpi = hdpi;
+ search->actual_vdpi = vdpi;
+ search->info = &ptr->info;
+ ptr->links++;
+ return filename;
+ }
+
+ if(kid < MAX_CLASS - 1 && !STREQ(name, _mdvi_fallback_font)) {
+ mdvi_warning("font `%s' at %dx%d not found, trying `%s' instead\n",
+ name, hdpi, vdpi, _mdvi_fallback_font);
+ name = _mdvi_fallback_font;
+ kid = 0;
+ goto again;
+ }
+
+ /* we tried the fallback font, and all the `real' classes. Let's
+ * try the `metric' class now */
+ name = search->wanted_name;
+ hdpi = search->hdpi;
+ vdpi = search->vdpi;
+ if(kid == MAX_CLASS-1) {
+ /* we were looking into this class from the beginning */
+ if(last == NULL) {
+ /* no more fonts to try */
+ return NULL;
+ }
+ ptr = last->next;
+ } else {
+ mdvi_warning("font `%s' not found, trying metric files instead\n",
+ name);
+ ptr = (DviFontClass *)font_classes[MAX_CLASS-1].head;
+ }
+
+metrics:
+ while(ptr) {
+ DEBUG((DBG_FONTS, "metric: trying `%s' at (%d,%d)dpi as `%s'\n",
+ name, hdpi, vdpi, ptr->info.name));
+ filename = lookup_font(ptr, name, &hdpi, &vdpi);
+ if(filename)
+ break;
+ ptr = ptr->next;
+ }
+ if(filename != NULL) {
+ if(STREQ(name, _mdvi_fallback_font))
+ search->id = MAX_CLASS;
+ else
+ search->id = MAX_CLASS - 1;
+ search->curr = ptr;
+ search->actual_name = name;
+ search->actual_hdpi = hdpi;
+ search->actual_vdpi = vdpi;
+ search->info = &ptr->info;
+ ptr->links++;
+ return filename;
+ }
+ if(!STREQ(name, _mdvi_fallback_font)) {
+ mdvi_warning("metric file for `%s' not found, trying `%s' instead\n",
+ name, _mdvi_fallback_font);
+ name = _mdvi_fallback_font;
+ ptr = (DviFontClass *)font_classes[MAX_CLASS-1].head;
+ goto metrics;
+ }
+
+ search->id = -1;
+ search->actual_name = NULL;
+
+ /* tough luck, nothing found */
+ return NULL;
+}
+
+/* called by `font_reference' to do the initial lookup */
+DviFont *mdvi_add_font(const char *name, Int32 sum,
+ int hdpi, int vdpi, Int32 scale)
+{
+ DviFont *font;
+
+ font = xalloc(DviFont);
+ font->fontname = mdvi_strdup(name);
+ SEARCH_INIT(font->search, font->fontname, hdpi, vdpi);
+ font->filename = mdvi_lookup_font(&font->search);
+ if(font->filename == NULL) {
+ /* this answer is final */
+ mdvi_free(font->fontname);
+ mdvi_free(font);
+ return NULL;
+ }
+ font->hdpi = font->search.actual_hdpi;
+ font->vdpi = font->search.actual_vdpi;
+ font->scale = scale;
+ font->design = 0;
+ font->checksum = sum;
+ font->type = 0;
+ font->links = 0;
+ font->loc = 0;
+ font->hic = 0;
+ font->in = NULL;
+ font->chars = NULL;
+ font->subfonts = NULL;
+
+ return font;
+}
+
+int mdvi_font_retry(DviParams *params, DviFont *font)
+{
+ /* try the search again */
+ char *filename;
+
+ ASSERT(font->search.curr != NULL);
+ /* we won't be using this class anymore */
+ font->search.curr->links--;
+
+ filename = mdvi_lookup_font(&font->search);
+ if(filename == NULL)
+ return -1;
+ mdvi_free(font->filename);
+ font->filename = filename;
+ /* copy the new information */
+ font->hdpi = font->search.actual_hdpi;
+ font->vdpi = font->search.actual_vdpi;
+
+ return 0;
+}
diff --git a/backend/dvi/mdvi-lib/gf.c b/backend/dvi/mdvi-lib/gf.c
new file mode 100644
index 00000000..00607ff6
--- /dev/null
+++ b/backend/dvi/mdvi-lib/gf.c
@@ -0,0 +1,395 @@
+/* gf.c - GF font support */
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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.
+ */
+
+/* functions to read GF fonts */
+
+#include <config.h>
+#include <string.h>
+#include "common.h"
+#include "mdvi.h"
+#include "private.h"
+
+/* opcodes */
+
+#define GF_PAINT0 0
+#define GF_PAINT1 64
+#define GF_PAINT2 65
+#define GF_PAINT3 66
+#define GF_BOC 67
+#define GF_BOC1 68
+#define GF_EOC 69
+#define GF_SKIP0 70
+#define GF_SKIP1 71
+#define GF_SKIP2 72
+#define GF_SKIP3 73
+#define GF_NEW_ROW_0 74
+#define GF_NEW_ROW_1 75
+#define GF_NEW_ROW_MAX 238
+#define GF_XXX1 239
+#define GF_XXX2 240
+#define GF_XXX3 241
+#define GF_XXX4 242
+#define GF_YYY 243
+#define GF_NOOP 244
+#define GF_LOC 245
+#define GF_LOC0 246
+#define GF_PRE 247
+#define GF_POST 248
+#define GF_POST_POST 249
+
+#define GF_ID 131
+#define GF_TRAILER 223
+
+#define BLACK 1
+#define WHITE 0
+
+static int gf_load_font __PROTO((DviParams *, DviFont *));
+static int gf_font_get_glyph __PROTO((DviParams *, DviFont *, int));
+
+/* only symbol exported by this file */
+DviFontInfo gf_font_info = {
+ "GF",
+ 0, /* scaling not supported natively */
+ gf_load_font,
+ gf_font_get_glyph,
+ mdvi_shrink_glyph,
+ mdvi_shrink_glyph_grey,
+ NULL, /* free */
+ NULL, /* reset */
+ NULL, /* lookup */
+ kpse_gf_format,
+ NULL
+};
+
+static int gf_read_bitmap(FILE *p, DviFontChar *ch)
+{
+ int op;
+ int min_n, max_n;
+ int min_m, max_m;
+ int paint_switch;
+ int x, y;
+ int bpl;
+ Int32 par;
+ BmUnit *line;
+ BITMAP *map;
+
+ fseek(p, (long)ch->offset, SEEK_SET);
+ op = fuget1(p);
+ if(op == GF_BOC) {
+ /* skip character code */
+ fuget4(p);
+ /* skip pointer */
+ fuget4(p);
+ min_m = fsget4(p);
+ max_m = fsget4(p);
+ min_n = fsget4(p);
+ max_n = fsget4(p);
+ } else if(op == GF_BOC1) {
+ /* skip character code */
+ fuget1(p);
+ min_m = fuget1(p); /* this is max_m - min_m */
+ max_m = fuget1(p);
+ min_n = fuget1(p); /* this is max_n - min_n */
+ max_n = fuget1(p);
+ min_m = max_m - min_m;
+ min_n = max_n - min_n;
+ } else {
+ mdvi_error(_("GF: invalid opcode %d in character %d\n"),
+ op, ch->code);
+ return -1;
+ }
+
+ ch->x = -min_m;
+ ch->y = max_n;
+ ch->width = max_m - min_m + 1;
+ ch->height = max_n - min_n + 1;
+ map = bitmap_alloc(ch->width, ch->height);
+
+ ch->glyph.data = map;
+ ch->glyph.x = ch->x;
+ ch->glyph.y = ch->y;
+ ch->glyph.w = ch->width;
+ ch->glyph.h = ch->height;
+
+#define COLOR(x) ((x) ? "BLACK" : "WHITE")
+
+ paint_switch = WHITE;
+ x = y = 0;
+ line = map->data;
+ bpl = map->stride;
+ DEBUG((DBG_BITMAPS, "(gf) reading character %d\n", ch->code));
+ while((op = fuget1(p)) != GF_EOC) {
+ Int32 n;
+
+ if(feof(p))
+ break;
+ if(op == GF_PAINT0) {
+ DEBUG((DBG_BITMAPS, "(gf) Paint0 %s -> %s\n",
+ COLOR(paint_switch), COLOR(!paint_switch)));
+ paint_switch = !paint_switch;
+ } else if(op <= GF_PAINT3) {
+ if(op < GF_PAINT1)
+ par = op;
+ else
+ par = fugetn(p, op - GF_PAINT1 + 1);
+ if(y >= ch->height || x + par >= ch->width)
+ goto toobig;
+ /* paint everything between columns x and x + par - 1 */
+ DEBUG((DBG_BITMAPS, "(gf) Paint %d %s from (%d,%d)\n",
+ par, COLOR(paint_switch), x, y));
+ if(paint_switch == BLACK)
+ bitmap_paint_bits(line + (x / BITMAP_BITS),
+ x % BITMAP_BITS, par);
+ paint_switch = !paint_switch;
+ x += par;
+ } else if(op >= GF_NEW_ROW_0 && op <= GF_NEW_ROW_MAX) {
+ y++;
+ line = bm_offset(line, bpl);
+ x = op - GF_NEW_ROW_0;
+ paint_switch = BLACK;
+ DEBUG((DBG_BITMAPS, "(gf) new_row_%d\n", x));
+ } else switch(op) {
+ case GF_SKIP0:
+ y++;
+ line = bm_offset(line, bpl);
+ x = 0;
+ paint_switch = WHITE;
+ DEBUG((DBG_BITMAPS, "(gf) skip_0\n"));
+ break;
+ case GF_SKIP1:
+ case GF_SKIP2:
+ case GF_SKIP3:
+ par = fugetn(p, op - GF_SKIP1 + 1);
+ y += par + 1;
+ line = bm_offset(line, (par + 1) * bpl);
+ x = 0;
+ paint_switch = WHITE;
+ DEBUG((DBG_BITMAPS, "(gf) skip_%d\n", op - GF_SKIP1));
+ break;
+ case GF_XXX1:
+ case GF_XXX2:
+ case GF_XXX3:
+ case GF_XXX4: {
+#ifndef NODEBUG
+ char *s;
+
+ s = read_string(p, op - GF_XXX1 + 1, NULL, 0);
+ DEBUG((DBG_SPECIAL, "(gf) Character %d: Special \"%s\"\n",
+ ch->code, s));
+ mdvi_free(s);
+#else
+ n = fugetn(p, op - GF_XXX1 + 1);
+ fseek(p, (long)n, SEEK_CUR);
+#endif
+ break;
+ }
+ case GF_YYY:
+ n = fuget4(p);
+ DEBUG((DBG_SPECIAL, "(gf) Character %d: MF special %u\n",
+ ch->code, n));
+ break;
+ case GF_NOOP:
+ DEBUG((DBG_BITMAPS, "(gf) no_op\n"));
+ break;
+ default:
+ mdvi_error(_("(gf) Character %d: invalid opcode %d\n"),
+ ch->code, op);
+ goto error;
+ }
+ /* chech that we're still inside the bitmap */
+ if(x > ch->width || y > ch->height)
+ goto toobig;
+ DEBUG((DBG_BITMAPS, "(gf) curr_loc @ (%d,%d)\n", x, y));
+ }
+
+ if(op != GF_EOC)
+ goto error;
+ DEBUG((DBG_BITMAPS, "(gf) end of character %d\n", ch->code));
+ return 0;
+
+toobig:
+ mdvi_error(_("(gf) character %d has an incorrect bounding box\n"),
+ ch->code);
+error:
+ bitmap_destroy(map);
+ ch->glyph.data = NULL;
+ return -1;
+}
+
+static int gf_load_font(DviParams *unused, DviFont *font)
+{
+ int i;
+ int n;
+ int loc;
+ int hic;
+ FILE *p;
+ Int32 word;
+ int op;
+ long alpha, beta, z;
+#ifndef NODEBUG
+ char s[256];
+#endif
+
+ p = font->in;
+
+ /* check preamble */
+ loc = fuget1(p); hic = fuget1(p);
+ if(loc != GF_PRE || hic != GF_ID)
+ goto badgf;
+ loc = fuget1(p);
+#ifndef NODEBUG
+ for(i = 0; i < loc; i++)
+ s[i] = fuget1(p);
+ s[i] = 0;
+ DEBUG((DBG_FONTS, "(gf) %s: %s\n", font->fontname, s));
+#else
+ fseek(p, (long)loc, SEEK_CUR);
+#endif
+ /* now read character locators in postamble */
+ if(fseek(p, (long)-1, SEEK_END) == -1)
+ return -1;
+
+ n = 0;
+ while((op = fuget1(p)) == GF_TRAILER) {
+ if(fseek(p, (long)-2, SEEK_CUR) < 0)
+ break;
+ n++;
+ }
+ if(op != GF_ID || n < 4)
+ goto badgf;
+ /* get the pointer to the postamble */
+ fseek(p, (long)-5, SEEK_CUR);
+ op = fuget4(p);
+ /* jump to it */
+ fseek(p, (long)op, SEEK_SET);
+ if(fuget1(p) != GF_POST)
+ goto badgf;
+ /* skip pointer to last EOC */
+ fuget4(p);
+ /* get the design size */
+ font->design = fuget4(p);
+ /* the checksum */
+ word = fuget4(p);
+ if(word && font->checksum && font->checksum != word) {
+ mdvi_warning(_("%s: bad checksum (expected %u, found %u)\n"),
+ font->fontname, font->checksum, word);
+ } else if(!font->checksum)
+ font->checksum = word;
+ /* skip pixels per point ratio */
+ fuget4(p);
+ fuget4(p);
+ font->chars = xnalloc(DviFontChar, 256);
+ for(loc = 0; loc < 256; loc++)
+ font->chars[loc].offset = 0;
+ /* skip glyph "bounding box" */
+ fseek(p, (long)16, SEEK_CUR);
+ loc = 256;
+ hic = -1;
+ TFMPREPARE(font->scale, z, alpha, beta);
+ while((op = fuget1(p)) != GF_POST_POST) {
+ DviFontChar *ch;
+ int cc;
+
+ /* get the character code */
+ cc = fuget1(p);
+ if(cc < loc)
+ loc = cc;
+ if(cc > hic)
+ hic = cc;
+ ch = &font->chars[cc];
+ switch(op) {
+ case GF_LOC:
+ fsget4(p); /* skip dx */
+ fsget4(p); /* skip dy */
+ break;
+ case GF_LOC0:
+ fuget1(p); /* skip dx */
+ /* dy assumed 0 */
+ break;
+ default:
+ mdvi_error(_("%s: junk in postamble\n"), font->fontname);
+ goto error;
+ }
+ ch->code = cc;
+ ch->tfmwidth = fuget4(p);
+ ch->tfmwidth = TFMSCALE(ch->tfmwidth, z, alpha, beta);
+ ch->offset = fuget4(p);
+ if(ch->offset == -1)
+ ch->offset = 0;
+ /* initialize the rest of the glyph information */
+ ch->x = 0;
+ ch->y = 0;
+ ch->width = 0;
+ ch->height = 0;
+ ch->glyph.data = NULL;
+ ch->shrunk.data = NULL;
+ ch->grey.data = NULL;
+ ch->flags = 0;
+ ch->loaded = 0;
+ }
+
+ if(op != GF_POST_POST)
+ goto badgf;
+
+ if(loc > 0 || hic < 255) {
+ /* shrink to optimal size */
+ memmove(font->chars, font->chars + loc,
+ (hic - loc + 1) * sizeof(DviFontChar));
+ font->chars = xresize(font->chars,
+ DviFontChar, hic - loc + 1);
+ }
+ font->loc = loc;
+ font->hic = hic;
+
+ return 0;
+
+badgf:
+ mdvi_error(_("%s: File corrupted, or not a GF file\n"), font->fontname);
+error:
+ if(font->chars) {
+ mdvi_free(font->chars);
+ font->chars = NULL;
+ }
+ font->loc = font->hic = 0;
+ return -1;
+}
+
+static int gf_font_get_glyph(DviParams *params, DviFont *font, int code)
+{
+ DviFontChar *ch;
+
+ if(code < font->loc || code > font->hic || !font->chars)
+ return -1;
+ ch = &font->chars[code - font->loc];
+
+ if(!ch->loaded) {
+ if(ch->offset == 0)
+ return -1;
+ DEBUG((DBG_GLYPHS, "(gf) %s: loading GF glyph for character %d\n",
+ font->fontname, code));
+ if(font->in == NULL && font_reopen(font) < 0)
+ return -1;
+ if(fseek(font->in, ch->offset, SEEK_SET) == -1)
+ return -1;
+ if(gf_read_bitmap(font->in, ch) < 0)
+ return -1;
+ ch->loaded = 1;
+ }
+ return 0;
+}
diff --git a/backend/dvi/mdvi-lib/hash.c b/backend/dvi/mdvi-lib/hash.c
new file mode 100644
index 00000000..d359e3c8
--- /dev/null
+++ b/backend/dvi/mdvi-lib/hash.c
@@ -0,0 +1,224 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include "mdvi.h"
+
+/* simple hash tables for MDVI */
+
+
+struct _DviHashBucket {
+ DviHashBucket *next;
+ DviHashKey key;
+ Ulong hvalue;
+ void *data;
+};
+
+static Ulong hash_string(DviHashKey key)
+{
+ Uchar *p;
+ Ulong h, g;
+
+ for(h = 0, p = (Uchar *)key; *p; p++) {
+ h = (h << 4UL) + *p;
+ if((g = h & 0xf0000000L) != 0) {
+ h ^= (g >> 24UL);
+ h ^= g;
+ }
+ }
+
+ return h;
+}
+
+static int hash_compare(DviHashKey k1, DviHashKey k2)
+{
+ return strcmp((char *)k1, (char *)k2);
+}
+
+void mdvi_hash_init(DviHashTable *hash)
+{
+ hash->buckets = NULL;
+ hash->nbucks = 0;
+ hash->nkeys = 0;
+ hash->hash_func = NULL;
+ hash->hash_comp = NULL;
+ hash->hash_free = NULL;
+}
+
+void mdvi_hash_create(DviHashTable *hash, int size)
+{
+ int i;
+
+ hash->nbucks = size;
+ hash->buckets = xnalloc(DviHashBucket *, size);
+ for(i = 0; i < size; i++)
+ hash->buckets[i] = NULL;
+ hash->hash_func = hash_string;
+ hash->hash_comp = hash_compare;
+ hash->hash_free = NULL;
+ hash->nkeys = 0;
+}
+
+static DviHashBucket *hash_find(DviHashTable *hash, DviHashKey key)
+{
+ Ulong hval;
+ DviHashBucket *buck;
+
+ hval = (hash->hash_func(key) % hash->nbucks);
+
+ for(buck = hash->buckets[hval]; buck; buck = buck->next)
+ if(hash->hash_comp(buck->key, key) == 0)
+ break;
+ return buck;
+}
+
+/* Neither keys nor data are duplicated */
+int mdvi_hash_add(DviHashTable *hash, DviHashKey key, void *data, int rep)
+{
+ DviHashBucket *buck = NULL;
+ Ulong hval;
+
+ if(rep != MDVI_HASH_UNCHECKED) {
+ buck = hash_find(hash, key);
+ if(buck != NULL) {
+ if(buck->data == data)
+ return 0;
+ if(rep == MDVI_HASH_UNIQUE)
+ return -1;
+ if(hash->hash_free != NULL)
+ hash->hash_free(buck->key, buck->data);
+ }
+ }
+ if(buck == NULL) {
+ buck = xalloc(DviHashBucket);
+ buck->hvalue = hash->hash_func(key);
+ hval = (buck->hvalue % hash->nbucks);
+ buck->next = hash->buckets[hval];
+ hash->buckets[hval] = buck;
+ hash->nkeys++;
+ }
+
+ /* save key and data */
+ buck->key = key;
+ buck->data = data;
+
+ return 0;
+}
+
+void *mdvi_hash_lookup(DviHashTable *hash, DviHashKey key)
+{
+ DviHashBucket *buck = hash_find(hash, key);
+
+ return buck ? buck->data : NULL;
+}
+
+static DviHashBucket *hash_remove(DviHashTable *hash, DviHashKey key)
+{
+ DviHashBucket *buck, *last;
+ Ulong hval;
+
+ hval = hash->hash_func(key);
+ hval %= hash->nbucks;
+
+ for(last = NULL, buck = hash->buckets[hval]; buck; buck = buck->next) {
+ if(hash->hash_comp(buck->key, key) == 0)
+ break;
+ last = buck;
+ }
+ if(buck == NULL)
+ return NULL;
+ if(last)
+ last->next = buck->next;
+ else
+ hash->buckets[hval] = buck->next;
+ hash->nkeys--;
+ return buck;
+}
+
+void *mdvi_hash_remove(DviHashTable *hash, DviHashKey key)
+{
+ DviHashBucket *buck = hash_remove(hash, key);
+ void *data = NULL;
+
+ if(buck) {
+ data = buck->data;
+ mdvi_free(buck);
+ }
+ return data;
+}
+
+void *mdvi_hash_remove_ptr(DviHashTable *hash, DviHashKey key)
+{
+ DviHashBucket *buck, *last;
+ Ulong hval;
+ void *ptr;
+
+ hval = hash->hash_func(key);
+ hval %= hash->nbucks;
+
+ for(last = NULL, buck = hash->buckets[hval]; buck; buck = buck->next) {
+ if(buck->key == key)
+ break;
+ last = buck;
+ }
+ if(buck == NULL)
+ return NULL;
+ if(last)
+ last->next = buck->next;
+ else
+ hash->buckets[hval] = buck->next;
+ hash->nkeys--;
+ /* destroy the bucket */
+ ptr = buck->data;
+ mdvi_free(buck);
+ return ptr;
+}
+
+int mdvi_hash_destroy_key(DviHashTable *hash, DviHashKey key)
+{
+ DviHashBucket *buck = hash_remove(hash, key);
+
+ if(buck == NULL)
+ return -1;
+ if(hash->hash_free)
+ hash->hash_free(buck->key, buck->data);
+ mdvi_free(buck);
+ return 0;
+}
+
+void mdvi_hash_reset(DviHashTable *hash, int reuse)
+{
+ int i;
+ DviHashBucket *buck;
+
+ /* remove all keys in the hash table */
+ for(i = 0; i < hash->nbucks; i++) {
+ for(; (buck = hash->buckets[i]); ) {
+ hash->buckets[i] = buck->next;
+ if(hash->hash_free)
+ hash->hash_free(buck->key, buck->data);
+ mdvi_free(buck);
+ }
+ }
+ hash->nkeys = 0;
+ if(!reuse && hash->buckets) {
+ mdvi_free(hash->buckets);
+ hash->buckets = NULL;
+ hash->nbucks = 0;
+ } /* otherwise, it is left empty, ready to be reused */
+}
diff --git a/backend/dvi/mdvi-lib/hash.h b/backend/dvi/mdvi-lib/hash.h
new file mode 100644
index 00000000..b10afd60
--- /dev/null
+++ b/backend/dvi/mdvi-lib/hash.h
@@ -0,0 +1,49 @@
+#ifndef MDVI_HASH
+#define MDVI_HASH
+
+/* Hash tables */
+
+
+typedef struct _DviHashBucket DviHashBucket;
+typedef struct _DviHashTable DviHashTable;
+
+/*
+ * Hash tables
+ */
+
+typedef Uchar *DviHashKey;
+#define MDVI_KEY(x) ((DviHashKey)(x))
+
+typedef Ulong (*DviHashFunc) __PROTO((DviHashKey key));
+typedef int (*DviHashComp) __PROTO((DviHashKey key1, DviHashKey key2));
+typedef void (*DviHashFree) __PROTO((DviHashKey key, void *data));
+
+
+struct _DviHashTable {
+ DviHashBucket **buckets;
+ int nbucks;
+ int nkeys;
+ DviHashFunc hash_func;
+ DviHashComp hash_comp;
+ DviHashFree hash_free;
+};
+#define MDVI_EMPTY_HASH_TABLE {NULL, 0, 0, NULL, NULL, NULL}
+
+#define MDVI_HASH_REPLACE 0
+#define MDVI_HASH_UNIQUE 1
+#define MDVI_HASH_UNCHECKED 2
+
+extern void mdvi_hash_init __PROTO((DviHashTable *));
+extern void mdvi_hash_create __PROTO((DviHashTable *, int));
+extern int mdvi_hash_add __PROTO((DviHashTable *, DviHashKey, void *, int));
+extern int mdvi_hash_destroy_key __PROTO((DviHashTable *, DviHashKey));
+extern void mdvi_hash_reset __PROTO((DviHashTable *, int));
+extern void *mdvi_hash_lookup __PROTO((DviHashTable *, DviHashKey));
+extern void *mdvi_hash_remove __PROTO((DviHashTable *, DviHashKey));
+extern void *mdvi_hash_remove_ptr __PROTO((DviHashTable *, DviHashKey));
+
+#define mdvi_hash_flush(h) mdvi_hash_reset((h), 1)
+#define mdvi_hash_destroy(h) mdvi_hash_reset((h), 0)
+
+#endif
+
diff --git a/backend/dvi/mdvi-lib/list.c b/backend/dvi/mdvi-lib/list.c
new file mode 100644
index 00000000..eb73a178
--- /dev/null
+++ b/backend/dvi/mdvi-lib/list.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include "common.h"
+
+void listh_init(ListHead *head)
+{
+ head->head = head->tail = NULL;
+ head->count = 0;
+}
+
+void listh_prepend(ListHead *head, List *list)
+{
+ list->prev = NULL;
+ list->next = head->head;
+ if(head->head)
+ head->head->prev = list;
+ head->head = list;
+ if(!head->tail)
+ head->tail = list;
+ head->count++;
+}
+
+void listh_append(ListHead *head, List *list)
+{
+ list->next = NULL;
+ list->prev = head->tail;
+ if(head->tail)
+ head->tail->next = list;
+ else
+ head->head = list;
+ head->tail = list;
+ head->count++;
+}
+
+void listh_add_before(ListHead *head, List *at, List *list)
+{
+ if(at == head->head || head->head == NULL)
+ listh_prepend(head, list);
+ else {
+ list->next = at;
+ list->prev = at->prev;
+ at->prev = list;
+ head->count++;
+ }
+}
+
+void listh_add_after(ListHead *head, List *at, List *list)
+{
+ if(at == head->tail || !head->tail)
+ listh_append(head, list);
+ else {
+ list->prev = at;
+ list->next = at->next;
+ at->next = list;
+ head->count++;
+ }
+}
+
+void listh_remove(ListHead *head, List *list)
+{
+ if(list == head->head) {
+ head->head = list->next;
+ if(head->head)
+ head->head->prev = NULL;
+ } else if(list == head->tail) {
+ head->tail = list->prev;
+ if(head->tail)
+ head->tail->next = NULL;
+ } else {
+ list->next->prev = list->prev;
+ list->prev->next = list->next;
+ }
+ if(--head->count == 0)
+ head->head = head->tail = NULL;
+}
+
+void listh_concat(ListHead *h1, ListHead *h2)
+{
+ if(h2->head == NULL)
+ ; /* do nothing */
+ else if(h1->tail == NULL)
+ h1->head = h2->head;
+ else {
+ h1->tail->next = h2->head;
+ h2->head->prev = h1->tail;
+ }
+ h1->tail = h2->tail;
+ h1->count += h2->count;
+}
+
+void listh_catcon(ListHead *h1, ListHead *h2)
+{
+ if(h2->head == NULL)
+ ; /* do nothing */
+ else if(h1->head == NULL)
+ h1->tail = h2->tail;
+ else {
+ h1->head->prev = h2->tail;
+ h2->tail->next = h1->head;
+ }
+ h1->head = h2->head;
+ h1->count += h2->count;
+}
diff --git a/backend/dvi/mdvi-lib/mdvi.h b/backend/dvi/mdvi-lib/mdvi.h
new file mode 100644
index 00000000..327e61fe
--- /dev/null
+++ b/backend/dvi/mdvi-lib/mdvi.h
@@ -0,0 +1,623 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 _MDVI_DVI_H
+#define _MDVI_DVI_H 1
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <math.h>
+
+#include "sysdeps.h"
+#include "bitmap.h"
+#include "common.h"
+#include "defaults.h"
+#include "dviopcodes.h"
+
+typedef struct _DviGlyph DviGlyph;
+typedef struct _DviDevice DviDevice;
+typedef struct _DviFontChar DviFontChar;
+typedef struct _DviFontRef DviFontRef;
+typedef struct _DviFontInfo DviFontInfo;
+typedef struct _DviFont DviFont;
+typedef struct _DviState DviState;
+typedef struct _DviPageSpec *DviPageSpec;
+typedef struct _DviParams DviParams;
+typedef struct _DviBuffer DviBuffer;
+typedef struct _DviContext DviContext;
+typedef struct _DviRange DviRange;
+typedef struct _DviColorPair DviColorPair;
+typedef struct _DviSection DviSection;
+typedef struct _TFMChar TFMChar;
+typedef struct _TFMInfo TFMInfo;
+typedef struct _DviFontSearch DviFontSearch;
+/* this is an opaque type */
+typedef struct _DviFontClass DviFontClass;
+
+typedef void (*DviFreeFunc) __PROTO((void *));
+typedef void (*DviFree2Func) __PROTO((void *, void *));
+
+typedef Ulong DviColor;
+
+#ifdef TRUE
+#undef TRUE
+#endif
+#ifdef FALSE
+#undef FALSE
+#endif
+
+typedef enum {
+ FALSE = 0,
+ TRUE = 1
+} DviBool;
+
+#include "hash.h"
+#include "paper.h"
+
+/*
+ * information about a page:
+ * pagenum[0] = offset to BOP
+ * pagenum[1], ..., pagenum[10] = TeX \counters
+ */
+typedef long PageNum[11];
+
+/* this structure contains the platform-specific information
+ * required to interpret a DVI file */
+
+typedef void (*DviGlyphDraw) __PROTO((DviContext *context,
+ DviFontChar *glyph,
+ int x, int y));
+
+typedef void (*DviRuleDraw) __PROTO((DviContext *context,
+ int x, int y,
+ Uint width, Uint height, int fill));
+
+typedef int (*DviColorScale) __PROTO((void *device_data,
+ Ulong *pixels,
+ int npixels,
+ Ulong foreground,
+ Ulong background,
+ double gamma,
+ int density));
+typedef void *(*DviCreateImage) __PROTO((void *device_data,
+ Uint width,
+ Uint height,
+ Uint bpp));
+typedef void (*DviFreeImage) __PROTO((void *image));
+typedef void (*DviPutPixel) __PROTO((void *image, int x, int y, Ulong color));
+typedef void (*DviDevDestroy) __PROTO((void *data));
+typedef void (*DviRefresh) __PROTO((DviContext *dvi, void *device_data));
+typedef void (*DviSetColor) __PROTO((void *device_data, Ulong, Ulong));
+typedef void (*DviPSDraw) __PROTO((DviContext *context,
+ const char *filename,
+ int x, int y,
+ Uint width, Uint height));
+
+struct _DviDevice {
+ DviGlyphDraw draw_glyph;
+ DviRuleDraw draw_rule;
+ DviColorScale alloc_colors;
+ DviCreateImage create_image;
+ DviFreeImage free_image;
+ DviPutPixel put_pixel;
+ DviDevDestroy dev_destroy;
+ DviRefresh refresh;
+ DviSetColor set_color;
+ DviPSDraw draw_ps;
+ void * device_data;
+};
+
+/*
+ * Fonts
+ */
+
+#include "fontmap.h"
+
+struct _TFMChar {
+ Int32 present;
+ Int32 advance; /* advance */
+ Int32 height; /* ascent */
+ Int32 depth; /* descent */
+ Int32 left; /* leftSideBearing */
+ Int32 right; /* rightSideBearing */
+};
+
+struct _TFMInfo {
+ int type; /* DviFontAFM, DviFontTFM, DviFontOFM */
+ Uint32 checksum;
+ Uint32 design;
+ int loc;
+ int hic;
+ char coding[64];
+ char family[64];
+ TFMChar *chars;
+};
+
+struct _DviGlyph {
+ short x, y; /* origin */
+ Uint w, h; /* dimensions */
+ void *data; /* bitmap or XImage */
+};
+
+typedef void (*DviFontShrinkFunc)
+ __PROTO((DviContext *, DviFont *, DviFontChar *, DviGlyph *));
+typedef int (*DviFontLoadFunc) __PROTO((DviParams *, DviFont *));
+typedef int (*DviFontGetGlyphFunc) __PROTO((DviParams *, DviFont *, int));
+typedef void (*DviFontFreeFunc) __PROTO((DviFont *));
+typedef void (*DviFontResetFunc) __PROTO((DviFont *));
+typedef char *(*DviFontLookupFunc) __PROTO((const char *, Ushort *, Ushort *));
+typedef int (*DviFontEncodeFunc) __PROTO((DviParams *, DviFont *, DviEncoding *));
+
+struct _DviFontInfo {
+ char *name; /* human-readable format identifying string */
+ int scalable; /* does it support scaling natively? */
+ DviFontLoadFunc load;
+ DviFontGetGlyphFunc getglyph;
+ DviFontShrinkFunc shrink0;
+ DviFontShrinkFunc shrink1;
+ DviFontFreeFunc freedata;
+ DviFontResetFunc reset;
+ DviFontLookupFunc lookup;
+ int kpse_type;
+ void * private;
+};
+
+struct _DviFontChar {
+ Uint32 offset;
+ Int16 code; /* format-dependent, not used by MDVI */
+ Int16 width;
+ Int16 height;
+ Int16 x;
+ Int16 y;
+ Int32 tfmwidth;
+ Ushort flags;
+#ifdef __STRICT_ANSI__
+ Ushort loaded;
+ Ushort missing;
+#else
+ Ushort loaded : 1,
+ missing : 1;
+#endif
+ Ulong fg;
+ Ulong bg;
+ BITMAP *glyph_data;
+ /* data for shrunk bitimaps */
+ DviGlyph glyph;
+ DviGlyph shrunk;
+ DviGlyph grey;
+};
+
+struct _DviFontRef {
+ DviFontRef *next;
+ DviFont *ref;
+ Int32 fontid;
+};
+
+typedef enum {
+ DviFontAny = -1,
+ DviFontPK = 0,
+ DviFontGF = 1,
+ DviFontVF = 2,
+ DviFontTFM = 3,
+ DviFontT1 = 4,
+ DviFontTT = 5,
+ DviFontAFM = 6,
+ DviFontOFM = 7
+} DviFontType;
+
+struct _DviFontSearch {
+ int id;
+ Ushort hdpi;
+ Ushort vdpi;
+ Ushort actual_hdpi;
+ Ushort actual_vdpi;
+ const char *wanted_name;
+ const char *actual_name;
+ DviFontClass *curr;
+ DviFontInfo *info;
+};
+
+/* this is a kludge, I know */
+#define ISVIRTUAL(font) ((font)->search.info->getglyph == NULL)
+#define SEARCH_DONE(s) ((s).id < 0)
+#define SEARCH_INIT(s, name, h, v) do { \
+ (s).id = 0; \
+ (s).curr = NULL; \
+ (s).hdpi = (h); \
+ (s).vdpi = (v); \
+ (s).wanted_name = (name); \
+ (s).actual_name = NULL; \
+ } while(0)
+
+struct _DviFont {
+ DviFont *next;
+ DviFont *prev;
+ int type;
+ Int32 checksum;
+ int hdpi;
+ int vdpi;
+ Int32 scale;
+ Int32 design;
+ FILE *in;
+ char *fontname;
+ char *filename;
+ int links;
+ int loc;
+ int hic;
+ Uint flags;
+ DviFontSearch search;
+ DviFontChar *chars;
+ DviFontRef *subfonts;
+ void *private;
+};
+
+/*
+ * Dvi context
+ */
+
+typedef enum {
+ MDVI_ORIENT_TBLR = 0, /* top to bottom, left to right */
+ MDVI_ORIENT_TBRL = 1, /* top to bottom, right to left */
+ MDVI_ORIENT_BTLR = 2, /* bottom to top, left to right */
+ MDVI_ORIENT_BTRL = 3, /* bottom to top, right to left */
+ MDVI_ORIENT_RP90 = 4, /* rotated +90 degrees (counter-clockwise) */
+ MDVI_ORIENT_RM90 = 5, /* rotated -90 degrees (clockwise) */
+ MDVI_ORIENT_IRP90 = 6, /* flip horizontally, then rotate by +90 */
+ MDVI_ORIENT_IRM90 = 7 /* rotate by -90, then flip horizontally */
+} DviOrientation;
+
+typedef enum {
+ MDVI_PAGE_SORT_UP, /* up, using \counter0 */
+ MDVI_PAGE_SORT_DOWN, /* down, using \counter0 */
+ MDVI_PAGE_SORT_RANDOM, /* randomly */
+ MDVI_PAGE_SORT_DVI_UP, /* up, by location in DVI file */
+ MDVI_PAGE_SORT_DVI_DOWN, /* down, by location in DVI file */
+ MDVI_PAGE_SORT_NONE /* don't sort */
+} DviPageSort;
+
+struct _DviParams {
+ double mag; /* magnification */
+ double conv; /* horizontal DVI -> pixel */
+ double vconv; /* vertical DVI -> pixel */
+ double tfm_conv; /* TFM -> DVI */
+ double gamma; /* gamma correction factor */
+ Uint dpi; /* horizontal resolution */
+ Uint vdpi; /* vertical resolution */
+ int hshrink; /* horizontal shrinking factor */
+ int vshrink; /* vertical shrinking factor */
+ Uint density; /* pixel density */
+ Uint flags; /* flags (see MDVI_PARAM macros) */
+ int hdrift; /* max. horizontal drift */
+ int vdrift; /* max. vertical drift */
+ int vsmallsp; /* small vertical space */
+ int thinsp; /* small horizontal space */
+ int layer; /* visible layer (for layered DVI files) */
+ Ulong fg; /* foreground color */
+ Ulong bg; /* background color */
+ DviOrientation orientation; /* page orientation */
+ int base_x;
+ int base_y;
+};
+
+typedef enum {
+ MDVI_PARAM_LAST = 0,
+ MDVI_SET_DPI = 1,
+ MDVI_SET_XDPI = 2,
+ MDVI_SET_YDPI = 3,
+ MDVI_SET_SHRINK = 4,
+ MDVI_SET_XSHRINK = 5,
+ MDVI_SET_YSHRINK = 6,
+ MDVI_SET_GAMMA = 7,
+ MDVI_SET_DENSITY = 8,
+ MDVI_SET_MAGNIFICATION = 9,
+ MDVI_SET_DRIFT = 10,
+ MDVI_SET_HDRIFT = 11,
+ MDVI_SET_VDRIFT = 12,
+ MDVI_SET_ORIENTATION = 13,
+ MDVI_SET_FOREGROUND = 14,
+ MDVI_SET_BACKGROUND = 15
+} DviParamCode;
+
+struct _DviBuffer {
+ Uchar *data;
+ size_t size; /* allocated size */
+ size_t length; /* amount of data buffered */
+ size_t pos; /* current position in buffer */
+ int frozen; /* can we free this data? */
+};
+
+/* DVI registers */
+struct _DviState {
+ int h;
+ int v;
+ int hh;
+ int vv;
+ int w;
+ int x;
+ int y;
+ int z;
+};
+
+struct _DviColorPair {
+ Ulong fg;
+ Ulong bg;
+};
+
+struct _DviContext {
+ char *filename; /* name of the DVI file */
+ FILE *in; /* from here we read */
+ char *fileid; /* from preamble */
+ int npages; /* number of pages */
+ int currpage; /* currrent page (0 based) */
+ int depth; /* recursion depth */
+ DviBuffer buffer; /* input buffer */
+ DviParams params; /* parameters */
+ DviPaper paper; /* paper type */
+ Int32 num; /* numerator */
+ Int32 den; /* denominator */
+ DviFontRef *fonts; /* fonts used in this file */
+ DviFontRef **fontmap; /* for faster id lookups */
+ DviFontRef *currfont; /* current font */
+ int nfonts; /* # of fonts used in this job */
+ Int32 dvimag; /* original magnification */
+ double dviconv; /* unshrunk scaling factor */
+ double dvivconv; /* unshrunk scaling factor (vertical) */
+ int dvi_page_w; /* unscaled page width */
+ int dvi_page_h; /* unscaled page height */
+ Ulong modtime; /* file modification time */
+ PageNum *pagemap; /* page table */
+ DviState pos; /* registers */
+ DviPageSpec *pagesel; /* page selection data */
+ int curr_layer; /* current layer */
+ DviState *stack; /* DVI stack */
+ int stacksize; /* stack depth */
+ int stacktop; /* stack pointer */
+ DviDevice device; /* device-specific routines */
+ Ulong curr_fg; /* rendering color */
+ Ulong curr_bg;
+
+ DviColorPair *color_stack;
+ int color_top;
+ int color_size;
+
+ DviFontRef *(*findref) __PROTO((DviContext *, Int32));
+ void *user_data; /* client data attached to this context */
+};
+
+typedef enum {
+ MDVI_RANGE_BOUNDED, /* range is finite */
+ MDVI_RANGE_LOWER, /* range has a lower bound */
+ MDVI_RANGE_UPPER, /* range has an upper bound */
+ MDVI_RANGE_UNBOUNDED /* range has no bounds at all */
+} DviRangeType;
+
+struct _DviRange {
+ DviRangeType type; /* one of the above */
+ int from; /* lower bound */
+ int to; /* upper bound */
+ int step; /* step */
+};
+
+
+typedef void (*DviSpecialHandler)
+ __PROTO((DviContext *dvi, const char *prefix, const char *arg));
+
+#define RANGE_HAS_LOWER(x) \
+ ((x) == MDVI_RANGE_BOUNDED || (x) == MDVI_RANGE_LOWER)
+#define RANGE_HAS_UPPER(x) \
+ ((x) == MDVI_RANGE_BOUNDED || (x) == MDVI_RANGE_UPPER)
+
+/*
+ * Macros and prototypes
+ */
+
+#define MDVI_PARAM_ANTIALIASED 1
+#define MDVI_PARAM_MONO 2
+#define MDVI_PARAM_CHARBOXES 4
+#define MDVI_PARAM_SHOWUNDEF 8
+#define MDVI_PARAM_DELAYFONTS 16
+
+/*
+ * The FALLBACK priority class is reserved for font formats that
+ * contain no glyph information and are to be used as a last
+ * resort (e.g. TFM, AFM)
+ */
+#define MDVI_FONTPRIO_FALLBACK -3
+#define MDVI_FONTPRIO_LOWEST -2
+#define MDVI_FONTPRIO_LOW -1
+#define MDVI_FONTPRIO_NORMAL 0
+#define MDVI_FONTPRIO_HIGH 1
+#define MDVI_FONTPRIO_HIGHEST 2
+
+#define MDVI_FONT_ENCODED (1 << 0)
+
+#define MDVI_GLYPH_EMPTY ((void *)1)
+/* does the glyph have a non-empty bitmap/image? */
+#define MDVI_GLYPH_NONEMPTY(x) ((x) && (x) != MDVI_GLYPH_EMPTY)
+/* has the glyph been loaded from disk? */
+#define MDVI_GLYPH_UNSET(x) ((x) == NULL)
+/* do we have only a bounding box for this glyph? */
+#define MDVI_GLYPH_ISEMPTY(x) ((x) == MDVI_GLYPH_EMPTY)
+
+#define MDVI_ENABLED(d,x) ((d)->params.flags & (x))
+#define MDVI_DISABLED(d,x) !MDVI_ENABLED((d), (x))
+
+#define MDVI_LASTPAGE(d) ((d)->npages - 1)
+#define MDVI_NPAGES(d) (d)->npages
+#define MDVI_VALIDPAGE(d,p) ((p) >= 0 && (p) <= MDVI_LASTPAGE(d))
+#define MDVI_FLAGS(d) (d)->params.flags
+#define MDVI_SHRINK_FROM_DPI(d) Max(1, (d) / 75)
+#define MDVI_CURRFG(d) (d)->curr_fg
+#define MDVI_CURRBG(d) (d)->curr_bg
+
+#define pixel_round(d,v) (int)((d)->params.conv * (v) + 0.5)
+#define vpixel_round(d,v) (int)((d)->params.vconv * (v) + 0.5)
+#define rule_round(d,v) (int)((d)->params.conv * (v) + 0.99999) /*9999999)*/
+#define vrule_round(d,v) (int)((d)->params.vconv * (v) + 0.99999)
+
+extern int mdvi_reload __PROTO((DviContext *, DviParams *));
+extern void mdvi_setpage __PROTO((DviContext *, int));
+extern int mdvi_dopage __PROTO((DviContext *, int));
+extern void mdvi_shrink_glyph __PROTO((DviContext *, DviFont *, DviFontChar *, DviGlyph *));
+extern void mdvi_shrink_box __PROTO((DviContext *, DviFont *, DviFontChar *, DviGlyph *));
+extern void mdvi_shrink_glyph_grey __PROTO((DviContext *, DviFont *, DviFontChar *, DviGlyph *));
+extern int mdvi_find_tex_page __PROTO((DviContext *, int));
+extern int mdvi_configure __PROTO((DviContext *, DviParamCode, ...));
+
+extern int get_tfm_chars __PROTO((DviParams *, DviFont *, TFMInfo *, int));
+extern int tfm_load_file __PROTO((const char *, TFMInfo *));
+extern int afm_load_file __PROTO((const char *, TFMInfo *));
+extern TFMInfo *get_font_metrics __PROTO((const char *, int, const char *));
+extern char *lookup_font_metrics __PROTO((const char *, int *));
+extern void free_font_metrics __PROTO((TFMInfo *));
+extern void flush_font_metrics __PROTO((void));
+
+#define get_metrics(name) get_font_metrics((name), DviFontAny, NULL)
+
+extern void mdvi_sort_pages __PROTO((DviContext *, DviPageSort));
+
+extern void mdvi_init_kpathsea __PROTO((const char *, const char *, const char *, int, const char *));
+
+extern DviContext* mdvi_init_context __PROTO((DviParams *, DviPageSpec *, const char *));
+extern void mdvi_destroy_context __PROTO((DviContext *));
+
+/* helper macros that call mdvi_configure() */
+#define mdvi_config_one(d,x,y) mdvi_configure((d), (x), (y), MDVI_PARAM_LAST)
+#define mdvi_set_dpi(d,x) mdvi_config_one((d), MDVI_SET_DPI, (x))
+#define mdvi_set_xdpi(d,x) mdvi_config_one((d), MDVI_SET_XDPI, (x))
+#define mdvi_set_ydpi(d,x) mdvi_config_one((d), MDVI_SET_YDPI, (x))
+#define mdvi_set_hshrink(d,h) mdvi_config_one((d), MDVI_SET_XSHRINK, (h))
+#define mdvi_set_vshrink(d,h) mdvi_config_one((d), MDVI_SET_YSHRINK, (h))
+#define mdvi_set_gamma(d,g) mdvi_config_one((d), MDVI_SET_GAMMA, (g))
+#define mdvi_set_density(d,x) mdvi_config_one((d), MDVI_SET_DENSITY, (x))
+#define mdvi_set_drift(d,x) mdvi_config_one((d), MDVI_SET_DRIFT, (x))
+#define mdvi_set_hdrift(d,h) mdvi_config_one((d), MDVI_SET_HDRIFT, (h))
+#define mdvi_set_vdrift(d,v) mdvi_config_one((d), MDVI_SET_VDRIFT, (v))
+#define mdvi_set_mag(d,m) \
+ mdvi_config_one((d), MDVI_SET_MAGNIFICATION, (m))
+#define mdvi_set_foreground(d,x) \
+ mdvi_config_one((d), MDVI_SET_FOREGROUND, (x))
+#define mdvi_set_background(d,x) \
+ mdvi_config_one((d), MDVI_SET_BACKGROUND, (x))
+#define mdvi_set_orientation(d,x) \
+ mdvi_config_one((d), MDVI_SET_ORIENTATION, (x))
+#define mdvi_set_shrink(d,h,v) \
+ mdvi_configure((d), MDVI_SET_XSHRINK, (h), \
+ MDVI_SET_YSHRINK, (v), MDVI_PARAM_LAST)
+
+extern DviRange* mdvi_parse_range __PROTO((const char *, DviRange *, int *, char **));
+extern DviPageSpec* mdvi_parse_page_spec __PROTO((const char *));
+extern void mdvi_free_page_spec __PROTO((DviPageSpec *));
+extern int mdvi_in_range __PROTO((DviRange *, int, int));
+extern int mdvi_range_length __PROTO((DviRange *, int));
+extern int mdvi_page_selected __PROTO((DviPageSpec *, PageNum, int));
+
+/* Specials */
+extern int mdvi_register_special __PROTO((
+ const char *label,
+ const char *prefix,
+ const char *regex,
+ DviSpecialHandler handler,
+ int replace));
+extern int mdvi_unregister_special __PROTO((const char *prefix));
+extern int mdvi_do_special __PROTO((DviContext *dvi, char *dvi_special));
+extern void mdvi_flush_specials __PROTO((void));
+
+/* Fonts */
+
+#define MDVI_FONTSEL_BITMAP (1 << 0)
+#define MDVI_FONTSEL_GREY (1 << 1)
+#define MDVI_FONTSEL_GLYPH (1 << 2)
+
+#define FONTCHAR(font, code) \
+ (((code) < font->loc || (code) > font->hic || !(font)->chars) ? \
+ NULL : &font->chars[(code) - (font)->loc])
+#define FONT_GLYPH_COUNT(font) ((font)->hic - (font)->loc + 1)
+
+#define glyph_present(x) ((x) && (x)->offset)
+
+/* create a reference to a font */
+extern DviFontRef *font_reference __PROTO((DviParams *params,
+ Int32 dvi_id,
+ const char *font_name,
+ Int32 checksum,
+ int xdpi,
+ int ydpi,
+ Int32 scale_factor));
+
+/* drop a reference to a font */
+extern void font_drop_one __PROTO((DviFontRef *));
+
+/* drop a chain of references */
+extern void font_drop_chain __PROTO((DviFontRef *));
+
+/* destroy selected information for a glyph */
+extern void font_reset_one_glyph __PROTO((DviDevice *, DviFontChar *, int));
+
+/* destroy selected information for all glyphs in a font */
+extern void font_reset_font_glyphs __PROTO((DviDevice *, DviFont *, int));
+
+/* same for a chain of font references */
+extern void font_reset_chain_glyphs __PROTO((DviDevice *, DviFontRef *, int));
+
+extern void font_finish_definitions __PROTO((DviContext *));
+
+/* lookup an id # in a reference chain */
+extern DviFontRef* font_find_flat __PROTO((DviContext *, Int32));
+extern DviFontRef* font_find_mapped __PROTO((DviContext *, Int32));
+
+/* called to reopen (or rewind) a font file */
+extern int font_reopen __PROTO((DviFont *));
+
+/* reads a glyph from a font, and makes all necessary transformations */
+extern DviFontChar* font_get_glyph __PROTO((DviContext *, DviFont *, int));
+
+/* transform a glyph according to the given orientation */
+extern void font_transform_glyph __PROTO((DviOrientation, DviGlyph *));
+
+/* destroy all fonts that are not being used, returns number of fonts freed */
+extern int font_free_unused __PROTO((DviDevice *));
+
+#define font_free_glyph(dev, font, code) \
+ font_reset_one_glyph((dev), \
+ FONTCHAR((font), (code)), MDVI_FONTSEL_GLYPH)
+
+extern int mdvi_encode_font __PROTO((DviParams *, DviFont *));
+
+
+/* font lookup functions */
+extern int mdvi_register_font_type __PROTO((DviFontInfo *, int));
+extern char **mdvi_list_font_class __PROTO((int));
+extern int mdvi_get_font_classes __PROTO((void));
+extern int mdvi_unregister_font_type __PROTO((const char *, int));
+extern char *mdvi_lookup_font __PROTO((DviFontSearch *));
+extern DviFont *mdvi_add_font __PROTO((const char *, Int32, int, int, Int32));
+extern int mdvi_font_retry __PROTO((DviParams *, DviFont *));
+
+/* Miscellaneous */
+
+extern int mdvi_set_logfile __PROTO((const char *));
+extern int mdvi_set_logstream __PROTO((FILE *));
+extern int mdvi_set_loglevel __PROTO((int));
+
+#define mdvi_stop_logging(x) mdvi_set_logstream(NULL)
+
+/* this will check the environment and then `texmf.cnf' for
+ * the given name changed to lowercase, and `_' changed to `-' */
+extern char* mdvi_getenv __PROTO((const char *));
+
+#endif /* _MDVI_DVI_H */
diff --git a/backend/dvi/mdvi-lib/pagesel.c b/backend/dvi/mdvi-lib/pagesel.c
new file mode 100644
index 00000000..5a153955
--- /dev/null
+++ b/backend/dvi/mdvi-lib/pagesel.c
@@ -0,0 +1,491 @@
+/* pagesel.c -- Page selection mechanism */
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <string.h>
+#include <limits.h>
+
+#include "mdvi.h"
+#include "private.h"
+
+char *program_name = "page";
+
+struct _DviPageSpec {
+ DviRange *ranges;
+ int nranges;
+};
+
+DviRange *mdvi_parse_range(const char *format, DviRange *limit, int *nitems, char **endptr)
+{
+ int quoted;
+ int size;
+ int curr;
+ int done;
+ int lower;
+ int upper;
+ int type;
+ char * cp;
+ char * copy;
+ char * text;
+ DviRange one;
+ DviRange *range;
+
+ quoted = (*format == '{');
+ if(quoted) format++;
+
+ size = 0;
+ curr = 0;
+ range = NULL;
+ copy = mdvi_strdup(format);
+ done = 0;
+ lower = 0;
+ upper = 0;
+ type = MDVI_RANGE_UNBOUNDED;
+
+ if(limit) {
+ switch(limit->type) {
+ case MDVI_RANGE_BOUNDED:
+ lower = limit->from;
+ upper = limit->to;
+ break;
+ case MDVI_RANGE_UPPER:
+ lower = INT_MIN;
+ upper = limit->to;
+ break;
+ case MDVI_RANGE_LOWER:
+ lower = limit->from;
+ upper = INT_MAX;
+ break;
+ case MDVI_RANGE_UNBOUNDED:
+ lower = INT_MIN;
+ upper = INT_MAX;
+ break;
+ }
+ type = limit->type;
+ } else {
+ lower = INT_MIN;
+ upper = INT_MAX;
+ type = MDVI_RANGE_UNBOUNDED;
+ }
+ one.type = type;
+ one.from = lower;
+ one.to = upper;
+ one.step = 1;
+ for(cp = text = copy; !done; cp++) {
+ char *p;
+ int f, t, s;
+ int ch;
+ int this_type;
+ int lower_given = 0;
+ int upper_given = 0;
+
+ if(*cp == 0 || *cp == '.' || (*cp == '}' && quoted))
+ done = 1;
+ else if(*cp != ',')
+ continue;
+
+ if(text == cp)
+ continue;
+ ch = *cp;
+ *cp = 0;
+ f = lower;
+ t = upper;
+ s = 1;
+
+ p = strchr(text, ':');
+ if(p) *p++ = 0;
+ if(*text) {
+ lower_given = 1;
+ f = strtol(text, NULL, 0);
+ }
+ if(p == NULL) {
+ if(lower_given) {
+ upper_given = 1;
+ t = f; s = 1;
+ }
+ goto finish;
+ }
+ text = p;
+ p = strchr(text, ':');
+ if(p) *p++ = 0;
+ if(*text) {
+ upper_given = 1;
+ t = strtol(text, NULL, 0);
+ }
+ if(p == NULL)
+ goto finish;
+ text = p;
+ if(*text)
+ s = strtol(text, NULL, 0);
+finish:
+ if(lower_given && upper_given)
+ this_type = MDVI_RANGE_BOUNDED;
+ else if(lower_given) {
+ if(!RANGE_HAS_UPPER(type))
+ this_type = MDVI_RANGE_LOWER;
+ else
+ this_type = MDVI_RANGE_BOUNDED;
+ t = upper;
+ } else if(upper_given) {
+ if(RANGE_HAS_UPPER(one.type)) {
+ one.to++;
+ this_type = MDVI_RANGE_BOUNDED;
+ } else {
+ one.to = lower;
+ if(!RANGE_HAS_LOWER(type))
+ this_type = MDVI_RANGE_UPPER;
+ else
+ this_type = MDVI_RANGE_BOUNDED;
+ }
+ f = one.to;
+ } else {
+ this_type = type;
+ f = lower;
+ t = upper;
+ }
+ one.type = this_type;
+ one.to = t;
+ one.from = f;
+ one.step = s;
+
+ if(curr == size) {
+ size += 8;
+ range = mdvi_realloc(range, size * sizeof(DviRange));
+ }
+ memcpy(&range[curr++], &one, sizeof(DviRange));
+ *cp = ch;
+ text = cp + 1;
+ }
+ if(done)
+ cp--;
+ if(quoted && *cp == '}')
+ cp++;
+ if(endptr)
+ *endptr = (char *)format + (cp - copy);
+ if(curr && curr < size)
+ range = mdvi_realloc(range, curr * sizeof(DviRange));
+ *nitems = curr;
+ mdvi_free(copy);
+ return range;
+}
+
+DviPageSpec *mdvi_parse_page_spec(const char *format)
+{
+ /*
+ * a page specification looks like this:
+ * '{'RANGE_SPEC'}' for a DVI spec
+ * '{'RANGE_SPEC'}' '.' ... for a TeX spec
+ */
+ DviPageSpec *spec;
+ DviRange *range;
+ int count;
+ int i;
+ char *ptr;
+
+ spec = xnalloc(struct _DviPageSpec *, 11);
+ for(i = 0; i < 11; i++)
+ spec[i] = NULL;
+
+ /* check what kind of spec we're parsing */
+ if(*format != '*') {
+ range = mdvi_parse_range(format, NULL, &count, &ptr);
+ if(ptr == format) {
+ if(range) mdvi_free(range);
+ mdvi_error(_("invalid page specification `%s'\n"), format);
+ return NULL;
+ }
+ } else
+ range = NULL;
+
+ if(*format == 'D' || *format == 'd' || *ptr != '.')
+ i = 0;
+ else
+ i = 1;
+
+ if(range) {
+ spec[i] = xalloc(struct _DviPageSpec);
+ spec[i]->ranges = range;
+ spec[i]->nranges = count;
+ } else
+ spec[i] = NULL;
+
+ if(*ptr != '.') {
+ if(*ptr)
+ mdvi_warning(_("garbage after DVI page specification ignored\n"));
+ return spec;
+ }
+
+ for(i++; *ptr == '.' && i <= 10; i++) {
+ ptr++;
+ if(*ptr == '*') {
+ ptr++;
+ range = NULL;
+ } else {
+ char *end;
+
+ range = mdvi_parse_range(ptr, NULL, &count, &end);
+ if(end == ptr) {
+ if(range) mdvi_free(range);
+ range = NULL;
+ } else
+ ptr = end;
+ }
+ if(range != NULL) {
+ spec[i] = xalloc(struct _DviPageSpec);
+ spec[i]->ranges = range;
+ spec[i]->nranges = count;
+ } else
+ spec[i] = NULL;
+ }
+
+ if(i > 10)
+ mdvi_warning(_("more than 10 counters in page specification\n"));
+ else if(*ptr)
+ mdvi_warning(_("garbage after TeX page specification ignored\n"));
+
+ return spec;
+}
+
+/* returns non-zero if the given page is included by `spec' */
+int mdvi_page_selected(DviPageSpec *spec, PageNum page, int dvipage)
+{
+ int i;
+ int not_found;
+
+ if(spec == NULL)
+ return 1;
+ if(spec[0]) {
+ not_found = mdvi_in_range(spec[0]->ranges,
+ spec[0]->nranges, dvipage);
+ if(not_found < 0)
+ return 0;
+ }
+ for(i = 1; i <= 10; i++) {
+ if(spec[i] == NULL)
+ continue;
+ not_found = mdvi_in_range(spec[i]->ranges,
+ spec[i]->nranges, (int)page[i]);
+ if(not_found < 0)
+ return 0;
+ }
+ return 1;
+}
+
+void mdvi_free_page_spec(DviPageSpec *spec)
+{
+ int i;
+
+ for(i = 0; i < 11; i++)
+ if(spec[i]) {
+ mdvi_free(spec[i]->ranges);
+ mdvi_free(spec[i]);
+ }
+ mdvi_free(spec);
+}
+
+int mdvi_in_range(DviRange *range, int nitems, int value)
+{
+ DviRange *r;
+
+ for(r = range; r < range + nitems; r++) {
+ int cond;
+
+ switch(r->type) {
+ case MDVI_RANGE_BOUNDED:
+ if(value == r->from)
+ return (r - range);
+ if(r->step < 0)
+ cond = (value <= r->from) && (value >= r->to);
+ else
+ cond = (value <= r->to) && (value >= r->from);
+ if(cond && ((value - r->from) % r->step) == 0)
+ return (r - range);
+ break;
+ case MDVI_RANGE_LOWER:
+ if(value == r->from)
+ return (r - range);
+ if(r->step < 0)
+ cond = (value < r->from);
+ else
+ cond = (value > r->from);
+ if(cond && ((value - r->from) % r->step) == 0)
+ return (r - range);
+ break;
+ case MDVI_RANGE_UPPER:
+ if(value == r->to)
+ return (r - range);
+ if(r->step < 0)
+ cond = (value > r->to);
+ else
+ cond = (value < r->to);
+ if(cond && ((value - r->to) % r->step) == 0)
+ return (r - range);
+ break;
+ case MDVI_RANGE_UNBOUNDED:
+ if((value % r->step) == 0)
+ return (r - range);
+ break;
+ }
+ }
+ return -1;
+}
+
+int mdvi_range_length(DviRange *range, int nitems)
+{
+ int count = 0;
+ DviRange *r;
+
+ for(r = range; r < range + nitems; r++) {
+ int n;
+
+ if(r->type != MDVI_RANGE_BOUNDED)
+ return -2;
+ n = (r->to - r->from) / r->step;
+ if(n < 0)
+ n = 0;
+ count += n + 1;
+ }
+ return count;
+}
+
+#ifdef TEST
+
+void print_range(DviRange *range)
+{
+ switch(range->type) {
+ case MDVI_RANGE_BOUNDED:
+ printf("From %d to %d, step %d\n",
+ range->from, range->to, range->step);
+ break;
+ case MDVI_RANGE_LOWER:
+ printf("From %d, step %d\n",
+ range->from, range->step);
+ break;
+ case MDVI_RANGE_UPPER:
+ printf("From %d, step -%d\n",
+ range->to, range->step);
+ break;
+ case MDVI_RANGE_UNBOUNDED:
+ printf("From 0, step %d and %d\n",
+ range->step, -range->step);
+ break;
+ }
+}
+
+int main()
+{
+#if 0
+ char buf[256];
+ DviRange limit;
+
+ limit.from = 0;
+ limit.to = 100;
+ limit.step = 2;
+ limit.type = MDVI_RANGE_UNBOUNDED;
+ while(1) {
+ DviRange *range;
+ char *end;
+ int count;
+ int i;
+
+ printf("Range> "); fflush(stdout);
+ if(fgets(buf, 256, stdin) == NULL)
+ break;
+ if(buf[strlen(buf)-1] == '\n')
+ buf[strlen(buf)-1] = 0;
+ if(buf[0] == 0)
+ continue;
+ end = NULL;
+ range = mdvi_parse_range(buf, &limit, &count, &end);
+ if(range == NULL) {
+ printf("range is empty\n");
+ continue;
+ }
+
+ for(i = 0; i < count; i++) {
+ printf("Range %d (%d elements):\n",
+ i, mdvi_range_length(&range[i], 1));
+ print_range(&range[i]);
+ }
+ if(end && *end)
+ printf("Tail: [%s]\n", end);
+ printf("range has %d elements\n",
+ mdvi_range_length(range, count));
+#if 1
+ while(1) {
+ int v;
+
+ printf("Value: "); fflush(stdout);
+ if(fgets(buf, 256, stdin) == NULL)
+ break;
+ if(buf[strlen(buf)-1] == '\n')
+ buf[strlen(buf)-1] = 0;
+ if(buf[0] == 0)
+ break;
+ v = atoi(buf);
+ i = mdvi_in_range(range, count, v);
+ if(i == -1)
+ printf("%d not in range\n", v);
+ else {
+ printf("%d in range: ", v);
+ print_range(&range[i]);
+ }
+ }
+#endif
+ if(range) mdvi_free(range);
+ }
+#else
+ DviPageSpec *spec;
+ char buf[256];
+
+ while(1) {
+ printf("Spec> "); fflush(stdout);
+ if(fgets(buf, 256, stdin) == NULL)
+ break;
+ if(buf[strlen(buf)-1] == '\n')
+ buf[strlen(buf)-1] = 0;
+ if(buf[0] == 0)
+ continue;
+ spec = mdvi_parse_page_spec(buf);
+ if(spec == NULL)
+ printf("no spec parsed\n");
+ else {
+ int i;
+
+ printf("spec = ");
+ for(i = 0; i < 11; i++) {
+ printf("Counter %d:\n", i);
+ if(spec[i]) {
+ int k;
+
+ for(k = 0; k < spec[i]->nranges; k++)
+ print_range(&spec[i]->ranges[k]);
+ } else
+ printf("\t*\n");
+ }
+ mdvi_free_page_spec(spec);
+ }
+ }
+#endif
+ exit(0);
+
+}
+#endif /* TEST */
diff --git a/backend/dvi/mdvi-lib/paper.c b/backend/dvi/mdvi-lib/paper.c
new file mode 100644
index 00000000..42cbcd3f
--- /dev/null
+++ b/backend/dvi/mdvi-lib/paper.c
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include <string.h>
+
+#include "common.h"
+#include "mdvi.h"
+#include "private.h"
+
+static const DviPaperSpec papers[] = {
+ {"ISO", 0, 0},
+ {"4A0", "1682mm", "2378mm"},
+ {"2A0", "1189mm", "1682mm"},
+ {"A0", "841mm", "1189mm"},
+ {"A1", "594mm", "841mm"},
+ {"A2", "420mm", "594mm"},
+ {"A3", "297mm", "420mm"},
+ {"A4", "210mm", "297mm"},
+ {"A5", "148mm", "210mm"},
+ {"A6", "105mm", "148mm"},
+ {"A7", "74mm", "105mm"},
+ {"A8", "52mm", "74mm"},
+ {"A9", "37mm", "52mm"},
+ {"A10", "26mm", "37mm"},
+ {"B0", "1000mm", "1414mm"},
+ {"B1", "707mm", "1000mm"},
+ {"B2", "500mm", "707mm"},
+ {"B3", "353mm", "500mm"},
+ {"B4", "250mm", "353mm"},
+ {"B5", "176mm", "250mm"},
+ {"B6", "125mm", "176mm"},
+ {"B7", "88mm", "125mm"},
+ {"B8", "62mm", "88mm"},
+ {"B9", "44mm", "62mm"},
+ {"B10", "31mm", "44mm"},
+ {"C0", "917mm", "1297mm"},
+ {"C1", "648mm", "917mm"},
+ {"C2", "458mm", "648mm"},
+ {"C3", "324mm", "458mm"},
+ {"C4", "229mm", "324mm"},
+ {"C5", "162mm", "229mm"},
+ {"C6", "114mm", "162mm"},
+ {"C7", "81mm", "114mm"},
+ {"C8", "57mm", "81mm"},
+ {"C9", "40mm", "57mm"},
+ {"C10", "28mm", "40mm"},
+ {"US", 0, 0},
+ {"archA", "9in", "12in"},
+ {"archB", "12in", "18in"},
+ {"archC", "18in", "24in"},
+ {"archD", "24in", "36in"},
+ {"archE", "36in", "48in"},
+ {"executive", "7.5in", "10in"},
+ {"flsa", "8.5in", "13in"},
+ {"flse", "8.5in", "13in"},
+ {"halfletter", "5.5in", "8.5in"},
+ {"letter", "8.5in", "11in"},
+ {"legal", "8.5in", "14in"},
+ {"ledger", "17in", "11in"},
+ {"note", "7.5in", "10in"},
+ {"tabloid", "11in", "17in"},
+ {"statement", "5.5in", "8.5in"},
+ {0, 0, 0}
+};
+
+static DviPaperClass str2class(const char *name)
+{
+ if(STRCEQ(name, "ISO"))
+ return MDVI_PAPER_CLASS_ISO;
+ else if(STRCEQ(name, "US"))
+ return MDVI_PAPER_CLASS_US;
+ return MDVI_PAPER_CLASS_CUSTOM;
+}
+
+int mdvi_get_paper_size(const char *name, DviPaper *paper)
+{
+ const DviPaperSpec *sp;
+ double a, b;
+ char c, d, e, f;
+ char buf[32];
+
+ paper->pclass = MDVI_PAPER_CLASS_CUSTOM;
+ if(sscanf(name, "%lfx%lf%c%c", &a, &b, &c, &d) == 4) {
+ sprintf(buf, "%12.16f%c%c", a, c, d);
+ paper->inches_wide = unit2pix_factor(buf);
+ sprintf(buf, "%12.16f%c%c", b, c, d);
+ paper->inches_tall = unit2pix_factor(buf);
+ paper->name = _("custom");
+ return 0;
+ } else if(sscanf(name, "%lf%c%c,%lf%c%c", &a, &c, &d, &b, &e, &f) == 6) {
+ sprintf(buf, "%12.16f%c%c", a, c, d);
+ paper->inches_wide = unit2pix_factor(buf);
+ sprintf(buf, "%12.16f%c%c", b, e, f);
+ paper->inches_tall = unit2pix_factor(buf);
+ paper->name = _("custom");
+ return 0;
+ }
+
+ for(sp = &papers[0]; sp->name; sp++) {
+ if(!sp->width || !sp->height) {
+ paper->pclass = str2class(sp->name);
+ continue;
+ }
+ if(strcasecmp(sp->name, name) == 0) {
+ paper->inches_wide = unit2pix_factor(sp->width);
+ paper->inches_tall = unit2pix_factor(sp->height);
+ paper->name = sp->name;
+ return 0;
+ }
+ }
+ return -1;
+}
+
+DviPaperSpec *mdvi_get_paper_specs(DviPaperClass pclass)
+{
+ int i;
+ int first, count;
+ DviPaperSpec *spec, *ptr;
+
+ first = -1;
+ count = 0;
+ if(pclass == MDVI_PAPER_CLASS_ANY ||
+ pclass == MDVI_PAPER_CLASS_CUSTOM) {
+ first = 0;
+ count = (sizeof(papers) / sizeof(papers[0])) - 3;
+ } else for(i = 0; papers[i].name; i++) {
+ if(papers[i].width == NULL) {
+ if(str2class(papers[i].name) == pclass)
+ first = i;
+ else if(first >= 0)
+ break;
+ } else if(first >= 0)
+ count++;
+ }
+ ptr = spec = xnalloc(DviPaperSpec, count + 1);
+ for(i = first; papers[i].name&& count > 0; i++) {
+ if(papers[i].width) {
+ ptr->name = papers[i].name;
+ ptr->width = papers[i].width;
+ ptr->height = papers[i].height;
+ ptr++;
+ count--;
+ }
+ }
+ ptr->name = NULL;
+ ptr->width = NULL;
+ ptr->height = NULL;
+
+ return spec;
+}
+
+void mdvi_free_paper_specs(DviPaperSpec *spec)
+{
+ mdvi_free(spec);
+}
diff --git a/backend/dvi/mdvi-lib/paper.h b/backend/dvi/mdvi-lib/paper.h
new file mode 100644
index 00000000..d42ee079
--- /dev/null
+++ b/backend/dvi/mdvi-lib/paper.h
@@ -0,0 +1,32 @@
+#ifndef MDVI_PAPER
+#define MDVI_PAPER
+
+typedef struct _DviPaper DviPaper;
+typedef struct _DviPaperSpec DviPaperSpec;
+
+typedef enum {
+ MDVI_PAPER_CLASS_ISO,
+ MDVI_PAPER_CLASS_US,
+ MDVI_PAPER_CLASS_ANY,
+ MDVI_PAPER_CLASS_CUSTOM
+} DviPaperClass;
+
+struct _DviPaper {
+ DviPaperClass pclass;
+ const char *name;
+ double inches_wide;
+ double inches_tall;
+};
+
+struct _DviPaperSpec {
+ const char *name;
+ const char *width;
+ const char *height;
+};
+
+
+extern int mdvi_get_paper_size __PROTO((const char *, DviPaper *));
+extern DviPaperSpec* mdvi_get_paper_specs __PROTO((DviPaperClass));
+extern void mdvi_free_paper_specs __PROTO((DviPaperSpec *));
+
+#endif
diff --git a/backend/dvi/mdvi-lib/pk.c b/backend/dvi/mdvi-lib/pk.c
new file mode 100644
index 00000000..a5791869
--- /dev/null
+++ b/backend/dvi/mdvi-lib/pk.c
@@ -0,0 +1,570 @@
+
+/* Copyright (C) 2000, Matias Atria
+ *
+ * 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.
+ */
+
+/*
+ * History:
+ *
+ * 11/3/2000:
+ * - First working version
+ * 11/4/2000:
+ * - FIXED: entirely white/black rows were missed.
+ * 11/8/2000:
+ * - TESTED: Glyphs are rendered correctly in different byte orders.
+ * - Made bitmap code much more efficient and compact.
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <math.h>
+
+#include "mdvi.h"
+#include "private.h"
+
+#define PK_ID 89
+#define PK_CMD_START 240
+#define PK_X1 240
+#define PK_X2 241
+#define PK_X3 242
+#define PK_X4 243
+#define PK_Y 244
+#define PK_POST 245
+#define PK_NOOP 246
+#define PK_PRE 247
+
+#define PK_DYN_F(x) (((x) >> 4) & 0xf)
+#define PK_PACKED(x) (PK_DYN_F(x) != 14)
+
+static int pk_load_font __PROTO((DviParams *, DviFont *));
+static int pk_font_get_glyph __PROTO((DviParams *, DviFont *, int));
+
+static int pk_auto_generate = 1; /* this is ON by default */
+
+typedef struct {
+ char currbyte;
+ char nybpos;
+ int dyn_f;
+} pkread;
+
+static char *pk_lookup __PROTO((const char *, Ushort *, Ushort *));
+static char *pk_lookupn __PROTO((const char *, Ushort *, Ushort *));
+
+/* only symbols exported by this file */
+DviFontInfo pk_font_info = {
+ "PK",
+ 0, /* scaling not supported natively */
+ pk_load_font,
+ pk_font_get_glyph,
+ mdvi_shrink_glyph,
+ mdvi_shrink_glyph_grey,
+ NULL, /* free */
+ NULL, /* reset */
+ pk_lookup, /* lookup */
+ kpse_pk_format,
+ NULL
+};
+
+DviFontInfo pkn_font_info = {
+ "PKN",
+ 0, /* scaling not supported natively */
+ pk_load_font,
+ pk_font_get_glyph,
+ mdvi_shrink_glyph,
+ mdvi_shrink_glyph_grey,
+ NULL, /* free */
+ NULL, /* reset */
+ pk_lookupn, /* lookup */
+ kpse_pk_format,
+ NULL
+};
+
+static char *pk_lookup(const char *name, Ushort *hdpi, Ushort *vdpi)
+{
+ kpse_glyph_file_type type;
+ char *filename;
+
+ if(pk_auto_generate == 0) {
+ kpse_set_program_enabled(kpse_pk_format, 1, kpse_src_cmdline);
+ pk_auto_generate = 1;
+ }
+ filename = kpse_find_glyph(name, Max(*hdpi, *vdpi),
+ kpse_pk_format, &type);
+ if(filename && type.source == kpse_glyph_source_fallback) {
+ mdvi_free(filename);
+ filename = NULL;
+ } else if(filename) {
+ *hdpi = *vdpi = type.dpi;
+ }
+ return filename;
+}
+
+static char *pk_lookupn(const char *name, Ushort *hdpi, Ushort *vdpi)
+{
+ kpse_glyph_file_type type;
+ char *filename;
+
+ if(pk_auto_generate) {
+ kpse_set_program_enabled(kpse_pk_format, 0, kpse_src_cmdline);
+ pk_auto_generate = 0;
+ }
+ filename = kpse_find_glyph(name, Max(*hdpi, *vdpi),
+ kpse_pk_format, &type);
+ if(filename && type.source == kpse_glyph_source_fallback) {
+ mdvi_free(filename);
+ filename = NULL;
+ } else if(filename) {
+ *hdpi = *vdpi = type.dpi;
+ }
+ return filename;
+}
+
+static inline int pk_get_nyb(FILE *p, pkread *pk)
+{
+ unsigned t;
+ int nb;
+ char c;
+
+ t = c = pk->currbyte;
+ nb = pk->nybpos;
+
+ switch(nb) {
+ case 0:
+ c = pk->currbyte = fuget1(p);
+ t = (c >> 4);
+ break;
+ case 1:
+ t = c;
+ break;
+ }
+ pk->nybpos = !nb;
+ return (t & 0xf);
+}
+
+/*
+ * this is a bit cumbersome because we have to pass around
+ * the `pkread' data...
+ */
+static int pk_packed_num(FILE *p, pkread *pkr, int *repeat)
+{
+ int i, j;
+ int dyn_f = pkr->dyn_f;
+
+ i = pk_get_nyb(p, pkr);
+ if(i == 0) {
+ do {
+ j = pk_get_nyb(p, pkr);
+ i++;
+ } while(j == 0);
+ while(i-- > 0)
+ j = (j << 4) + pk_get_nyb(p, pkr);
+ return (j - 15 + ((13 - dyn_f) << 4) +
+ dyn_f);
+ } else if(i <= dyn_f)
+ return i;
+ else if(i < 14)
+ return ((i - dyn_f - 1) << 4) +
+ pk_get_nyb(p, pkr) + dyn_f + 1;
+ else {
+ *repeat = 1;
+ if(i == 14)
+ *repeat = pk_packed_num(p, pkr, repeat);
+ return pk_packed_num(p, pkr, repeat);
+ }
+}
+
+#define ROUND(x,y) (((x) + (y) - 1) / (y))
+
+static BITMAP *get_bitmap(FILE *p, int w, int h, int flags)
+{
+ int i, j;
+ BmUnit *ptr;
+ BITMAP *bm;
+ int bitpos;
+ int currch;
+
+ flags = 0; /* shut up that compiler */
+ bitpos = -1;
+ if((bm = bitmap_alloc(w, h)) == NULL)
+ return NULL;
+ DEBUG((DBG_BITMAPS, "get_bitmap(%d,%d,%d): reading raw bitmap\n",
+ w, h, flags));
+ ptr = bm->data;
+ currch = 0;
+ for(i = 0; i < h; i++) {
+ BmUnit mask;
+
+ mask = FIRSTMASK;
+ for(j = 0; j < w; j++) {
+ if(bitpos < 0) {
+ currch = fuget1(p);
+ bitpos = 7;
+ }
+ if(currch & (1 << bitpos))
+ *ptr |= mask;
+ bitpos--;
+ if(mask == LASTMASK) {
+ ptr++;
+ mask = FIRSTMASK;
+ } else
+ NEXTMASK(mask);
+ }
+ ptr = bm_offset(ptr, bm->stride);
+ }
+ return bm;
+}
+
+static BITMAP *get_packed(FILE *p, int w, int h, int flags)
+{
+ int inrow, count;
+ int row;
+ BITMAP *bm;
+ int repeat_count;
+ int paint;
+ pkread pkr;
+
+ pkr.nybpos = 0;
+ pkr.currbyte = 0;
+ pkr.dyn_f = PK_DYN_F(flags);
+ paint = !!(flags & 0x8);
+
+ repeat_count = 0;
+ row = 0;
+ inrow = w;
+ if((bm = bitmap_alloc(w, h)) == NULL)
+ return NULL;
+ DEBUG((DBG_BITMAPS, "get_packed(%d,%d,%d): reading packed glyph\n",
+ w, h, flags));
+ while(row < h) {
+ int i = 0;
+
+ count = pk_packed_num(p, &pkr, &i);
+ if(i > 0) {
+ if(repeat_count)
+ fprintf(stderr, "second repeat count for this row (had %d and got %d)\n",
+ repeat_count, i);
+ repeat_count = i;
+ }
+
+ if(count >= inrow) {
+ Uchar *r, *t;
+ BmUnit *a, mask;
+
+ /* first finish current row */
+ if(paint)
+ bitmap_set_row(bm, row, w - inrow, inrow, paint);
+ /* now copy it as many times as required */
+ r = (Uchar *)bm->data + row * bm->stride;
+ while(repeat_count-- > 0) {
+ t = r + bm->stride;
+ /* copy entire lines */
+ memcpy(t, r, bm->stride);
+ r = t;
+ row++;
+ }
+ repeat_count = 0;
+ /* count first row we drew */
+ row++;
+ /* update run count */
+ count -= inrow;
+ /* now r points to the beginning of the last row we finished */
+ if(paint)
+ mask = ~((BmUnit)0);
+ else
+ mask = 0;
+ /* goto next row */
+ a = (BmUnit *)(r + bm->stride);
+ /* deal with entirely with/black rows */
+ while(count >= w) {
+ /* count number of atoms in a row */
+ i = ROUND(w, BITMAP_BITS);
+ while(i-- > 0)
+ *a++ = mask;
+ count -= w;
+ row++;
+ }
+ inrow = w;
+ }
+ if(count > 0)
+ bitmap_set_row(bm, row, w - inrow, count, paint);
+ inrow -= count;
+ paint = !paint;
+ }
+ if(row != h || inrow != w) {
+ mdvi_error(_("Bad PK file: More bits than required\n"));
+ bitmap_destroy(bm);
+ return NULL;
+ }
+ return bm;
+}
+
+static BITMAP *get_char(FILE *p, int w, int h, int flags)
+{
+ /* check if dyn_f == 14 */
+ if(((flags >> 4) & 0xf) == 14)
+ return get_bitmap(p, w, h, flags);
+ else
+ return get_packed(p, w, h, flags);
+}
+
+/* supports any number of characters in a font */
+static int pk_load_font(DviParams *unused, DviFont *font)
+{
+ int i;
+ int flag_byte;
+ int loc, hic, maxch;
+ Int32 checksum;
+ FILE *p;
+#ifndef NODEBUG
+ char s[256];
+#endif
+ long alpha, beta, z;
+
+ font->chars = xnalloc(DviFontChar, 256);
+ p = font->in;
+ memzero(font->chars, 256 * sizeof(DviFontChar));
+ for(i = 0; i < 256; i++)
+ font->chars[i].offset = 0;
+
+ /* check the preamble */
+ loc = fuget1(p); hic = fuget1(p);
+ if(loc != PK_PRE || hic != PK_ID)
+ goto badpk;
+ i = fuget1(p);
+#ifndef NODEBUG
+ for(loc = 0; loc < i; loc++)
+ s[loc] = fuget1(p);
+ s[loc] = 0;
+ DEBUG((DBG_FONTS, "(pk) %s: %s\n", font->fontname, s));
+#else
+ fseek(in, (long)i, SEEK_CUR);
+#endif
+ /* get the design size */
+ font->design = fuget4(p);
+ /* get the checksum */
+ checksum = fuget4(p);
+ if(checksum && font->checksum && font->checksum != checksum) {
+ mdvi_warning(_("%s: checksum mismatch (expected %u, got %u)\n"),
+ font->fontname, font->checksum, checksum);
+ } else if(!font->checksum)
+ font->checksum = checksum;
+ /* skip pixel per point ratios */
+ fuget4(p);
+ fuget4(p);
+ if(feof(p))
+ goto badpk;
+
+ /* now start reading the font */
+ loc = 256; hic = -1; maxch = 256;
+
+ /* initialize alpha and beta for TFM width computation */
+ TFMPREPARE(font->scale, z, alpha, beta);
+
+ while((flag_byte = fuget1(p)) != PK_POST) {
+ if(feof(p))
+ break;
+ if(flag_byte >= PK_CMD_START) {
+ switch(flag_byte) {
+ case PK_X1:
+ case PK_X2:
+ case PK_X3:
+ case PK_X4: {
+#ifndef NODEBUG
+ char *t;
+ int n;
+
+ i = fugetn(p, flag_byte - PK_X1 + 1);
+ if(i < 256)
+ t = &s[0];
+ else
+ t = mdvi_malloc(i + 1);
+ for(n = 0; n < i; n++)
+ t[n] = fuget1(p);
+ t[n] = 0;
+ DEBUG((DBG_SPECIAL, "(pk) %s: Special \"%s\"\n",
+ font->fontname, t));
+ if(t != &s[0])
+ mdvi_free(t);
+#else
+ i = fugetn(p, flag_byte - PK_X1 + 1);
+ while(i-- > 0)
+ fuget1(p);
+#endif
+ break;
+ }
+ case PK_Y:
+ i = fuget4(p);
+ DEBUG((DBG_SPECIAL, "(pk) %s: MF special %u\n",
+ font->fontname, (unsigned)i));
+ break;
+ case PK_POST:
+ case PK_NOOP:
+ break;
+ case PK_PRE:
+ mdvi_error(_("%s: unexpected preamble\n"), font->fontname);
+ goto error;
+ }
+ } else {
+ int pl;
+ int cc;
+ int w, h;
+ int x, y;
+ int offset;
+ long tfm;
+
+ switch(flag_byte & 0x7) {
+ case 7:
+ pl = fuget4(p);
+ cc = fuget4(p);
+ offset = ftell(p) + pl;
+ tfm = fuget4(p);
+ fsget4(p); /* skip dx */
+ fsget4(p); /* skip dy */
+ w = fuget4(p);
+ h = fuget4(p);
+ x = fsget4(p);
+ y = fsget4(p);
+ break;
+ case 4:
+ case 5:
+ case 6:
+ pl = (flag_byte % 4) * 65536 + fuget2(p);
+ cc = fuget1(p);
+ offset = ftell(p) + pl;
+ tfm = fuget3(p);
+ fsget2(p); /* skip dx */
+ /* dy assumed 0 */
+ w = fuget2(p);
+ h = fuget2(p);
+ x = fsget2(p);
+ y = fsget2(p);
+ break;
+ default:
+ pl = (flag_byte % 4) * 256 + fuget1(p);
+ cc = fuget1(p);
+ offset = ftell(p) + pl;
+ tfm = fuget3(p);
+ fsget1(p); /* skip dx */
+ /* dy assumed 0 */
+ w = fuget1(p);
+ h = fuget1(p);
+ x = fsget1(p);
+ y = fsget1(p);
+ }
+ if(feof(p))
+ break;
+ if(cc < loc)
+ loc = cc;
+ if(cc > hic)
+ hic = cc;
+ if(cc > maxch) {
+ font->chars = xresize(font->chars,
+ DviFontChar, cc + 16);
+ for(i = maxch; i < cc + 16; i++)
+ font->chars[i].offset = 0;
+ maxch = cc + 16;
+ }
+ font->chars[cc].code = cc;
+ font->chars[cc].flags = flag_byte;
+ font->chars[cc].offset = ftell(p);
+ font->chars[cc].width = w;
+ font->chars[cc].height = h;
+ font->chars[cc].glyph.data = NULL;
+ font->chars[cc].x = x;
+ font->chars[cc].y = y;
+ font->chars[cc].glyph.x = x;
+ font->chars[cc].glyph.y = y;
+ font->chars[cc].glyph.w = w;
+ font->chars[cc].glyph.h = h;
+ font->chars[cc].grey.data = NULL;
+ font->chars[cc].shrunk.data = NULL;
+ font->chars[cc].tfmwidth = TFMSCALE(z, tfm, alpha, beta);
+ font->chars[cc].loaded = 0;
+ fseek(p, (long)offset, SEEK_SET);
+ }
+ }
+ if(flag_byte != PK_POST) {
+ mdvi_error(_("%s: unexpected end of file (no postamble)\n"),
+ font->fontname);
+ goto error;
+ }
+ while((flag_byte = fuget1(p)) != EOF) {
+ if(flag_byte != PK_NOOP) {
+ mdvi_error(_("invalid PK file! (junk in postamble)\n"));
+ goto error;
+ }
+ }
+
+ /* resize font char data */
+ if(loc > 0 || hic < maxch-1) {
+ memmove(font->chars, font->chars + loc,
+ (hic - loc + 1) * sizeof(DviFontChar));
+ font->chars = xresize(font->chars,
+ DviFontChar, hic - loc + 1);
+ }
+ font->loc = loc;
+ font->hic = hic;
+ return 0;
+
+badpk:
+ mdvi_error(_("%s: File corrupted, or not a PK file\n"), font->fontname);
+error:
+ mdvi_free(font->chars);
+ font->chars = NULL;
+ font->loc = font->hic = 0;
+ return -1;
+}
+
+static int pk_font_get_glyph(DviParams *params, DviFont *font, int code)
+{
+ DviFontChar *ch;
+
+ if((ch = FONTCHAR(font, code)) == NULL)
+ return -1;
+
+ if(ch->offset == 0)
+ return -1;
+ DEBUG((DBG_GLYPHS, "(pk) loading glyph for character %d (%dx%d) in font `%s'\n",
+ code, ch->width, ch->height, font->fontname));
+ if(font->in == NULL && font_reopen(font) < 0)
+ return -1;
+ if(!ch->width || !ch->height) {
+ /* this happens for ` ' (ASCII 32) in some fonts */
+ ch->glyph.x = ch->x;
+ ch->glyph.y = ch->y;
+ ch->glyph.w = ch->width;
+ ch->glyph.h = ch->height;
+ ch->glyph.data = NULL;
+ return 0;
+ }
+ if(fseek(font->in, ch->offset, SEEK_SET) == -1)
+ return -1;
+ ch->glyph.data = get_char(font->in,
+ ch->width, ch->height, ch->flags);
+ if(ch->glyph.data) {
+ /* restore original settings */
+ ch->glyph.x = ch->x;
+ ch->glyph.y = ch->y;
+ ch->glyph.w = ch->width;
+ ch->glyph.h = ch->height;
+ } else
+ return -1;
+ ch->loaded = 1;
+ return 0;
+}
diff --git a/backend/dvi/mdvi-lib/private.h b/backend/dvi/mdvi-lib/private.h
new file mode 100644
index 00000000..9f89dc70
--- /dev/null
+++ b/backend/dvi/mdvi-lib/private.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 _MDVI_PRIVATE_H
+#define _MDVI_PRIVATE_H 1
+
+#define HAVE_PROTOTYPES 1
+
+#if STDC_HEADERS
+# /* kpathsea's headers (wrongly!) redefine strchr() and strrchr() to
+# non ANSI C functions if HAVE_STRCHR and HAVE_STRRCHR are not defined.
+# */
+# ifndef HAVE_STRCHR
+# define HAVE_STRCHR
+# endif
+# ifndef HAVE_STRRCHR
+# define HAVE_STRRCHR
+# endif
+#endif
+
+#include <kpathsea/debug.h>
+#include <kpathsea/tex-file.h>
+#include <kpathsea/tex-glyph.h>
+#include <kpathsea/cnf.h>
+#include <kpathsea/proginit.h>
+#include <kpathsea/progname.h>
+#include <kpathsea/tex-make.h>
+#include <kpathsea/lib.h>
+
+#define ISSP(p) (*(p) == ' ' || *(p) == '\t')
+#define SKIPSP(p) while(ISSP(p)) p++
+#define SKIPNSP(p) while(*(p) && !ISSP(p)) p++
+
+#ifdef ENABLE_NLS
+#include <libintl.h>
+#define _(x) gettext(x)
+#define _G(x) x
+#else
+#define _(x) x
+#define _G(x) x
+#endif /* ENABLE_NLS */
+
+#if defined (__i386__) && defined (__GNUC__) && __GNUC__ >= 2
+#define _BREAKPOINT() do { __asm__ __volatile__ ("int $03"); } while(0)
+#elif defined (__alpha__) && defined (__GNUC__) && __GNUC__ >= 2
+#define _BREAKPOINT() do { __asm__ __volatile__ ("bpt"); } while(0)
+#else /* !__i386__ && !__alpha__ */
+#define _BREAKPOINT()
+#endif /* __i386__ */
+
+#endif /* _MDVI_PRIVATE_H */
diff --git a/backend/dvi/mdvi-lib/setup.c b/backend/dvi/mdvi-lib/setup.c
new file mode 100644
index 00000000..ba0c545d
--- /dev/null
+++ b/backend/dvi/mdvi-lib/setup.c
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+
+#include "mdvi.h"
+#include "private.h"
+
+void mdvi_init_kpathsea(const char *program,
+ const char *mfmode, const char *font, int dpi,
+ const char *texmfcnf)
+{
+ const char *p;
+
+ /* Stop meaningless output generation. */
+ kpse_make_tex_discard_errors = FALSE;
+
+ p = strrchr(program, '/');
+ p = (p ? p + 1 : program);
+ kpse_set_program_name(program, p);
+ kpse_init_prog(p, dpi, mfmode, font);
+ kpse_set_program_enabled(kpse_any_glyph_format, 1, kpse_src_compile);
+ kpse_set_program_enabled(kpse_pk_format, 1, kpse_src_compile);
+ kpse_set_program_enabled(kpse_tfm_format, 1, kpse_src_compile);
+ kpse_set_program_enabled(kpse_ofm_format, 1, kpse_src_compile);
+ if (texmfcnf != NULL)
+ xputenv("TEXMFCNF", texmfcnf);
+}
+
diff --git a/backend/dvi/mdvi-lib/sp-epsf.c b/backend/dvi/mdvi-lib/sp-epsf.c
new file mode 100644
index 00000000..703a9c8c
--- /dev/null
+++ b/backend/dvi/mdvi-lib/sp-epsf.c
@@ -0,0 +1,311 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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.
+ */
+
+/* postscript specials */
+
+#include <config.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "mdvi.h"
+#include "private.h"
+
+typedef struct {
+ double ox;
+ double oy;
+ double bw;
+ double bh;
+ double angle;
+} EpsfBox;
+
+#define LLX 0
+#define LLY 1
+#define URX 2
+#define URY 3
+#define RWI 4
+#define RHI 5
+#define HOFF 6
+#define VOFF 7
+#define HSIZE 8
+#define VSIZE 9
+#define HSCALE 10
+#define VSCALE 11
+#define ANGLE 12
+#define CLIP 13
+
+void epsf_special __PROTO((DviContext *dvi, char *prefix, char *arg));
+
+/* Note: the given strings are modified in place */
+static char *parse_epsf_special(EpsfBox *box, char **ret,
+ char *prefix, char *arg)
+{
+ static struct {
+ char *name;
+ int has_arg;
+ char *value;
+ } keys[] = {
+ {"llx", 1, "0"},
+ {"lly", 1, "0"},
+ {"urx", 1, "0"},
+ {"ury", 1, "0"},
+ {"rwi", 1, "0"},
+ {"rhi", 1, "0"},
+ {"hoffset", 1, "0"},
+ {"voffset", 1, "0"},
+ {"hsize", 1, "612"},
+ {"vsize", 1, "792"},
+ {"hscale", 1, "100"},
+ {"vscale", 1, "100"},
+ {"angle", 1, "0"},
+ {"clip", 0, "0"}
+ };
+#define NKEYS (sizeof(keys) / sizeof(keys[0]))
+ char *ptr;
+ char *filename;
+ int quoted;
+ double value[NKEYS];
+ Uchar present[NKEYS];
+ Buffer buffer;
+ char *name;
+ int i;
+ double originx;
+ double originy;
+ double hsize;
+ double vsize;
+ double hscale;
+ double vscale;
+
+ /* this special has the form
+ * ["]file.ps["] [key=valye]*
+ */
+
+ /* scan the filename */
+ while(*arg == ' ' || *arg == '\t')
+ arg++;
+
+ /* make a copy of the string */
+ ptr = arg;
+
+ if(*ptr == '"')
+ for(name = ++ptr; *ptr && *ptr != '"'; ptr++);
+ else
+ for(name = ptr; *ptr && *ptr != ' ' && *ptr != '\t'; ptr++);
+ if(ptr == name)
+ return NULL;
+ *ptr++ = 0;
+ filename = name;
+
+ /* reset values to defaults */
+ for(i = 0; i < NKEYS; i++) {
+ value[i] = atof(keys[i].value);
+ present[i] = 0;
+ }
+
+ buff_init(&buffer);
+ buff_add(&buffer, "@beginspecial ", 0);
+
+ quoted = 0;
+ while(*ptr) {
+ const char *keyname;
+ char *val;
+ char *p;
+
+ while(*ptr == ' ' || *ptr == '\t')
+ ptr++;
+ keyname = ptr;
+
+ /* get the whole key=value pair */
+ for(; *ptr && *ptr != ' ' && *ptr != '\t'; ptr++);
+
+ if(*ptr) *ptr++ = 0;
+ /* now we shouldn't touch `ptr' anymore */
+
+ /* now work on this pair */
+ p = strchr(keyname, '=');
+ if(p == NULL)
+ val = NULL;
+ else {
+ *p++ = 0;
+ if(*p == '"') {
+ val = ++p;
+ /* skip until closing quote */
+ while(*p && *p != '"')
+ p++;
+ if(*p != '"')
+ mdvi_warning(
+ _("%s: malformed value for key `%s'\n"),
+ filename, keyname);
+ } else
+ val = p;
+ }
+
+ /* lookup the key */
+ for(i = 0; i < NKEYS; i++)
+ if(STRCEQ(keys[i].name, keyname))
+ break;
+ if(i == NKEYS) {
+ mdvi_warning(_("%s: unknown key `%s' ignored\n"),
+ filename, keyname);
+ continue;
+ }
+ if(keys[i].has_arg && val == NULL) {
+ mdvi_warning(_("%s: no argument for key `%s', using defaults\n"),
+ filename, keyname);
+ val = keys[i].value;
+ } else if(!keys[i].has_arg && val) {
+ mdvi_warning(_("%s: argument `%s' ignored for key `%s'\n"),
+ filename, val, keyname);
+ val = NULL;
+ }
+ if(val)
+ value[i] = atof(val);
+
+ /* put the argument */
+ buff_add(&buffer, val, 0);
+ buff_add(&buffer, " @", 2);
+ buff_add(&buffer, keyname, 0);
+ buff_add(&buffer, " ", 1);
+
+ /* remember that this option was given */
+ present[i] = 0xff;
+ }
+ buff_add(&buffer, " @setspecial", 0);
+
+ /* now compute the bounding box (code comes from dvips) */
+ originx = 0;
+ originy = 0;
+ hscale = 1;
+ vscale = 1;
+ hsize = 0;
+ vsize = 0;
+
+ if(present[HSIZE])
+ hsize = value[HSIZE];
+ if(present[VSIZE])
+ vsize = value[VSIZE];
+ if(present[HOFF])
+ originx = value[HOFF];
+ if(present[VOFF])
+ originy = value[VOFF];
+ if(present[HSCALE])
+ hscale = value[HSCALE] / 100.0;
+ if(present[VSCALE])
+ vscale = value[VSCALE] / 100.0;
+ if(present[URX] && present[LLX])
+ hsize = value[URX] - value[LLX];
+ if(present[URY] && present[LLY])
+ vsize = value[URY] - value[LLY];
+ if(present[RWI] || present[RHI]) {
+ if(present[RWI] && !present[RHI])
+ hscale = vscale = value[RWI] / (10.0 * hsize);
+ else if(present[RHI] && !present[RWI])
+ hscale = vscale = value[RHI] / (10.0 * vsize);
+ else {
+ hscale = value[RWI] / (10.0 * hsize);
+ vscale = value[RHI] / (10.0 * vsize);
+ }
+ }
+
+ box->ox = originx;
+ box->oy = originy;
+ box->bw = hsize * hscale;
+ box->bh = vsize * vscale;
+ box->angle = value[ANGLE];
+
+ *ret = buffer.data;
+
+ return filename;
+}
+
+void epsf_special(DviContext *dvi, char *prefix, char *arg)
+{
+ char *file;
+ char *special;
+ char *psfile;
+ char *tmp;
+ EpsfBox box = {0, 0, 0, 0};
+ int x, y;
+ int w, h;
+ double xf, vf;
+ struct stat buf;
+
+ file = parse_epsf_special(&box, &special, prefix, arg);
+ if (file != NULL)
+ mdvi_free (special);
+
+ xf = dvi->params.dpi * dvi->params.mag / (72.0 * dvi->params.hshrink);
+ vf = dvi->params.vdpi * dvi->params.mag / (72.0 * dvi->params.vshrink);
+ w = FROUND(box.bw * xf);
+ h = FROUND(box.bh * vf);
+ x = FROUND(box.ox * xf) + dvi->pos.hh;
+ y = FROUND(box.oy * vf) + dvi->pos.vv - h + 1;
+
+ if (!file || !dvi->device.draw_ps) {
+ dvi->device.draw_rule (dvi, x, y, w, h, 0);
+ return;
+ }
+
+ if (file[0] == '/') { /* Absolute path */
+ if (stat (file, &buf) == 0)
+ dvi->device.draw_ps (dvi, file, x, y, w, h);
+ else
+ dvi->device.draw_rule (dvi, x, y, w, h, 0);
+ return;
+ }
+
+ tmp = mdvi_strrstr (dvi->filename, "/");
+ if (tmp) { /* Document directory */
+ int path_len = strlen (dvi->filename) - strlen (tmp + 1);
+ int file_len = strlen (file);
+
+ psfile = mdvi_malloc (path_len + file_len + 1);
+ psfile[0] = '\0';
+ strncat (psfile, dvi->filename, path_len);
+ strncat (psfile, file, file_len);
+
+ if (stat (psfile, &buf) == 0) {
+ dvi->device.draw_ps (dvi, psfile, x, y, w, h);
+ mdvi_free (psfile);
+
+ return;
+ }
+
+ mdvi_free (psfile);
+ }
+
+ psfile = mdvi_build_path_from_cwd (file);
+ if (stat (psfile, &buf) == 0) { /* Current working dir */
+ dvi->device.draw_ps (dvi, psfile, x, y, w, h);
+ mdvi_free (psfile);
+
+ return;
+ }
+
+ mdvi_free (psfile);
+
+ psfile = kpse_find_pict (file);
+ if (psfile) { /* kpse */
+ dvi->device.draw_ps (dvi, psfile, x, y, w, h);
+ } else {
+ dvi->device.draw_rule(dvi, x, y, w, h, 0);
+ }
+
+ free (psfile);
+}
diff --git a/backend/dvi/mdvi-lib/special.c b/backend/dvi/mdvi-lib/special.c
new file mode 100644
index 00000000..e4832544
--- /dev/null
+++ b/backend/dvi/mdvi-lib/special.c
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "mdvi.h"
+#include "private.h"
+
+#if defined(WITH_REGEX_SPECIALS) && defined(HAVE_REGEX_H)
+#include <regex.h>
+#endif
+
+typedef struct _DviSpecial {
+ struct _DviSpecial *next;
+ struct _DviSpecial *prev;
+ char *label;
+ char *prefix;
+ size_t plen;
+#ifdef WITH_REGEX_SPECIALS
+ regex_t reg;
+ int has_reg;
+#endif
+ DviSpecialHandler handler;
+} DviSpecial;
+
+static ListHead specials = {NULL, NULL, 0};
+
+#define SPECIAL(x) \
+ void x __PROTO((DviContext *, const char *, const char *))
+
+static SPECIAL(sp_layer);
+extern SPECIAL(epsf_special);
+extern SPECIAL(do_color_special);
+
+static struct {
+ char *label;
+ char *prefix;
+ char *regex;
+ DviSpecialHandler handler;
+} builtins[] = {
+ {"Layers", "layer", NULL, sp_layer},
+ {"EPSF", "psfile", NULL, epsf_special}
+};
+#define NSPECIALS (sizeof(builtins) / sizeof(builtins[0]))
+static int registered_builtins = 0;
+
+static void register_builtin_specials(void)
+{
+ int i;
+
+ ASSERT(registered_builtins == 0);
+ registered_builtins = 1;
+ for(i = 0; i < NSPECIALS; i++)
+ mdvi_register_special(
+ builtins[i].label,
+ builtins[i].prefix,
+ builtins[i].regex,
+ builtins[i].handler,
+ 1 /* replace if exists */);
+}
+
+static DviSpecial *find_special_prefix(const char *prefix)
+{
+ DviSpecial *sp;
+
+ /* should have a hash table here, but I'm so lazy */
+ for(sp = (DviSpecial *)specials.head; sp; sp = sp->next) {
+ if(STRCEQ(sp->prefix, prefix))
+ break;
+ }
+ return sp;
+}
+
+int mdvi_register_special(const char *label, const char *prefix,
+ const char *regex, DviSpecialHandler handler, int replace)
+{
+ DviSpecial *sp;
+ int newsp = 0;
+
+ if(!registered_builtins)
+ register_builtin_specials();
+
+ sp = find_special_prefix(prefix);
+ if(sp == NULL) {
+ sp = xalloc(DviSpecial);
+ sp->prefix = mdvi_strdup(prefix);
+ newsp = 1;
+ } else if(!replace)
+ return -1;
+ else {
+ mdvi_free(sp->label);
+ sp->label = NULL;
+ }
+
+#ifdef WITH_REGEX_SPECIALS
+ if(!newsp && sp->has_reg) {
+ regfree(&sp->reg);
+ sp->has_reg = 0;
+ }
+ if(regex && regcomp(&sp->reg, regex, REG_NOSUB) != 0) {
+ if(newsp) {
+ mdvi_free(sp->prefix);
+ mdvi_free(sp);
+ }
+ return -1;
+ }
+ sp->has_reg = (regex != NULL);
+#endif
+ sp->handler = handler;
+ sp->label = mdvi_strdup(label);
+ sp->plen = strlen(prefix);
+ if(newsp)
+ listh_prepend(&specials, LIST(sp));
+ DEBUG((DBG_SPECIAL,
+ "New \\special handler `%s' with prefix `%s'\n",
+ label, prefix));
+ return 0;
+}
+
+int mdvi_unregister_special(const char *prefix)
+{
+ DviSpecial *sp;
+
+ sp = find_special_prefix(prefix);
+ if(sp == NULL)
+ return -1;
+ mdvi_free(sp->prefix);
+#ifdef WITH_REGEX_SPECIALS
+ if(sp->has_reg)
+ regfree(&sp->reg);
+#endif
+ listh_remove(&specials, LIST(sp));
+ mdvi_free(sp);
+ return 0;
+}
+
+#define IS_PREFIX_DELIMITER(x) (strchr(" \t\n:=", (x)) != NULL)
+
+int mdvi_do_special(DviContext *dvi, char *string)
+{
+ char *prefix;
+ char *ptr;
+ DviSpecial *sp;
+
+ if(!registered_builtins) {
+ }
+
+ if(!string || !*string)
+ return 0;
+
+ /* skip leading spaces */
+ while(*string && isspace(*string))
+ string++;
+
+ DEBUG((DBG_SPECIAL, "Looking for a handler for `%s'\n", string));
+
+ /* now try to find a match */
+ ptr = string;
+ for(sp = (DviSpecial *)specials.head; sp; sp = sp->next) {
+#ifdef WITH_REGEX_SPECIALS
+ if(sp->has_reg && !regexec(&sp->reg, ptr, 0, 0, 0))
+ break;
+#endif
+ /* check the prefix */
+ if(STRNCEQ(sp->prefix, ptr, sp->plen)) {
+ ptr += sp->plen;
+ break;
+ }
+ }
+
+ if(sp == NULL) {
+ DEBUG((DBG_SPECIAL, "None found\n"));
+ return -1;
+ }
+
+ /* extract the prefix */
+ if(ptr == string) {
+ prefix = NULL;
+ DEBUG((DBG_SPECIAL,
+ "REGEX match with `%s' (arg `%s')\n",
+ sp->label, ptr));
+ } else {
+ if(*ptr) *ptr++ = 0;
+ prefix = string;
+ DEBUG((DBG_SPECIAL,
+ "PREFIX match with `%s' (prefix `%s', arg `%s')\n",
+ sp->label, prefix, ptr));
+ }
+
+ /* invoke the handler */
+ sp->handler(dvi, prefix, ptr);
+
+ return 0;
+}
+
+void mdvi_flush_specials(void)
+{
+ DviSpecial *sp, *list;
+
+
+ for(list = (DviSpecial *)specials.head; (sp = list); ) {
+ list = sp->next;
+ if(sp->prefix) mdvi_free(sp->prefix);
+ if(sp->label) mdvi_free(sp->label);
+#ifdef WITH_REGEX_SPECIALS
+ if(sp->has_reg)
+ regfree(&sp->reg);
+#endif
+ mdvi_free(sp);
+ }
+ specials.head = NULL;
+ specials.tail = NULL;
+ specials.count = 0;
+}
+
+/* some builtin specials */
+
+void sp_layer(DviContext *dvi, const char *prefix, const char *arg)
+{
+ if(STREQ("push", arg))
+ dvi->curr_layer++;
+ else if(STREQ("pop", arg)) {
+ if(dvi->curr_layer)
+ dvi->curr_layer--;
+ else
+ mdvi_warning(_("%s: tried to pop top level layer\n"),
+ dvi->filename);
+ } else if(STREQ("reset", arg))
+ dvi->curr_layer = 0;
+ DEBUG((DBG_SPECIAL, "Layer level: %d\n", dvi->curr_layer));
+}
+
diff --git a/backend/dvi/mdvi-lib/sysdeps.h b/backend/dvi/mdvi-lib/sysdeps.h
new file mode 100644
index 00000000..c77d7651
--- /dev/null
+++ b/backend/dvi/mdvi-lib/sysdeps.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 _SYSDEP_H
+#define _SYSDEP_H 1
+
+/*
+ * The purpose of this file is to define symbols that describe the
+ * system-dependent features we use. Namely, byte order, native integer
+ * types of various sizes, and safe pointer<->integer conversion.
+ */
+
+#include "config.h"
+
+#ifdef WORDS_BIGENDIAN
+#define WORD_BIG_ENDIAN 1
+#else
+#define WORD_LITTLE_ENDIAN 1
+#endif
+
+typedef unsigned long Ulong;
+typedef unsigned int Uint;
+typedef unsigned short Ushort;
+typedef unsigned char Uchar;
+
+/* this one's easy */
+typedef unsigned char Uint8;
+typedef char Int8;
+
+/* define a datatype for 32bit integers (either int or long) */
+#if SIZEOF_LONG == 4
+typedef unsigned long Uint32;
+typedef long Int32;
+#else /* SIZEOF_LONG != 4 */
+#if SIZEOF_INT == 4
+typedef unsigned int Uint32;
+typedef int Int32;
+#else /* SIZEOF_INT != 4 */
+#ifdef __cplusplus
+#include "No.appropriate.32bit.native.type.found.Fix.sysdeps.h"
+#else
+#error No appropriate 32bit native type found. Fix sysdeps.h
+#endif /* ! __cplusplus */
+#endif /* SIZEOF_INT != 4 */
+#endif /* SIZEOF_LONG != 4 */
+
+/* now 16bit integers (one of long, int or short) */
+#if SIZEOF_SHORT == 2
+typedef unsigned short Uint16;
+typedef short Int16;
+#else /* SIZEOF_SHORT != 2 */
+#if SIZEOF_INT == 2
+typedef unsigned int Uint16;
+typedef short Int16;
+#else /* SIZEOF_INT != 2 */
+#ifdef __cplusplus
+#include "No.appropriate.16bit.native.type.found.Fix.sysdeps.h"
+#else
+#error No appropriate 16bit native type found. Fix sysdeps.h
+#endif /* ! __cplusplus */
+#endif /* SIZEOF_INT != 2 */
+#endif /* SIZEOF_SHORT != 2 */
+
+/*
+ * An integer type to convert to and from pointers safely. All we do here is
+ * look for an integer type with the same size as a pointer.
+ */
+#if SIZEOF_LONG == SIZEOF_VOID_P
+typedef unsigned long UINT;
+typedef long INT;
+#else
+#if SIZEOF_INT == SIZEOF_VOID_P
+typedef unsigned int UINT;
+typedef int INT;
+#else
+#if SIZEOF_SHORT == SIZEOF_VOID_P
+typedef unsigned short UINT;
+typedef short INT;
+#else
+#ifdef __cplusplus
+#include "No.native.pointer-compatible.integer.type.found.Fix.sysdeps.h"
+#else
+#error No native pointer-compatible integer type found. Fix sysdeps.h
+#endif
+#endif
+#endif
+#endif
+
+/* nice, uh? */
+typedef void *Pointer;
+
+/* macros to do the safe pointer <-> integer conversions */
+#define Ptr2Int(x) ((INT)((Pointer)(x)))
+#define Int2Ptr(x) ((Pointer)((INT)(x)))
+
+#ifdef _NO_PROTO
+#define __PROTO(x) ()
+#else
+#define __PROTO(x) x
+#endif
+
+#endif /* _SYSDEP_H */
diff --git a/backend/dvi/mdvi-lib/t1.c b/backend/dvi/mdvi-lib/t1.c
new file mode 100644
index 00000000..bc910ba6
--- /dev/null
+++ b/backend/dvi/mdvi-lib/t1.c
@@ -0,0 +1,630 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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.
+ */
+
+/*
+ * Type1 font support for MDVI
+ *
+ * We use T1lib only as a rasterizer, not to draw glyphs.
+ */
+
+#include <config.h>
+#include "mdvi.h"
+
+#ifdef WITH_TYPE1_FONTS
+
+#include <stdio.h>
+#include <t1lib.h>
+#include "private.h"
+
+static int t1lib_initialized = 0;
+
+typedef struct t1info {
+ struct t1info *next;
+ struct t1info *prev;
+ char *fontname; /* (short) name of this font */
+ int t1id; /* T1lib's id for this font */
+ int hasmetrics; /* have we processed this font? */
+ TFMInfo *tfminfo; /* TFM data is shared */
+ DviFontMapInfo mapinfo;
+ DviEncoding *encoding;
+} T1Info;
+
+static void t1_font_remove __PROTO((T1Info *));
+static int t1_load_font __PROTO((DviParams *, DviFont *));
+static int t1_font_get_glyph __PROTO((DviParams *, DviFont *, int));
+static void t1_font_shrink_glyph
+ __PROTO((DviContext *, DviFont *, DviFontChar *, DviGlyph *));
+static void t1_free_data __PROTO((DviFont *));
+static void t1_reset_font __PROTO((DviFont *));
+static char *t1_lookup_font __PROTO((const char *, Ushort *, Ushort *));
+
+/* only symbol exported by this file */
+DviFontInfo t1_font_info = {
+ "Type1",
+ 1, /* scaling supported by format */
+ t1_load_font,
+ t1_font_get_glyph,
+ t1_font_shrink_glyph,
+ mdvi_shrink_glyph_grey,
+ t1_free_data,
+ t1_reset_font,
+ t1_lookup_font, /* lookup */
+ kpse_type1_format,
+ NULL
+};
+
+/* this seems good enough for most DVI files */
+#define T1_HASH_SIZE 31
+
+/* If these parameters change, we must delete all size information
+ * in all fonts, and reset the device resolutions in T1lib */
+static int t1lib_xdpi = -1;
+static int t1lib_ydpi = -1;
+
+static ListHead t1fonts = {NULL, NULL, 0};
+static DviHashTable t1hash;
+
+/* Type1 fonts need their own `lookup' function. Here is how it works:
+ * First we try to find the font by its given name. If that fails, we
+ * query the font maps. A typical font map entry may contain the line
+ *
+ * ptmr8rn Times-Roman ".82 ExtendFont TeXBase1Encoding ReEncodeFont" <8r.enc <ptmr
+ *
+ * which means: If you're looking for the font `ptmr8rn' load `Times-Roman'
+ * which is in `ptmr' instead, and extend it by 0.82 points, then reencode
+ * it with the vector TeXBase1Encoding from the file `8r.enc'. This will
+ * fail if the entry looks like this:
+ *
+ * ptmr8rn Times-Roman ".82 ExtendFont TeXBase1Encoding ReEncodeFont" <8r.enc
+ *
+ * because to deal with this we would need to be able to locate the font file
+ * for the `Times-Roman' font ourselves, and that's beyond the scope of mdvi.
+ * But hey, we tried hard.
+ */
+char *t1_lookup_font(const char *name, Ushort *hdpi, Ushort *vdpi)
+{
+ char *filename;
+ char *newname;
+ const char *ext;
+ DviFontMapInfo info;
+
+ DEBUG((DBG_TYPE1, "(t1) looking for `%s'\n", name));
+
+ /* first let's try the font we were asked for */
+ filename = kpse_find_file(name, kpse_type1_format, 1);
+ if(filename != NULL) {
+ /* we got it */
+ return filename;
+ }
+
+ DEBUG((DBG_TYPE1, "(t1) %s: not found, querying font maps\n", name));
+ /* now query the fontmap */
+ if(mdvi_query_fontmap(&info, name) < 0) {
+ /* it's not there either */
+ return NULL;
+ }
+
+ /* check what we got */
+ if(info.fullfile) {
+ DEBUG((DBG_TYPE1, "(t1) %s: found `%s' (cached)\n",
+ name, info.fullfile));
+ /* this is a cached lookup */
+ return mdvi_strdup(info.fullfile);
+ }
+
+ /* no file associated to this font? */
+ if(info.fontfile == NULL)
+ return info.psname ? mdvi_ps_find_font(info.psname) : NULL;
+
+ /* let's extract the extension */
+ ext = file_extension(info.fontfile);
+ if(ext && !STREQ(ext, "pfa") && !STREQ(ext, "pfb")) {
+ DEBUG((DBG_TYPE1,
+ "(t1) %s: associated name `%s' is not Type1\n",
+ name, info.fontfile));
+ /* it's not a Type1 font */
+ return NULL;
+ }
+
+ /* get the `base' name */
+ if(ext) {
+ newname = mdvi_strdup(name);
+ newname[ext - info.fontfile - 1] = 0;
+ } else
+ newname = (char *)name; /* we don't modify this */
+
+ /* look it up */
+ DEBUG((DBG_TYPE1, "(t1) looking for `%s' on behalf of `%s'\n",
+ newname, name));
+ filename = kpse_find_file(newname, kpse_type1_format, 1);
+
+ /* we don't need this anymore */
+ if(newname != name)
+ mdvi_free(newname);
+ if(filename == NULL) {
+ DEBUG((DBG_TYPE1, "(t1) %s: not found\n", name));
+ return NULL;
+ }
+
+ DEBUG((DBG_TYPE1, "(t1) %s: found as `%s'\n", name, filename));
+ /* got it! let's remember this */
+ mdvi_add_fontmap_file(name, filename);
+ return filename;
+}
+
+static void t1_reset_resolution(int xdpi, int ydpi)
+{
+ int i;
+ int nfonts;
+
+ DEBUG((DBG_TYPE1, "(t1) resetting device resolution (current: (%d,%d))\n",
+ t1lib_xdpi, t1lib_ydpi));
+#if T1LIB_VERSION < 5
+ nfonts = T1_Get_no_fonts();
+#else
+ nfonts = T1_GetNoFonts();
+#endif
+
+ for(i = 0; i < nfonts; i++)
+ T1_DeleteAllSizes(i);
+ /* reset device resolutions */
+ if(T1_SetDeviceResolutions((float)xdpi, (float)ydpi) < 0)
+ mdvi_warning(_("(t1) failed to reset device resolution\n"));
+ else
+ DEBUG((DBG_TYPE1,
+ "(t1) reset successful, new resolution is (%d, %d)\n",
+ xdpi, ydpi));
+ t1lib_xdpi = xdpi;
+ t1lib_ydpi = ydpi;
+}
+
+static void t1_reset_font(DviFont *font)
+{
+ T1Info *info = (T1Info *)font->private;
+
+ if(info == NULL)
+ return;
+ DEBUG((DBG_FONTS, "(t1) resetting font `%s'\n", font->fontname));
+ /* just mark the font as not having metric info. It will be reset
+ * automatically later */
+ info->hasmetrics = 0;
+}
+
+static void t1_transform_font(T1Info *info)
+{
+ if(!info->hasmetrics && info->encoding != NULL) {
+ DEBUG((DBG_TYPE1, "(t1) %s: encoding with vector `%s'\n",
+ info->fontname, info->encoding->name));
+ T1_DeleteAllSizes(info->t1id);
+ if(T1_ReencodeFont(info->t1id, info->encoding->vector) < 0)
+ mdvi_warning(_("%s: could not encode font\n"), info->fontname);
+ }
+ if(info->mapinfo.slant) {
+ DEBUG((DBG_TYPE1, "(t1) %s: slanting by %.3f\n",
+ info->fontname,
+ MDVI_FMAP_SLANT(&info->mapinfo)));
+ T1_SlantFont(info->t1id,
+ MDVI_FMAP_SLANT(&info->mapinfo));
+ }
+ if(info->mapinfo.extend) {
+ DEBUG((DBG_TYPE1, "(t1) %s: extending by %.3f\n",
+ info->fontname,
+ MDVI_FMAP_EXTEND(&info->mapinfo)));
+ T1_ExtendFont(info->t1id,
+ MDVI_FMAP_EXTEND(&info->mapinfo));
+ }
+}
+
+/* if this function is called, we really need this font */
+static int t1_really_load_font(DviParams *params, DviFont *font, T1Info *info)
+{
+ int i;
+ T1Info *old;
+ int t1id;
+ int copied;
+ int status;
+
+ DEBUG((DBG_TYPE1, "(t1) really_load_font(%s)\n", info->fontname));
+
+ /* if the parameters changed, reset T1lib */
+ if(t1lib_xdpi != params->dpi || t1lib_ydpi != params->vdpi)
+ t1_reset_resolution(params->dpi, params->vdpi);
+
+ /* if we already have a T1lib id, do nothing */
+ if(info->t1id != -1) {
+ info->hasmetrics = 1;
+ /* apply slant and extend again */
+ t1_transform_font(info);
+ return 0;
+ }
+
+ /* before we even attempt to load the font, make sure we have metric
+ * data for it */
+ info->tfminfo = mdvi_ps_get_metrics(info->fontname);
+ if(info->tfminfo == NULL) {
+ DEBUG((DBG_FONTS,
+ "(t1) %s: no metric data, font ignored\n",
+ info->fontname));
+ goto t1_error;
+ }
+ /* fix this */
+ font->design = info->tfminfo->design;
+
+ /* check if we have a font with this name (maybe at a different size) */
+ old = (T1Info *)mdvi_hash_lookup(&t1hash, (unsigned char *)info->fontname);
+ if(old == info) {
+ /* let's avoid confusion */
+ old = NULL;
+ }
+ if(old && old->t1id != -1) {
+ /* let's take advantage of T1lib's font sharing */
+ t1id = T1_CopyFont(old->t1id);
+ DEBUG((DBG_TYPE1, "(t1) %s -> %d (CopyFont)\n",
+ info->fontname, t1id));
+ copied = 1;
+ } else {
+ t1id = T1_AddFont(font->filename);
+ DEBUG((DBG_TYPE1, "(t1) %s -> %d (AddFont)\n",
+ info->fontname, t1id));
+ copied = 0;
+ }
+ if(t1id < 0)
+ goto t1_error;
+ info->t1id = t1id;
+
+ /*
+ * a minor optimization: If the old font in the hash table has
+ * not been loaded yet, replace it by this one, so we can use
+ * CopyFont later.
+ */
+ if(old && old->t1id == -1) {
+ DEBUG((DBG_TYPE1, "(t1) font `%s' exchanged in hash table\n",
+ info->fontname));
+ mdvi_hash_remove(&t1hash, (unsigned char *)old->fontname);
+ mdvi_hash_add(&t1hash, (unsigned char *)info->fontname,
+ info, MDVI_HASH_UNCHECKED);
+ }
+
+ /* now let T1lib load it */
+ if(!copied && T1_LoadFont(info->t1id) < 0) {
+ DEBUG((DBG_TYPE1, "(t1) T1_LoadFont(%d) failed with error %d\n",
+ info->t1id, T1_errno));
+ goto t1_error;
+ }
+ DEBUG((DBG_TYPE1, "(t1) T1_LoadFont(%d) -> Ok\n", info->t1id));
+
+ /* get information from the fontmap */
+ status = mdvi_query_fontmap(&info->mapinfo, info->fontname);
+ if(!status && info->mapinfo.encoding)
+ info->encoding = mdvi_request_encoding(info->mapinfo.encoding);
+ t1_transform_font(info);
+
+ i = info->tfminfo->hic - info->tfminfo->loc + 1;
+ if(i != font->hic - font->loc + 1) {
+ /* reset to optimal size */
+ font->chars = mdvi_realloc(font->chars, i * sizeof(DviFontChar));
+ }
+
+ /* get the scaled characters metrics */
+ get_tfm_chars(params, font, info->tfminfo, 0);
+ info->hasmetrics = 1;
+
+ DEBUG((DBG_TYPE1, "(t1) font `%s' really-loaded\n", info->fontname));
+ return 0;
+
+t1_error:
+ /* some error does not allows us to use this font. We need to reset
+ * the font structure, so the font system can try to read this
+ * font in a different class */
+
+ /* first destroy the private data */
+ t1_font_remove(info);
+ /* now reset all chars -- this is the important part */
+ mdvi_free(font->chars);
+ font->chars = NULL;
+ font->loc = font->hic = 0;
+ return -1;
+}
+
+static int init_t1lib(DviParams *params)
+{
+ int t1flags;
+
+#ifdef WORD_LITTLE_ENDIAN
+ /* try making T1lib use bitmaps in our format, but if this
+ * fails we'll convert the bitmap ourselves */
+ T1_SetBitmapPad(BITMAP_BITS);
+#endif
+ T1_SetDeviceResolutions((float)params->dpi, (float)params->vdpi);
+ t1flags = IGNORE_CONFIGFILE|IGNORE_FONTDATABASE|T1_NO_AFM;
+ if(DEBUGGING(TYPE1))
+ t1flags |= LOGFILE;
+ if(T1_InitLib(t1flags) == NULL)
+ return (t1lib_initialized = -1);
+ if(DEBUGGING(TYPE1)) {
+ DEBUG((DBG_TYPE1, "T1lib debugging output saved in t1lib.log\n"));
+ T1_SetLogLevel(T1LOG_DEBUG);
+ }
+ /* initialize our hash table, but don't allocate memory for it
+ * until we use it */
+ mdvi_hash_init(&t1hash);
+ DEBUG((DBG_TYPE1, "(t1) t1lib %s initialized -- resolution is (%d, %d), pad is %d bits\n",
+ T1_GetLibIdent(), params->dpi, params->vdpi, T1_GetBitmapPad()));
+ t1lib_initialized = 1;
+ t1lib_xdpi = params->dpi;
+ t1lib_ydpi = params->vdpi;
+ return 0;
+}
+
+static int t1_load_font(DviParams *params, DviFont *font)
+{
+ T1Info *info;
+ int i;
+
+ if(t1lib_initialized < 0)
+ return -1;
+ else if(t1lib_initialized == 0 && init_t1lib(params) < 0)
+ return -1;
+
+ if(font->in != NULL) {
+ /* we don't need this */
+ fclose(font->in);
+ font->in = NULL;
+ }
+
+ info = xalloc(T1Info);
+
+ /*
+ * mark the font as `unregistered' with T1lib. It will
+ * be added when we actually use it
+ */
+ info->t1id = -1;
+
+ /* add the font to our list */
+ info->fontname = font->fontname;
+ info->hasmetrics = 0;
+ info->encoding = NULL;
+ info->mapinfo.psname = NULL;
+ info->mapinfo.encoding = NULL;
+ info->mapinfo.fontfile = NULL;
+ info->mapinfo.extend = 0;
+ info->mapinfo.slant = 0;
+ info->encoding = NULL;
+
+ /* create the hash table if we have not done so yet */
+ if(t1hash.nbucks == 0)
+ mdvi_hash_create(&t1hash, T1_HASH_SIZE);
+ mdvi_hash_add(&t1hash, (unsigned char *) info->fontname, info, MDVI_HASH_UNIQUE);
+ listh_append(&t1fonts, LIST(info));
+
+ font->private = info;
+
+ /* reset everything */
+ font->chars = xnalloc(DviFontChar, 256);
+ font->loc = 0;
+ font->hic = 255;
+ for(i = 0; i < 256; i++) {
+ font->chars[i].code = i;
+ font->chars[i].offset = 1;
+ font->chars[i].loaded = 0;
+ font->chars[i].glyph.data = NULL;
+ font->chars[i].shrunk.data = NULL;
+ font->chars[i].grey.data = NULL;
+ }
+
+ return 0;
+}
+
+#define GLYPH_WIDTH(g) \
+ ((g)->metrics.rightSideBearing - (g)->metrics.leftSideBearing)
+#define GLYPH_HEIGHT(g) \
+ ((g)->metrics.ascent - (g)->metrics.descent)
+
+static inline BITMAP *t1_glyph_bitmap(GLYPH *glyph)
+{
+ int w, h, pad;
+
+ w = GLYPH_WIDTH(glyph);
+ h = GLYPH_HEIGHT(glyph);
+
+ if(!w || !h)
+ return MDVI_GLYPH_EMPTY;
+
+ pad = T1_GetBitmapPad();
+ return bitmap_convert_lsb8((unsigned char *)glyph->bits, w, h, ROUND(w, pad) * (pad >> 3));
+}
+
+static void t1_font_shrink_glyph(DviContext *dvi, DviFont *font, DviFontChar *ch, DviGlyph *dest)
+{
+ double size;
+ GLYPH *glyph;
+ T1Info *info;
+ T1_TMATRIX matrix;
+
+ info = (T1Info *)font->private;
+ ASSERT(info != NULL);
+
+ DEBUG((DBG_TYPE1, "(t1) shrinking glyph for character %d in `%s' (%d,%d)\n",
+ ch->code, font->fontname, ch->width, ch->height));
+ size = (double)font->scale / (dvi->params.tfm_conv * 0x100000);
+ size = 72.0 * size / 72.27;
+ matrix.cxx = 1.0/(double)dvi->params.hshrink;
+ matrix.cyy = 1.0/(double)dvi->params.vshrink;
+ matrix.cxy = 0.0;
+ matrix.cyx = 0.0;
+ glyph = T1_SetChar(info->t1id, ch->code, (float)size, &matrix);
+
+ dest->data = t1_glyph_bitmap(glyph);
+ dest->x = -glyph->metrics.leftSideBearing;
+ dest->y = glyph->metrics.ascent;
+ dest->w = GLYPH_WIDTH(glyph);
+ dest->h = GLYPH_HEIGHT(glyph);
+
+#ifndef NODEBUG
+ if(DEBUGGING(BITMAP_DATA)) {
+ DEBUG((DBG_BITMAP_DATA,
+ "(t1) %s: t1_shrink_glyph(%d): (%dw,%dh,%dx,%dy) -> (%dw,%dh,%dx,%dy)\n",
+ ch->glyph.w, ch->glyph.h, ch->glyph.x, ch->glyph.y,
+ dest->w, dest->h, dest->x, dest->y));
+ bitmap_print(stderr, (BITMAP *)dest->data);
+ }
+#endif
+ /* transform the glyph - we could do this with t1lib, but we do
+ * it ourselves for now */
+ font_transform_glyph(dvi->params.orientation, dest);
+}
+
+static int t1_font_get_glyph(DviParams *params, DviFont *font, int code)
+{
+ T1Info *info = (T1Info *)font->private;
+ GLYPH *glyph;
+ DviFontChar *ch;
+ double size;
+ T1_TMATRIX matrix;
+ int dpi;
+
+ ASSERT(info != NULL);
+ if(!info->hasmetrics && t1_really_load_font(params, font, info) < 0)
+ return -1;
+ ch = FONTCHAR(font, code);
+ if(!ch || !glyph_present(ch))
+ return -1;
+ ch->loaded = 1;
+ if(!ch->width || !ch->height) {
+ ch->glyph.x = ch->x;
+ ch->glyph.y = ch->y;
+ ch->glyph.w = ch->width;
+ ch->glyph.h = ch->height;
+ ch->glyph.data = NULL;
+ return 0;
+ }
+
+ /* load the glyph with T1lib (this is done only once for each glyph) */
+
+ /* get size in TeX points (tfm_conv includes dpi and magnification) */
+ size = (double)font->scale / (params->tfm_conv * 0x100000);
+ /* and transform into PostScript points */
+ size = 72.0 * size / 72.27;
+
+ dpi = Max(font->hdpi, font->vdpi);
+ /* we don't want the glyph to be cached twice (once by us, another by
+ * T1lib), so we use an identity matrix to tell T1lib not to keep the
+ * glyph around */
+ matrix.cxx = (double)font->hdpi / dpi;
+ matrix.cyy = (double)font->vdpi / dpi;
+ matrix.cxy = matrix.cyx = 0.0;
+ glyph = T1_SetChar(info->t1id, ch->code, (float)size, &matrix);
+ if(glyph == NULL) {
+ ch->glyph.x = ch->x;
+ ch->glyph.y = ch->y;
+ ch->glyph.w = ch->width;
+ ch->glyph.h = ch->height;
+ ch->glyph.data = NULL;
+ ch->missing = 1;
+ return 0;
+ }
+ /* and make it a bitmap */
+ ch->glyph.data = t1_glyph_bitmap(glyph);
+ ch->glyph.x = -glyph->metrics.leftSideBearing;
+ ch->glyph.y = glyph->metrics.ascent;
+ ch->glyph.w = GLYPH_WIDTH(glyph);
+ ch->glyph.h = GLYPH_HEIGHT(glyph);
+
+ /* let's also fix the glyph's origin
+ * (which is not contained in the TFM) */
+ ch->x = ch->glyph.x;
+ ch->y = ch->glyph.y;
+ /* let's fix these too */
+ ch->width = ch->glyph.w;
+ ch->height = ch->glyph.h;
+
+ return 0;
+}
+
+static void t1_font_remove(T1Info *info)
+{
+ T1Info *old;
+
+ /* first remove it from our list */
+ listh_remove(&t1fonts, LIST(info));
+
+ /* it it's in the hash table, we may need to replace this by another font */
+ old = (T1Info *)mdvi_hash_lookup(&t1hash, (unsigned char *)info->fontname);
+ if(old == info) {
+ mdvi_hash_remove(&t1hash, (unsigned char *) info->fontname);
+ /* go through the list and see if there is another
+ * font with this name */
+ for(old = (T1Info *)t1fonts.head; old; old = old->next)
+ if(STREQ(old->fontname, info->fontname))
+ break;
+ if(old != NULL)
+ mdvi_hash_add(&t1hash, (unsigned char *) old->fontname, old,
+ MDVI_HASH_UNCHECKED);
+ }
+ /* release our encoding vector */
+ if(info->encoding) {
+ DEBUG((DBG_TYPE1, "(t1) %s: releasing vector `%s'\n",
+ info->fontname, info->encoding->name));
+ mdvi_release_encoding(info->encoding, 1);
+ }
+
+ /* now get rid of it */
+ if(info->t1id != -1) {
+ DEBUG((DBG_TYPE1, "(t1) %s: T1_DeleteFont(%d)\n",
+ info->fontname, info->t1id));
+ T1_DeleteFont(info->t1id);
+ } else
+ DEBUG((DBG_TYPE1, "(t1) %s: not loaded yet, DeleteFont skipped\n",
+ info->fontname));
+
+ if(info->tfminfo)
+ free_font_metrics(info->tfminfo);
+ /*mdvi_free(info->fontname);*/
+ mdvi_free(info);
+}
+
+static void t1_free_data(DviFont *font)
+{
+ /* called after all the glyphs are destroyed */
+
+ if(font->private == NULL) {
+ /* this is perfectly normal, it just means the font has
+ * not been requested by MDVI yet */
+ return;
+ }
+
+ /* destroy this data */
+
+ t1_font_remove((T1Info *)font->private);
+ font->private = NULL;
+
+ /*
+ * if this is the last T1 font, reset the T1 library
+ * It is important that we do this, because this is will be called
+ * when the resolution or the magnification changes.
+ */
+ if(t1fonts.count == 0) {
+ DEBUG((DBG_TYPE1, "(t1) last font removed -- closing T1lib\n"));
+ T1_CloseLib();
+ t1lib_initialized = 0;
+ t1lib_xdpi = -1;
+ t1lib_ydpi = -1;
+ }
+}
+
+#endif /* WITH_TYPE1_FONTS */
diff --git a/backend/dvi/mdvi-lib/tfm.c b/backend/dvi/mdvi-lib/tfm.c
new file mode 100644
index 00000000..f37de0be
--- /dev/null
+++ b/backend/dvi/mdvi-lib/tfm.c
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "mdvi.h"
+#include "private.h"
+
+static int tfm_load_font __PROTO((DviParams *, DviFont *));
+static int tfm_font_get_glyph __PROTO((DviParams *, DviFont *, int));
+
+DviFontInfo tfm_font_info = {
+ "TFM",
+ 0, /* scaling not supported by format */
+ tfm_load_font,
+ tfm_font_get_glyph,
+ mdvi_shrink_box,
+ mdvi_shrink_box,
+ NULL, /* free */
+ NULL, /* reset */
+ NULL, /* lookup */
+ kpse_tfm_format,
+ NULL
+};
+
+DviFontInfo ofm_font_info = {
+ "OFM",
+ 0, /* scaling not supported by format */
+ tfm_load_font,
+ tfm_font_get_glyph,
+ mdvi_shrink_box,
+ mdvi_shrink_box,
+ NULL, /* free */
+ NULL, /* reset */
+ NULL, /* lookup */
+ kpse_ofm_format,
+ NULL
+};
+
+DviFontInfo afm_font_info = {
+ "AFM",
+ 0, /* scaling not supported by format */
+ tfm_load_font,
+ tfm_font_get_glyph,
+ mdvi_shrink_box,
+ mdvi_shrink_box,
+ NULL, /* free */
+ NULL, /* reset */
+ NULL, /* lookup */
+ kpse_afm_format,
+ NULL
+};
+
+#define TYPENAME(font) \
+ ((font)->search.info ? (font)->search.info : "none")
+
+/*
+ * Although it does not seem that way, this conversion is independent of the
+ * shrinking factors, within roundoff (that's because `conv' and `vconv'
+ * have already been scaled by hshrink and vshrink, repsectively). We
+ * should really use `dviconv' and `dvivconv', but I'm not so sure those
+ * should be moved to the DviParams structure.
+ */
+#define XCONV(x) FROUND(params->conv * (x) * params->hshrink)
+#define YCONV(y) FROUND(params->vconv * (y) * params->vshrink)
+
+/* this is used quite often in several places, so I made it standalone */
+int get_tfm_chars(DviParams *params, DviFont *font, TFMInfo *info, int loaded)
+{
+ Int32 z, alpha, beta;
+ int n;
+ DviFontChar *ch;
+ TFMChar *ptr;
+
+ n = info->hic - info->loc + 1;
+ if(n != FONT_GLYPH_COUNT(font)) {
+ font->chars = mdvi_realloc(font->chars,
+ n * sizeof(DviFontChar));
+ }
+ font->loc = info->loc;
+ font->hic = info->hic;
+ ch = font->chars;
+ ptr = info->chars;
+
+ /* Prepare z, alpha and beta for TFM width computation */
+ TFMPREPARE(font->scale, z, alpha, beta);
+
+ /* get the character metrics */
+ for(n = info->loc; n <= info->hic; ch++, ptr++, n++) {
+ int a, b, c, d;
+
+ ch->offset = ptr->present;
+ if(ch->offset == 0)
+ continue;
+ /* this is what we came here for */
+ ch->tfmwidth = TFMSCALE(z, ptr->advance, alpha, beta);
+ /* scale all other TFM units (so they are in DVI units) */
+ a = TFMSCALE(z, ptr->left, alpha, beta);
+ b = TFMSCALE(z, ptr->right, alpha, beta);
+ c = TFMSCALE(z, ptr->height, alpha, beta);
+ d = TFMSCALE(z, ptr->depth, alpha, beta);
+
+ /* now convert to unscaled pixels */
+ ch->width = XCONV(b - a);
+ ch->height = YCONV(c - d);
+ if(ch->height < 0) ch->height = -ch->height;
+ ch->x = XCONV(a);
+ ch->y = YCONV(c);
+ /*
+ * the offset is not used, but we might as well set it to
+ * something meaningful (and it MUST be non-zero)
+ */
+ ch->flags = 0;
+ ch->code = n;
+ ch->glyph.data = NULL;
+ ch->grey.data = NULL;
+ ch->shrunk.data = NULL;
+ ch->loaded = loaded;
+ }
+
+ return 0;
+}
+
+/*
+ * We use this function as a last resort to find the character widths in a
+ * font The DVI rendering code can correctly skip over a glyph if it knows
+ * its TFM width, which is what we try to find here.
+ */
+static int tfm_load_font(DviParams *params, DviFont *font)
+{
+ TFMInfo *tfm;
+ int type;
+
+ switch(font->search.info->kpse_type) {
+ case kpse_tfm_format:
+ type = DviFontTFM;
+ break;
+ case kpse_afm_format:
+ type = DviFontAFM;
+ break;
+ case kpse_ofm_format:
+ type = DviFontOFM;
+ break;
+ default:
+ return -1;
+ }
+
+ /* we don't need this */
+ if(font->in) {
+ fclose(font->in);
+ font->in = NULL;
+ }
+ tfm = get_font_metrics(font->fontname, type, font->filename);
+ if(tfm == NULL)
+ return -1;
+
+ if(tfm->checksum && font->checksum && tfm->checksum != font->checksum) {
+ mdvi_warning(_("%s: Checksum mismatch (got %u, expected %u)\n"),
+ font->fontname, (unsigned)tfm->checksum,
+ (unsigned)font->checksum);
+ }
+ font->checksum = tfm->checksum;
+ font->design = tfm->design;
+ font->loc = 0;
+ font->hic = 0;
+ font->chars = NULL;
+ get_tfm_chars(params, font, tfm, 1);
+
+ /* free everything */
+ free_font_metrics(tfm);
+
+ return 0;
+}
+
+static int tfm_font_get_glyph(DviParams *params, DviFont *font, int code)
+{
+ DviFontChar *ch;
+
+ ch = FONTCHAR(font, code);
+ if(!glyph_present(ch))
+ return -1;
+ ch->glyph.x = ch->x;
+ ch->glyph.y = ch->y;
+ ch->glyph.w = ch->width;
+ ch->glyph.h = ch->height;
+ /*
+ * This has two purposes: (1) avoid unnecessary calls to this function,
+ * and (2) detect when the glyph data for a TFM font is actually used
+ * (we'll get a SEGV). Any occurrence of that is a bug.
+ */
+ ch->glyph.data = MDVI_GLYPH_EMPTY;
+
+ return 0;
+}
diff --git a/backend/dvi/mdvi-lib/tfmfile.c b/backend/dvi/mdvi-lib/tfmfile.c
new file mode 100644
index 00000000..73ebf26a
--- /dev/null
+++ b/backend/dvi/mdvi-lib/tfmfile.c
@@ -0,0 +1,747 @@
+/* tfmfile.c -- readers for TFM, AFM, OTFM-0 and OTFM-1 files */
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include <stdio.h> /* tex-file.h needs this */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "mdvi.h"
+#include "private.h"
+
+#ifdef WITH_AFM_FILES
+#undef TRUE
+#undef FALSE
+#include "afmparse.h"
+#endif
+
+typedef struct tfmpool {
+ struct tfmpool *next;
+ struct tfmpool *prev;
+ char *short_name;
+ int links;
+ TFMInfo tfminfo;
+} TFMPool;
+
+static ListHead tfmpool = {NULL, NULL, 0};
+static DviHashTable tfmhash;
+
+#define TFM_HASH_SIZE 31
+
+#ifdef WORD_LITTLE_ENDIAN
+static inline void swap_array(Uint32 *ptr, int n)
+{
+ Uint32 i;
+
+ while(n-- > 0) {
+ i = *ptr;
+ *ptr++ = ((i & 0xff000000) >> 24)
+ | ((i & 0x00ff0000) >> 8)
+ | ((i & 0x0000ff00) << 8)
+ | ((i & 0x000000ff) << 24);
+ }
+}
+#endif
+
+#ifdef WITH_AFM_FILES
+
+static int __PROTO(ofm_load_file(const char *filename, TFMInfo *info));
+
+/* reading of AFM files */
+/* macro to convert between AFM and TFM units */
+#define AFM2TFM(x) FROUND((double)(x) * 0x100000 / 1000)
+int afm_load_file(const char *filename, TFMInfo *info)
+{
+ /* the information we want is:
+ * - tfmwidth
+ * - width and heights
+ * - character origins
+ */
+ FontInfo *fi = NULL;
+ int status;
+ CharMetricInfo *cm;
+ FILE *in;
+
+ in = fopen(filename, "rb");
+ if(in == NULL)
+ return -1;
+ status = afm_parse_file(in, &fi, P_GM);
+ fclose(in);
+
+ if(status != ok) {
+ mdvi_error(_("%s: Error reading AFM data\n"), filename);
+ return -1;
+ }
+
+ /* aim high */
+ info->chars = xnalloc(TFMChar, 256);
+ info->loc = 256;
+ info->hic = 0;
+ info->design = 0xa00000; /* fake -- 10pt */
+ info->checksum = 0; /* no checksum */
+ info->type = DviFontAFM;
+ mdvi_strncpy(info->coding, fi->gfi->encodingScheme, 63);
+ mdvi_strncpy(info->family, fi->gfi->familyName, 63);
+
+ /* now get the data */
+ for(cm = fi->cmi; cm < fi->cmi + fi->numOfChars; cm++) {
+ int code;
+ TFMChar *ch;
+
+ code = cm->code;
+ if(code < 0 || code > 255)
+ continue; /* ignore it */
+ ch = &info->chars[code];
+ ch->present = 1;
+ if(code < info->loc)
+ info->loc = code;
+ if(code > info->hic)
+ info->hic = code;
+ ch->advance = AFM2TFM(cm->wx);
+ /* this is the `leftSideBearing' */
+ ch->left = AFM2TFM(cm->charBBox.llx);
+ /* this is the height (ascent - descent) -- the sign is to follow
+ * TeX conventions, as opposed to Adobe's ones */
+ ch->depth = -AFM2TFM(cm->charBBox.lly);
+ /* this is the width (rightSideBearing - leftSideBearing) */
+ ch->right = AFM2TFM(cm->charBBox.urx);
+ /* this is the `ascent' */
+ ch->height = AFM2TFM(cm->charBBox.ury);
+ }
+
+ /* we don't need this anymore */
+ afm_free_fontinfo(fi);
+
+ /* optimize storage */
+ if(info->loc > 0 || info->hic < 256) {
+ memmove(&info->chars[0],
+ &info->chars[info->loc],
+ (info->hic - info->loc + 1) * sizeof(TFMChar));
+ info->chars = mdvi_realloc(info->chars,
+ (info->hic - info->loc + 1) * sizeof(TFMChar));
+ }
+
+ /* we're done */
+ return 0;
+}
+
+#endif /* WITH_AFM_FILES */
+
+int tfm_load_file(const char *filename, TFMInfo *info)
+{
+ int lf, lh, bc, ec, nw, nh, nd, ne;
+ int i, n;
+ Uchar *tfm;
+ Uchar *ptr;
+ struct stat st;
+ int size;
+ FILE *in;
+ Int32 *cb;
+ Int32 *charinfo;
+ Int32 *widths;
+ Int32 *heights;
+ Int32 *depths;
+ Uint32 checksum;
+
+ in = fopen(filename, "rb");
+ if(in == NULL)
+ return -1;
+ tfm = NULL;
+
+ DEBUG((DBG_FONTS, "(mt) reading TFM file `%s'\n",
+ filename));
+ /* We read the entire TFM file into core */
+ if(fstat(fileno(in), &st) < 0)
+ return -1;
+ if(st.st_size == 0)
+ goto bad_tfm;
+
+ /* allocate a word-aligned buffer to hold the file */
+ size = 4 * ROUND(st.st_size, 4);
+ if(size != st.st_size)
+ mdvi_warning(_("Warning: TFM file `%s' has suspicious size\n"),
+ filename);
+ tfm = (Uchar *)mdvi_malloc(size);
+ if(fread(tfm, st.st_size, 1, in) != 1)
+ goto error;
+ /* we don't need this anymore */
+ fclose(in);
+ in = NULL;
+
+ /* not a checksum, but serves a similar purpose */
+ checksum = 0;
+
+ ptr = tfm;
+ /* get the counters */
+ lf = muget2(ptr);
+ lh = muget2(ptr); checksum += 6 + lh;
+ bc = muget2(ptr);
+ ec = muget2(ptr); checksum += ec - bc + 1;
+ nw = muget2(ptr); checksum += nw;
+ nh = muget2(ptr); checksum += nh;
+ nd = muget2(ptr); checksum += nd;
+ checksum += muget2(ptr); /* skip italics correction count */
+ checksum += muget2(ptr); /* skip lig/kern table size */
+ checksum += muget2(ptr); /* skip kern table size */
+ ne = muget2(ptr); checksum += ne;
+ checksum += muget2(ptr); /* skip # of font parameters */
+
+ size = ec - bc + 1;
+ cb = (Int32 *)tfm; cb += 6 + lh;
+ charinfo = cb; cb += size;
+ widths = cb; cb += nw;
+ heights = cb; cb += nh;
+ depths = cb;
+
+ if(widths[0] || heights[0] || depths[0] ||
+ checksum != lf || bc - 1 > ec || ec > 255 || ne > 256)
+ goto bad_tfm;
+
+ /* from this point on, no error checking is done */
+
+ /* now we're at the header */
+ /* get the checksum */
+ info->checksum = muget4(ptr);
+ /* get the design size */
+ info->design = muget4(ptr);
+ /* get the coding scheme */
+ if(lh > 2) {
+ /* get the coding scheme */
+ i = n = msget1(ptr);
+ if(n < 0 || n > 39) {
+ mdvi_warning(_("%s: font coding scheme truncated to 40 bytes\n"),
+ filename);
+ n = 39;
+ }
+ memcpy(info->coding, ptr, n);
+ info->coding[n] = 0;
+ ptr += i;
+ } else
+ strcpy(info->coding, "FontSpecific");
+ /* get the font family */
+ if(lh > 12) {
+ n = msget1(ptr);
+ if(n > 0) {
+ i = Max(n, 63);
+ memcpy(info->family, ptr, i);
+ info->family[i] = 0;
+ } else
+ strcpy(info->family, "unspecified");
+ ptr += n;
+ }
+ /* now we don't read from `ptr' anymore */
+
+ info->loc = bc;
+ info->hic = ec;
+ info->type = DviFontTFM;
+
+ /* allocate characters */
+ info->chars = xnalloc(TFMChar, size);
+
+
+#ifdef WORD_LITTLE_ENDIAN
+ /* byte-swap the three arrays at once (they are consecutive in memory) */
+ swap_array((Uint32 *)widths, nw + nh + nd);
+#endif
+
+ /* get the relevant data */
+ ptr = (Uchar *)charinfo;
+ for(i = bc; i <= ec; ptr += 3, i++) {
+ int ndx;
+
+ ndx = (int)*ptr; ptr++;
+ info->chars[i-bc].advance = widths[ndx];
+ /* TFM files lack this information */
+ info->chars[i-bc].left = 0;
+ info->chars[i-bc].right = widths[ndx];
+ info->chars[i-bc].present = (ndx != 0);
+ if(ndx) {
+ ndx = ((*ptr >> 4) & 0xf);
+ info->chars[i-bc].height = heights[ndx];
+ ndx = (*ptr & 0xf);
+ info->chars[i-bc].depth = depths[ndx];
+ }
+ }
+
+ /* free everything */
+ mdvi_free(tfm);
+
+ return 0;
+
+bad_tfm:
+ mdvi_error(_("%s: File corrupted, or not a TFM file\n"), filename);
+error:
+ if(tfm) mdvi_free(tfm);
+ if(in) fclose(in);
+ return -1;
+}
+
+static int ofm1_load_file(FILE *in, TFMInfo *info)
+{
+ int lf, lh, bc, ec, nw, nh, nd;
+ int nco, ncw, npc;
+ int i;
+ int n;
+ int size;
+ Int32 *tfm;
+ Int32 *widths;
+ Int32 *heights;
+ Int32 *depths;
+ TFMChar *tch;
+ TFMChar *end;
+
+ lf = fuget4(in);
+ lh = fuget4(in);
+ bc = fuget4(in);
+ ec = fuget4(in);
+ nw = fuget4(in);
+ nh = fuget4(in);
+ nd = fuget4(in);
+ fuget4(in); /* italics */
+ fuget4(in); /* lig-kern */
+ fuget4(in); /* kern */
+ fuget4(in); /* extensible recipe */
+ fuget4(in); /* parameters */
+ fuget4(in); /* direction */
+ nco = fuget4(in);
+ ncw = fuget4(in);
+ npc = fuget4(in);
+
+ /* get the checksum */
+ info->checksum = fuget4(in);
+ /* the design size */
+ info->design = fuget4(in);
+ /* get the coding scheme */
+ if(lh > 2) {
+ /* get the coding scheme */
+ i = n = fsget1(in);
+ if(n < 0 || n > 39)
+ n = 39;
+ fread(info->coding, 39, 1, in);
+ info->coding[n] = 0;
+ } else
+ strcpy(info->coding, "FontSpecific");
+ /* get the font family */
+ if(lh > 12) {
+ n = fsget1(in);
+ if(n > 0) {
+ i = Max(n, 63);
+ fread(info->family, i, 1, in);
+ info->family[i] = 0;
+ } else
+ strcpy(info->family, "unspecified");
+ }
+ tfm = NULL;
+
+ /* jump to the beginning of the char-info table */
+ fseek(in, 4L*nco, SEEK_SET);
+
+ size = ec - bc + 1;
+ info->loc = bc;
+ info->hic = ec;
+ info->chars = xnalloc(TFMChar, size);
+ end = info->chars + size;
+
+ for(tch = info->chars, i = 0; i < ncw; i++) {
+ TFMChar ch;
+ int nr;
+
+ /* in the characters we store the actual indices */
+ ch.advance = fuget2(in);
+ ch.height = fuget1(in);
+ ch.depth = fuget1(in);
+ /* skip 2nd word */
+ fuget4(in);
+ /* get # of repeats */
+ nr = fuget2(in);
+ /* skip parameters */
+ fseek(in, (long)npc * 2, SEEK_CUR);
+ /* if npc is odd, skip padding */
+ if(npc & 1) fuget2(in);
+
+ /* now repeat the character */
+ while(nr-- >= 0 && tch < end)
+ memcpy(tch++, &ch, sizeof(TFMChar));
+ if(tch == end)
+ goto bad_tfm;
+ }
+
+ /* I wish we were done, but we aren't */
+
+ /* get the widths, heights and depths */
+ size = nw + nh + nd;
+ tfm = xnalloc(Int32, size);
+ /* read them in one sweep */
+ if(fread(tfm, 4, size, in) != size) {
+ mdvi_free(tfm);
+ goto bad_tfm;
+ }
+
+ /* byte-swap things if necessary */
+#ifdef WORD_LITTLE_ENDIAN
+ swap_array((Uint32 *)tfm, size);
+#endif
+ widths = tfm;
+ heights = widths + nw;
+ depths = heights + nh;
+
+ if(widths[0] || heights[0] || depths[0])
+ goto bad_tfm;
+
+ /* now fix the characters */
+ size = ec - bc + 1;
+ for(tch = info->chars; tch < end; tch++) {
+ tch->present = (tch->advance != 0);
+ tch->advance = widths[tch->advance];
+ tch->height = heights[tch->height];
+ tch->depth = depths[tch->depth];
+ tch->left = 0;
+ tch->right = tch->advance;
+ }
+
+ /* NOW we're done */
+ mdvi_free(tfm);
+ return 0;
+
+bad_tfm:
+ if(tfm) mdvi_free(tfm);
+ return -1;
+}
+
+/* we don't read OFM files into memory, because they can potentially be large */
+static int ofm_load_file(const char *filename, TFMInfo *info)
+{
+ int lf, lh, bc, ec, nw, nh, nd;
+ int i, n;
+ Int32 *tfm;
+ Uchar *ptr;
+ int size;
+ FILE *in;
+ Int32 *cb;
+ Int32 *charinfo;
+ Int32 *widths;
+ Int32 *heights;
+ Int32 *depths;
+ Uint32 checksum;
+ int olevel;
+ int nwords;
+
+ in = fopen(filename, "rb");
+ if(in == NULL)
+ return -1;
+
+ /* not a checksum, but serves a similar purpose */
+ checksum = 0;
+
+ /* get the counters */
+ /* get file level */
+ olevel = fsget2(in);
+ if(olevel != 0)
+ goto bad_tfm;
+ olevel = fsget2(in);
+ if(olevel != 0) {
+ DEBUG((DBG_FONTS, "(mt) reading Level-1 OFM file `%s'\n",
+ filename));
+ /* we handle level-1 files separately */
+ if(ofm1_load_file(in, info) < 0)
+ goto bad_tfm;
+ return 0;
+ }
+
+ DEBUG((DBG_FONTS, "(mt) reading Level-0 OFM file `%s'\n", filename));
+ nwords = 14;
+ lf = fuget4(in); checksum = nwords;
+ lh = fuget4(in); checksum += lh;
+ bc = fuget4(in);
+ ec = fuget4(in); checksum += 2 * (ec - bc + 1);
+ nw = fuget4(in); checksum += nw;
+ nh = fuget4(in); checksum += nh;
+ nd = fuget4(in); checksum += nd;
+ checksum += fuget4(in); /* skip italics correction count */
+ checksum += 2*fuget4(in); /* skip lig/kern table size */
+ checksum += fuget4(in); /* skip kern table size */
+ checksum += 2*fuget4(in); /* skip extensible recipe count */
+ checksum += fuget4(in); /* skip # of font parameters */
+
+ /* I have found several .ofm files that seem to have the
+ * font-direction word missing, so we try to detect that here */
+ if(checksum == lf + 1) {
+ DEBUG((DBG_FONTS, "(mt) font direction missing in `%s'\n",
+ filename));
+ checksum--;
+ nwords--;
+ } else {
+ /* skip font direction */
+ fuget4(in);
+ }
+
+ if(checksum != lf || bc > ec + 1 || ec > 65535)
+ goto bad_tfm;
+
+ /* now we're at the header */
+
+ /* get the checksum */
+ info->checksum = fuget4(in);
+ /* get the design size */
+ info->design = fuget4(in);
+
+ /* get the coding scheme */
+ if(lh > 2) {
+ /* get the coding scheme */
+ i = n = fsget1(in);
+ if(n < 0 || n > 39) {
+ mdvi_warning(_("%s: font coding scheme truncated to 40 bytes\n"),
+ filename);
+ n = 39;
+ }
+ fread(info->coding, 39, 1, in);
+ info->coding[n] = 0;
+ } else
+ strcpy(info->coding, "FontSpecific");
+ /* get the font family */
+ if(lh > 12) {
+ n = fsget1(in);
+ if(n > 0) {
+ i = Max(n, 63);
+ fread(info->family, i, 1, in);
+ info->family[i] = 0;
+ } else
+ strcpy(info->family, "unspecified");
+ }
+
+ /* now skip anything else in the header */
+ fseek(in, 4L*(nwords + lh), SEEK_SET);
+ /* and read everything at once */
+ size = 2*(ec - bc + 1) + nw + nh + nd;
+ tfm = xnalloc(Int32, size * sizeof(Int32));
+ if(fread(tfm, 4, size, in) != size) {
+ mdvi_free(tfm);
+ goto bad_tfm;
+ }
+ /* byte-swap all the tables at once */
+#ifdef WORD_LITTLE_ENDIAN
+ swap_array((Uint32 *)tfm, size);
+#endif
+ cb = tfm;
+ charinfo = cb; cb += 2*(ec - bc + 1);
+ widths = cb; cb += nw;
+ heights = cb; cb += nh;
+ depths = cb;
+
+ if(widths[0] || heights[0] || depths[0]) {
+ mdvi_free(tfm);
+ goto bad_tfm;
+ }
+
+ /* from this point on, no error checking is done */
+
+ /* we don't need this anymore */
+ fclose(in);
+
+ /* now we don't read from `ptr' anymore */
+
+ info->loc = bc;
+ info->hic = ec;
+ info->type = DviFontTFM;
+
+ /* allocate characters */
+ info->chars = xnalloc(TFMChar, size);
+
+ /* get the relevant data */
+ ptr = (Uchar *)charinfo;
+ for(i = bc; i <= ec; ptr += 4, i++) {
+ int ndx;
+
+ ndx = muget2(ptr);
+ info->chars[i-bc].advance = widths[ndx];
+ /* TFM files lack this information */
+ info->chars[i-bc].left = 0;
+ info->chars[i-bc].right = widths[ndx];
+ info->chars[i-bc].present = (ndx != 0);
+ ndx = muget1(ptr);
+ info->chars[i-bc].height = heights[ndx];
+ ndx = muget1(ptr);
+ info->chars[i-bc].depth = depths[ndx];
+ }
+
+ mdvi_free(tfm);
+ return 0;
+
+bad_tfm:
+ mdvi_error(_("%s: File corrupted, or not a TFM file\n"), filename);
+ fclose(in);
+ return -1;
+}
+
+char *lookup_font_metrics(const char *name, int *type)
+{
+ char *file;
+
+ switch(*type) {
+#ifndef WITH_AFM_FILES
+ case DviFontAny:
+#endif
+ case DviFontTFM:
+ file = kpse_find_tfm(name);
+ *type = DviFontTFM;
+ break;
+ case DviFontOFM: {
+ file = kpse_find_ofm(name);
+ /* we may have gotten a TFM back */
+ if(file != NULL) {
+ const char *ext = file_extension(file);
+ if(ext && STREQ(ext, "tfm"))
+ *type = DviFontTFM;
+ }
+ break;
+ }
+#ifdef WITH_AFM_FILES
+ case DviFontAFM:
+ file = kpse_find_file(name, kpse_afm_format, 0);
+ break;
+ case DviFontAny:
+ file = kpse_find_file(name, kpse_afm_format, 0);
+ *type = DviFontAFM;
+ if(file == NULL) {
+ file = kpse_find_tfm(name);
+ *type = DviFontTFM;
+ }
+ break;
+#endif
+ default:
+ return NULL;
+ }
+
+ return file;
+}
+
+/*
+ * The next two functions are just wrappers for the font metric loaders,
+ * and use the pool of TFM data
+ */
+
+/* this is how we interpret arguments:
+ * - if filename is NULL, we look for files of the given type,
+ * unless type is DviFontAny, in which case we try all the
+ * types we know of.
+ * - if filename is not NULL, we look at `type' to decide
+ * how to read the file. If type is DviFontAny, we just
+ * return an error.
+ */
+TFMInfo *get_font_metrics(const char *short_name, int type, const char *filename)
+{
+ TFMPool *tfm = NULL;
+ int status;
+ char *file;
+
+ if(tfmpool.count) {
+ tfm = (TFMPool *)mdvi_hash_lookup(&tfmhash,
+ MDVI_KEY(short_name));
+ if(tfm != NULL) {
+ DEBUG((DBG_FONTS, "(mt) reusing metric file `%s' (%d links)\n",
+ short_name, tfm->links));
+ tfm->links++;
+ return &tfm->tfminfo;
+ }
+ }
+
+ file = filename ? (char *)filename : lookup_font_metrics(short_name, &type);
+ if(file == NULL)
+ return NULL;
+
+ tfm = xalloc(TFMPool);
+ DEBUG((DBG_FONTS, "(mt) loading font metric data from `%s'\n", file, file));
+ switch(type) {
+ case DviFontTFM:
+ status = tfm_load_file(file, &tfm->tfminfo);
+ break;
+ case DviFontOFM:
+ status = ofm_load_file(file, &tfm->tfminfo);
+ break;
+#ifdef WITH_AFM_FILES
+ case DviFontAFM:
+ status = afm_load_file(file, &tfm->tfminfo);
+ break;
+#endif
+ default:
+ status = -1;
+ break;
+ }
+ if(file != filename)
+ mdvi_free(file);
+ if(status < 0) {
+ mdvi_free(tfm);
+ return NULL;
+ }
+ tfm->short_name = mdvi_strdup(short_name);
+
+ /* add it to the pool */
+ if(tfmpool.count == 0)
+ mdvi_hash_create(&tfmhash, TFM_HASH_SIZE);
+ mdvi_hash_add(&tfmhash, MDVI_KEY(tfm->short_name),
+ tfm, MDVI_HASH_UNCHECKED);
+ listh_prepend(&tfmpool, LIST(tfm));
+ tfm->links = 1;
+
+ return &tfm->tfminfo;
+}
+
+void free_font_metrics(TFMInfo *info)
+{
+ TFMPool *tfm;
+
+ if(tfmpool.count == 0)
+ return;
+ /* get the entry -- can't use the hash table for this, because
+ * we don't have the short name */
+ for(tfm = (TFMPool *)tfmpool.head; tfm; tfm = tfm->next)
+ if(info == &tfm->tfminfo)
+ break;
+ if(tfm == NULL)
+ return;
+ if(--tfm->links > 0) {
+ DEBUG((DBG_FONTS, "(mt) %s not removed, still in use\n",
+ tfm->short_name));
+ return;
+ }
+ mdvi_hash_remove_ptr(&tfmhash, MDVI_KEY(tfm->short_name));
+
+ DEBUG((DBG_FONTS, "(mt) removing unused TFM data for `%s'\n", tfm->short_name));
+ listh_remove(&tfmpool, LIST(tfm));
+ mdvi_free(tfm->short_name);
+ mdvi_free(tfm->tfminfo.chars);
+ mdvi_free(tfm);
+}
+
+void flush_font_metrics(void)
+{
+ TFMPool *ptr;
+
+ for(; (ptr = (TFMPool *)tfmpool.head); ) {
+ tfmpool.head = LIST(ptr->next);
+
+ mdvi_free(ptr->short_name);
+ mdvi_free(ptr->tfminfo.chars);
+ mdvi_free(ptr);
+ }
+ mdvi_hash_reset(&tfmhash, 0);
+}
diff --git a/backend/dvi/mdvi-lib/tt.c b/backend/dvi/mdvi-lib/tt.c
new file mode 100644
index 00000000..e85d8e70
--- /dev/null
+++ b/backend/dvi/mdvi-lib/tt.c
@@ -0,0 +1,495 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include "mdvi.h"
+
+#ifdef WITH_TRUETYPE_FONTS
+
+#include <string.h>
+#include <freetype.h>
+#include <ftxpost.h>
+#include <ftxerr18.h>
+
+#include "private.h"
+
+static TT_Engine tt_handle;
+static int initialized = 0;
+
+typedef struct ftinfo {
+ struct ftinfo *next;
+ struct ftinfo *prev;
+ char *fontname;
+ char *fmfname;
+ TT_Face face;
+ TT_Instance instance;
+ TT_Glyph glyph;
+ int hasmetrics;
+ int loaded;
+ int fmftype;
+ TFMInfo *tfminfo;
+ DviFontMapInfo mapinfo;
+ DviEncoding *encoding;
+} FTInfo;
+
+static int tt_load_font __PROTO((DviParams *, DviFont *));
+static int tt_font_get_glyph __PROTO((DviParams *, DviFont *, int));
+static void tt_free_data __PROTO((DviFont *));
+static void tt_reset_font __PROTO((DviFont *));
+static void tt_shrink_glyph
+ __PROTO((DviContext *, DviFont *, DviFontChar *, DviGlyph *));
+static void tt_font_remove __PROTO((FTInfo *));
+
+DviFontInfo tt_font_info = {
+ "TT",
+ 0,
+ tt_load_font,
+ tt_font_get_glyph,
+ tt_shrink_glyph,
+ mdvi_shrink_glyph_grey,
+ tt_free_data, /* free */
+ tt_reset_font, /* reset */
+ NULL, /* lookup */
+ kpse_truetype_format,
+ NULL
+};
+
+#define FT_HASH_SIZE 31
+
+static ListHead ttfonts = {NULL, NULL, 0};
+
+static int init_freetype(void)
+{
+ TT_Error code;
+
+ ASSERT(initialized == 0);
+ code = TT_Init_FreeType(&tt_handle);
+ if(code) {
+ DEBUG((DBG_TT, "(tt) Init_Freetype: error %d\n", code));
+ return -1;
+ }
+ code = TT_Init_Post_Extension(tt_handle);
+ if(code) {
+ TT_Done_FreeType(tt_handle);
+ return -1;
+ }
+ /* we're on */
+ initialized = 1;
+ return 0;
+}
+
+static void tt_encode_font(DviFont *font, FTInfo *info)
+{
+ TT_Face_Properties prop;
+ int i;
+
+ if(TT_Get_Face_Properties(info->face, &prop))
+ return;
+
+ for(i = 0; i < prop.num_Glyphs; i++) {
+ char *string;
+ int ndx;
+
+ if(TT_Get_PS_Name(info->face, i, &string))
+ continue;
+ ndx = mdvi_encode_glyph(info->encoding, string);
+ if(ndx < font->loc || ndx > font->hic)
+ continue;
+ font->chars[ndx - font->loc].code = i;
+ }
+}
+
+static int tt_really_load_font(DviParams *params, DviFont *font, FTInfo *info)
+{
+ DviFontChar *ch;
+ TFMChar *ptr;
+ Int32 z, alpha, beta;
+ int i;
+ FTInfo *old;
+ TT_Error status;
+ double point_size;
+ static int warned = 0;
+ TT_CharMap cmap;
+ TT_Face_Properties props;
+ int map_found;
+
+ DEBUG((DBG_TT, "(tt) really_load_font(%s)\n", info->fontname));
+
+ /* get the point size */
+ point_size = (double)font->scale / (params->tfm_conv * 0x100000);
+ point_size = 72.0 * point_size / 72.27;
+ if(info->loaded) {
+ /* just reset the size info */
+ TT_Set_Instance_Resolutions(info->instance,
+ params->dpi, params->vdpi);
+ TT_Set_Instance_CharSize(info->instance, FROUND(point_size * 64));
+ /* FIXME: should extend/slant again */
+ info->hasmetrics = 1;
+ return 0;
+ }
+
+ /* load the face */
+ DEBUG((DBG_TT, "(tt) loading new face `%s'\n",
+ info->fontname));
+ status = TT_Open_Face(tt_handle, font->filename, &info->face);
+ if(status) {
+ mdvi_warning(_("(tt) %s: could not load face: %s\n"),
+ info->fontname, TT_ErrToString18(status));
+ return -1;
+ }
+
+ /* create a new instance of this face */
+ status = TT_New_Instance(info->face, &info->instance);
+ if(status) {
+ mdvi_warning(_("(tt) %s: could not create face: %s\n"),
+ info->fontname, TT_ErrToString18(status));
+ TT_Close_Face(info->face);
+ return -1;
+ }
+
+ /* create a glyph */
+ status = TT_New_Glyph(info->face, &info->glyph);
+ if(status) {
+ mdvi_warning(_("(tt) %s: could not create glyph: %s\n"),
+ info->fontname, TT_ErrToString18(status));
+ goto tt_error;
+ }
+
+ /*
+ * We'll try to find a Unicode charmap. It's not that important that we
+ * actually find one, especially if the fontmap files are installed
+ * properly, but it's good to have some predefined behaviour
+ */
+ TT_Get_Face_Properties(info->face, &props);
+
+ map_found = -1;
+ for(i = 0; map_found < 0 && i < props.num_CharMaps; i++) {
+ TT_UShort pid, eid;
+
+ TT_Get_CharMap_ID(info->face, i, &pid, &eid);
+ switch(pid) {
+ case TT_PLATFORM_APPLE_UNICODE:
+ map_found = i;
+ break;
+ case TT_PLATFORM_ISO:
+ if(eid == TT_ISO_ID_7BIT_ASCII ||
+ eid == TT_ISO_ID_8859_1)
+ map_found = 1;
+ break;
+ case TT_PLATFORM_MICROSOFT:
+ if(eid == TT_MS_ID_UNICODE_CS)
+ map_found = 1;
+ break;
+ }
+ }
+ if(map_found < 0) {
+ mdvi_warning(_("(tt) %s: no acceptable map found, using #0\n"),
+ info->fontname);
+ map_found = 0;
+ }
+ DEBUG((DBG_TT, "(tt) %s: using charmap #%d\n",
+ info->fontname, map_found));
+ TT_Get_CharMap(info->face, map_found, &cmap);
+
+ DEBUG((DBG_TT, "(tt) %s: Set_Char_Size(%.2f, %d, %d)\n",
+ font->fontname, point_size, font->hdpi, font->vdpi));
+ status = TT_Set_Instance_Resolutions(info->instance,
+ params->dpi, params->vdpi);
+ if(status) {
+ error(_("(tt) %s: could not set resolution: %s\n"),
+ info->fontname, TT_ErrToString18(status));
+ goto tt_error;
+ }
+ status = TT_Set_Instance_CharSize(info->instance,
+ FROUND(point_size * 64));
+ if(status) {
+ error(_("(tt) %s: could not set point size: %s\n"),
+ info->fontname, TT_ErrToString18(status));
+ goto tt_error;
+ }
+
+ /* after this point we don't fail */
+
+ /* get information from the fontmap */
+ status = mdvi_query_fontmap(&info->mapinfo, info->fontname);
+ if(!status && info->mapinfo.encoding)
+ info->encoding = mdvi_request_encoding(info->mapinfo.encoding);
+ else
+ info->encoding = NULL;
+
+ if(info->encoding != NULL) {
+ TT_Post post;
+
+ status = TT_Load_PS_Names(info->face, &post);
+ if(status) {
+ mdvi_warning(_("(tt) %s: could not load PS name table\n"),
+ info->fontname);
+ mdvi_release_encoding(info->encoding, 0);
+ info->encoding = NULL;
+ }
+ }
+
+ /* get the metrics. If this fails, it's not fatal, but certainly bad */
+ info->tfminfo = get_font_metrics(info->fontname,
+ info->fmftype, info->fmfname);
+
+ if(info->tfminfo == NULL) {
+ mdvi_warning("(tt) %s: no metrics data, font ignored\n",
+ info->fontname);
+ goto tt_error;
+ }
+ /* fix this */
+ font->design = info->tfminfo->design;
+
+ /* get the scaled character metrics */
+ get_tfm_chars(params, font, info->tfminfo, 0);
+
+ if(info->encoding)
+ tt_encode_font(font, info);
+ else {
+ mdvi_warning(_("%s: no encoding vector found, expect bad output\n"),
+ info->fontname);
+ /* this is better than nothing */
+ for(i = font->loc; i <= font->hic; i++)
+ font->chars[i - font->loc].code = TT_Char_Index(cmap, i);
+ }
+
+ info->loaded = 1;
+ info->hasmetrics = 1;
+ return 0;
+
+tt_error:
+ tt_font_remove(info);
+ mdvi_free(font->chars);
+ font->chars = NULL;
+ font->loc = font->hic = 0;
+ return -1;
+}
+
+static int tt_load_font(DviParams *params, DviFont *font)
+{
+ int i;
+ FTInfo *info;
+
+ if(!initialized && init_freetype() < 0)
+ return -1;
+
+ if(font->in != NULL) {
+ fclose(font->in);
+ font->in = NULL;
+ }
+
+ info = xalloc(FTInfo);
+
+ memzero(info, sizeof(FTInfo));
+ info->fmftype = DviFontAny; /* any metrics type will do */
+ info->fmfname = lookup_font_metrics(font->fontname, &info->fmftype);
+ info->fontname = font->fontname;
+ info->hasmetrics = 0;
+ info->loaded = 0;
+
+ /* these will be obtained from the fontmaps */
+ info->mapinfo.psname = NULL;
+ info->mapinfo.encoding = NULL;
+ info->mapinfo.fontfile = NULL;
+ info->mapinfo.extend = 0;
+ info->mapinfo.slant = 0;
+
+ /* initialize these */
+ font->chars = xnalloc(DviFontChar, 256);
+ font->loc = 0;
+ font->hic = 255;
+ for(i = 0; i < 256; i++) {
+ font->chars[i].offset = 1;
+ font->chars[i].glyph.data = NULL;
+ font->chars[i].shrunk.data = NULL;
+ font->chars[i].grey.data = NULL;
+ }
+
+ if(info->fmfname == NULL)
+ mdvi_warning(_("(tt) %s: no font metric data\n"), font->fontname);
+
+ listh_append(&ttfonts, LIST(info));
+ font->private = info;
+
+ return 0;
+}
+
+static int tt_get_bitmap(DviParams *params, DviFont *font,
+ int code, double xscale, double yscale, DviGlyph *glyph)
+{
+ TT_Outline outline;
+ TT_Raster_Map raster;
+ TT_BBox bbox;
+ TT_Glyph_Metrics metrics;
+ TT_Matrix mat;
+ FTInfo *info;
+ int error;
+ int have_outline = 0;
+ int w, h;
+
+ info = (FTInfo *)font->private;
+ if(info == NULL)
+ return -1;
+
+ error = TT_Load_Glyph(info->instance, info->glyph,
+ code, TTLOAD_DEFAULT);
+ if(error) goto tt_error;
+ error = TT_Get_Glyph_Outline(info->glyph, &outline);
+ if(error) goto tt_error;
+ have_outline = 1;
+ mat.xx = FROUND(xscale * 65536);
+ mat.yy = FROUND(yscale * 65536);
+ mat.yx = 0;
+ mat.xy = 0;
+ TT_Transform_Outline(&outline, &mat);
+ error = TT_Get_Outline_BBox(&outline, &bbox);
+ if(error) goto tt_error;
+ bbox.xMin &= -64;
+ bbox.yMin &= -64;
+ bbox.xMax = (bbox.xMax + 63) & -64;
+ bbox.yMax = (bbox.yMax + 63) & -64;
+ w = (bbox.xMax - bbox.xMin) / 64;
+ h = (bbox.yMax - bbox.yMin) / 64;
+
+ glyph->w = w;
+ glyph->h = h;
+ glyph->x = -bbox.xMin / 64;
+ glyph->y = bbox.yMax / 64;
+ if(!w || !h)
+ goto tt_error;
+ raster.rows = h;
+ raster.width = w;
+ raster.cols = ROUND(w, 8);
+ raster.size = h * raster.cols;
+ raster.flow = TT_Flow_Down;
+ raster.bitmap = mdvi_calloc(h, raster.cols);
+
+ TT_Translate_Outline(&outline, -bbox.xMin, -bbox.yMin);
+ TT_Get_Outline_Bitmap(tt_handle, &outline, &raster);
+ glyph->data = bitmap_convert_msb8(raster.bitmap, w, h, ROUND(w, 8));
+ TT_Done_Outline(&outline);
+ mdvi_free(raster.bitmap);
+
+ return 0;
+tt_error:
+ if(have_outline)
+ TT_Done_Outline(&outline);
+ return -1;
+}
+
+static int tt_font_get_glyph(DviParams *params, DviFont *font, int code)
+{
+ FTInfo *info = (FTInfo *)font->private;
+ DviFontChar *ch;
+ int error;
+ double xs, ys;
+ int dpi;
+
+ ASSERT(info != NULL);
+ if(!info->hasmetrics && tt_really_load_font(params, font, info) < 0)
+ return -1;
+ ch = FONTCHAR(font, code);
+ if(!ch || !glyph_present(ch))
+ return -1;
+ ch->loaded = 1;
+ if(!ch->width || !ch->height)
+ goto blank;
+ if(ch->code == 0) {
+ ch->glyph.data = NULL;
+ goto missing;
+ }
+ /* get the glyph */
+ dpi = Max(font->hdpi, font->vdpi);
+ error = tt_get_bitmap(params, font, ch->code,
+ (double)font->hdpi / dpi,
+ (double)font->vdpi / dpi,
+ &ch->glyph);
+ if(error)
+ goto missing;
+ ch->x = ch->glyph.x;
+ ch->y = ch->glyph.y;
+
+ return 0;
+
+missing:
+ ch->glyph.data = MDVI_GLYPH_EMPTY;
+ ch->missing = 1;
+blank:
+ ch->glyph.w = ch->width;
+ ch->glyph.h = ch->height;
+ ch->glyph.x = ch->x;
+ ch->glyph.y = ch->y;
+ return 0;
+}
+
+static void tt_shrink_glyph(DviContext *dvi, DviFont *font, DviFontChar *ch, DviGlyph *dest)
+{
+ tt_get_bitmap(&dvi->params, font,
+ ch->code,
+ (double)font->hdpi / (dvi->params.dpi * dvi->params.hshrink),
+ (double)font->vdpi / (dvi->params.vdpi * dvi->params.vshrink),
+ dest);
+ /* transform the glyph for the current orientation */
+ font_transform_glyph(dvi->params.orientation, dest);
+}
+
+static void tt_reset_font(DviFont *font)
+{
+ FTInfo *info = (FTInfo *)font->private;
+
+ if(info == NULL)
+ return;
+ info->hasmetrics = 0;
+}
+
+static void tt_font_remove(FTInfo *info)
+{
+ FTInfo *old;
+
+ if(info->loaded) {
+ /* all fonts in the hash table have called TT_Open_Face */
+ TT_Done_Instance(info->instance);
+ TT_Close_Face(info->face);
+ }
+ listh_remove(&ttfonts, LIST(info));
+ /* release our encodings */
+ if(info->encoding)
+ mdvi_release_encoding(info->encoding, 1);
+ /* and destroy the font */
+ if(info->tfminfo)
+ free_font_metrics(info->tfminfo);
+ if(info->fmfname)
+ mdvi_free(info->fmfname);
+ mdvi_free(info);
+}
+
+static void tt_free_data(DviFont *font)
+{
+ if(font->private == NULL)
+ return;
+
+ tt_font_remove((FTInfo *)font->private);
+ if(initialized && ttfonts.count == 0) {
+ DEBUG((DBG_TT, "(tt) last font removed -- closing FreeType\n"));
+ TT_Done_FreeType(tt_handle);
+ initialized = 0;
+ }
+}
+
+#endif /* WITH_TRUETYPE_FONTS */
diff --git a/backend/dvi/mdvi-lib/util.c b/backend/dvi/mdvi-lib/util.c
new file mode 100644
index 00000000..349d273a
--- /dev/null
+++ b/backend/dvi/mdvi-lib/util.c
@@ -0,0 +1,550 @@
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <time.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <unistd.h>
+
+#include "common.h"
+#include "private.h"
+
+static char *const messages[] = {
+ _G("Ooops!"),
+ _G("Aieeeee!!"),
+ _G("Ouch!"),
+ _G("Houston, we have a problem"),
+ _G("3.. 2.. 1.. BOOM!"),
+ _G("I'm history"),
+ _G("I'm going down"),
+ _G("I smell a rat")
+};
+#define NMSGS (sizeof(messages) / sizeof(char *))
+
+static FILE *logfile = NULL;
+static int _mdvi_log_level;
+
+int mdvi_set_logfile(const char *filename);
+int mdvi_set_logstream(FILE *file);
+int mdvi_set_loglevel(int level);
+
+static void vputlog(int level, const char *head, const char *format, va_list ap)
+{
+ if(logfile != NULL && _mdvi_log_level >= level) {
+ if(head != NULL)
+ fprintf(logfile, "%s: ", head);
+ vfprintf(logfile, format, ap);
+ }
+}
+
+int mdvi_set_logfile(const char *filename)
+{
+ FILE *f = NULL;
+
+ if(filename && (f = fopen(filename, "w")) == NULL)
+ return -1;
+ if(logfile != NULL && !isatty(fileno(logfile))) {
+ fclose(logfile);
+ logfile = NULL;
+ }
+ if(filename)
+ logfile = f;
+ return 0;
+}
+
+int mdvi_set_logstream(FILE *file)
+{
+ if(logfile && !isatty(fileno(logfile))) {
+ fclose(logfile);
+ logfile = NULL;
+ }
+ logfile = file;
+ return 0;
+}
+
+int mdvi_set_loglevel(int level)
+{
+ int old = _mdvi_log_level;
+
+ _mdvi_log_level = level;
+ return old;
+}
+
+#ifndef NODEBUG
+Uint32 _mdvi_debug_mask = 0;
+
+void __debug(int mask, const char *format, ...)
+{
+ va_list ap;
+
+ va_start(ap, format);
+ if(_mdvi_debug_mask & mask) {
+ if(!DEBUGGING(SILENT)) {
+ fprintf(stderr, "Debug: ");
+ vfprintf(stderr, format, ap);
+ fflush(stderr);
+ }
+#ifndef __GNUC__
+ /* let's be portable */
+ va_end(ap);
+ va_start(ap, format);
+#endif
+ vputlog(LOG_DEBUG, "Debug", format, ap);
+ }
+ va_end(ap);
+}
+#endif
+
+void mdvi_message(const char *format, ...)
+{
+ va_list ap;
+
+ va_start(ap, format);
+ if(_mdvi_log_level >= LOG_INFO) {
+ fprintf(stderr, "%s: ", program_name);
+ vfprintf(stderr, format, ap);
+#ifndef __GNUC__
+ va_end(ap);
+ va_start(ap, format);
+#endif
+ }
+ vputlog(LOG_INFO, NULL, format, ap);
+ va_end(ap);
+}
+
+void mdvi_crash(const char *format, ...)
+{
+ va_list ap;
+
+ va_start(ap, format);
+ fprintf(stderr, "%s: %s: ",
+ program_name,
+ gettext(messages[(int)time(NULL) % NMSGS]));
+ vfprintf(stderr, format, ap);
+#ifndef __GNUC__
+ /* let's be portable */
+ va_end(ap);
+ va_start(ap, format);
+#endif
+ vputlog(LOG_ERROR, _("Crashing"), format, ap);
+ va_end(ap);
+ abort();
+}
+
+void mdvi_error(const char *format, ...)
+{
+ va_list ap;
+
+ va_start(ap, format);
+ fprintf(stderr, _("%s: Error: "), program_name);
+ vfprintf(stderr, format, ap);
+#ifndef __GNUC__
+ /* let's be portable */
+ va_end(ap);
+ va_start(ap, format);
+#endif
+ vputlog(LOG_ERROR, _("Error"), format, ap);
+ va_end(ap);
+}
+
+void mdvi_warning(const char *format, ...)
+{
+ va_list ap;
+
+ va_start(ap, format);
+ fprintf(stderr, _("%s: Warning: "), program_name);
+ vfprintf(stderr, format, ap);
+#ifndef __GNUC__
+ /* let's be portable */
+ va_end(ap);
+ va_start(ap, format);
+#endif
+ vputlog(LOG_WARN, _("Warning"), format, ap);
+ va_end(ap);
+}
+
+void mdvi_fatal(const char *format, ...)
+{
+ va_list ap;
+
+ va_start(ap, format);
+ fprintf(stderr, _("%s: Fatal: "), program_name);
+ vfprintf(stderr, format, ap);
+#ifndef __GNUC__
+ /* let's be portable */
+ va_end(ap);
+ va_start(ap, format);
+#endif
+ vputlog(LOG_ERROR, _("Fatal"), format, ap);
+ va_end(ap);
+#ifndef NODEBUG
+ abort();
+#else
+ exit(EXIT_FAILURE);
+#endif
+}
+
+void *mdvi_malloc(size_t nelems)
+{
+ void *ptr = malloc(nelems);
+
+ if(ptr == NULL)
+ mdvi_fatal(_("out of memory allocating %u bytes\n"),
+ (unsigned)nelems);
+ return ptr;
+}
+
+void *mdvi_realloc(void *data, size_t newsize)
+{
+ void *ptr;
+
+ if(newsize == 0)
+ mdvi_crash(_("attempted to reallocate with zero size\n"));
+ ptr = realloc(data, newsize);
+ if(ptr == NULL)
+ mdvi_fatal(_("failed to reallocate %u bytes\n"), (unsigned)newsize);
+ return ptr;
+}
+
+void *mdvi_calloc(size_t nmemb, size_t size)
+{
+ void *ptr;
+
+ if(nmemb == 0)
+ mdvi_crash(_("attempted to callocate 0 members\n"));
+ if(size == 0)
+ mdvi_crash(_("attempted to callocate %u members with size 0\n"),
+ (unsigned)nmemb);
+ ptr = calloc(nmemb, size);
+ if(ptr == 0)
+ mdvi_fatal(_("failed to allocate %ux%u bytes\n"),
+ (unsigned)nmemb, (unsigned)size);
+ return ptr;
+}
+
+void mdvi_free(void *ptr)
+{
+ if(ptr == NULL)
+ mdvi_crash(_("attempted to free NULL pointer\n"));
+ free(ptr);
+}
+
+char *mdvi_strdup(const char *string)
+{
+ int length;
+ char *ptr;
+
+ length = strlen(string) + 1;
+ ptr = (char *)mdvi_malloc(length);
+ memcpy(ptr, string, length);
+ return ptr;
+}
+
+/* `to' should have room for length+1 bytes */
+char *mdvi_strncpy(char *to, const char *from, size_t length)
+{
+ strncpy(to, from, length);
+ to[length] = '\0';
+ return to;
+}
+
+char *mdvi_strndup(const char *string, size_t length)
+{
+ int n;
+ char *ptr;
+
+ n = strlen(string);
+ if(n > length)
+ n = length;
+ ptr = (char *)mdvi_malloc(n + 1);
+ memcpy(ptr, string, n);
+ return ptr;
+}
+
+void *mdvi_memdup(const void *data, size_t length)
+{
+ void *ptr = mdvi_malloc(length);
+
+ memcpy(ptr, data, length);
+ return ptr;
+}
+
+char *mdvi_strrstr (const char *haystack, const char *needle)
+{
+ size_t i;
+ size_t needle_len;
+ size_t haystack_len;
+ const char *p;
+
+ needle_len = strlen (needle);
+ haystack_len = strlen (haystack);
+
+ if (needle_len == 0)
+ return NULL;
+
+ if (haystack_len < needle_len)
+ return (char *)haystack;
+
+ p = haystack + haystack_len - needle_len;
+ while (p >= haystack) {
+ for (i = 0; i < needle_len; i++)
+ if (p[i] != needle[i])
+ goto next;
+
+ return (char *)p;
+
+ next:
+ p--;
+ }
+
+ return NULL;
+}
+
+char *mdvi_build_path_from_cwd (const char *path)
+{
+ char *ptr;
+ char *buf = NULL;
+ size_t buf_size = 512;
+
+ while (1) {
+ buf = mdvi_realloc (buf, buf_size);
+ if ((ptr = getcwd (buf, buf_size)) == NULL && errno == ERANGE) {
+ buf_size *= 2;
+ } else {
+ buf = ptr;
+ break;
+ }
+ }
+
+ buf = mdvi_realloc (buf, strlen (buf) + strlen (path) + 2);
+ strcat (buf, "/");
+ strncat (buf, path, strlen (path));
+
+ return buf;
+}
+
+double unit2pix_factor(const char *spec)
+{
+ double val;
+ double factor;
+ const char *p, *q;
+ static const char *units = "incmmmmtptpcddccspbpftydcs";
+
+ val = 0.0;
+
+ for(p = spec; *p >= '0' && *p <= '9'; p++)
+ val = 10.0 * val + (double)(*p - '0');
+ if(*p == '.') {
+ p++;
+ factor = 0.1;
+ while(*p && *p >= '0' && *p <= '9') {
+ val += (*p++ - '0') * factor;
+ factor = factor * 0.1;
+ }
+ }
+ factor = 1.0;
+ for(q = units; *q; q += 2) {
+ if(p[0] == q[0] && p[1] == q[1])
+ break;
+ }
+ switch((int)(q - units)) {
+ /*in*/ case 0: factor = 1.0; break;
+ /*cm*/ case 2: factor = 1.0 / 2.54; break;
+ /*mm*/ case 4: factor = 1.0 / 25.4; break;
+ /*mt*/ case 6: factor = 1.0 / 0.0254; break;
+ /*pt*/ case 8: factor = 1.0 / 72.27; break;
+ /*pc*/ case 10: factor = 12.0 / 72.27; break;
+ /*dd*/ case 12: factor = (1238.0 / 1157.0) / 72.27; break;
+ /*cc*/ case 14: factor = 12 * (1238.0 / 1157.0) / 72.27; break;
+ /*sp*/ case 16: factor = 1.0 / (72.27 * 65536); break;
+ /*bp*/ case 18: factor = 1.0 / 72.0; break;
+ /*ft*/ case 20: factor = 12.0; break;
+ /*yd*/ case 22: factor = 36.0; break;
+ /*cs*/ case 24: factor = 1.0 / 72000.0; break;
+ default: factor = 1.0;
+ }
+ return factor * val;
+}
+
+int unit2pix(int dpi, const char *spec)
+{
+ double factor = unit2pix_factor(spec);
+
+ return (int)(factor * dpi + 0.5);
+}
+
+Ulong get_mtime(int fd)
+{
+ struct stat st;
+
+ if(fstat(fd, &st) == 0)
+ return (Ulong)st.st_mtime;
+ return 0;
+}
+
+char *xstradd(char *dest, size_t *size, size_t n, const char *src, size_t m)
+{
+ if(m == 0)
+ m = strlen(src);
+ if(n + m >= *size) {
+ dest = mdvi_realloc(dest, n + m + 1);
+ *size = n + m + 1;
+ }
+ memcpy(dest + n, src, m);
+ dest[n + m] = 0;
+ return dest;
+}
+
+char *getword(char *string, const char *delim, char **end)
+{
+ char *ptr;
+ char *word;
+
+ /* skip leading delimiters */
+ for(ptr = string; *ptr && strchr(delim, *ptr); ptr++);
+
+ if(*ptr == 0)
+ return NULL;
+ word = ptr++;
+ /* skip non-delimiters */
+ while(*ptr && !strchr(delim, *ptr))
+ ptr++;
+ *end = (char *)ptr;
+ return word;
+}
+
+char *getstring(char *string, const char *delim, char **end)
+{
+ char *ptr;
+ char *word;
+ int quoted = 0;
+
+ /* skip leading delimiters */
+ for(ptr = string; *ptr && strchr(delim, *ptr); ptr++);
+
+ if(ptr == NULL)
+ return NULL;
+ quoted = (*ptr == '"');
+ if(quoted)
+ for(word = ++ptr; *ptr && *ptr != '"'; ptr++);
+ else
+ for(word = ptr; *ptr && !strchr(delim, *ptr); ptr++);
+ *end = (char *)ptr;
+ return word;
+}
+
+static long pow2(size_t n)
+{
+ long x = 8; /* don't bother allocating less than this */
+
+ while(x < n)
+ x <<= 1L;
+ return x;
+}
+
+void dstring_init(Dstring *dstr)
+{
+ dstr->data = NULL;
+ dstr->size = 0;
+ dstr->length = 0;
+}
+
+int dstring_append(Dstring *dstr, const char *string, int len)
+{
+ if(len < 0)
+ len = strlen(string);
+ if(len) {
+ if(dstr->length + len >= dstr->size) {
+ dstr->size = pow2(dstr->length + len + 1);
+ dstr->data = mdvi_realloc(dstr->data, dstr->size);
+ }
+ memcpy(dstr->data + dstr->length, string, len);
+ dstr->length += len;
+ dstr->data[dstr->length] = 0;
+ } else if(dstr->size == 0) {
+ ASSERT(dstr->data == NULL);
+ dstr->size = 8;
+ dstr->data = mdvi_malloc(8);
+ dstr->data[0] = 0;
+ }
+
+ return dstr->length;
+}
+
+int dstring_copy(Dstring *dstr, int pos, const char *string, int len)
+{
+ ASSERT(pos >= 0);
+ if(len < 0)
+ len = strlen(string);
+ if(len) {
+ if(pos + len >= dstr->length) {
+ dstr->length = pos;
+ return dstring_append(dstr, string, len);
+ }
+ memcpy(dstr->data + pos, string, len);
+ }
+ return dstr->length;
+}
+
+int dstring_insert(Dstring *dstr, int pos, const char *string, int len)
+{
+ ASSERT(pos >= 0);
+ if(pos == dstr->length)
+ return dstring_append(dstr, string, len);
+ if(len < 0)
+ len = strlen(string);
+ if(len) {
+ if(dstr->length + len >= dstr->size) {
+ dstr->size = pow2(dstr->length + len + 1);
+ dstr->data = mdvi_realloc(dstr->data, dstr->size);
+ }
+ /* make room */
+ memmove(dstr->data + pos, dstr->data + pos + len, len);
+ /* now copy */
+ memcpy(dstr->data + pos, string, len);
+ dstr->length += len;
+ dstr->data[dstr->length] = 0;
+ }
+ return dstr->length;
+}
+
+int dstring_new(Dstring *dstr, const char *string, int len)
+{
+ if(len < 0)
+ len = strlen(string);
+ if(len) {
+ dstr->size = pow2(len + 1);
+ dstr->data = mdvi_malloc(dstr->size * len);
+ memcpy(dstr->data, string, len);
+ } else
+ dstring_init(dstr);
+ return dstr->length;
+}
+
+void dstring_reset(Dstring *dstr)
+{
+ if(dstr->data)
+ mdvi_free(dstr->data);
+ dstring_init(dstr);
+}
+
diff --git a/backend/dvi/mdvi-lib/vf.c b/backend/dvi/mdvi-lib/vf.c
new file mode 100644
index 00000000..fb498476
--- /dev/null
+++ b/backend/dvi/mdvi-lib/vf.c
@@ -0,0 +1,241 @@
+/* vf.c -- VF font support */
+/*
+ * Copyright (C) 2000, Matias Atria
+ *
+ * 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 <config.h>
+#include <string.h>
+
+#include "mdvi.h"
+#include "private.h"
+
+static int vf_load_font __PROTO((DviParams *, DviFont *));
+static void vf_free_macros __PROTO((DviFont *));
+
+/* only symbol exported by this file */
+DviFontInfo vf_font_info = {
+ "VF",
+ 1, /* virtual fonts scale just fine */
+ vf_load_font,
+ NULL, /* get_glyph */
+ NULL, /* shrink0 */
+ NULL, /* shrink1 */
+ vf_free_macros,
+ NULL, /* reset */
+ NULL, /* lookup */
+ kpse_vf_format,
+ NULL
+};
+
+DviFontInfo ovf_font_info = {
+ "OVF",
+ 1, /* virtual fonts scale just fine */
+ vf_load_font,
+ NULL, /* get_glyph */
+ NULL, /* shrink0 */
+ NULL, /* shrink1 */
+ vf_free_macros,
+ NULL, /* reset */
+ NULL, /* lookup */
+ kpse_ovf_format,
+ NULL
+};
+
+static int vf_load_font(DviParams *params, DviFont *font)
+{
+ FILE *p;
+ Uchar *macros;
+ int msize;
+ int mlen;
+ Int32 checksum;
+ long alpha, beta, z;
+ int op;
+ int i;
+ int nchars;
+ int loc, hic;
+ DviFontRef *last;
+
+ macros = NULL;
+ msize = mlen = 0;
+ p = font->in;
+
+ if(fuget1(p) != 247 || fuget1(p) != 202)
+ goto badvf;
+ mlen = fuget1(p);
+ fseek(p, (long)mlen, SEEK_CUR);
+ checksum = fuget4(p);
+ if(checksum && font->checksum && checksum != font->checksum) {
+ mdvi_warning(_("%s: Checksum mismatch (expected %u, got %u)\n"),
+ font->fontname, font->checksum, checksum);
+ } else if(!font->checksum)
+ font->checksum = checksum;
+ font->design = fuget4(p);
+
+ /* read all the fonts in the preamble */
+ last = NULL;
+
+ /* initialize alpha, beta and z for TFM width computation */
+ TFMPREPARE(font->scale, z, alpha, beta);
+
+ op = fuget1(p);
+ while(op >= DVI_FNT_DEF1 && op <= DVI_FNT_DEF4) {
+ DviFontRef *ref;
+ Int32 scale, design;
+ Uint32 checksum;
+ int id;
+ int n;
+ int hdpi;
+ int vdpi;
+ char *name;
+
+ /* process fnt_def commands */
+
+ id = fugetn(p, op - DVI_FNT_DEF1 + 1);
+ checksum = fuget4(p);
+ scale = fuget4(p);
+ design = fuget4(p);
+
+ /* scale this font according to our parent's scale */
+ scale = TFMSCALE(scale, z, alpha, beta);
+ design = FROUND(params->tfm_conv * design);
+
+ /* compute the resolution */
+ hdpi = FROUND(params->mag * params->dpi * scale / design);
+ vdpi = FROUND(params->mag * params->vdpi * scale / design);
+ n = fuget1(p) + fuget1(p);
+ name = mdvi_malloc(n + 1);
+ fread(name, 1, n, p);
+ name[n] = 0;
+ DEBUG((DBG_FONTS, "(vf) %s: defined font `%s' at %.1fpt (%dx%d dpi)\n",
+ font->fontname, name,
+ (double)scale / (params->tfm_conv * 0x100000), hdpi, vdpi));
+
+ /* get the font */
+ ref = font_reference(params, id, name, checksum, hdpi, vdpi, scale);
+ if(ref == NULL) {
+ mdvi_error(_("(vf) %s: could not load font `%s'\n"),
+ font->fontname, name);
+ goto error;
+ }
+ mdvi_free(name);
+ if(last == NULL)
+ font->subfonts = last = ref;
+ else
+ last->next = ref;
+ ref->next = NULL;
+ op = fuget1(p);
+ }
+
+ if(op >= DVI_FNT_DEF1 && op <= DVI_FNT_DEF4)
+ goto error;
+
+ /* This function correctly reads both .vf and .ovf files */
+
+ font->chars = xnalloc(DviFontChar, 256);
+ for(i = 0; i < 256; i++)
+ font->chars[i].offset = 0;
+ nchars = 256;
+ loc = -1; hic = -1;
+ /* now read the characters themselves */
+ while(op <= 242) {
+ int pl;
+ Int32 cc;
+ Int32 tfm;
+
+ if(op == 242) {
+ pl = fuget4(p);
+ cc = fuget4(p);
+ tfm = fuget4(p);
+ } else {
+ pl = op;
+ cc = fuget1(p);
+ tfm = fuget3(p);
+ }
+ if(loc < 0 || cc < loc)
+ loc = cc;
+ if(hic < 0 || cc > hic)
+ hic = cc;
+ if(cc >= nchars) {
+ font->chars = xresize(font->chars,
+ DviFontChar, cc + 16);
+ for(i = nchars; i < cc + 16; i++)
+ font->chars[i].offset = 0;
+ nchars = cc + 16;
+ }
+ if(font->chars[cc].offset) {
+ mdvi_error(_("(vf) %s: character %d redefined\n"),
+ font->fontname, cc);
+ goto error;
+ }
+
+ DEBUG((DBG_GLYPHS, "(vf) %s: defined character %d (macro length %d)\n",
+ font->fontname, cc, pl));
+ font->chars[cc].width = pl + 1;
+ font->chars[cc].code = cc;
+ font->chars[cc].tfmwidth = TFMSCALE(tfm, z, alpha, beta);
+ font->chars[cc].offset = mlen;
+ font->chars[cc].loaded = 1;
+ if(mlen + pl + 1 > msize) {
+ msize = mlen + pl + 256;
+ macros = xresize(macros, Uchar, msize);
+ }
+ if(pl && fread(macros + mlen, 1, pl, p) != pl)
+ break;
+ macros[mlen+pl] = DVI_EOP;
+ mlen += pl + 1;
+ op = fuget1(p);
+ }
+ if(op != 248) {
+ mdvi_error(_("(vf) %s: no postamble\n"), font->fontname);
+ goto error;
+ }
+
+ /* make macro memory just big enough */
+ if(msize > mlen) {
+ macros = xresize(macros, Uchar, mlen);
+ msize = mlen;
+ }
+
+ DEBUG((DBG_FONTS|DBG_GLYPHS,
+ "(vf) %s: macros use %d bytes\n", font->fontname, msize));
+
+ if(loc > 0 || hic < nchars-1) {
+ memmove(font->chars, font->chars + loc,
+ (hic - loc + 1) * sizeof(DviFontChar));
+ font->chars = xresize(font->chars,
+ DviFontChar, hic - loc + 1);
+ }
+ font->loc = loc;
+ font->hic = hic;
+ font->private = macros;
+
+ return 0;
+
+badvf:
+ mdvi_error(_("%s: File corrupted, or not a VF file.\n"), font->fontname);
+error:
+ if(font->chars)
+ mdvi_free(font->chars);
+ if(macros)
+ mdvi_free(macros);
+ return -1;
+}
+
+static void vf_free_macros(DviFont *font)
+{
+ mdvi_free(font->private);
+}
diff --git a/backend/dvi/texmfcnf.c b/backend/dvi/texmfcnf.c
new file mode 100644
index 00000000..9ca3125f
--- /dev/null
+++ b/backend/dvi/texmfcnf.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2010, Hib Eris <[email protected]>
+ *
+ * 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 "config.h"
+
+#include "texmfcnf.h"
+
+#include <glib.h>
+#include <stdlib.h>
+#ifdef G_OS_WIN32
+#include <windows.h>
+#endif
+
+gchar *
+get_texmfcnf(void)
+{
+ char *env = getenv("TEXMFCNF");
+ if (env)
+ return g_strdup(env);
+
+#ifdef G_OS_WIN32
+ gchar *texmfcnf = NULL;
+ TCHAR path[_MAX_PATH];
+
+ if (SearchPath(NULL, "mktexpk", ".exe", _MAX_PATH, path, NULL))
+ {
+ gchar *sdir, *sdir_parent, *sdir_grandparent;
+ const gchar *texmfcnf_fmt = "{%s,%s,%s}{,{/share,}/texmf{-local,}/web2c}";
+
+ sdir = g_path_get_dirname(path);
+ sdir_parent = g_path_get_dirname(sdir);
+ sdir_grandparent = g_path_get_dirname(sdir_parent);
+
+ texmfcnf = g_strdup_printf(texmfcnf_fmt,
+ sdir, sdir_parent, sdir_grandparent);
+
+ g_free(sdir);
+ g_free(sdir_parent);
+ g_free(sdir_grandparent);
+ }
+ return texmfcnf;
+#else
+ return NULL;
+#endif
+}
+
+
+
+
diff --git a/backend/dvi/texmfcnf.h b/backend/dvi/texmfcnf.h
new file mode 100644
index 00000000..11cb9b3d
--- /dev/null
+++ b/backend/dvi/texmfcnf.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2010, Hib Eris <[email protected]>
+ *
+ * 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 TEXMFCNF_H
+#define TEXMFCNF_H
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+gchar *get_texmfcnf(void);
+
+G_END_DECLS
+
+#endif /* TEXMFCNF_H */
+
+
+
+
diff --git a/backend/impress/Makefile.am b/backend/impress/Makefile.am
new file mode 100644
index 00000000..a7b65705
--- /dev/null
+++ b/backend/impress/Makefile.am
@@ -0,0 +1,57 @@
+INCLUDES = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libdocument \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DEVINCEDATADIR=\""$(datadir)"\" \
+ -DEVINCE_COMPILATION \
+ $(BACKEND_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+backend_LTLIBRARIES = libimpressdocument.la
+
+libimpressdocument_la_SOURCES = \
+ $(IMPOSTER_SOURCE_FILES) \
+ $(IMPOSTER_INCLUDE_FILES) \
+ impress-document.c \
+ impress-document.h
+
+IMPOSTER_SOURCE_FILES = \
+ document.c \
+ f_oasis.c \
+ f_oo13.c \
+ iksemel.c \
+ r_back.c \
+ r_draw.c \
+ render.c \
+ r_geometry.c \
+ r_gradient.c \
+ r_style.c \
+ r_text.c \
+ zip.c
+IMPOSTER_INCLUDE_FILES = \
+ common.h \
+ iksemel.h \
+ imposter.h \
+ internal.h \
+ zip.h
+IMPOSTER_RENDER_SOURCE_FILES = \
+ render.c
+IMPOSTER_RENDER_INCLUDE_FILES = \
+ render.h
+
+libimpressdocument_la_LDFLAGS = $(BACKEND_LIBTOOL_FLAGS)
+libimpressdocument_la_LIBADD = \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(BACKEND_LIBS) -lz
+
+backend_in_files = impressdocument.evince-backend.in
+backend_DATA = $(backend_in_files:.evince-backend.in=.evince-backend)
+
+EXTRA_DIST = $(backend_in_files)
+
+CLEANFILES = $(backend_DATA)
+
+@EV_INTLTOOL_EVINCE_BACKEND_RULE@
+
+-include $(top_srcdir)/git.mk
diff --git a/backend/impress/common.h b/backend/impress/common.h
new file mode 100644
index 00000000..73e4ac19
--- /dev/null
+++ b/backend/impress/common.h
@@ -0,0 +1,40 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#ifndef COMMON_H
+#define COMMON_H 1
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <sys/types.h>
+#include <stdio.h>
+
+#ifdef STDC_HEADERS
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#elif HAVE_STRINGS_H
+#include <strings.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+#ifndef errno
+extern int errno;
+#endif
+
+#include <iksemel.h>
+#include "imposter.h"
+
+
+#endif /* COMMON_H */
diff --git a/backend/impress/document.c b/backend/impress/document.c
new file mode 100644
index 00000000..b01c0e18
--- /dev/null
+++ b/backend/impress/document.c
@@ -0,0 +1,140 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#include <config.h>
+#include "common.h"
+#include "internal.h"
+
+static iks *
+_imp_load_xml(ImpDoc *doc, const char *xmlfile)
+{
+ int e;
+ iks *x;
+
+ x = zip_load_xml (doc->zfile, xmlfile, &e);
+ return x;
+}
+
+ImpDoc *
+imp_open(const char *filename, int *err)
+{
+ ImpDoc *doc;
+ int e;
+
+ doc = calloc(1, sizeof(ImpDoc));
+ if (!doc) {
+ *err = IMP_NOMEM;
+ return NULL;
+ }
+
+ doc->stack = iks_stack_new(sizeof(ImpPage) * 32, 0);
+ if (!doc->stack) {
+ *err = IMP_NOMEM;
+ imp_close(doc);
+ return NULL;
+ }
+
+ doc->zfile = zip_open(filename, &e);
+ if (e) {
+ *err = IMP_NOTZIP;
+ imp_close(doc);
+ return NULL;
+ }
+
+ doc->content = _imp_load_xml(doc, "content.xml");
+ doc->styles = _imp_load_xml(doc, "styles.xml");
+ doc->meta = _imp_load_xml(doc, "meta.xml");
+
+ if (!doc->content || !doc->styles) {
+ *err = IMP_BADDOC;
+ imp_close(doc);
+ return NULL;
+ }
+
+ e = _imp_oo13_load(doc);
+ if (e && e != IMP_NOTIMP) {
+ *err = e;
+ imp_close(doc);
+ return NULL;
+ }
+
+ if (e == IMP_NOTIMP) {
+ e = _imp_oasis_load(doc);
+ if (e) {
+ *err = e;
+ imp_close(doc);
+ return NULL;
+ }
+ }
+
+ return doc;
+}
+
+int
+imp_nr_pages(ImpDoc *doc)
+{
+ return doc->nr_pages;
+}
+
+ImpPage *
+imp_get_page(ImpDoc *doc, int page_no)
+{
+ if (page_no == IMP_LAST_PAGE) {
+ return doc->last_page;
+ } else {
+ ImpPage *page;
+ if (page_no < 0 || page_no > doc->nr_pages) return NULL;
+ for (page = doc->pages; page_no; --page_no) {
+ page = page->next;
+ }
+ return page;
+ }
+}
+
+ImpPage *
+imp_next_page(ImpPage *page)
+{
+ return page->next;
+}
+
+ImpPage *
+imp_prev_page(ImpPage *page)
+{
+ return page->prev;
+}
+
+int
+imp_get_page_no(ImpPage *page)
+{
+ return page->nr;
+}
+
+const char *
+imp_get_page_name(ImpPage *page)
+{
+ return page->name;
+}
+
+void *
+imp_get_xml(ImpDoc *doc, const char *filename)
+{
+ if (strcmp(filename, "content.xml") == 0)
+ return doc->content;
+ else if (strcmp(filename, "styles.xml") == 0)
+ return doc->styles;
+ else if (strcmp(filename, "meta.xml") == 0)
+ return doc->meta;
+ else
+ return NULL;
+}
+
+void
+imp_close(ImpDoc *doc)
+{
+ if (doc->stack) iks_stack_delete(doc->stack);
+ if (doc->zfile) zip_close(doc->zfile);
+ free(doc);
+}
diff --git a/backend/impress/f_oasis.c b/backend/impress/f_oasis.c
new file mode 100644
index 00000000..8fe6ee1a
--- /dev/null
+++ b/backend/impress/f_oasis.c
@@ -0,0 +1,170 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#include <config.h>
+#include "common.h"
+#include "internal.h"
+
+static void
+render_object(ImpRenderCtx *ctx, void *drw_data, iks *node)
+{
+ char *tag, *t;
+ ImpColor fg;
+
+ tag = iks_name(node);
+ if (strcmp(tag, "draw:g") == 0) {
+ iks *x;
+ for (x = iks_first_tag(node); x; x = iks_next_tag(x)) {
+ render_object(ctx, drw_data, x);
+ }
+ } else if (strcmp(tag, "draw:frame") == 0) {
+ iks *x;
+ for (x = iks_first_tag(node); x; x = iks_next_tag(x)) {
+ render_object(ctx, drw_data, x);
+ }
+ } else if (strcmp(tag, "draw:line") == 0) {
+ r_get_color(ctx, node, "svg:stroke-color", &fg);
+ ctx->drw->set_fg_color(drw_data, &fg);
+ ctx->drw->draw_line(drw_data,
+ r_get_x(ctx, node, "svg:x1"), r_get_y(ctx, node, "svg:y1"),
+ r_get_x(ctx, node, "svg:x2"), r_get_y(ctx, node, "svg:y2")
+ );
+ } else if (strcmp(tag, "draw:rect") == 0) {
+ int x, y, w, h, r = 0;
+ char *t;
+ x = r_get_x(ctx, node, "svg:x");
+ y = r_get_y(ctx, node, "svg:y");
+ w = r_get_x(ctx, node, "svg:width");
+ h = r_get_y(ctx, node, "svg:height");
+ t = r_get_style(ctx, node, "draw:corner-radius");
+ if (t) r = atof(t) * ctx->fact_x;
+ if (r_get_style(ctx, node, "draw:fill")) {
+ r_get_color(ctx, node, "draw:fill-color", &fg);
+ ctx->drw->set_fg_color(drw_data, &fg);
+ _imp_draw_rect(ctx, drw_data, 1, x, y, w, h, r);
+ }
+ r_get_color(ctx, node, "svg:stroke-color", &fg);
+ ctx->drw->set_fg_color(drw_data, &fg);
+ _imp_draw_rect(ctx, drw_data, 0, x, y, w, h, r);
+ r_text(ctx, drw_data, node);
+ } else if (strcmp(tag, "draw:ellipse") == 0 || strcmp(tag, "draw:circle") == 0) {
+ int sa, ea, fill = 0;
+ r_get_color(ctx, node, "svg:stroke-color", &fg);
+ sa = r_get_angle(node, "draw:start-angle", 0);
+ ea = r_get_angle(node, "draw:end-angle", 360);
+ if (ea > sa) ea = ea - sa; else ea = 360 + ea - sa;
+ t = r_get_style(ctx, node, "draw:fill");
+ if (t) fill = 1;
+ ctx->drw->set_fg_color(drw_data, &fg);
+ ctx->drw->draw_arc(drw_data,
+ fill,
+ r_get_x(ctx, node, "svg:x"), r_get_y(ctx, node, "svg:y"),
+ r_get_x(ctx, node, "svg:width"), r_get_y(ctx, node, "svg:height"),
+ sa, ea
+ );
+ } else if (strcmp(tag, "draw:polygon") == 0) {
+ // FIXME:
+ r_polygon(ctx, drw_data, node);
+ } else if (strcmp(tag, "draw:text-box") == 0) {
+ // FIXME:
+ r_text(ctx, drw_data, node);
+ } else if (strcmp(tag, "draw:image") == 0) {
+ char *name;
+
+ name = iks_find_attrib(node, "xlink:href");
+ if (!name) return;
+ if (name[0] == '#') ++name;
+
+ _imp_draw_image(ctx, drw_data,
+ name,
+ r_get_x(ctx, node, "svg:x"),
+ r_get_y(ctx, node, "svg:y"),
+ r_get_x(ctx, node, "svg:width"),
+ r_get_y(ctx, node, "svg:height")
+ );
+ } else {
+ printf("Unknown element: %s\n", tag);
+ }
+}
+
+static void
+render_page(ImpRenderCtx *ctx, void *drw_data)
+{
+ iks *x;
+ char *element;
+ int i;
+
+ i = _imp_fill_back(ctx, drw_data, ctx->page->page);
+ element = iks_find_attrib(ctx->page->page, "draw:master-page-name");
+ if (element) {
+ x = iks_find_with_attrib(
+ iks_find(ctx->page->doc->styles, "office:master-styles"),
+ "style:master-page", "style:name", element
+ );
+ if (x) {
+ if (i == 0) _imp_fill_back(ctx, drw_data, x);
+ for (x = iks_first_tag(x); x; x = iks_next_tag(x)) {
+ if (iks_find_attrib(x, "presentation:class"))
+ continue;
+ render_object(ctx, drw_data, x);
+ }
+ }
+ }
+ for (x = iks_first_tag(ctx->page->page); x; x = iks_next_tag(x)) {
+ render_object(ctx, drw_data, x);
+ }
+}
+
+static void
+get_geometry(ImpRenderCtx *ctx)
+{
+ char *tmp;
+ iks *x, *y;
+
+ tmp = iks_find_attrib(ctx->page->page, "draw:master-page-name");
+ x = iks_find(ctx->page->doc->styles, "office:master-styles");
+ y = iks_find_with_attrib(x, "style:master-page", "style:name", tmp);
+ x = iks_find(ctx->page->doc->styles, "office:automatic-styles");
+ y = iks_find_with_attrib(x, "style:page-layout", "style:name",
+ iks_find_attrib(y, "style:page-layout-name"));
+ ctx->cm_w = atof(iks_find_attrib(iks_find(y, "style:page-layout-properties"), "fo:page-width"));
+ ctx->cm_h = atof(iks_find_attrib(iks_find(y, "style:page-layout-properties"), "fo:page-height"));
+}
+
+int
+_imp_oasis_load(ImpDoc *doc)
+{
+ ImpPage *page;
+ iks *x, *pres;
+ int i;
+
+ pres = iks_find(iks_find(doc->content, "office:body"), "office:presentation");
+ if (!pres) return IMP_NOTIMP;
+
+ x = iks_find(pres, "draw:page");
+ if (!x) return IMP_NOTIMP;
+ i = 0;
+ for (; x; x = iks_next_tag(x)) {
+ if (strcmp(iks_name(x), "draw:page") == 0) {
+ page = iks_stack_alloc(doc->stack, sizeof(ImpPage));
+ if (!page) return IMP_NOMEM;
+ memset(page, 0, sizeof(ImpPage));
+ page->page = x;
+ page->nr = ++i;
+ page->name = iks_find_attrib(x, "draw:name");
+ page->doc = doc;
+ if (!doc->pages) doc->pages = page;
+ page->prev = doc->last_page;
+ if (doc->last_page) doc->last_page->next = page;
+ doc->last_page = page;
+ }
+ }
+ doc->nr_pages = i;
+ doc->get_geometry = get_geometry;
+ doc->render_page = render_page;
+
+ return 0;
+}
diff --git a/backend/impress/f_oo13.c b/backend/impress/f_oo13.c
new file mode 100644
index 00000000..7bfeeb53
--- /dev/null
+++ b/backend/impress/f_oo13.c
@@ -0,0 +1,181 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#include <config.h>
+#include "common.h"
+#include "internal.h"
+
+// { "draw:text-box", r_text },
+// { "draw:connector", r_line },
+// { "draw:polyline", r_polyline },
+// { "draw:polygon", r_polygon },
+// { "draw:path", r_path },
+
+static void
+render_object(ImpRenderCtx *ctx, void *drw_data, iks *node)
+{
+ char *tag, *t;
+ ImpColor fg;
+
+ tag = iks_name(node);
+ if (strcmp(tag, "draw:g") == 0) {
+ iks *x;
+ for (x = iks_first_tag(node); x; x = iks_next_tag(x)) {
+ render_object(ctx, drw_data, x);
+ }
+ } else if (strcmp(tag, "draw:line") == 0) {
+ int x1, y1, x2, y2;
+ r_get_color(ctx, node, "svg:stroke-color", &fg);
+ ctx->drw->set_fg_color(drw_data, &fg);
+ x1 = r_get_x(ctx, node, "svg:x1");
+ y1 = r_get_y(ctx, node, "svg:y1");
+ x2 = r_get_x(ctx, node, "svg:x2");
+ y2 = r_get_y(ctx, node, "svg:y2");
+ ctx->drw->draw_line(drw_data, x1, y1, x2, y2);
+ if (r_get_style(ctx, node, "draw:marker-start")) {
+ _imp_draw_line_end(ctx, drw_data, 0, 0, x2, y2, x1, y1);
+ }
+ if (r_get_style(ctx, node, "draw:marker-end")) {
+ _imp_draw_line_end(ctx, drw_data, 0, 0, x1, y1, x2, y2);
+ }
+ } else if (strcmp(tag, "draw:rect") == 0) {
+ int x, y, w, h, r = 0;
+ char *t;
+ x = r_get_x(ctx, node, "svg:x");
+ y = r_get_y(ctx, node, "svg:y");
+ w = r_get_x(ctx, node, "svg:width");
+ h = r_get_y(ctx, node, "svg:height");
+ t = r_get_style(ctx, node, "draw:corner-radius");
+ if (t) r = atof(t) * ctx->fact_x;
+ t = r_get_style(ctx, node, "draw:fill");
+ if (t && strcmp(t, "none") != 0) {
+ r_get_color(ctx, node, "draw:fill-color", &fg);
+ ctx->drw->set_fg_color(drw_data, &fg);
+ _imp_draw_rect(ctx, drw_data, 1, x, y, w, h, r);
+ }
+ r_get_color(ctx, node, "svg:stroke-color", &fg);
+ ctx->drw->set_fg_color(drw_data, &fg);
+ _imp_draw_rect(ctx, drw_data, 0, x, y, w, h, r);
+ r_text(ctx, drw_data, node);
+ } else if (strcmp(tag, "draw:ellipse") == 0 || strcmp(tag, "draw:circle") == 0) {
+ int sa, ea, fill = 0;
+ r_get_color(ctx, node, "svg:stroke-color", &fg);
+ sa = r_get_angle(node, "draw:start-angle", 0);
+ ea = r_get_angle(node, "draw:end-angle", 360);
+ if (ea > sa) ea = ea - sa; else ea = 360 + ea - sa;
+ t = r_get_style(ctx, node, "draw:fill");
+ if (t) fill = 1;
+ ctx->drw->set_fg_color(drw_data, &fg);
+ ctx->drw->draw_arc(drw_data,
+ fill,
+ r_get_x(ctx, node, "svg:x"), r_get_y(ctx, node, "svg:y"),
+ r_get_x(ctx, node, "svg:width"), r_get_y(ctx, node, "svg:height"),
+ sa, ea
+ );
+ } else if (strcmp(tag, "draw:polygon") == 0) {
+ // FIXME:
+ r_polygon(ctx, drw_data, node);
+ } else if (strcmp(tag, "draw:text-box") == 0) {
+ // FIXME:
+ r_text(ctx, drw_data, node);
+ } else if (strcmp(tag, "draw:image") == 0) {
+ char *name;
+
+ name = iks_find_attrib(node, "xlink:href");
+ if (!name) return;
+ if (name[0] == '#') ++name;
+
+ _imp_draw_image(ctx, drw_data,
+ name,
+ r_get_x(ctx, node, "svg:x"),
+ r_get_y(ctx, node, "svg:y"),
+ r_get_x(ctx, node, "svg:width"),
+ r_get_y(ctx, node, "svg:height")
+ );
+ } else {
+ printf("Unknown element: %s\n", tag);
+ }
+}
+
+static void
+render_page(ImpRenderCtx *ctx, void *drw_data)
+{
+ iks *x;
+ char *element;
+ int i;
+
+ i = _imp_fill_back(ctx, drw_data, ctx->page->page);
+ element = iks_find_attrib(ctx->page->page, "draw:master-page-name");
+ if (element) {
+ x = iks_find_with_attrib(
+ iks_find(ctx->page->doc->styles, "office:master-styles"),
+ "style:master-page", "style:name", element
+ );
+ if (x) {
+ if (i == 0) _imp_fill_back(ctx, drw_data, x);
+ for (x = iks_first_tag(x); x; x = iks_next_tag(x)) {
+ if (iks_find_attrib(x, "presentation:class"))
+ continue;
+ render_object(ctx, drw_data, x);
+ }
+ }
+ }
+ for (x = iks_first_tag(ctx->page->page); x; x = iks_next_tag(x)) {
+ render_object(ctx, drw_data, x);
+ }
+}
+
+static void
+get_geometry(ImpRenderCtx *ctx)
+{
+ char *tmp;
+ iks *x, *y;
+
+ tmp = iks_find_attrib(ctx->page->page, "draw:master-page-name");
+ x = iks_find(ctx->page->doc->styles, "office:master-styles");
+ y = iks_find_with_attrib(x, "style:master-page", "style:name", tmp);
+ x = iks_find(ctx->page->doc->styles, "office:automatic-styles");
+ y = iks_find_with_attrib(x, "style:page-master", "style:name",
+ iks_find_attrib(y, "style:page-master-name"));
+ ctx->cm_w = atof(iks_find_attrib(iks_find(y, "style:properties"), "fo:page-width"));
+ ctx->cm_h = atof(iks_find_attrib(iks_find(y, "style:properties"), "fo:page-height"));
+}
+
+int
+_imp_oo13_load(ImpDoc *doc)
+{
+ ImpPage *page;
+ char *class;
+ iks *x;
+ int i;
+
+ class = iks_find_attrib(doc->content, "office:class");
+ if (iks_strcmp(class, "presentation") != 0) return IMP_NOTIMP;
+
+ x = iks_find(iks_find(doc->content, "office:body"), "draw:page");
+ if (!x) return IMP_NOTIMP;
+ i = 0;
+ for (; x; x = iks_next_tag(x)) {
+ if (strcmp(iks_name(x), "draw:page") == 0) {
+ page = iks_stack_alloc(doc->stack, sizeof(ImpPage));
+ if (!page) return IMP_NOMEM;
+ memset(page, 0, sizeof(ImpPage));
+ page->page = x;
+ page->nr = ++i;
+ page->name = iks_find_attrib(x, "draw:name");
+ page->doc = doc;
+ if (!doc->pages) doc->pages = page;
+ page->prev = doc->last_page;
+ if (doc->last_page) doc->last_page->next = page;
+ doc->last_page = page;
+ }
+ }
+ doc->nr_pages = i;
+ doc->get_geometry = get_geometry;
+ doc->render_page = render_page;
+
+ return 0;
+}
diff --git a/backend/impress/iksemel.c b/backend/impress/iksemel.c
new file mode 100644
index 00000000..9908e132
--- /dev/null
+++ b/backend/impress/iksemel.c
@@ -0,0 +1,1882 @@
+/* iksemel (XML parser for Jabber)
+** Copyright (C) 2000-2003 Gurer Ozen <[email protected]>
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU Lesser General Public License.
+*/
+
+/* minimum sax buffer size */
+#define SAX_BUFFER_MIN_SIZE 128
+
+/* sax parser structure plus extra data of dom parser */
+#define DEFAULT_DOM_CHUNK_SIZE 256
+
+/* sax parser structure plus extra data of stream parser */
+#define DEFAULT_STREAM_CHUNK_SIZE 256
+
+/* iks structure, its data, child iks structures, for stream parsing */
+#define DEFAULT_IKS_CHUNK_SIZE 1024
+
+/* iks structure, its data, child iks structures, for file parsing */
+#define DEFAULT_DOM_IKS_CHUNK_SIZE 2048
+
+/* rule structure and from/to/id/ns strings */
+#define DEFAULT_RULE_CHUNK_SIZE 128
+
+/* file is read by blocks with this size */
+#define FILE_IO_BUF_SIZE 4096
+
+/* network receive buffer */
+#define NET_IO_BUF_SIZE 4096
+/* iksemel (XML parser for Jabber)
+** Copyright (C) 2000-2003 Gurer Ozen <[email protected]>
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU Lesser General Public License.
+*/
+
+#include <config.h>
+#include <errno.h>
+
+#include "common.h"
+#include "iksemel.h"
+
+/***** malloc wrapper *****/
+
+static void *(*my_malloc_func)(size_t size);
+static void (*my_free_func)(void *ptr);
+
+void *
+iks_malloc (size_t size)
+{
+ if (my_malloc_func)
+ return my_malloc_func (size);
+ else
+ return malloc (size);
+}
+
+void
+iks_free (void *ptr)
+{
+ if (my_free_func)
+ my_free_func (ptr);
+ else
+ free (ptr);
+}
+
+void
+iks_set_mem_funcs (void *(*malloc_func)(size_t size), void (*free_func)(void *ptr))
+{
+ my_malloc_func = malloc_func;
+ my_free_func = free_func;
+}
+
+/***** NULL-safe Functions *****/
+
+char *
+iks_strdup (const char *src)
+{
+ if (src) return strdup(src);
+ return NULL;
+}
+
+char *
+iks_strcat (char *dest, const char *src)
+{
+ size_t len;
+
+ if (!src) return dest;
+
+ len = strlen (src);
+ memcpy (dest, src, len);
+ dest[len] = '\0';
+ return dest + len;
+}
+
+int
+iks_strcmp (const char *a, const char *b)
+{
+ if (!a || !b) return -1;
+ return strcmp (a, b);
+}
+
+int
+iks_strcasecmp (const char *a, const char *b)
+{
+ if (!a || !b) return -1;
+ return strcasecmp (a, b);
+}
+
+int
+iks_strncmp (const char *a, const char *b, size_t n)
+{
+ if (!a || !b) return -1;
+ return strncmp (a, b, n);
+}
+
+int
+iks_strncasecmp (const char *a, const char *b, size_t n)
+{
+ if (!a || !b) return -1;
+ return strncasecmp (a, b, n);
+}
+
+size_t
+iks_strlen (const char *src)
+{
+ if (!src) return 0;
+ return strlen (src);
+}
+
+/***** XML Escaping *****/
+
+char *
+iks_escape (ikstack *s, char *src, size_t len)
+{
+ char *ret;
+ int i, j, nlen;
+
+ if (!src || !s) return NULL;
+ if (len == -1) len = strlen (src);
+
+ nlen = len;
+ for (i=0; i<len; i++) {
+ switch (src[i]) {
+ case '&': nlen += 4; break;
+ case '<': nlen += 3; break;
+ case '>': nlen += 3; break;
+ case '\'': nlen += 5; break;
+ case '"': nlen += 5; break;
+ }
+ }
+ if (len == nlen) return src;
+
+ ret = iks_stack_alloc (s, nlen + 1);
+ if (!ret) return NULL;
+
+ for (i=j=0; i<len; i++) {
+ switch (src[i]) {
+ case '&': memcpy (&ret[j], "&amp;", 5); j += 5; break;
+ case '\'': memcpy (&ret[j], "&apos;", 6); j += 6; break;
+ case '"': memcpy (&ret[j], "&quot;", 6); j += 6; break;
+ case '<': memcpy (&ret[j], "&lt;", 4); j += 4; break;
+ case '>': memcpy (&ret[j], "&gt;", 4); j += 4; break;
+ default: ret[j++] = src[i];
+ }
+ }
+ ret[j] = '\0';
+
+ return ret;
+}
+
+char *
+iks_unescape (ikstack *s, char *src, size_t len)
+{
+ int i,j;
+ char *ret;
+
+ if (!s || !src) return NULL;
+ if (!strchr (src, '&')) return src;
+ if (len == -1) len = strlen (src);
+
+ ret = iks_stack_alloc (s, len + 1);
+ if (!ret) return NULL;
+
+ for (i=j=0; i<len; i++) {
+ if (src[i] == '&') {
+ i++;
+ if (strncmp (&src[i], "amp;", 4) == 0) {
+ ret[j] = '&';
+ i += 3;
+ } else if (strncmp (&src[i], "quot;", 5) == 0) {
+ ret[j] = '"';
+ i += 4;
+ } else if (strncmp (&src[i], "apos;", 5) == 0) {
+ ret[j] = '\'';
+ i += 4;
+ } else if (strncmp (&src[i], "lt;", 3) == 0) {
+ ret[j] = '<';
+ i += 2;
+ } else if (strncmp (&src[i], "gt;", 3) == 0) {
+ ret[j] = '>';
+ i += 2;
+ } else {
+ ret[j] = src[--i];
+ }
+ } else {
+ ret[j] = src[i];
+ }
+ j++;
+ }
+ ret[j] = '\0';
+
+ return ret;
+}
+/* iksemel (XML parser for Jabber)
+** Copyright (C) 2000-2004 Gurer Ozen <[email protected]>
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU Lesser General Public License.
+*/
+
+#include "common.h"
+#include "iksemel.h"
+
+struct align_test { char a; double b; };
+#define DEFAULT_ALIGNMENT ((size_t) ((char *) &((struct align_test *) 0)->b - (char *) 0))
+#define ALIGN_MASK ( DEFAULT_ALIGNMENT - 1 )
+#define MIN_CHUNK_SIZE ( DEFAULT_ALIGNMENT * 8 )
+#define MIN_ALLOC_SIZE DEFAULT_ALIGNMENT
+#define ALIGN(x) ( (x) + (DEFAULT_ALIGNMENT - ( (x) & ALIGN_MASK)) )
+
+typedef struct ikschunk_struct {
+ struct ikschunk_struct *next;
+ size_t size;
+ size_t used;
+ size_t last;
+ char data[4];
+} ikschunk;
+
+struct ikstack_struct {
+ size_t allocated;
+ ikschunk *meta;
+ ikschunk *data;
+};
+
+static ikschunk *
+find_space (ikstack *s, ikschunk *c, size_t size)
+{
+ /* FIXME: dont use *2 after over allocated chunks */
+ while (1) {
+ if (c->size - c->used >= size) return c;
+ if (!c->next) {
+ if ((c->size * 2) > size) size = c->size * 2;
+ c->next = iks_malloc (sizeof (ikschunk) + size);
+ if (!c->next) return NULL;
+ s->allocated += sizeof (ikschunk) + size;
+ c = c->next;
+ c->next = NULL;
+ c->size = size;
+ c->used = 0;
+ c->last = (size_t) -1;
+ return c;
+ }
+ c = c->next;
+ }
+ return NULL;
+}
+
+ikstack *
+iks_stack_new (size_t meta_chunk, size_t data_chunk)
+{
+ ikstack *s;
+ size_t len;
+
+ if (meta_chunk < MIN_CHUNK_SIZE) meta_chunk = MIN_CHUNK_SIZE;
+ if (meta_chunk & ALIGN_MASK) meta_chunk = ALIGN (meta_chunk);
+ if (data_chunk < MIN_CHUNK_SIZE) data_chunk = MIN_CHUNK_SIZE;
+ if (data_chunk & ALIGN_MASK) data_chunk = ALIGN (data_chunk);
+
+ len = sizeof (ikstack) + meta_chunk + data_chunk + (sizeof (ikschunk) * 2);
+ s = iks_malloc (len);
+ if (!s) return NULL;
+ s->allocated = len;
+ s->meta = (ikschunk *) ((char *) s + sizeof (ikstack));
+ s->meta->next = NULL;
+ s->meta->size = meta_chunk;
+ s->meta->used = 0;
+ s->meta->last = (size_t) -1;
+ s->data = (ikschunk *) ((char *) s + sizeof (ikstack) + sizeof (ikschunk) + meta_chunk);
+ s->data->next = NULL;
+ s->data->size = data_chunk;
+ s->data->used = 0;
+ s->data->last = (size_t) -1;
+ return s;
+}
+
+void *
+iks_stack_alloc (ikstack *s, size_t size)
+{
+ ikschunk *c;
+ void *mem;
+
+ if (size < MIN_ALLOC_SIZE) size = MIN_ALLOC_SIZE;
+ if (size & ALIGN_MASK) size = ALIGN (size);
+
+ c = find_space (s, s->meta, size);
+ if (!c) return NULL;
+ mem = c->data + c->used;
+ c->used += size;
+ return mem;
+}
+
+char *
+iks_stack_strdup (ikstack *s, const char *src, size_t len)
+{
+ ikschunk *c;
+ char *dest;
+
+ if (!src) return NULL;
+ if (0 == len) len = strlen (src);
+
+ c = find_space (s, s->data, len + 1);
+ if (!c) return NULL;
+ dest = c->data + c->used;
+ c->last = c->used;
+ c->used += len + 1;
+ memcpy (dest, src, len);
+ dest[len] = '\0';
+ return dest;
+}
+
+char *
+iks_stack_strcat (ikstack *s, char *old, size_t old_len, const char *src, size_t src_len)
+{
+ char *ret;
+ ikschunk *c;
+
+ if (!old) {
+ return iks_stack_strdup (s, src, src_len);
+ }
+ if (0 == old_len) old_len = strlen (old);
+ if (0 == src_len) src_len = strlen (src);
+
+ for (c = s->data; c; c = c->next) {
+ if (c->data + c->last == old) break;
+ }
+ if (!c) {
+ c = find_space (s, s->data, old_len + src_len + 1);
+ if (!c) return NULL;
+ ret = c->data + c->used;
+ c->last = c->used;
+ c->used += old_len + src_len + 1;
+ memcpy (ret, old, old_len);
+ memcpy (ret + old_len, src, src_len);
+ ret[old_len + src_len] = '\0';
+ return ret;
+ }
+
+ if (c->size - c->used > src_len) {
+ ret = c->data + c->last;
+ memcpy (ret + old_len, src, src_len);
+ c->used += src_len;
+ ret[old_len + src_len] = '\0';
+ } else {
+ /* FIXME: decrease c->used before moving string to new place */
+ c = find_space (s, s->data, old_len + src_len + 1);
+ if (!c) return NULL;
+ c->last = c->used;
+ ret = c->data + c->used;
+ memcpy (ret, old, old_len);
+ c->used += old_len;
+ memcpy (c->data + c->used, src, src_len);
+ c->used += src_len;
+ c->data[c->used] = '\0';
+ c->used++;
+ }
+ return ret;
+}
+
+void
+iks_stack_stat (ikstack *s, size_t *allocated, size_t *used)
+{
+ ikschunk *c;
+
+ if (allocated) {
+ *allocated = s->allocated;
+ }
+ if (used) {
+ *used = 0;
+ for (c = s->meta; c; c = c->next) {
+ (*used) += c->used;
+ }
+ for (c = s->data; c; c = c->next) {
+ (*used) += c->used;
+ }
+ }
+}
+
+void
+iks_stack_delete (ikstack *s)
+{
+ ikschunk *c, *tmp;
+
+ c = s->meta->next;
+ while (c) {
+ tmp = c->next;
+ iks_free (c);
+ c = tmp;
+ }
+ c = s->data->next;
+ while (c) {
+ tmp = c->next;
+ iks_free (c);
+ c = tmp;
+ }
+ iks_free (s);
+}
+/* iksemel (XML parser for Jabber)
+** Copyright (C) 2000-2004 Gurer Ozen <[email protected]>
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU Lesser General Public License.
+*/
+
+#include "common.h"
+#include "iksemel.h"
+
+enum cons_e {
+ C_CDATA = 0,
+ C_TAG_START,
+ C_TAG,
+ C_TAG_END,
+ C_ATTRIBUTE,
+ C_ATTRIBUTE_1,
+ C_ATTRIBUTE_2,
+ C_VALUE,
+ C_VALUE_APOS,
+ C_VALUE_QUOT,
+ C_WHITESPACE,
+ C_ENTITY,
+ C_COMMENT,
+ C_COMMENT_1,
+ C_COMMENT_2,
+ C_COMMENT_3,
+ C_MARKUP,
+ C_MARKUP_1,
+ C_SECT,
+ C_SECT_CDATA,
+ C_SECT_CDATA_1,
+ C_SECT_CDATA_2,
+ C_SECT_CDATA_3,
+ C_SECT_CDATA_4,
+ C_SECT_CDATA_C,
+ C_SECT_CDATA_E,
+ C_SECT_CDATA_E2,
+ C_PI
+};
+
+/* if you add a variable here, dont forget changing iks_parser_reset */
+struct iksparser_struct {
+ ikstack *s;
+ void *user_data;
+ iksTagHook *tagHook;
+ iksCDataHook *cdataHook;
+ iksDeleteHook *deleteHook;
+ /* parser context */
+ char *stack;
+ size_t stack_pos;
+ size_t stack_max;
+
+ enum cons_e context;
+ enum cons_e oldcontext;
+
+ char *tag_name;
+ enum ikstagtype tagtype;
+
+ unsigned int attmax;
+ unsigned int attcur;
+ int attflag;
+ char **atts;
+ int valflag;
+
+ unsigned int entpos;
+ char entity[8];
+
+ unsigned long nr_bytes;
+ unsigned long nr_lines;
+
+ int uni_max;
+ int uni_len;
+};
+
+iksparser *
+iks_sax_new (void *user_data, iksTagHook *tagHook, iksCDataHook *cdataHook)
+{
+ iksparser *prs;
+
+ prs = iks_malloc (sizeof (iksparser));
+ if (NULL == prs) return NULL;
+ memset (prs, 0, sizeof (iksparser));
+ prs->user_data = user_data;
+ prs->tagHook = tagHook;
+ prs->cdataHook = cdataHook;
+ return prs;
+}
+
+iksparser *
+iks_sax_extend (ikstack *s, void *user_data, iksTagHook *tagHook, iksCDataHook *cdataHook, iksDeleteHook *deleteHook)
+{
+ iksparser *prs;
+
+ prs = iks_stack_alloc (s, sizeof (iksparser));
+ if (NULL == prs) return NULL;
+ memset (prs, 0, sizeof (iksparser));
+ prs->s = s;
+ prs->user_data = user_data;
+ prs->tagHook = tagHook;
+ prs->cdataHook = cdataHook;
+ prs->deleteHook = deleteHook;
+ return prs;
+}
+
+ikstack *
+iks_parser_stack (iksparser *prs)
+{
+ return prs->s;
+}
+
+void *
+iks_user_data (iksparser *prs)
+{
+ return prs->user_data;
+}
+
+unsigned long
+iks_nr_bytes (iksparser *prs)
+{
+ return prs->nr_bytes;
+}
+
+unsigned long
+iks_nr_lines (iksparser *prs)
+{
+ return prs->nr_lines;
+}
+
+#define IS_WHITESPACE(x) ' ' == (x) || '\t' == (x) || '\r' == (x) || '\n' == (x)
+#define NOT_WHITESPACE(x) ' ' != (x) && '\t' != (x) && '\r' != (x) && '\n' != (x)
+
+static int
+stack_init (iksparser *prs)
+{
+ prs->stack = iks_malloc (128);
+ if (!prs->stack) return 0;
+ prs->stack_max = 128;
+ prs->stack_pos = 0;
+ return 1;
+}
+
+static int
+stack_expand (iksparser *prs, int len)
+{
+ size_t need;
+ off_t diff;
+ char *tmp;
+ need = len - (prs->stack_max - prs->stack_pos);
+ if (need < prs->stack_max) {
+ need = prs->stack_max * 2;
+ } else {
+ need = prs->stack_max + (need * 1.2);
+ }
+ tmp = iks_malloc (need);
+ if (!tmp) return 0;
+ diff = tmp - prs->stack;
+ memcpy (tmp, prs->stack, prs->stack_max);
+ iks_free (prs->stack);
+ prs->stack = tmp;
+ prs->stack_max = need;
+ prs->tag_name += diff;
+ if (prs->attflag != 0) {
+ int i = 0;
+ while (i < (prs->attmax * 2)) {
+ if (prs->atts[i]) prs->atts[i] += diff;
+ i++;
+ }
+ }
+ return 1;
+}
+
+#define STACK_INIT \
+ if (NULL == prs->stack && 0 == stack_init (prs)) return IKS_NOMEM
+
+#define STACK_PUSH_START (prs->stack + prs->stack_pos)
+
+#define STACK_PUSH(buf,len) \
+{ \
+ char *sbuf = (buf); \
+ size_t slen = (len); \
+ if (prs->stack_max - prs->stack_pos <= slen) { \
+ if (0 == stack_expand (prs, slen)) return IKS_NOMEM; \
+ } \
+ memcpy (prs->stack + prs->stack_pos, sbuf, slen); \
+ prs->stack_pos += slen; \
+}
+
+#define STACK_PUSH_END \
+{ \
+ if (prs->stack_pos >= prs->stack_max) { \
+ if (0 == stack_expand (prs, 1)) return IKS_NOMEM; \
+ } \
+ prs->stack[prs->stack_pos] = '\0'; \
+ prs->stack_pos++; \
+}
+
+static enum ikserror
+sax_core (iksparser *prs, char *buf, int len)
+{
+ enum ikserror err;
+ int pos = 0, old = 0, re, stack_old = -1;
+ unsigned char c;
+
+ while (pos < len) {
+ re = 0;
+ c = buf[pos];
+ if (0 == c || 0xFE == c || 0xFF == c) return IKS_BADXML;
+ if (prs->uni_max) {
+ if ((c & 0xC0) != 0x80) return IKS_BADXML;
+ prs->uni_len++;
+ if (prs->uni_len == prs->uni_max) prs->uni_max = 0;
+ goto cont;
+ } else {
+ if (c & 0x80) {
+ unsigned char mask;
+ if ((c & 0x60) == 0x40) {
+ prs->uni_max = 2;
+ mask = 0x1F;
+ } else if ((c & 0x70) == 0x60) {
+ prs->uni_max = 3;
+ mask = 0x0F;
+ } else if ((c & 0x78) == 0x70) {
+ prs->uni_max = 4;
+ mask = 0x07;
+ } else if ((c & 0x7C) == 0x78) {
+ prs->uni_max = 5;
+ mask = 0x03;
+ } else if ((c & 0x7E) == 0x7C) {
+ prs->uni_max = 6;
+ mask = 0x01;
+ } else {
+ return IKS_BADXML;
+ }
+ if ((c & mask) == 0) return IKS_BADXML;
+ prs->uni_len = 1;
+ if (stack_old == -1) stack_old = pos;
+ goto cont;
+ }
+ }
+
+ switch (prs->context) {
+ case C_CDATA:
+ if ('&' == c) {
+ if (old < pos && prs->cdataHook) {
+ err = prs->cdataHook (prs->user_data, &buf[old], pos - old);
+ if (IKS_OK != err) return err;
+ }
+ prs->context = C_ENTITY;
+ prs->entpos = 0;
+ break;
+ }
+ if ('<' == c) {
+ if (old < pos && prs->cdataHook) {
+ err = prs->cdataHook (prs->user_data, &buf[old], pos - old);
+ if (IKS_OK != err) return err;
+ }
+ STACK_INIT;
+ prs->tag_name = STACK_PUSH_START;
+ if (!prs->tag_name) return IKS_NOMEM;
+ prs->context = C_TAG_START;
+ }
+ break;
+
+ case C_TAG_START:
+ prs->context = C_TAG;
+ if ('/' == c) {
+ prs->tagtype = IKS_CLOSE;
+ break;
+ }
+ if ('?' == c) {
+ prs->context = C_PI;
+ break;
+ }
+ if ('!' == c) {
+ prs->context = C_MARKUP;
+ break;
+ }
+ prs->tagtype = IKS_OPEN;
+ stack_old = pos;
+ break;
+
+ case C_TAG:
+ if (IS_WHITESPACE(c)) {
+ if (IKS_CLOSE == prs->tagtype)
+ prs->oldcontext = C_TAG_END;
+ else
+ prs->oldcontext = C_ATTRIBUTE;
+ prs->context = C_WHITESPACE;
+ if (stack_old != -1) STACK_PUSH (buf + stack_old, pos - stack_old);
+ stack_old = -1;
+ STACK_PUSH_END;
+ break;
+ }
+ if ('/' == c) {
+ if (IKS_CLOSE == prs->tagtype) return IKS_BADXML;
+ prs->tagtype = IKS_SINGLE;
+ prs->context = C_TAG_END;
+ if (stack_old != -1) STACK_PUSH (buf + stack_old, pos - stack_old);
+ stack_old = -1;
+ STACK_PUSH_END;
+ break;
+ }
+ if ('>' == c) {
+ prs->context = C_TAG_END;
+ if (stack_old != -1) STACK_PUSH (buf + stack_old, pos - stack_old);
+ stack_old = -1;
+ STACK_PUSH_END;
+ re = 1;
+ }
+ if (stack_old == -1) stack_old = pos;
+ break;
+
+ case C_TAG_END:
+ if (c != '>') return IKS_BADXML;
+ if (prs->tagHook) {
+ char **tmp;
+ if (prs->attcur == 0) tmp = NULL; else tmp = prs->atts;
+ err = prs->tagHook (prs->user_data, prs->tag_name, tmp, prs->tagtype);
+ if (IKS_OK != err) return err;
+ }
+ prs->stack_pos = 0;
+ stack_old = -1;
+ prs->attcur = 0;
+ prs->attflag = 0;
+ prs->context = C_CDATA;
+ old = pos + 1;
+ break;
+
+ case C_ATTRIBUTE:
+ if ('/' == c) {
+ prs->tagtype = IKS_SINGLE;
+ prs->context = C_TAG_END;
+ break;
+ }
+ if ('>' == c) {
+ prs->context = C_TAG_END;
+ re = 1;
+ break;
+ }
+ if (!prs->atts) {
+ prs->attmax = 12;
+ prs->atts = iks_malloc (sizeof(char *) * 2 * 12);
+ if (!prs->atts) return IKS_NOMEM;
+ memset (prs->atts, 0, sizeof(char *) * 2 * 12);
+ prs->attcur = 0;
+ } else {
+ if (prs->attcur >= (prs->attmax * 2)) {
+ void *tmp;
+ prs->attmax += 12;
+ tmp = iks_malloc (sizeof(char *) * (2 * prs->attmax + 1));
+ if (!tmp) return IKS_NOMEM;
+ memset (tmp, 0, sizeof(char *) * (2 * prs->attmax + 1));
+ memcpy (tmp, prs->atts, sizeof(char *) * prs->attcur);
+ iks_free (prs->atts);
+ prs->atts = tmp;
+ }
+ }
+ prs->attflag = 1;
+ prs->atts[prs->attcur] = STACK_PUSH_START;
+ stack_old = pos;
+ prs->context = C_ATTRIBUTE_1;
+ break;
+
+ case C_ATTRIBUTE_1:
+ if ('=' == c) {
+ if (stack_old != -1) STACK_PUSH (buf + stack_old, pos - stack_old);
+ stack_old = -1;
+ STACK_PUSH_END;
+ prs->context = C_VALUE;
+ break;
+ }
+ if (stack_old == -1) stack_old = pos;
+ break;
+
+ case C_ATTRIBUTE_2:
+ if ('/' == c) {
+ prs->tagtype = IKS_SINGLE;
+ prs->atts[prs->attcur] = NULL;
+ prs->context = C_TAG_END;
+ break;
+ }
+ if ('>' == c) {
+ prs->atts[prs->attcur] = NULL;
+ prs->context = C_TAG_END;
+ re = 1;
+ break;
+ }
+ prs->context = C_ATTRIBUTE;
+ re = 1;
+ break;
+
+ case C_VALUE:
+ prs->atts[prs->attcur + 1] = STACK_PUSH_START;
+ if ('\'' == c) {
+ prs->context = C_VALUE_APOS;
+ break;
+ }
+ if ('"' == c) {
+ prs->context = C_VALUE_QUOT;
+ break;
+ }
+ return IKS_BADXML;
+
+ case C_VALUE_APOS:
+ if ('\'' == c) {
+ if (stack_old != -1) STACK_PUSH (buf + stack_old, pos - stack_old);
+ stack_old = -1;
+ STACK_PUSH_END;
+ prs->oldcontext = C_ATTRIBUTE_2;
+ prs->context = C_WHITESPACE;
+ prs->attcur += 2;
+ }
+ if (stack_old == -1) stack_old = pos;
+ break;
+
+ case C_VALUE_QUOT:
+ if ('"' == c) {
+ if (stack_old != -1) STACK_PUSH (buf + stack_old, pos - stack_old);
+ stack_old = -1;
+ STACK_PUSH_END;
+ prs->oldcontext = C_ATTRIBUTE_2;
+ prs->context = C_WHITESPACE;
+ prs->attcur += 2;
+ }
+ if (stack_old == -1) stack_old = pos;
+ break;
+
+ case C_WHITESPACE:
+ if (NOT_WHITESPACE(c)) {
+ prs->context = prs->oldcontext;
+ re = 1;
+ }
+ break;
+
+ case C_ENTITY:
+ if (';' == c) {
+ char hede[2];
+ char t = '?';
+ prs->entity[prs->entpos] = '\0';
+ if (strcmp(prs->entity, "amp") == 0)
+ t = '&';
+ else if (strcmp(prs->entity, "quot") == 0)
+ t = '"';
+ else if (strcmp(prs->entity, "apos") == 0)
+ t = '\'';
+ else if (strcmp(prs->entity, "lt") == 0)
+ t = '<';
+ else if (strcmp(prs->entity, "gt") == 0)
+ t = '>';
+ old = pos + 1;
+ hede[0] = t;
+ if (prs->cdataHook) {
+ err = prs->cdataHook (prs->user_data, &hede[0], 1);
+ if (IKS_OK != err) return err;
+ }
+ prs->context = C_CDATA;
+ } else {
+ prs->entity[prs->entpos++] = buf[pos];
+ if (prs->entpos > 7) return IKS_BADXML;
+ }
+ break;
+
+ case C_COMMENT:
+ if ('-' != c) return IKS_BADXML;
+ prs->context = C_COMMENT_1;
+ break;
+
+ case C_COMMENT_1:
+ if ('-' == c) prs->context = C_COMMENT_2;
+ break;
+
+ case C_COMMENT_2:
+ if ('-' == c)
+ prs->context = C_COMMENT_3;
+ else
+ prs->context = C_COMMENT_1;
+ break;
+
+ case C_COMMENT_3:
+ if ('>' != c) return IKS_BADXML;
+ prs->context = C_CDATA;
+ old = pos + 1;
+ break;
+
+ case C_MARKUP:
+ if ('[' == c) {
+ prs->context = C_SECT;
+ break;
+ }
+ if ('-' == c) {
+ prs->context = C_COMMENT;
+ break;
+ }
+ prs->context = C_MARKUP_1;
+
+ case C_MARKUP_1:
+ if ('>' == c) {
+ old = pos + 1;
+ prs->context = C_CDATA;
+ }
+ break;
+
+ case C_SECT:
+ if ('C' == c) {
+ prs->context = C_SECT_CDATA;
+ break;
+ }
+ return IKS_BADXML;
+
+ case C_SECT_CDATA:
+ if ('D' != c) return IKS_BADXML;
+ prs->context = C_SECT_CDATA_1;
+ break;
+
+ case C_SECT_CDATA_1:
+ if ('A' != c) return IKS_BADXML;
+ prs->context = C_SECT_CDATA_2;
+ break;
+
+ case C_SECT_CDATA_2:
+ if ('T' != c) return IKS_BADXML;
+ prs->context = C_SECT_CDATA_3;
+ break;
+
+ case C_SECT_CDATA_3:
+ if ('A' != c) return IKS_BADXML;
+ prs->context = C_SECT_CDATA_4;
+ break;
+
+ case C_SECT_CDATA_4:
+ if ('[' != c) return IKS_BADXML;
+ old = pos + 1;
+ prs->context = C_SECT_CDATA_C;
+ break;
+
+ case C_SECT_CDATA_C:
+ if (']' == c) {
+ prs->context = C_SECT_CDATA_E;
+ if (prs->cdataHook && old < pos) {
+ err = prs->cdataHook (prs->user_data, &buf[old], pos - old);
+ if (IKS_OK != err) return err;
+ }
+ }
+ break;
+
+ case C_SECT_CDATA_E:
+ if (']' == c) {
+ prs->context = C_SECT_CDATA_E2;
+ } else {
+ if (prs->cdataHook) {
+ err = prs->cdataHook (prs->user_data, "]", 1);
+ if (IKS_OK != err) return err;
+ }
+ old = pos;
+ prs->context = C_SECT_CDATA_C;
+ }
+ break;
+
+ case C_SECT_CDATA_E2:
+ if ('>' == c) {
+ old = pos + 1;
+ prs->context = C_CDATA;
+ } else {
+ if (prs->cdataHook) {
+ err = prs->cdataHook (prs->user_data, "]]", 2);
+ if (IKS_OK != err) return err;
+ }
+ old = pos;
+ prs->context = C_SECT_CDATA_C;
+ }
+ break;
+
+ case C_PI:
+ old = pos + 1;
+ if ('>' == c) prs->context = C_CDATA;
+ break;
+ }
+cont:
+ if (0 == re) {
+ pos++;
+ prs->nr_bytes++;
+ if ('\n' == c) prs->nr_lines++;
+ }
+ }
+
+ if (stack_old != -1)
+ STACK_PUSH (buf + stack_old, pos - stack_old);
+
+ err = IKS_OK;
+ if (prs->cdataHook && (prs->context == C_CDATA || prs->context == C_SECT_CDATA_C) && old < pos)
+ err = prs->cdataHook (prs->user_data, &buf[old], pos - old);
+ return err;
+}
+
+int
+iks_parse (iksparser *prs, const char *data, size_t len, int finish)
+{
+ if (!data) return IKS_OK;
+ if (len == 0) len = strlen (data);
+ return sax_core (prs, (char *) data, len);
+}
+
+void
+iks_parser_reset (iksparser *prs)
+{
+ if (prs->deleteHook) prs->deleteHook (prs->user_data);
+ prs->stack_pos = 0;
+ prs->context = 0;
+ prs->oldcontext = 0;
+ prs->tagtype = 0;
+ prs->attcur = 0;
+ prs->attflag = 0;
+ prs->valflag = 0;
+ prs->entpos = 0;
+ prs->nr_bytes = 0;
+ prs->nr_lines = 0;
+ prs->uni_max = 0;
+ prs->uni_len = 0;
+}
+
+void
+iks_parser_delete (iksparser *prs)
+{
+ if (prs->deleteHook) prs->deleteHook (prs->user_data);
+ if (prs->stack) iks_free (prs->stack);
+ if (prs->atts) iks_free (prs->atts);
+ if (prs->s) iks_stack_delete (prs->s); else iks_free (prs);
+}
+/* iksemel (XML parser for Jabber)
+** Copyright (C) 2000-2004 Gurer Ozen <[email protected]>
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU Lesser General Public License.
+*/
+
+#include "common.h"
+#include "iksemel.h"
+
+#define IKS_COMMON \
+ struct iks_struct *next, *prev; \
+ struct iks_struct *parent; \
+ enum ikstype type; \
+ ikstack *s
+
+struct iks_struct {
+ IKS_COMMON;
+};
+
+struct iks_tag {
+ IKS_COMMON;
+ struct iks_struct *children, *last_child;
+ struct iks_struct *attribs, *last_attrib;
+ char *name;
+};
+
+#define IKS_TAG_NAME(x) ((struct iks_tag *) (x) )->name
+#define IKS_TAG_CHILDREN(x) ((struct iks_tag *) (x) )->children
+#define IKS_TAG_LAST_CHILD(x) ((struct iks_tag *) (x) )->last_child
+#define IKS_TAG_ATTRIBS(x) ((struct iks_tag *) (x) )->attribs
+#define IKS_TAG_LAST_ATTRIB(x) ((struct iks_tag *) (x) )->last_attrib
+
+struct iks_cdata {
+ IKS_COMMON;
+ char *cdata;
+ size_t len;
+};
+
+#define IKS_CDATA_CDATA(x) ((struct iks_cdata *) (x) )->cdata
+#define IKS_CDATA_LEN(x) ((struct iks_cdata *) (x) )->len
+
+struct iks_attrib {
+ IKS_COMMON;
+ char *name;
+ char *value;
+};
+
+#define IKS_ATTRIB_NAME(x) ((struct iks_attrib *) (x) )->name
+#define IKS_ATTRIB_VALUE(x) ((struct iks_attrib *) (x) )->value
+
+/***** Node Creating & Deleting *****/
+
+iks *
+iks_new (const char *name)
+{
+ ikstack *s;
+ iks *x;
+
+ s = iks_stack_new (sizeof (struct iks_tag) * 6, 256);
+ if (!s) return NULL;
+ x = iks_new_within (name, s);
+ if (!x) {
+ iks_stack_delete (s);
+ return NULL;
+ }
+ return x;
+}
+
+iks *
+iks_new_within (const char *name, ikstack *s)
+{
+ iks *x;
+ size_t len;
+
+ if (name) len = sizeof (struct iks_tag); else len = sizeof (struct iks_cdata);
+ x = iks_stack_alloc (s, len);
+ if (!x) return NULL;
+ memset (x, 0, len);
+ x->s = s;
+ x->type = IKS_TAG;
+ if (name) {
+ IKS_TAG_NAME (x) = iks_stack_strdup (s, name, 0);
+ if (!IKS_TAG_NAME (x)) return NULL;
+ }
+ return x;
+}
+
+iks *
+iks_insert (iks *x, const char *name)
+{
+ iks *y;
+
+ if (!x) return NULL;
+
+ y = iks_new_within (name, x->s);
+ if (!y) return NULL;
+ y->parent = x;
+ if (!IKS_TAG_CHILDREN (x)) IKS_TAG_CHILDREN (x) = y;
+ if (IKS_TAG_LAST_CHILD (x)) {
+ IKS_TAG_LAST_CHILD (x)->next = y;
+ y->prev = IKS_TAG_LAST_CHILD (x);
+ }
+ IKS_TAG_LAST_CHILD (x) = y;
+ return y;
+}
+
+iks *
+iks_insert_cdata (iks *x, const char *data, size_t len)
+{
+ iks *y;
+
+ if(!x || !data) return NULL;
+ if(len == 0) len = strlen (data);
+
+ y = IKS_TAG_LAST_CHILD (x);
+ if (y && y->type == IKS_CDATA) {
+ IKS_CDATA_CDATA (y) = iks_stack_strcat (x->s, IKS_CDATA_CDATA (y), IKS_CDATA_LEN (y), data, len);
+ IKS_CDATA_LEN (y) += len;
+ } else {
+ y = iks_insert (x, NULL);
+ if (!y) return NULL;
+ y->type = IKS_CDATA;
+ IKS_CDATA_CDATA (y) = iks_stack_strdup (x->s, data, len);
+ if (!IKS_CDATA_CDATA (y)) return NULL;
+ IKS_CDATA_LEN (y) = len;
+ }
+ return y;
+}
+
+iks *
+iks_insert_attrib (iks *x, const char *name, const char *value)
+{
+ iks *y;
+ size_t len;
+
+ if (!x) return NULL;
+
+ y = IKS_TAG_ATTRIBS (x);
+ while (y) {
+ if (strcmp (name, IKS_ATTRIB_NAME (y)) == 0) break;
+ y = y->next;
+ }
+ if (NULL == y) {
+ if (!value) return NULL;
+ y = iks_stack_alloc (x->s, sizeof (struct iks_attrib));
+ if (!y) return NULL;
+ memset (y, 0, sizeof (struct iks_attrib));
+ y->type = IKS_ATTRIBUTE;
+ IKS_ATTRIB_NAME (y) = iks_stack_strdup (x->s, name, 0);
+ y->parent = x;
+ if (!IKS_TAG_ATTRIBS (x)) IKS_TAG_ATTRIBS (x) = y;
+ if (IKS_TAG_LAST_ATTRIB (x)) {
+ IKS_TAG_LAST_ATTRIB (x)->next = y;
+ y->prev = IKS_TAG_LAST_ATTRIB (x);
+ }
+ IKS_TAG_LAST_ATTRIB (x) = y;
+ }
+
+ if (value) {
+ len = strlen (value);
+ IKS_ATTRIB_VALUE (y) = iks_stack_strdup (x->s, value, len);
+ if (!IKS_ATTRIB_VALUE (y)) return NULL;
+ } else {
+ if (y->next) y->next->prev = y->prev;
+ if (y->prev) y->prev->next = y->next;
+ if (IKS_TAG_ATTRIBS (x) == y) IKS_TAG_ATTRIBS (x) = y->next;
+ if (IKS_TAG_LAST_ATTRIB (x) == y) IKS_TAG_LAST_ATTRIB (x) = y->prev;
+ }
+
+ return y;
+}
+
+iks *
+iks_insert_node (iks *x, iks *y)
+{
+ y->parent = x;
+ if (!IKS_TAG_CHILDREN (x)) IKS_TAG_CHILDREN (x) = y;
+ if (IKS_TAG_LAST_CHILD (x)) {
+ IKS_TAG_LAST_CHILD (x)->next = y;
+ y->prev = IKS_TAG_LAST_CHILD (x);
+ }
+ IKS_TAG_LAST_CHILD (x) = y;
+ return y;
+}
+
+void
+iks_hide (iks *x)
+{
+ iks *y;
+
+ if (!x) return;
+
+ if (x->prev) x->prev->next = x->next;
+ if (x->next) x->next->prev = x->prev;
+ y = x->parent;
+ if (y) {
+ if (IKS_TAG_CHILDREN (y) == x) IKS_TAG_CHILDREN (y) = x->next;
+ if (IKS_TAG_LAST_CHILD (y) == x) IKS_TAG_LAST_CHILD (y) = x->prev;
+ }
+}
+
+void
+iks_delete (iks *x)
+{
+ if (x) iks_stack_delete (x->s);
+}
+
+/***** Node Traversing *****/
+
+iks *
+iks_next (iks *x)
+{
+ if (x) return x->next;
+ return NULL;
+}
+
+iks *
+iks_next_tag (iks *x)
+{
+ if (x) {
+ while (1) {
+ x = x->next;
+ if (NULL == x) break;
+ if (IKS_TAG == x->type) return x;
+ }
+ }
+ return NULL;
+}
+
+iks *
+iks_prev (iks *x)
+{
+ if (x) return x->prev;
+ return NULL;
+}
+
+iks *
+iks_prev_tag (iks *x)
+{
+ if (x) {
+ while (1) {
+ x = x->prev;
+ if (NULL == x) break;
+ if (IKS_TAG == x->type) return x;
+ }
+ }
+ return NULL;
+}
+
+iks *
+iks_parent (iks *x)
+{
+ if (x) return x->parent;
+ return NULL;
+}
+
+iks *
+iks_root (iks *x)
+{
+ if (x) {
+ while (x->parent)
+ x = x->parent;
+ }
+ return x;
+}
+
+iks *
+iks_child (iks *x)
+{
+ if (x) return IKS_TAG_CHILDREN (x);
+ return NULL;
+}
+
+iks *
+iks_first_tag (iks *x)
+{
+ if (x) {
+ x = IKS_TAG_CHILDREN (x);
+ while (x) {
+ if (IKS_TAG == x->type) return x;
+ x = x->next;
+ }
+ }
+ return NULL;
+}
+
+iks *
+iks_attrib (iks *x)
+{
+ if (x) return IKS_TAG_ATTRIBS (x);
+ return NULL;
+}
+
+iks *
+iks_find (iks *x, const char *name)
+{
+ iks *y;
+
+ if (!x) return NULL;
+ y = IKS_TAG_CHILDREN (x);
+ while (y) {
+ if (IKS_TAG == y->type && IKS_TAG_NAME (y) && strcmp (IKS_TAG_NAME (y), name) == 0) return y;
+ y = y->next;
+ }
+ return NULL;
+}
+
+char *
+iks_find_cdata (iks *x, const char *name)
+{
+ iks *y;
+
+ y = iks_find (x, name);
+ if (!y) return NULL;
+ y = IKS_TAG_CHILDREN (y);
+ if (!y || IKS_CDATA != y->type) return NULL;
+ return IKS_CDATA_CDATA (y);
+}
+
+char *
+iks_find_attrib (iks *x, const char *name)
+{
+ iks *y;
+
+ if (!x) return NULL;
+
+ y = IKS_TAG_ATTRIBS (x);
+ while (y) {
+ if (IKS_ATTRIB_NAME (y) && strcmp (IKS_ATTRIB_NAME (y), name) == 0)
+ return IKS_ATTRIB_VALUE (y);
+ y = y->next;
+ }
+ return NULL;
+}
+
+iks *
+iks_find_with_attrib (iks *x, const char *tagname, const char *attrname, const char *value)
+{
+ iks *y;
+
+ if (NULL == x) return NULL;
+
+ if (tagname) {
+ for (y = IKS_TAG_CHILDREN (x); y; y = y->next) {
+ if (IKS_TAG == y->type
+ && strcmp (IKS_TAG_NAME (y), tagname) == 0
+ && iks_strcmp (iks_find_attrib (y, attrname), value) == 0) {
+ return y;
+ }
+ }
+ } else {
+ for (y = IKS_TAG_CHILDREN (x); y; y = y->next) {
+ if (IKS_TAG == y->type
+ && iks_strcmp (iks_find_attrib (y, attrname), value) == 0) {
+ return y;
+ }
+ }
+ }
+ return NULL;
+}
+
+/***** Node Information *****/
+
+ikstack *
+iks_stack (iks *x)
+{
+ if (x) return x->s;
+ return NULL;
+}
+
+enum ikstype
+iks_type (iks *x)
+{
+ if (x) return x->type;
+ return IKS_NONE;
+}
+
+char *
+iks_name (iks *x)
+{
+ if (x) {
+ if (IKS_TAG == x->type)
+ return IKS_TAG_NAME (x);
+ else
+ return IKS_ATTRIB_NAME (x);
+ }
+ return NULL;
+}
+
+char *
+iks_cdata (iks *x)
+{
+ if (x) {
+ if (IKS_CDATA == x->type)
+ return IKS_CDATA_CDATA (x);
+ else
+ return IKS_ATTRIB_VALUE (x);
+ }
+ return NULL;
+}
+
+size_t
+iks_cdata_size (iks *x)
+{
+ if (x) return IKS_CDATA_LEN (x);
+ return 0;
+}
+
+int
+iks_has_children (iks *x)
+{
+ if (x && IKS_TAG == x->type && IKS_TAG_CHILDREN (x)) return 1;
+ return 0;
+}
+
+int
+iks_has_attribs (iks *x)
+{
+ if (x && IKS_TAG == x->type && IKS_TAG_ATTRIBS (x)) return 1;
+ return 0;
+}
+
+/***** Serializing *****/
+
+static size_t
+escape_size (char *src, size_t len)
+{
+ size_t sz;
+ char c;
+ int i;
+
+ sz = 0;
+ for (i = 0; i < len; i++) {
+ c = src[i];
+ switch (c) {
+ case '&': sz += 5; break;
+ case '\'': sz += 6; break;
+ case '"': sz += 6; break;
+ case '<': sz += 4; break;
+ case '>': sz += 4; break;
+ default: sz++; break;
+ }
+ }
+ return sz;
+}
+
+static char *
+my_strcat (char *dest, char *src, size_t len)
+{
+ if (0 == len) len = strlen (src);
+ memcpy (dest, src, len);
+ return dest + len;
+}
+
+static char *
+escape (char *dest, char *src, size_t len)
+{
+ char c;
+ int i;
+ int j = 0;
+
+ for (i = 0; i < len; i++) {
+ c = src[i];
+ if ('&' == c || '<' == c || '>' == c || '\'' == c || '"' == c) {
+ if (i - j > 0) dest = my_strcat (dest, src + j, i - j);
+ j = i + 1;
+ switch (c) {
+ case '&': dest = my_strcat (dest, "&amp;", 5); break;
+ case '\'': dest = my_strcat (dest, "&apos;", 6); break;
+ case '"': dest = my_strcat (dest, "&quot;", 6); break;
+ case '<': dest = my_strcat (dest, "&lt;", 4); break;
+ case '>': dest = my_strcat (dest, "&gt;", 4); break;
+ }
+ }
+ }
+ if (i - j > 0) dest = my_strcat (dest, src + j, i - j);
+ return dest;
+}
+
+char *
+iks_string (ikstack *s, iks *x)
+{
+ size_t size;
+ int level, dir;
+ iks *y, *z;
+ char *ret, *t;
+
+ if (!x) return NULL;
+
+ if (x->type == IKS_CDATA) {
+ if (s) {
+ return iks_stack_strdup (s, IKS_CDATA_CDATA (x), IKS_CDATA_LEN (x));
+ } else {
+ ret = iks_malloc (IKS_CDATA_LEN (x));
+ memcpy (ret, IKS_CDATA_CDATA (x), IKS_CDATA_LEN (x));
+ return ret;
+ }
+ }
+
+ size = 0;
+ level = 0;
+ dir = 0;
+ y = x;
+ while (1) {
+ if (dir==0) {
+ if (y->type == IKS_TAG) {
+ size++;
+ size += strlen (IKS_TAG_NAME (y));
+ for (z = IKS_TAG_ATTRIBS (y); z; z = z->next) {
+ size += 4 + strlen (IKS_ATTRIB_NAME (z))
+ + escape_size (IKS_ATTRIB_VALUE (z), strlen (IKS_ATTRIB_VALUE (z)));
+ }
+ if (IKS_TAG_CHILDREN (y)) {
+ size++;
+ y = IKS_TAG_CHILDREN (y);
+ level++;
+ continue;
+ } else {
+ size += 2;
+ }
+ } else {
+ size += escape_size (IKS_CDATA_CDATA (y), IKS_CDATA_LEN (y));
+ }
+ }
+ z = y->next;
+ if (z) {
+ if (0 == level) {
+ if (IKS_TAG_CHILDREN (y)) size += 3 + strlen (IKS_TAG_NAME (y));
+ break;
+ }
+ y = z;
+ dir = 0;
+ } else {
+ y = y->parent;
+ level--;
+ if (level >= 0) size += 3 + strlen (IKS_TAG_NAME (y));
+ if (level < 1) break;
+ dir = 1;
+ }
+ }
+
+ if (s) ret = iks_stack_alloc (s, size + 1);
+ else ret = iks_malloc (size + 1);
+
+ if (!ret) return NULL;
+
+ t = ret;
+ level = 0;
+ dir = 0;
+ while (1) {
+ if (dir==0) {
+ if (x->type == IKS_TAG) {
+ *t++ = '<';
+ t = my_strcat (t, IKS_TAG_NAME (x), 0);
+ y = IKS_TAG_ATTRIBS (x);
+ while (y) {
+ *t++ = ' ';
+ t = my_strcat (t, IKS_ATTRIB_NAME (y), 0);
+ *t++ = '=';
+ *t++ = '\'';
+ t = escape (t, IKS_ATTRIB_VALUE (y), strlen (IKS_ATTRIB_VALUE (y)));
+ *t++ = '\'';
+ y = y->next;
+ }
+ if (IKS_TAG_CHILDREN (x)) {
+ *t++ = '>';
+ x = IKS_TAG_CHILDREN (x);
+ level++;
+ continue;
+ } else {
+ *t++ = '/';
+ *t++ = '>';
+ }
+ } else {
+ t = escape (t, IKS_CDATA_CDATA (x), IKS_CDATA_LEN (x));
+ }
+ }
+ y = x->next;
+ if (y) {
+ if (0 == level) {
+ if (IKS_TAG_CHILDREN (x)) {
+ *t++ = '<';
+ *t++ = '/';
+ t = my_strcat (t, IKS_TAG_NAME (x), 0);
+ *t++ = '>';
+ }
+ break;
+ }
+ x = y;
+ dir = 0;
+ } else {
+ x = x->parent;
+ level--;
+ if (level >= 0) {
+ *t++ = '<';
+ *t++ = '/';
+ t = my_strcat (t, IKS_TAG_NAME (x), 0);
+ *t++ = '>';
+ }
+ if (level < 1) break;
+ dir = 1;
+ }
+ }
+ *t = '\0';
+
+ return ret;
+}
+
+/***** Copying *****/
+
+iks *
+iks_copy_within (iks *x, ikstack *s)
+{
+ int level=0, dir=0;
+ iks *copy = NULL;
+ iks *cur = NULL;
+ iks *y;
+
+ while (1) {
+ if (dir == 0) {
+ if (x->type == IKS_TAG) {
+ if (copy == NULL) {
+ copy = iks_new_within (IKS_TAG_NAME (x), s);
+ cur = copy;
+ } else {
+ cur = iks_insert (cur, IKS_TAG_NAME (x));
+ }
+ for (y = IKS_TAG_ATTRIBS (x); y; y = y->next) {
+ iks_insert_attrib (cur, IKS_ATTRIB_NAME (y), IKS_ATTRIB_VALUE (y));
+ }
+ if (IKS_TAG_CHILDREN (x)) {
+ x = IKS_TAG_CHILDREN (x);
+ level++;
+ continue;
+ } else {
+ cur = cur->parent;
+ }
+ } else {
+ iks_insert_cdata (cur, IKS_CDATA_CDATA (x), IKS_CDATA_LEN (x));
+ }
+ }
+ y = x->next;
+ if (y) {
+ if (0 == level) break;
+ x = y;
+ dir = 0;
+ } else {
+ if (level < 2) break;
+ level--;
+ x = x->parent;
+ cur = cur->parent;
+ dir = 1;
+ }
+ }
+ return copy;
+}
+
+iks *
+iks_copy (iks *x)
+{
+ return iks_copy_within (x, iks_stack_new (sizeof (struct iks_tag) * 6, 256));
+}
+/* iksemel (XML parser for Jabber)
+** Copyright (C) 2000-2003 Gurer Ozen <[email protected]>
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU Lesser General Public License.
+*/
+
+#include "common.h"
+#include "iksemel.h"
+
+struct dom_data {
+ iks **iksptr;
+ iks *current;
+ size_t chunk_size;
+};
+
+static int
+tagHook (struct dom_data *data, char *name, char **atts, int type)
+{
+ iks *x;
+
+ if (IKS_OPEN == type || IKS_SINGLE == type) {
+ if (data->current) {
+ x = iks_insert (data->current, name);
+ } else {
+ ikstack *s;
+ s = iks_stack_new (data->chunk_size, data->chunk_size);
+ x = iks_new_within (name, s);
+ }
+ if (atts) {
+ int i=0;
+ while (atts[i]) {
+ iks_insert_attrib (x, atts[i], atts[i+1]);
+ i += 2;
+ }
+ }
+ data->current = x;
+ }
+ if (IKS_CLOSE == type || IKS_SINGLE == type) {
+ x = iks_parent (data->current);
+ if (x)
+ data->current = x;
+ else {
+ *(data->iksptr) = data->current;
+ data->current = NULL;
+ }
+ }
+ return IKS_OK;
+}
+
+static int
+cdataHook (struct dom_data *data, char *cdata, size_t len)
+{
+ if (data->current) iks_insert_cdata (data->current, cdata, len);
+ return IKS_OK;
+}
+
+static void
+deleteHook (struct dom_data *data)
+{
+ if (data->current) iks_delete (data->current);
+ data->current = NULL;
+}
+
+iksparser *
+iks_dom_new (iks **iksptr)
+{
+ ikstack *s;
+ struct dom_data *data;
+
+ *iksptr = NULL;
+ s = iks_stack_new (DEFAULT_DOM_CHUNK_SIZE, 0);
+ if (!s) return NULL;
+ data = iks_stack_alloc (s, sizeof (struct dom_data));
+ data->iksptr = iksptr;
+ data->current = NULL;
+ data->chunk_size = DEFAULT_DOM_IKS_CHUNK_SIZE;
+ return iks_sax_extend (s, data, (iksTagHook *) tagHook, (iksCDataHook *) cdataHook, (iksDeleteHook *) deleteHook);
+}
+
+void
+iks_set_size_hint (iksparser *prs, size_t approx_size)
+{
+ size_t cs;
+ struct dom_data *data = iks_user_data (prs);
+
+ cs = approx_size / 10;
+ if (cs < DEFAULT_DOM_IKS_CHUNK_SIZE) cs = DEFAULT_DOM_IKS_CHUNK_SIZE;
+ data->chunk_size = cs;
+}
+
+iks *
+iks_tree (const char *xml_str, size_t len, int *err)
+{
+ iksparser *prs;
+ iks *x;
+ int e;
+
+ if (0 == len) len = strlen (xml_str);
+ prs = iks_dom_new (&x);
+ if (!prs) {
+ if (err) *err = IKS_NOMEM;
+ return NULL;
+ }
+ e = iks_parse (prs, xml_str, len, 1);
+ if (err) *err = e;
+ iks_parser_delete (prs);
+ return x;
+}
+
+int
+iks_load (const char *fname, iks **xptr)
+{
+ iksparser *prs;
+ char *buf;
+ FILE *f;
+ int len, done = 0;
+ int ret;
+
+ *xptr = NULL;
+
+ buf = iks_malloc (FILE_IO_BUF_SIZE);
+ if (!buf) return IKS_NOMEM;
+ ret = IKS_NOMEM;
+ prs = iks_dom_new (xptr);
+ if (prs) {
+ f = fopen (fname, "r");
+ if (f) {
+ while (0 == done) {
+ len = fread (buf, 1, FILE_IO_BUF_SIZE, f);
+ if (len < FILE_IO_BUF_SIZE) {
+ if (0 == feof (f)) {
+ ret = IKS_FILE_RWERR;
+ len = 0;
+ }
+ done = 1;
+ }
+ if (len > 0) {
+ int e;
+ e = iks_parse (prs, buf, len, done);
+ if (IKS_OK != e) {
+ ret = e;
+ break;
+ }
+ if (done) ret = IKS_OK;
+ }
+ }
+ fclose (f);
+ } else {
+ if (ENOENT == errno) ret = IKS_FILE_NOFILE;
+ else ret = IKS_FILE_NOACCESS;
+ }
+ iks_parser_delete (prs);
+ }
+ iks_free (buf);
+ return ret;
+}
+
+int
+iks_save (const char *fname, iks *x)
+{
+ FILE *f;
+ char *data;
+ int ret;
+
+ ret = IKS_NOMEM;
+ data = iks_string (NULL, x);
+ if (data) {
+ ret = IKS_FILE_NOACCESS;
+ f = fopen (fname, "w");
+ if (f) {
+ ret = IKS_FILE_RWERR;
+ if (fputs (data, f) >= 0) ret = IKS_OK;
+ fclose (f);
+ }
+ iks_free (data);
+ }
+ return ret;
+}
diff --git a/backend/impress/iksemel.h b/backend/impress/iksemel.h
new file mode 100644
index 00000000..66c87d61
--- /dev/null
+++ b/backend/impress/iksemel.h
@@ -0,0 +1,402 @@
+/* iksemel (XML parser for Jabber)
+** Copyright (C) 2000-2004 Gurer Ozen <[email protected]>
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU Lesser General Public License.
+*/
+
+#ifndef IKSEMEL_H
+#define IKSEMEL_H 1
+
+#ifdef __cplusplus
+#include <cstddef> /* size_t for C++ */
+extern "C" {
+#else
+#include <stddef.h> /* size_t for C */
+#endif
+
+/***** object stack *****/
+
+struct ikstack_struct;
+typedef struct ikstack_struct ikstack;
+
+ikstack *iks_stack_new (size_t meta_chunk, size_t data_chunk);
+void *iks_stack_alloc (ikstack *s, size_t size);
+char *iks_stack_strdup (ikstack *s, const char *src, size_t len);
+char *iks_stack_strcat (ikstack *s, char *old, size_t old_len, const char *src, size_t src_len);
+void iks_stack_stat (ikstack *s, size_t *allocated, size_t *used);
+void iks_stack_delete (ikstack *s);
+
+/***** utilities *****/
+
+void *iks_malloc (size_t size);
+void iks_free (void *ptr);
+void iks_set_mem_funcs (void *(*malloc_func)(size_t size), void (*free_func)(void *ptr));
+
+char *iks_strdup (const char *src);
+char *iks_strcat (char *dest, const char *src);
+int iks_strcmp (const char *a, const char *b);
+int iks_strcasecmp (const char *a, const char *b);
+int iks_strncmp (const char *a, const char *b, size_t n);
+int iks_strncasecmp (const char *a, const char *b, size_t n);
+size_t iks_strlen (const char *src);
+char *iks_escape (ikstack *s, char *src, size_t len);
+char *iks_unescape (ikstack *s, char *src, size_t len);
+
+/***** dom tree *****/
+
+enum ikstype {
+ IKS_NONE = 0,
+ IKS_TAG,
+ IKS_ATTRIBUTE,
+ IKS_CDATA
+};
+
+struct iks_struct;
+typedef struct iks_struct iks;
+
+iks *iks_new (const char *name);
+iks *iks_new_within (const char *name, ikstack *s);
+iks *iks_insert (iks *x, const char *name);
+iks *iks_insert_cdata (iks *x, const char *data, size_t len);
+iks *iks_insert_attrib (iks *x, const char *name, const char *value);
+iks *iks_insert_node (iks *x, iks *y);
+void iks_hide (iks *x);
+void iks_delete (iks *x);
+iks *iks_next (iks *x);
+iks *iks_next_tag (iks *x);
+iks *iks_prev (iks *x);
+iks *iks_prev_tag (iks *x);
+iks *iks_parent (iks *x);
+iks *iks_root (iks *x);
+iks *iks_child (iks *x);
+iks *iks_first_tag (iks *x);
+iks *iks_attrib (iks *x);
+iks *iks_find (iks *x, const char *name);
+char *iks_find_cdata (iks *x, const char *name);
+char *iks_find_attrib (iks *x, const char *name);
+iks *iks_find_with_attrib (iks *x, const char *tagname, const char *attrname, const char *value);
+ikstack *iks_stack (iks *x);
+enum ikstype iks_type (iks *x);
+char *iks_name (iks *x);
+char *iks_cdata (iks *x);
+size_t iks_cdata_size (iks *x);
+int iks_has_children (iks *x);
+int iks_has_attribs (iks *x);
+char *iks_string (ikstack *s, iks *x);
+iks *iks_copy (iks *x);
+iks *iks_copy_within (iks *x, ikstack *s);
+
+/***** sax parser *****/
+
+enum ikserror {
+ IKS_OK = 0,
+ IKS_NOMEM,
+ IKS_BADXML,
+ IKS_HOOK
+};
+
+enum ikstagtype {
+ IKS_OPEN,
+ IKS_CLOSE,
+ IKS_SINGLE
+};
+
+typedef int (iksTagHook)(void *user_data, char *name, char **atts, int type);
+typedef int (iksCDataHook)(void *user_data, char *data, size_t len);
+typedef void (iksDeleteHook)(void *user_data);
+
+struct iksparser_struct;
+typedef struct iksparser_struct iksparser;
+
+iksparser *iks_sax_new (void *user_data, iksTagHook *tagHook, iksCDataHook *cdataHook);
+iksparser *iks_sax_extend (ikstack *s, void *user_data, iksTagHook *tagHook, iksCDataHook *cdataHook, iksDeleteHook *deleteHook);
+ikstack *iks_parser_stack (iksparser *prs);
+void *iks_user_data (iksparser *prs);
+unsigned long iks_nr_bytes (iksparser *prs);
+unsigned long iks_nr_lines (iksparser *prs);
+int iks_parse (iksparser *prs, const char *data, size_t len, int finish);
+void iks_parser_reset (iksparser *prs);
+void iks_parser_delete (iksparser *prs);
+
+/***** dom parser *****/
+
+enum iksfileerror {
+ IKS_FILE_NOFILE = 4,
+ IKS_FILE_NOACCESS,
+ IKS_FILE_RWERR
+};
+
+iksparser *iks_dom_new (iks **iksptr);
+void iks_set_size_hint (iksparser *prs, size_t approx_size);
+iks *iks_tree (const char *xml_str, size_t len, int *err);
+int iks_load (const char *fname, iks **xptr);
+int iks_save (const char *fname, iks *x);
+
+/***** transport layer *****/
+
+typedef void (iksTClose)(void *socket);
+typedef int (iksTConnect)(iksparser *prs, void **socketptr, const char *server, int port);
+typedef int (iksTSend)(void *socket, const char *data, size_t len);
+typedef int (iksTRecv)(void *socket, char *buffer, size_t buf_len, int timeout);
+typedef int (iksTConnectFD)(iksparser *prs, void **socketptr, void *fd);
+typedef void *(iksTGetFD)(void *socket);
+
+enum iksasyncevents {
+ IKS_ASYNC_RESOLVED,
+ IKS_ASYNC_CONNECTED,
+ IKS_ASYNC_WRITE,
+ IKS_ASYNC_WRITTEN,
+ IKS_ASYNC_READ,
+ IKS_ASYNC_CLOSED,
+ IKS_ASYNC_ERROR
+};
+
+typedef int (iksAsyncNotify)(void *user_data, int event, void *event_data);
+typedef int (iksTConnectAsync)(iksparser *prs, void **socketptr, const char *server, int port, void *notify_data, iksAsyncNotify *notify_func);
+
+typedef struct ikstransport_struct {
+ /* basic api, connect can be NULL if one of the other connect funcs are used */
+ iksTConnect *connect;
+ iksTSend *send;
+ iksTRecv *recv;
+ iksTClose *close;
+ /* optional fd api */
+ iksTConnectFD *connect_fd;
+ iksTGetFD *get_fd;
+ /* optional async api */
+ iksTConnectAsync *connect_async;
+} ikstransport;
+
+extern ikstransport iks_default_transport;
+
+/***** stream parser *****/
+
+enum iksneterror {
+ IKS_NET_NODNS = 4,
+ IKS_NET_NOSOCK,
+ IKS_NET_NOCONN,
+ IKS_NET_RWERR,
+ IKS_NET_NOTSUPP,
+ IKS_NET_TLSFAIL
+};
+
+enum iksnodetype {
+ IKS_NODE_START,
+ IKS_NODE_NORMAL,
+ IKS_NODE_ERROR,
+ IKS_NODE_STOP
+};
+
+enum ikssasltype {
+ IKS_SASL_PLAIN,
+ IKS_SASL_DIGEST_MD5
+};
+
+#define IKS_JABBER_PORT 5222
+
+typedef int (iksStreamHook)(void *user_data, int type, iks *node);
+typedef void (iksLogHook)(void *user_data, const char *data, size_t size, int is_incoming);
+
+iksparser *iks_stream_new (char *name_space, void *user_data, iksStreamHook *streamHook);
+void *iks_stream_user_data (iksparser *prs);
+void iks_set_log_hook (iksparser *prs, iksLogHook *logHook);
+int iks_connect_tcp (iksparser *prs, const char *server, int port);
+int iks_connect_fd (iksparser *prs, int fd);
+int iks_connect_via (iksparser *prs, const char *server, int port, const char *server_name);
+int iks_connect_with (iksparser *prs, const char *server, int port, const char *server_name, ikstransport *trans);
+int iks_connect_async (iksparser *prs, const char *server, int port, void *notify_data, iksAsyncNotify *notify_func);
+int iks_connect_async_with (iksparser *prs, const char *server, int port, const char *server_name, ikstransport *trans, void *notify_data, iksAsyncNotify *notify_func);
+int iks_fd (iksparser *prs);
+int iks_recv (iksparser *prs, int timeout);
+int iks_send_header (iksparser *prs, const char *to);
+int iks_send (iksparser *prs, iks *x);
+int iks_send_raw (iksparser *prs, const char *xmlstr);
+void iks_disconnect (iksparser *prs);
+int iks_has_tls (void);
+int iks_is_secure (iksparser *prs);
+int iks_start_tls (iksparser *prs);
+int iks_start_sasl (iksparser *prs, enum ikssasltype type, char *username, char *pass);
+
+/***** jabber *****/
+
+#define IKS_NS_CLIENT "jabber:client"
+#define IKS_NS_SERVER "jabber:server"
+#define IKS_NS_AUTH "jabber:iq:auth"
+#define IKS_NS_AUTH_0K "jabber:iq:auth:0k"
+#define IKS_NS_REGISTER "jabber:iq:register"
+#define IKS_NS_ROSTER "jabber:iq:roster"
+#define IKS_NS_XROSTER "jabber:x:roster"
+#define IKS_NS_OFFLINE "jabber:x:offline"
+#define IKS_NS_AGENT "jabber:iq:agent"
+#define IKS_NS_AGENTS "jabber:iq:agents"
+#define IKS_NS_BROWSE "jabber:iq:browse"
+#define IKS_NS_CONFERENCE "jabber:iq:conference"
+#define IKS_NS_DELAY "jabber:x:delay"
+#define IKS_NS_VERSION "jabber:iq:version"
+#define IKS_NS_TIME "jabber:iq:time"
+#define IKS_NS_VCARD "vcard-temp"
+#define IKS_NS_PRIVATE "jabber:iq:private"
+#define IKS_NS_SEARCH "jabber:iq:search"
+#define IKS_NS_OOB "jabber:iq:oob"
+#define IKS_NS_XOOB "jabber:x:oob"
+#define IKS_NS_ADMIN "jabber:iq:admin"
+#define IKS_NS_FILTER "jabber:iq:filter"
+#define IKS_NS_GATEWAY "jabber:iq:gateway"
+#define IKS_NS_LAST "jabber:iq:last"
+#define IKS_NS_SIGNED "jabber:x:signed"
+#define IKS_NS_ENCRYPTED "jabber:x:encrypted"
+#define IKS_NS_ENVELOPE "jabber:x:envelope"
+#define IKS_NS_EVENT "jabber:x:event"
+#define IKS_NS_EXPIRE "jabber:x:expire"
+#define IKS_NS_XHTML "http://www.w3.org/1999/xhtml"
+#define IKS_NS_XMPP_SASL "urn:ietf:params:xml:ns:xmpp-sasl"
+#define IKS_NS_XMPP_BIND "urn:ietf:params:xml:ns:xmpp-bind"
+#define IKS_NS_XMPP_SESSION "urn:ietf:params:xml:ns:xmpp-session"
+
+#define IKS_ID_USER 1
+#define IKS_ID_SERVER 2
+#define IKS_ID_RESOURCE 4
+#define IKS_ID_PARTIAL IKS_ID_USER | IKS_ID_SERVER
+#define IKS_ID_FULL IKS_ID_USER | IKS_ID_SERVER | IKS_ID_RESOURCE
+
+#define IKS_STREAM_STARTTLS 1
+#define IKS_STREAM_SESSION 2
+#define IKS_STREAM_BIND 4
+#define IKS_STREAM_SASL_PLAIN 8
+#define IKS_STREAM_SASL_MD5 16
+
+typedef struct iksid_struct {
+ char *user;
+ char *server;
+ char *resource;
+ char *partial;
+ char *full;
+} iksid;
+
+iksid *iks_id_new (ikstack *s, const char *jid);
+int iks_id_cmp (iksid *a, iksid *b, int parts);
+
+enum ikspaktype {
+ IKS_PAK_NONE = 0,
+ IKS_PAK_MESSAGE,
+ IKS_PAK_PRESENCE,
+ IKS_PAK_IQ,
+ IKS_PAK_S10N
+};
+
+enum iksubtype {
+ IKS_TYPE_NONE = 0,
+ IKS_TYPE_ERROR,
+
+ IKS_TYPE_CHAT,
+ IKS_TYPE_GROUPCHAT,
+ IKS_TYPE_HEADLINE,
+
+ IKS_TYPE_GET,
+ IKS_TYPE_SET,
+ IKS_TYPE_RESULT,
+
+ IKS_TYPE_SUBSCRIBE,
+ IKS_TYPE_SUBSCRIBED,
+ IKS_TYPE_UNSUBSCRIBE,
+ IKS_TYPE_UNSUBSCRIBED,
+ IKS_TYPE_PROBE,
+ IKS_TYPE_AVAILABLE,
+ IKS_TYPE_UNAVAILABLE
+};
+
+enum ikshowtype {
+ IKS_SHOW_UNAVAILABLE = 0,
+ IKS_SHOW_AVAILABLE,
+ IKS_SHOW_CHAT,
+ IKS_SHOW_AWAY,
+ IKS_SHOW_XA,
+ IKS_SHOW_DND
+};
+
+typedef struct ikspak_struct {
+ iks *x;
+ iksid *from;
+ iks *query;
+ char *ns;
+ char *id;
+ enum ikspaktype type;
+ enum iksubtype subtype;
+ enum ikshowtype show;
+} ikspak;
+
+ikspak *iks_packet (iks *x);
+
+iks *iks_make_auth (iksid *id, const char *pass, const char *sid);
+iks *iks_make_msg (enum iksubtype type, const char *to, const char *body);
+iks *iks_make_s10n (enum iksubtype type, const char *to, const char *msg);
+iks *iks_make_pres (enum ikshowtype show, const char *status);
+iks *iks_make_iq (enum iksubtype type, const char *xmlns);
+iks *iks_make_resource_bind(iksid *id);
+iks *iks_make_session(void);
+int iks_stream_features(iks *x);
+
+/***** jabber packet filter *****/
+
+#define IKS_RULE_DONE 0
+#define IKS_RULE_ID 1
+#define IKS_RULE_TYPE 2
+#define IKS_RULE_SUBTYPE 4
+#define IKS_RULE_FROM 8
+#define IKS_RULE_FROM_PARTIAL 16
+#define IKS_RULE_NS 32
+
+enum iksfilterret {
+ IKS_FILTER_PASS,
+ IKS_FILTER_EAT
+};
+
+typedef int (iksFilterHook)(void *user_data, ikspak *pak);
+
+struct iksfilter_struct;
+typedef struct iksfilter_struct iksfilter;
+struct iksrule_struct;
+typedef struct iksrule_struct iksrule;
+
+iksfilter *iks_filter_new (void);
+iksrule *iks_filter_add_rule (iksfilter *f, iksFilterHook *filterHook, void *user_data, ...);
+void iks_filter_remove_rule (iksfilter *f, iksrule *rule);
+void iks_filter_remove_hook (iksfilter *f, iksFilterHook *filterHook);
+void iks_filter_packet (iksfilter *f, ikspak *pak);
+void iks_filter_delete (iksfilter *f);
+
+/***** sha1 *****/
+
+struct iksha_struct;
+typedef struct iksha_struct iksha;
+
+iksha *iks_sha_new (void);
+void iks_sha_reset (iksha *sha);
+void iks_sha_hash (iksha *sha, const unsigned char *data, size_t len, int finish);
+void iks_sha_print (iksha *sha, char *hash);
+void iks_sha_delete (iksha *sha);
+void iks_sha (const char *data, char *hash);
+
+/***** md5 *****/
+
+struct ikmd5_struct;
+typedef struct iksmd5_struct iksmd5;
+
+iksmd5 *iks_md5_new(void);
+void iks_md5_reset(iksmd5 *md5);
+void iks_md5_hash(iksmd5 *md5, const unsigned char *data, size_t slen, int finish);
+void iks_md5_delete(iksmd5 *md5);
+void iks_md5_print(iksmd5 *md5, char *buf);
+void iks_md5_digest(iksmd5 *md5, unsigned char *digest);
+void iks_md5(const char *data, char *buf);
+
+/***** base64 *****/
+
+char *iks_base64_decode(const char *buf);
+char *iks_base64_encode(const char *buf, int len);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* IKSEMEL_H */
diff --git a/backend/impress/imposter.h b/backend/impress/imposter.h
new file mode 100644
index 00000000..50c87f2c
--- /dev/null
+++ b/backend/impress/imposter.h
@@ -0,0 +1,84 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#ifndef IMPOSTER_H
+#define IMPOSTER_H
+
+#include <sys/types.h>
+
+enum {
+ IMP_OK = 0,
+ IMP_NOMEM,
+ IMP_NOTZIP,
+ IMP_BADZIP,
+ IMP_BADDOC,
+ IMP_NOTIMP
+};
+
+struct ImpDoc_struct;
+typedef struct ImpDoc_struct ImpDoc;
+
+struct ImpPage_struct;
+typedef struct ImpPage_struct ImpPage;
+
+typedef struct ImpPointStruct {
+ int x;
+ int y;
+} ImpPoint;
+
+typedef struct ImpColorStruct {
+ int red;
+ int green;
+ int blue;
+} ImpColor;
+
+#define IMP_NORMAL 0
+#define IMP_BOLD 1
+#define IMP_ITALIC 2
+#define IMP_UNDERLINE 4
+
+typedef struct ImpDrawer_struct {
+ void (*get_size)(void *drw_data, int *w, int *h);
+ void (*set_fg_color)(void *drw_data, ImpColor *color);
+ void (*draw_line)(void *drw_data, int x1, int y1, int x2, int y2);
+ void (*draw_rect)(void *drw_data, int fill, int x, int y, int w, int h);
+ void (*draw_polygon)(void *drw_data, int fill, ImpPoint *pts, int nr_pts);
+ void (*draw_arc)(void *drw_data, int fill, int x, int y, int w, int h, int sa, int ea);
+ void (*draw_bezier)(void *drw_data, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
+ void *(*open_image)(void *drw_data, const unsigned char *pix, size_t size);
+ void (*get_image_size)(void *drw_data, void *img_data, int *w, int *h);
+ void *(*scale_image)(void *drw_data, void *img_data, int w, int h);
+ void (*draw_image)(void *drw_data, void *img_data, int x, int y, int w, int h);
+ void (*close_image)(void *drw_data, void *img_data);
+ void (*get_text_size)(void *drw_data, const char *text, size_t len, int size, int styles, int *w, int *h);
+ void (*draw_text)(void *drw_data, int x, int y, const char *text, size_t len, int size, int styles);
+} ImpDrawer;
+
+struct ImpRenderCtx_struct;
+typedef struct ImpRenderCtx_struct ImpRenderCtx;
+
+#define IMP_LAST_PAGE -1
+
+ImpDoc *imp_open(const char *filename, int *err);
+int imp_nr_pages(ImpDoc *doc);
+ImpPage *imp_get_page(ImpDoc *doc, int page_no);
+void imp_close(ImpDoc *doc);
+
+void *imp_get_xml(ImpDoc *doc, const char *filename);
+
+ImpPage *imp_next_page(ImpPage *page);
+ImpPage *imp_prev_page(ImpPage *page);
+int imp_get_page_no(ImpPage *page);
+const char *imp_get_page_name(ImpPage *page);
+
+ImpRenderCtx *imp_create_context(const ImpDrawer *drw);
+void imp_context_set_page(ImpRenderCtx *ctx, ImpPage *page);
+void imp_context_set_step(ImpRenderCtx *ctx, int step);
+void imp_render(ImpRenderCtx *ctx, void *drw_data);
+void imp_delete_context(ImpRenderCtx *ctx);
+
+
+#endif /* IMPOSTER_H */
diff --git a/backend/impress/impress-document.c b/backend/impress/impress-document.c
new file mode 100644
index 00000000..5254a881
--- /dev/null
+++ b/backend/impress/impress-document.c
@@ -0,0 +1,548 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2005, Jonathan Blandford <[email protected]>
+ * Copyright (C) 2005, Bastien Nocera <[email protected]>
+ *
+ * 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, 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 "config.h"
+
+#include <string.h>
+
+#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
+
+#include "imposter.h"
+#include "impress-document.h"
+
+#include "ev-document-misc.h"
+#include "ev-document-thumbnails.h"
+
+struct _ImpressDocumentClass
+{
+ EvDocumentClass parent_class;
+};
+
+struct _ImpressDocument
+{
+ EvDocument parent_instance;
+
+ ImpDoc *imp;
+ ImpRenderCtx *ctx;
+
+ GMutex *mutex;
+ GdkPixmap *pixmap;
+ GdkGC *gc;
+ PangoContext *pango_ctx;
+
+ /* Only used while rendering inside the mainloop */
+ int pagenum;
+ GdkPixbuf *pixbuf;
+ GCond *cond;
+};
+
+#define PAGE_WIDTH 1024
+#define PAGE_HEIGHT 768
+
+typedef struct _ImpressDocumentClass ImpressDocumentClass;
+
+static void impress_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
+
+EV_BACKEND_REGISTER_WITH_CODE (ImpressDocument, impress_document,
+ {
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
+ impress_document_document_thumbnails_iface_init);
+ });
+
+/* Renderer */
+static void
+imp_render_draw_bezier_real (GdkDrawable *d, GdkGC *gc, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3)
+{
+ int x, y, nx, ny;
+ int ax, bx, cx, ay, by, cy;
+ double t, t2, t3;
+
+ x = x0;
+ y = y0;
+
+ cx = 3 * (x1 - x0);
+ bx = 3 * (x2 - x1) - cx;
+ ax = x3 - x0 - cx - bx;
+ cy = 3 * (y1 - y0);
+ by = 3 * (y2 - y1) - cy;
+ ay = y3 - y0 - cy - by;
+
+ for (t = 0; t < 1; t += 0.01) {
+ t2 = t * t;
+ t3 = t2 * t;
+ nx = ax * t3 + bx * t2 + cx * t + x0;
+ ny = ay * t3 + by * t2 + cy * t + y0;
+ gdk_draw_line (d, gc, x, y, nx, ny);
+ x = nx;
+ y = ny;
+ }
+}
+
+static void
+imp_render_get_size(void *drw_data, int *w, int *h)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (drw_data);
+
+ #if GTK_CHECK_VERSION(3, 0, 0)
+ *w = gdk_window_get_width(impress_document->pixmap);
+ *h = gdk_window_get_height(impress_document->pixmap);
+ #else
+ gdk_drawable_get_size(impress_document->pixmap, w, h);
+ #endif
+}
+
+static void
+imp_render_set_fg_color(void *drw_data, ImpColor *color)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (drw_data);
+ GdkColor c;
+
+ c.red = color->red;
+ c.green = color->green;
+ c.blue = color->blue;
+ gdk_gc_set_rgb_fg_color(impress_document->gc, &c);
+}
+
+static void
+imp_render_draw_line(void *drw_data, int x1, int y1, int x2, int y2)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (drw_data);
+
+ gdk_draw_line(impress_document->pixmap, impress_document->gc, x1, y1, x2, y2);
+}
+
+static void
+imp_render_draw_rect(void *drw_data, int fill, int x, int y, int w, int h)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (drw_data);
+
+ gdk_draw_rectangle(impress_document->pixmap, impress_document->gc, fill, x, y, w, h);
+}
+
+static void
+imp_render_draw_polygon(void *drw_data, int fill, ImpPoint *pts, int nr_pts)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (drw_data);
+
+ gdk_draw_polygon(impress_document->pixmap, impress_document->gc, fill, (GdkPoint *)pts, nr_pts);
+}
+
+static void
+imp_render_draw_arc(void *drw_data, int fill, int x, int y, int w, int h, int sa, int ea)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (drw_data);
+
+ gdk_draw_arc(impress_document->pixmap, impress_document->gc, fill, x, y, w, h, sa * 64, ea * 64);
+}
+
+static void
+imp_render_draw_bezier(void *drw_data, int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (drw_data);
+
+ imp_render_draw_bezier_real (impress_document->pixmap, impress_document->gc, x0, y0, x1, y1, x2, y2, x3, y3);
+}
+
+static void *
+imp_render_open_image(void *drw_data, const unsigned char *pix, size_t size)
+{
+ GdkPixbufLoader *gpl;
+ GdkPixbuf *pb;
+
+ gpl = gdk_pixbuf_loader_new();
+ gdk_pixbuf_loader_write(gpl, pix, size, NULL);
+ gdk_pixbuf_loader_close(gpl, NULL);
+ pb = gdk_pixbuf_loader_get_pixbuf(gpl);
+ return pb;
+}
+
+static void
+imp_render_get_image_size(void *drw_data, void *img_data, int *w, int *h)
+{
+ GdkPixbuf *pb = (GdkPixbuf *) img_data;
+
+ *w = gdk_pixbuf_get_width(pb);
+ *h = gdk_pixbuf_get_height(pb);
+}
+
+static void *
+imp_render_scale_image(void *drw_data, void *img_data, int w, int h)
+{
+ GdkPixbuf *pb = (GdkPixbuf *) img_data;
+
+ return gdk_pixbuf_scale_simple(pb, w, h, GDK_INTERP_BILINEAR);
+}
+
+static void
+imp_render_draw_image(void *drw_data, void *img_data, int x, int y, int w, int h)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (drw_data);
+ GdkPixbuf *pb = (GdkPixbuf *) img_data;
+
+ gdk_draw_pixbuf(impress_document->pixmap, impress_document->gc, pb, 0, 0, x, y, w, h, GDK_RGB_DITHER_NONE, 0, 0);
+}
+
+static void
+imp_render_close_image(void *drw_data, void *img_data)
+{
+ GdkPixbuf *pb = (GdkPixbuf *) img_data;
+
+ g_object_unref(G_OBJECT(pb));
+}
+
+static char *
+imp_render_markup(const char *text, size_t len, int styles, int size)
+{
+ double scr_mm, scr_px, dpi;
+ char *esc;
+ char *ret;
+ int sz;
+
+ scr_mm = gdk_screen_get_height_mm(gdk_screen_get_default());
+ scr_px = gdk_screen_get_height(gdk_screen_get_default());
+ dpi = (scr_px / scr_mm) * 25.4;
+ sz = (int) ((double) size * 72.0 * PANGO_SCALE / dpi);
+ esc = g_markup_escape_text(text, len);
+ ret = g_strdup_printf("<span size ='%d'>%s</span>", sz, esc);
+ g_free(esc);
+ return ret;
+}
+
+static void
+imp_render_get_text_size(void *drw_data, const char *text, size_t len, int size, int styles, int *w, int *h)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (drw_data);
+ PangoLayout *lay;
+ int pw, ph;
+ char *m;
+
+ g_return_if_fail (impress_document->pango_ctx != NULL);
+
+ lay = pango_layout_new(impress_document->pango_ctx);
+ m = imp_render_markup(text, len, styles, size);
+ pango_layout_set_markup(lay, m, strlen(m));
+ pango_layout_get_size(lay, &pw, &ph);
+ g_object_unref(lay);
+ g_free(m);
+ *w = pw / PANGO_SCALE;
+ *h = ph / PANGO_SCALE;
+}
+
+static void
+imp_render_draw_text(void *drw_data, int x, int y, const char *text, size_t len, int size, int styles)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (drw_data);
+ PangoLayout *lay;
+ char *m;
+
+ g_return_if_fail (impress_document->pango_ctx != NULL);
+
+ lay = pango_layout_new(impress_document->pango_ctx);
+ m = imp_render_markup(text, len, styles, size);
+ pango_layout_set_markup(lay, m, strlen(m));
+ gdk_draw_layout(impress_document->pixmap, impress_document->gc, x, y, lay);
+ g_object_unref(lay);
+ g_free(m);
+}
+
+static const ImpDrawer imp_render_functions = {
+ imp_render_get_size,
+ imp_render_set_fg_color,
+ imp_render_draw_line,
+ imp_render_draw_rect,
+ imp_render_draw_polygon,
+ imp_render_draw_arc,
+ imp_render_draw_bezier,
+ imp_render_open_image,
+ imp_render_get_image_size,
+ imp_render_scale_image,
+ imp_render_draw_image,
+ imp_render_close_image,
+ imp_render_get_text_size,
+ imp_render_draw_text
+};
+
+/* Document interface */
+static gboolean
+impress_document_load (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (document);
+ gchar *filename;
+ ImpDoc *imp;
+ int err;
+
+ /* FIXME: Could we actually load uris ? */
+ filename = g_filename_from_uri (uri, NULL, error);
+ if (!filename)
+ return FALSE;
+
+ imp = imp_open (filename, &err);
+ g_free (filename);
+
+ if (!imp)
+ {
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("Invalid document"));
+ return FALSE;
+ }
+ impress_document->imp = imp;
+
+ return TRUE;
+}
+
+static gboolean
+impress_document_save (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ "Not supported");
+ return FALSE;
+}
+
+static int
+impress_document_get_n_pages (EvDocument *document)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (document);
+
+ g_return_val_if_fail (IMPRESS_IS_DOCUMENT (document), 0);
+ g_return_val_if_fail (impress_document->imp != NULL, 0);
+
+ return imp_nr_pages (impress_document->imp);
+}
+
+static void
+impress_document_get_page_size (EvDocument *document,
+ EvPage *page,
+ double *width,
+ double *height)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (document);
+
+ g_return_if_fail (IMPRESS_IS_DOCUMENT (document));
+ g_return_if_fail (impress_document->imp != NULL);
+
+ //FIXME
+ *width = PAGE_WIDTH;
+ *height = PAGE_HEIGHT;
+}
+
+static gboolean
+imp_render_get_from_drawable (ImpressDocument *impress_document)
+{
+ ImpPage *page;
+
+ page = imp_get_page (impress_document->imp, impress_document->pagenum);
+
+ g_return_val_if_fail (page != NULL, FALSE);
+
+ ev_document_doc_mutex_lock ();
+ imp_context_set_page (impress_document->ctx, page);
+ imp_render (impress_document->ctx, impress_document);
+ ev_document_doc_mutex_unlock ();
+
+ impress_document->pixbuf = gdk_pixbuf_get_from_drawable (NULL,
+ GDK_DRAWABLE (impress_document->pixmap),
+ NULL,
+ 0, 0,
+ 0, 0,
+ PAGE_WIDTH, PAGE_HEIGHT);
+
+ g_cond_broadcast (impress_document->cond);
+ return FALSE;
+}
+
+static GdkPixbuf *
+impress_document_render_pixbuf (EvDocument *document,
+ EvRenderContext *rc)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (document);
+ GdkPixbuf *pixbuf;
+
+ g_return_val_if_fail (IMPRESS_IS_DOCUMENT (document), NULL);
+ g_return_val_if_fail (impress_document->imp != NULL, NULL);
+
+ impress_document->pagenum = rc->page->index;
+
+ g_mutex_lock (impress_document->mutex);
+ impress_document->cond = g_cond_new ();
+
+ ev_document_fc_mutex_unlock ();
+ ev_document_doc_mutex_unlock ();
+ g_idle_add ((GSourceFunc) imp_render_get_from_drawable, impress_document);
+ g_cond_wait (impress_document->cond, impress_document->mutex);
+ g_cond_free (impress_document->cond);
+ ev_document_doc_mutex_lock ();
+ ev_document_fc_mutex_lock ();
+
+ g_mutex_unlock (impress_document->mutex);
+
+ pixbuf = impress_document->pixbuf;
+ impress_document->pixbuf = NULL;
+
+ return pixbuf;
+}
+
+static cairo_surface_t *
+impress_document_render (EvDocument *document,
+ EvRenderContext *rc)
+{
+ GdkPixbuf *pixbuf;
+ cairo_surface_t *surface, *scaled_surface;
+
+ pixbuf = impress_document_render_pixbuf (document, rc);
+
+ /* FIXME: impress backend should be ported to cairo */
+ surface = ev_document_misc_surface_from_pixbuf (pixbuf);
+ g_object_unref (pixbuf);
+
+ scaled_surface = ev_document_misc_surface_rotate_and_scale (surface,
+ (PAGE_WIDTH * rc->scale) + 0.5,
+ (PAGE_HEIGHT * rc->scale) + 0.5,
+ rc->rotation);
+ cairo_surface_destroy (surface);
+
+ return scaled_surface;
+}
+
+static void
+impress_document_finalize (GObject *object)
+{
+ ImpressDocument *impress_document = IMPRESS_DOCUMENT (object);
+
+ if (impress_document->mutex)
+ g_mutex_free (impress_document->mutex);
+
+ if (impress_document->imp)
+ imp_close (impress_document->imp);
+
+ if (impress_document->ctx)
+ imp_delete_context (impress_document->ctx);
+
+ if (impress_document->pango_ctx)
+ g_object_unref (impress_document->pango_ctx);
+
+ if (impress_document->pixmap)
+ g_object_unref (G_OBJECT (impress_document->pixmap));
+
+ if (impress_document->gc)
+ g_object_unref (impress_document->gc);
+
+ G_OBJECT_CLASS (impress_document_parent_class)->finalize (object);
+}
+
+static void
+impress_document_class_init (ImpressDocumentClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass);
+
+ gobject_class->finalize = impress_document_finalize;
+
+ ev_document_class->load = impress_document_load;
+ ev_document_class->save = impress_document_save;
+ ev_document_class->get_n_pages = impress_document_get_n_pages;
+ ev_document_class->get_page_size = impress_document_get_page_size;
+ ev_document_class->render = impress_document_render;
+}
+
+static GdkPixbuf *
+impress_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gboolean border)
+{
+ GdkPixbuf *pixbuf;
+ GdkPixbuf *scaled_pixbuf;
+
+ pixbuf = impress_document_render_pixbuf (EV_DOCUMENT (document), rc);
+ scaled_pixbuf = gdk_pixbuf_scale_simple (pixbuf,
+ (PAGE_WIDTH * rc->scale),
+ (PAGE_HEIGHT * rc->scale),
+ GDK_INTERP_BILINEAR);
+ g_object_unref (pixbuf);
+
+ if (border)
+ {
+ GdkPixbuf *tmp_pixbuf = scaled_pixbuf;
+
+ scaled_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, tmp_pixbuf);
+ g_object_unref (tmp_pixbuf);
+ }
+
+ return scaled_pixbuf;
+}
+
+static void
+impress_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gint *width,
+ gint *height)
+{
+ gdouble page_width, page_height;
+
+ impress_document_get_page_size (EV_DOCUMENT (document),
+ rc->page,
+ &page_width, &page_height);
+
+ if (rc->rotation == 90 || rc->rotation == 270)
+ {
+ *width = (gint) (page_height * rc->scale);
+ *height = (gint) (page_width * rc->scale);
+ }
+ else
+ {
+ *width = (gint) (page_width * rc->scale);
+ *height = (gint) (page_height * rc->scale);
+ }
+}
+
+static void
+impress_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
+{
+ iface->get_thumbnail = impress_document_thumbnails_get_thumbnail;
+ iface->get_dimensions = impress_document_thumbnails_get_dimensions;
+}
+
+static void
+impress_document_init (ImpressDocument *impress_document)
+{
+ GdkWindow *window;
+
+ impress_document->mutex = g_mutex_new ();
+ impress_document->ctx = imp_create_context(&imp_render_functions);
+
+ window = gdk_screen_get_root_window (gdk_screen_get_default ());
+
+ impress_document->pixmap = gdk_pixmap_new (window,
+ PAGE_WIDTH, PAGE_HEIGHT, -1);
+ impress_document->gc = gdk_gc_new (impress_document->pixmap);
+ impress_document->pango_ctx = gdk_pango_context_get_for_screen (gdk_screen_get_default ());
+}
+
+/*
+ * vim: sw=2 ts=8 cindent noai bs=2
+ */
diff --git a/backend/impress/impress-document.h b/backend/impress/impress-document.h
new file mode 100644
index 00000000..17a3c19a
--- /dev/null
+++ b/backend/impress/impress-document.h
@@ -0,0 +1,39 @@
+
+/* pdfdocument.h: Implementation of EvDocument for impresss
+ * Copyright (C) 2005, Jonathan Blandford <[email protected]>
+ *
+ * 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, 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 __IMPRESS_DOCUMENT_H__
+#define __IMPRESS_DOCUMENT_H__
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+#define IMPRESS_TYPE_DOCUMENT (impress_document_get_type ())
+#define IMPRESS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), IMPRESS_TYPE_DOCUMENT, ImpressDocument))
+#define IMPRESS_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IMPRESS_TYPE_DOCUMENT))
+
+typedef struct _ImpressDocument ImpressDocument;
+
+GType impress_document_get_type (void) G_GNUC_CONST;
+
+G_MODULE_EXPORT GType register_evince_backend (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* __IMPRESS_DOCUMENT_H__ */
diff --git a/backend/impress/impressdocument.evince-backend.in b/backend/impress/impressdocument.evince-backend.in
new file mode 100644
index 00000000..61de77ab
--- /dev/null
+++ b/backend/impress/impressdocument.evince-backend.in
@@ -0,0 +1,4 @@
+[Evince Backend]
+Module=impressdocument
+_TypeDescription=Impress Slides
+MimeType=application/vnd.sun.xml.impress;application/vnd.oasis.opendocument.presentation;
diff --git a/backend/impress/internal.h b/backend/impress/internal.h
new file mode 100644
index 00000000..eb99c3ec
--- /dev/null
+++ b/backend/impress/internal.h
@@ -0,0 +1,85 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#include "zip.h"
+
+#ifndef INTERNAL_H
+#define INTERNAL_H
+
+struct ImpDoc_struct {
+ ikstack *stack;
+ zip *zfile;
+ iks *content;
+ iks *styles;
+ iks *meta;
+ ImpPage *pages;
+ ImpPage *last_page;
+ int nr_pages;
+ void (*get_geometry)(ImpRenderCtx *ctx);
+ void (*render_page)(ImpRenderCtx *ctx, void *drw_data);
+};
+
+struct ImpPage_struct {
+ struct ImpPage_struct *next;
+ struct ImpPage_struct *prev;
+ ImpDoc *doc;
+ iks *page;
+ const char *name;
+ int nr;
+};
+
+struct ImpRenderCtx_struct {
+ const ImpDrawer *drw;
+ ImpPage *page;
+ iks *content;
+ iks *styles;
+ iks *last_element;
+ int step;
+ int pix_w, pix_h;
+ double cm_w, cm_h;
+ double fact_x, fact_y;
+};
+
+char *r_get_style (ImpRenderCtx *ctx, iks *node, char *attr);
+int r_get_color(ImpRenderCtx *ctx, iks *node, char *name, ImpColor *ic);
+void r_parse_color(const char *color, ImpColor *ic);
+int r_get_x (ImpRenderCtx *ctx, iks *node, char *name);
+int r_get_y (ImpRenderCtx *ctx, iks *node, char *name);
+int r_get_angle (iks *node, char *name, int def);
+
+enum {
+ IMP_LE_NONE = 0,
+ IMP_LE_ARROW,
+ IMP_LE_SQUARE,
+ IMP_LE_DIMENSION,
+ IMP_LE_DOUBLE_ARROW,
+ IMP_LE_SMALL_ARROW,
+ IMP_LE_ROUND_ARROW,
+ IMP_LE_SYM_ARROW,
+ IMP_LE_LINE_ARROW,
+ IMP_LE_ROUND_LARGE_ARROW,
+ IMP_LE_CIRCLE,
+ IMP_LE_SQUARE_45,
+ IMP_LE_CONCAVE_ARROW
+};
+
+void _imp_draw_rect(ImpRenderCtx *ctx, void *drw_data, int fill, int x, int y, int w, int h, int round);
+void _imp_draw_line_end(ImpRenderCtx *ctx, void *drw_data, int type, int size, int x, int y, int x2, int y2);
+void _imp_draw_image(ImpRenderCtx *ctx, void *drw_data, const char *name, int x, int y, int w, int h);
+void _imp_tile_image(ImpRenderCtx *ctx, void *drw_data, const char *name, int x, int y, int w, int h);
+
+int _imp_fill_back(ImpRenderCtx *ctx, void *drw_data, iks *node);
+void r_text(ImpRenderCtx *ctx, void *drw_data, iks *node);
+void r_polygon(ImpRenderCtx *ctx, void *drw_data, iks *node);
+void r_circle(ImpRenderCtx *ctx, void *drw_data, iks *node);
+void r_polyline(ImpRenderCtx *ctx, void *drw_data, iks *node);
+void r_draw_gradient (ImpRenderCtx *ctx, void *drw_data, iks *node);
+
+int _imp_oo13_load(ImpDoc *doc);
+int _imp_oasis_load(ImpDoc *doc);
+
+
+#endif /* INTERNAL_H */
diff --git a/backend/impress/r_back.c b/backend/impress/r_back.c
new file mode 100644
index 00000000..3f050d9e
--- /dev/null
+++ b/backend/impress/r_back.c
@@ -0,0 +1,46 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#include <config.h>
+#include "common.h"
+#include "internal.h"
+
+int
+_imp_fill_back(ImpRenderCtx *ctx, void *drw_data, iks *node)
+{
+ ImpColor col;
+ char *type;
+ char *stil, *gfx;
+ iks *x;
+
+ type = r_get_style(ctx, node, "draw:fill");
+ if (type == 0) return 0;
+
+ if (strcmp(type, "solid") == 0) {
+ if (r_get_color(ctx, node, "draw:fill-color", &col)) {
+ ctx->drw->set_fg_color(drw_data, &col);
+ }
+ ctx->drw->draw_rect(drw_data, 1, 0, 0, ctx->pix_w, ctx->pix_h);
+ } else if (strcmp (type, "bitmap") == 0) {
+ stil = r_get_style(ctx, node, "draw:fill-image-name");
+ x = iks_find_with_attrib(iks_find(ctx->styles, "office:styles"),
+ "draw:fill-image", "draw:name", stil
+ );
+ gfx = iks_find_attrib(x, "xlink:href");
+ if (gfx) {
+ if (iks_strcmp(r_get_style(ctx, node, "style:repeat"), "stretch") == 0) {
+ _imp_draw_image(ctx, drw_data, gfx, 0, 0, ctx->pix_w, ctx->pix_h);
+ } else {
+ _imp_tile_image(ctx, drw_data, gfx, 0, 0, ctx->pix_w, ctx->pix_h);
+ }
+ }
+ } else if (strcmp(type, "gradient") == 0) {
+ r_draw_gradient(ctx, drw_data, node);
+ } else {
+ return 0;
+ }
+ return 1;
+}
diff --git a/backend/impress/r_draw.c b/backend/impress/r_draw.c
new file mode 100644
index 00000000..aad1655e
--- /dev/null
+++ b/backend/impress/r_draw.c
@@ -0,0 +1,120 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#include <config.h>
+#include "common.h"
+#include "internal.h"
+#include <math.h>
+
+void
+_imp_draw_rect(ImpRenderCtx *ctx, void *drw_data, int fill, int x, int y, int w, int h, int round)
+{
+ int a;
+
+ if (0 == round) {
+ ctx->drw->draw_rect(drw_data, fill, x, y, w, h);
+ return;
+ }
+
+ ctx->drw->draw_arc(drw_data, fill,
+ x, y, round, round, 90, 90);
+ ctx->drw->draw_arc(drw_data, fill,
+ x + w - round, y, round, round, 0, 90);
+ ctx->drw->draw_arc(drw_data, fill,
+ x + w - round, y + h - round, round, round, 270, 90);
+ ctx->drw->draw_arc(drw_data, fill,
+ x, y + h - round, round, round, 180, 90);
+
+ a = round / 2;
+ if (fill) {
+ ctx->drw->draw_rect(drw_data, 1, x + a, y, w - a - a, h);
+ ctx->drw->draw_rect(drw_data, 1, x, y + a, w, h - a - a);
+ return;
+ }
+ ctx->drw->draw_line(drw_data, x + a, y, x + w - a, y);
+ ctx->drw->draw_line(drw_data, x + a, y + h, x + w - a, y + h);
+ ctx->drw->draw_line(drw_data, x, y + a, x, y + h - a);
+ ctx->drw->draw_line(drw_data, x + w, y + a, x + w, y + h - a);
+}
+
+void
+_imp_draw_line_end(ImpRenderCtx *ctx, void *drw_data, int type, int size, int x, int y, int x2, int y2)
+{
+ ImpPoint pts[4];
+ double ia, a;
+
+ // FIXME: different types and sizes
+
+ pts[0].x = x2;
+ pts[0].y = y2;
+
+ ia = 20 * 3.14 * 2 / 360;
+
+ if (x2-x == 0) {
+ if (y < y2) a = 3.14 + (3.14 / 2); else a = (3.14 / 2);
+ } else if (y2-y == 0) {
+ if (x < x2) a = 3.14; else a = 0;
+ } else
+ a = atan ((y2-y) / (x2-x)) - 3.14;
+
+ pts[1].x = x2 + 0.3 * ctx->fact_x * cos (a - ia);
+ pts[1].y = y2 + 0.3 * ctx->fact_y * sin (a - ia);
+
+ pts[2].x = x2 + 0.3 * ctx->fact_x * cos (a + ia);
+ pts[2].y = y2 + 0.3 * ctx->fact_y * sin (a + ia);
+
+ ctx->drw->draw_polygon(drw_data, 1, pts, 3);
+}
+
+void
+_imp_draw_image(ImpRenderCtx *ctx, void *drw_data, const char *name, int x, int y, int w, int h)
+{
+ void *img1, *img2;
+ char *pix;
+ size_t len;
+
+ len = zip_get_size(ctx->page->doc->zfile, name);
+ pix = malloc(len);
+ if (!pix) return;
+ zip_load(ctx->page->doc->zfile, name, pix);
+
+ img1 = ctx->drw->open_image(drw_data, pix, len);
+ free(pix);
+ if (!img1) return;
+ img2 = ctx->drw->scale_image(drw_data, img1, w, h);
+ if (img2) {
+ ctx->drw->draw_image(drw_data, img2, x, y, w, h);
+ ctx->drw->close_image(drw_data, img2);
+ }
+ ctx->drw->close_image(drw_data, img1);
+}
+
+void
+_imp_tile_image(ImpRenderCtx *ctx, void *drw_data, const char *name, int x, int y, int w, int h)
+{
+ void *img1;
+ char *pix;
+ size_t len;
+ int gx, gy, gw, gh;
+
+ len = zip_get_size(ctx->page->doc->zfile, name);
+ pix = malloc(len);
+ if (!pix) return;
+ zip_load(ctx->page->doc->zfile, name, pix);
+
+ img1 = ctx->drw->open_image(drw_data, pix, len);
+ free(pix);
+ if (!img1) return;
+
+ ctx->drw->get_image_size(drw_data, img1, &gw, &gh);
+ for (gx = x; gx < w; gx += gw) {
+ for (gy = y; gy < h; gy += gh) {
+ ctx->drw->draw_image(drw_data, img1, gx, gy, gw, gh);
+ }
+ }
+
+ ctx->drw->close_image(drw_data, img1);
+}
diff --git a/backend/impress/r_geometry.c b/backend/impress/r_geometry.c
new file mode 100644
index 00000000..4819821a
--- /dev/null
+++ b/backend/impress/r_geometry.c
@@ -0,0 +1,208 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#include <config.h>
+#include "common.h"
+#include "internal.h"
+#include <math.h>
+
+void
+r_parse_color(const char *color, ImpColor *ic)
+{
+ unsigned int cval;
+
+ if (1 != sscanf(color, "#%X", &cval)) return;
+
+ ic->red = (cval & 0xFF0000) >> 8;
+ ic->green = cval & 0x00FF00;
+ ic->blue = (cval & 0xFF) << 8;
+}
+
+int
+r_get_color(ImpRenderCtx *ctx, iks *node, char *name, ImpColor *ic)
+{
+ char *color;
+
+ color = r_get_style(ctx, node, name);
+ if (!color) return 0;
+ r_parse_color(color, ic);
+
+ return 1;
+}
+
+static void
+fg_color(ImpRenderCtx *ctx, void *drw_data, iks *node, char *name)
+{
+ ImpColor ic;
+
+ if (r_get_color(ctx, node, name, &ic)) {
+ ctx->drw->set_fg_color(drw_data, &ic);
+ }
+}
+
+int
+r_get_x (ImpRenderCtx *ctx, iks *node, char *name)
+{
+ char *val;
+
+ val = iks_find_attrib (node, name);
+ if (!val) return 0;
+ return atof (val) * ctx->fact_x;
+}
+
+int
+r_get_y (ImpRenderCtx *ctx, iks *node, char *name)
+{
+ char *val;
+
+ val = iks_find_attrib (node, name);
+ if (!val) return 0;
+ return atof (val) * ctx->fact_y;
+}
+
+int
+r_get_angle (iks *node, char *name, int def)
+{
+ char *tmp;
+
+ tmp = iks_find_attrib (node, name);
+ if (!tmp) return def;
+ return atof (tmp);
+}
+
+static int x, y, w, h;
+static int px, py, pw, ph;
+
+static void
+r_get_viewbox (iks *node)
+{
+ char *tmp;
+
+ tmp = iks_find_attrib (node, "svg:viewBox");
+ if (!tmp) return;
+ sscanf (tmp, "%d %d %d %d", &px, &py, &pw, &ph);
+}
+
+void
+r_polygon(ImpRenderCtx *ctx, void *drw_data, iks *node)
+{
+ char *data;
+ ImpPoint *points;
+ int i, cnt, j;
+ int num;
+ int fill = 1;
+
+ data = r_get_style (ctx, node, "draw:fill");
+ if (!data || strcmp (data, "solid") != 0) fill = 0;
+
+ x = r_get_x (ctx, node, "svg:x");
+ y = r_get_y (ctx, node, "svg:y");
+ w = r_get_x (ctx, node, "svg:width");
+ h = r_get_y (ctx, node, "svg:height");
+ r_get_viewbox (node);
+
+ data = iks_find_attrib (node, "draw:points");
+ points = malloc (sizeof (ImpPoint) * strlen (data) / 4);
+
+ cnt = 0;
+ j = 0;
+ num = -1;
+ for (i = 0; data[i]; i++) {
+ if (data[i] >= '0' && data[i] <= '9') {
+ if (num == -1) num = i;
+ } else {
+ if (num != -1) {
+ if (j == 0) {
+ points[cnt].x = atoi (data + num);
+ j = 1;
+ } else {
+ points[cnt++].y = atoi (data + num);
+ j = 0;
+ }
+ num = -1;
+ }
+ }
+ }
+ if (num != -1) {
+ if (j == 0) {
+ points[cnt].x = atoi (data + num);
+ } else {
+ points[cnt++].y = atoi (data + num);
+ }
+ }
+ for (i = 0; i < cnt; i++) {
+ points[i].x = x + points[i].x * w / pw;
+ points[i].y = y + points[i].y * h / ph;
+ }
+
+ if (fill) {
+ fg_color(ctx, drw_data, node, "draw:fill-color");
+ ctx->drw->draw_polygon(drw_data, 1, points, cnt);
+ }
+ fg_color(ctx, drw_data, node, "svg:stroke-color");
+ ctx->drw->draw_polygon(drw_data, 0, points, cnt);
+
+ free (points);
+}
+
+void
+r_polyline(ImpRenderCtx *ctx, void *drw_data, iks *node)
+{
+ char *data;
+ ImpPoint *points;
+ int i, cnt, j;
+ int num;
+ int pen_x, pen_y;
+
+ x = r_get_x (ctx, node, "svg:x");
+ y = r_get_y (ctx, node, "svg:y");
+ w = r_get_x (ctx, node, "svg:width");
+ h = r_get_y (ctx, node, "svg:height");
+ r_get_viewbox (node);
+
+ data = iks_find_attrib (node, "draw:points");
+ points = malloc (sizeof (ImpPoint) * strlen (data) / 4);
+
+ cnt = 0;
+ j = 0;
+ num = -1;
+ for (i = 0; data[i]; i++) {
+ if (data[i] >= '0' && data[i] <= '9') {
+ if (num == -1) num = i;
+ } else {
+ if (num != -1) {
+ if (j == 0) {
+ points[cnt].x = atoi (data + num);
+ j = 1;
+ } else {
+ points[cnt++].y = atoi (data + num);
+ j = 0;
+ }
+ num = -1;
+ }
+ }
+ }
+ if (num != -1) {
+ if (j == 0) {
+ points[cnt].x = atoi (data + num);
+ } else {
+ points[cnt++].y = atoi (data + num);
+ }
+ }
+
+ pen_x = x + points[0].x * w /pw;
+ pen_y = y + points[0].y * h / ph;
+ fg_color(ctx, drw_data, node, "svg:stroke-color");
+ for (i = 1; i < cnt; i++) {
+ int tx, ty;
+ tx = x + points[i].x * w / pw;
+ ty = y + points[i].y * h / ph;
+ ctx->drw->draw_line(drw_data, pen_x, pen_y, tx, ty);
+ pen_x = tx;
+ pen_y = ty;
+ }
+ free (points);
+}
diff --git a/backend/impress/r_gradient.c b/backend/impress/r_gradient.c
new file mode 100644
index 00000000..79636fe2
--- /dev/null
+++ b/backend/impress/r_gradient.c
@@ -0,0 +1,387 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#include <config.h>
+#include "common.h"
+#include "internal.h"
+#include <math.h>
+
+#define GRAD_LINEAR 0
+#define GRAD_AXIAL 1
+#define GRAD_SQUARE 2
+#define GRAD_RECTANGULAR 3
+#define GRAD_RADIAL 4
+#define GRAD_ELLIPTICAL 5
+
+typedef struct Gradient_s {
+ int type;
+ ImpColor start;
+ int start_intensity;
+ ImpColor end;
+ int end_intensity;
+ int angle;
+ int border;
+ int steps;
+ int offset_x;
+ int offset_y;
+} Gradient;
+
+typedef struct Rectangle_s {
+ int Left;
+ int Top;
+ int Right;
+ int Bottom;
+} Rectangle;
+
+static void
+poly_rotate (ImpPoint *poly, int n, int cx, int cy, double fAngle)
+{
+ int i;
+ long nX, nY;
+
+ for (i = 0; i < n; i++) {
+ nX = poly->x - cx;
+ nY = poly->y - cy;
+ poly->x = (cos(fAngle) * nX + sin(fAngle) * nY) + cx;
+ poly->y = - (sin(fAngle)* nX - cos(fAngle) * nY) + cy;
+ poly++;
+ }
+}
+
+static void
+r_draw_gradient_simple (ImpRenderCtx *ctx, void *drw_data, Gradient *grad)
+{
+ Rectangle rRect = { 0, 0, ctx->pix_w - 1, ctx->pix_h - 1 };
+ Rectangle aRect, aFullRect;
+ ImpPoint poly[4], tempoly[2];
+ ImpColor gcol;
+ double fW, fH, fDX, fDY, fAngle;
+ double fScanLine, fScanInc;
+ long redSteps, greenSteps, blueSteps;
+ long nBorder;
+ int i, nSteps, nSteps2;
+ int cx, cy;
+
+ cx = rRect.Left + (rRect.Right - rRect.Left) / 2;
+ cy = rRect.Top + (rRect.Bottom - rRect.Top) / 2;
+
+ aRect = rRect;
+ aRect.Top--; aRect.Left--; aRect.Bottom++; aRect.Right++;
+ fW = rRect.Right - rRect.Left;
+ fH = rRect.Bottom - rRect.Top;
+ fAngle = (((double) grad->angle) * 3.14 / 1800.0);
+ fDX = fW * fabs (cos (fAngle)) + fH * fabs (sin (fAngle));
+ fDY = fH * fabs (cos (fAngle)) + fW * fabs (sin (fAngle));
+ fDX = (fDX - fW) * 0.5 - 0.5;
+ fDY = (fDY - fH) * 0.5 - 0.5;
+ aRect.Left -= fDX;
+ aRect.Right += fDX;
+ aRect.Top -= fDY;
+ aRect.Bottom += fDY;
+ aFullRect = aRect;
+
+ nBorder = grad->border * (aRect.Bottom - aRect.Top) / 100;
+ if (grad->type == GRAD_LINEAR) {
+ aRect.Top += nBorder;
+ } else {
+ nBorder >>= 1;
+ aRect.Top += nBorder;
+ aRect.Bottom -= nBorder;
+ }
+
+ if (aRect.Top > (aRect.Bottom - 1))
+ aRect.Top = aRect.Bottom - 1;
+
+ poly[0].x = aFullRect.Left;
+ poly[0].y = aFullRect.Top;
+ poly[1].x = aFullRect.Right;
+ poly[1].y = aFullRect.Top;
+ poly[2].x = aRect.Right;
+ poly[2].y = aRect.Top;
+ poly[3].x = aRect.Left;
+ poly[3].y = aRect.Top;
+ poly_rotate (&poly[0], 4, cx, cy, fAngle);
+
+ redSteps = grad->end.red - grad->start.red;
+ greenSteps = grad->end.green - grad->start.green;
+ blueSteps = grad->end.blue - grad->start.blue;
+ nSteps = grad->steps;
+ if (nSteps == 0) {
+ long mr;
+ mr = aRect.Bottom - aRect.Top;
+ if (mr < 50)
+ nSteps = mr / 2;
+ else
+ nSteps = mr / 4;
+ mr = abs(redSteps);
+ if (abs(greenSteps) > mr) mr = abs(greenSteps);
+ if (abs(blueSteps) > mr) mr = abs(blueSteps);
+ if (mr < nSteps) nSteps = mr;
+ }
+
+ if (grad->type == GRAD_AXIAL) {
+ if (nSteps & 1) nSteps++;
+ nSteps2 = nSteps + 2;
+ gcol = grad->end;
+ redSteps <<= 1;
+ greenSteps <<= 1;
+ blueSteps <<= 1;
+ } else {
+ nSteps2 = nSteps + 1;
+ gcol = grad->start;
+ }
+
+ fScanLine = aRect.Top;
+ fScanInc = (double)(aRect.Bottom - aRect.Top) / (double)nSteps;
+
+ for (i = 0; i < nSteps2; i++) {
+ // draw polygon
+ ctx->drw->set_fg_color(drw_data, &gcol);
+ ctx->drw->draw_polygon(drw_data, 1, &poly[0], 4);
+ // calc next polygon
+ aRect.Top = (long)(fScanLine += fScanInc);
+ if (i == nSteps) {
+ tempoly[0].x = aFullRect.Left;
+ tempoly[0].y = aFullRect.Bottom;
+ tempoly[1].x = aFullRect.Right;
+ tempoly[1].y = aFullRect.Bottom;
+ } else {
+ tempoly[0].x = aRect.Left;
+ tempoly[0].y = aRect.Top;
+ tempoly[1].x = aRect.Right;
+ tempoly[1].y = aRect.Top;
+ }
+ poly_rotate (&tempoly[0], 2, cx, cy, fAngle);
+ poly[0] = poly[3];
+ poly[1] = poly[2];
+ poly[2] = tempoly[1];
+ poly[3] = tempoly[0];
+ // calc next color
+ if (grad->type == GRAD_LINEAR) {
+ gcol.red = grad->start.red + ((redSteps * i) / nSteps2);
+ gcol.green = grad->start.green + ((greenSteps * i) / nSteps2);
+ gcol.blue = grad->start.blue + ((blueSteps * i) / nSteps2);
+ } else {
+ if (i >= nSteps) {
+ gcol.red = grad->end.red;
+ gcol.green = grad->end.green;
+ gcol.blue = grad->end.blue;
+ } else {
+ if (i <= (nSteps / 2)) {
+ gcol.red = grad->end.red - ((redSteps * i) / nSteps2);
+ gcol.green = grad->end.green - ((greenSteps * i) / nSteps2);
+ gcol.blue = grad->end.blue - ((blueSteps * i) / nSteps2);
+ } else {
+ int i2 = i - nSteps / 2;
+ gcol.red = grad->start.red + ((redSteps * i2) / nSteps2);
+ gcol.green = grad->start.green + ((greenSteps * i2) / nSteps2);
+ gcol.blue = grad->start.blue + ((blueSteps * i2) / nSteps2);
+ }
+ }
+ }
+ }
+}
+
+static void
+r_draw_gradient_complex (ImpRenderCtx *ctx, void *drw_data, Gradient *grad)
+{
+ Rectangle rRect = { 0, 0, ctx->pix_w - 1, ctx->pix_h - 1 };
+ Rectangle aRect = rRect;
+ ImpColor gcol;
+ ImpPoint poly[4];
+ double fAngle = (((double) grad->angle) * 3.14 / 1800.0);
+ long redSteps, greenSteps, blueSteps;
+ long nZW, nZH;
+ long bX, bY;
+ long sW, sH;
+ long cx, cy;
+ int i;
+ long nSteps;
+ double sTop, sLeft, sRight, sBottom, sInc;
+ int minRect;
+
+ redSteps = grad->end.red - grad->start.red;
+ greenSteps = grad->end.green - grad->start.green;
+ blueSteps = grad->end.blue - grad->start.blue;
+
+ if (grad->type == GRAD_SQUARE || grad->type == GRAD_RECTANGULAR) {
+ double fW = aRect.Right - aRect.Left;
+ double fH = aRect.Bottom - aRect.Top;
+ double fDX = fW * fabs (cos (fAngle)) + fH * fabs (sin (fAngle));
+ double fDY = fH * fabs (cos (fAngle)) + fW * fabs (sin (fAngle));
+ fDX = (fDX - fW) * 0.5 - 0.5;
+ fDY = (fDY - fH) * 0.5 - 0.5;
+ aRect.Left -= fDX;
+ aRect.Right += fDX;
+ aRect.Top -= fDY;
+ aRect.Bottom += fDY;
+ }
+
+ sW = aRect.Right - aRect.Left;
+ sH = aRect.Bottom - aRect.Top;
+
+ if (grad->type == GRAD_SQUARE) {
+ if (sW > sH) sH = sW; else sW = sH;
+ } else if (grad->type == GRAD_RADIAL) {
+ sW = 0.5 + sqrt ((double)sW*(double)sW + (double)sH*(double)sH);
+ sH = sW;
+ } else if (grad->type == GRAD_ELLIPTICAL) {
+ sW = 0.5 + (double)sW * 1.4142;
+ sH = 0.5 + (double)sH * 1.4142;
+ }
+
+ nZW = (aRect.Right - aRect.Left) * grad->offset_x / 100;
+ nZH = (aRect.Bottom - aRect.Top) * grad->offset_y / 100;
+ bX = grad->border * sW / 100;
+ bY = grad->border * sH / 100;
+ cx = aRect.Left + nZW;
+ cy = aRect.Top + nZH;
+
+ sW -= bX;
+ sH -= bY;
+
+ aRect.Left = cx - ((aRect.Right - aRect.Left) >> 1);
+ aRect.Top = cy - ((aRect.Bottom - aRect.Top) >> 1);
+
+ nSteps = grad->steps;
+ minRect = aRect.Right - aRect.Left;
+ if (aRect.Bottom - aRect.Top < minRect) minRect = aRect.Bottom - aRect.Top;
+ if (nSteps == 0) {
+ long mr;
+ if (minRect < 50)
+ nSteps = minRect / 2;
+ else
+ nSteps = minRect / 4;
+ mr = abs(redSteps);
+ if (abs(greenSteps) > mr) mr = abs(greenSteps);
+ if (abs(blueSteps) > mr) mr = abs(blueSteps);
+ if (mr < nSteps) nSteps = mr;
+ }
+
+ sLeft = aRect.Left;
+ sTop = aRect.Top;
+ sRight = aRect.Right;
+ sBottom = aRect.Bottom;
+ sInc = (double) minRect / (double) nSteps * 0.5;
+
+ gcol = grad->start;
+ poly[0].x = rRect.Left;
+ poly[0].y = rRect.Top;
+ poly[1].x = rRect.Right;
+ poly[1].y = rRect.Top;
+ poly[2].x = rRect.Right;
+ poly[2].y = rRect.Bottom;
+ poly[3].x = rRect.Left;
+ poly[3].y = rRect.Bottom;
+ ctx->drw->set_fg_color(drw_data, &gcol);
+ ctx->drw->draw_polygon(drw_data, 1, &poly[0], 4);
+
+ for (i = 0; i < nSteps; i++) {
+ aRect.Left = (long) (sLeft += sInc);
+ aRect.Top = (long) (sTop += sInc);
+ aRect.Right = (long) (sRight -= sInc);
+ aRect.Bottom = (long) (sBottom -= sInc);
+ if (aRect.Bottom - aRect.Top < 2 || aRect.Right - aRect.Left < 2)
+ break;
+
+ gcol.red = grad->start.red + (redSteps * (i+1) / nSteps);
+ gcol.green = grad->start.green + (greenSteps * (i+1) / nSteps);
+ gcol.blue = grad->start.blue + (blueSteps * (i+1) / nSteps);
+ ctx->drw->set_fg_color(drw_data, &gcol);
+
+ if (grad->type == GRAD_RADIAL || grad->type == GRAD_ELLIPTICAL) {
+ ctx->drw->draw_arc(drw_data, 1, aRect.Left, aRect.Top,
+ aRect.Right - aRect.Left, aRect.Bottom - aRect.Top,
+ 0, 360);
+ } else {
+ poly[0].x = aRect.Left;
+ poly[0].y = aRect.Top;
+ poly[1].x = aRect.Right;
+ poly[1].y = aRect.Top;
+ poly[2].x = aRect.Right;
+ poly[2].y = aRect.Bottom;
+ poly[3].x = aRect.Left;
+ poly[3].y = aRect.Bottom;
+ poly_rotate (&poly[0], 4, cx, cy, fAngle);
+ ctx->drw->draw_polygon(drw_data, 1, &poly[0], 4);
+ }
+ }
+}
+
+void
+r_draw_gradient (ImpRenderCtx *ctx, void *drw_data, iks *node)
+{
+// GdkGC *gc;
+ Gradient grad;
+ char *stil, *tmp;
+ iks *x;
+
+ stil = r_get_style (ctx, node, "draw:fill-gradient-name");
+ x = iks_find_with_attrib (iks_find (ctx->styles, "office:styles"),
+ "draw:gradient", "draw:name", stil);
+ if (x) {
+ memset (&grad, 0, sizeof (Gradient));
+ grad.type = -1;
+ grad.offset_x = 50;
+ grad.offset_y = 50;
+
+ tmp = iks_find_attrib (x, "draw:start-color");
+ if (tmp) r_parse_color (tmp, &grad.start);
+ tmp = iks_find_attrib (x, "draw:start-intensity");
+ if (tmp) {
+ int val = atoi (tmp);
+ grad.start.red = grad.start.red * val / 100;
+ grad.start.green = grad.start.green * val / 100;
+ grad.start.blue = grad.start.blue * val / 100;
+ }
+ tmp = iks_find_attrib (x, "draw:end-color");
+ if (tmp) r_parse_color (tmp, &grad.end);
+ tmp = iks_find_attrib (x, "draw:end-intensity");
+ if (tmp) {
+ int val = atoi (tmp);
+ grad.end.red = grad.end.red * val / 100;
+ grad.end.green = grad.end.green * val / 100;
+ grad.end.blue = grad.end.blue * val / 100;
+ }
+ tmp = iks_find_attrib (x, "draw:angle");
+ if (tmp) grad.angle = atoi(tmp) % 3600;
+ tmp = iks_find_attrib (x, "draw:border");
+ if (tmp) grad.border = atoi(tmp);
+ tmp = r_get_style (ctx, node, "draw:gradient-step-count");
+ if (tmp) grad.steps = atoi (tmp);
+ tmp = iks_find_attrib (x, "draw:cx");
+ if (tmp) grad.offset_x = atoi (tmp);
+ tmp = iks_find_attrib (x, "draw:cy");
+ if (tmp) grad.offset_y = atoi (tmp);
+ tmp = iks_find_attrib (x, "draw:style");
+ if (iks_strcmp (tmp, "linear") == 0)
+ grad.type = GRAD_LINEAR;
+ else if (iks_strcmp (tmp, "axial") == 0)
+ grad.type = GRAD_AXIAL;
+ else if (iks_strcmp (tmp, "radial") == 0)
+ grad.type = GRAD_RADIAL;
+ else if (iks_strcmp (tmp, "rectangular") == 0)
+ grad.type = GRAD_RECTANGULAR;
+ else if (iks_strcmp (tmp, "ellipsoid") == 0)
+ grad.type = GRAD_ELLIPTICAL;
+ else if (iks_strcmp (tmp, "square") == 0)
+ grad.type = GRAD_SQUARE;
+
+ if (grad.type == -1) return;
+
+// gc = ctx->gc;
+// ctx->gc = gdk_gc_new (ctx->d);
+// gdk_gc_copy (ctx->gc, gc);
+
+ if (grad.type == GRAD_LINEAR || grad.type == GRAD_AXIAL)
+ r_draw_gradient_simple (ctx, drw_data, &grad);
+ else
+ r_draw_gradient_complex (ctx, drw_data, &grad);
+
+// g_object_unref (ctx->gc);
+// ctx->gc = gc;
+ }
+}
diff --git a/backend/impress/r_style.c b/backend/impress/r_style.c
new file mode 100644
index 00000000..39ee9c62
--- /dev/null
+++ b/backend/impress/r_style.c
@@ -0,0 +1,111 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#include <config.h>
+#include "common.h"
+#include "internal.h"
+
+static char *
+get_style(ImpRenderCtx *ctx, iks *node, char *style, char *attr)
+{
+ char *ret;
+ iks *x;
+
+ if (!style) return NULL;
+
+ if (iks_root (node) == ctx->content) {
+ x = iks_find_with_attrib (iks_find (ctx->content, "office:automatic-styles"),
+ "style:style", "style:name", style);
+ } else {
+ x = iks_find_with_attrib (iks_find (ctx->styles, "office:automatic-styles"),
+ "style:style", "style:name", style);
+ }
+ if (!x) return NULL;
+
+ while (x) {
+ ret = iks_find_attrib (iks_find (x, "style:properties"), attr);
+ if (ret) return ret;
+ ret = iks_find_attrib (iks_find (x, "style:text-properties"), attr);
+ if (ret) return ret;
+ ret = iks_find_attrib (iks_find (x, "style:paragraph-properties"), attr);
+ if (ret) return ret;
+ ret = iks_find_attrib (iks_find (x, "style:graphic-properties"), attr);
+ if (ret) return ret;
+ ret = iks_find_attrib (iks_find (x, "style:drawing-page-properties"), attr);
+ if (ret) return ret;
+
+ style = iks_find_attrib (x, "style:parent-style-name");
+ if (!style) return NULL;
+
+ x = iks_find_with_attrib (iks_find (ctx->styles, "office:styles"),
+ "style:style", "style:name", style);
+
+ }
+ return NULL;
+}
+
+char *
+r_get_style (ImpRenderCtx *ctx, iks *node, char *attr)
+{
+ char *ret, *s;
+ iks *x;
+
+ ret = iks_find_attrib (node, attr);
+ if (ret) return ret;
+
+ for (x = node; x; x = iks_parent (x)) {
+ s = iks_find_attrib (x, "text:style-name");
+ ret = get_style (ctx, node, s, attr);
+ if (ret) return ret;
+ s = iks_find_attrib (x, "presentation:style-name");
+ ret = get_style (ctx, node, s, attr);
+ if (ret) return ret;
+ s = iks_find_attrib (x, "draw:style-name");
+ ret = get_style (ctx, node, s, attr);
+ if (ret) return ret;
+ }
+ return NULL;
+}
+
+#if 0
+static iks *
+get_style_x (ImpRenderCtx *ctx, iks *node, char *style, char *attr)
+{
+ iks *x;
+
+ if (!style) return NULL;
+
+ if (iks_root (node) == ctx->content) {
+ x = iks_find_with_attrib (iks_find (ctx->content, "office:automatic-styles"),
+ "text:list-style", "style:name", style);
+ } else {
+ x = iks_find_with_attrib (iks_find (ctx->styles, "office:automatic-styles"),
+ "text:list-style", "style:name", style);
+ }
+ return x;
+}
+
+static iks *
+r_get_bullet (ImpRenderCtx *ctx, iks *node, char *attr)
+{
+ iks *ret;
+ char *s;
+ iks *x;
+
+ for (x = node; x; x = iks_parent (x)) {
+ s = iks_find_attrib (x, "text:style-name");
+ ret = get_style_x (ctx, node, s, attr);
+ if (ret) return ret;
+ s = iks_find_attrib (x, "presentation:style-name");
+ ret = get_style_x (ctx, node, s, attr);
+ if (ret) return ret;
+ s = iks_find_attrib (x, "draw:style-name");
+ ret = get_style_x (ctx, node, s, attr);
+ if (ret) return ret;
+ }
+ return NULL;
+}
+#endif
diff --git a/backend/impress/r_text.c b/backend/impress/r_text.c
new file mode 100644
index 00000000..4b89bcad
--- /dev/null
+++ b/backend/impress/r_text.c
@@ -0,0 +1,386 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#include <config.h>
+#include "common.h"
+#include "internal.h"
+
+struct Span {
+ struct Span *next;
+ int x, y;
+ int w, h;
+ char *text;
+ int len;
+ int size;
+ int styles;
+ ImpColor fg;
+};
+
+struct Line {
+ struct Line *next;
+ struct Span *spans;
+ struct Span *last_span;
+ int x, y;
+ int w, h;
+};
+
+struct Layout {
+ ikstack *s;
+ int x, y, w, h;
+ int tw, th;
+ struct Line *lines;
+ struct Line *last_line;
+ char spaces[128];
+};
+
+static struct Line *
+add_line(struct Layout *lay)
+{
+ struct Line *line;
+
+ line = iks_stack_alloc(lay->s, sizeof(struct Line));
+ memset(line, 0, sizeof(struct Line));
+
+ if (!lay->lines) lay->lines = line;
+ if (lay->last_line) lay->last_line->next = line;
+ lay->last_line = line;
+
+ return line;
+}
+
+static struct Span *
+add_span(struct Layout *lay, char *text, int len, int size, int styles)
+{
+ struct Line *line;
+ struct Span *span;
+
+ span = iks_stack_alloc(lay->s, sizeof(struct Span));
+ memset(span, 0, sizeof(struct Span));
+ span->text = text;
+ span->len = len;
+ span->size = size;
+ span->styles = styles;
+
+ line = lay->last_line;
+ if (!line) line = add_line(lay);
+ if (line->spans) {
+ span->x = line->last_span->x + line->last_span->w;
+ span->y = line->last_span->y;
+ } else {
+ span->x = line->x;
+ span->y = line->y;
+ }
+
+ if (!line->spans) line->spans = span;
+ if (line->last_span) line->last_span->next = span;
+ line->last_span = span;
+
+ return span;
+}
+
+static void
+calc_sizes(ImpRenderCtx *ctx, void *drw_data, struct Layout *lay)
+{
+ struct Line *line;
+ struct Span *span;
+
+ for (line = lay->lines; line; line = line->next) {
+ for (span = line->spans; span; span = span->next) {
+ ctx->drw->get_text_size(drw_data,
+ span->text, span->len,
+ span->size, span->styles,
+ &span->w, &span->h
+ );
+ line->w += span->w;
+ if (span->h > line->h) line->h = span->h;
+ }
+ if (line->w > lay->tw) lay->tw = line->w;
+ lay->th += line->h;
+ }
+}
+
+static void
+calc_pos(ImpRenderCtx *ctx, struct Layout *lay)
+{
+ struct Line *line;
+ struct Span *span;
+ int x, y, x2;
+
+ x = lay->x;
+ y = lay->y;
+ for (line = lay->lines; line; line = line->next) {
+ line->x = x;
+ line->y = y;
+ y += line->h;
+ x2 = x;
+ for (span = line->spans; span; span = span->next) {
+ span->x = x2;
+ span->y = y;
+ x2 += span->w;
+ }
+ }
+}
+
+static void
+_imp_draw_layout(ImpRenderCtx *ctx, void *drw_data, struct Layout *lay)
+{
+ struct Line *line;
+ struct Span *span;
+
+ for (line = lay->lines; line; line = line->next) {
+ for (span = line->spans; span; span = span->next) {
+ ctx->drw->set_fg_color(drw_data, &span->fg);
+ ctx->drw->draw_text(drw_data,
+ span->x, span->y,
+ span->text, span->len,
+ span->size,
+ span->styles
+ );
+ }
+ }
+}
+
+static void
+text_span(ImpRenderCtx *ctx, struct Layout *lay, iks *node, char *text, size_t len)
+{
+ struct Span *span;
+ double cm;
+ char *attr, *t, *s;
+ int px = 0, cont = 1;
+ int styles = IMP_NORMAL;
+
+ attr = r_get_style(ctx, node, "fo:font-size");
+ if (attr) {
+ cm = atof(attr);
+ if (strstr(attr, "pt")) cm = cm * 2.54 / 102;
+ px = cm * ctx->fact_y;
+ }
+ attr = r_get_style(ctx, node, "fo:font-weight");
+ if (attr && strcmp(attr, "bold") == 0) styles |= IMP_BOLD;
+ attr = r_get_style(ctx, node, "style:text-underline");
+ if (attr && strcmp(attr, "single") == 0) styles |= IMP_UNDERLINE;
+ attr = r_get_style(ctx, node, "fo:font-style");
+ if (attr && strcmp(attr, "italic") == 0) styles |= IMP_ITALIC;
+
+ t = text;
+ while (cont) {
+ s = strchr(t, '\n');
+ if (s) {
+ int len2 = s - t;
+ span = add_span(lay, t, len2, px, styles);
+ t = s + 1;
+ len -= len2;
+ add_line(lay);
+ } else {
+ span = add_span(lay, text, len, px, styles);
+ cont = 0;
+ }
+ r_get_color(ctx, node, "fo:color", &span->fg);
+ }
+}
+
+static void
+text_p(ImpRenderCtx *ctx, struct Layout *lay, iks *node)
+{
+ iks *n, *n2;
+
+ add_line(lay);
+ for (n = iks_child(node); n; n = iks_next(n)) {
+ if (iks_type(n) == IKS_CDATA) {
+ text_span(ctx, lay, node, iks_cdata(n), iks_cdata_size(n));
+ } else if (iks_strcmp(iks_name(n), "text:span") == 0) {
+ for (n2 = iks_child(n); n2; n2 = iks_next(n2)) {
+ if (iks_type(n2) == IKS_CDATA) {
+ text_span(ctx, lay, n2, iks_cdata(n2), iks_cdata_size(n2));
+ } else if (iks_strcmp(iks_name(n2), "text:s") == 0) {
+ char *attr;
+ int c = 1;
+ attr = iks_find_attrib(n2, "text:c");
+ if (attr) c = atoi(attr);
+ if (c > 127) {
+ c = 127;
+ puts("bork bork");
+ }
+ text_span(ctx, lay, n, lay->spaces, c);
+ } else if (iks_strcmp(iks_name(n2), "text:a") == 0) {
+ text_span(ctx, lay, n, iks_cdata(iks_child(n2)), iks_cdata_size(iks_child(n2)));
+ } else if (iks_strcmp(iks_name(n2), "text:tab-stop") == 0) {
+ text_span(ctx, lay, n, "\t", 1);
+ } else if (iks_strcmp(iks_name(n2), "text:page-number") == 0) {
+ char buf[8];
+ sprintf(buf, "%d", ctx->page->nr);
+ text_span(ctx, lay, n, iks_stack_strdup(lay->s, buf, 0), strlen(buf));
+ }
+ }
+ } else if (iks_strcmp(iks_name(n), "text:line-break") == 0) {
+ add_line(lay);
+ } else if (iks_strcmp(iks_name(n), "text:a") == 0) {
+ text_span(ctx, lay, n, iks_cdata(iks_child(n)), iks_cdata_size(iks_child(n)));
+ } else if (iks_strcmp(iks_name(n), "text:page-number") == 0) {
+ char buf[8];
+ sprintf(buf, "%d", ctx->page->nr);
+ text_span(ctx, lay, n, iks_stack_strdup(lay->s, buf, 0), strlen(buf));
+ }
+ }
+}
+
+static void
+text_list(ImpRenderCtx *ctx, struct Layout *lay, iks *node)
+{
+ iks *n, *n2;
+
+ for (n = iks_first_tag(node); n; n = iks_next_tag(n)) {
+ for (n2 = iks_first_tag(n); n2; n2 = iks_next_tag(n2)) {
+ if (strcmp(iks_name(n2), "text:p") == 0) {
+ text_p(ctx, lay, n2);
+ } else if (strcmp(iks_name(n2), "text:ordered-list") == 0) {
+ text_list(ctx, lay, n2);
+ } else if (strcmp(iks_name(n2), "text:unordered-list") == 0) {
+ text_list(ctx, lay, n2);
+ } else if (strcmp(iks_name(n2), "text:list") == 0) {
+ text_list(ctx, lay, n2);
+ }
+ }
+ }
+}
+
+void
+r_text(ImpRenderCtx *ctx, void *drw_data, iks *node)
+{
+ struct Layout lay;
+ iks *n;
+
+ memset(&lay, 0, sizeof(struct Layout));
+ memset(&lay.spaces, ' ', 128);
+ lay.s = iks_stack_new(sizeof(struct Span) * 16, 0);
+ lay.x = r_get_x(ctx, node, "svg:x");
+ lay.y = r_get_y(ctx, node, "svg:y");
+ lay.w = r_get_y(ctx, node, "svg:width");
+ lay.h = r_get_y(ctx, node, "svg:height");
+
+ for (n = iks_first_tag(node); n; n = iks_next_tag(n)) {
+ if (strcmp(iks_name(n), "text:p") == 0) {
+ text_p(ctx, &lay, n);
+ } else if (strcmp(iks_name(n), "text:ordered-list") == 0) {
+ text_list(ctx, &lay, n);
+ } else if (strcmp(iks_name(n), "text:unordered-list") == 0) {
+ text_list(ctx, &lay, n);
+ } else if (strcmp(iks_name(n), "text:list") == 0) {
+ text_list(ctx, &lay, n);
+ }
+ }
+
+ calc_sizes(ctx, drw_data, &lay);
+ calc_pos(ctx, &lay);
+ _imp_draw_layout(ctx, drw_data, &lay);
+
+ iks_stack_delete(lay.s);
+}
+/*
+static void
+text_span (render_ctx *ctx, text_ctx *tc, struct layout_s *lout, iks *node, char *text, int len)
+{
+ if (tc->bullet_flag && tc->bullet_sz) size = tc->bullet_sz; else size = r_get_font_size (ctx, tc, node);
+}
+
+static int
+is_animated (render_ctx *ctx, text_ctx *tc, iks *node)
+{
+ if (!ctx->step_mode) return 0;
+ if (!tc->id) return 0;
+ while (strcmp (iks_name (node), "draw:page") != 0
+ && strcmp (iks_name (node), "style:master-page") != 0)
+ node = iks_parent (node);
+ node = iks_find (node, "presentation:animations");
+ if (!node) return 0;
+ if (iks_find_with_attrib (node, "presentation:show-text", "draw:shape-id", tc->id)) return 1;
+ return 0;
+}
+
+static void
+text_p (render_ctx *ctx, text_ctx *tc, iks *node)
+{
+ if (is_animated (ctx, tc, node) && ctx->step_cnt >= ctx->step) lout->flag = 0;
+ ctx->step_cnt++;
+
+ attr = r_get_style (ctx, node, "text:enable-numbering");
+ if (attr && strcmp (attr, "true") == 0) {
+ if (iks_child (node) && tc->bullet) {
+ tc->bullet_flag = 1;
+ text_span (ctx, tc, lout, node, tc->bullet, strlen (tc->bullet));
+ text_span (ctx, tc, lout, node, " ", 1);
+ tc->bullet_flag = 0;
+ }
+ }
+
+ if (!lout->text) {
+lout->h = 0;
+attr = r_get_style (ctx, node, "fo:line-height");
+if (attr) {
+ int ratio = atoi (attr);
+ lout->lh = ratio;
+} else {
+ lout->lh = 100;
+}
+tc->layouts = g_list_append (tc->layouts, lout);
+// g_object_unref (lout->play);
+// iks_stack_delete (s);
+ return;
+ }
+
+ attr = r_get_style (ctx, node, "fo:text-align");
+ if (attr) {
+ if (strcmp (attr, "center") == 0)
+ pango_layout_set_alignment (lout->play, PANGO_ALIGN_CENTER);
+ else if (strcmp (attr, "end") == 0)
+ pango_layout_set_alignment (lout->play, PANGO_ALIGN_RIGHT);
+ }
+ pango_layout_set_width (lout->play, tc->w * PANGO_SCALE);
+ pango_layout_set_markup (lout->play, lout->text, lout->text_len);
+ pango_layout_get_pixel_size (lout->play, &lout->w, &lout->h);
+ attr = r_get_style (ctx, node, "fo:line-height");
+ if (attr) {
+ int ratio = atoi (attr);
+ lout->lh = ratio;
+ } else {
+ lout->lh = 100;
+ }
+ tc->layouts = g_list_append (tc->layouts, lout);
+}
+
+static void
+find_bullet (render_ctx *ctx, text_ctx *tc, iks *node)
+{
+ iks *x;
+ char *t;
+ x = r_get_bullet (ctx, node, "text:list-level-style-bullet");
+ x = iks_find (x, "text:list-level-style-bullet");
+ t = iks_find_attrib (x, "text:bullet-char");
+ if (t) tc->bullet = t; else tc->bullet = "*";
+ x = iks_find (x, "style:properties");
+ t = iks_find_attrib (x, "fo:font-size");
+ if (t) tc->bullet_sz = tc->last_sz * atoi (t) / 100;
+ else tc->bullet_sz = 0;
+}
+
+void
+r_text (render_ctx *ctx, iks *node)
+{
+ tc.id = iks_find_attrib (node, "draw:id");
+ ctx->step_cnt = 0;
+ for (n = iks_first_tag (node); n; n = iks_next_tag (n)) {
+ if (strcmp (iks_name (n), "text:p") == 0) {
+ text_p (ctx, &tc, n);
+ } else if (strcmp (iks_name (n), "text:ordered-list") == 0) {
+ text_list (ctx, &tc, n);
+ } else if (strcmp (iks_name (n), "text:unordered-list") == 0) {
+ find_bullet (ctx, &tc, n);
+ text_list (ctx, &tc, n);
+ tc.bullet = 0;
+ }
+ }
+
+*/
diff --git a/backend/impress/render.c b/backend/impress/render.c
new file mode 100644
index 00000000..67b80756
--- /dev/null
+++ b/backend/impress/render.c
@@ -0,0 +1,54 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#include <config.h>
+#include "common.h"
+#include "internal.h"
+
+ImpRenderCtx *
+imp_create_context(const ImpDrawer *drw)
+{
+ ImpRenderCtx *ctx;
+
+ ctx = calloc(1, sizeof(ImpRenderCtx));
+ if (!ctx) return NULL;
+ ctx->drw = drw;
+ return ctx;
+}
+
+void
+imp_context_set_page(ImpRenderCtx *ctx, ImpPage *page)
+{
+ ctx->page = page;
+ ctx->content = page->doc->content;
+ ctx->styles = page->doc->styles;
+}
+
+void
+imp_context_set_step(ImpRenderCtx *ctx, int step)
+{
+ ctx->step = step;
+}
+
+void
+imp_render(ImpRenderCtx *ctx, void *drw_data)
+{
+ // find drawing area size
+ ctx->drw->get_size(drw_data, &ctx->pix_w, &ctx->pix_h);
+ // find page size
+ ctx->page->doc->get_geometry(ctx);
+ // calculate ratio
+ ctx->fact_x = ctx->pix_w / ctx->cm_w;
+ ctx->fact_y = ctx->pix_h / ctx->cm_h;
+ // call renderer
+ ctx->page->doc->render_page(ctx, drw_data);
+}
+
+void
+imp_delete_context(ImpRenderCtx *ctx)
+{
+ free(ctx);
+}
diff --git a/backend/impress/zip.c b/backend/impress/zip.c
new file mode 100644
index 00000000..b1f25c8c
--- /dev/null
+++ b/backend/impress/zip.c
@@ -0,0 +1,349 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+#include <config.h>
+#include "common.h"
+#include "zip.h"
+#include <zlib.h>
+#define _(x) x
+
+typedef unsigned long ulong;
+
+enum {
+ ZIP_OK = 0,
+ ZIP_NOMEM,
+ ZIP_NOSIG,
+ ZIP_BADZIP,
+ ZIP_NOMULTI,
+ ZIP_EOPEN,
+ ZIP_EREAD,
+ ZIP_NOFILE
+};
+
+struct zipfile {
+ struct zipfile *next;
+ char *name;
+ ulong crc;
+ ulong zip_size;
+ ulong real_size;
+ ulong pos;
+};
+
+struct zip_struct {
+ FILE *f;
+ struct zipfile *files;
+ ulong cd_pos;
+ ulong cd_size;
+ ulong cd_offset;
+ ulong head_size;
+ ulong rem_size;
+ ulong nr_files;
+};
+
+char *
+zip_error (int err)
+{
+ char *ret;
+
+ switch (err) {
+ case ZIP_OK:
+ ret = _("No error");
+ break;
+ case ZIP_NOMEM:
+ ret = _("Not enough memory");
+ break;
+ case ZIP_NOSIG:
+ ret = _("Cannot find ZIP signature");
+ break;
+ case ZIP_BADZIP:
+ ret = _("Invalid ZIP file");
+ break;
+ case ZIP_NOMULTI:
+ ret = _("Multi file ZIPs are not supported");
+ break;
+ case ZIP_EOPEN:
+ ret = _("Cannot open the file");
+ break;
+ case ZIP_EREAD:
+ ret = _("Cannot read data from file");
+ break;
+ case ZIP_NOFILE:
+ ret = _("Cannot find file in the ZIP archive");
+ break;
+ default:
+ ret = _("Unknown error");
+ break;
+ }
+ return ret;
+}
+
+static int
+find_cd (zip *z)
+{
+ FILE *f;
+ char *buf;
+ ulong size, pos, i, flag;
+
+ f = z->f;
+ if (fseek (f, 0, SEEK_END) != 0) return 1;
+ size = ftell (f);
+ if (size < 0xffff) pos = 0; else pos = size - 0xffff;
+ buf = malloc (size - pos + 1);
+ if (!buf) return 1;
+ if (fseek (f, pos, SEEK_SET) != 0) {
+ free (buf);
+ return 1;
+ }
+ if (fread (buf, size - pos, 1, f) != 1) {
+ free (buf);
+ return 1;
+ }
+ flag = 0;
+ for (i = size - pos - 3; i > 0; i--) {
+ if (buf[i] == 0x50 && buf[i+1] == 0x4b && buf[i+2] == 0x05 && buf[i+3] == 0x06) {
+ z->cd_pos = i + pos;
+ flag = 1;
+ break;
+ }
+ }
+ free (buf);
+ if (flag != 1) return 1;
+ return 0;
+}
+
+static unsigned long
+get_long (unsigned char *buf)
+{
+ return buf[0] + (buf[1] << 8) + (buf[2] << 16) + (buf[3] << 24);
+}
+
+static unsigned long
+get_word (unsigned char *buf)
+{
+ return buf[0] + (buf[1] << 8);
+}
+
+static int
+list_files (zip *z)
+{
+ unsigned char buf[46];
+ struct zipfile *zfile;
+ ulong pat, fn_size;
+ int nr = 0;
+
+ pat = z->cd_offset;
+ while (nr < z->nr_files) {
+ fseek (z->f, pat + z->head_size, SEEK_SET);
+
+ if (fread (buf, 46, 1, z->f) != 1) return ZIP_EREAD;
+ if (get_long (buf) != 0x02014b50) return ZIP_BADZIP;
+
+ zfile = malloc (sizeof (struct zipfile));
+ if (!zfile) return ZIP_NOMEM;
+ memset (zfile, 0, sizeof (struct zipfile));
+
+ zfile->crc = get_long (buf + 16);
+ zfile->zip_size = get_long (buf + 20);
+ zfile->real_size = get_long (buf + 24);
+ fn_size = get_word (buf + 28);
+ zfile->pos = get_long (buf + 42);
+
+ zfile->name = malloc (fn_size + 1);
+ if (!zfile->name) {
+ free (zfile);
+ return ZIP_NOMEM;
+ }
+ fread (zfile->name, fn_size, 1, z->f);
+ zfile->name[fn_size] = '\0';
+
+ zfile->next = z->files;
+ z->files = zfile;
+
+ pat += 0x2e + fn_size + get_word (buf + 30) + get_word (buf + 32);
+ nr++;
+ }
+ return ZIP_OK;
+}
+
+zip *
+zip_open (const char *fname, int *err)
+{
+ unsigned char buf[22];
+ zip *z;
+ FILE *f;
+
+ f = fopen (fname, "rb");
+ if (NULL == f) {
+ *err = ZIP_EOPEN;
+ return NULL;
+ }
+
+ z = malloc (sizeof (zip));
+ memset (z, 0, sizeof (zip));
+ z->f = f;
+
+ if (find_cd (z)) {
+ zip_close (z);
+ *err = ZIP_NOSIG;
+ return NULL;
+ }
+
+ fseek (f, z->cd_pos, SEEK_SET);
+ if (fread (buf, 22, 1, f) != 1) {
+ zip_close (z);
+ *err = ZIP_EREAD;
+ return NULL;
+ }
+ z->nr_files = get_word (buf + 10);
+ if (get_word (buf + 8) != z->nr_files) {
+ zip_close (z);
+ *err = ZIP_NOMULTI;
+ return NULL;
+ }
+ z->cd_size = get_long (buf + 12);
+ z->cd_offset = get_long (buf + 16);
+ z->rem_size = get_word (buf + 20);
+ z->head_size = z->cd_pos - (z->cd_offset + z->cd_size);
+
+ *err = list_files (z);
+ if (*err != ZIP_OK) {
+ zip_close (z);
+ return NULL;
+ }
+
+ *err = ZIP_OK;
+ return z;
+}
+
+void
+zip_close (zip *z)
+{
+ struct zipfile *zfile, *tmp;
+
+ zfile = z->files;
+ while (zfile) {
+ tmp = zfile->next;
+ if (zfile->name) free (zfile->name);
+ free (zfile);
+ zfile = tmp;
+ }
+ z->files = NULL;
+ if (z->f) fclose (z->f);
+ z->f = NULL;
+}
+
+static struct zipfile *
+find_file (zip *z, const char *name)
+{
+ struct zipfile *zfile;
+
+ zfile = z->files;
+ while (zfile) {
+ if (strcmp (zfile->name, name) == 0) return zfile;
+ zfile = zfile->next;
+ }
+ return NULL;
+}
+
+static int
+seek_file (zip *z, struct zipfile *zfile)
+{
+ unsigned char buf[30];
+
+ fseek (z->f, zfile->pos + z->head_size, SEEK_SET);
+ if (fread (buf, 30, 1, z->f) != 1) return ZIP_EREAD;
+ if (get_long (buf) != 0x04034b50) return ZIP_BADZIP;
+ fseek (z->f, get_word (buf + 26) + get_word (buf + 28), SEEK_CUR);
+ return ZIP_OK;
+}
+
+iks *
+zip_load_xml (zip *z, const char *name, int *err)
+{
+ iksparser *prs;
+ char *real_buf;
+ iks *x;
+ struct zipfile *zfile;
+
+ *err = ZIP_OK;
+
+ zfile = find_file (z, name);
+ if (!zfile) {
+ *err = ZIP_NOFILE;
+ return NULL;
+ }
+
+ seek_file (z, zfile);
+
+ real_buf = malloc (zfile->real_size + 1);
+ if (zfile->zip_size < zfile->real_size) {
+ char *zip_buf;
+ z_stream zs;
+ zs.zalloc = NULL;
+ zs.zfree = NULL;
+ zs.opaque = NULL;
+ zip_buf = malloc (zfile->zip_size);
+ fread (zip_buf, zfile->zip_size, 1, z->f);
+ zs.next_in = zip_buf;
+ zs.avail_in = zfile->zip_size;
+ zs.next_out = real_buf;
+ zs.avail_out = zfile->real_size;
+ inflateInit2 (&zs, -MAX_WBITS);
+ inflate (&zs, Z_FINISH);
+ inflateEnd (&zs);
+ free (zip_buf);
+ } else {
+ fread (real_buf, zfile->real_size, 1, z->f);
+ }
+
+ real_buf[zfile->real_size] = '\0';
+ prs = iks_dom_new (&x);
+ iks_parse (prs, real_buf, zfile->real_size, 1);
+ iks_parser_delete (prs);
+ free (real_buf);
+ return x;
+}
+
+unsigned long zip_get_size (zip *z, const char *name)
+{
+ struct zipfile *zf;
+
+ zf = find_file (z, name);
+ if (!zf) return 0;
+ return zf->real_size;
+}
+
+int zip_load (zip *z, const char *name, char *buf)
+{
+ struct zipfile *zfile;
+
+ zfile = find_file (z, name);
+ if (!zfile) return ZIP_NOFILE;
+
+ seek_file (z, zfile);
+
+ if (zfile->zip_size < zfile->real_size) {
+ char *zip_buf;
+ z_stream zs;
+ zs.zalloc = NULL;
+ zs.zfree = NULL;
+ zs.opaque = NULL;
+ zip_buf = malloc (zfile->zip_size);
+ fread (zip_buf, zfile->zip_size, 1, z->f);
+ zs.next_in = zip_buf;
+ zs.avail_in = zfile->zip_size;
+ zs.next_out = buf;
+ zs.avail_out = zfile->real_size;
+ inflateInit2 (&zs, -MAX_WBITS);
+ inflate (&zs, Z_FINISH);
+ inflateEnd (&zs);
+ free (zip_buf);
+ } else {
+ fread (buf, zfile->real_size, 1, z->f);
+ }
+
+ return ZIP_OK;
+}
diff --git a/backend/impress/zip.h b/backend/impress/zip.h
new file mode 100644
index 00000000..23ff3631
--- /dev/null
+++ b/backend/impress/zip.h
@@ -0,0 +1,18 @@
+/* imposter (OO.org Impress viewer)
+** Copyright (C) 2003-2005 Gurer Ozen
+** This code is free software; you can redistribute it and/or
+** modify it under the terms of GNU General Public License.
+*/
+
+struct zip_struct;
+typedef struct zip_struct zip;
+
+char *zip_error (int err);
+
+zip *zip_open (const char *fname, int *err);
+void zip_close (zip *z);
+
+iks *zip_load_xml (zip *z, const char *name, int *err);
+
+unsigned long zip_get_size (zip *z, const char *name);
+int zip_load (zip *z, const char *name, char *buf);
diff --git a/backend/pdf/Makefile.am b/backend/pdf/Makefile.am
new file mode 100644
index 00000000..725a512c
--- /dev/null
+++ b/backend/pdf/Makefile.am
@@ -0,0 +1,34 @@
+INCLUDES = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libdocument \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DEVINCE_COMPILATION \
+ $(BACKEND_CFLAGS) \
+ $(POPPLER_CFLAGS) \
+ $(WARN_CXXFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+backend_LTLIBRARIES = libpdfdocument.la
+
+libpdfdocument_la_SOURCES = \
+ ev-poppler.cc \
+ ev-poppler.h
+
+libpdfdocument_la_LDFLAGS = $(BACKEND_LIBTOOL_FLAGS)
+libpdfdocument_la_LIBADD = \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(BACKEND_LIBS) \
+ $(POPPLER_LIBS) \
+ $(CAIRO_PDF_LIBS) \
+ $(CAIRO_PS_LIBS)
+
+backend_in_files = pdfdocument.evince-backend.in
+backend_DATA = $(backend_in_files:.evince-backend.in=.evince-backend)
+
+EXTRA_DIST = $(backend_in_files)
+
+CLEANFILES = $(backend_DATA)
+
+@EV_INTLTOOL_EVINCE_BACKEND_RULE@
+
+-include $(top_srcdir)/git.mk
diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc
new file mode 100644
index 00000000..e2abb55d
--- /dev/null
+++ b/backend/pdf/ev-poppler.cc
@@ -0,0 +1,3290 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009, Juanjo Marín <[email protected]>
+ * Copyright (C) 2004, Red Hat, Inc.
+ *
+ * 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, 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 "config.h"
+
+#include <math.h>
+#include <string.h>
+#include <gtk/gtk.h>
+#include <poppler.h>
+#include <poppler-document.h>
+#include <poppler-page.h>
+#ifdef HAVE_CAIRO_PDF
+#include <cairo-pdf.h>
+#endif
+#ifdef HAVE_CAIRO_PS
+#include <cairo-ps.h>
+#endif
+#include <glib/gi18n-lib.h>
+
+#include "ev-poppler.h"
+#include "ev-file-exporter.h"
+#include "ev-document-find.h"
+#include "ev-document-misc.h"
+#include "ev-document-links.h"
+#include "ev-document-images.h"
+#include "ev-document-fonts.h"
+#include "ev-document-security.h"
+#include "ev-document-thumbnails.h"
+#include "ev-document-transition.h"
+#include "ev-document-forms.h"
+#include "ev-document-layers.h"
+#include "ev-document-print.h"
+#include "ev-document-annotations.h"
+#include "ev-document-attachments.h"
+#include "ev-document-text.h"
+#include "ev-selection.h"
+#include "ev-transition-effect.h"
+#include "ev-attachment.h"
+#include "ev-image.h"
+
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
+
+#if (defined (HAVE_CAIRO_PDF) || defined (HAVE_CAIRO_PS))
+#define HAVE_CAIRO_PRINT
+#endif
+
+/* fields from the XMP Rights Management Schema, XMP Specification Sept 2005, pag. 45 */
+#define LICENSE_MARKED "/x:xmpmeta/rdf:RDF/rdf:Description/xmpRights:Marked"
+#define LICENSE_TEXT "/x:xmpmeta/rdf:RDF/rdf:Description/dc:rights/rdf:Alt/rdf:li[lang('%s')]"
+#define LICENSE_WEB_STATEMENT "/x:xmpmeta/rdf:RDF/rdf:Description/xmpRights:WebStatement"
+/* license field from Creative Commons schema, http://creativecommons.org/ns */
+#define LICENSE_URI "/x:xmpmeta/rdf:RDF/rdf:Description/cc:license/@rdf:resource"
+
+typedef struct {
+ EvFileExporterFormat format;
+
+ /* Pages per sheet */
+ gint pages_per_sheet;
+ gint pages_printed;
+ gint pages_x;
+ gint pages_y;
+ gdouble paper_width;
+ gdouble paper_height;
+
+#ifdef HAVE_CAIRO_PRINT
+ cairo_t *cr;
+#else
+ PopplerPSFile *ps_file;
+#endif
+} PdfPrintContext;
+
+struct _PdfDocumentClass
+{
+ EvDocumentClass parent_class;
+};
+
+struct _PdfDocument
+{
+ EvDocument parent_instance;
+
+ PopplerDocument *document;
+ gchar *password;
+ gboolean forms_modified;
+ gboolean annots_modified;
+
+ PopplerFontInfo *font_info;
+ PopplerFontsIter *fonts_iter;
+ int fonts_scanned_pages;
+
+ PdfPrintContext *print_ctx;
+
+ GList *layers;
+ GHashTable *annots;
+};
+
+static void pdf_document_security_iface_init (EvDocumentSecurityInterface *iface);
+static void pdf_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
+static void pdf_document_document_links_iface_init (EvDocumentLinksInterface *iface);
+static void pdf_document_document_images_iface_init (EvDocumentImagesInterface *iface);
+static void pdf_document_document_forms_iface_init (EvDocumentFormsInterface *iface);
+static void pdf_document_document_fonts_iface_init (EvDocumentFontsInterface *iface);
+static void pdf_document_document_layers_iface_init (EvDocumentLayersInterface *iface);
+static void pdf_document_document_print_iface_init (EvDocumentPrintInterface *iface);
+static void pdf_document_document_annotations_iface_init (EvDocumentAnnotationsInterface *iface);
+static void pdf_document_document_attachments_iface_init (EvDocumentAttachmentsInterface *iface);
+static void pdf_document_find_iface_init (EvDocumentFindInterface *iface);
+static void pdf_document_file_exporter_iface_init (EvFileExporterInterface *iface);
+static void pdf_selection_iface_init (EvSelectionInterface *iface);
+static void pdf_document_page_transition_iface_init (EvDocumentTransitionInterface *iface);
+static void pdf_document_text_iface_init (EvDocumentTextInterface *iface);
+static void pdf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnails,
+ EvRenderContext *rc,
+ gint *width,
+ gint *height);
+static int pdf_document_get_n_pages (EvDocument *document);
+
+static EvLinkDest *ev_link_dest_from_dest (PdfDocument *pdf_document,
+ PopplerDest *dest);
+static EvLink *ev_link_from_action (PdfDocument *pdf_document,
+ PopplerAction *action);
+static void pdf_print_context_free (PdfPrintContext *ctx);
+static gboolean attachment_save_to_buffer (PopplerAttachment *attachment,
+ gchar **buffer,
+ gsize *buffer_size,
+ GError **error);
+
+EV_BACKEND_REGISTER_WITH_CODE (PdfDocument, pdf_document,
+ {
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_SECURITY,
+ pdf_document_security_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
+ pdf_document_document_thumbnails_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_LINKS,
+ pdf_document_document_links_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_IMAGES,
+ pdf_document_document_images_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_FORMS,
+ pdf_document_document_forms_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_FONTS,
+ pdf_document_document_fonts_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_LAYERS,
+ pdf_document_document_layers_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_PRINT,
+ pdf_document_document_print_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_ANNOTATIONS,
+ pdf_document_document_annotations_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_ATTACHMENTS,
+ pdf_document_document_attachments_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_FIND,
+ pdf_document_find_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER,
+ pdf_document_file_exporter_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_SELECTION,
+ pdf_selection_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_TRANSITION,
+ pdf_document_page_transition_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_TEXT,
+ pdf_document_text_iface_init);
+ });
+
+static void
+pdf_document_dispose (GObject *object)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT(object);
+
+ if (pdf_document->print_ctx) {
+ pdf_print_context_free (pdf_document->print_ctx);
+ pdf_document->print_ctx = NULL;
+ }
+
+ if (pdf_document->annots) {
+ g_hash_table_destroy (pdf_document->annots);
+ pdf_document->annots = NULL;
+ }
+
+ if (pdf_document->document) {
+ g_object_unref (pdf_document->document);
+ }
+
+ if (pdf_document->font_info) {
+ poppler_font_info_free (pdf_document->font_info);
+ }
+
+ if (pdf_document->fonts_iter) {
+ poppler_fonts_iter_free (pdf_document->fonts_iter);
+ }
+
+ if (pdf_document->layers) {
+ g_list_foreach (pdf_document->layers, (GFunc)g_object_unref, NULL);
+ g_list_free (pdf_document->layers);
+ }
+
+ G_OBJECT_CLASS (pdf_document_parent_class)->dispose (object);
+}
+
+static void
+pdf_document_init (PdfDocument *pdf_document)
+{
+ pdf_document->password = NULL;
+}
+
+static void
+convert_error (GError *poppler_error,
+ GError **error)
+{
+ if (poppler_error == NULL)
+ return;
+
+ if (poppler_error->domain == POPPLER_ERROR) {
+ /* convert poppler errors into EvDocument errors */
+ gint code = EV_DOCUMENT_ERROR_INVALID;
+ if (poppler_error->code == POPPLER_ERROR_INVALID)
+ code = EV_DOCUMENT_ERROR_INVALID;
+ else if (poppler_error->code == POPPLER_ERROR_ENCRYPTED)
+ code = EV_DOCUMENT_ERROR_ENCRYPTED;
+
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ code,
+ poppler_error->message);
+
+ g_error_free (poppler_error);
+ } else {
+ g_propagate_error (error, poppler_error);
+ }
+}
+
+
+/* EvDocument */
+static gboolean
+pdf_document_save (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+ gboolean retval;
+ GError *poppler_error = NULL;
+
+ if (pdf_document->forms_modified || pdf_document->annots_modified) {
+ retval = poppler_document_save (pdf_document->document,
+ uri, &poppler_error);
+ if (retval) {
+ pdf_document->forms_modified = FALSE;
+ pdf_document->annots_modified = FALSE;
+ }
+ } else {
+ retval = poppler_document_save_a_copy (pdf_document->document,
+ uri, &poppler_error);
+ }
+
+ if (! retval)
+ convert_error (poppler_error, error);
+
+ return retval;
+}
+
+static gboolean
+pdf_document_load (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ GError *poppler_error = NULL;
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+
+ pdf_document->document =
+ poppler_document_new_from_file (uri, pdf_document->password, &poppler_error);
+
+ if (pdf_document->document == NULL) {
+ convert_error (poppler_error, error);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static int
+pdf_document_get_n_pages (EvDocument *document)
+{
+ return poppler_document_get_n_pages (PDF_DOCUMENT (document)->document);
+}
+
+static EvPage *
+pdf_document_get_page (EvDocument *document,
+ gint index)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+ PopplerPage *poppler_page;
+ EvPage *page;
+
+ poppler_page = poppler_document_get_page (pdf_document->document, index);
+ page = ev_page_new (index);
+ page->backend_page = (EvBackendPage)g_object_ref (poppler_page);
+ page->backend_destroy_func = (EvBackendPageDestroyFunc)g_object_unref;
+ g_object_unref (poppler_page);
+
+ return page;
+}
+
+static void
+pdf_document_get_page_size (EvDocument *document,
+ EvPage *page,
+ double *width,
+ double *height)
+{
+ g_return_if_fail (POPPLER_IS_PAGE (page->backend_page));
+
+ poppler_page_get_size (POPPLER_PAGE (page->backend_page), width, height);
+}
+
+static char *
+pdf_document_get_page_label (EvDocument *document,
+ EvPage *page)
+{
+ char *label = NULL;
+
+ g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL);
+
+ g_object_get (G_OBJECT (page->backend_page),
+ "label", &label,
+ NULL);
+ return label;
+}
+
+static cairo_surface_t *
+pdf_page_render (PopplerPage *page,
+ gint width,
+ gint height,
+ EvRenderContext *rc)
+{
+ cairo_surface_t *surface;
+ cairo_t *cr;
+
+ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+ width, height);
+ cr = cairo_create (surface);
+
+ switch (rc->rotation) {
+ case 90:
+ cairo_translate (cr, width, 0);
+ break;
+ case 180:
+ cairo_translate (cr, width, height);
+ break;
+ case 270:
+ cairo_translate (cr, 0, height);
+ break;
+ default:
+ cairo_translate (cr, 0, 0);
+ }
+ cairo_scale (cr, rc->scale, rc->scale);
+ cairo_rotate (cr, rc->rotation * G_PI / 180.0);
+ poppler_page_render (page, cr);
+
+ cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
+ cairo_set_source_rgb (cr, 1., 1., 1.);
+ cairo_paint (cr);
+
+ cairo_destroy (cr);
+
+ return surface;
+}
+
+static cairo_surface_t *
+pdf_document_render (EvDocument *document,
+ EvRenderContext *rc)
+{
+ PdfDocument *pdf_document;
+ PopplerPage *poppler_page;
+ double width_points, height_points;
+ gint width, height;
+
+ poppler_page = POPPLER_PAGE (rc->page->backend_page);
+
+ poppler_page_get_size (poppler_page,
+ &width_points, &height_points);
+
+ if (rc->rotation == 90 || rc->rotation == 270) {
+ width = (int) ((height_points * rc->scale) + 0.5);
+ height = (int) ((width_points * rc->scale) + 0.5);
+ } else {
+ width = (int) ((width_points * rc->scale) + 0.5);
+ height = (int) ((height_points * rc->scale) + 0.5);
+ }
+
+ return pdf_page_render (poppler_page,
+ width, height, rc);
+}
+
+/* reference:
+http://www.pdfa.org/lib/exe/fetch.php?id=pdfa%3Aen%3Atechdoc&cache=cache&media=pdfa:techdoc:tn0001_pdfa-1_and_namespaces_2008-03-18.pdf */
+static char *
+pdf_document_get_format_from_metadata (xmlDocPtr doc,
+ xmlXPathContextPtr xpathCtx)
+{
+ xmlXPathObjectPtr xpathObj;
+ xmlChar *part = NULL;
+ xmlChar *conf = NULL;
+ char *result = NULL;
+ int i;
+
+ /* add pdf/a namespaces */
+ xmlXPathRegisterNs (xpathCtx, BAD_CAST "x", BAD_CAST "adobe:ns:meta/");
+ xmlXPathRegisterNs (xpathCtx, BAD_CAST "rdf", BAD_CAST "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
+ xmlXPathRegisterNs (xpathCtx, BAD_CAST "pdfaid", BAD_CAST "http://www.aiim.org/pdfa/ns/id/");
+
+ /* reads pdf/a part */
+ /* first syntax: child node */
+ xpathObj = xmlXPathEvalExpression (BAD_CAST "/x:xmpmeta/rdf:RDF/rdf:Description/pdfaid:part", xpathCtx);
+ if (xpathObj != NULL) {
+ if (xpathObj->nodesetval != NULL && xpathObj->nodesetval->nodeNr != 0)
+ part = xmlNodeGetContent (xpathObj->nodesetval->nodeTab[0]);
+
+ xmlXPathFreeObject (xpathObj);
+ }
+ if (part == NULL) {
+ /* second syntax: attribute */
+ xpathObj = xmlXPathEvalExpression (BAD_CAST "/x:xmpmeta/rdf:RDF/rdf:Description/@pdfaid:part", xpathCtx);
+ if (xpathObj != NULL) {
+ if (xpathObj->nodesetval != NULL && xpathObj->nodesetval->nodeNr != 0)
+ part = xmlNodeGetContent (xpathObj->nodesetval->nodeTab[0]);
+
+ xmlXPathFreeObject (xpathObj);
+ }
+ }
+
+ /* reads pdf/a conformance */
+ /* first syntax: child node */
+ xpathObj = xmlXPathEvalExpression (BAD_CAST "/x:xmpmeta/rdf:RDF/rdf:Description/pdfaid:conformance", xpathCtx);
+ if (xpathObj != NULL) {
+ if (xpathObj->nodesetval != NULL && xpathObj->nodesetval->nodeNr != 0)
+ conf = xmlNodeGetContent (xpathObj->nodesetval->nodeTab[0]);
+
+ xmlXPathFreeObject (xpathObj);
+ }
+ if (conf == NULL) {
+ /* second syntax: attribute */
+ xpathObj = xmlXPathEvalExpression (BAD_CAST "/x:xmpmeta/rdf:RDF/rdf:Description/@pdfaid:conformance", xpathCtx);
+ if (xpathObj != NULL) {
+ if (xpathObj->nodesetval != NULL && xpathObj->nodesetval->nodeNr != 0)
+ conf = xmlNodeGetContent (xpathObj->nodesetval->nodeTab[0]);
+
+ xmlXPathFreeObject (xpathObj);
+ }
+ }
+
+ if (part != NULL && conf != NULL) {
+ /* makes conf lowercase */
+ for (i = 0; conf[i]; i++)
+ conf[i] = g_ascii_tolower (conf[i]);
+
+ /* return buffer */
+ result = g_strdup_printf ("PDF/A - %s%s", part, conf);
+ }
+
+ /* Cleanup */
+ xmlFree (part);
+ xmlFree (conf);
+
+ return result;
+}
+
+static EvDocumentLicense *
+pdf_document_get_license_from_metadata (xmlDocPtr doc,
+ xmlXPathContextPtr xpathCtx)
+{
+ xmlXPathObjectPtr xpathObj;
+ xmlChar *marked = NULL;
+ const char *language_string;
+ char *aux;
+ gchar **tags;
+ gchar *tag, *tag_aux;
+ int i, j;
+ EvDocumentLicense *license;
+
+ /* register namespaces */
+ xmlXPathRegisterNs (xpathCtx, BAD_CAST "x", BAD_CAST "adobe:ns:meta/");
+ xmlXPathRegisterNs (xpathCtx, BAD_CAST "rdf", BAD_CAST "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
+ xmlXPathRegisterNs (xpathCtx, BAD_CAST "dc", BAD_CAST "http://purl.org/dc/elements/1.1/");
+ /* XMP Rights Management Schema */
+ xmlXPathRegisterNs (xpathCtx, BAD_CAST "xmpRights", BAD_CAST "http://ns.adobe.com/xap/1.0/rights/");
+ /* Creative Commons Schema */
+ xmlXPathRegisterNs (xpathCtx, BAD_CAST "cc", BAD_CAST "http://creativecommons.org/ns#");
+
+ /* checking if the document has been marked as defined on the XMP Rights
+ * Management Schema */
+ xpathObj = xmlXPathEvalExpression (BAD_CAST LICENSE_MARKED, xpathCtx);
+ if (xpathObj != NULL) {
+ if (xpathObj->nodesetval != NULL &&
+ xpathObj->nodesetval->nodeNr != 0)
+ marked = xmlNodeGetContent (xpathObj->nodesetval->nodeTab[0]);
+ xmlXPathFreeObject (xpathObj);
+ }
+
+ /* a) Not marked => No XMP Rights information */
+ if (!marked) {
+ xmlFree (marked);
+ return NULL;
+ }
+
+ license = ev_document_license_new ();
+
+ /* b) Marked False => Public Domain, no copyrighted material and no
+ * license needed */
+ if (g_strrstr ((char *) marked, "False") != NULL) {
+ license->text = g_strdup (_("This work is in the Public Domain"));
+ /* c) Marked True => Copyrighted material */
+ } else {
+ /* Checking usage terms as defined by the XMP Rights Management
+ * Schema. This field is recomended to be checked by Creative
+ * Commons */
+ /* 1) checking for a suitable localized string */
+ language_string = pango_language_to_string (gtk_get_default_language ());
+ tags = g_strsplit (language_string, "-", -1);
+ i = g_strv_length (tags);
+ while (i-- && !license->text) {
+ tag = g_strdup (tags[0]);
+ for (j = 1; j <= i; j++) {
+ tag_aux = g_strdup_printf ("%s-%s", tag, tags[j]);
+ g_free (tag);
+ tag = tag_aux;
+ }
+ aux = g_strdup_printf (LICENSE_TEXT, tag);
+ xpathObj = xmlXPathEvalExpression (BAD_CAST aux, xpathCtx);
+ if (xpathObj != NULL) {
+ if (xpathObj->nodesetval != NULL &&
+ xpathObj->nodesetval->nodeNr != 0)
+ license->text = (gchar *)xmlNodeGetContent (xpathObj->nodesetval->nodeTab[0]);
+ xmlXPathFreeObject (xpathObj);
+ }
+ g_free (tag);
+ g_free (aux);
+ }
+ g_strfreev(tags);
+
+ /* 2) if not, use the default string */
+ if (!license->text) {
+ aux = g_strdup_printf (LICENSE_TEXT, "x-default");
+ xpathObj = xmlXPathEvalExpression (BAD_CAST aux, xpathCtx);
+ if (xpathObj != NULL) {
+ if (xpathObj->nodesetval != NULL &&
+ xpathObj->nodesetval->nodeNr != 0)
+ license->text = (gchar *)xmlNodeGetContent (xpathObj->nodesetval->nodeTab[0]);
+ xmlXPathFreeObject (xpathObj);
+ }
+ g_free (aux);
+ }
+
+ /* Checking the license URI as defined by the Creative Commons
+ * Schema. This field is recomended to be checked by Creative
+ * Commons */
+ xpathObj = xmlXPathEvalExpression (BAD_CAST LICENSE_URI, xpathCtx);
+ if (xpathObj != NULL) {
+ if (xpathObj->nodesetval != NULL &&
+ xpathObj->nodesetval->nodeNr != 0)
+ license->uri = (gchar *)xmlNodeGetContent (xpathObj->nodesetval->nodeTab[0]);
+ xmlXPathFreeObject (xpathObj);
+ }
+
+ /* Checking the web statement as defined by the XMP Rights
+ * Management Schema. Checking it out is a sort of above-and-beyond
+ * the basic recommendations by Creative Commons. It can be
+ * considered as a "reinforcement" approach to add certainty. */
+ xpathObj = xmlXPathEvalExpression (BAD_CAST LICENSE_WEB_STATEMENT, xpathCtx);
+ if (xpathObj != NULL) {
+ if (xpathObj->nodesetval != NULL &&
+ xpathObj->nodesetval->nodeNr != 0)
+ license->web_statement = (gchar *)xmlNodeGetContent (xpathObj->nodesetval->nodeTab[0]);
+ xmlXPathFreeObject (xpathObj);
+ }
+ }
+ xmlFree (marked);
+
+ if (!license->text && !license->uri && !license->web_statement) {
+ ev_document_license_free (license);
+ return NULL;
+ }
+
+ return license;
+}
+
+static void
+pdf_document_parse_metadata (const gchar *metadata,
+ EvDocumentInfo *info)
+{
+ xmlDocPtr doc;
+ xmlXPathContextPtr xpathCtx;
+ gchar *fmt;
+
+ doc = xmlParseMemory (metadata, strlen (metadata));
+ if (doc == NULL)
+ return; /* invalid xml metadata */
+
+ xpathCtx = xmlXPathNewContext (doc);
+ if (xpathCtx == NULL) {
+ xmlFreeDoc (doc);
+ return; /* invalid xpath context */
+ }
+
+ fmt = pdf_document_get_format_from_metadata (doc, xpathCtx);
+ if (fmt != NULL) {
+ g_free (info->format);
+ info->format = fmt;
+ }
+
+ info->license = pdf_document_get_license_from_metadata (doc, xpathCtx);
+
+ xmlXPathFreeContext (xpathCtx);
+ xmlFreeDoc (doc);
+}
+
+
+static EvDocumentInfo *
+pdf_document_get_info (EvDocument *document)
+{
+ EvDocumentInfo *info;
+ PopplerPageLayout layout;
+ PopplerPageMode mode;
+ PopplerViewerPreferences view_prefs;
+ PopplerPermissions permissions;
+ EvPage *page;
+ char *metadata;
+
+ info = g_new0 (EvDocumentInfo, 1);
+
+ info->fields_mask = EV_DOCUMENT_INFO_TITLE |
+ EV_DOCUMENT_INFO_FORMAT |
+ EV_DOCUMENT_INFO_AUTHOR |
+ EV_DOCUMENT_INFO_SUBJECT |
+ EV_DOCUMENT_INFO_KEYWORDS |
+ EV_DOCUMENT_INFO_LAYOUT |
+ EV_DOCUMENT_INFO_START_MODE |
+ EV_DOCUMENT_INFO_PERMISSIONS |
+ EV_DOCUMENT_INFO_UI_HINTS |
+ EV_DOCUMENT_INFO_CREATOR |
+ EV_DOCUMENT_INFO_PRODUCER |
+ EV_DOCUMENT_INFO_CREATION_DATE |
+ EV_DOCUMENT_INFO_MOD_DATE |
+ EV_DOCUMENT_INFO_LINEARIZED |
+ EV_DOCUMENT_INFO_N_PAGES |
+ EV_DOCUMENT_INFO_SECURITY |
+ EV_DOCUMENT_INFO_PAPER_SIZE |
+ EV_DOCUMENT_INFO_LICENSE;
+
+ g_object_get (PDF_DOCUMENT (document)->document,
+ "title", &(info->title),
+ "format", &(info->format),
+ "author", &(info->author),
+ "subject", &(info->subject),
+ "keywords", &(info->keywords),
+ "page-mode", &mode,
+ "page-layout", &layout,
+ "viewer-preferences", &view_prefs,
+ "permissions", &permissions,
+ "creator", &(info->creator),
+ "producer", &(info->producer),
+ "creation-date", &(info->creation_date),
+ "mod-date", &(info->modified_date),
+ "linearized", &(info->linearized),
+ "metadata", &metadata,
+ NULL);
+
+ if (metadata != NULL) {
+ pdf_document_parse_metadata (metadata, info);
+ g_free (metadata);
+ }
+
+ info->n_pages = ev_document_get_n_pages (document);
+
+ if (info->n_pages > 0) {
+ ev_document_get_page_size (document, 0,
+ &(info->paper_width),
+ &(info->paper_height));
+ // Convert to mm.
+ info->paper_width = info->paper_width / 72.0f * 25.4f;
+ info->paper_height = info->paper_height / 72.0f * 25.4f;
+ }
+
+ switch (layout) {
+ case POPPLER_PAGE_LAYOUT_SINGLE_PAGE:
+ info->layout = EV_DOCUMENT_LAYOUT_SINGLE_PAGE;
+ break;
+ case POPPLER_PAGE_LAYOUT_ONE_COLUMN:
+ info->layout = EV_DOCUMENT_LAYOUT_ONE_COLUMN;
+ break;
+ case POPPLER_PAGE_LAYOUT_TWO_COLUMN_LEFT:
+ info->layout = EV_DOCUMENT_LAYOUT_TWO_COLUMN_LEFT;
+ break;
+ case POPPLER_PAGE_LAYOUT_TWO_COLUMN_RIGHT:
+ info->layout = EV_DOCUMENT_LAYOUT_TWO_COLUMN_RIGHT;
+ case POPPLER_PAGE_LAYOUT_TWO_PAGE_LEFT:
+ info->layout = EV_DOCUMENT_LAYOUT_TWO_PAGE_LEFT;
+ break;
+ case POPPLER_PAGE_LAYOUT_TWO_PAGE_RIGHT:
+ info->layout = EV_DOCUMENT_LAYOUT_TWO_PAGE_RIGHT;
+ break;
+ default:
+ break;
+ }
+
+ switch (mode) {
+ case POPPLER_PAGE_MODE_NONE:
+ info->mode = EV_DOCUMENT_MODE_NONE;
+ break;
+ case POPPLER_PAGE_MODE_USE_THUMBS:
+ info->mode = EV_DOCUMENT_MODE_USE_THUMBS;
+ break;
+ case POPPLER_PAGE_MODE_USE_OC:
+ info->mode = EV_DOCUMENT_MODE_USE_OC;
+ break;
+ case POPPLER_PAGE_MODE_FULL_SCREEN:
+ info->mode = EV_DOCUMENT_MODE_FULL_SCREEN;
+ break;
+ case POPPLER_PAGE_MODE_USE_ATTACHMENTS:
+ info->mode = EV_DOCUMENT_MODE_USE_ATTACHMENTS;
+ default:
+ break;
+ }
+
+ info->ui_hints = 0;
+ if (view_prefs & POPPLER_VIEWER_PREFERENCES_HIDE_TOOLBAR) {
+ info->ui_hints |= EV_DOCUMENT_UI_HINT_HIDE_TOOLBAR;
+ }
+ if (view_prefs & POPPLER_VIEWER_PREFERENCES_HIDE_MENUBAR) {
+ info->ui_hints |= EV_DOCUMENT_UI_HINT_HIDE_MENUBAR;
+ }
+ if (view_prefs & POPPLER_VIEWER_PREFERENCES_HIDE_WINDOWUI) {
+ info->ui_hints |= EV_DOCUMENT_UI_HINT_HIDE_WINDOWUI;
+ }
+ if (view_prefs & POPPLER_VIEWER_PREFERENCES_FIT_WINDOW) {
+ info->ui_hints |= EV_DOCUMENT_UI_HINT_FIT_WINDOW;
+ }
+ if (view_prefs & POPPLER_VIEWER_PREFERENCES_CENTER_WINDOW) {
+ info->ui_hints |= EV_DOCUMENT_UI_HINT_CENTER_WINDOW;
+ }
+ if (view_prefs & POPPLER_VIEWER_PREFERENCES_DISPLAY_DOC_TITLE) {
+ info->ui_hints |= EV_DOCUMENT_UI_HINT_DISPLAY_DOC_TITLE;
+ }
+ if (view_prefs & POPPLER_VIEWER_PREFERENCES_DIRECTION_RTL) {
+ info->ui_hints |= EV_DOCUMENT_UI_HINT_DIRECTION_RTL;
+ }
+
+ info->permissions = 0;
+ if (permissions & POPPLER_PERMISSIONS_OK_TO_PRINT) {
+ info->permissions |= EV_DOCUMENT_PERMISSIONS_OK_TO_PRINT;
+ }
+ if (permissions & POPPLER_PERMISSIONS_OK_TO_MODIFY) {
+ info->permissions |= EV_DOCUMENT_PERMISSIONS_OK_TO_MODIFY;
+ }
+ if (permissions & POPPLER_PERMISSIONS_OK_TO_COPY) {
+ info->permissions |= EV_DOCUMENT_PERMISSIONS_OK_TO_COPY;
+ }
+ if (permissions & POPPLER_PERMISSIONS_OK_TO_ADD_NOTES) {
+ info->permissions |= EV_DOCUMENT_PERMISSIONS_OK_TO_ADD_NOTES;
+ }
+
+ if (ev_document_security_has_document_security (EV_DOCUMENT_SECURITY (document))) {
+ /* translators: this is the document security state */
+ info->security = g_strdup (_("Yes"));
+ } else {
+ /* translators: this is the document security state */
+ info->security = g_strdup (_("No"));
+ }
+
+ return info;
+}
+
+static gboolean
+pdf_document_get_backend_info (EvDocument *document, EvDocumentBackendInfo *info)
+{
+ PopplerBackend backend;
+
+ backend = poppler_get_backend ();
+ switch (backend) {
+ case POPPLER_BACKEND_CAIRO:
+ info->name = "poppler/cairo";
+ break;
+ case POPPLER_BACKEND_SPLASH:
+ info->name = "poppler/splash";
+ break;
+ default:
+ info->name = "poppler/unknown";
+ break;
+ }
+
+ info->version = poppler_get_version ();
+
+ return TRUE;
+}
+
+static gboolean
+pdf_document_support_synctex (EvDocument *document)
+{
+ return TRUE;
+}
+
+static void
+pdf_document_class_init (PdfDocumentClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+ EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass);
+
+ g_object_class->dispose = pdf_document_dispose;
+
+ ev_document_class->save = pdf_document_save;
+ ev_document_class->load = pdf_document_load;
+ ev_document_class->get_n_pages = pdf_document_get_n_pages;
+ ev_document_class->get_page = pdf_document_get_page;
+ ev_document_class->get_page_size = pdf_document_get_page_size;
+ ev_document_class->get_page_label = pdf_document_get_page_label;
+ ev_document_class->render = pdf_document_render;
+ ev_document_class->get_info = pdf_document_get_info;
+ ev_document_class->get_backend_info = pdf_document_get_backend_info;
+ ev_document_class->support_synctex = pdf_document_support_synctex;
+}
+
+/* EvDocumentSecurity */
+static gboolean
+pdf_document_has_document_security (EvDocumentSecurity *document_security)
+{
+ /* FIXME: do we really need to have this? */
+ return FALSE;
+}
+
+static void
+pdf_document_set_password (EvDocumentSecurity *document_security,
+ const char *password)
+{
+ PdfDocument *document = PDF_DOCUMENT (document_security);
+
+ if (document->password)
+ g_free (document->password);
+
+ document->password = g_strdup (password);
+}
+
+static void
+pdf_document_security_iface_init (EvDocumentSecurityInterface *iface)
+{
+ iface->has_document_security = pdf_document_has_document_security;
+ iface->set_password = pdf_document_set_password;
+}
+
+static gdouble
+pdf_document_fonts_get_progress (EvDocumentFonts *document_fonts)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document_fonts);
+ int n_pages;
+
+ n_pages = pdf_document_get_n_pages (EV_DOCUMENT (pdf_document));
+
+ return (double)pdf_document->fonts_scanned_pages / (double)n_pages;
+}
+
+static gboolean
+pdf_document_fonts_scan (EvDocumentFonts *document_fonts,
+ int n_pages)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document_fonts);
+ gboolean result;
+
+ g_return_val_if_fail (PDF_IS_DOCUMENT (document_fonts), FALSE);
+
+ if (pdf_document->font_info == NULL) {
+ pdf_document->font_info = poppler_font_info_new (pdf_document->document);
+ }
+
+ if (pdf_document->fonts_iter) {
+ poppler_fonts_iter_free (pdf_document->fonts_iter);
+ }
+
+ pdf_document->fonts_scanned_pages += n_pages;
+
+ result = poppler_font_info_scan (pdf_document->font_info, n_pages,
+ &pdf_document->fonts_iter);
+ if (!result) {
+ pdf_document->fonts_scanned_pages = 0;
+ poppler_font_info_free (pdf_document->font_info);
+ pdf_document->font_info = NULL;
+ }
+
+ return result;
+}
+
+static const char *
+font_type_to_string (PopplerFontType type)
+{
+ switch (type) {
+ case POPPLER_FONT_TYPE_TYPE1:
+ return _("Type 1");
+ case POPPLER_FONT_TYPE_TYPE1C:
+ return _("Type 1C");
+ case POPPLER_FONT_TYPE_TYPE3:
+ return _("Type 3");
+ case POPPLER_FONT_TYPE_TRUETYPE:
+ return _("TrueType");
+ case POPPLER_FONT_TYPE_CID_TYPE0:
+ return _("Type 1 (CID)");
+ case POPPLER_FONT_TYPE_CID_TYPE0C:
+ return _("Type 1C (CID)");
+ case POPPLER_FONT_TYPE_CID_TYPE2:
+ return _("TrueType (CID)");
+ default:
+ return _("Unknown font type");
+ }
+}
+
+static void
+pdf_document_fonts_fill_model (EvDocumentFonts *document_fonts,
+ GtkTreeModel *model)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document_fonts);
+ PopplerFontsIter *iter = pdf_document->fonts_iter;
+
+ g_return_if_fail (PDF_IS_DOCUMENT (document_fonts));
+
+ if (!iter)
+ return;
+
+ do {
+ GtkTreeIter list_iter;
+ const char *name;
+ const char *type;
+ const char *embedded;
+ char *details;
+
+ name = poppler_fonts_iter_get_name (iter);
+
+ if (name == NULL) {
+ name = _("No name");
+ }
+
+ type = font_type_to_string (
+ poppler_fonts_iter_get_font_type (iter));
+
+ if (poppler_fonts_iter_is_embedded (iter)) {
+ if (poppler_fonts_iter_is_subset (iter))
+ embedded = _("Embedded subset");
+ else
+ embedded = _("Embedded");
+ } else {
+ embedded = _("Not embedded");
+ }
+
+ details = g_markup_printf_escaped ("%s\n%s", type, embedded);
+
+ gtk_list_store_append (GTK_LIST_STORE (model), &list_iter);
+ gtk_list_store_set (GTK_LIST_STORE (model), &list_iter,
+ EV_DOCUMENT_FONTS_COLUMN_NAME, name,
+ EV_DOCUMENT_FONTS_COLUMN_DETAILS, details,
+ -1);
+
+ g_free (details);
+ } while (poppler_fonts_iter_next (iter));
+}
+
+static void
+pdf_document_document_fonts_iface_init (EvDocumentFontsInterface *iface)
+{
+ iface->fill_model = pdf_document_fonts_fill_model;
+ iface->scan = pdf_document_fonts_scan;
+ iface->get_progress = pdf_document_fonts_get_progress;
+}
+
+static gboolean
+pdf_document_links_has_document_links (EvDocumentLinks *document_links)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document_links);
+ PopplerIndexIter *iter;
+
+ g_return_val_if_fail (PDF_IS_DOCUMENT (document_links), FALSE);
+
+ iter = poppler_index_iter_new (pdf_document->document);
+ if (iter == NULL)
+ return FALSE;
+ poppler_index_iter_free (iter);
+
+ return TRUE;
+}
+
+static EvLinkDest *
+ev_link_dest_from_dest (PdfDocument *pdf_document,
+ PopplerDest *dest)
+{
+ EvLinkDest *ev_dest = NULL;
+ const char *unimplemented_dest = NULL;
+
+ g_assert (dest != NULL);
+
+ switch (dest->type) {
+ case POPPLER_DEST_XYZ: {
+ PopplerPage *poppler_page;
+ double height;
+
+ poppler_page = poppler_document_get_page (pdf_document->document,
+ MAX (0, dest->page_num - 1));
+ poppler_page_get_size (poppler_page, NULL, &height);
+ ev_dest = ev_link_dest_new_xyz (dest->page_num - 1,
+ dest->left,
+ height - MIN (height, dest->top),
+ dest->zoom,
+ dest->change_left,
+ dest->change_top,
+ dest->change_zoom);
+ g_object_unref (poppler_page);
+ }
+ break;
+ case POPPLER_DEST_FITB:
+ case POPPLER_DEST_FIT:
+ ev_dest = ev_link_dest_new_fit (dest->page_num - 1);
+ break;
+ case POPPLER_DEST_FITBH:
+ case POPPLER_DEST_FITH: {
+ PopplerPage *poppler_page;
+ double height;
+
+ poppler_page = poppler_document_get_page (pdf_document->document,
+ MAX (0, dest->page_num - 1));
+ poppler_page_get_size (poppler_page, NULL, &height);
+ ev_dest = ev_link_dest_new_fith (dest->page_num - 1,
+ height - MIN (height, dest->top),
+ dest->change_top);
+ g_object_unref (poppler_page);
+ }
+ break;
+ case POPPLER_DEST_FITBV:
+ case POPPLER_DEST_FITV:
+ ev_dest = ev_link_dest_new_fitv (dest->page_num - 1,
+ dest->left,
+ dest->change_left);
+ break;
+ case POPPLER_DEST_FITR: {
+ PopplerPage *poppler_page;
+ double height;
+
+ poppler_page = poppler_document_get_page (pdf_document->document,
+ MAX (0, dest->page_num - 1));
+ poppler_page_get_size (poppler_page, NULL, &height);
+ ev_dest = ev_link_dest_new_fitr (dest->page_num - 1,
+ dest->left,
+ height - MIN (height, dest->bottom),
+ dest->right,
+ height - MIN (height, dest->top));
+ g_object_unref (poppler_page);
+ }
+ break;
+ case POPPLER_DEST_NAMED:
+ ev_dest = ev_link_dest_new_named (dest->named_dest);
+ break;
+ case POPPLER_DEST_UNKNOWN:
+ unimplemented_dest = "POPPLER_DEST_UNKNOWN";
+ break;
+ }
+
+ if (unimplemented_dest) {
+ g_warning ("Unimplemented destination: %s, please post a "
+ "bug report in Evince bugzilla "
+ "(http://bugzilla.mate.org) with a testcase.",
+ unimplemented_dest);
+ }
+
+ if (!ev_dest)
+ ev_dest = ev_link_dest_new_page (dest->page_num - 1);
+
+ return ev_dest;
+}
+
+static EvLink *
+ev_link_from_action (PdfDocument *pdf_document,
+ PopplerAction *action)
+{
+ EvLink *link = NULL;
+ EvLinkAction *ev_action = NULL;
+ const char *unimplemented_action = NULL;
+
+ switch (action->type) {
+ case POPPLER_ACTION_NONE:
+ break;
+ case POPPLER_ACTION_GOTO_DEST: {
+ EvLinkDest *dest;
+
+ dest = ev_link_dest_from_dest (pdf_document, action->goto_dest.dest);
+ ev_action = ev_link_action_new_dest (dest);
+ }
+ break;
+ case POPPLER_ACTION_GOTO_REMOTE: {
+ EvLinkDest *dest;
+
+ dest = ev_link_dest_from_dest (pdf_document, action->goto_remote.dest);
+ ev_action = ev_link_action_new_remote (dest,
+ action->goto_remote.file_name);
+
+ }
+ break;
+ case POPPLER_ACTION_LAUNCH:
+ ev_action = ev_link_action_new_launch (action->launch.file_name,
+ action->launch.params);
+ break;
+ case POPPLER_ACTION_URI:
+ ev_action = ev_link_action_new_external_uri (action->uri.uri);
+ break;
+ case POPPLER_ACTION_NAMED:
+ ev_action = ev_link_action_new_named (action->named.named_dest);
+ break;
+ case POPPLER_ACTION_MOVIE:
+ unimplemented_action = "POPPLER_ACTION_MOVIE";
+ break;
+#if POPPLER_CHECK_VERSION (0, 13, 2)
+ case POPPLER_ACTION_RENDITION:
+ unimplemented_action = "POPPLER_ACTION_RENDITION";
+ break;
+ case POPPLER_ACTION_OCG_STATE:
+ unimplemented_action = "POPPLER_ACTION_OCG_STATE";
+ break;
+#endif
+ case POPPLER_ACTION_UNKNOWN:
+ unimplemented_action = "POPPLER_ACTION_UNKNOWN";
+ }
+
+ if (unimplemented_action) {
+ g_warning ("Unimplemented action: %s, please post a bug report "
+ "in Evince bugzilla (http://bugzilla.mate.org) "
+ "with a testcase.", unimplemented_action);
+ }
+
+ link = ev_link_new (action->any.title, ev_action);
+
+ return link;
+}
+
+static void
+build_tree (PdfDocument *pdf_document,
+ GtkTreeModel *model,
+ GtkTreeIter *parent,
+ PopplerIndexIter *iter)
+{
+
+ do {
+ GtkTreeIter tree_iter;
+ PopplerIndexIter *child;
+ PopplerAction *action;
+ EvLink *link = NULL;
+ gboolean expand;
+ char *title_markup;
+
+ action = poppler_index_iter_get_action (iter);
+ expand = poppler_index_iter_is_open (iter);
+
+ if (!action)
+ continue;
+
+ switch (action->type) {
+ case POPPLER_ACTION_GOTO_DEST: {
+ /* For bookmarks, solve named destinations */
+ if (action->goto_dest.dest->type == POPPLER_DEST_NAMED) {
+ PopplerDest *dest;
+ EvLinkDest *ev_dest = NULL;
+ EvLinkAction *ev_action;
+
+ dest = poppler_document_find_dest (pdf_document->document,
+ action->goto_dest.dest->named_dest);
+ if (!dest) {
+ link = ev_link_from_action (pdf_document, action);
+ break;
+ }
+
+ ev_dest = ev_link_dest_from_dest (pdf_document, dest);
+ poppler_dest_free (dest);
+
+ ev_action = ev_link_action_new_dest (ev_dest);
+ link = ev_link_new (action->any.title, ev_action);
+ } else {
+ link = ev_link_from_action (pdf_document, action);
+ }
+ }
+ break;
+ default:
+ link = ev_link_from_action (pdf_document, action);
+ break;
+ }
+
+ if (!link || strlen (ev_link_get_title (link)) <= 0) {
+ poppler_action_free (action);
+ if (link)
+ g_object_unref (link);
+
+ continue;
+ }
+
+ gtk_tree_store_append (GTK_TREE_STORE (model), &tree_iter, parent);
+ title_markup = g_markup_escape_text (ev_link_get_title (link), -1);
+
+ gtk_tree_store_set (GTK_TREE_STORE (model), &tree_iter,
+ EV_DOCUMENT_LINKS_COLUMN_MARKUP, title_markup,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, link,
+ EV_DOCUMENT_LINKS_COLUMN_EXPAND, expand,
+ -1);
+
+ g_free (title_markup);
+ g_object_unref (link);
+
+ child = poppler_index_iter_get_child (iter);
+ if (child)
+ build_tree (pdf_document, model, &tree_iter, child);
+ poppler_index_iter_free (child);
+ poppler_action_free (action);
+
+ } while (poppler_index_iter_next (iter));
+}
+
+static GtkTreeModel *
+pdf_document_links_get_links_model (EvDocumentLinks *document_links)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document_links);
+ GtkTreeModel *model = NULL;
+ PopplerIndexIter *iter;
+
+ g_return_val_if_fail (PDF_IS_DOCUMENT (document_links), NULL);
+
+ iter = poppler_index_iter_new (pdf_document->document);
+ /* Create the model if we have items*/
+ if (iter != NULL) {
+ model = (GtkTreeModel *) gtk_tree_store_new (EV_DOCUMENT_LINKS_COLUMN_NUM_COLUMNS,
+ G_TYPE_STRING,
+ G_TYPE_OBJECT,
+ G_TYPE_BOOLEAN,
+ G_TYPE_STRING);
+ build_tree (pdf_document, model, NULL, iter);
+ poppler_index_iter_free (iter);
+ }
+
+ return model;
+}
+
+static EvMappingList *
+pdf_document_links_get_links (EvDocumentLinks *document_links,
+ EvPage *page)
+{
+ PdfDocument *pdf_document;
+ PopplerPage *poppler_page;
+ GList *retval = NULL;
+ GList *mapping_list;
+ GList *list;
+ double height;
+
+ pdf_document = PDF_DOCUMENT (document_links);
+ poppler_page = POPPLER_PAGE (page->backend_page);
+ mapping_list = poppler_page_get_link_mapping (poppler_page);
+ poppler_page_get_size (poppler_page, NULL, &height);
+
+ for (list = mapping_list; list; list = list->next) {
+ PopplerLinkMapping *link_mapping;
+ EvMapping *ev_link_mapping;
+
+ link_mapping = (PopplerLinkMapping *)list->data;
+ ev_link_mapping = g_new (EvMapping, 1);
+ ev_link_mapping->data = ev_link_from_action (pdf_document,
+ link_mapping->action);
+ ev_link_mapping->area.x1 = link_mapping->area.x1;
+ ev_link_mapping->area.x2 = link_mapping->area.x2;
+ /* Invert this for X-style coordinates */
+ ev_link_mapping->area.y1 = height - link_mapping->area.y2;
+ ev_link_mapping->area.y2 = height - link_mapping->area.y1;
+
+ retval = g_list_prepend (retval, ev_link_mapping);
+ }
+
+ poppler_page_free_link_mapping (mapping_list);
+
+ return ev_mapping_list_new (page->index, g_list_reverse (retval), (GDestroyNotify)g_object_unref);
+}
+
+static EvLinkDest *
+pdf_document_links_find_link_dest (EvDocumentLinks *document_links,
+ const gchar *link_name)
+{
+ PdfDocument *pdf_document;
+ PopplerDest *dest;
+ EvLinkDest *ev_dest = NULL;
+
+ pdf_document = PDF_DOCUMENT (document_links);
+ dest = poppler_document_find_dest (pdf_document->document,
+ link_name);
+ if (dest) {
+ ev_dest = ev_link_dest_from_dest (pdf_document, dest);
+ poppler_dest_free (dest);
+ }
+
+ return ev_dest;
+}
+
+static void
+pdf_document_document_links_iface_init (EvDocumentLinksInterface *iface)
+{
+ iface->has_document_links = pdf_document_links_has_document_links;
+ iface->get_links_model = pdf_document_links_get_links_model;
+ iface->get_links = pdf_document_links_get_links;
+ iface->find_link_dest = pdf_document_links_find_link_dest;
+}
+
+static EvMappingList *
+pdf_document_images_get_image_mapping (EvDocumentImages *document_images,
+ EvPage *page)
+{
+ GList *retval = NULL;
+ PdfDocument *pdf_document;
+ PopplerPage *poppler_page;
+ GList *mapping_list;
+ GList *list;
+
+ pdf_document = PDF_DOCUMENT (document_images);
+ poppler_page = POPPLER_PAGE (page->backend_page);
+ mapping_list = poppler_page_get_image_mapping (poppler_page);
+
+ for (list = mapping_list; list; list = list->next) {
+ PopplerImageMapping *image_mapping;
+ EvMapping *ev_image_mapping;
+
+ image_mapping = (PopplerImageMapping *)list->data;
+
+ ev_image_mapping = g_new (EvMapping, 1);
+
+ ev_image_mapping->data = ev_image_new (page->index, image_mapping->image_id);
+ ev_image_mapping->area.x1 = image_mapping->area.x1;
+ ev_image_mapping->area.y1 = image_mapping->area.y1;
+ ev_image_mapping->area.x2 = image_mapping->area.x2;
+ ev_image_mapping->area.y2 = image_mapping->area.y2;
+
+ retval = g_list_prepend (retval, ev_image_mapping);
+ }
+
+ poppler_page_free_image_mapping (mapping_list);
+
+ return ev_mapping_list_new (page->index, g_list_reverse (retval), (GDestroyNotify)g_object_unref);
+}
+
+GdkPixbuf *
+pdf_document_images_get_image (EvDocumentImages *document_images,
+ EvImage *image)
+{
+ GdkPixbuf *retval = NULL;
+ PdfDocument *pdf_document;
+ PopplerPage *poppler_page;
+ cairo_surface_t *surface;
+
+ pdf_document = PDF_DOCUMENT (document_images);
+ poppler_page = poppler_document_get_page (pdf_document->document,
+ ev_image_get_page (image));
+
+ surface = poppler_page_get_image (poppler_page, ev_image_get_id (image));
+ if (surface) {
+ retval = ev_document_misc_pixbuf_from_surface (surface);
+ cairo_surface_destroy (surface);
+ }
+
+ g_object_unref (poppler_page);
+
+ return retval;
+}
+
+static void
+pdf_document_document_images_iface_init (EvDocumentImagesInterface *iface)
+{
+ iface->get_image_mapping = pdf_document_images_get_image_mapping;
+ iface->get_image = pdf_document_images_get_image;
+}
+
+static GdkPixbuf *
+make_thumbnail_for_page (PopplerPage *poppler_page,
+ EvRenderContext *rc,
+ gint width,
+ gint height)
+{
+ GdkPixbuf *pixbuf;
+
+#ifdef POPPLER_WITH_GDK
+ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8,
+ width, height);
+ gdk_pixbuf_fill (pixbuf, 0xffffffff);
+
+ ev_document_fc_mutex_lock ();
+ poppler_page_render_to_pixbuf (poppler_page, 0, 0,
+ width, height,
+ rc->scale, rc->rotation, pixbuf);
+ ev_document_fc_mutex_unlock ();
+#else
+ cairo_surface_t *surface;
+
+ ev_document_fc_mutex_lock ();
+ surface = pdf_page_render (poppler_page, width, height, rc);
+ ev_document_fc_mutex_unlock ();
+
+ pixbuf = ev_document_misc_pixbuf_from_surface (surface);
+ cairo_surface_destroy (surface);
+#endif /* POPPLER_WITH_GDK */
+
+ return pixbuf;
+}
+
+static GdkPixbuf *
+pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails,
+ EvRenderContext *rc,
+ gboolean border)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document_thumbnails);
+ PopplerPage *poppler_page;
+ GdkPixbuf *pixbuf = NULL;
+ GdkPixbuf *border_pixbuf;
+ gint width, height;
+
+ poppler_page = POPPLER_PAGE (rc->page->backend_page);
+
+ pdf_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (pdf_document),
+ rc, &width, &height);
+
+#ifdef POPPLER_WITH_GDK
+ pixbuf = poppler_page_get_thumbnail_pixbuf (poppler_page);
+#else
+ cairo_surface_t *surface;
+
+ surface = poppler_page_get_thumbnail (poppler_page);
+ if (surface) {
+ pixbuf = ev_document_misc_pixbuf_from_surface (surface);
+ cairo_surface_destroy (surface);
+ }
+#endif /* POPPLER_WITH_GDK */
+
+ if (pixbuf != NULL) {
+ int thumb_width = (rc->rotation == 90 || rc->rotation == 270) ?
+ gdk_pixbuf_get_height (pixbuf) :
+ gdk_pixbuf_get_width (pixbuf);
+
+ if (thumb_width == width) {
+ GdkPixbuf *rotated_pixbuf;
+
+ rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf,
+ (GdkPixbufRotation) (360 - rc->rotation));
+ g_object_unref (pixbuf);
+ pixbuf = rotated_pixbuf;
+ } else {
+ /* The provided thumbnail has a different size */
+ g_object_unref (pixbuf);
+ pixbuf = make_thumbnail_for_page (poppler_page, rc, width, height);
+ }
+ } else {
+ /* There is no provided thumbnail. We need to make one. */
+ pixbuf = make_thumbnail_for_page (poppler_page, rc, width, height);
+ }
+
+ if (border && pixbuf) {
+ border_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, pixbuf);
+ g_object_unref (pixbuf);
+ pixbuf = border_pixbuf;
+ }
+
+ return pixbuf;
+}
+
+static void
+pdf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnails,
+ EvRenderContext *rc,
+ gint *width,
+ gint *height)
+{
+ double page_width, page_height;
+
+ poppler_page_get_size (POPPLER_PAGE (rc->page->backend_page),
+ &page_width, &page_height);
+
+ *width = MAX ((gint)(page_width * rc->scale + 0.5), 1);
+ *height = MAX ((gint)(page_height * rc->scale + 0.5), 1);
+
+ if (rc->rotation == 90 || rc->rotation == 270) {
+ gint temp;
+
+ temp = *width;
+ *width = *height;
+ *height = temp;
+ }
+}
+
+static void
+pdf_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
+{
+ iface->get_thumbnail = pdf_document_thumbnails_get_thumbnail;
+ iface->get_dimensions = pdf_document_thumbnails_get_dimensions;
+}
+
+
+static GList *
+pdf_document_find_find_text (EvDocumentFind *document_find,
+ EvPage *page,
+ const gchar *text,
+ gboolean case_sensitive)
+{
+ GList *matches, *l;
+ PopplerPage *poppler_page;
+ gdouble height;
+ GList *retval = NULL;
+
+ g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL);
+ g_return_val_if_fail (text != NULL, NULL);
+
+ poppler_page = POPPLER_PAGE (page->backend_page);
+
+ matches = poppler_page_find_text (poppler_page, text);
+ if (!matches)
+ return NULL;
+
+ poppler_page_get_size (poppler_page, NULL, &height);
+ for (l = matches; l && l->data; l = g_list_next (l)) {
+ PopplerRectangle *rect = (PopplerRectangle *)l->data;
+ EvRectangle *ev_rect;
+
+ ev_rect = ev_rectangle_new ();
+ ev_rect->x1 = rect->x1;
+ ev_rect->x2 = rect->x2;
+ /* Invert this for X-style coordinates */
+ ev_rect->y1 = height - rect->y2;
+ ev_rect->y2 = height - rect->y1;
+
+ retval = g_list_prepend (retval, ev_rect);
+ }
+
+ g_list_foreach (matches, (GFunc)poppler_rectangle_free, NULL);
+ g_list_free (matches);
+
+ return g_list_reverse (retval);
+}
+
+static void
+pdf_document_find_iface_init (EvDocumentFindInterface *iface)
+{
+ iface->find_text = pdf_document_find_find_text;
+}
+
+static void
+pdf_print_context_free (PdfPrintContext *ctx)
+{
+ if (!ctx)
+ return;
+
+#ifdef HAVE_CAIRO_PRINT
+ if (ctx->cr) {
+ cairo_destroy (ctx->cr);
+ ctx->cr = NULL;
+ }
+#else
+ if (ctx->ps_file) {
+ poppler_ps_file_free (ctx->ps_file);
+ ctx->ps_file = NULL;
+ }
+#endif
+ g_free (ctx);
+}
+
+static void
+pdf_document_file_exporter_begin (EvFileExporter *exporter,
+ EvFileExporterContext *fc)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (exporter);
+ PdfPrintContext *ctx;
+#ifdef HAVE_CAIRO_PRINT
+ gdouble width, height;
+ cairo_surface_t *surface = NULL;
+#endif
+
+ if (pdf_document->print_ctx)
+ pdf_print_context_free (pdf_document->print_ctx);
+ pdf_document->print_ctx = g_new0 (PdfPrintContext, 1);
+ ctx = pdf_document->print_ctx;
+ ctx->format = fc->format;
+
+#ifdef HAVE_CAIRO_PRINT
+ ctx->pages_per_sheet = CLAMP (fc->pages_per_sheet, 1, 16);
+
+ ctx->paper_width = fc->paper_width;
+ ctx->paper_height = fc->paper_height;
+
+ switch (fc->pages_per_sheet) {
+ default:
+ case 1:
+ ctx->pages_x = 1;
+ ctx->pages_y = 1;
+ break;
+ case 2:
+ ctx->pages_x = 1;
+ ctx->pages_y = 2;
+ break;
+ case 4:
+ ctx->pages_x = 2;
+ ctx->pages_y = 2;
+ break;
+ case 6:
+ ctx->pages_x = 2;
+ ctx->pages_y = 3;
+ break;
+ case 9:
+ ctx->pages_x = 3;
+ ctx->pages_y = 3;
+ break;
+ case 16:
+ ctx->pages_x = 4;
+ ctx->pages_y = 4;
+ break;
+ }
+
+ ctx->pages_printed = 0;
+
+ switch (fc->format) {
+ case EV_FILE_FORMAT_PS:
+#ifdef HAVE_CAIRO_PS
+ surface = cairo_ps_surface_create (fc->filename, fc->paper_width, fc->paper_height);
+#endif
+ break;
+ case EV_FILE_FORMAT_PDF:
+#ifdef HAVE_CAIRO_PDF
+ surface = cairo_pdf_surface_create (fc->filename, fc->paper_width, fc->paper_height);
+#endif
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ ctx->cr = cairo_create (surface);
+ cairo_surface_destroy (surface);
+
+#else /* HAVE_CAIRO_PRINT */
+ if (ctx->format == EV_FILE_FORMAT_PS) {
+ ctx->ps_file = poppler_ps_file_new (pdf_document->document,
+ fc->filename, fc->first_page,
+ fc->last_page - fc->first_page + 1);
+ poppler_ps_file_set_paper_size (ctx->ps_file, fc->paper_width, fc->paper_height);
+ poppler_ps_file_set_duplex (ctx->ps_file, fc->duplex);
+ }
+#endif /* HAVE_CAIRO_PRINT */
+}
+
+static void
+pdf_document_file_exporter_begin_page (EvFileExporter *exporter)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (exporter);
+ PdfPrintContext *ctx = pdf_document->print_ctx;
+
+ g_return_if_fail (pdf_document->print_ctx != NULL);
+
+ ctx->pages_printed = 0;
+
+#ifdef HAVE_CAIRO_PRINT
+ if (ctx->paper_width > ctx->paper_height) {
+ if (ctx->format == EV_FILE_FORMAT_PS) {
+ cairo_ps_surface_set_size (cairo_get_target (ctx->cr),
+ ctx->paper_height,
+ ctx->paper_width);
+ } else if (ctx->format == EV_FILE_FORMAT_PDF) {
+ cairo_pdf_surface_set_size (cairo_get_target (ctx->cr),
+ ctx->paper_height,
+ ctx->paper_width);
+ }
+ }
+#endif /* HAVE_CAIRO_PRINT */
+}
+
+static void
+pdf_document_file_exporter_do_page (EvFileExporter *exporter,
+ EvRenderContext *rc)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (exporter);
+ PdfPrintContext *ctx = pdf_document->print_ctx;
+ PopplerPage *poppler_page;
+#ifdef HAVE_CAIRO_PRINT
+ gdouble page_width, page_height;
+ gint x, y;
+ gboolean rotate;
+ gdouble width, height;
+ gdouble pwidth, pheight;
+ gdouble xscale, yscale;
+#endif
+
+ g_return_if_fail (pdf_document->print_ctx != NULL);
+
+ poppler_page = POPPLER_PAGE (rc->page->backend_page);
+
+#ifdef HAVE_CAIRO_PRINT
+ x = (ctx->pages_printed % ctx->pages_per_sheet) % ctx->pages_x;
+ y = (ctx->pages_printed % ctx->pages_per_sheet) / ctx->pages_x;
+ poppler_page_get_size (poppler_page, &page_width, &page_height);
+
+ if (page_width > page_height && page_width > ctx->paper_width) {
+ rotate = TRUE;
+ } else {
+ rotate = FALSE;
+ }
+
+ /* Use always portrait mode and rotate when necessary */
+ if (ctx->paper_width > ctx->paper_height) {
+ width = ctx->paper_height;
+ height = ctx->paper_width;
+ rotate = !rotate;
+ } else {
+ width = ctx->paper_width;
+ height = ctx->paper_height;
+ }
+
+ if (ctx->pages_per_sheet == 2 || ctx->pages_per_sheet == 6) {
+ rotate = !rotate;
+ }
+
+ if (rotate) {
+ gint tmp1;
+ gdouble tmp2;
+
+ tmp1 = x;
+ x = y;
+ y = tmp1;
+
+ tmp2 = page_width;
+ page_width = page_height;
+ page_height = tmp2;
+ }
+
+ pwidth = width / ctx->pages_x;
+ pheight = height / ctx->pages_y;
+
+ if ((page_width > pwidth || page_height > pheight) ||
+ (page_width < pwidth && page_height < pheight)) {
+ xscale = pwidth / page_width;
+ yscale = pheight / page_height;
+
+ if (yscale < xscale) {
+ xscale = yscale;
+ } else {
+ yscale = xscale;
+ }
+
+ } else {
+ xscale = yscale = 1;
+ }
+
+ /* TODO: center */
+
+ cairo_save (ctx->cr);
+ if (rotate) {
+ cairo_matrix_t matrix;
+
+ cairo_translate (ctx->cr, (2 * y + 1) * pwidth, 0);
+ cairo_matrix_init (&matrix,
+ 0, 1,
+ -1, 0,
+ 0, 0);
+ cairo_transform (ctx->cr, &matrix);
+ }
+
+ cairo_translate (ctx->cr,
+ x * (rotate ? pheight : pwidth),
+ y * (rotate ? pwidth : pheight));
+ cairo_scale (ctx->cr, xscale, yscale);
+
+ poppler_page_render_for_printing (poppler_page, ctx->cr);
+
+ ctx->pages_printed++;
+
+ cairo_restore (ctx->cr);
+#else /* HAVE_CAIRO_PRINT */
+ if (ctx->format == EV_FILE_FORMAT_PS)
+ poppler_page_render_to_ps (poppler_page, ctx->ps_file);
+#endif /* HAVE_CAIRO_PRINT */
+}
+
+static void
+pdf_document_file_exporter_end_page (EvFileExporter *exporter)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (exporter);
+ PdfPrintContext *ctx = pdf_document->print_ctx;
+
+ g_return_if_fail (pdf_document->print_ctx != NULL);
+
+#ifdef HAVE_CAIRO_PRINT
+ cairo_show_page (ctx->cr);
+#endif
+}
+
+static void
+pdf_document_file_exporter_end (EvFileExporter *exporter)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (exporter);
+
+ pdf_print_context_free (pdf_document->print_ctx);
+ pdf_document->print_ctx = NULL;
+}
+
+static EvFileExporterCapabilities
+pdf_document_file_exporter_get_capabilities (EvFileExporter *exporter)
+{
+ return (EvFileExporterCapabilities) (
+ EV_FILE_EXPORTER_CAN_PAGE_SET |
+ EV_FILE_EXPORTER_CAN_COPIES |
+ EV_FILE_EXPORTER_CAN_COLLATE |
+ EV_FILE_EXPORTER_CAN_REVERSE |
+ EV_FILE_EXPORTER_CAN_SCALE |
+#ifdef HAVE_CAIRO_PRINT
+ EV_FILE_EXPORTER_CAN_NUMBER_UP |
+#endif
+
+#ifdef HAVE_CAIRO_PDF
+ EV_FILE_EXPORTER_CAN_GENERATE_PDF |
+#endif
+ EV_FILE_EXPORTER_CAN_GENERATE_PS);
+}
+
+static void
+pdf_document_file_exporter_iface_init (EvFileExporterInterface *iface)
+{
+ iface->begin = pdf_document_file_exporter_begin;
+ iface->begin_page = pdf_document_file_exporter_begin_page;
+ iface->do_page = pdf_document_file_exporter_do_page;
+ iface->end_page = pdf_document_file_exporter_end_page;
+ iface->end = pdf_document_file_exporter_end;
+ iface->get_capabilities = pdf_document_file_exporter_get_capabilities;
+}
+
+/* EvDocumentPrint */
+static void
+pdf_document_print_print_page (EvDocumentPrint *document,
+ EvPage *page,
+ cairo_t *cr)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+
+ poppler_page_render_for_printing (POPPLER_PAGE (page->backend_page), cr);
+}
+
+static void
+pdf_document_document_print_iface_init (EvDocumentPrintInterface *iface)
+{
+ iface->print_page = pdf_document_print_print_page;
+}
+
+static void
+pdf_selection_render_selection (EvSelection *selection,
+ EvRenderContext *rc,
+ cairo_surface_t **surface,
+ EvRectangle *points,
+ EvRectangle *old_points,
+ EvSelectionStyle style,
+ GdkColor *text,
+ GdkColor *base)
+{
+ PopplerPage *poppler_page;
+ cairo_t *cr;
+ PopplerColor text_color, base_color;
+ double width_points, height_points;
+ gint width, height;
+
+ poppler_page = POPPLER_PAGE (rc->page->backend_page);
+
+ poppler_page_get_size (poppler_page,
+ &width_points, &height_points);
+ width = (int) ((width_points * rc->scale) + 0.5);
+ height = (int) ((height_points * rc->scale) + 0.5);
+
+ text_color.red = text->red;
+ text_color.green = text->green;
+ text_color.blue = text->blue;
+
+ base_color.red = base->red;
+ base_color.green = base->green;
+ base_color.blue = base->blue;
+
+ if (*surface == NULL) {
+ *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+ width, height);
+
+ }
+
+ cr = cairo_create (*surface);
+ cairo_scale (cr, rc->scale, rc->scale);
+ cairo_surface_set_device_offset (*surface, 0, 0);
+ memset (cairo_image_surface_get_data (*surface), 0x00,
+ cairo_image_surface_get_height (*surface) *
+ cairo_image_surface_get_stride (*surface));
+ poppler_page_render_selection (poppler_page,
+ cr,
+ (PopplerRectangle *)points,
+ (PopplerRectangle *)old_points,
+ (PopplerSelectionStyle)style,
+ &text_color,
+ &base_color);
+ cairo_destroy (cr);
+}
+
+static gchar *
+pdf_selection_get_selected_text (EvSelection *selection,
+ EvPage *page,
+ EvSelectionStyle style,
+ EvRectangle *points)
+{
+ PopplerPage *poppler_page;
+ char *retval;
+
+ poppler_page = POPPLER_PAGE (page->backend_page);
+
+#ifdef HAVE_POPPLER_PAGE_GET_SELECTED_TEXT
+ retval = poppler_page_get_selected_text (poppler_page,
+ (PopplerSelectionStyle)style,
+ (PopplerRectangle *)points);
+#else
+ PopplerRectangle r;
+ double height;
+
+ poppler_page_get_size (poppler_page, NULL, &height);
+ r.x1 = points->x1;
+ r.y1 = height - points->y2;
+ r.x2 = points->x2;
+ r.y2 = height - points->y1;
+
+ retval = poppler_page_get_text (poppler_page,
+ (PopplerSelectionStyle)style,
+ &r);
+#endif /* HAVE_POPPLER_PAGE_GET_SELECTED_TEXT */
+
+ return retval;
+}
+
+static cairo_region_t *
+create_region_from_poppler_region (GList *region, gdouble scale)
+{
+ GList *l;
+ cairo_region_t *retval;
+
+ retval = cairo_region_create ();
+
+ for (l = region; l; l = g_list_next (l)) {
+ PopplerRectangle *rectangle;
+ cairo_rectangle_int_t rect;
+
+ rectangle = (PopplerRectangle *)l->data;
+
+ rect.x = (gint) ((rectangle->x1 * scale) + 0.5);
+ rect.y = (gint) ((rectangle->y1 * scale) + 0.5);
+ rect.width = (gint) (((rectangle->x2 - rectangle->x1) * scale) + 0.5);
+ rect.height = (gint) (((rectangle->y2 - rectangle->y1) * scale) + 0.5);
+ cairo_region_union_rectangle (retval, &rect);
+
+ poppler_rectangle_free (rectangle);
+ }
+
+ return retval;
+}
+
+static cairo_region_t *
+pdf_selection_get_selection_region (EvSelection *selection,
+ EvRenderContext *rc,
+ EvSelectionStyle style,
+ EvRectangle *points)
+{
+ PopplerPage *poppler_page;
+ cairo_region_t *retval;
+ GList *region;
+
+ poppler_page = POPPLER_PAGE (rc->page->backend_page);
+ region = poppler_page_get_selection_region (poppler_page,
+ 1.0,
+ (PopplerSelectionStyle)style,
+ (PopplerRectangle *) points);
+ retval = create_region_from_poppler_region (region, rc->scale);
+ g_list_free (region);
+
+ return retval;
+}
+
+static void
+pdf_selection_iface_init (EvSelectionInterface *iface)
+{
+ iface->render_selection = pdf_selection_render_selection;
+ iface->get_selected_text = pdf_selection_get_selected_text;
+ iface->get_selection_region = pdf_selection_get_selection_region;
+}
+
+
+/* EvDocumentText */
+static cairo_region_t *
+pdf_document_text_get_text_mapping (EvDocumentText *document_text,
+ EvPage *page)
+{
+ PopplerPage *poppler_page;
+ PopplerRectangle points;
+ GList *region;
+ cairo_region_t *retval;
+
+ g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL);
+
+ poppler_page = POPPLER_PAGE (page->backend_page);
+
+ points.x1 = 0.0;
+ points.y1 = 0.0;
+ poppler_page_get_size (poppler_page, &(points.x2), &(points.y2));
+
+ region = poppler_page_get_selection_region (poppler_page, 1.0,
+ POPPLER_SELECTION_GLYPH,
+ &points);
+ retval = create_region_from_poppler_region (region, 1.0);
+ g_list_free (region);
+
+ return retval;
+}
+
+#ifdef HAVE_POPPLER_PAGE_GET_SELECTED_TEXT
+static gchar *
+pdf_document_text_get_text (EvDocumentText *selection,
+ EvPage *page)
+{
+ PopplerPage *poppler_page;
+
+ g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL);
+
+ poppler_page = POPPLER_PAGE (page->backend_page);
+
+ return poppler_page_get_text (poppler_page);
+}
+#else
+static gchar *
+pdf_document_text_get_text (EvDocumentText *selection,
+ EvPage *page)
+{
+ PopplerPage *poppler_page;
+ PopplerRectangle r;
+
+ g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL);
+
+ poppler_page = POPPLER_PAGE (page->backend_page);
+
+ r.x1 = 0;
+ r.y1 = 0;
+ poppler_page_get_size (poppler_page, &(r.x2), &(r.y2));
+
+ return poppler_page_get_text (poppler_page,
+ POPPLER_SELECTION_WORD,
+ &r);
+}
+#endif /* HAVE_POPPLER_PAGE_GET_SELECTED_TEXT */
+
+#ifdef HAVE_POPPLER_PAGE_GET_TEXT_LAYOUT
+static gboolean
+pdf_document_text_get_text_layout (EvDocumentText *selection,
+ EvPage *page,
+ EvRectangle **areas,
+ guint *n_areas)
+{
+ PopplerPage *poppler_page;
+
+ g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL);
+
+ poppler_page = POPPLER_PAGE (page->backend_page);
+
+ return poppler_page_get_text_layout (poppler_page, (PopplerRectangle **)areas, n_areas);
+}
+#endif
+
+static void
+pdf_document_text_iface_init (EvDocumentTextInterface *iface)
+{
+ iface->get_text_mapping = pdf_document_text_get_text_mapping;
+ iface->get_text = pdf_document_text_get_text;
+#ifdef HAVE_POPPLER_PAGE_GET_TEXT_LAYOUT
+ iface->get_text_layout = pdf_document_text_get_text_layout;
+#endif
+}
+
+/* Page Transitions */
+static gdouble
+pdf_document_get_page_duration (EvDocumentTransition *trans,
+ gint page)
+{
+ PdfDocument *pdf_document;
+ PopplerPage *poppler_page;
+ gdouble duration = -1;
+
+ pdf_document = PDF_DOCUMENT (trans);
+ poppler_page = poppler_document_get_page (pdf_document->document, page);
+ if (!poppler_page)
+ return -1;
+
+ duration = poppler_page_get_duration (poppler_page);
+ g_object_unref (poppler_page);
+
+ return duration;
+}
+
+static EvTransitionEffect *
+pdf_document_get_effect (EvDocumentTransition *trans,
+ gint page)
+{
+ PdfDocument *pdf_document;
+ PopplerPage *poppler_page;
+ PopplerPageTransition *page_transition;
+ EvTransitionEffect *effect;
+
+ pdf_document = PDF_DOCUMENT (trans);
+ poppler_page = poppler_document_get_page (pdf_document->document, page);
+
+ if (!poppler_page)
+ return NULL;
+
+ page_transition = poppler_page_get_transition (poppler_page);
+
+ if (!page_transition) {
+ g_object_unref (poppler_page);
+ return NULL;
+ }
+
+ /* enums in PopplerPageTransition match the EvTransitionEffect ones */
+ effect = ev_transition_effect_new ((EvTransitionEffectType) page_transition->type,
+ "alignment", page_transition->alignment,
+ "direction", page_transition->direction,
+ "duration", page_transition->duration,
+ "angle", page_transition->angle,
+ "scale", page_transition->scale,
+ "rectangular", page_transition->rectangular,
+ NULL);
+
+ poppler_page_transition_free (page_transition);
+ g_object_unref (poppler_page);
+
+ return effect;
+}
+
+static void
+pdf_document_page_transition_iface_init (EvDocumentTransitionInterface *iface)
+{
+ iface->get_page_duration = pdf_document_get_page_duration;
+ iface->get_effect = pdf_document_get_effect;
+}
+
+/* Forms */
+static void
+pdf_document_get_crop_box (EvDocument *document,
+ int page,
+ EvRectangle *rect)
+{
+ PdfDocument *pdf_document;
+ PopplerPage *poppler_page;
+ PopplerRectangle poppler_rect;
+
+ pdf_document = PDF_DOCUMENT (document);
+ poppler_page = poppler_document_get_page (pdf_document->document, page);
+ poppler_page_get_crop_box (poppler_page, &poppler_rect);
+ rect->x1 = poppler_rect.x1;
+ rect->x2 = poppler_rect.x2;
+ rect->y1 = poppler_rect.y1;
+ rect->y2 = poppler_rect.y2;
+}
+
+static EvFormField *
+ev_form_field_from_poppler_field (PopplerFormField *poppler_field)
+{
+ EvFormField *ev_field = NULL;
+ gint id;
+ gdouble font_size;
+ gboolean is_read_only;
+
+ id = poppler_form_field_get_id (poppler_field);
+ font_size = poppler_form_field_get_font_size (poppler_field);
+ is_read_only = poppler_form_field_is_read_only (poppler_field);
+
+ switch (poppler_form_field_get_field_type (poppler_field)) {
+ case POPPLER_FORM_FIELD_TEXT: {
+ EvFormFieldText *field_text;
+ EvFormFieldTextType ev_text_type = EV_FORM_FIELD_TEXT_NORMAL;
+
+ switch (poppler_form_field_text_get_text_type (poppler_field)) {
+ case POPPLER_FORM_TEXT_NORMAL:
+ ev_text_type = EV_FORM_FIELD_TEXT_NORMAL;
+ break;
+ case POPPLER_FORM_TEXT_MULTILINE:
+ ev_text_type = EV_FORM_FIELD_TEXT_MULTILINE;
+ break;
+ case POPPLER_FORM_TEXT_FILE_SELECT:
+ ev_text_type = EV_FORM_FIELD_TEXT_FILE_SELECT;
+ break;
+ }
+
+ ev_field = ev_form_field_text_new (id, ev_text_type);
+ field_text = EV_FORM_FIELD_TEXT (ev_field);
+
+ field_text->do_spell_check = poppler_form_field_text_do_spell_check (poppler_field);
+ field_text->do_scroll = poppler_form_field_text_do_scroll (poppler_field);
+ field_text->is_rich_text = poppler_form_field_text_is_rich_text (poppler_field);
+ field_text->is_password = poppler_form_field_text_is_password (poppler_field);
+ field_text->max_len = poppler_form_field_text_get_max_len (poppler_field);
+ field_text->text = poppler_form_field_text_get_text (poppler_field);
+
+ }
+ break;
+ case POPPLER_FORM_FIELD_BUTTON: {
+ EvFormFieldButton *field_button;
+ EvFormFieldButtonType ev_button_type = EV_FORM_FIELD_BUTTON_PUSH;
+
+ switch (poppler_form_field_button_get_button_type (poppler_field)) {
+ case POPPLER_FORM_BUTTON_PUSH:
+ ev_button_type = EV_FORM_FIELD_BUTTON_PUSH;
+ break;
+ case POPPLER_FORM_BUTTON_CHECK:
+ ev_button_type = EV_FORM_FIELD_BUTTON_CHECK;
+ break;
+ case POPPLER_FORM_BUTTON_RADIO:
+ ev_button_type = EV_FORM_FIELD_BUTTON_RADIO;
+ break;
+ }
+
+ ev_field = ev_form_field_button_new (id, ev_button_type);
+ field_button = EV_FORM_FIELD_BUTTON (ev_field);
+
+ field_button->state = poppler_form_field_button_get_state (poppler_field);
+ }
+ break;
+ case POPPLER_FORM_FIELD_CHOICE: {
+ EvFormFieldChoice *field_choice;
+ EvFormFieldChoiceType ev_choice_type = EV_FORM_FIELD_CHOICE_COMBO;
+
+ switch (poppler_form_field_choice_get_choice_type (poppler_field)) {
+ case POPPLER_FORM_CHOICE_COMBO:
+ ev_choice_type = EV_FORM_FIELD_CHOICE_COMBO;
+ break;
+ case EV_FORM_FIELD_CHOICE_LIST:
+ ev_choice_type = EV_FORM_FIELD_CHOICE_LIST;
+ break;
+ }
+
+ ev_field = ev_form_field_choice_new (id, ev_choice_type);
+ field_choice = EV_FORM_FIELD_CHOICE (ev_field);
+
+ field_choice->is_editable = poppler_form_field_choice_is_editable (poppler_field);
+ field_choice->multi_select = poppler_form_field_choice_can_select_multiple (poppler_field);
+ field_choice->do_spell_check = poppler_form_field_choice_do_spell_check (poppler_field);
+ field_choice->commit_on_sel_change = poppler_form_field_choice_commit_on_change (poppler_field);
+
+ /* TODO: we need poppler_form_field_choice_get_selected_items in poppler
+ field_choice->selected_items = poppler_form_field_choice_get_selected_items (poppler_field);*/
+ if (field_choice->is_editable)
+ field_choice->text = poppler_form_field_choice_get_text (poppler_field);
+ }
+ break;
+ case POPPLER_FORM_FIELD_SIGNATURE:
+ /* TODO */
+ ev_field = ev_form_field_signature_new (id);
+ break;
+ case POPPLER_FORM_FIELD_UNKNOWN:
+ return NULL;
+ }
+
+ ev_field->font_size = font_size;
+ ev_field->is_read_only = is_read_only;
+
+ return ev_field;
+}
+
+static EvMappingList *
+pdf_document_forms_get_form_fields (EvDocumentForms *document,
+ EvPage *page)
+{
+ PopplerPage *poppler_page;
+ GList *retval = NULL;
+ GList *fields;
+ GList *list;
+ double height;
+
+ g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL);
+
+ poppler_page = POPPLER_PAGE (page->backend_page);
+ fields = poppler_page_get_form_field_mapping (poppler_page);
+ poppler_page_get_size (poppler_page, NULL, &height);
+
+ for (list = fields; list; list = list->next) {
+ PopplerFormFieldMapping *mapping;
+ EvMapping *field_mapping;
+ EvFormField *ev_field;
+
+ mapping = (PopplerFormFieldMapping *)list->data;
+
+ ev_field = ev_form_field_from_poppler_field (mapping->field);
+ if (!ev_field)
+ continue;
+
+ field_mapping = g_new0 (EvMapping, 1);
+ field_mapping->area.x1 = mapping->area.x1;
+ field_mapping->area.x2 = mapping->area.x2;
+ field_mapping->area.y1 = height - mapping->area.y2;
+ field_mapping->area.y2 = height - mapping->area.y1;
+ field_mapping->data = ev_field;
+ ev_field->page = EV_PAGE (g_object_ref (page));
+
+ g_object_set_data_full (G_OBJECT (ev_field),
+ "poppler-field",
+ g_object_ref (mapping->field),
+ (GDestroyNotify) g_object_unref);
+
+ retval = g_list_prepend (retval, field_mapping);
+ }
+
+ poppler_page_free_form_field_mapping (fields);
+
+ return retval ? ev_mapping_list_new (page->index,
+ g_list_reverse (retval),
+ (GDestroyNotify)g_object_unref) : NULL;
+}
+
+static gboolean
+pdf_document_forms_document_is_modified (EvDocumentForms *document)
+{
+ return PDF_DOCUMENT (document)->forms_modified;
+}
+
+static gchar *
+pdf_document_forms_form_field_text_get_text (EvDocumentForms *document,
+ EvFormField *field)
+
+{
+ PopplerFormField *poppler_field;
+ gchar *text;
+
+ poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
+ if (!poppler_field)
+ return NULL;
+
+ text = poppler_form_field_text_get_text (poppler_field);
+
+ return text;
+}
+
+static void
+pdf_document_forms_form_field_text_set_text (EvDocumentForms *document,
+ EvFormField *field,
+ const gchar *text)
+{
+ PopplerFormField *poppler_field;
+
+ poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
+ if (!poppler_field)
+ return;
+
+ poppler_form_field_text_set_text (poppler_field, text);
+ PDF_DOCUMENT (document)->forms_modified = TRUE;
+}
+
+static void
+pdf_document_forms_form_field_button_set_state (EvDocumentForms *document,
+ EvFormField *field,
+ gboolean state)
+{
+ PopplerFormField *poppler_field;
+
+ poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
+ if (!poppler_field)
+ return;
+
+ poppler_form_field_button_set_state (poppler_field, state);
+ PDF_DOCUMENT (document)->forms_modified = TRUE;
+}
+
+static gboolean
+pdf_document_forms_form_field_button_get_state (EvDocumentForms *document,
+ EvFormField *field)
+{
+ PopplerFormField *poppler_field;
+ gboolean state;
+
+ poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
+ if (!poppler_field)
+ return FALSE;
+
+ state = poppler_form_field_button_get_state (poppler_field);
+
+ return state;
+}
+
+static gchar *
+pdf_document_forms_form_field_choice_get_item (EvDocumentForms *document,
+ EvFormField *field,
+ gint index)
+{
+ PopplerFormField *poppler_field;
+ gchar *text;
+
+ poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
+ if (!poppler_field)
+ return NULL;
+
+ text = poppler_form_field_choice_get_item (poppler_field, index);
+
+ return text;
+}
+
+static int
+pdf_document_forms_form_field_choice_get_n_items (EvDocumentForms *document,
+ EvFormField *field)
+{
+ PopplerFormField *poppler_field;
+ gint n_items;
+
+ poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
+ if (!poppler_field)
+ return -1;
+
+ n_items = poppler_form_field_choice_get_n_items (poppler_field);
+
+ return n_items;
+}
+
+static gboolean
+pdf_document_forms_form_field_choice_is_item_selected (EvDocumentForms *document,
+ EvFormField *field,
+ gint index)
+{
+ PopplerFormField *poppler_field;
+ gboolean selected;
+
+ poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
+ if (!poppler_field)
+ return FALSE;
+
+ selected = poppler_form_field_choice_is_item_selected (poppler_field, index);
+
+ return selected;
+}
+
+static void
+pdf_document_forms_form_field_choice_select_item (EvDocumentForms *document,
+ EvFormField *field,
+ gint index)
+{
+ PopplerFormField *poppler_field;
+
+ poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
+ if (!poppler_field)
+ return;
+
+ poppler_form_field_choice_select_item (poppler_field, index);
+ PDF_DOCUMENT (document)->forms_modified = TRUE;
+}
+
+static void
+pdf_document_forms_form_field_choice_toggle_item (EvDocumentForms *document,
+ EvFormField *field,
+ gint index)
+{
+ PopplerFormField *poppler_field;
+
+ poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
+ if (!poppler_field)
+ return;
+
+ poppler_form_field_choice_toggle_item (poppler_field, index);
+ PDF_DOCUMENT (document)->forms_modified = TRUE;
+}
+
+static void
+pdf_document_forms_form_field_choice_unselect_all (EvDocumentForms *document,
+ EvFormField *field)
+{
+ PopplerFormField *poppler_field;
+
+ poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
+ if (!poppler_field)
+ return;
+
+ poppler_form_field_choice_unselect_all (poppler_field);
+ PDF_DOCUMENT (document)->forms_modified = TRUE;
+}
+
+static void
+pdf_document_forms_form_field_choice_set_text (EvDocumentForms *document,
+ EvFormField *field,
+ const gchar *text)
+{
+ PopplerFormField *poppler_field;
+
+ poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
+ if (!poppler_field)
+ return;
+
+ poppler_form_field_choice_set_text (poppler_field, text);
+ PDF_DOCUMENT (document)->forms_modified = TRUE;
+}
+
+static gchar *
+pdf_document_forms_form_field_choice_get_text (EvDocumentForms *document,
+ EvFormField *field)
+{
+ PopplerFormField *poppler_field;
+ gchar *text;
+
+ poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
+ if (!poppler_field)
+ return NULL;
+
+ text = poppler_form_field_choice_get_text (poppler_field);
+
+ return text;
+}
+
+static void
+pdf_document_document_forms_iface_init (EvDocumentFormsInterface *iface)
+{
+ iface->get_form_fields = pdf_document_forms_get_form_fields;
+ iface->document_is_modified = pdf_document_forms_document_is_modified;
+ iface->form_field_text_get_text = pdf_document_forms_form_field_text_get_text;
+ iface->form_field_text_set_text = pdf_document_forms_form_field_text_set_text;
+ iface->form_field_button_set_state = pdf_document_forms_form_field_button_set_state;
+ iface->form_field_button_get_state = pdf_document_forms_form_field_button_get_state;
+ iface->form_field_choice_get_item = pdf_document_forms_form_field_choice_get_item;
+ iface->form_field_choice_get_n_items = pdf_document_forms_form_field_choice_get_n_items;
+ iface->form_field_choice_is_item_selected = pdf_document_forms_form_field_choice_is_item_selected;
+ iface->form_field_choice_select_item = pdf_document_forms_form_field_choice_select_item;
+ iface->form_field_choice_toggle_item = pdf_document_forms_form_field_choice_toggle_item;
+ iface->form_field_choice_unselect_all = pdf_document_forms_form_field_choice_unselect_all;
+ iface->form_field_choice_set_text = pdf_document_forms_form_field_choice_set_text;
+ iface->form_field_choice_get_text = pdf_document_forms_form_field_choice_get_text;
+}
+
+/* Annotations */
+static void
+poppler_annot_color_to_gdk_color (PopplerAnnot *poppler_annot,
+ GdkColor *color)
+{
+ PopplerColor *poppler_color;
+
+ poppler_color = poppler_annot_get_color (poppler_annot);
+ if (poppler_color) {
+ color->red = poppler_color->red;
+ color->green = poppler_color->green;
+ color->blue = poppler_color->blue;
+
+ g_free (poppler_color);
+ } /* TODO: else use a default color */
+}
+
+static EvAnnotationTextIcon
+get_annot_text_icon (PopplerAnnotText *poppler_annot)
+{
+#ifdef HAVE_POPPLER_PAGE_ADD_ANNOT
+ gchar *icon = poppler_annot_text_get_icon (poppler_annot);
+ EvAnnotationTextIcon retval;
+
+ if (!icon)
+ return EV_ANNOTATION_TEXT_ICON_UNKNOWN;
+
+ if (strcmp (icon, POPPLER_ANNOT_TEXT_ICON_NOTE) == 0)
+ retval = EV_ANNOTATION_TEXT_ICON_NOTE;
+ else if (strcmp (icon, POPPLER_ANNOT_TEXT_ICON_COMMENT) == 0)
+ retval = EV_ANNOTATION_TEXT_ICON_COMMENT;
+ else if (strcmp (icon, POPPLER_ANNOT_TEXT_ICON_KEY) == 0)
+ retval = EV_ANNOTATION_TEXT_ICON_KEY;
+ else if (strcmp (icon, POPPLER_ANNOT_TEXT_ICON_HELP) == 0)
+ retval = EV_ANNOTATION_TEXT_ICON_HELP;
+ else if (strcmp (icon, POPPLER_ANNOT_TEXT_ICON_NEW_PARAGRAPH) == 0)
+ retval = EV_ANNOTATION_TEXT_ICON_NEW_PARAGRAPH;
+ else if (strcmp (icon, POPPLER_ANNOT_TEXT_ICON_PARAGRAPH) == 0)
+ retval = EV_ANNOTATION_TEXT_ICON_PARAGRAPH;
+ else if (strcmp (icon, POPPLER_ANNOT_TEXT_ICON_INSERT) == 0)
+ retval = EV_ANNOTATION_TEXT_ICON_INSERT;
+ else if (strcmp (icon, POPPLER_ANNOT_TEXT_ICON_CROSS) == 0)
+ retval = EV_ANNOTATION_TEXT_ICON_CROSS;
+ else if (strcmp (icon, POPPLER_ANNOT_TEXT_ICON_CIRCLE) == 0)
+ retval = EV_ANNOTATION_TEXT_ICON_CIRCLE;
+ else
+ retval = EV_ANNOTATION_TEXT_ICON_UNKNOWN;
+
+ g_free (icon);
+
+ return retval;
+#else
+ return EV_ANNOTATION_TEXT_ICON_UNKNOWN;
+#endif
+}
+
+static const gchar *
+get_poppler_annot_text_icon (EvAnnotationTextIcon icon)
+{
+#ifdef HAVE_POPPLER_PAGE_ADD_ANNOT
+ switch (icon) {
+ case EV_ANNOTATION_TEXT_ICON_NOTE:
+ return POPPLER_ANNOT_TEXT_ICON_NOTE;
+ case EV_ANNOTATION_TEXT_ICON_COMMENT:
+ return POPPLER_ANNOT_TEXT_ICON_COMMENT;
+ case EV_ANNOTATION_TEXT_ICON_KEY:
+ return POPPLER_ANNOT_TEXT_ICON_KEY;
+ case EV_ANNOTATION_TEXT_ICON_HELP:
+ return POPPLER_ANNOT_TEXT_ICON_HELP;
+ case EV_ANNOTATION_TEXT_ICON_NEW_PARAGRAPH:
+ return POPPLER_ANNOT_TEXT_ICON_NEW_PARAGRAPH;
+ case EV_ANNOTATION_TEXT_ICON_PARAGRAPH:
+ return POPPLER_ANNOT_TEXT_ICON_PARAGRAPH;
+ case EV_ANNOTATION_TEXT_ICON_INSERT:
+ return POPPLER_ANNOT_TEXT_ICON_INSERT;
+ case EV_ANNOTATION_TEXT_ICON_CROSS:
+ return POPPLER_ANNOT_TEXT_ICON_CROSS;
+ case EV_ANNOTATION_TEXT_ICON_CIRCLE:
+ return POPPLER_ANNOT_TEXT_ICON_CIRCLE;
+ case EV_ANNOTATION_TEXT_ICON_UNKNOWN:
+ default:
+ return POPPLER_ANNOT_TEXT_ICON_NOTE;
+ }
+#else
+ return "Note";
+#endif
+}
+
+static EvAnnotation *
+ev_annot_from_poppler_annot (PopplerAnnot *poppler_annot,
+ EvPage *page)
+{
+ EvAnnotation *ev_annot = NULL;
+ const gchar *unimplemented_annot = NULL;
+
+ switch (poppler_annot_get_annot_type (poppler_annot)) {
+ case POPPLER_ANNOT_TEXT: {
+ PopplerAnnotText *poppler_text;
+ EvAnnotationText *ev_annot_text;
+
+ poppler_text = POPPLER_ANNOT_TEXT (poppler_annot);
+
+ ev_annot = ev_annotation_text_new (page);
+
+ ev_annot_text = EV_ANNOTATION_TEXT (ev_annot);
+ ev_annotation_text_set_is_open (ev_annot_text,
+ poppler_annot_text_get_is_open (poppler_text));
+ ev_annotation_text_set_icon (ev_annot_text, get_annot_text_icon (poppler_text));
+ }
+ break;
+ case POPPLER_ANNOT_FILE_ATTACHMENT: {
+ PopplerAnnotFileAttachment *poppler_annot_attachment;
+ EvAnnotationAttachment *ev_annot_attachment;
+ PopplerAttachment *poppler_attachment;
+ gchar *data = NULL;
+ gsize size;
+ GError *error = NULL;
+
+ poppler_annot_attachment = POPPLER_ANNOT_FILE_ATTACHMENT (poppler_annot);
+ poppler_attachment = poppler_annot_file_attachment_get_attachment (poppler_annot_attachment);
+
+ if (poppler_attachment &&
+ attachment_save_to_buffer (poppler_attachment, &data, &size, &error)) {
+ EvAttachment *ev_attachment;
+
+ ev_attachment = ev_attachment_new (poppler_attachment->name,
+ poppler_attachment->description,
+ poppler_attachment->mtime,
+ poppler_attachment->ctime,
+ size, data);
+ ev_annot = ev_annotation_attachment_new (page, ev_attachment);
+ g_object_unref (ev_attachment);
+ } else if (error) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ }
+
+ if (poppler_attachment)
+ g_object_unref (poppler_attachment);
+ }
+ break;
+ case POPPLER_ANNOT_LINK:
+ case POPPLER_ANNOT_WIDGET:
+ /* Ignore link and widgets annots since they are already handled */
+ break;
+ default: {
+ GEnumValue *enum_value;
+
+ enum_value = g_enum_get_value ((GEnumClass *) g_type_class_ref (POPPLER_TYPE_ANNOT_TYPE),
+ poppler_annot_get_annot_type (poppler_annot));
+ unimplemented_annot = enum_value ? enum_value->value_name : "Unknown annotation";
+ }
+ }
+
+ if (unimplemented_annot) {
+ g_warning ("Unimplemented annotation: %s, please post a "
+ "bug report in Evince bugzilla "
+ "(http://bugzilla.mate.org) with a testcase.",
+ unimplemented_annot);
+ }
+
+ if (ev_annot) {
+ time_t utime;
+ gchar *modified;
+ gchar *contents;
+ gchar *name;
+ GdkColor color;
+
+ contents = poppler_annot_get_contents (poppler_annot);
+ if (contents) {
+ ev_annotation_set_contents (ev_annot, contents);
+ g_free (contents);
+ }
+
+ name = poppler_annot_get_name (poppler_annot);
+ if (name) {
+ ev_annotation_set_name (ev_annot, name);
+ g_free (name);
+ }
+
+ modified = poppler_annot_get_modified (poppler_annot);
+ if (poppler_date_parse (modified, &utime)) {
+ ev_annotation_set_modified_from_time (ev_annot, utime);
+ } else {
+ ev_annotation_set_modified (ev_annot, modified);
+ }
+ g_free (modified);
+
+ poppler_annot_color_to_gdk_color (poppler_annot, &color);
+ ev_annotation_set_color (ev_annot, &color);
+
+ if (POPPLER_IS_ANNOT_MARKUP (poppler_annot)) {
+ PopplerAnnotMarkup *markup;
+ gchar *label;
+ gdouble opacity;
+ PopplerRectangle poppler_rect;
+
+ markup = POPPLER_ANNOT_MARKUP (poppler_annot);
+
+ if (poppler_annot_markup_get_popup_rectangle (markup, &poppler_rect)) {
+ EvRectangle ev_rect;
+ gboolean is_open;
+ gdouble height;
+
+ poppler_page_get_size (POPPLER_PAGE (page->backend_page),
+ NULL, &height);
+ ev_rect.x1 = poppler_rect.x1;
+ ev_rect.x2 = poppler_rect.x2;
+ ev_rect.y1 = height - poppler_rect.y2;
+ ev_rect.y2 = height - poppler_rect.y1;
+
+ is_open = poppler_annot_markup_get_popup_is_open (markup);
+
+ g_object_set (ev_annot,
+ "rectangle", &ev_rect,
+ "popup_is_open", is_open,
+ "has_popup", TRUE,
+ NULL);
+ } else {
+ g_object_set (ev_annot,
+ "has_popup", FALSE,
+ NULL);
+ }
+
+ label = poppler_annot_markup_get_label (markup);
+ opacity = poppler_annot_markup_get_opacity (markup);
+
+ g_object_set (ev_annot,
+ "label", label,
+ "opacity", opacity,
+ NULL);
+
+ g_free (label);
+ }
+ }
+
+ return ev_annot;
+}
+
+static EvMappingList *
+pdf_document_annotations_get_annotations (EvDocumentAnnotations *document_annotations,
+ EvPage *page)
+{
+ GList *retval = NULL;
+ PdfDocument *pdf_document;
+ PopplerPage *poppler_page;
+ EvMappingList *mapping_list;
+ GList *annots;
+ GList *list;
+ gdouble height;
+ gint i = 0;
+
+ pdf_document = PDF_DOCUMENT (document_annotations);
+ poppler_page = POPPLER_PAGE (page->backend_page);
+
+ if (pdf_document->annots) {
+ mapping_list = (EvMappingList *)g_hash_table_lookup (pdf_document->annots,
+ GINT_TO_POINTER (page->index));
+ if (mapping_list)
+ return ev_mapping_list_ref (mapping_list);
+ }
+
+ annots = poppler_page_get_annot_mapping (poppler_page);
+ poppler_page_get_size (poppler_page, NULL, &height);
+
+ for (list = annots; list; list = list->next) {
+ PopplerAnnotMapping *mapping;
+ EvMapping *annot_mapping;
+ EvAnnotation *ev_annot;
+
+ mapping = (PopplerAnnotMapping *)list->data;
+
+ ev_annot = ev_annot_from_poppler_annot (mapping->annot, page);
+ if (!ev_annot)
+ continue;
+
+ i++;
+
+ /* Make sure annot has a unique name */
+ if (!ev_annotation_get_name (ev_annot)) {
+ gchar *name = g_strdup_printf ("annot-%d-%d", page->index, i);
+
+ ev_annotation_set_name (ev_annot, name);
+ g_free (name);
+ }
+
+ annot_mapping = g_new (EvMapping, 1);
+ annot_mapping->area.x1 = mapping->area.x1;
+ annot_mapping->area.x2 = mapping->area.x2;
+ annot_mapping->area.y1 = height - mapping->area.y2;
+ annot_mapping->area.y2 = height - mapping->area.y1;
+ annot_mapping->data = ev_annot;
+
+ g_object_set_data_full (G_OBJECT (ev_annot),
+ "poppler-annot",
+ g_object_ref (mapping->annot),
+ (GDestroyNotify) g_object_unref);
+
+ retval = g_list_prepend (retval, annot_mapping);
+ }
+
+ poppler_page_free_annot_mapping (annots);
+
+ if (!retval)
+ return NULL;
+
+ if (!pdf_document->annots) {
+ pdf_document->annots = g_hash_table_new_full (g_direct_hash,
+ g_direct_equal,
+ (GDestroyNotify)NULL,
+ (GDestroyNotify)ev_mapping_list_unref);
+ }
+
+ mapping_list = ev_mapping_list_new (page->index, g_list_reverse (retval), (GDestroyNotify)g_object_unref);
+ g_hash_table_insert (pdf_document->annots,
+ GINT_TO_POINTER (page->index),
+ ev_mapping_list_ref (mapping_list));
+
+ return mapping_list;
+}
+
+static gboolean
+pdf_document_annotations_document_is_modified (EvDocumentAnnotations *document_annotations)
+{
+ return PDF_DOCUMENT (document_annotations)->annots_modified;
+}
+
+#ifdef HAVE_POPPLER_PAGE_ADD_ANNOT
+static void
+pdf_document_annotations_add_annotation (EvDocumentAnnotations *document_annotations,
+ EvAnnotation *annot,
+ EvRectangle *rect)
+{
+ PopplerAnnot *poppler_annot;
+ PdfDocument *pdf_document;
+ EvPage *page;
+ PopplerPage *poppler_page;
+ GList *list = NULL;
+ EvMappingList *mapping_list;
+ EvMapping *annot_mapping;
+ PopplerRectangle poppler_rect;
+ gdouble height;
+ PopplerColor poppler_color;
+ GdkColor color;
+ time_t utime;
+ gchar *modified;
+ gchar *name;
+
+ pdf_document = PDF_DOCUMENT (document_annotations);
+ page = ev_annotation_get_page (annot);
+ poppler_page = POPPLER_PAGE (page->backend_page);
+
+ poppler_page_get_size (poppler_page, NULL, &height);
+ poppler_rect.x1 = rect->x1;
+ poppler_rect.x2 = rect->x2;
+ poppler_rect.y1 = height - rect->y2;
+ poppler_rect.y2 = height - rect->y1;
+ poppler_annot = poppler_annot_text_new (pdf_document->document, &poppler_rect);
+
+ ev_annotation_get_color (annot, &color);
+ poppler_color.red = color.red;
+ poppler_color.green = color.green;
+ poppler_color.blue = color.blue;
+ poppler_annot_set_color (poppler_annot, &poppler_color);
+
+ if (EV_IS_ANNOTATION_MARKUP (annot)) {
+ EvAnnotationMarkup *markup = EV_ANNOTATION_MARKUP (annot);
+ const gchar *label;
+
+ if (ev_annotation_markup_has_popup (markup)) {
+ EvRectangle popup_rect;
+
+ ev_annotation_markup_get_rectangle (markup, &popup_rect);
+ poppler_rect.x1 = popup_rect.x1;
+ poppler_rect.x2 = popup_rect.x2;
+ poppler_rect.y1 = height - popup_rect.y2;
+ poppler_rect.y2 = height - popup_rect.y1;
+ poppler_annot_markup_set_popup (POPPLER_ANNOT_MARKUP (poppler_annot), &poppler_rect);
+ poppler_annot_markup_set_popup_is_open (POPPLER_ANNOT_MARKUP (poppler_annot),
+ ev_annotation_markup_get_popup_is_open (markup));
+ }
+
+ label = ev_annotation_markup_get_label (markup);
+ if (label)
+ poppler_annot_markup_set_label (POPPLER_ANNOT_MARKUP (poppler_annot), label);
+ }
+
+ if (EV_IS_ANNOTATION_TEXT (annot)) {
+ EvAnnotationText *text = EV_ANNOTATION_TEXT (annot);
+ EvAnnotationTextIcon icon;
+
+ icon = ev_annotation_text_get_icon (text);
+ poppler_annot_text_set_icon (POPPLER_ANNOT_TEXT (poppler_annot),
+ get_poppler_annot_text_icon (icon));
+ }
+ poppler_page_add_annot (poppler_page, poppler_annot);
+
+ annot_mapping = g_new (EvMapping, 1);
+ annot_mapping->area = *rect;
+ annot_mapping->data = annot;
+ g_object_set_data_full (G_OBJECT (annot),
+ "poppler-annot",
+ g_object_ref (poppler_annot),
+ (GDestroyNotify) g_object_unref);
+
+ if (pdf_document->annots) {
+ mapping_list = (EvMappingList *)g_hash_table_lookup (pdf_document->annots,
+ GINT_TO_POINTER (page->index));
+ list = ev_mapping_list_get_list (mapping_list);
+ name = g_strdup_printf ("annot-%d-%d", page->index, g_list_length (list) + 1);
+ ev_annotation_set_name (annot, name);
+ g_free (name);
+ list = g_list_append (list, annot_mapping);
+ } else {
+ pdf_document->annots = g_hash_table_new_full (g_direct_hash,
+ g_direct_equal,
+ (GDestroyNotify)NULL,
+ (GDestroyNotify)ev_mapping_list_unref);
+ name = g_strdup_printf ("annot-%d-0", page->index);
+ ev_annotation_set_name (annot, name);
+ g_free (name);
+ list = g_list_append (list, annot_mapping);
+ mapping_list = ev_mapping_list_new (page->index, list, (GDestroyNotify)g_object_unref);
+ g_hash_table_insert (pdf_document->annots,
+ GINT_TO_POINTER (page->index),
+ ev_mapping_list_ref (mapping_list));
+ }
+
+ pdf_document->annots_modified = TRUE;
+}
+#endif /* HAVE_POPPLER_PAGE_ADD_ANNOT */
+
+static void
+pdf_document_annotations_save_annotation (EvDocumentAnnotations *document_annotations,
+ EvAnnotation *annot,
+ EvAnnotationsSaveMask mask)
+{
+ PopplerAnnot *poppler_annot;
+
+ poppler_annot = POPPLER_ANNOT (g_object_get_data (G_OBJECT (annot), "poppler-annot"));
+ if (!poppler_annot)
+ return;
+
+ if (mask & EV_ANNOTATIONS_SAVE_CONTENTS)
+ poppler_annot_set_contents (poppler_annot,
+ ev_annotation_get_contents (annot));
+
+#ifdef HAVE_POPPLER_PAGE_ADD_ANNOT
+ if (mask & EV_ANNOTATIONS_SAVE_COLOR) {
+ PopplerColor color;
+ GdkColor ev_color;
+
+ ev_annotation_get_color (annot, &ev_color);
+ color.red = ev_color.red;
+ color.green = ev_color.green;
+ color.blue = ev_color.blue;
+ poppler_annot_set_color (poppler_annot, &color);
+ }
+
+ if (EV_IS_ANNOTATION_MARKUP (annot)) {
+ EvAnnotationMarkup *ev_markup = EV_ANNOTATION_MARKUP (annot);
+ PopplerAnnotMarkup *markup = POPPLER_ANNOT_MARKUP (poppler_annot);
+
+ if (mask & EV_ANNOTATIONS_SAVE_LABEL)
+ poppler_annot_markup_set_label (markup, ev_annotation_markup_get_label (ev_markup));
+ if (mask & EV_ANNOTATIONS_SAVE_OPACITY)
+ poppler_annot_markup_set_opacity (markup, ev_annotation_markup_get_opacity (ev_markup));
+ if (mask & EV_ANNOTATIONS_SAVE_POPUP_IS_OPEN)
+ poppler_annot_markup_set_popup_is_open (markup, ev_annotation_markup_get_popup_is_open (ev_markup));
+ }
+
+ if (EV_IS_ANNOTATION_TEXT (annot)) {
+ EvAnnotationText *ev_text = EV_ANNOTATION_TEXT (annot);
+ PopplerAnnotText *text = POPPLER_ANNOT_TEXT (poppler_annot);
+
+ if (mask & EV_ANNOTATIONS_SAVE_TEXT_IS_OPEN) {
+ poppler_annot_text_set_is_open (text,
+ ev_annotation_text_get_is_open (ev_text));
+ }
+ if (mask & EV_ANNOTATIONS_SAVE_TEXT_ICON) {
+ EvAnnotationTextIcon icon;
+
+ icon = ev_annotation_text_get_icon (ev_text);
+ poppler_annot_text_set_icon (text, get_poppler_annot_text_icon (icon));
+ }
+ }
+#endif /* HAVE_POPPLER_PAGE_ADD_ANNOT */
+ PDF_DOCUMENT (document_annotations)->annots_modified = TRUE;
+}
+
+static void
+pdf_document_document_annotations_iface_init (EvDocumentAnnotationsInterface *iface)
+{
+ iface->get_annotations = pdf_document_annotations_get_annotations;
+ iface->document_is_modified = pdf_document_annotations_document_is_modified;
+#ifdef HAVE_POPPLER_PAGE_ADD_ANNOT
+ iface->add_annotation = pdf_document_annotations_add_annotation;
+#endif
+ iface->save_annotation = pdf_document_annotations_save_annotation;
+}
+
+/* Attachments */
+struct SaveToBufferData {
+ gchar *buffer;
+ gsize len, max;
+};
+
+static gboolean
+attachment_save_to_buffer_callback (const gchar *buf,
+ gsize count,
+ gpointer user_data,
+ GError **error)
+{
+ struct SaveToBufferData *sdata = (SaveToBufferData *)user_data;
+ gchar *new_buffer;
+ gsize new_max;
+
+ if (sdata->len + count > sdata->max) {
+ new_max = MAX (sdata->max * 2, sdata->len + count);
+ new_buffer = (gchar *)g_realloc (sdata->buffer, new_max);
+
+ sdata->buffer = new_buffer;
+ sdata->max = new_max;
+ }
+
+ memcpy (sdata->buffer + sdata->len, buf, count);
+ sdata->len += count;
+
+ return TRUE;
+}
+
+static gboolean
+attachment_save_to_buffer (PopplerAttachment *attachment,
+ gchar **buffer,
+ gsize *buffer_size,
+ GError **error)
+{
+ static const gint initial_max = 1024;
+ struct SaveToBufferData sdata;
+
+ *buffer = NULL;
+ *buffer_size = 0;
+
+ sdata.buffer = (gchar *) g_malloc (initial_max);
+ sdata.max = initial_max;
+ sdata.len = 0;
+
+ if (! poppler_attachment_save_to_callback (attachment,
+ attachment_save_to_buffer_callback,
+ &sdata,
+ error)) {
+ g_free (sdata.buffer);
+ return FALSE;
+ }
+
+ *buffer = sdata.buffer;
+ *buffer_size = sdata.len;
+
+ return TRUE;
+}
+
+static GList *
+pdf_document_attachments_get_attachments (EvDocumentAttachments *document)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+ GList *attachments;
+ GList *list;
+ GList *retval = NULL;
+
+ attachments = poppler_document_get_attachments (pdf_document->document);
+
+ for (list = attachments; list; list = list->next) {
+ PopplerAttachment *attachment;
+ EvAttachment *ev_attachment;
+ gchar *data = NULL;
+ gsize size;
+ GError *error = NULL;
+
+ attachment = (PopplerAttachment *) list->data;
+
+ if (attachment_save_to_buffer (attachment, &data, &size, &error)) {
+ ev_attachment = ev_attachment_new (attachment->name,
+ attachment->description,
+ attachment->mtime,
+ attachment->ctime,
+ size, data);
+
+ retval = g_list_prepend (retval, ev_attachment);
+ } else {
+ if (error) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+
+ g_free (data);
+ }
+ }
+
+ g_object_unref (attachment);
+ }
+
+ return g_list_reverse (retval);
+}
+
+static gboolean
+pdf_document_attachments_has_attachments (EvDocumentAttachments *document)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+
+ return poppler_document_has_attachments (pdf_document->document);
+}
+
+static void
+pdf_document_document_attachments_iface_init (EvDocumentAttachmentsInterface *iface)
+{
+ iface->has_attachments = pdf_document_attachments_has_attachments;
+ iface->get_attachments = pdf_document_attachments_get_attachments;
+}
+
+/* Layers */
+static gboolean
+pdf_document_layers_has_layers (EvDocumentLayers *document)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+ PopplerLayersIter *iter;
+
+ iter = poppler_layers_iter_new (pdf_document->document);
+ if (!iter)
+ return FALSE;
+ poppler_layers_iter_free (iter);
+
+ return TRUE;
+}
+
+static void
+build_layers_tree (PdfDocument *pdf_document,
+ GtkTreeModel *model,
+ GtkTreeIter *parent,
+ PopplerLayersIter *iter)
+{
+ do {
+ GtkTreeIter tree_iter;
+ PopplerLayersIter *child;
+ PopplerLayer *layer;
+ EvLayer *ev_layer = NULL;
+ gboolean visible;
+ gchar *markup;
+ gint rb_group = 0;
+
+ layer = poppler_layers_iter_get_layer (iter);
+ if (layer) {
+ markup = g_markup_escape_text (poppler_layer_get_title (layer), -1);
+ visible = poppler_layer_is_visible (layer);
+ rb_group = poppler_layer_get_radio_button_group_id (layer);
+ pdf_document->layers = g_list_append (pdf_document->layers,
+ g_object_ref (layer));
+ ev_layer = ev_layer_new (g_list_length (pdf_document->layers) - 1,
+ poppler_layer_is_parent (layer),
+ rb_group);
+ } else {
+ gchar *title;
+
+ title = poppler_layers_iter_get_title (iter);
+ markup = g_markup_escape_text (title, -1);
+ g_free (title);
+
+ visible = FALSE;
+ layer = NULL;
+ }
+
+ gtk_tree_store_append (GTK_TREE_STORE (model), &tree_iter, parent);
+ gtk_tree_store_set (GTK_TREE_STORE (model), &tree_iter,
+ EV_DOCUMENT_LAYERS_COLUMN_TITLE, markup,
+ EV_DOCUMENT_LAYERS_COLUMN_VISIBLE, visible,
+ EV_DOCUMENT_LAYERS_COLUMN_ENABLED, TRUE, /* FIXME */
+ EV_DOCUMENT_LAYERS_COLUMN_SHOWTOGGLE, (layer != NULL),
+ EV_DOCUMENT_LAYERS_COLUMN_RBGROUP, rb_group,
+ EV_DOCUMENT_LAYERS_COLUMN_LAYER, ev_layer,
+ -1);
+ if (ev_layer)
+ g_object_unref (ev_layer);
+ g_free (markup);
+
+ child = poppler_layers_iter_get_child (iter);
+ if (child)
+ build_layers_tree (pdf_document, model, &tree_iter, child);
+ poppler_layers_iter_free (child);
+ } while (poppler_layers_iter_next (iter));
+}
+
+static GtkTreeModel *
+pdf_document_layers_get_layers (EvDocumentLayers *document)
+{
+ GtkTreeModel *model = NULL;
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+ PopplerLayersIter *iter;
+
+ iter = poppler_layers_iter_new (pdf_document->document);
+ if (iter) {
+ model = (GtkTreeModel *) gtk_tree_store_new (EV_DOCUMENT_LAYERS_N_COLUMNS,
+ G_TYPE_STRING, /* TITLE */
+ G_TYPE_OBJECT, /* LAYER */
+ G_TYPE_BOOLEAN, /* VISIBLE */
+ G_TYPE_BOOLEAN, /* ENABLED */
+ G_TYPE_BOOLEAN, /* SHOWTOGGLE */
+ G_TYPE_INT); /* RBGROUP */
+ build_layers_tree (pdf_document, model, NULL, iter);
+ poppler_layers_iter_free (iter);
+ }
+ return model;
+}
+
+static void
+pdf_document_layers_show_layer (EvDocumentLayers *document,
+ EvLayer *layer)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+ guint layer_id = ev_layer_get_id (layer);
+
+ poppler_layer_show (POPPLER_LAYER (g_list_nth_data (pdf_document->layers, layer_id)));
+}
+
+static void
+pdf_document_layers_hide_layer (EvDocumentLayers *document,
+ EvLayer *layer)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+ guint layer_id = ev_layer_get_id (layer);
+
+ poppler_layer_hide (POPPLER_LAYER (g_list_nth_data (pdf_document->layers, layer_id)));
+}
+
+static gboolean
+pdf_document_layers_layer_is_visible (EvDocumentLayers *document,
+ EvLayer *layer)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document);
+ guint layer_id = ev_layer_get_id (layer);
+
+ return poppler_layer_is_visible (POPPLER_LAYER (g_list_nth_data (pdf_document->layers, layer_id)));
+}
+
+static void
+pdf_document_document_layers_iface_init (EvDocumentLayersInterface *iface)
+{
+ iface->has_layers = pdf_document_layers_has_layers;
+ iface->get_layers = pdf_document_layers_get_layers;
+ iface->show_layer = pdf_document_layers_show_layer;
+ iface->hide_layer = pdf_document_layers_hide_layer;
+ iface->layer_is_visible = pdf_document_layers_layer_is_visible;
+}
diff --git a/backend/pdf/ev-poppler.h b/backend/pdf/ev-poppler.h
new file mode 100644
index 00000000..f37f2268
--- /dev/null
+++ b/backend/pdf/ev-poppler.h
@@ -0,0 +1,40 @@
+/* pdfdocument.h: Implementation of EvDocument for PDF
+ * Copyright (C) 2004, Red Hat, Inc.
+ *
+ * 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, 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 __PDF_DOCUMENT_H__
+#define __PDF_DOCUMENT_H__
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+#define PDF_TYPE_DOCUMENT (pdf_document_get_type ())
+#define PDF_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PDF_TYPE_DOCUMENT, PdfDocument))
+#define PDF_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PDF_TYPE_DOCUMENT))
+
+typedef struct _PdfDocument PdfDocument;
+typedef struct _PdfDocumentClass PdfDocumentClass;
+
+GType pdf_document_get_type (void) G_GNUC_CONST;
+
+G_MODULE_EXPORT GType register_evince_backend (GTypeModule *module);
+
+
+G_END_DECLS
+
+#endif /* __PDF_DOCUMENT_H__ */
diff --git a/backend/pdf/pdfdocument.evince-backend.in b/backend/pdf/pdfdocument.evince-backend.in
new file mode 100644
index 00000000..d2b55ddc
--- /dev/null
+++ b/backend/pdf/pdfdocument.evince-backend.in
@@ -0,0 +1,6 @@
+[Evince Backend]
+Module=pdfdocument
+Resident=true
+_TypeDescription=PDF Documents
+MimeType=application/pdf;application/x-bzpdf;application/x-gzpdf;application/x-ext-pdf
+
diff --git a/backend/pixbuf/Makefile.am b/backend/pixbuf/Makefile.am
new file mode 100644
index 00000000..7a28e05b
--- /dev/null
+++ b/backend/pixbuf/Makefile.am
@@ -0,0 +1,30 @@
+INCLUDES = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libdocument \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DEVINCE_COMPILATION \
+ $(BACKEND_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+backend_LTLIBRARIES = libpixbufdocument.la
+
+libpixbufdocument_la_SOURCES = \
+ pixbuf-document.c \
+ pixbuf-document.h
+
+libpixbufdocument_la_LDFLAGS = $(BACKEND_LIBTOOL_FLAGS)
+libpixbufdocument_la_LIBADD = \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(BACKEND_LIBS)
+
+backend_in_files = pixbufdocument.evince-backend.in
+backend_DATA = $(backend_in_files:.evince-backend.in=.evince-backend)
+
+EXTRA_DIST = $(backend_in_files)
+
+CLEANFILES = $(backend_DATA)
+
+@EV_INTLTOOL_EVINCE_BACKEND_RULE@
+
+-include $(top_srcdir)/git.mk
diff --git a/backend/pixbuf/pixbuf-document.c b/backend/pixbuf/pixbuf-document.c
new file mode 100644
index 00000000..065fe498
--- /dev/null
+++ b/backend/pixbuf/pixbuf-document.c
@@ -0,0 +1,208 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2004, Anders Carlsson <[email protected]>
+ *
+ * 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, 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 <config.h>
+#include <glib/gi18n-lib.h>
+
+#include "pixbuf-document.h"
+#include "ev-document-thumbnails.h"
+#include "ev-document-misc.h"
+#include "ev-file-helpers.h"
+
+struct _PixbufDocumentClass
+{
+ EvDocumentClass parent_class;
+};
+
+struct _PixbufDocument
+{
+ EvDocument parent_instance;
+
+ GdkPixbuf *pixbuf;
+
+ gchar *uri;
+};
+
+typedef struct _PixbufDocumentClass PixbufDocumentClass;
+
+static void pixbuf_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
+
+EV_BACKEND_REGISTER_WITH_CODE (PixbufDocument, pixbuf_document,
+ {
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
+ pixbuf_document_document_thumbnails_iface_init)
+ });
+
+static gboolean
+pixbuf_document_load (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ PixbufDocument *pixbuf_document = PIXBUF_DOCUMENT (document);
+
+ gchar *filename;
+ GdkPixbuf *pixbuf;
+
+ /* FIXME: We could actually load uris */
+ filename = g_filename_from_uri (uri, NULL, error);
+ if (!filename)
+ return FALSE;
+
+ pixbuf = gdk_pixbuf_new_from_file (filename, error);
+
+ if (!pixbuf)
+ return FALSE;
+
+ pixbuf_document->pixbuf = pixbuf;
+ g_free (pixbuf_document->uri);
+ pixbuf_document->uri = g_strdup (uri);
+
+ return TRUE;
+}
+
+static gboolean
+pixbuf_document_save (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ PixbufDocument *pixbuf_document = PIXBUF_DOCUMENT (document);
+
+ return ev_xfer_uri_simple (pixbuf_document->uri, uri, error);
+}
+
+static int
+pixbuf_document_get_n_pages (EvDocument *document)
+{
+ return 1;
+}
+
+static void
+pixbuf_document_get_page_size (EvDocument *document,
+ EvPage *page,
+ double *width,
+ double *height)
+{
+ PixbufDocument *pixbuf_document = PIXBUF_DOCUMENT (document);
+
+ *width = gdk_pixbuf_get_width (pixbuf_document->pixbuf);
+ *height = gdk_pixbuf_get_height (pixbuf_document->pixbuf);
+}
+
+static cairo_surface_t *
+pixbuf_document_render (EvDocument *document,
+ EvRenderContext *rc)
+{
+ PixbufDocument *pixbuf_document = PIXBUF_DOCUMENT (document);
+ GdkPixbuf *scaled_pixbuf, *rotated_pixbuf;
+ cairo_surface_t *surface;
+
+ scaled_pixbuf = gdk_pixbuf_scale_simple (
+ pixbuf_document->pixbuf,
+ (gdk_pixbuf_get_width (pixbuf_document->pixbuf) * rc->scale) + 0.5,
+ (gdk_pixbuf_get_height (pixbuf_document->pixbuf) * rc->scale) + 0.5,
+ GDK_INTERP_BILINEAR);
+
+ rotated_pixbuf = gdk_pixbuf_rotate_simple (scaled_pixbuf, 360 - rc->rotation);
+ g_object_unref (scaled_pixbuf);
+
+ surface = ev_document_misc_surface_from_pixbuf (rotated_pixbuf);
+ g_object_unref (rotated_pixbuf);
+
+ return surface;
+}
+
+static void
+pixbuf_document_finalize (GObject *object)
+{
+ PixbufDocument *pixbuf_document = PIXBUF_DOCUMENT (object);
+
+ g_object_unref (pixbuf_document->pixbuf);
+ g_free (pixbuf_document->uri);
+
+ G_OBJECT_CLASS (pixbuf_document_parent_class)->finalize (object);
+}
+
+static void
+pixbuf_document_class_init (PixbufDocumentClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass);
+
+ gobject_class->finalize = pixbuf_document_finalize;
+
+ ev_document_class->load = pixbuf_document_load;
+ ev_document_class->save = pixbuf_document_save;
+ ev_document_class->get_n_pages = pixbuf_document_get_n_pages;
+ ev_document_class->get_page_size = pixbuf_document_get_page_size;
+ ev_document_class->render = pixbuf_document_render;
+}
+
+static GdkPixbuf *
+pixbuf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gboolean border)
+{
+ PixbufDocument *pixbuf_document = PIXBUF_DOCUMENT (document);
+ GdkPixbuf *pixbuf, *rotated_pixbuf;
+ gint width, height;
+
+ width = (gint) (gdk_pixbuf_get_width (pixbuf_document->pixbuf) * rc->scale);
+ height = (gint) (gdk_pixbuf_get_height (pixbuf_document->pixbuf) * rc->scale);
+
+ pixbuf = gdk_pixbuf_scale_simple (pixbuf_document->pixbuf,
+ width, height,
+ GDK_INTERP_BILINEAR);
+
+ rotated_pixbuf = gdk_pixbuf_rotate_simple (pixbuf, 360 - rc->rotation);
+ g_object_unref (pixbuf);
+
+ return rotated_pixbuf;
+}
+
+static void
+pixbuf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gint *width,
+ gint *height)
+{
+ PixbufDocument *pixbuf_document = PIXBUF_DOCUMENT (document);
+ gint p_width = gdk_pixbuf_get_width (pixbuf_document->pixbuf);
+ gint p_height = gdk_pixbuf_get_height (pixbuf_document->pixbuf);
+
+ if (rc->rotation == 90 || rc->rotation == 270) {
+ *width = (gint) (p_height * rc->scale);
+ *height = (gint) (p_width * rc->scale);
+ } else {
+ *width = (gint) (p_width * rc->scale);
+ *height = (gint) (p_height * rc->scale);
+ }
+}
+
+static void
+pixbuf_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
+{
+ iface->get_thumbnail = pixbuf_document_thumbnails_get_thumbnail;
+ iface->get_dimensions = pixbuf_document_thumbnails_get_dimensions;
+}
+
+
+static void
+pixbuf_document_init (PixbufDocument *pixbuf_document)
+{
+}
diff --git a/backend/pixbuf/pixbuf-document.h b/backend/pixbuf/pixbuf-document.h
new file mode 100644
index 00000000..6f34372d
--- /dev/null
+++ b/backend/pixbuf/pixbuf-document.h
@@ -0,0 +1,38 @@
+/* pdfdocument.h: Implementation of EvDocument for pixbufs
+ * Copyright (C) 2004, Anders Carlsson <[email protected]>
+ *
+ * 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, 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 __PIXBUF_DOCUMENT_H__
+#define __PIXBUF_DOCUMENT_H__
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+#define PIXBUF_TYPE_DOCUMENT (pixbuf_document_get_type ())
+#define PIXBUF_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PIXBUF_TYPE_DOCUMENT, PixbufDocument))
+#define PIXBUF_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PIXBUF_TYPE_DOCUMENT))
+
+typedef struct _PixbufDocument PixbufDocument;
+
+GType pixbuf_document_get_type (void) G_GNUC_CONST;
+
+G_MODULE_EXPORT GType register_evince_backend (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* __PIXBUF_DOCUMENT_H__ */
diff --git a/backend/pixbuf/pixbufdocument.evince-backend.in b/backend/pixbuf/pixbufdocument.evince-backend.in
new file mode 100644
index 00000000..9beb526b
--- /dev/null
+++ b/backend/pixbuf/pixbufdocument.evince-backend.in
@@ -0,0 +1,4 @@
+[Evince Backend]
+Module=pixbufdocument
+_TypeDescription=Images
+MimeType=image/*;
diff --git a/backend/ps/Makefile.am b/backend/ps/Makefile.am
new file mode 100644
index 00000000..3f059de1
--- /dev/null
+++ b/backend/ps/Makefile.am
@@ -0,0 +1,32 @@
+INCLUDES = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libdocument \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DEVINCE_COMPILATION \
+ $(BACKEND_CFLAGS) \
+ $(SPECTRE_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+backend_LTLIBRARIES = libpsdocument.la
+
+libpsdocument_la_SOURCES = \
+ ev-spectre.c \
+ ev-spectre.h
+
+libpsdocument_la_LDFLAGS = $(BACKEND_LIBTOOL_FLAGS)
+libpsdocument_la_LIBADD = \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(BACKEND_LIBS) \
+ $(SPECTRE_LIBS)
+
+backend_in_files = psdocument.evince-backend.in
+backend_DATA = $(backend_in_files:.evince-backend.in=.evince-backend)
+
+EXTRA_DIST = $(backend_in_files)
+
+CLEANFILES = $(backend_DATA)
+
+@EV_INTLTOOL_EVINCE_BACKEND_RULE@
+
+-include $(top_srcdir)/git.mk
diff --git a/backend/ps/ev-spectre.c b/backend/ps/ev-spectre.c
new file mode 100644
index 00000000..e1877a7b
--- /dev/null
+++ b/backend/ps/ev-spectre.c
@@ -0,0 +1,473 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include <config.h>
+#include <glib/gi18n-lib.h>
+#include <stdlib.h>
+#include <libspectre/spectre.h>
+
+#include "ev-spectre.h"
+
+#include "ev-file-exporter.h"
+#include "ev-document-thumbnails.h"
+#include "ev-document-misc.h"
+
+struct _PSDocument {
+ EvDocument object;
+
+ SpectreDocument *doc;
+ SpectreExporter *exporter;
+};
+
+struct _PSDocumentClass {
+ EvDocumentClass parent_class;
+};
+
+static void ps_document_file_exporter_iface_init (EvFileExporterInterface *iface);
+static void ps_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
+
+EV_BACKEND_REGISTER_WITH_CODE (PSDocument, ps_document,
+ {
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
+ ps_document_document_thumbnails_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER,
+ ps_document_file_exporter_iface_init);
+ });
+
+/* PSDocument */
+static void
+ps_document_init (PSDocument *ps_document)
+{
+}
+
+static void
+ps_document_dispose (GObject *object)
+{
+ PSDocument *ps = PS_DOCUMENT (object);
+
+ if (ps->doc) {
+ spectre_document_free (ps->doc);
+ ps->doc = NULL;
+ }
+
+ if (ps->exporter) {
+ spectre_exporter_free (ps->exporter);
+ ps->exporter = NULL;
+ }
+
+ G_OBJECT_CLASS (ps_document_parent_class)->dispose (object);
+}
+
+/* EvDocumentIface */
+static gboolean
+ps_document_load (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ PSDocument *ps = PS_DOCUMENT (document);
+ gchar *filename;
+
+ filename = g_filename_from_uri (uri, NULL, error);
+ if (!filename)
+ return FALSE;
+
+ ps->doc = spectre_document_new ();
+
+ spectre_document_load (ps->doc, filename);
+ if (spectre_document_status (ps->doc)) {
+ gchar *filename_dsp;
+
+ filename_dsp = g_filename_display_name (filename);
+ g_set_error (error,
+ G_FILE_ERROR,
+ G_FILE_ERROR_FAILED,
+ _("Failed to load document “%s”"),
+ filename_dsp);
+ g_free (filename_dsp);
+ g_free (filename);
+
+ return FALSE;
+ }
+
+ g_free (filename);
+
+ return TRUE;
+}
+
+static gboolean
+ps_document_save (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ PSDocument *ps = PS_DOCUMENT (document);
+ gchar *filename;
+
+ filename = g_filename_from_uri (uri, NULL, error);
+ if (!filename)
+ return FALSE;
+
+ spectre_document_save (ps->doc, filename);
+ if (spectre_document_status (ps->doc)) {
+ gchar *filename_dsp;
+
+ filename_dsp = g_filename_display_name (filename);
+ g_set_error (error,
+ G_FILE_ERROR,
+ G_FILE_ERROR_FAILED,
+ _("Failed to save document “%s”"),
+ filename_dsp);
+ g_free (filename_dsp);
+ g_free (filename);
+
+ return FALSE;
+ }
+
+ g_free (filename);
+
+ return TRUE;
+}
+
+static int
+ps_document_get_n_pages (EvDocument *document)
+{
+ PSDocument *ps = PS_DOCUMENT (document);
+
+ return spectre_document_get_n_pages (ps->doc);
+}
+
+static EvPage *
+ps_document_get_page (EvDocument *document,
+ gint index)
+{
+ PSDocument *ps = PS_DOCUMENT (document);
+ SpectrePage *ps_page;
+ EvPage *page;
+
+ ps_page = spectre_document_get_page (ps->doc, index);
+ page = ev_page_new (index);
+ page->backend_page = (EvBackendPage)ps_page;
+ page->backend_destroy_func = (EvBackendPageDestroyFunc)spectre_page_free;
+
+ return page;
+}
+
+static gint
+get_page_rotation (SpectrePage *page)
+{
+ switch (spectre_page_get_orientation (page)) {
+ default:
+ case SPECTRE_ORIENTATION_PORTRAIT:
+ return 0;
+ case SPECTRE_ORIENTATION_LANDSCAPE:
+ return 90;
+ case SPECTRE_ORIENTATION_REVERSE_PORTRAIT:
+ return 180;
+ case SPECTRE_ORIENTATION_REVERSE_LANDSCAPE:
+ return 270;
+ }
+
+ return 0;
+}
+
+static void
+ps_document_get_page_size (EvDocument *document,
+ EvPage *page,
+ double *width,
+ double *height)
+{
+ SpectrePage *ps_page;
+ gdouble page_width, page_height;
+ gint pwidth, pheight;
+ gint rotate;
+
+ ps_page = (SpectrePage *)page->backend_page;
+
+ spectre_page_get_size (ps_page, &pwidth, &pheight);
+
+ rotate = get_page_rotation (ps_page);
+ if (rotate == 90 || rotate == 270) {
+ page_height = pwidth;
+ page_width = pheight;
+ } else {
+ page_width = pwidth;
+ page_height = pheight;
+ }
+
+ if (width) {
+ *width = page_width;
+ }
+
+ if (height) {
+ *height = page_height;
+ }
+}
+
+static char *
+ps_document_get_page_label (EvDocument *document,
+ EvPage *page)
+{
+ return g_strdup (spectre_page_get_label ((SpectrePage *)page->backend_page));
+}
+
+static EvDocumentInfo *
+ps_document_get_info (EvDocument *document)
+{
+ PSDocument *ps = PS_DOCUMENT (document);
+ EvDocumentInfo *info;
+ const gchar *creator;
+ SpectrePage *ps_page;
+ gint width, height;
+
+ info = g_new0 (EvDocumentInfo, 1);
+ info->fields_mask = EV_DOCUMENT_INFO_TITLE |
+ EV_DOCUMENT_INFO_FORMAT |
+ EV_DOCUMENT_INFO_CREATOR |
+ EV_DOCUMENT_INFO_N_PAGES |
+ EV_DOCUMENT_INFO_PAPER_SIZE;
+
+ creator = spectre_document_get_creator (ps->doc);
+
+ ps_page = spectre_document_get_page (ps->doc, 0);
+ spectre_page_get_size (ps_page, &width, &height);
+ spectre_page_free (ps_page);
+
+ info->title = g_strdup (spectre_document_get_title (ps->doc));
+ info->format = g_strdup (spectre_document_get_format (ps->doc));
+ info->creator = g_strdup (creator ? creator : spectre_document_get_for (ps->doc));
+ info->n_pages = spectre_document_get_n_pages (ps->doc);
+ info->paper_width = width / 72.0f * 25.4f;
+ info->paper_height = height / 72.0f * 25.4f;
+
+ return info;
+}
+
+static gboolean
+ps_document_get_backend_info (EvDocument *document,
+ EvDocumentBackendInfo *info)
+{
+ info->name = "libspectre";
+ info->version = SPECTRE_VERSION_STRING;
+
+ return TRUE;
+}
+
+static cairo_surface_t *
+ps_document_render (EvDocument *document,
+ EvRenderContext *rc)
+{
+ SpectrePage *ps_page;
+ SpectreRenderContext *src;
+ gint width_points;
+ gint height_points;
+ gint width, height;
+ gint swidth, sheight;
+ guchar *data = NULL;
+ gint stride;
+ gint rotation;
+ cairo_surface_t *surface;
+ static const cairo_user_data_key_t key;
+
+ ps_page = (SpectrePage *)rc->page->backend_page;
+
+ spectre_page_get_size (ps_page, &width_points, &height_points);
+
+ width = (gint) ((width_points * rc->scale) + 0.5);
+ height = (gint) ((height_points * rc->scale) + 0.5);
+ rotation = (rc->rotation + get_page_rotation (ps_page)) % 360;
+
+ src = spectre_render_context_new ();
+ spectre_render_context_set_scale (src,
+ (gdouble)width / width_points,
+ (gdouble)height / height_points);
+ spectre_render_context_set_rotation (src, rotation);
+ spectre_page_render (ps_page, src, &data, &stride);
+ spectre_render_context_free (src);
+
+ if (!data) {
+ return NULL;
+ }
+
+ if (spectre_page_status (ps_page)) {
+ g_warning ("%s", spectre_status_to_string (spectre_page_status (ps_page)));
+ g_free (data);
+
+ return NULL;
+ }
+
+ if (rotation == 90 || rotation == 270) {
+ swidth = height;
+ sheight = width;
+ } else {
+ swidth = width;
+ sheight = height;
+ }
+
+ surface = cairo_image_surface_create_for_data (data,
+ CAIRO_FORMAT_RGB24,
+ swidth, sheight,
+ stride);
+ cairo_surface_set_user_data (surface, &key,
+ data, (cairo_destroy_func_t)g_free);
+ return surface;
+}
+
+static void
+ps_document_class_init (PSDocumentClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass);
+
+ object_class->dispose = ps_document_dispose;
+
+ ev_document_class->load = ps_document_load;
+ ev_document_class->save = ps_document_save;
+ ev_document_class->get_n_pages = ps_document_get_n_pages;
+ ev_document_class->get_page = ps_document_get_page;
+ ev_document_class->get_page_size = ps_document_get_page_size;
+ ev_document_class->get_page_label = ps_document_get_page_label;
+ ev_document_class->get_info = ps_document_get_info;
+ ev_document_class->get_backend_info = ps_document_get_backend_info;
+ ev_document_class->render = ps_document_render;
+}
+
+/* EvDocumentThumbnailsIface */
+static GdkPixbuf *
+ps_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails,
+ EvRenderContext *rc,
+ gboolean border)
+{
+ PSDocument *ps = PS_DOCUMENT (document_thumbnails);
+ cairo_surface_t *surface;
+ GdkPixbuf *pixbuf = NULL;
+
+ surface = ps_document_render (EV_DOCUMENT (ps), rc);
+ if (!surface) {
+ g_warning ("Error rendering thumbnail");
+ return NULL;
+ }
+
+ pixbuf = ev_document_misc_pixbuf_from_surface (surface);
+ cairo_surface_destroy (surface);
+
+ if (border) {
+ GdkPixbuf *border_pixbuf;
+
+ border_pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, pixbuf);
+ g_object_unref (pixbuf);
+ pixbuf = border_pixbuf;
+ }
+
+ return pixbuf;
+}
+
+static void
+ps_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnails,
+ EvRenderContext *rc,
+ gint *width,
+ gint *height)
+{
+ PSDocument *ps = PS_DOCUMENT (document_thumbnails);
+ gdouble page_width, page_height;
+
+ ps_document_get_page_size (EV_DOCUMENT (ps),
+ rc->page,
+ &page_width, &page_height);
+
+ if (rc->rotation == 90 || rc->rotation == 270) {
+ *width = (gint) (page_height * rc->scale);
+ *height = (gint) (page_width * rc->scale);
+ } else {
+ *width = (gint) (page_width * rc->scale);
+ *height = (gint) (page_height * rc->scale);
+ }
+}
+
+static void
+ps_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
+{
+ iface->get_thumbnail = ps_document_thumbnails_get_thumbnail;
+ iface->get_dimensions = ps_document_thumbnails_get_dimensions;
+}
+
+/* EvFileExporterIface */
+static void
+ps_document_file_exporter_begin (EvFileExporter *exporter,
+ EvFileExporterContext *fc)
+{
+ PSDocument *ps = PS_DOCUMENT (exporter);
+
+ if (ps->exporter)
+ spectre_exporter_free (ps->exporter);
+
+ switch (fc->format) {
+ case EV_FILE_FORMAT_PS:
+ ps->exporter =
+ spectre_exporter_new (ps->doc,
+ SPECTRE_EXPORTER_FORMAT_PS);
+ break;
+ case EV_FILE_FORMAT_PDF:
+ ps->exporter =
+ spectre_exporter_new (ps->doc,
+ SPECTRE_EXPORTER_FORMAT_PDF);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ spectre_exporter_begin (ps->exporter, fc->filename);
+}
+
+static void
+ps_document_file_exporter_do_page (EvFileExporter *exporter,
+ EvRenderContext *rc)
+{
+ PSDocument *ps = PS_DOCUMENT (exporter);
+
+ spectre_exporter_do_page (ps->exporter, rc->page->index);
+}
+
+static void
+ps_document_file_exporter_end (EvFileExporter *exporter)
+{
+ PSDocument *ps = PS_DOCUMENT (exporter);
+
+ spectre_exporter_end (ps->exporter);
+}
+
+static EvFileExporterCapabilities
+ps_document_file_exporter_get_capabilities (EvFileExporter *exporter)
+{
+ return EV_FILE_EXPORTER_CAN_PAGE_SET |
+ EV_FILE_EXPORTER_CAN_COPIES |
+ EV_FILE_EXPORTER_CAN_COLLATE |
+ EV_FILE_EXPORTER_CAN_REVERSE |
+ EV_FILE_EXPORTER_CAN_GENERATE_PS |
+ EV_FILE_EXPORTER_CAN_GENERATE_PDF;
+}
+
+static void
+ps_document_file_exporter_iface_init (EvFileExporterInterface *iface)
+{
+ iface->begin = ps_document_file_exporter_begin;
+ iface->do_page = ps_document_file_exporter_do_page;
+ iface->end = ps_document_file_exporter_end;
+ iface->get_capabilities = ps_document_file_exporter_get_capabilities;
+}
diff --git a/backend/ps/ev-spectre.h b/backend/ps/ev-spectre.h
new file mode 100644
index 00000000..17b18db0
--- /dev/null
+++ b/backend/ps/ev-spectre.h
@@ -0,0 +1,48 @@
+/*
+ * Ghostscript widget for GTK/MATE
+ *
+ * Copyright 1998 - 2005 The Free Software Foundation
+ *
+ * Authors: Jaka Mocnik, Federico Mena (Quartic), Szekeres Istvan (Pista)
+ *
+ * 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.
+ */
+
+#ifndef __PS_DOCUMENT_H__
+#define __PS_DOCUMENT_H__
+
+#include <glib-object.h>
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+#define PS_TYPE_DOCUMENT (ps_document_get_type())
+#define PS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PS_TYPE_DOCUMENT, PSDocument))
+#define PS_DOCUMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PS_TYPE_DOCUMENT, PSDocumentClass))
+#define PS_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PS_TYPE_DOCUMENT))
+#define PS_DOCUMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PS_TYPE_DOCUMENT, PSDocumentClass))
+
+typedef struct _PSDocument PSDocument;
+typedef struct _PSDocumentClass PSDocumentClass;
+
+GType ps_document_get_type (void) G_GNUC_CONST;
+
+G_MODULE_EXPORT GType register_evince_backend (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* __PS_DOCUMENT_H__ */
diff --git a/backend/ps/psdocument.evince-backend.in b/backend/ps/psdocument.evince-backend.in
new file mode 100644
index 00000000..af24be61
--- /dev/null
+++ b/backend/ps/psdocument.evince-backend.in
@@ -0,0 +1,5 @@
+[Evince Backend]
+Module=psdocument
+Resident=true
+_TypeDescription=PostScript Documents
+MimeType=application/postscript;application/x-bzpostscript;application/x-gzpostscript;image/x-eps;image/x-bzeps;image/x-gzeps
diff --git a/backend/tiff/Makefile.am b/backend/tiff/Makefile.am
new file mode 100644
index 00000000..9f1a00e6
--- /dev/null
+++ b/backend/tiff/Makefile.am
@@ -0,0 +1,33 @@
+INCLUDES = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libdocument \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DEVINCE_COMPILATION \
+ $(BACKEND_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+backend_LTLIBRARIES = libtiffdocument.la
+
+libtiffdocument_la_SOURCES = \
+ tiff-document.c \
+ tiff-document.h \
+ tiff2ps.c \
+ tiff2ps.h
+
+libtiffdocument_la_LDFLAGS = $(BACKEND_LIBTOOL_FLAGS)
+libtiffdocument_la_LIBADD = \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(BACKEND_LIBS) \
+ -ltiff
+
+backend_in_files = tiffdocument.evince-backend.in
+backend_DATA = $(backend_in_files:.evince-backend.in=.evince-backend)
+
+EXTRA_DIST = $(backend_in_files)
+
+CLEANFILES = $(backend_DATA)
+
+@EV_INTLTOOL_EVINCE_BACKEND_RULE@
+
+-include $(top_srcdir)/git.mk
diff --git a/backend/tiff/tiff-document.c b/backend/tiff/tiff-document.c
new file mode 100644
index 00000000..9c113b49
--- /dev/null
+++ b/backend/tiff/tiff-document.c
@@ -0,0 +1,533 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2005, Jonathan Blandford <[email protected]>
+ *
+ * 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, 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.
+ */
+
+/* FIXME: Should probably buffer calls to libtiff with TIFFSetWarningHandler
+ */
+
+#include "config.h"
+
+#include <config.h>
+#include <stdio.h>
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+
+#include "tiffio.h"
+#include "tiff2ps.h"
+#include "tiff-document.h"
+#include "ev-document-misc.h"
+#include "ev-document-thumbnails.h"
+#include "ev-file-exporter.h"
+#include "ev-file-helpers.h"
+
+struct _TiffDocumentClass
+{
+ EvDocumentClass parent_class;
+};
+
+struct _TiffDocument
+{
+ EvDocument parent_instance;
+
+ TIFF *tiff;
+ gint n_pages;
+ TIFF2PSContext *ps_export_ctx;
+
+ gchar *uri;
+};
+
+typedef struct _TiffDocumentClass TiffDocumentClass;
+
+static void tiff_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface);
+static void tiff_document_document_file_exporter_iface_init (EvFileExporterInterface *iface);
+
+EV_BACKEND_REGISTER_WITH_CODE (TiffDocument, tiff_document,
+ {
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
+ tiff_document_document_thumbnails_iface_init);
+ EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER,
+ tiff_document_document_file_exporter_iface_init);
+ });
+
+static TIFFErrorHandler orig_error_handler = NULL;
+static TIFFErrorHandler orig_warning_handler = NULL;
+
+static void
+push_handlers (void)
+{
+ orig_error_handler = TIFFSetErrorHandler (NULL);
+ orig_warning_handler = TIFFSetWarningHandler (NULL);
+}
+
+static void
+pop_handlers (void)
+{
+ TIFFSetErrorHandler (orig_error_handler);
+ TIFFSetWarningHandler (orig_warning_handler);
+}
+
+static gboolean
+tiff_document_load (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ TiffDocument *tiff_document = TIFF_DOCUMENT (document);
+ gchar *filename;
+ TIFF *tiff;
+
+ filename = g_filename_from_uri (uri, NULL, error);
+ if (!filename)
+ return FALSE;
+
+ push_handlers ();
+ tiff = TIFFOpen (filename, "r");
+ if (tiff) {
+ guint32 w, h;
+
+ /* FIXME: unused data? why bother here */
+ TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &w);
+ TIFFGetField(tiff, TIFFTAG_IMAGELENGTH, &h);
+ }
+
+ if (!tiff) {
+ pop_handlers ();
+
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("Invalid document"));
+
+ g_free (filename);
+ return FALSE;
+ }
+
+ tiff_document->tiff = tiff;
+ g_free (tiff_document->uri);
+ g_free (filename);
+ tiff_document->uri = g_strdup (uri);
+
+ pop_handlers ();
+ return TRUE;
+}
+
+static gboolean
+tiff_document_save (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ TiffDocument *tiff_document = TIFF_DOCUMENT (document);
+
+ return ev_xfer_uri_simple (tiff_document->uri, uri, error);
+}
+
+static int
+tiff_document_get_n_pages (EvDocument *document)
+{
+ TiffDocument *tiff_document = TIFF_DOCUMENT (document);
+
+ g_return_val_if_fail (TIFF_IS_DOCUMENT (document), 0);
+ g_return_val_if_fail (tiff_document->tiff != NULL, 0);
+
+ if (tiff_document->n_pages == -1) {
+ push_handlers ();
+ tiff_document->n_pages = 0;
+
+ do {
+ tiff_document->n_pages ++;
+ }
+ while (TIFFReadDirectory (tiff_document->tiff));
+ pop_handlers ();
+ }
+
+ return tiff_document->n_pages;
+}
+
+static void
+tiff_document_get_resolution (TiffDocument *tiff_document,
+ gfloat *x_res,
+ gfloat *y_res)
+{
+ gfloat x = 72.0, y = 72.0;
+ gushort unit;
+
+ if (TIFFGetField (tiff_document->tiff, TIFFTAG_XRESOLUTION, &x) &&
+ TIFFGetField (tiff_document->tiff, TIFFTAG_YRESOLUTION, &y)) {
+ if (TIFFGetFieldDefaulted (tiff_document->tiff, TIFFTAG_RESOLUTIONUNIT, &unit)) {
+ if (unit == RESUNIT_CENTIMETER) {
+ x *= 2.54;
+ y *= 2.54;
+ }
+ }
+ }
+
+ *x_res = x;
+ *y_res = y;
+}
+
+static void
+tiff_document_get_page_size (EvDocument *document,
+ EvPage *page,
+ double *width,
+ double *height)
+{
+ guint32 w, h;
+ gfloat x_res, y_res;
+ TiffDocument *tiff_document = TIFF_DOCUMENT (document);
+
+ g_return_if_fail (TIFF_IS_DOCUMENT (document));
+ g_return_if_fail (tiff_document->tiff != NULL);
+
+ push_handlers ();
+ if (TIFFSetDirectory (tiff_document->tiff, page->index) != 1) {
+ pop_handlers ();
+ return;
+ }
+
+ TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGEWIDTH, &w);
+ TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGELENGTH, &h);
+ tiff_document_get_resolution (tiff_document, &x_res, &y_res);
+ h = h * (x_res / y_res);
+
+ *width = w;
+ *height = h;
+
+ pop_handlers ();
+}
+
+static cairo_surface_t *
+tiff_document_render (EvDocument *document,
+ EvRenderContext *rc)
+{
+ TiffDocument *tiff_document = TIFF_DOCUMENT (document);
+ int width, height;
+ float x_res, y_res;
+ gint rowstride, bytes;
+ guchar *pixels = NULL;
+ guchar *p;
+ int orientation;
+ cairo_surface_t *surface;
+ cairo_surface_t *rotated_surface;
+ static const cairo_user_data_key_t key;
+
+ g_return_val_if_fail (TIFF_IS_DOCUMENT (document), NULL);
+ g_return_val_if_fail (tiff_document->tiff != NULL, NULL);
+
+ push_handlers ();
+ if (TIFFSetDirectory (tiff_document->tiff, rc->page->index) != 1) {
+ pop_handlers ();
+ return NULL;
+ }
+
+ if (!TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGEWIDTH, &width)) {
+ pop_handlers ();
+ return NULL;
+ }
+
+ if (! TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGELENGTH, &height)) {
+ pop_handlers ();
+ return NULL;
+ }
+
+ if (! TIFFGetField (tiff_document->tiff, TIFFTAG_ORIENTATION, &orientation)) {
+ orientation = ORIENTATION_TOPLEFT;
+ }
+
+ tiff_document_get_resolution (tiff_document, &x_res, &y_res);
+
+ pop_handlers ();
+
+ /* Sanity check the doc */
+ if (width <= 0 || height <= 0)
+ return NULL;
+
+#ifdef HAVE_CAIRO_FORMAT_STRIDE_FOR_WIDTH
+ rowstride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, width);
+#else
+ rowstride = width * 4;
+#endif
+ if (rowstride / 4 != width)
+ /* overflow, or cairo was changed in an unsupported way */
+ return NULL;
+
+ bytes = height * rowstride;
+ if (bytes / rowstride != height)
+ /* overflow */
+ return NULL;
+
+ pixels = g_try_malloc (bytes);
+ if (!pixels)
+ return NULL;
+
+ surface = cairo_image_surface_create_for_data (pixels,
+ CAIRO_FORMAT_RGB24,
+ width, height,
+ rowstride);
+ cairo_surface_set_user_data (surface, &key,
+ pixels, (cairo_destroy_func_t)g_free);
+
+ TIFFReadRGBAImageOriented (tiff_document->tiff,
+ width, height,
+ (uint32 *)pixels,
+ orientation, 1);
+ pop_handlers ();
+
+ /* Convert the format returned by libtiff to
+ * what cairo expects
+ */
+ p = pixels;
+ while (p < pixels + bytes) {
+ guint32 *pixel = (guint32*)p;
+ guint8 r = TIFFGetR(*pixel);
+ guint8 g = TIFFGetG(*pixel);
+ guint8 b = TIFFGetB(*pixel);
+ guint8 a = TIFFGetA(*pixel);
+
+ *pixel = (a << 24) | (r << 16) | (g << 8) | b;
+
+ p += 4;
+ }
+
+ rotated_surface = ev_document_misc_surface_rotate_and_scale (surface,
+ (width * rc->scale) + 0.5,
+ (height * rc->scale * (x_res / y_res)) + 0.5,
+ rc->rotation);
+ cairo_surface_destroy (surface);
+
+ return rotated_surface;
+}
+
+static GdkPixbuf *
+tiff_document_render_pixbuf (EvDocument *document,
+ EvRenderContext *rc)
+{
+ TiffDocument *tiff_document = TIFF_DOCUMENT (document);
+ int width, height;
+ float x_res, y_res;
+ gint rowstride, bytes;
+ guchar *pixels = NULL;
+ GdkPixbuf *pixbuf;
+ GdkPixbuf *scaled_pixbuf;
+ GdkPixbuf *rotated_pixbuf;
+
+ push_handlers ();
+ if (TIFFSetDirectory (tiff_document->tiff, rc->page->index) != 1) {
+ pop_handlers ();
+ return NULL;
+ }
+
+ if (!TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGEWIDTH, &width)) {
+ pop_handlers ();
+ return NULL;
+ }
+
+ if (! TIFFGetField (tiff_document->tiff, TIFFTAG_IMAGELENGTH, &height)) {
+ pop_handlers ();
+ return NULL;
+ }
+
+ tiff_document_get_resolution (tiff_document, &x_res, &y_res);
+
+ pop_handlers ();
+
+ /* Sanity check the doc */
+ if (width <= 0 || height <= 0)
+ return NULL;
+
+ rowstride = width * 4;
+ if (rowstride / 4 != width)
+ /* overflow */
+ return NULL;
+
+ bytes = height * rowstride;
+ if (bytes / rowstride != height)
+ /* overflow */
+ return NULL;
+
+ pixels = g_try_malloc (bytes);
+ if (!pixels)
+ return NULL;
+
+ pixbuf = gdk_pixbuf_new_from_data (pixels, GDK_COLORSPACE_RGB, TRUE, 8,
+ width, height, rowstride,
+ (GdkPixbufDestroyNotify) g_free, NULL);
+ TIFFReadRGBAImageOriented (tiff_document->tiff,
+ width, height,
+ (uint32 *)pixels,
+ ORIENTATION_TOPLEFT, 1);
+ pop_handlers ();
+
+ scaled_pixbuf = gdk_pixbuf_scale_simple (pixbuf,
+ width * rc->scale,
+ height * rc->scale * (x_res / y_res),
+ GDK_INTERP_BILINEAR);
+ g_object_unref (pixbuf);
+
+ rotated_pixbuf = gdk_pixbuf_rotate_simple (scaled_pixbuf, 360 - rc->rotation);
+ g_object_unref (scaled_pixbuf);
+
+ return rotated_pixbuf;
+}
+
+static gchar *
+tiff_document_get_page_label (EvDocument *document,
+ EvPage *page)
+{
+ TiffDocument *tiff_document = TIFF_DOCUMENT (document);
+ static gchar *label;
+
+ if (TIFFGetField (tiff_document->tiff, TIFFTAG_PAGENAME, &label) &&
+ g_utf8_validate (label, -1, NULL)) {
+ return g_strdup (label);
+ }
+
+ return NULL;
+}
+
+static void
+tiff_document_finalize (GObject *object)
+{
+ TiffDocument *tiff_document = TIFF_DOCUMENT (object);
+
+ if (tiff_document->tiff)
+ TIFFClose (tiff_document->tiff);
+ if (tiff_document->uri)
+ g_free (tiff_document->uri);
+
+ G_OBJECT_CLASS (tiff_document_parent_class)->finalize (object);
+}
+
+static void
+tiff_document_class_init (TiffDocumentClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass);
+
+ gobject_class->finalize = tiff_document_finalize;
+
+ ev_document_class->load = tiff_document_load;
+ ev_document_class->save = tiff_document_save;
+ ev_document_class->get_n_pages = tiff_document_get_n_pages;
+ ev_document_class->get_page_size = tiff_document_get_page_size;
+ ev_document_class->render = tiff_document_render;
+ ev_document_class->get_page_label = tiff_document_get_page_label;
+}
+
+static GdkPixbuf *
+tiff_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gboolean border)
+{
+ GdkPixbuf *pixbuf;
+
+ pixbuf = tiff_document_render_pixbuf (EV_DOCUMENT (document), rc);
+
+ if (border) {
+ GdkPixbuf *tmp_pixbuf = pixbuf;
+
+ pixbuf = ev_document_misc_get_thumbnail_frame (-1, -1, tmp_pixbuf);
+ g_object_unref (tmp_pixbuf);
+ }
+
+ return pixbuf;
+}
+
+static void
+tiff_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gint *width,
+ gint *height)
+{
+ gdouble page_width, page_height;
+
+ tiff_document_get_page_size (EV_DOCUMENT (document),
+ rc->page,
+ &page_width, &page_height);
+
+ if (rc->rotation == 90 || rc->rotation == 270) {
+ *width = (gint) (page_height * rc->scale);
+ *height = (gint) (page_width * rc->scale);
+ } else {
+ *width = (gint) (page_width * rc->scale);
+ *height = (gint) (page_height * rc->scale);
+ }
+}
+
+static void
+tiff_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface)
+{
+ iface->get_thumbnail = tiff_document_thumbnails_get_thumbnail;
+ iface->get_dimensions = tiff_document_thumbnails_get_dimensions;
+}
+
+/* postscript exporter implementation */
+static void
+tiff_document_file_exporter_begin (EvFileExporter *exporter,
+ EvFileExporterContext *fc)
+{
+ TiffDocument *document = TIFF_DOCUMENT (exporter);
+
+ document->ps_export_ctx = tiff2ps_context_new(fc->filename);
+}
+
+static void
+tiff_document_file_exporter_do_page (EvFileExporter *exporter, EvRenderContext *rc)
+{
+ TiffDocument *document = TIFF_DOCUMENT (exporter);
+
+ if (document->ps_export_ctx == NULL)
+ return;
+ if (TIFFSetDirectory (document->tiff, rc->page->index) != 1)
+ return;
+ tiff2ps_process_page (document->ps_export_ctx, document->tiff,
+ 0, 0, 0, 0, 0);
+}
+
+static void
+tiff_document_file_exporter_end (EvFileExporter *exporter)
+{
+ TiffDocument *document = TIFF_DOCUMENT (exporter);
+
+ if (document->ps_export_ctx == NULL)
+ return;
+ tiff2ps_context_finalize(document->ps_export_ctx);
+}
+
+static EvFileExporterCapabilities
+tiff_document_file_exporter_get_capabilities (EvFileExporter *exporter)
+{
+ return EV_FILE_EXPORTER_CAN_PAGE_SET |
+ EV_FILE_EXPORTER_CAN_COPIES |
+ EV_FILE_EXPORTER_CAN_COLLATE |
+ EV_FILE_EXPORTER_CAN_REVERSE |
+ EV_FILE_EXPORTER_CAN_GENERATE_PS;
+}
+
+static void
+tiff_document_document_file_exporter_iface_init (EvFileExporterInterface *iface)
+{
+ iface->begin = tiff_document_file_exporter_begin;
+ iface->do_page = tiff_document_file_exporter_do_page;
+ iface->end = tiff_document_file_exporter_end;
+ iface->get_capabilities = tiff_document_file_exporter_get_capabilities;
+}
+
+static void
+tiff_document_init (TiffDocument *tiff_document)
+{
+ tiff_document->n_pages = -1;
+}
diff --git a/backend/tiff/tiff-document.h b/backend/tiff/tiff-document.h
new file mode 100644
index 00000000..a188f143
--- /dev/null
+++ b/backend/tiff/tiff-document.h
@@ -0,0 +1,38 @@
+
+/* pdfdocument.h: Implementation of EvDocument for tiffs
+ * Copyright (C) 2005, Jonathan Blandford <[email protected]>
+ *
+ * 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, 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 __TIFF_DOCUMENT_H__
+#define __TIFF_DOCUMENT_H__
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+#define TIFF_TYPE_DOCUMENT (tiff_document_get_type ())
+#define TIFF_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TIFF_TYPE_DOCUMENT, TiffDocument))
+#define TIFF_IS_DOCUMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TIFF_TYPE_DOCUMENT))
+
+typedef struct _TiffDocument TiffDocument;
+
+GType tiff_document_get_type (void) G_GNUC_CONST;
+G_MODULE_EXPORT GType register_evince_backend (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* __TIFF_DOCUMENT_H__ */
diff --git a/backend/tiff/tiff2ps.c b/backend/tiff/tiff2ps.c
new file mode 100644
index 00000000..43a6cb32
--- /dev/null
+++ b/backend/tiff/tiff2ps.c
@@ -0,0 +1,1872 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* $Id$ */
+
+/*
+ * Copyright (c) 1988-1997 Sam Leffler
+ * Copyright (c) 1991-1997 Silicon Graphics, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that (i) the above copyright notices and this permission notice appear in
+ * all copies of the software and related documentation, and (ii) the names of
+ * Sam Leffler and Silicon Graphics may not be used in any advertising or
+ * publicity relating to the software without the specific, prior written
+ * permission of Sam Leffler and Silicon Graphics.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
+ * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
+ * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
+ * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THIS SOFTWARE.
+ */
+
+/*
+ * Modified for use as Evince TIFF ps exporter by
+ * Matthew S. Wilson <[email protected]>
+ * Modifications Copyright (C) 2005 rpath, Inc.
+ *
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h> /* for atof */
+#include <math.h>
+#include <time.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gstdio.h>
+
+#include "tiff2ps.h"
+
+/*
+ * Revision history
+ *
+ * 2001-Mar-21
+ * I (Bruce A. Mallett) added this revision history comment ;)
+ *
+ * Fixed PS_Lvl2page() code which outputs non-ASCII85 raw
+ * data. Moved test for when to output a line break to
+ * *after* the output of a character. This just serves
+ * to fix an eye-nuisance where the first line of raw
+ * data was one character shorter than subsequent lines.
+ *
+ * Added an experimental ASCII85 encoder which can be used
+ * only when there is a single buffer of bytes to be encoded.
+ * This version is much faster at encoding a straight-line
+ * buffer of data because it can avoid alot of the loop
+ * overhead of the byte-by-bye version. To use this version
+ * you need to define EXP_ASCII85ENCODER (experimental ...).
+ *
+ * Added bug fix given by Michael Schmidt to PS_Lvl2page()
+ * in which an end-of-data marker ('>') was not being output
+ * when producing non-ASCII85 encoded PostScript Level 2
+ * data.
+ *
+ * Fixed PS_Lvl2colorspace() so that it no longer assumes that
+ * a TIFF having more than 2 planes is a CMYK. This routine
+ * no longer looks at the samples per pixel but instead looks
+ * at the "photometric" value. This change allows support of
+ * CMYK TIFFs.
+ *
+ * Modified the PostScript L2 imaging loop so as to test if
+ * the input stream is still open before attempting to do a
+ * flushfile on it. This was done because some RIPs close
+ * the stream after doing the image operation.
+ *
+ * Got rid of the realloc() being done inside a loop in the
+ * PSRawDataBW() routine. The code now walks through the
+ * byte-size array outside the loop to determine the largest
+ * size memory block that will be needed.
+ *
+ * Added "-m" switch to ask tiff2ps to, where possible, use the
+ * "imagemask" operator instead of the "image" operator.
+ *
+ * Added the "-i #" switch to allow interpolation to be disabled.
+ *
+ * Unrolled a loop or two to improve performance.
+ */
+
+/*
+ * Define EXP_ASCII85ENCODER if you want to use an experimental
+ * version of the ASCII85 encoding routine. The advantage of
+ * using this routine is that tiff2ps will convert to ASCII85
+ * encoding at between 3 and 4 times the speed as compared to
+ * using the old (non-experimental) encoder. The disadvantage
+ * is that you will be using a new (and unproven) encoding
+ * routine. So user beware, you have been warned!
+ */
+
+#define EXP_ASCII85ENCODER
+
+/*
+ * NB: this code assumes uint32 works with printf's %l[ud].
+ */
+
+struct _TIFF2PSContext
+{
+ char *filename; /* input filename */
+ FILE *fd; /* output file stream */
+ int ascii85; /* use ASCII85 encoding */
+ int interpolate; /* interpolate level2 image */
+ int level2; /* generate PostScript level 2 */
+ int level3; /* generate PostScript level 3 */
+ int generateEPSF; /* generate Encapsulated PostScript */
+ int PSduplex; /* enable duplex printing */
+ int PStumble; /* enable top edge binding */
+ int PSavoiddeadzone; /* enable avoiding printer deadzone */
+ double maxPageHeight; /* maximum size to fit on page */
+ double splitOverlap; /* amount for split pages to overlag */
+ int rotate; /* rotate image by 180 degrees */
+ int useImagemask; /* Use imagemask instead of image operator */
+ uint16 res_unit; /* Resolution units: 2 - inches, 3 - cm */
+ int npages; /* number of pages processed */
+
+ tsize_t tf_bytesperrow;
+ tsize_t ps_bytesperrow;
+ tsize_t tf_rowsperstrip;
+ tsize_t tf_numberstrips;
+
+ /*
+ * ASCII85 Encoding Support.
+ */
+ unsigned char ascii85buf[10];
+ int ascii85count;
+ int ascii85breaklen;
+ uint16 samplesperpixel;
+ uint16 bitspersample;
+ uint16 planarconfiguration;
+ uint16 photometric;
+ uint16 compression;
+ uint16 extrasamples;
+ int alpha;
+};
+
+static void PSpage(TIFF2PSContext*, TIFF*, uint32, uint32);
+static void PSColorContigPreamble(TIFF2PSContext*, uint32, uint32, int);
+static void PSColorSeparatePreamble(TIFF2PSContext*, uint32, uint32, int);
+static void PSDataColorContig(TIFF2PSContext*, TIFF*, uint32, uint32, int);
+static void PSDataColorSeparate(TIFF2PSContext*, TIFF*, uint32, uint32, int);
+static void PSDataPalette(TIFF2PSContext*, TIFF*, uint32, uint32);
+static void PSDataBW(TIFF2PSContext*, TIFF*, uint32, uint32);
+static void Ascii85Init(TIFF2PSContext*);
+static void Ascii85Put(TIFF2PSContext*, unsigned char);
+static void Ascii85Flush(TIFF2PSContext*);
+static void PSHead(TIFF2PSContext*, TIFF*, uint32, uint32,
+ double, double, double, double);
+static void PSTail(TIFF2PSContext*);
+
+#if defined( EXP_ASCII85ENCODER )
+static int Ascii85EncodeBlock(TIFF2PSContext*, uint8 * ascii85_p,
+ unsigned f_eod, const uint8 * raw_p, int raw_l);
+#endif
+
+TIFF2PSContext* tiff2ps_context_new(const gchar *filename) {
+ TIFF2PSContext* ctx;
+
+ ctx = g_new0(TIFF2PSContext, 1);
+ ctx->filename = g_strdup(filename);
+ ctx->fd = g_fopen(ctx->filename, "w");
+ if (ctx->fd == NULL) {
+ g_free (ctx->filename);
+ g_free (ctx);
+ return NULL;
+ }
+ ctx->interpolate = TRUE; /* interpolate level2 image */
+ ctx->PSavoiddeadzone = TRUE; /* enable avoiding printer deadzone */
+ return ctx;
+}
+
+void tiff2ps_context_finalize(TIFF2PSContext *ctx) {
+ PSTail(ctx);
+ fclose(ctx->fd);
+ g_free(ctx->filename);
+ g_free(ctx);
+}
+
+static int
+checkImage(TIFF2PSContext *ctx, TIFF* tif)
+{
+ switch (ctx->photometric) {
+ case PHOTOMETRIC_YCBCR:
+ if ((ctx->compression == COMPRESSION_JPEG
+ || ctx->compression == COMPRESSION_OJPEG)
+ && ctx->planarconfiguration == PLANARCONFIG_CONTIG) {
+ /* can rely on libjpeg to convert to RGB */
+ TIFFSetField(tif, TIFFTAG_JPEGCOLORMODE,
+ JPEGCOLORMODE_RGB);
+ ctx->photometric = PHOTOMETRIC_RGB;
+ } else {
+ if (ctx->level2 || ctx->level3)
+ break;
+ TIFFError(ctx->filename, "Can not handle image with %s",
+ "Ctx->PhotometricInterpretation=YCbCr");
+ return (0);
+ }
+ /* fall thru... */
+ case PHOTOMETRIC_RGB:
+ if (ctx->alpha && ctx->bitspersample != 8) {
+ TIFFError(ctx->filename,
+ "Can not handle %d-bit/sample RGB image with ctx->alpha",
+ ctx->bitspersample);
+ return (0);
+ }
+ /* fall thru... */
+ case PHOTOMETRIC_SEPARATED:
+ case PHOTOMETRIC_PALETTE:
+ case PHOTOMETRIC_MINISBLACK:
+ case PHOTOMETRIC_MINISWHITE:
+ break;
+ case PHOTOMETRIC_LOGL:
+ case PHOTOMETRIC_LOGLUV:
+ if (ctx->compression != COMPRESSION_SGILOG &&
+ ctx->compression != COMPRESSION_SGILOG24) {
+ TIFFError(ctx->filename,
+ "Can not handle %s data with ctx->compression other than SGILog",
+ (ctx->photometric == PHOTOMETRIC_LOGL) ?
+ "LogL" : "LogLuv"
+ );
+ return (0);
+ }
+ /* rely on library to convert to RGB/greyscale */
+ TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_8BIT);
+ ctx->photometric = (ctx->photometric == PHOTOMETRIC_LOGL) ?
+ PHOTOMETRIC_MINISBLACK : PHOTOMETRIC_RGB;
+ ctx->bitspersample = 8;
+ break;
+ case PHOTOMETRIC_CIELAB:
+ /* fall thru... */
+ default:
+ TIFFError(ctx->filename,
+ "Can not handle image with Ctx->PhotometricInterpretation=%d",
+ ctx->photometric);
+ return (0);
+ }
+ switch (ctx->bitspersample) {
+ case 1: case 2:
+ case 4: case 8:
+ break;
+ default:
+ TIFFError(ctx->filename, "Can not handle %d-bit/sample image",
+ ctx->bitspersample);
+ return (0);
+ }
+ if (ctx->planarconfiguration == PLANARCONFIG_SEPARATE &&
+ ctx->extrasamples > 0)
+ TIFFWarning(ctx->filename, "Ignoring extra samples");
+ return (1);
+}
+
+#define PS_UNIT_SIZE 72.0F
+#define PSUNITS(npix,res) ((npix) * (PS_UNIT_SIZE / (res)))
+
+static char RGBcolorimage[] = "\
+/bwproc {\n\
+ rgbproc\n\
+ dup length 3 idiv string 0 3 0\n\
+ 5 -1 roll {\n\
+ add 2 1 roll 1 sub dup 0 eq {\n\
+ pop 3 idiv\n\
+ 3 -1 roll\n\
+ dup 4 -1 roll\n\
+ dup 3 1 roll\n\
+ 5 -1 roll put\n\
+ 1 add 3 0\n\
+ } { 2 1 roll } ifelse\n\
+ } forall\n\
+ pop pop pop\n\
+} def\n\
+/colorimage where {pop} {\n\
+ /colorimage {pop pop /rgbproc exch def {bwproc} image} bind def\n\
+} ifelse\n\
+";
+
+/*
+ * Adobe Photoshop requires a comment line of the form:
+ *
+ * %ImageData: <cols> <rows> <depth> <main channels> <pad channels>
+ * <block size> <1 for binary|2 for hex> "data start"
+ *
+ * It is claimed to be part of some future revision of the EPS spec.
+ */
+static void
+PhotoshopBanner(TIFF2PSContext* ctx, uint32 w, uint32 h, int bs, int nc,
+ char* startline)
+{
+ fprintf(ctx->fd, "%%ImageData: %ld %ld %d %d 0 %d 2 \"",
+ (long) w, (long) h, ctx->bitspersample, nc, bs);
+ fprintf(ctx->fd, startline, nc);
+ fprintf(ctx->fd, "\"\n");
+}
+
+/*
+ * pw : image width in pixels
+ * ph : image height in pixels
+ * pprw : image width in PS units (72 dpi)
+ * pprh : image height in PS units (72 dpi)
+ */
+static void
+setupPageState(TIFF2PSContext *ctx, TIFF* tif, uint32* pw, uint32* ph,
+ double* pprw, double* pprh)
+{
+ float xres = 0.0F, yres = 0.0F;
+
+ TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, pw);
+ TIFFGetField(tif, TIFFTAG_IMAGELENGTH, ph);
+ if (ctx->res_unit == 0)
+ TIFFGetFieldDefaulted(tif, TIFFTAG_RESOLUTIONUNIT, &ctx->res_unit);
+ /*
+ * Calculate printable area.
+ */
+ if (!TIFFGetField(tif, TIFFTAG_XRESOLUTION, &xres)
+ || fabs(xres) < 0.0000001)
+ xres = PS_UNIT_SIZE;
+ if (!TIFFGetField(tif, TIFFTAG_YRESOLUTION, &yres)
+ || fabs(yres) < 0.0000001)
+ yres = PS_UNIT_SIZE;
+ switch (ctx->res_unit) {
+ case RESUNIT_CENTIMETER:
+ xres *= 2.54F, yres *= 2.54F;
+ break;
+ case RESUNIT_INCH:
+ break;
+ case RESUNIT_NONE:
+ default:
+ xres *= PS_UNIT_SIZE, yres *= PS_UNIT_SIZE;
+ break;
+ }
+ *pprh = PSUNITS(*ph, yres);
+ *pprw = PSUNITS(*pw, xres);
+}
+
+static int
+isCCITTCompression(TIFF* tif)
+{
+ uint16 compress;
+ TIFFGetField(tif, TIFFTAG_COMPRESSION, &compress);
+ return (compress == COMPRESSION_CCITTFAX3 ||
+ compress == COMPRESSION_CCITTFAX4 ||
+ compress == COMPRESSION_CCITTRLE ||
+ compress == COMPRESSION_CCITTRLEW);
+}
+
+static char *hex = "0123456789abcdef";
+
+/*
+ * imagewidth & imageheight are 1/72 inches
+ * pagewidth & pageheight are inches
+ */
+static int
+PlaceImage(TIFF2PSContext *ctx, double pagewidth, double pageheight,
+ double imagewidth, double imageheight, int splitpage,
+ double lm, double bm, int cnt)
+{
+ double xtran = 0;
+ double ytran = 0;
+ double xscale = 1;
+ double yscale = 1;
+ double left_offset = lm * PS_UNIT_SIZE;
+ double bottom_offset = bm * PS_UNIT_SIZE;
+ double subimageheight;
+ double splitheight;
+ double overlap;
+ /* buffers for locale-insitive number formatting */
+ gchar buf[2][G_ASCII_DTOSTR_BUF_SIZE];
+
+ pagewidth *= PS_UNIT_SIZE;
+ pageheight *= PS_UNIT_SIZE;
+
+ if (ctx->maxPageHeight==0)
+ splitheight = 0;
+ else
+ splitheight = ctx->maxPageHeight * PS_UNIT_SIZE;
+ overlap = ctx->splitOverlap * PS_UNIT_SIZE;
+
+ /*
+ * WIDTH:
+ * if too wide, scrunch to fit
+ * else leave it alone
+ */
+ if (imagewidth <= pagewidth) {
+ xscale = imagewidth;
+ } else {
+ xscale = pagewidth;
+ }
+
+ /* HEIGHT:
+ * if too long, scrunch to fit
+ * if too short, move to top of page
+ */
+ if (imageheight <= pageheight) {
+ yscale = imageheight;
+ ytran = pageheight - imageheight;
+ } else if (imageheight > pageheight &&
+ (splitheight == 0 || imageheight <= splitheight)) {
+ yscale = pageheight;
+ } else /* imageheight > splitheight */ {
+ subimageheight = imageheight - (pageheight-overlap)*splitpage;
+ if (subimageheight <= pageheight) {
+ yscale = imageheight;
+ ytran = pageheight - subimageheight;
+ splitpage = 0;
+ } else if ( subimageheight > pageheight && subimageheight <= splitheight) {
+ yscale = imageheight * pageheight / subimageheight;
+ ytran = 0;
+ splitpage = 0;
+ } else /* sumimageheight > splitheight */ {
+ yscale = imageheight;
+ ytran = pageheight - subimageheight;
+ splitpage++;
+ }
+ }
+
+ bottom_offset += ytran / (cnt?2:1);
+ if (cnt)
+ left_offset += xtran / 2;
+
+ fprintf(ctx->fd, "%s %s translate\n",
+ g_ascii_dtostr(buf[0], sizeof(buf[0]), left_offset),
+ g_ascii_dtostr(buf[1], sizeof(buf[1]), bottom_offset));
+ fprintf(ctx->fd, "%s %s scale\n",
+ g_ascii_dtostr(buf[0], sizeof(buf[0]), xscale),
+ g_ascii_dtostr(buf[1], sizeof(buf[1]), yscale));
+ if (ctx->rotate)
+ fputs ("1 1 translate 180 ctx->rotate\n", ctx->fd);
+
+ return splitpage;
+}
+
+
+void
+tiff2ps_process_page(TIFF2PSContext* ctx, TIFF* tif, double pw, double ph,
+ double lm, double bm, gboolean cnt)
+{
+ uint32 w, h;
+ float ox, oy;
+ double prw, prh;
+ double scale = 1.0;
+ double left_offset = lm * PS_UNIT_SIZE;
+ double bottom_offset = bm * PS_UNIT_SIZE;
+ uint16* sampleinfo;
+ int split;
+ /* buffers for locale-insitive number formatting */
+ gchar buf[2][G_ASCII_DTOSTR_BUF_SIZE];
+
+ if (!TIFFGetField(tif, TIFFTAG_XPOSITION, &ox))
+ ox = 0;
+ if (!TIFFGetField(tif, TIFFTAG_YPOSITION, &oy))
+ oy = 0;
+ setupPageState(ctx, tif, &w, &h, &prw, &prh);
+
+ ctx->tf_numberstrips = TIFFNumberOfStrips(tif);
+ TIFFGetFieldDefaulted(tif, TIFFTAG_ROWSPERSTRIP,
+ &ctx->tf_rowsperstrip);
+ setupPageState(ctx, tif, &w, &h, &prw, &prh);
+ if (!ctx->npages)
+ PSHead(ctx, tif, w, h, prw, prh, ox, oy);
+ TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE,
+ &ctx->bitspersample);
+ TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL,
+ &ctx->samplesperpixel);
+ TIFFGetFieldDefaulted(tif, TIFFTAG_PLANARCONFIG,
+ &ctx->planarconfiguration);
+ TIFFGetField(tif, TIFFTAG_COMPRESSION, &ctx->compression);
+ TIFFGetFieldDefaulted(tif, TIFFTAG_EXTRASAMPLES,
+ &ctx->extrasamples, &sampleinfo);
+ ctx->alpha = (ctx->extrasamples == 1 &&
+ sampleinfo[0] == EXTRASAMPLE_ASSOCALPHA);
+ if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &ctx->photometric)) {
+ switch (ctx->samplesperpixel - ctx->extrasamples) {
+ case 1:
+ if (isCCITTCompression(tif))
+ ctx->photometric = PHOTOMETRIC_MINISWHITE;
+ else
+ ctx->photometric = PHOTOMETRIC_MINISBLACK;
+ break;
+ case 3:
+ ctx->photometric = PHOTOMETRIC_RGB;
+ break;
+ case 4:
+ ctx->photometric = PHOTOMETRIC_SEPARATED;
+ break;
+ }
+ }
+ if (checkImage(ctx, tif)) {
+ ctx->tf_bytesperrow = TIFFScanlineSize(tif);
+ ctx->npages++;
+ fprintf(ctx->fd, "%%%%Page: %d %d\n", ctx->npages,
+ ctx->npages);
+ if (!ctx->generateEPSF && ( ctx->level2 || ctx->level3 )) {
+ double psw = 0.0, psh = 0.0;
+ if (psw != 0.0) {
+ psw = pw * PS_UNIT_SIZE;
+ if (ctx->res_unit == RESUNIT_CENTIMETER)
+ psw *= 2.54F;
+ } else
+ psw=ctx->rotate ? prh:prw;
+ if (psh != 0.0) {
+ psh = ph * PS_UNIT_SIZE;
+ if (ctx->res_unit == RESUNIT_CENTIMETER)
+ psh *= 2.54F;
+ } else
+ psh=ctx->rotate ? prw:prh;
+ fprintf(ctx->fd,
+ "1 dict begin /PageSize [ %s %s ] def currentdict end setpagedevice\n",
+ g_ascii_dtostr(buf[0], sizeof(buf[0]), psw),
+ g_ascii_dtostr(buf[1], sizeof(buf[1]), psh));
+ fputs(
+ "<<\n /Policies <<\n /PageSize 3\n >>\n>> setpagedevice\n",
+ ctx->fd);
+ }
+ fprintf(ctx->fd, "gsave\n");
+ fprintf(ctx->fd, "100 dict begin\n");
+ if (pw != 0 || ph != 0) {
+ if (!pw)
+ pw = prw;
+ if (!ph)
+ ph = prh;
+ if (ctx->maxPageHeight) { /* used -H option */
+ split = PlaceImage(ctx,pw,ph,prw,prh,
+ 0,lm,bm,cnt);
+ while( split ) {
+ PSpage(ctx, tif, w, h);
+ fprintf(ctx->fd, "end\n");
+ fprintf(ctx->fd, "grestore\n");
+ fprintf(ctx->fd, "showpage\n");
+ ctx->npages++;
+ fprintf(ctx->fd, "%%%%Page: %d %d\n",
+ ctx->npages, ctx->npages);
+ fprintf(ctx->fd, "gsave\n");
+ fprintf(ctx->fd, "100 dict begin\n");
+ split = PlaceImage(ctx,pw,ph,prw,prh,
+ split,lm,bm,cnt);
+ }
+ } else {
+ pw *= PS_UNIT_SIZE;
+ ph *= PS_UNIT_SIZE;
+
+ /* NB: maintain image aspect ratio */
+ scale = pw/prw < ph/prh ?
+ pw/prw : ph/prh;
+ if (scale > 1.0)
+ scale = 1.0;
+ if (cnt) {
+ bottom_offset +=
+ (ph - prh * scale) / 2;
+ left_offset +=
+ (pw - prw * scale) / 2;
+ }
+ fprintf(ctx->fd, "%s %s translate\n",
+ g_ascii_dtostr(buf[0], sizeof(buf[0]), left_offset),
+ g_ascii_dtostr(buf[1], sizeof(buf[1]), bottom_offset));
+ fprintf(ctx->fd, "%s %s scale\n",
+ g_ascii_dtostr(buf[0], sizeof(buf[0]), prw * scale),
+ g_ascii_dtostr(buf[1], sizeof(buf[1]), prh * scale));
+ if (ctx->rotate)
+ fputs ("1 1 translate 180 ctx->rotate\n", ctx->fd);
+ }
+ } else {
+ fprintf(ctx->fd, "%s %s scale\n",
+ g_ascii_dtostr(buf[0], sizeof(buf[0]), prw),
+ g_ascii_dtostr(buf[1], sizeof(buf[1]), prh));
+ if (ctx->rotate)
+ fputs ("1 1 translate 180 ctx->rotate\n", ctx->fd);
+ }
+ PSpage(ctx, tif, w, h);
+ fprintf(ctx->fd, "end\n");
+ fprintf(ctx->fd, "grestore\n");
+ fprintf(ctx->fd, "showpage\n");
+ }
+}
+
+
+static char DuplexPreamble[] = "\
+%%BeginFeature: *Duplex True\n\
+systemdict begin\n\
+ /languagelevel where { pop languagelevel } { 1 } ifelse\n\
+ 2 ge { 1 dict dup /Duplex true put setpagedevice }\n\
+ { statusdict /setduplex known { statusdict begin setduplex true end } if\n\
+ } ifelse\n\
+end\n\
+%%EndFeature\n\
+";
+
+static char TumblePreamble[] = "\
+%%BeginFeature: *Tumble True\n\
+systemdict begin\n\
+ /languagelevel where { pop languagelevel } { 1 } ifelse\n\
+ 2 ge { 1 dict dup /Tumble true put setpagedevice }\n\
+ { statusdict /settumble known { statusdict begin true settumble end } if\n\
+ } ifelse\n\
+end\n\
+%%EndFeature\n\
+";
+
+static char AvoidDeadZonePreamble[] = "\
+gsave newpath clippath pathbbox grestore\n\
+ 4 2 roll 2 copy translate\n\
+ exch 3 1 roll sub 3 1 roll sub exch\n\
+ currentpagedevice /PageSize get aload pop\n\
+ exch 3 1 roll div 3 1 roll div abs exch abs\n\
+ 2 copy gt { exch } if pop\n\
+ dup 1 lt { dup scale } { pop } ifelse\n\
+";
+
+void
+PSHead(TIFF2PSContext *ctx, TIFF *tif, uint32 w, uint32 h,
+ double pw, double ph, double ox, double oy)
+{
+ time_t t;
+
+ (void) tif; (void) w; (void) h;
+ t = time(0);
+ fprintf(ctx->fd, "%%!PS-Adobe-3.0%s\n",
+ ctx->generateEPSF ? " EPSF-3.0" : "");
+ fprintf(ctx->fd, "%%%%Creator: Evince\n");
+ fprintf(ctx->fd, "%%%%CreationDate: %s", ctime(&t));
+ fprintf(ctx->fd, "%%%%DocumentData: Clean7Bit\n");
+ fprintf(ctx->fd, "%%%%Origin: %ld %ld\n", (long) ox, (long) oy);
+ /* NB: should use PageBoundingBox */
+ fprintf(ctx->fd, "%%%%BoundingBox: 0 0 %ld %ld\n",
+ (long) ceil(pw), (long) ceil(ph));
+ fprintf(ctx->fd, "%%%%LanguageLevel: %d\n",
+ (ctx->level3 ? 3 : (ctx->level2 ? 2 : 1)));
+ fprintf(ctx->fd, "%%%%Pages: (atend)\n");
+ fprintf(ctx->fd, "%%%%EndComments\n");
+ fprintf(ctx->fd, "%%%%BeginSetup\n");
+ if (ctx->PSduplex)
+ fprintf(ctx->fd, "%s", DuplexPreamble);
+ if (ctx->PStumble)
+ fprintf(ctx->fd, "%s", TumblePreamble);
+ if (ctx->PSavoiddeadzone && (ctx->level2 || ctx->level3))
+ fprintf(ctx->fd, "%s", AvoidDeadZonePreamble);
+ fprintf(ctx->fd, "%%%%EndSetup\n");
+}
+
+static void
+PSTail(TIFF2PSContext *ctx)
+{
+ if (!ctx->npages)
+ return;
+ fprintf(ctx->fd, "%%%%Trailer\n");
+ fprintf(ctx->fd, "%%%%Pages: %d\n", ctx->npages);
+ fprintf(ctx->fd, "%%%%EOF\n");
+}
+
+static int
+checkcmap(TIFF2PSContext* ctx, TIFF* tif, int n,
+ uint16* r, uint16* g, uint16* b)
+{
+ (void) tif;
+ while (n-- > 0)
+ if (*r++ >= 256 || *g++ >= 256 || *b++ >= 256)
+ return (16);
+ TIFFWarning(ctx->filename, "Assuming 8-bit colormap");
+ return (8);
+}
+
+static void
+PS_Lvl2colorspace(TIFF2PSContext* ctx, TIFF* tif)
+{
+ uint16 *rmap, *gmap, *bmap;
+ int i, num_colors;
+ const char * colorspace_p;
+
+ switch ( ctx->photometric )
+ {
+ case PHOTOMETRIC_SEPARATED:
+ colorspace_p = "CMYK";
+ break;
+
+ case PHOTOMETRIC_RGB:
+ colorspace_p = "RGB";
+ break;
+
+ default:
+ colorspace_p = "Gray";
+ }
+
+ /*
+ * Set up PostScript Level 2 colorspace according to
+ * section 4.8 in the PostScript refenence manual.
+ */
+ fputs("% PostScript Level 2 only.\n", ctx->fd);
+ if (ctx->photometric != PHOTOMETRIC_PALETTE) {
+ if (ctx->photometric == PHOTOMETRIC_YCBCR) {
+ /* MORE CODE HERE */
+ }
+ fprintf(ctx->fd, "/Device%s setcolorspace\n", colorspace_p );
+ return;
+ }
+
+ /*
+ * Set up an indexed/palette colorspace
+ */
+ num_colors = (1 << ctx->bitspersample);
+ if (!TIFFGetField(tif, TIFFTAG_COLORMAP, &rmap, &gmap, &bmap)) {
+ TIFFError(ctx->filename,
+ "Palette image w/o \"Colormap\" tag");
+ return;
+ }
+ if (checkcmap(ctx, tif, num_colors, rmap, gmap, bmap) == 16) {
+ /*
+ * Convert colormap to 8-bits values.
+ */
+#define CVT(x) (((x) * 255) / ((1L<<16)-1))
+ for (i = 0; i < num_colors; i++) {
+ rmap[i] = CVT(rmap[i]);
+ gmap[i] = CVT(gmap[i]);
+ bmap[i] = CVT(bmap[i]);
+ }
+#undef CVT
+ }
+ fprintf(ctx->fd, "[ /Indexed /DeviceRGB %d", num_colors - 1);
+ if (ctx->ascii85) {
+ Ascii85Init(ctx);
+ fputs("\n<~", ctx->fd);
+ ctx->ascii85breaklen -= 2;
+ } else
+ fputs(" <", ctx->fd);
+ for (i = 0; i < num_colors; i++) {
+ if (ctx->ascii85) {
+ Ascii85Put(ctx, (unsigned char)rmap[i]);
+ Ascii85Put(ctx, (unsigned char)gmap[i]);
+ Ascii85Put(ctx, (unsigned char)bmap[i]);
+ } else {
+ fputs((i % 8) ? " " : "\n ", ctx->fd);
+ fprintf(ctx->fd, "%02x%02x%02x",
+ rmap[i], gmap[i], bmap[i]);
+ }
+ }
+ if (ctx->ascii85)
+ Ascii85Flush(ctx);
+ else
+ fputs(">\n", ctx->fd);
+ fputs("] setcolorspace\n", ctx->fd);
+}
+
+static int
+PS_Lvl2ImageDict(TIFF2PSContext* ctx, TIFF* tif, uint32 w, uint32 h)
+{
+ int use_rawdata;
+ uint32 tile_width, tile_height;
+ uint16 predictor, minsamplevalue, maxsamplevalue;
+ int repeat_count;
+ char im_h[64], im_x[64], im_y[64];
+ char * imageOp = "image";
+
+ if ( ctx->useImagemask && (ctx->bitspersample == 1) )
+ imageOp = "imagemask";
+
+ (void)strcpy(im_x, "0");
+ (void)sprintf(im_y, "%lu", (long) h);
+ (void)sprintf(im_h, "%lu", (long) h);
+ tile_width = w;
+ tile_height = h;
+ if (TIFFIsTiled(tif)) {
+ repeat_count = TIFFNumberOfTiles(tif);
+ TIFFGetField(tif, TIFFTAG_TILEWIDTH, &tile_width);
+ TIFFGetField(tif, TIFFTAG_TILELENGTH, &tile_height);
+ if (tile_width > w || tile_height > h ||
+ (w % tile_width) != 0 || (h % tile_height != 0)) {
+ /*
+ * The tiles does not fit image width and height.
+ * Set up a clip rectangle for the image unit square.
+ */
+ fputs("0 0 1 1 rectclip\n", ctx->fd);
+ }
+ if (tile_width < w) {
+ fputs("/im_x 0 def\n", ctx->fd);
+ (void)strcpy(im_x, "im_x neg");
+ }
+ if (tile_height < h) {
+ fputs("/im_y 0 def\n", ctx->fd);
+ (void)sprintf(im_y, "%lu im_y sub", (unsigned long) h);
+ }
+ } else {
+ repeat_count = ctx->tf_numberstrips;
+ tile_height = ctx->tf_rowsperstrip;
+ if (tile_height > h)
+ tile_height = h;
+ if (repeat_count > 1) {
+ fputs("/im_y 0 def\n", ctx->fd);
+ fprintf(ctx->fd, "/im_h %lu def\n",
+ (unsigned long) tile_height);
+ (void)strcpy(im_h, "im_h");
+ (void)sprintf(im_y, "%lu im_y sub", (unsigned long) h);
+ }
+ }
+
+ /*
+ * Output start of exec block
+ */
+ fputs("{ % exec\n", ctx->fd);
+
+ if (repeat_count > 1)
+ fprintf(ctx->fd, "%d { %% repeat\n", repeat_count);
+
+ /*
+ * Output filter options and image dictionary.
+ */
+ if (ctx->ascii85)
+ fputs(" /im_stream currentfile /ASCII85Decode filter def\n",
+ ctx->fd);
+ fputs(" <<\n", ctx->fd);
+ fputs(" /ImageType 1\n", ctx->fd);
+ fprintf(ctx->fd, " /Width %lu\n", (unsigned long) tile_width);
+ /*
+ * Workaround for some software that may crash when last strip
+ * of image contains fewer number of scanlines than specified
+ * by the `/Height' variable. So for stripped images with multiple
+ * strips we will set `/Height' as `im_h', because one is
+ * recalculated for each strip - including the (smaller) final strip.
+ * For tiled images and images with only one strip `/Height' will
+ * contain number of scanlines in tile (or image height in case of
+ * one-stripped image).
+ */
+ if (TIFFIsTiled(tif) || ctx->tf_numberstrips == 1)
+ fprintf(ctx->fd, " /Height %lu\n", (unsigned long) tile_height);
+ else
+ fprintf(ctx->fd, " /Height im_h\n");
+
+ if (ctx->planarconfiguration == PLANARCONFIG_SEPARATE && ctx->samplesperpixel > 1)
+ fputs(" /MultipleDataSources true\n", ctx->fd);
+ fprintf(ctx->fd, " /ImageMatrix [ %lu 0 0 %ld %s %s ]\n",
+ (unsigned long) w, - (long)h, im_x, im_y);
+ fprintf(ctx->fd, " /BitsPerComponent %d\n", ctx->bitspersample);
+ fprintf(ctx->fd, " /Ctx->Interpolate %s\n", ctx->interpolate ? "true" : "false");
+
+ switch (ctx->samplesperpixel - ctx->extrasamples) {
+ case 1:
+ switch (ctx->photometric) {
+ case PHOTOMETRIC_MINISBLACK:
+ fputs(" /Decode [0 1]\n", ctx->fd);
+ break;
+ case PHOTOMETRIC_MINISWHITE:
+ switch (ctx->compression) {
+ case COMPRESSION_CCITTRLE:
+ case COMPRESSION_CCITTRLEW:
+ case COMPRESSION_CCITTFAX3:
+ case COMPRESSION_CCITTFAX4:
+ /*
+ * Manage inverting with /Blackis1 flag
+ * since there migth be uncompressed parts
+ */
+ fputs(" /Decode [0 1]\n", ctx->fd);
+ break;
+ default:
+ /*
+ * ERROR...
+ */
+ fputs(" /Decode [1 0]\n", ctx->fd);
+ break;
+ }
+ break;
+ case PHOTOMETRIC_PALETTE:
+ TIFFGetFieldDefaulted(tif, TIFFTAG_MINSAMPLEVALUE,
+ &minsamplevalue);
+ TIFFGetFieldDefaulted(tif, TIFFTAG_MAXSAMPLEVALUE,
+ &maxsamplevalue);
+ fprintf(ctx->fd, " /Decode [%u %u]\n",
+ minsamplevalue, maxsamplevalue);
+ break;
+ default:
+ /*
+ * ERROR ?
+ */
+ fputs(" /Decode [0 1]\n", ctx->fd);
+ break;
+ }
+ break;
+ case 3:
+ switch (ctx->photometric) {
+ case PHOTOMETRIC_RGB:
+ fputs(" /Decode [0 1 0 1 0 1]\n", ctx->fd);
+ break;
+ case PHOTOMETRIC_MINISWHITE:
+ case PHOTOMETRIC_MINISBLACK:
+ default:
+ /*
+ * ERROR??
+ */
+ fputs(" /Decode [0 1 0 1 0 1]\n", ctx->fd);
+ break;
+ }
+ break;
+ case 4:
+ /*
+ * ERROR??
+ */
+ fputs(" /Decode [0 1 0 1 0 1 0 1]\n", ctx->fd);
+ break;
+ }
+ fputs(" /DataSource", ctx->fd);
+ if (ctx->planarconfiguration == PLANARCONFIG_SEPARATE &&
+ ctx->samplesperpixel > 1)
+ fputs(" [", ctx->fd);
+ if (ctx->ascii85)
+ fputs(" im_stream", ctx->fd);
+ else
+ fputs(" currentfile /ASCIIHexDecode filter", ctx->fd);
+
+ use_rawdata = TRUE;
+ switch (ctx->compression) {
+ case COMPRESSION_NONE: /* 1: uncompressed */
+ break;
+ case COMPRESSION_CCITTRLE: /* 2: CCITT modified Huffman RLE */
+ case COMPRESSION_CCITTRLEW: /* 32771: #1 w/ word alignment */
+ case COMPRESSION_CCITTFAX3: /* 3: CCITT Group 3 fax encoding */
+ case COMPRESSION_CCITTFAX4: /* 4: CCITT Group 4 fax encoding */
+ fputs("\n\t<<\n", ctx->fd);
+ if (ctx->compression == COMPRESSION_CCITTFAX3) {
+ uint32 g3_options;
+
+ fputs("\t /EndOfLine true\n", ctx->fd);
+ fputs("\t /EndOfBlock false\n", ctx->fd);
+ if (!TIFFGetField(tif, TIFFTAG_GROUP3OPTIONS,
+ &g3_options))
+ g3_options = 0;
+ if (g3_options & GROUP3OPT_2DENCODING)
+ fprintf(ctx->fd, "\t /K %s\n", im_h);
+ if (g3_options & GROUP3OPT_UNCOMPRESSED)
+ fputs("\t /Uncompressed true\n", ctx->fd);
+ if (g3_options & GROUP3OPT_FILLBITS)
+ fputs("\t /EncodedByteAlign true\n", ctx->fd);
+ }
+ if (ctx->compression == COMPRESSION_CCITTFAX4) {
+ uint32 g4_options;
+
+ fputs("\t /K -1\n", ctx->fd);
+ TIFFGetFieldDefaulted(tif, TIFFTAG_GROUP4OPTIONS,
+ &g4_options);
+ if (g4_options & GROUP4OPT_UNCOMPRESSED)
+ fputs("\t /Uncompressed true\n", ctx->fd);
+ }
+ if (!(tile_width == w && w == 1728U))
+ fprintf(ctx->fd, "\t /Columns %lu\n",
+ (unsigned long) tile_width);
+ fprintf(ctx->fd, "\t /Rows %s\n", im_h);
+ if (ctx->compression == COMPRESSION_CCITTRLE ||
+ ctx->compression == COMPRESSION_CCITTRLEW) {
+ fputs("\t /EncodedByteAlign true\n", ctx->fd);
+ fputs("\t /EndOfBlock false\n", ctx->fd);
+ }
+ if (ctx->photometric == PHOTOMETRIC_MINISBLACK)
+ fputs("\t /BlackIs1 true\n", ctx->fd);
+ fprintf(ctx->fd, "\t>> /CCITTFaxDecode filter");
+ break;
+ case COMPRESSION_LZW: /* 5: Lempel-Ziv & Welch */
+ TIFFGetFieldDefaulted(tif, TIFFTAG_PREDICTOR, &predictor);
+ if (predictor == 2) {
+ fputs("\n\t<<\n", ctx->fd);
+ fprintf(ctx->fd, "\t /Predictor %u\n", predictor);
+ fprintf(ctx->fd, "\t /Columns %lu\n",
+ (unsigned long) tile_width);
+ fprintf(ctx->fd, "\t /Colors %u\n", ctx->samplesperpixel);
+ fprintf(ctx->fd, "\t /BitsPerComponent %u\n",
+ ctx->bitspersample);
+ fputs("\t>>", ctx->fd);
+ }
+ fputs(" /LZWDecode filter", ctx->fd);
+ break;
+ case COMPRESSION_DEFLATE: /* 5: ZIP */
+ case COMPRESSION_ADOBE_DEFLATE:
+ if ( ctx->level3 ) {
+ TIFFGetFieldDefaulted(tif, TIFFTAG_PREDICTOR, &predictor);
+ if (predictor > 1) {
+ fprintf(ctx->fd, "\t %% PostScript Level 3 only.");
+ fputs("\n\t<<\n", ctx->fd);
+ fprintf(ctx->fd, "\t /Predictor %u\n", predictor);
+ fprintf(ctx->fd, "\t /Columns %lu\n",
+ (unsigned long) tile_width);
+ fprintf(ctx->fd, "\t /Colors %u\n", ctx->samplesperpixel);
+ fprintf(ctx->fd, "\t /BitsPerComponent %u\n",
+ ctx->bitspersample);
+ fputs("\t>>", ctx->fd);
+ }
+ fputs(" /FlateDecode filter", ctx->fd);
+ } else {
+ use_rawdata = FALSE ;
+ }
+ break;
+ case COMPRESSION_PACKBITS: /* 32773: Macintosh RLE */
+ fputs(" /RunLengthDecode filter", ctx->fd);
+ use_rawdata = TRUE;
+ break;
+ case COMPRESSION_OJPEG: /* 6: !6.0 JPEG */
+ case COMPRESSION_JPEG: /* 7: %JPEG DCT ctx->compression */
+#ifdef notdef
+ /*
+ * Code not tested yet
+ */
+ fputs(" /DCTDecode filter", ctx->fd);
+ use_rawdata = TRUE;
+#else
+ use_rawdata = FALSE;
+#endif
+ break;
+ case COMPRESSION_NEXT: /* 32766: NeXT 2-bit RLE */
+ case COMPRESSION_THUNDERSCAN: /* 32809: ThunderScan RLE */
+ case COMPRESSION_PIXARFILM: /* 32908: Pixar companded 10bit LZW */
+ case COMPRESSION_JBIG: /* 34661: ISO JBIG */
+ use_rawdata = FALSE;
+ break;
+ case COMPRESSION_SGILOG: /* 34676: SGI LogL or LogLuv */
+ case COMPRESSION_SGILOG24: /* 34677: SGI 24-bit LogLuv */
+ use_rawdata = FALSE;
+ break;
+ default:
+ /*
+ * ERROR...
+ */
+ use_rawdata = FALSE;
+ break;
+ }
+ if (ctx->planarconfiguration == PLANARCONFIG_SEPARATE &&
+ ctx->samplesperpixel > 1) {
+ uint16 i;
+
+ /*
+ * NOTE: This code does not work yet...
+ */
+ for (i = 1; i < ctx->samplesperpixel; i++)
+ fputs(" dup", ctx->fd);
+ fputs(" ]", ctx->fd);
+ }
+
+ fprintf( ctx->fd, "\n >> %s\n", imageOp );
+ if (ctx->ascii85)
+ fputs(" im_stream status { im_stream flushfile } if\n", ctx->fd);
+ if (repeat_count > 1) {
+ if (tile_width < w) {
+ fprintf(ctx->fd, " /im_x im_x %lu add def\n",
+ (unsigned long) tile_width);
+ if (tile_height < h) {
+ fprintf(ctx->fd, " im_x %lu ge {\n",
+ (unsigned long) w);
+ fputs(" /im_x 0 def\n", ctx->fd);
+ fprintf(ctx->fd, " /im_y im_y %lu add def\n",
+ (unsigned long) tile_height);
+ fputs(" } if\n", ctx->fd);
+ }
+ }
+ if (tile_height < h) {
+ if (tile_width >= w) {
+ fprintf(ctx->fd, " /im_y im_y %lu add def\n",
+ (unsigned long) tile_height);
+ if (!TIFFIsTiled(tif)) {
+ fprintf(ctx->fd, " /im_h %lu im_y sub",
+ (unsigned long) h);
+ fprintf(ctx->fd, " dup %lu gt { pop",
+ (unsigned long) tile_height);
+ fprintf(ctx->fd, " %lu } if def\n",
+ (unsigned long) tile_height);
+ }
+ }
+ }
+ fputs("} repeat\n", ctx->fd);
+ }
+ /*
+ * End of exec function
+ */
+ fputs("}\n", ctx->fd);
+
+ return(use_rawdata);
+}
+
+#define MAXLINE 36
+
+static int
+PS_Lvl2page(TIFF2PSContext* ctx, TIFF* tif, uint32 w, uint32 h)
+{
+ uint16 fillorder;
+ int use_rawdata, tiled_image, breaklen = MAXLINE;
+ uint32 chunk_no, num_chunks, *bc;
+ unsigned char *buf_data, *cp;
+ tsize_t chunk_size, byte_count;
+
+#if defined( EXP_ASCII85ENCODER )
+ int ascii85_l; /* Length, in bytes, of ascii85_p[] data */
+ uint8 * ascii85_p = 0; /* Holds ASCII85 encoded data */
+#endif
+
+ PS_Lvl2colorspace(ctx, tif);
+ use_rawdata = PS_Lvl2ImageDict(ctx, tif, w, h);
+
+/* See http://bugzilla.remotesensing.org/show_bug.cgi?id=80 */
+#ifdef ENABLE_BROKEN_BEGINENDDATA
+ fputs("%%BeginData:\n", ctx->fd);
+#endif
+ fputs("exec\n", ctx->fd);
+
+ tiled_image = TIFFIsTiled(tif);
+ if (tiled_image) {
+ num_chunks = TIFFNumberOfTiles(tif);
+ TIFFGetField(tif, TIFFTAG_TILEBYTECOUNTS, &bc);
+ } else {
+ num_chunks = TIFFNumberOfStrips(tif);
+ TIFFGetField(tif, TIFFTAG_STRIPBYTECOUNTS, &bc);
+ }
+
+ if (use_rawdata) {
+ chunk_size = (tsize_t) bc[0];
+ for (chunk_no = 1; chunk_no < num_chunks; chunk_no++)
+ if ((tsize_t) bc[chunk_no] > chunk_size)
+ chunk_size = (tsize_t) bc[chunk_no];
+ } else {
+ if (tiled_image)
+ chunk_size = TIFFTileSize(tif);
+ else
+ chunk_size = TIFFStripSize(tif);
+ }
+ buf_data = (unsigned char *)_TIFFmalloc(chunk_size);
+ if (!buf_data) {
+ TIFFError(ctx->filename, "Can't alloc %u bytes for %s.",
+ chunk_size, tiled_image ? "tiles" : "strips");
+ return(FALSE);
+ }
+
+#if defined( EXP_ASCII85ENCODER )
+ if ( ctx->ascii85 ) {
+ /*
+ * Allocate a buffer to hold the ASCII85 encoded data. Note
+ * that it is allocated with sufficient room to hold the
+ * encoded data (5*chunk_size/4) plus the EOD marker (+8)
+ * and formatting line breaks. The line breaks are more
+ * than taken care of by using 6*chunk_size/4 rather than
+ * 5*chunk_size/4.
+ */
+
+ ascii85_p = _TIFFmalloc( (chunk_size+(chunk_size/2)) + 8 );
+
+ if ( !ascii85_p ) {
+ _TIFFfree( buf_data );
+
+ TIFFError( ctx->filename,
+ "Cannot allocate ASCII85 encoding buffer." );
+ return ( FALSE );
+ }
+ }
+#endif
+
+ TIFFGetFieldDefaulted(tif, TIFFTAG_FILLORDER, &fillorder);
+ for (chunk_no = 0; chunk_no < num_chunks; chunk_no++) {
+ if (ctx->ascii85)
+ Ascii85Init(ctx);
+ else
+ breaklen = MAXLINE;
+ if (use_rawdata) {
+ if (tiled_image)
+ byte_count = TIFFReadRawTile(tif, chunk_no,
+ buf_data, chunk_size);
+ else
+ byte_count = TIFFReadRawStrip(tif, chunk_no,
+ buf_data, chunk_size);
+ if (fillorder == FILLORDER_LSB2MSB)
+ TIFFReverseBits(buf_data, byte_count);
+ } else {
+ if (tiled_image)
+ byte_count = TIFFReadEncodedTile(tif,
+ chunk_no, buf_data,
+ chunk_size);
+ else
+ byte_count = TIFFReadEncodedStrip(tif,
+ chunk_no, buf_data,
+ chunk_size);
+ }
+ if (byte_count < 0) {
+ TIFFError(ctx->filename, "Can't read %s %d.",
+ tiled_image ? "tile" : "strip", chunk_no);
+ if (ctx->ascii85)
+ Ascii85Put(ctx, '\0');
+ }
+ /*
+ * For images with ctx->alpha, matte against a white background;
+ * i.e. Cback * (1 - Aimage) where Cback = 1. We will fill the
+ * lower part of the buffer with the modified values.
+ *
+ * XXX: needs better solution
+ */
+ if (ctx->alpha) {
+ int adjust, i, j = 0;
+ int ncomps = ctx->samplesperpixel - ctx->extrasamples;
+ for (i = 0; i < byte_count; i+=ctx->samplesperpixel) {
+ adjust = 255 - buf_data[i + ncomps];
+ switch (ncomps) {
+ case 1:
+ buf_data[j++] = buf_data[i] + adjust;
+ break;
+ case 2:
+ buf_data[j++] = buf_data[i] + adjust;
+ buf_data[j++] = buf_data[i+1] + adjust;
+ break;
+ case 3:
+ buf_data[j++] = buf_data[i] + adjust;
+ buf_data[j++] = buf_data[i+1] + adjust;
+ buf_data[j++] = buf_data[i+2] + adjust;
+ break;
+ }
+ }
+ byte_count -= j;
+ }
+
+ if (ctx->ascii85) {
+#if defined( EXP_ASCII85ENCODER )
+ ascii85_l = Ascii85EncodeBlock(ctx, ascii85_p, 1,
+ buf_data, byte_count);
+
+ if ( ascii85_l > 0 )
+ fwrite( ascii85_p, ascii85_l, 1, ctx->fd );
+#else
+ for (cp = buf_data; byte_count > 0; byte_count--)
+ Ascii85Put(ctx, *cp++);
+#endif
+ }
+ else
+ {
+ for (cp = buf_data; byte_count > 0; byte_count--) {
+ putc(hex[((*cp)>>4)&0xf], ctx->fd);
+ putc(hex[(*cp)&0xf], ctx->fd);
+ cp++;
+
+ if (--breaklen <= 0) {
+ putc('\n', ctx->fd);
+ breaklen = MAXLINE;
+ }
+ }
+ }
+
+ if ( !ctx->ascii85 ) {
+ if ( ctx->level2 || ctx->level3 )
+ putc( '>', ctx->fd );
+ putc('\n', ctx->fd);
+ }
+#if !defined( EXP_ASCII85ENCODER )
+ else
+ Ascii85Flush(ctx);
+#endif
+ }
+
+#if defined( EXP_ASCII85ENCODER )
+ if ( ascii85_p )
+ _TIFFfree( ascii85_p );
+#endif
+ _TIFFfree(buf_data);
+#ifdef ENABLE_BROKEN_BEGINENDDATA
+ fputs("%%EndData\n", ctx->fd);
+#endif
+ return(TRUE);
+}
+
+void
+PSpage(TIFF2PSContext* ctx, TIFF* tif, uint32 w, uint32 h)
+{
+ char *imageOp = "image";
+
+ if ( ctx->useImagemask && (ctx->bitspersample == 1) )
+ imageOp = "imagemask";
+
+ if ((ctx->level2 || ctx->level3) && PS_Lvl2page(ctx, tif, w, h))
+ return;
+ ctx->ps_bytesperrow = ctx->tf_bytesperrow - (ctx->extrasamples * ctx->bitspersample / 8)*w;
+ switch (ctx->photometric) {
+ case PHOTOMETRIC_RGB:
+ if (ctx->planarconfiguration == PLANARCONFIG_CONTIG) {
+ fprintf(ctx->fd, "%s", RGBcolorimage);
+ PSColorContigPreamble(ctx, w, h, 3);
+ PSDataColorContig(ctx, tif, w, h, 3);
+ } else {
+ PSColorSeparatePreamble(ctx, w, h, 3);
+ PSDataColorSeparate(ctx, tif, w, h, 3);
+ }
+ break;
+ case PHOTOMETRIC_SEPARATED:
+ /* XXX should emit CMYKcolorimage */
+ if (ctx->planarconfiguration == PLANARCONFIG_CONTIG) {
+ PSColorContigPreamble(ctx, w, h, 4);
+ PSDataColorContig(ctx, tif, w, h, 4);
+ } else {
+ PSColorSeparatePreamble(ctx, w, h, 4);
+ PSDataColorSeparate(ctx, tif, w, h, 4);
+ }
+ break;
+ case PHOTOMETRIC_PALETTE:
+ fprintf(ctx->fd, "%s", RGBcolorimage);
+ PhotoshopBanner(ctx, w, h, 1, 3, "false 3 colorimage");
+ fprintf(ctx->fd, "/scanLine %ld string def\n",
+ (long) ctx->ps_bytesperrow * 3L);
+ fprintf(ctx->fd, "%lu %lu 8\n",
+ (unsigned long) w, (unsigned long) h);
+ fprintf(ctx->fd, "[%lu 0 0 -%lu 0 %lu]\n",
+ (unsigned long) w, (unsigned long) h,
+ (unsigned long) h);
+ fprintf(ctx->fd,
+ "{currentfile scanLine readhexstring pop} bind\n");
+ fprintf(ctx->fd, "false 3 colorimage\n");
+ PSDataPalette(ctx, tif, w, h);
+ break;
+ case PHOTOMETRIC_MINISBLACK:
+ case PHOTOMETRIC_MINISWHITE:
+ PhotoshopBanner(ctx, w, h, 1, 1, imageOp);
+ fprintf(ctx->fd, "/scanLine %ld string def\n",
+ (long) ctx->ps_bytesperrow);
+ fprintf(ctx->fd, "%lu %lu %d\n",
+ (unsigned long) w, (unsigned long) h, ctx->bitspersample);
+ fprintf(ctx->fd, "[%lu 0 0 -%lu 0 %lu]\n",
+ (unsigned long) w, (unsigned long) h, (unsigned long) h);
+ fprintf(ctx->fd,
+ "{currentfile scanLine readhexstring pop} bind\n");
+ fprintf(ctx->fd, "%s\n", imageOp);
+ PSDataBW(ctx, tif, w, h);
+ break;
+ }
+ putc('\n', ctx->fd);
+}
+
+void
+PSColorContigPreamble(TIFF2PSContext* ctx, uint32 w, uint32 h, int nc)
+{
+ ctx->ps_bytesperrow = nc * (ctx->tf_bytesperrow / ctx->samplesperpixel);
+ PhotoshopBanner(ctx, w, h, 1, nc, "false %d colorimage");
+ fprintf(ctx->fd, "/line %ld string def\n", (long) ctx->ps_bytesperrow);
+ fprintf(ctx->fd, "%lu %lu %d\n",
+ (unsigned long) w, (unsigned long) h, ctx->bitspersample);
+ fprintf(ctx->fd, "[%lu 0 0 -%lu 0 %lu]\n",
+ (unsigned long) w, (unsigned long) h, (unsigned long) h);
+ fprintf(ctx->fd, "{currentfile line readhexstring pop} bind\n");
+ fprintf(ctx->fd, "false %d colorimage\n", nc);
+}
+
+void
+PSColorSeparatePreamble(TIFF2PSContext* ctx, uint32 w, uint32 h, int nc)
+{
+ int i;
+
+ PhotoshopBanner(ctx, w, h, ctx->ps_bytesperrow, nc, "true %d colorimage");
+ for (i = 0; i < nc; i++)
+ fprintf(ctx->fd, "/line%d %ld string def\n",
+ i, (long) ctx->ps_bytesperrow);
+ fprintf(ctx->fd, "%lu %lu %d\n",
+ (unsigned long) w, (unsigned long) h, ctx->bitspersample);
+ fprintf(ctx->fd, "[%lu 0 0 -%lu 0 %lu] \n",
+ (unsigned long) w, (unsigned long) h, (unsigned long) h);
+ for (i = 0; i < nc; i++)
+ fprintf(ctx->fd, "{currentfile line%d readhexstring pop}bind\n", i);
+ fprintf(ctx->fd, "true %d colorimage\n", nc);
+}
+
+#define DOBREAK(len, howmany, fd) \
+ if (((len) -= (howmany)) <= 0) { \
+ putc('\n', fd); \
+ (len) = MAXLINE-(howmany); \
+ }
+#define PUTHEX(c,fd) putc(hex[((c)>>4)&0xf],fd); putc(hex[(c)&0xf],fd)
+
+void
+PSDataColorContig(TIFF2PSContext* ctx, TIFF* tif, uint32 w, uint32 h, int nc)
+{
+ uint32 row;
+ int breaklen = MAXLINE, cc, es = ctx->samplesperpixel - nc;
+ unsigned char *tf_buf;
+ unsigned char *cp, c;
+
+ (void) w;
+ tf_buf = (unsigned char *) _TIFFmalloc(ctx->tf_bytesperrow);
+ if (tf_buf == NULL) {
+ TIFFError(ctx->filename, "No space for scanline buffer");
+ return;
+ }
+ for (row = 0; row < h; row++) {
+ if (TIFFReadScanline(tif, tf_buf, row, 0) < 0)
+ break;
+ cp = tf_buf;
+ if (ctx->alpha) {
+ int adjust;
+ cc = 0;
+ for (; cc < ctx->tf_bytesperrow; cc += ctx->samplesperpixel) {
+ DOBREAK(breaklen, nc, ctx->fd);
+ /*
+ * For images with ctx->alpha, matte against
+ * a white background; i.e.
+ * Cback * (1 - Aimage)
+ * where Cback = 1.
+ */
+ adjust = 255 - cp[nc];
+ switch (nc) {
+ case 4: c = *cp++ + adjust; PUTHEX(c,ctx->fd);
+ case 3: c = *cp++ + adjust; PUTHEX(c,ctx->fd);
+ case 2: c = *cp++ + adjust; PUTHEX(c,ctx->fd);
+ case 1: c = *cp++ + adjust; PUTHEX(c,ctx->fd);
+ }
+ cp += es;
+ }
+ } else {
+ cc = 0;
+ for (; cc < ctx->tf_bytesperrow; cc += ctx->samplesperpixel) {
+ DOBREAK(breaklen, nc, ctx->fd);
+ switch (nc) {
+ case 4: c = *cp++; PUTHEX(c,ctx->fd);
+ case 3: c = *cp++; PUTHEX(c,ctx->fd);
+ case 2: c = *cp++; PUTHEX(c,ctx->fd);
+ case 1: c = *cp++; PUTHEX(c,ctx->fd);
+ }
+ cp += es;
+ }
+ }
+ }
+ _TIFFfree((char *) tf_buf);
+}
+
+void
+PSDataColorSeparate(TIFF2PSContext* ctx, TIFF* tif, uint32 w, uint32 h, int nc)
+{
+ uint32 row;
+ int breaklen = MAXLINE, cc;
+ tsample_t s, maxs;
+ unsigned char *tf_buf;
+ unsigned char *cp, c;
+
+ (void) w;
+ tf_buf = (unsigned char *) _TIFFmalloc(ctx->tf_bytesperrow);
+ if (tf_buf == NULL) {
+ TIFFError(ctx->filename, "No space for scanline buffer");
+ return;
+ }
+ maxs = (ctx->samplesperpixel > nc ? nc : ctx->samplesperpixel);
+ for (row = 0; row < h; row++) {
+ for (s = 0; s < maxs; s++) {
+ if (TIFFReadScanline(tif, tf_buf, row, s) < 0)
+ break;
+ for (cp = tf_buf, cc = 0; cc < ctx->tf_bytesperrow; cc++) {
+ DOBREAK(breaklen, 1, ctx->fd);
+ c = *cp++;
+ PUTHEX(c,ctx->fd);
+ }
+ }
+ }
+ _TIFFfree((char *) tf_buf);
+}
+
+#define PUTRGBHEX(c,fd) \
+ PUTHEX(rmap[c],fd); PUTHEX(gmap[c],fd); PUTHEX(bmap[c],fd)
+
+void
+PSDataPalette(TIFF2PSContext* ctx, TIFF* tif, uint32 w, uint32 h)
+{
+ uint16 *rmap, *gmap, *bmap;
+ uint32 row;
+ int breaklen = MAXLINE, cc, nc;
+ unsigned char *tf_buf;
+ unsigned char *cp, c;
+
+ (void) w;
+ if (!TIFFGetField(tif, TIFFTAG_COLORMAP, &rmap, &gmap, &bmap)) {
+ TIFFError(ctx->filename, "Palette image w/o \"Colormap\" tag");
+ return;
+ }
+ switch (ctx->bitspersample) {
+ case 8: case 4: case 2: case 1:
+ break;
+ default:
+ TIFFError(ctx->filename, "Depth %d not supported", ctx->bitspersample);
+ return;
+ }
+ nc = 3 * (8 / ctx->bitspersample);
+ tf_buf = (unsigned char *) _TIFFmalloc(ctx->tf_bytesperrow);
+ if (tf_buf == NULL) {
+ TIFFError(ctx->filename, "No space for scanline buffer");
+ return;
+ }
+ if (checkcmap(ctx, tif, 1<<ctx->bitspersample, rmap, gmap, bmap) == 16) {
+ int i;
+#define CVT(x) ((unsigned short) (((x) * 255) / ((1U<<16)-1)))
+ for (i = (1<<ctx->bitspersample)-1; i >= 0; i--) {
+ rmap[i] = CVT(rmap[i]);
+ gmap[i] = CVT(gmap[i]);
+ bmap[i] = CVT(bmap[i]);
+ }
+#undef CVT
+ }
+ for (row = 0; row < h; row++) {
+ if (TIFFReadScanline(tif, tf_buf, row, 0) < 0)
+ break;
+ for (cp = tf_buf, cc = 0; cc < ctx->tf_bytesperrow; cc++) {
+ DOBREAK(breaklen, nc, ctx->fd);
+ switch (ctx->bitspersample) {
+ case 8:
+ c = *cp++; PUTRGBHEX(c, ctx->fd);
+ break;
+ case 4:
+ c = *cp++; PUTRGBHEX(c&0xf, ctx->fd);
+ c >>= 4; PUTRGBHEX(c, ctx->fd);
+ break;
+ case 2:
+ c = *cp++; PUTRGBHEX(c&0x3, ctx->fd);
+ c >>= 2; PUTRGBHEX(c&0x3, ctx->fd);
+ c >>= 2; PUTRGBHEX(c&0x3, ctx->fd);
+ c >>= 2; PUTRGBHEX(c, ctx->fd);
+ break;
+ case 1:
+ c = *cp++; PUTRGBHEX(c&0x1, ctx->fd);
+ c >>= 1; PUTRGBHEX(c&0x1, ctx->fd);
+ c >>= 1; PUTRGBHEX(c&0x1, ctx->fd);
+ c >>= 1; PUTRGBHEX(c&0x1, ctx->fd);
+ c >>= 1; PUTRGBHEX(c&0x1, ctx->fd);
+ c >>= 1; PUTRGBHEX(c&0x1, ctx->fd);
+ c >>= 1; PUTRGBHEX(c&0x1, ctx->fd);
+ c >>= 1; PUTRGBHEX(c, ctx->fd);
+ break;
+ }
+ }
+ }
+ _TIFFfree((char *) tf_buf);
+}
+
+void
+PSDataBW(TIFF2PSContext* ctx, TIFF* tif, uint32 w, uint32 h)
+{
+ int breaklen = MAXLINE;
+ unsigned char* tf_buf;
+ unsigned char* cp;
+ tsize_t stripsize = TIFFStripSize(tif);
+ tstrip_t s;
+
+#if defined( EXP_ASCII85ENCODER )
+ int ascii85_l; /* Length, in bytes, of ascii85_p[] data */
+ uint8 *ascii85_p = 0; /* Holds ASCII85 encoded data */
+#endif
+
+ (void) w; (void) h;
+ tf_buf = (unsigned char *) _TIFFmalloc(stripsize);
+ memset(tf_buf, 0, stripsize);
+ if (tf_buf == NULL) {
+ TIFFError(ctx->filename, "No space for scanline buffer");
+ return;
+ }
+
+#if defined( EXP_ASCII85ENCODER )
+ if ( ctx->ascii85 ) {
+ /*
+ * Allocate a buffer to hold the ASCII85 encoded data. Note
+ * that it is allocated with sufficient room to hold the
+ * encoded data (5*stripsize/4) plus the EOD marker (+8)
+ * and formatting line breaks. The line breaks are more
+ * than taken care of by using 6*stripsize/4 rather than
+ * 5*stripsize/4.
+ */
+
+ ascii85_p = _TIFFmalloc( (stripsize+(stripsize/2)) + 8 );
+
+ if ( !ascii85_p ) {
+ _TIFFfree( tf_buf );
+
+ TIFFError( ctx->filename,
+ "Cannot allocate ASCII85 encoding buffer." );
+ return;
+ }
+ }
+#endif
+
+ if (ctx->ascii85)
+ Ascii85Init(ctx);
+
+ for (s = 0; s < TIFFNumberOfStrips(tif); s++) {
+ int cc = TIFFReadEncodedStrip(tif, s, tf_buf, stripsize);
+ if (cc < 0) {
+ TIFFError(ctx->filename, "Can't read strip");
+ break;
+ }
+ cp = tf_buf;
+ if (ctx->photometric == PHOTOMETRIC_MINISWHITE) {
+ for (cp += cc; --cp >= tf_buf;)
+ *cp = ~*cp;
+ cp++;
+ }
+ if (ctx->ascii85) {
+#if defined( EXP_ASCII85ENCODER )
+ if (ctx->alpha) {
+ int adjust, i;
+ for (i = 0; i < cc; i+=2) {
+ adjust = 255 - cp[i + 1];
+ cp[i / 2] = cp[i] + adjust;
+ }
+ cc /= 2;
+ }
+
+ ascii85_l = Ascii85EncodeBlock(ctx, ascii85_p, 1, cp,
+ cc);
+
+ if ( ascii85_l > 0 )
+ fwrite( ascii85_p, ascii85_l, 1, ctx->fd );
+#else
+ while (cc-- > 0)
+ Ascii85Put(ctx, *cp++);
+#endif /* EXP_ASCII85_ENCODER */
+ } else {
+ unsigned char c;
+
+ if (ctx->alpha) {
+ int adjust;
+ while (cc-- > 0) {
+ DOBREAK(breaklen, 1, ctx->fd);
+ /*
+ * For images with ctx->alpha, matte against
+ * a white background; i.e.
+ * Cback * (1 - Aimage)
+ * where Cback = 1.
+ */
+ adjust = 255 - cp[1];
+ c = *cp++ + adjust; PUTHEX(c,ctx->fd);
+ cp++, cc--;
+ }
+ } else {
+ while (cc-- > 0) {
+ c = *cp++;
+ DOBREAK(breaklen, 1, ctx->fd);
+ PUTHEX(c, ctx->fd);
+ }
+ }
+ }
+ }
+
+ if ( !ctx->ascii85 )
+ {
+ if ( ctx->level2 || ctx->level3)
+ fputs(">\n", ctx->fd);
+ }
+#if !defined( EXP_ASCII85ENCODER )
+ else
+ Ascii85Flush(ctx);
+#else
+ if ( ascii85_p )
+ _TIFFfree( ascii85_p );
+#endif
+
+ _TIFFfree(tf_buf);
+}
+
+static void
+Ascii85Init(TIFF2PSContext *ctx)
+{
+ ctx->ascii85breaklen = 2*MAXLINE;
+ ctx->ascii85count = 0;
+}
+
+static void
+Ascii85Encode(unsigned char* raw, char *buf)
+{
+ uint32 word;
+
+ word = (((raw[0]<<8)+raw[1])<<16) + (raw[2]<<8) + raw[3];
+ if (word != 0L) {
+ uint32 q;
+ uint16 w1;
+
+ q = word / (85L*85*85*85); /* actually only a byte */
+ buf[0] = (char) (q + '!');
+
+ word -= q * (85L*85*85*85); q = word / (85L*85*85);
+ buf[1] = (char) (q + '!');
+
+ word -= q * (85L*85*85); q = word / (85*85);
+ buf[2] = (char) (q + '!');
+
+ w1 = (uint16) (word - q*(85L*85));
+ buf[3] = (char) ((w1 / 85) + '!');
+ buf[4] = (char) ((w1 % 85) + '!');
+ buf[5] = '\0';
+ } else
+ buf[0] = 'z', buf[1] = '\0';
+}
+
+void
+Ascii85Put(TIFF2PSContext *ctx, unsigned char code)
+{
+ ctx->ascii85buf[ctx->ascii85count++] = code;
+ if (ctx->ascii85count >= 4) {
+ unsigned char* p;
+ int n;
+ char buf[6];
+
+ for (n = ctx->ascii85count, p = ctx->ascii85buf;
+ n >= 4; n -= 4, p += 4) {
+ char* cp;
+ Ascii85Encode(p, buf);
+ for (cp = buf; *cp; cp++) {
+ putc(*cp, ctx->fd);
+ if (--ctx->ascii85breaklen == 0) {
+ putc('\n', ctx->fd);
+ ctx->ascii85breaklen = 2*MAXLINE;
+ }
+ }
+ }
+ _TIFFmemcpy(ctx->ascii85buf, p, n);
+ ctx->ascii85count = n;
+ }
+}
+
+void
+Ascii85Flush(TIFF2PSContext* ctx)
+{
+ if (ctx->ascii85count > 0) {
+ char res[6];
+ _TIFFmemset(&ctx->ascii85buf[ctx->ascii85count], 0, 3);
+ Ascii85Encode(ctx->ascii85buf, res);
+ fwrite(res[0] == 'z' ? "!!!!" : res, ctx->ascii85count + 1, 1, ctx->fd);
+ }
+ fputs("~>\n", ctx->fd);
+}
+#if defined( EXP_ASCII85ENCODER)
+
+#define A85BREAKCNTR ctx->ascii85breaklen
+#define A85BREAKLEN (2*MAXLINE)
+
+/*****************************************************************************
+*
+* Name: Ascii85EncodeBlock( ascii85_p, f_eod, raw_p, raw_l )
+*
+* Description: This routine will encode the raw data in the buffer described
+* by raw_p and raw_l into ASCII85 format and store the encoding
+* in the buffer given by ascii85_p.
+*
+* Parameters: ctx - TIFF2PS context
+* ascii85_p - A buffer supplied by the caller which will
+* contain the encoded ASCII85 data.
+* f_eod - Flag: Nz means to end the encoded buffer with
+* an End-Of-Data marker.
+* raw_p - Pointer to the buffer of data to be encoded
+* raw_l - Number of bytes in raw_p[] to be encoded
+*
+* Returns: (int) < 0 Error, see errno
+* >= 0 Number of bytes written to ascii85_p[].
+*
+* Notes: An external variable given by A85BREAKCNTR is used to
+* determine when to insert newline characters into the
+* encoded data. As each byte is placed into ascii85_p this
+* external is decremented. If the variable is decrement to
+* or past zero then a newline is inserted into ascii85_p
+* and the A85BREAKCNTR is then reset to A85BREAKLEN.
+* Note: for efficiency reasons the A85BREAKCNTR variable
+* is not actually checked on *every* character
+* placed into ascii85_p but often only for every
+* 5 characters.
+*
+* THE CALLER IS RESPONSIBLE FOR ENSURING THAT ASCII85_P[] IS
+* SUFFICIENTLY LARGE TO THE ENCODED DATA!
+* You will need at least 5 * (raw_l/4) bytes plus space for
+* newline characters and space for an EOD marker (if
+* requested). A safe calculation is to use 6*(raw_l/4) + 8
+* to size ascii85_p.
+*
+*****************************************************************************/
+
+int Ascii85EncodeBlock( TIFF2PSContext *ctx, uint8 * ascii85_p,
+ unsigned f_eod, const uint8 * raw_p, int raw_l )
+
+{
+ char ascii85[5]; /* Encoded 5 tuple */
+ int ascii85_l; /* Number of bytes written to ascii85_p[] */
+ int rc; /* Return code */
+ uint32 val32; /* Unencoded 4 tuple */
+
+ ascii85_l = 0; /* Nothing written yet */
+
+ if ( raw_p )
+ {
+ --raw_p; /* Prepare for pre-increment fetches */
+
+ for ( ; raw_l > 3; raw_l -= 4 )
+ {
+ val32 = *(++raw_p) << 24;
+ val32 += *(++raw_p) << 16;
+ val32 += *(++raw_p) << 8;
+ val32 += *(++raw_p);
+
+ if ( val32 == 0 ) /* Special case */
+ {
+ ascii85_p[ascii85_l] = 'z';
+ rc = 1;
+ }
+
+ else
+ {
+ ascii85[4] = (char) ((val32 % 85) + 33);
+ val32 /= 85;
+
+ ascii85[3] = (char) ((val32 % 85) + 33);
+ val32 /= 85;
+
+ ascii85[2] = (char) ((val32 % 85) + 33);
+ val32 /= 85;
+
+ ascii85[1] = (char) ((val32 % 85) + 33);
+ ascii85[0] = (char) ((val32 / 85) + 33);
+
+ _TIFFmemcpy( &ascii85_p[ascii85_l], ascii85, sizeof(ascii85) );
+ rc = sizeof(ascii85);
+ }
+
+ ascii85_l += rc;
+
+ if ( (A85BREAKCNTR -= rc) <= 0 )
+ {
+ ascii85_p[ascii85_l] = '\n';
+ ++ascii85_l;
+ A85BREAKCNTR = A85BREAKLEN;
+ }
+ }
+
+ /*
+ * Output any straggler bytes:
+ */
+
+ if ( raw_l > 0 )
+ {
+ int len; /* Output this many bytes */
+
+ len = raw_l + 1;
+ val32 = *++raw_p << 24; /* Prime the pump */
+
+ if ( --raw_l > 0 ) val32 += *(++raw_p) << 16;
+ if ( --raw_l > 0 ) val32 += *(++raw_p) << 8;
+
+ val32 /= 85;
+
+ ascii85[3] = (char) ((val32 % 85) + 33);
+ val32 /= 85;
+
+ ascii85[2] = (char) ((val32 % 85) + 33);
+ val32 /= 85;
+
+ ascii85[1] = (char) ((val32 % 85) + 33);
+ ascii85[0] = (char) ((val32 / 85) + 33);
+
+ _TIFFmemcpy( &ascii85_p[ascii85_l], ascii85, len );
+ ascii85_l += len;
+ }
+ }
+
+ /*
+ * If requested add an ASCII85 End Of Data marker:
+ */
+
+ if ( f_eod )
+ {
+ ascii85_p[ascii85_l++] = '~';
+ ascii85_p[ascii85_l++] = '>';
+ ascii85_p[ascii85_l++] = '\n';
+ }
+
+ return ( ascii85_l );
+
+} /* Ascii85EncodeBlock() */
+
+#endif /* EXP_ASCII85ENCODER */
+
+/* vim: set ts=8 sts=8 sw=8 noet: */
diff --git a/backend/tiff/tiff2ps.h b/backend/tiff/tiff2ps.h
new file mode 100644
index 00000000..575b881b
--- /dev/null
+++ b/backend/tiff/tiff2ps.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2005 rpath, Inc.
+ *
+ * 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, 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 <glib.h>
+#include <stdio.h>
+#include "tiffio.h"
+
+typedef struct _TIFF2PSContext TIFF2PSContext;
+
+TIFF2PSContext *tiff2ps_context_new(const gchar *filename);
+void tiff2ps_process_page(TIFF2PSContext* ctx, TIFF* tif,
+ double pagewidth, double pageheight,
+ double leftmargin, double bottommargin,
+ gboolean center);
+void tiff2ps_context_finalize(TIFF2PSContext* ctx);
diff --git a/backend/tiff/tiffdocument.evince-backend.in b/backend/tiff/tiffdocument.evince-backend.in
new file mode 100644
index 00000000..daaa7fd9
--- /dev/null
+++ b/backend/tiff/tiffdocument.evince-backend.in
@@ -0,0 +1,4 @@
+[Evince Backend]
+Module=tiffdocument
+_TypeDescription=Tiff Documents
+MimeType=image/tiff
diff --git a/config.h.in~ b/config.h.in~
new file mode 100644
index 00000000..c0f17b0f
--- /dev/null
+++ b/config.h.in~
@@ -0,0 +1,191 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* Enable support for comics. */
+#undef ENABLE_COMICS
+
+/* Define if DBUS support is enabled */
+#undef ENABLE_DBUS
+
+/* Enable djvu viewer support. */
+#undef ENABLE_DJVU
+
+/* Enable dvi viewer support. */
+#undef ENABLE_DVI
+
+/* Enable support for impress. */
+#undef ENABLE_IMPRESS
+
+/* always defined to indicate that i18n is enabled */
+#undef ENABLE_NLS
+
+/* Enable pixbuf support. */
+#undef ENABLE_PIXBUF
+
+/* Enable support for PostScript files. */
+#undef ENABLE_PS
+
+/* Enable multipage tiff support. */
+#undef ENABLE_TIFF
+
+/* Gettext package */
+#undef GETTEXT_PACKAGE
+
+/* Define if gtk+-unix-print is enabled. */
+#undef GTKUNIXPRINT_ENABLED
+
+/* Define to 1 if you have the `bind_textdomain_codeset' function. */
+#undef HAVE_BIND_TEXTDOMAIN_CODESET
+
+/* Define to 1 if you have the `cairo_format_stride_for_width' function. */
+#undef HAVE_CAIRO_FORMAT_STRIDE_FOR_WIDTH
+
+/* defined if cairo-pdf is available */
+#undef HAVE_CAIRO_PDF
+
+/* defined if cairo-ps is available */
+#undef HAVE_CAIRO_PS
+
+/* defined if you build the caja plugin */
+#undef HAVE_CAJA
+
+/* Define to 1 if you have the `dcgettext' function. */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <execinfo.h> header file. */
+#undef HAVE_EXECINFO_H
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#undef HAVE_LC_MESSAGES
+
+/* Define to 1 if you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Defines if localtime_r is available on your system */
+#undef HAVE_LOCALTIME_R
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `poppler_page_add_annot' function. */
+#undef HAVE_POPPLER_PAGE_ADD_ANNOT
+
+/* Define to 1 if you have the `poppler_page_get_selected_text' function. */
+#undef HAVE_POPPLER_PAGE_GET_SELECTED_TEXT
+
+/* Define to 1 if you have the `poppler_page_get_text_layout' function. */
+#undef HAVE_POPPLER_PAGE_GET_TEXT_LAYOUT
+
+/* Have libspectre */
+#undef HAVE_SPECTRE
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <tiff.h> header file. */
+#undef HAVE_TIFF_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define if _NL_MEASUREMENT_MEASUREMENT is available */
+#undef HAVE__NL_MEASUREMENT_MEASUREMENT
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+ */
+#undef LT_OBJDIR
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Enable offline help */
+#undef OFFLINE_HELP_ENABLED
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define if building for the hildon platform */
+#undef PLATFORM_HILDON
+
+/* The size of `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of `short', as computed by sizeof. */
+#undef SIZEOF_SHORT
+
+/* The size of `void *', as computed by sizeof. */
+#undef SIZEOF_VOID_P
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
+
+/* Define if MateConf support is enabled */
+#undef WITH_MATECONF
+
+/* Define if KEYRING support is enabled */
+#undef WITH_KEYRING
+
+/* Define if smclient is enabled */
+#undef WITH_SMCLIENT
+
+/* Enable t1lib support in dvi. */
+#undef WITH_TYPE1_FONTS
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+ calls it, or to nothing if 'inline' is not supported under any name. */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 00000000..a209b5ce
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,884 @@
+# *****************************************************************************
+# Versioning
+# *****************************************************************************
+
+m4_define([ev_major_version],[2])
+m4_define([ev_minor_version],[32])
+m4_define([ev_micro_version],[0])
+m4_define([ev_extra_version],[])
+m4_define([ev_version],[ev_major_version.ev_minor_version.ev_micro_version()ev_extra_version])
+
+# The evince API version
+m4_define([ev_api_version], [2.32])
+
+# Libtool versioning. The backend and view libraries have separate versions.
+# Before making a release, the libtool version should be modified.
+# The string is of the form C:R:A.
+# - If interfaces have been changed or added, but binary compatibility has
+# been preserved, change to C+1:0:A+1
+# - If binary compatibility has been broken (eg removed or changed interfaces)
+# change to C+1:0:0
+# - If the interface is the same as the previous version, change to C:R+1:A
+
+# Libtool version of the backend library
+m4_define([ev_document_lt_current],[3])
+m4_define([ev_document_lt_revision],[0])
+m4_define([ev_document_lt_age],[0])
+m4_define([ev_document_lt_version_info],[ev_document_lt_current:ev_document_lt_revision:ev_document_lt_age])
+m4_define([ev_document_lt_current_minus_age],[m4_eval(ev_document_lt_current - ev_document_lt_age)])
+
+# Libtool version of the view library
+m4_define([ev_view_lt_current],[3])
+m4_define([ev_view_lt_revision],[0])
+m4_define([ev_view_lt_age],[0])
+m4_define([ev_view_lt_version_info],[ev_view_lt_current:ev_view_lt_revision:ev_view_lt_age])
+m4_define([ev_view_lt_current_minus_age],[m4_eval(ev_view_lt_current - ev_view_lt_age)])
+
+# Binary version for the document backends
+m4_define([ev_binary_version],[ev_document_lt_current])
+
+# *****************************************************************************
+
+AC_PREREQ([2.57])
+AC_INIT([Evince],[ev_version],[http://bugzilla.mate.org/enter_bug.cgi?product=evince],[evince])
+AM_INIT_AUTOMAKE([1.10 foreign dist-bzip2 no-dist-gzip])
+
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
+
+if test -z "$enable_maintainer_mode"; then
+ enable_maintainer_mode=yes
+fi
+AM_MAINTAINER_MODE([enable])
+
+m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+
+AM_PROG_LIBTOOL
+
+AC_ISC_POSIX
+AC_PROG_CC
+AM_PROG_CC_STDC
+AM_PROG_CC_C_O
+AC_PROG_CXX
+AC_STDC_HEADERS
+
+AC_PROG_SED
+AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal])
+AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums])
+
+MATE_MAINTAINER_MODE_DEFINES
+MATE_COMPILE_WARNINGS
+MATE_CXX_WARNINGS
+
+dnl FIXME: remove this when required gtk+ >= 2.19.7
+DISABLE_DEPRECATED=
+AC_SUBST([DISABLE_DEPRECATED])
+
+IT_PROG_INTLTOOL([0.35.0])
+
+GETTEXT_PACKAGE=evince
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],["$GETTEXT_PACKAGE"],[Gettext package])
+AM_GLIB_GNU_GETTEXT
+
+m4_pattern_allow([AM_V_GEN])dnl Make autoconf not complain about the rule below
+EV_INTLTOOL_EVINCE_BACKEND_RULE='%.evince-backend: %.evince-backend.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(AM_V_GEN) LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+AC_SUBST([EV_INTLTOOL_EVINCE_BACKEND_RULE])
+
+GLIB_GSETTINGS
+
+# Check which platform to use
+
+AC_MSG_CHECKING([for which platform to build])
+AC_ARG_WITH([platform],
+ [AS_HELP_STRING([--with-platform=mate|win32|hildon],
+ [Setting platform (default: mate)])],
+ [case "$withval" in
+ mate|win32|hildon) ;;
+ *) AC_MSG_ERROR([invalid argument "$withval" for --with-platform]) ;;
+ esac],
+ [case "$host" in
+ *-*-mingw*|*-*-cygwin*) with_platform="win32" ;;
+ *) with_platform=mate ;;
+ esac])
+
+AC_MSG_RESULT([$with_platform])
+
+if test "$with_platform" = "win32"; then
+ AC_CHECK_TOOL([WINDRES],[windres])
+ AC_MSG_CHECKING([for native Win32])
+ case "$host" in
+ *-*-mingw*)
+ os_win32=yes
+ ;;
+ *)
+ os_win32=no
+ ;;
+ esac
+ AC_MSG_RESULT([$os_win32])
+fi
+
+AM_CONDITIONAL([PLATFORM_HILDON],[test "$with_platform" = "hildon"])
+AM_CONDITIONAL([PLATFORM_WIN32],[test "$with_platform" = "win32"])
+
+AC_MSG_CHECKING([which gtk+ version to compile against])
+AC_ARG_WITH([gtk],
+ [AS_HELP_STRING([--with-gtk=2.0|3.0],[which gtk+ version to compile against (default: 2.0)])],
+ [case "$with_gtk" in
+ 2.0|3.0) ;;
+ *) AC_MSG_ERROR([invalid gtk version specified]) ;;
+ esac],
+ [with_gtk=2.0])
+AC_MSG_RESULT([$with_gtk])
+
+dnl Specify required versions of dependencies
+CAIRO_REQUIRED=1.9.10
+GLIB_REQUIRED=2.25.11
+KEYRING_REQUIRED=2.22.0
+
+case "$with_gtk" in
+ 2.0) GTK_API_VERSION=2.0
+ GAIL_API_VERSION=
+ GTK_REQUIRED=2.21.5
+ ;;
+ 3.0) GTK_API_VERSION=3.0
+ GAIL_API_VERSION=-3.0
+ GTK_REQUIRED=2.90.5
+ ;;
+esac
+
+AC_SUBST([GLIB_REQUIRED])
+AC_SUBST([GTK_REQUIRED])
+AC_SUBST([GTK_API_VERSION])
+
+MATE_ICON_THEME_REQUIRED=2.17.1
+LIBXML_REQUIRED=2.5.0
+
+dnl Check dependencies
+
+# LIB_CFLAGS for helpers and generic widgets. (libdocument, cut-and-paste)
+# BACKEND_CFLAGS for backend implementations.
+# FRONTEND_CFLAGS for frontend implementations. (properties, thumbnailer)
+# FRONTEND_LIBS
+# SHELL_CFLAGS for shell implementation.
+# SHELL_LIBS
+
+
+PKG_CHECK_MODULES(LIBDOCUMENT, gtk+-$GTK_API_VERSION >= $GTK_REQUIRED gio-2.0 >= $GLIB_REQUIRED)
+PKG_CHECK_MODULES(LIBVIEW, gtk+-$GTK_API_VERSION >= $GTK_REQUIRED gail$GAIL_API_VERSION >= $GTK_REQUIRED gthread-2.0 gio-2.0 >= $GLIB_REQUIRED)
+PKG_CHECK_MODULES(BACKEND, cairo >= $CAIRO_REQUIRED gtk+-$GTK_API_VERSION >= $GTK_REQUIRED)
+PKG_CHECK_MODULES(FRONTEND_CORE, gtk+-$GTK_API_VERSION >= $GTK_REQUIRED gthread-2.0 gio-2.0 >= $GLIB_REQUIRED)
+
+SHELL_PLATFORM_PKGS=
+case "$with_platform" in
+ hildon) AC_DEFINE([PLATFORM_HILDON],[1],[Define if building for the hildon platform])
+ SHELL_PLATFORM_PKGS="hildon-1 hildon-fm-2 libosso"
+ ;;
+ mate)
+ # Evince has a rather soft run-time dependency on hicolor-icon-theme.
+ # If the hicolor theme is not available, Evince fails to display some
+ # icons. Because we cannot check for it at run-time, we instead
+ # would like to require the icon theme at compile-time. But, because
+ # the hicolor-icon-theme does not have a pkgconfig file, on mate we
+ # require the mate icon theme instead.
+ SHELL_PLATFORM_PKGS="mate-icon-theme >= $MATE_ICON_THEME_REQUIRED"
+ # The totem-screensaver and egg_smclient code use x11 directly.
+ SHELL_PLATFORM_PKGS="$SHELL_PLATFORM_PKGS x11"
+ ;;
+ *)
+ # On all other platforms we issue a warning about the runtime
+ # dependency.
+ AC_MSG_WARN([Evince has a soft run-time dependency on hicolor-icon-theme. You are advised to have this theme installed when running Evince.]);
+ SHELL_PLATFORM_PKGS=""
+ ;;
+esac
+
+PKG_CHECK_MODULES([SHELL_CORE],[libxml-2.0 >= $LIBXML_REQUIRED gtk+-$GTK_API_VERSION >= $GTK_REQUIRED gio-2.0 >= $GLIB_REQUIRED gthread-2.0 $SHELL_PLATFORM_PKGS])
+
+# *********
+# SM client
+# *********
+
+GDK_TARGET="$($PKG_CONFIG --variable target gdk-$GTK_API_VERSION)"
+
+AC_MSG_CHECKING([which smclient backend to use])
+AC_ARG_WITH([smclient],
+ [AS_HELP_STRING([--with-smclient-backend=no|xsmp|win32|quartz],
+ [Setting smclient backend (default:auto)])],
+ [],
+ [case "$GDK_TARGET" in
+ x11) case "$with_platform" in
+ mate) with_smclient=xsmp ;;
+ *) with_smclient=no ;;
+ esac ;;
+ win32|quartz) with_smclient=$GDK_TARGET ;;
+ *) with_smclient=no ;;
+ esac])
+
+AC_MSG_RESULT([$with_smclient])
+
+if test "$with_smclient" != "no"; then
+ AC_DEFINE([WITH_SMCLIENT],[1],[Define if smclient is enabled])
+
+ case "$with_smclient" in
+ xsmp) SMCLIENT_PKGS="sm >= 1.0.0" ;;
+ *) SMCLIENT_PKGS="" ;;
+ esac
+
+ PKG_CHECK_MODULES([SMCLIENT],[gtk+-$GTK_API_VERSION gthread-2.0 $SMCLIENT_PKGS])
+ AC_SUBST([SMCLIENT_CFLAGS])
+ AC_SUBST([SMCLIENT_LIBS])
+fi
+
+AM_CONDITIONAL([WITH_SMCLIENT],[test "$with_smclient" != "no"])
+AM_CONDITIONAL([WITH_SMCLIENT_XSMP],[test "$with_smclient" = "xsmp"])
+AM_CONDITIONAL([WITH_SMCLIENT_WIN32],[test "$with_smclient" = "win32"])
+AM_CONDITIONAL([WITH_SMCLIENT_QUARTZ],[test "$with_smclient" = "quartz"])
+
+# ***
+
+BACKEND_LIBTOOL_FLAGS="-module -avoid-version -no-undefined -export-symbols \$(top_srcdir)/backend/backend.symbols"
+AC_SUBST(BACKEND_LIBTOOL_FLAGS)
+
+dnl ===== Check special functions
+evince_save_LIBS=$LIBS
+LIBS="$LIBS $BACKEND_LIBS"
+AC_CHECK_FUNCS(cairo_format_stride_for_width)
+LIBS=$evince_save_LIBS
+
+# ******************
+# GKT+ Unix Printing
+# ******************
+
+AC_MSG_CHECKING([whether gtk+-unix-print support is requested])
+AC_ARG_WITH([gtk-unix-print],
+ [AS_HELP_STRING([--without-gtk-unix-print],
+ [Disable the use of gtk-unix-print])],
+ [],[case "$os_win32" in
+ yes) with_gtk_unix_print=no ;;
+ *) with_gtk_unix_print=yes ;;
+ esac])
+
+AC_MSG_RESULT([$with_gtk_unix_print])
+
+if test "$with_gtk_unix_print" = "yes"; then
+ PKG_CHECK_MODULES(GTKUNIXPRINT, [gtk+-unix-print-$GTK_API_VERSION >= $GTK_REQUIRED])
+ AC_DEFINE([GTKUNIXPRINT_ENABLED], [1], [Define if gtk+-unix-print is enabled.])
+fi
+
+# *********************
+# MATE Keyring support
+# *********************
+
+AC_ARG_WITH(keyring,
+ [AS_HELP_STRING([--without-keyring],
+ [Disable the use of mate-keyring])],
+ [],
+ [case "$with_platform" in
+ mate) with_keyring=yes ;;
+ hildon|win32) with_keyring=no ;;
+ esac])
+
+AM_CONDITIONAL([WITH_KEYRING],[test "$with_keyring" = "yes"])
+
+if test "$with_keyring" = "yes"; then
+ PKG_CHECK_MODULES(KEYRING, mate-keyring-1 >= $KEYRING_REQUIRED)
+ AC_DEFINE([WITH_KEYRING],[1],[Define if KEYRING support is enabled])
+fi
+
+# ****
+# DBUS
+# ****
+
+AC_ARG_ENABLE([dbus],
+ [AS_HELP_STRING([--disable-dbus], [Disable support for dbus])],
+ [],
+ [case "$with_platform" in
+ mate) enable_dbus=yes ;;
+ hildon) enable_dbus=no ;;
+ esac])
+
+if test "$enable_dbus" = "yes"; then
+ AC_DEFINE([ENABLE_DBUS],[1],[Define if DBUS support is enabled])
+
+ PKG_CHECK_MODULES([EV_DAEMON], [gio-2.0 >= $GLIB_REQUIRED])
+fi
+
+AM_CONDITIONAL([ENABLE_DBUS], [test "$enable_dbus" = "yes"])
+
+dnl ========= Check for MateConf
+
+AC_MSG_CHECKING([whether MateConf support is requested])
+AC_ARG_WITH([mateconf],
+ [AS_HELP_STRING([--without-mateconf],
+ [Disable the use of mateconf])],
+ [],
+ [case "$os_win32" in
+ yes) with_mateconf=no ;;
+ *) with_mateconf=yes ;;
+ esac])
+AC_MSG_RESULT([$with_mateconf])
+
+AM_CONDITIONAL([WITH_MATECONF],[test "$with_mateconf" = "yes"])
+
+if test "$with_mateconf" = "yes"; then
+ PKG_CHECK_MODULES([MATECONF],[mateconf-2.0])
+ AC_DEFINE([WITH_MATECONF],[1],[Define if MateConf support is enabled])
+
+ AM_MATECONF_SOURCE_2
+
+ AC_PATH_PROG([MATECONFTOOL], [mateconftool-2], [false])
+ if test "$MATECONFTOOL" = "false"; then
+ AC_MSG_ERROR([mateconftool-2 executable not found in your path - should be installed with MateConf])
+ fi
+else
+ AM_CONDITIONAL([MATECONF_SCHEMAS_INSTALL],false)
+fi
+
+dnl Debug mode
+
+AC_ARG_ENABLE([debug],
+ AS_HELP_STRING([--enable-debug],
+ [Turn on evince debug mode]),
+ [enable_debug=$enableval],
+ [enable_debug=no])
+
+if test "x$enable_debug" = "xyes"; then
+ DEBUG_FLAGS="-DEV_ENABLE_DEBUG"
+fi
+
+AC_ARG_ENABLE([tests],
+ AS_HELP_STRING([--enable-tests], [Enable the tests]),
+ [enable_tests=$enableval],
+ [enable_tests=yes])
+
+AM_CONDITIONAL(ENABLE_TESTS, test x$enable_tests = xyes)
+
+LIBDOCUMENT_CFLAGS="$LIBDOCUMENT_CFLAGS $DEBUG_FLAGS"
+LIBDOCUMENT_LIBS="$LIBDOCUMENT_LIBS"
+AC_SUBST(LIBDOCUMENT_CFLAGS)
+AC_SUBST(LIBDOCUMENT_LIBS)
+
+LIBVIEW_CFLAGS="$LIBVIEW_CFLAGS $GTKUNIXPRINT_CFLAGS $DEBUG_FLAGS"
+LIBVIEW_LIBS="$LIBVIEW_LIBS $GTKUNIXPRINT_LIBS -lm"
+AC_SUBST(LIBVIEW_CFLAGS)
+AC_SUBST(LIBVIEW_LIBS)
+
+BACKEND_CFLAGS="$BACKEND_CFLAGS -DGDK_MULTIHEAD_SAFE -DGTK_MULTIHEAD_SAFE $DEBUG_FLAGS"
+BACKEND_LIBS="$BACKEND_LIBS -lm"
+AC_SUBST(BACKEND_CFLAGS)
+AC_SUBST(BACKEND_LIBS)
+
+SHELL_CFLAGS="$SHELL_CORE_CFLAGS $KEYRING_CFLAGS $MATECONF_CFLAGS -DGDK_MULTIHEAD_SAFE -DGTK_MULTIHEAD_SAFE $DEBUG_FLAGS"
+SHELL_LIBS="$SHELL_CORE_LIBS $KEYRING_LIBS $MATECONF_LIBS -lz -lm"
+AC_SUBST(SHELL_CFLAGS)
+AC_SUBST(SHELL_LIBS)
+
+FRONTEND_CFLAGS="$FRONTEND_CORE_CFLAGS $DEBUG_FLAGS"
+FRONTEND_LIBS="$FRONTEND_CORE_LIBS -lz"
+AC_SUBST(FRONTEND_CFLAGS)
+AC_SUBST(FRONTEND_LIBS)
+
+EV_DAEMON_CFLAGS="$EV_DAEMON_CFLAGS $DEBUG_FLAGS"
+AC_SUBST([EV_DAEMON_CFLAGS])
+AC_SUBST([EV_DAEMON_LIBS])
+
+# Check for Caja property page build
+AC_ARG_ENABLE([caja],
+ [AS_HELP_STRING([--disable-caja],
+ [Disable build of caja extensions])],
+ [],
+ [case "$with_platform" in
+ mate) enable_caja=yes ;;
+ *) enable_caja=no ;;
+ esac])
+
+if test "$enable_caja" = "yes" ; then
+ PKG_CHECK_MODULES([CAJA],[gtk+-x11-$GTK_API_VERSION $MM gthread-2.0 libcaja-extension],
+ [],[AC_MSG_ERROR([libcaja-extension not found; use --disable-caja to disable the caja extensions])])
+ CAJA_EXTENSION_DIR=`$PKG_CONFIG --variable=extensiondir libcaja-extension`
+ AC_SUBST([cajaextensiondir],[$CAJA_EXTENSION_DIR])
+ AC_SUBST(CAJA_CFLAGS)
+ AC_SUBST(CAJA_LIBS)
+
+ AC_DEFINE([HAVE_CAJA],[1], [defined if you build the caja plugin])
+fi
+
+AM_CONDITIONAL([ENABLE_CAJA],[test "$enable_caja" = "yes"])
+
+# Check for thumbnailer build
+
+AC_ARG_ENABLE([thumbnailer],
+ [AS_HELP_STRING([--disable-thumbnailer],
+ [Disable MATE thumbnailer])],
+ [],
+ [case "$with_platform" in
+ hildon) enable_thumbnailer=no ;;
+ *) enable_thumbnailer=yes ;;
+ esac])
+
+AM_CONDITIONAL([ENABLE_THUMBNAILER],[test "$enable_thumbnailer" = "yes"])
+
+# ***************
+# Print Previewer
+# ***************
+
+AC_ARG_ENABLE([previewer],
+ [AS_HELP_STRING([--disable-previewer],
+ [Disable the MATE Document Previewer])],
+ [],
+ [case "$with_platform" in
+ hildon) enable_previewer=no ;;
+ *) enable_previewer=yes ;;
+ esac])
+
+if test x$enable_previewer = "xyes" ; then
+ PKG_CHECK_MODULES([PREVIEWER],[gtk+-$GTK_API_VERSION >= $GTK_REQUIRED gthread-2.0 gio-2.0 >= $GLIB_REQUIRED])
+fi
+
+AM_CONDITIONAL([ENABLE_PREVIEWER],[test "$enable_previewer" = "yes"])
+PREVIEWER_CFLAGS="$PREVIEWER_CFLAGS $GTKUNIXPRINT_CFLAGS $DEBUG_FLAGS"
+PREVIEWER_LIBS="$PREVIEWER_LIBS $GTKUNIXPRINT_LIBS -lz"
+AC_SUBST(PREVIEWER_CFLAGS)
+AC_SUBST(PREVIEWER_LIBS)
+
+# ***
+# GIR
+# ***
+
+AC_MSG_CHECKING([whether GObject introspection is requested])
+AC_ARG_ENABLE([introspection],
+ AS_HELP_STRING([--enable-introspection],
+ [Enable GObject introspection]),
+ [enable_introspection=$enableval],
+ [enable_introspection=no])
+AC_MSG_RESULT([$enable_introspection])
+
+G_IR_SCANNER=
+G_IR_COMPILER=
+G_IR_GENERATE=
+GIRDIR=
+GIRTYPELIBDIR=
+
+if test "$enable_introspection" = "yes"; then
+ GOBJECT_INTROSPECTION_REQUIRED=0.6
+ PKG_CHECK_MODULES([GOBJECT_INTROSPECTION],[gobject-introspection-1.0 >= $GOBJECT_INTROSPECTION_REQUIRED])
+
+ G_IR_SCANNER="$($PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0)"
+ G_IR_COMPILER="$($PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0)"
+ G_IR_GENERATE="$($PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0)"
+ GIRDIR="$($PKG_CONFIG --variable=girdir gobject-introspection-1.0)"
+ GIRTYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
+fi
+
+AC_SUBST([G_IR_SCANNER])
+AC_SUBST([G_IR_COMPILER])
+AC_SUBST([G_IR_GENERATE])
+AC_SUBST([GIRDIR])
+AC_SUBST([GIRTYPELIBDIR])
+
+AM_CONDITIONAL([ENABLE_INTROSPECTION],[test "$enable_introspection" = "yes"])
+
+dnl ================== portability checks ===========================================
+
+dnl for backtrace()
+AC_CHECK_HEADERS([execinfo.h])
+
+AC_CHECK_DECL([_NL_MEASUREMENT_MEASUREMENT],[
+ AC_DEFINE([HAVE__NL_MEASUREMENT_MEASUREMENT],[1],[Define if _NL_MEASUREMENT_MEASUREMENT is available])
+ ],[],[#include <langinfo.h>])
+
+dnl ================== pdf checks ===================================================
+AC_ARG_ENABLE([pdf],
+ [AS_HELP_STRING([--disable-pdf],
+ [Disable the PDF support])],
+ [enable_pdf=$enableval],
+ [enable_pdf=yes])
+
+if test "x$enable_pdf" = "xyes"; then
+ POPPLER_REQUIRED=0.14.0
+ PKG_CHECK_MODULES(POPPLER, poppler-glib >= $POPPLER_REQUIRED libxml-2.0 >= $LIBXML_REQUIRED,enable_pdf=yes,enable_pdf=no)
+
+ if test "x$enable_pdf" = "xyes"; then
+ evince_save_LIBS=$LIBS
+ LIBS="$LIBS $POPPLER_LIBS"
+ AC_CHECK_FUNCS(poppler_page_get_text_layout)
+ AC_CHECK_FUNCS(poppler_page_get_selected_text)
+ AC_CHECK_FUNCS(poppler_page_add_annot)
+ LIBS=$evince_save_LIBS
+ PKG_CHECK_MODULES(CAIRO_PDF, cairo-pdf, enable_cairo_pdf=yes, enable_cairo_pdf=no)
+ if test x$enable_cairo_pdf = xyes; then
+ AC_DEFINE([HAVE_CAIRO_PDF], [1], [defined if cairo-pdf is available])
+ fi
+
+ PKG_CHECK_MODULES(CAIRO_PS, cairo-ps, enable_cairo_ps=yes, enable_cairo_ps=no)
+ if test x$enable_cairo_ps = xyes; then
+ AC_DEFINE([HAVE_CAIRO_PS], [1], [defined if cairo-ps is available])
+ fi
+ else
+ AC_MSG_ERROR("PDF support is disabled since poppler-glib library version $POPPLER_REQUIRED or newer not found")
+ fi
+fi
+
+AM_CONDITIONAL(ENABLE_PDF, test x$enable_pdf = xyes)
+dnl ================== end of pdf checks ============================================
+
+dnl libspectre (used by ps and dvi backends)
+SPECTRE_REQUIRED=0.2.0
+PKG_CHECK_MODULES(SPECTRE, libspectre >= $SPECTRE_REQUIRED,have_spectre=yes,have_spectre=no)
+AM_CONDITIONAL(HAVE_SPECTRE, test x$have_spectre = xyes)
+if test "x$have_spectre" = "xyes"; then
+ AC_DEFINE([HAVE_SPECTRE], [1], [Have libspectre])
+fi
+
+dnl ================== ps checks ====================================================
+AC_ARG_ENABLE(ps,
+ [AS_HELP_STRING([--disable-ps],
+ [Disable the PostScript backend])],
+ [enable_ps=$enableval],
+ [enable_ps=yes])
+
+if test "x$enable_ps" = "xyes"; then
+ if test "x$have_spectre" = "xyes"; then
+ AC_DEFINE([ENABLE_PS], [1], [Enable support for PostScript files.])
+ else
+ enable_ps="no"
+ AC_MSG_WARN([PS support is disabled since libspectre (version >= $SPECTRE_REQUIRED) is needed])
+ fi
+fi
+AM_CONDITIONAL(ENABLE_PS, test x$enable_ps = xyes)
+dnl ======================== End of ps checks ===================================
+
+dnl ================== tiff checks ===================================================
+AC_ARG_ENABLE(tiff,
+ [AS_HELP_STRING([--disable-tiff],
+ [Disable the support of multipage tiff])],
+ [enable_tiff=$enableval],
+ [enable_tiff=yes])
+
+if test "x$enable_tiff" = "xyes"; then
+ AC_CHECK_HEADERS([tiff.h],enable_tiff=yes,enable_tiff=no,)
+ if test "x$enable_tiff" = "xyes"; then
+ AC_CHECK_LIB([tiff],TIFFOpen,enable_tiff=yes,enable_tiff=no,"-lz")
+ AC_CHECK_LIB([tiff],TIFFReadRGBAImageOriented,enable_tiff=yes,enable_tiff=no,"-lz")
+ fi
+ if test "x$enable_tiff" = "xyes"; then
+ AC_DEFINE([ENABLE_TIFF], [1], [Enable multipage tiff support.])
+ else
+ AC_MSG_WARN("Tiff support is disabled since tiff library version 3.6 or newer not found")
+ fi
+fi
+
+AM_CONDITIONAL(ENABLE_TIFF, test x$enable_tiff = xyes)
+dnl ================== end of tiff checks ============================================
+
+dnl ================== djvu checks ===================================================
+
+AC_ARG_ENABLE(djvu,
+ [AS_HELP_STRING([--disable-djvu],
+ [Disable the support of djvu viewer])],
+ [enable_djvu=$enableval],
+ [enable_djvu=yes])
+
+if test "x$enable_djvu" = "xyes"; then
+ DJVULIBRE_REQUIRED=3.5.17
+ PKG_CHECK_MODULES(DJVU, ddjvuapi >= $DJVULIBRE_REQUIRED, enable_djvu=yes, enable_djvu=no)
+
+ if test "x$enable_djvu" = "xyes"; then
+ AC_DEFINE([ENABLE_DJVU], [1], [Enable djvu viewer support.])
+ else
+ AC_MSG_WARN([
+** Djvu support is disabled since a recent version of the djvulibre
+** library was not found. You need at least djvulibre-3.5.17 which
+** can be found on http://djvulibre.djvuzone.org
+])
+ fi
+fi
+
+AM_CONDITIONAL(ENABLE_DJVU, test x$enable_djvu = xyes)
+
+dnl ================== End of djvu checks ===================================================
+
+dnl ================== dvi checks ===================================================
+
+AC_ARG_ENABLE(dvi,
+ [AS_HELP_STRING([--disable-dvi],
+ [Disable the support of dvi viewer])],
+ [enable_dvi=$enableval],
+ [enable_dvi=yes])
+
+AC_ARG_ENABLE(t1lib,
+ [AS_HELP_STRING([--enable-t1lib],
+ [Compile with support of t1lib for type1 fonts in dvi])],
+ [enable_type1_fonts=$enableval],
+ [enable_type1_fonts=no])
+
+if test "x$enable_dvi" = "xyes"; then
+ AC_C_CONST
+ AC_C_INLINE
+ AC_TYPE_SIZE_T
+ AC_CHECK_SIZEOF(long, 4)
+ AC_CHECK_SIZEOF(int, 4)
+ AC_CHECK_SIZEOF(short, 2)
+ AC_CHECK_SIZEOF(void *, 4)
+ AC_CHECK_LIB([kpathsea],[kpse_init_prog],[enable_dvi=yes],[enable_dvi=no])
+
+ if test "x$enable_dvi" = "xyes"; then
+ AC_DEFINE([ENABLE_DVI], [1], [Enable dvi viewer support.])
+ else
+ AC_MSG_WARN("Dvi support is disabled since kpathsea library is not found. Check your TeX installation.")
+ fi
+fi
+AM_CONDITIONAL(ENABLE_DVI, test x$enable_dvi = xyes)
+
+if test "x$enable_dvi" = "xyes"; then
+ if test "x$enable_type1_fonts" = "xyes"; then
+ AC_CHECK_LIB([t1],T1_InitLib,enable_type1_fonts=yes,enable_type1_fonts=no,[-lm])
+ fi
+
+ if test "x$enable_type1_fonts" = xyes; then
+ AC_DEFINE([WITH_TYPE1_FONTS], [1], [Enable t1lib support in dvi.])
+ fi
+else
+ enable_type1_fonts=no
+fi
+AM_CONDITIONAL(WITH_TYPE1_FONTS, test x$enable_type1_fonts = xyes)
+
+dnl ================== End of dvi checks ===================================================
+
+dnl ================== pixbuf checks ===================================================
+
+AC_ARG_ENABLE(pixbuf,
+ [AS_HELP_STRING([--enable-pixbuf],
+ [Compile with support of pixbuf])],
+ [enable_pixbuf=$enableval],
+ [enable_pixbuf=no])
+
+if test "x$enable_pixbuf" = "xyes"; then
+ AC_DEFINE([ENABLE_PIXBUF], [1], [Enable pixbuf support.])
+fi
+
+AM_CONDITIONAL(ENABLE_PIXBUF, test x$enable_pixbuf = xyes)
+
+dnl ================== End of pixbuf checks ===================================================
+
+dnl ================== comic book checks ===================================================
+
+AC_ARG_ENABLE(comics,
+ [AS_HELP_STRING([--enable-comics],
+ [Compile with support for comic book archives])],
+ [enable_comics=$enableval],
+ [enable_comics=yes])
+
+if test "x$enable_comics" = "xyes"; then
+ AC_DEFINE([ENABLE_COMICS], [1], [Enable support for comics.])
+fi
+AM_CONDITIONAL(ENABLE_COMICS, test x$enable_comics = xyes)
+
+dnl ================== End of comic book checks ============================================
+
+dnl ================== impress book checks ===================================================
+
+AC_ARG_ENABLE(impress,
+ [AS_HELP_STRING([--enable-impress],
+ [Compile with support for impress presentations])],
+ [enable_impress=$enableval],
+ [enable_impress=no])
+
+if test "x$enable_impress" = "xyes"; then
+ AC_DEFINE([ENABLE_IMPRESS], [1], [Enable support for impress.])
+fi
+AM_CONDITIONAL(ENABLE_IMPRESS, test x$enable_impress = xyes)
+
+dnl ================== End of impress book checks ============================================
+
+dnl =================== Mime types list ====================================================
+
+if test "x$enable_pdf" = "xyes" ; then
+ EVINCE_MIME_TYPES="application/pdf;application/x-bzpdf;application/x-gzpdf;"
+fi
+if test "x$enable_ps" = "xyes" ; then
+ EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES}application/postscript;application/x-bzpostscript;application/x-gzpostscript;image/x-eps;image/x-bzeps;image/x-gzeps;"
+fi
+if test "x$enable_dvi" = "xyes"; then
+ EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES}application/x-dvi;application/x-bzdvi;application/x-gzdvi;"
+fi
+if test "x$enable_djvu" = "xyes"; then
+ EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES}image/vnd.djvu;"
+fi
+if test "x$enable_tiff" = "xyes"; then
+ EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES}image/tiff;"
+fi
+if test "x$enable_comics" = "xyes"; then
+ EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES}application/x-cbr;application/x-cbz;application/x-cb7;application/x-cbt;"
+fi
+if test "x$enable_pixbuf" = "xyes"; then
+ EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES}image/*;"
+fi
+if test "x$enable_impress" = "xyes"; then
+ EVINCE_MIME_TYPES="${EVINCE_MIME_TYPES}application/vnd.sun.xml.impress;application/vnd.oasis.opendocument.presentation;"
+fi
+AC_SUBST(EVINCE_MIME_TYPES)
+
+AC_CHECK_FUNC(localtime_r, AC_DEFINE(HAVE_LOCALTIME_R, 1, [Defines if localtime_r is available on your system]))
+
+# *****************
+# Help files
+# *****************
+
+MATE_DOC_INIT([], mate_doc_utils=yes, mate_doc_utils=no)
+
+AC_ARG_ENABLE(help,
+ [AS_HELP_STRING([--disable-help], [Disable offline help files])],
+ [enable_help=$enableval],
+ [enable_help=yes])
+
+if test "x$enable_help" = "xyes" && test "x$os_win32" = "xyes" ; then
+ AC_MSG_WARN([Offline help is disabled (not implemented on Windows).])
+ enable_help=no
+fi
+
+if test "x$enable_help" = "xyes" && test "x$mate_doc_utils" == "xno"; then
+ AC_MSG_ERROR(
+ [mate-doc-utils not found; use --disable-help to disable help files]
+ )
+fi
+
+if test "x$enable_help" = "xyes"; then
+ AC_DEFINE([OFFLINE_HELP_ENABLED], [1], [Enable offline help])
+fi
+
+AM_CONDITIONAL(ENABLE_HELP, test "x$enable_help" = "xyes")
+
+# *****************
+# API documentation
+# *****************
+
+GTK_DOC_CHECK([1.13],[--flavour no-tmpl])
+
+AC_SUBST([GLIB_PREFIX],[$($PKG_CONFIG --variable=prefix glib-2.0)])
+AC_SUBST([GTK_PREFIX],[$($PKG_CONFIG --variable=prefix gtk+-$GTK_API_VERSION)])
+
+# ******************
+# Backends directory
+# ******************
+
+AC_SUBST([backenddir],"\$(libdir)/evince/ev_binary_version/backends")
+AC_SUBST([backend_binary_version],"ev_binary_version")
+
+# **********
+# Versioning
+# **********
+
+AC_SUBST([EV_MAJOR_VERSION],[ev_major_version])
+AC_SUBST([EV_MINOR_VERSION],[ev_minor_version])
+AC_SUBST([EV_MICRO_VERSION],[ev_micro_version])
+
+AC_SUBST([EV_API_VERSION],[ev_api_version])
+AC_SUBST([EV_API_VERSION_U],[AS_TR_SH([ev_api_version])])
+AC_SUBST([EV_BINARY_VERSION],[ev_binary_version])
+
+AC_SUBST([EV_DOCUMENT_LT_VERSION_INFO],[ev_document_lt_version_info])
+AC_SUBST([EV_DOCUMENT_LT_CURRENT_MINUS_AGE],[ev_document_lt_current_minus_age])
+AC_SUBST([EV_VIEW_LT_VERSION_INFO],[ev_view_lt_version_info])
+AC_SUBST([EV_VIEW_LT_CURRENT_MINUS_AGE],[ev_view_lt_current_minus_age])
+
+# *****************************************************************************
+# *****************************************************************************
+
+AC_CONFIG_FILES([
+backend/Makefile
+backend/comics/Makefile
+backend/djvu/Makefile
+backend/dvi/Makefile
+backend/dvi/mdvi-lib/Makefile
+backend/impress/Makefile
+backend/pdf/Makefile
+backend/pixbuf/Makefile
+backend/ps/Makefile
+backend/tiff/Makefile
+cut-n-paste/Makefile
+cut-n-paste/gimpcellrenderertoggle/Makefile
+cut-n-paste/smclient/Makefile
+cut-n-paste/toolbar-editor/Makefile
+cut-n-paste/zoom-control/Makefile
+cut-n-paste/totem-screensaver/Makefile
+cut-n-paste/synctex/Makefile
+data/evince.desktop.in
+data/Makefile
+data/icons/Makefile
+data/icons/16x16/Makefile
+data/icons/16x16/apps/Makefile
+data/icons/16x16/actions/Makefile
+data/icons/16x16/mimetypes/Makefile
+data/icons/22x22/Makefile
+data/icons/22x22/apps/Makefile
+data/icons/22x22/actions/Makefile
+data/icons/22x22/mimetypes/Makefile
+data/icons/24x24/Makefile
+data/icons/24x24/apps/Makefile
+data/icons/24x24/actions/Makefile
+data/icons/24x24/mimetypes/Makefile
+data/icons/32x32/Makefile
+data/icons/32x32/actions/Makefile
+data/icons/32x32/mimetypes/Makefile
+data/icons/48x48/Makefile
+data/icons/48x48/apps/Makefile
+data/icons/48x48/actions/Makefile
+data/icons/scalable/Makefile
+data/icons/scalable/apps/Makefile
+data/icons/scalable/actions/Makefile
+data/icons/scalable/mimetypes/Makefile
+help/Makefile
+help/reference/Makefile
+help/reference/libdocument/Makefile
+help/reference/libdocument/version.xml
+help/reference/libview/Makefile
+help/reference/libview/version.xml
+help/reference/shell/Makefile
+help/reference/shell/version.xml
+libdocument/Makefile
+libdocument/ev-version.h
+libmisc/Makefile
+libview/Makefile
+Makefile
+po/Makefile.in
+previewer/Makefile
+properties/Makefile
+shell/Makefile
+test/Makefile
+thumbnailer/Makefile
+])
+
+AC_CONFIG_FILES(evince-document-[]ev_api_version[].pc:evince-document.pc.in)
+AC_CONFIG_FILES(evince-view-[]ev_api_version[].pc:evince-view.pc.in)
+
+AC_OUTPUT
+
+echo "
+Configure summary:
+ Platform...........: $with_platform
+ GTK+ version.......: $with_gtk
+ MateConf Support......: $with_mateconf
+ GTK+ Unix Print....: $with_gtk_unix_print
+ Keyring Support....: $with_keyring
+ DBUS Support.......: $enable_dbus
+ SM client support..: $with_smclient
+ Help files.........: $enable_help
+ Caja Plugin....: $enable_caja
+ Thumbnailer........: $enable_thumbnailer
+ Previewer..........: $enable_previewer
+ Gtk-Doc Support....: $enable_gtk_doc
+ Debug mode.........: $enable_debug
+ GObj. Introspection: $enable_introspection
+ Tests..............: $enable_tests
+
+ PDF Backend........: $enable_pdf
+ PostScript Backend.: $enable_ps
+ TIFF Backend.......: $enable_tiff
+ DJVU Backend.......: $enable_djvu
+ DVI Backend........: $enable_dvi
+ Pixbuf Backend.....: $enable_pixbuf
+ Comics Backend.....: $enable_comics
+ Impress Backend....: $enable_impress
+"
diff --git a/cut-n-paste/Makefile.am b/cut-n-paste/Makefile.am
new file mode 100644
index 00000000..b53b9b9e
--- /dev/null
+++ b/cut-n-paste/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = zoom-control toolbar-editor totem-screensaver smclient gimpcellrenderertoggle synctex
+
+-include $(top_srcdir)/git.mk
diff --git a/cut-n-paste/gimpcellrenderertoggle/Makefile.am b/cut-n-paste/gimpcellrenderertoggle/Makefile.am
new file mode 100644
index 00000000..fffeffa7
--- /dev/null
+++ b/cut-n-paste/gimpcellrenderertoggle/Makefile.am
@@ -0,0 +1,38 @@
+noinst_LTLIBRARIES = libgimpcellrenderertoggle.la
+
+libgimpcellrenderertoggle_la_sources = \
+ gimpcellrenderertoggle.h \
+ gimpcellrenderertoggle.c
+
+libgimpcellrenderertoggle_la_CFLAGS = \
+ $(SHELL_CORE_CFLAGS) \
+ $(WARNING_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+libgimpcellrenderertoggle_la_built_sources = \
+ gimpwidgetsmarshal.h \
+ gimpwidgetsmarshal.c
+
+libgimpcellrenderertoggle_la_SOURCES = \
+ $(libgimpcellrenderertoggle_la_built_sources) \
+ $(libgimpcellrenderertoggle_la_sources)
+
+libgimpcellrenderertoggle_la_extra_sources = gimpwidgetsmarshal.list
+
+gimpwidgetsmarshal.h: $(srcdir)/gimpwidgetsmarshal.list
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) --prefix=_gimp_widgets_marshal $(srcdir)/gimpwidgetsmarshal.list --header >> xgen-wmh \
+ && (cmp -s xgen-wmh $(@F) || cp xgen-wmh $(@F)) \
+ && rm -f xgen-wmh xgen-wmh~
+
+gimpwidgetsmarshal.c: gimpwidgetsmarshal.h
+ $(AM_V_GEN)echo "#include \"gimpwidgetsmarshal.h\"" >> xgen-wmc \
+ && $(GLIB_GENMARSHAL) --prefix=_gimp_widgets_marshal $(srcdir)/gimpwidgetsmarshal.list --body >> xgen-wmc \
+ && cp xgen-wmc $(@F) \
+ && rm -f xgen-wmc xgen-wmc~
+
+gen_sources = xgen-wmh xgen-wmc $(libgimpcellrenderertoggle_la_built_sources)
+CLEANFILES = $(gen_sources)
+
+EXTRA_DIST = $(libgimpcellrenderertoggle_la_extra_sources)
+
+-include $(top_srcdir)/git.mk
diff --git a/cut-n-paste/gimpcellrenderertoggle/gimpcellrenderertoggle.c b/cut-n-paste/gimpcellrenderertoggle/gimpcellrenderertoggle.c
new file mode 100644
index 00000000..e9a25f15
--- /dev/null
+++ b/cut-n-paste/gimpcellrenderertoggle/gimpcellrenderertoggle.c
@@ -0,0 +1,492 @@
+/* LIBGIMP - The GIMP Library
+ * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
+ *
+ * gimpcellrenderertoggle.c
+ * Copyright (C) 2003-2004 Sven Neumann <[email protected]>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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 Lesser 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.
+ */
+
+#include <config.h>
+
+#include "gimpwidgetsmarshal.h"
+#include "gimpcellrenderertoggle.h"
+
+
+#define DEFAULT_ICON_SIZE GTK_ICON_SIZE_BUTTON
+
+
+enum
+{
+ CLICKED,
+ LAST_SIGNAL
+};
+
+enum
+{
+ PROP_0,
+ PROP_STOCK_ID,
+ PROP_STOCK_SIZE
+};
+
+
+static void gimp_cell_renderer_toggle_finalize (GObject *object);
+static void gimp_cell_renderer_toggle_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void gimp_cell_renderer_toggle_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void gimp_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
+ GtkWidget *widget,
+ GdkRectangle *rectangle,
+ gint *x_offset,
+ gint *y_offset,
+ gint *width,
+ gint *height);
+static void gimp_cell_renderer_toggle_render (GtkCellRenderer *cell,
+ GdkWindow *window,
+ GtkWidget *widget,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GdkRectangle *expose_area,
+ GtkCellRendererState flags);
+static gboolean gimp_cell_renderer_toggle_activate (GtkCellRenderer *cell,
+ GdkEvent *event,
+ GtkWidget *widget,
+ const gchar *path,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GtkCellRendererState flags);
+static void gimp_cell_renderer_toggle_create_pixbuf (GimpCellRendererToggle *toggle,
+ GtkWidget *widget);
+
+
+G_DEFINE_TYPE (GimpCellRendererToggle, gimp_cell_renderer_toggle,
+ GTK_TYPE_CELL_RENDERER_TOGGLE)
+
+#define parent_class gimp_cell_renderer_toggle_parent_class
+
+static guint toggle_cell_signals[LAST_SIGNAL] = { 0 };
+
+
+static void
+gimp_cell_renderer_toggle_class_init (GimpCellRendererToggleClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS (klass);
+
+ toggle_cell_signals[CLICKED] =
+ g_signal_new ("clicked",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GimpCellRendererToggleClass, clicked),
+ NULL, NULL,
+ _gimp_widgets_marshal_VOID__STRING_FLAGS,
+ G_TYPE_NONE, 2,
+ G_TYPE_STRING,
+ GDK_TYPE_MODIFIER_TYPE);
+
+ object_class->finalize = gimp_cell_renderer_toggle_finalize;
+ object_class->get_property = gimp_cell_renderer_toggle_get_property;
+ object_class->set_property = gimp_cell_renderer_toggle_set_property;
+
+ cell_class->get_size = gimp_cell_renderer_toggle_get_size;
+ cell_class->render = gimp_cell_renderer_toggle_render;
+ cell_class->activate = gimp_cell_renderer_toggle_activate;
+
+ g_object_class_install_property (object_class,
+ PROP_STOCK_ID,
+ g_param_spec_string ("stock-id",
+ NULL, NULL,
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_STOCK_SIZE,
+ g_param_spec_int ("stock-size",
+ NULL, NULL,
+ 0, G_MAXINT,
+ DEFAULT_ICON_SIZE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+}
+
+static void
+gimp_cell_renderer_toggle_init (GimpCellRendererToggle *toggle)
+{
+}
+
+static void
+gimp_cell_renderer_toggle_finalize (GObject *object)
+{
+ GimpCellRendererToggle *toggle = GIMP_CELL_RENDERER_TOGGLE (object);
+
+ if (toggle->stock_id)
+ {
+ g_free (toggle->stock_id);
+ toggle->stock_id = NULL;
+ }
+
+ if (toggle->pixbuf)
+ {
+ g_object_unref (toggle->pixbuf);
+ toggle->pixbuf = NULL;
+ }
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gimp_cell_renderer_toggle_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GimpCellRendererToggle *toggle = GIMP_CELL_RENDERER_TOGGLE (object);
+
+ switch (param_id)
+ {
+ case PROP_STOCK_ID:
+ g_value_set_string (value, toggle->stock_id);
+ break;
+ case PROP_STOCK_SIZE:
+ g_value_set_int (value, toggle->stock_size);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+
+static void
+gimp_cell_renderer_toggle_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GimpCellRendererToggle *toggle = GIMP_CELL_RENDERER_TOGGLE (object);
+
+ switch (param_id)
+ {
+ case PROP_STOCK_ID:
+ if (toggle->stock_id)
+ g_free (toggle->stock_id);
+ toggle->stock_id = g_value_dup_string (value);
+ break;
+ case PROP_STOCK_SIZE:
+ toggle->stock_size = g_value_get_int (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+
+ if (toggle->pixbuf)
+ {
+ g_object_unref (toggle->pixbuf);
+ toggle->pixbuf = NULL;
+ }
+}
+
+static void
+gimp_cell_renderer_toggle_get_size (GtkCellRenderer *cell,
+ GtkWidget *widget,
+ GdkRectangle *cell_area,
+ gint *x_offset,
+ gint *y_offset,
+ gint *width,
+ gint *height)
+{
+ GimpCellRendererToggle *toggle = GIMP_CELL_RENDERER_TOGGLE (cell);
+ GtkStyle *style = gtk_widget_get_style (widget);
+ gint calc_width;
+ gint calc_height;
+ gint pixbuf_width;
+ gint pixbuf_height;
+ gfloat xalign;
+ gfloat yalign;
+ gint xpad;
+ gint ypad;
+
+ if (! toggle->stock_id)
+ {
+ GTK_CELL_RENDERER_CLASS (parent_class)->get_size (cell,
+ widget,
+ cell_area,
+ x_offset, y_offset,
+ width, height);
+ return;
+ }
+
+ gtk_cell_renderer_get_alignment (cell, &xalign, &yalign);
+ gtk_cell_renderer_get_padding (cell, &xpad, &ypad);
+
+ if (! toggle->pixbuf)
+ gimp_cell_renderer_toggle_create_pixbuf (toggle, widget);
+
+ pixbuf_width = gdk_pixbuf_get_width (toggle->pixbuf);
+ pixbuf_height = gdk_pixbuf_get_height (toggle->pixbuf);
+
+ calc_width = (pixbuf_width +
+ (gint) xpad * 2 + style->xthickness * 2);
+ calc_height = (pixbuf_height +
+ (gint) ypad * 2 + style->ythickness * 2);
+
+ if (width)
+ *width = calc_width;
+
+ if (height)
+ *height = calc_height;
+
+ if (cell_area)
+ {
+ if (x_offset)
+ {
+ *x_offset = (((gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) ?
+ (1.0 - xalign) : xalign) *
+ (cell_area->width - calc_width));
+ *x_offset = MAX (*x_offset, 0);
+ }
+
+ if (y_offset)
+ {
+ *y_offset = yalign * (cell_area->height - calc_height);
+ *y_offset = MAX (*y_offset, 0);
+ }
+ }
+}
+
+static void
+gimp_cell_renderer_toggle_render (GtkCellRenderer *cell,
+ GdkWindow *window,
+ GtkWidget *widget,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GdkRectangle *expose_area,
+ GtkCellRendererState flags)
+{
+ GimpCellRendererToggle *toggle = GIMP_CELL_RENDERER_TOGGLE (cell);
+ GtkStyle *style = gtk_widget_get_style (widget);
+ GdkRectangle toggle_rect;
+ GdkRectangle draw_rect;
+ GtkStateType state;
+ gboolean active;
+ gint xpad;
+ gint ypad;
+
+ if (! toggle->stock_id)
+ {
+ GTK_CELL_RENDERER_CLASS (parent_class)->render (cell, window, widget,
+ background_area,
+ cell_area, expose_area,
+ flags);
+ return;
+ }
+
+ gimp_cell_renderer_toggle_get_size (cell, widget, cell_area,
+ &toggle_rect.x,
+ &toggle_rect.y,
+ &toggle_rect.width,
+ &toggle_rect.height);
+
+ gtk_cell_renderer_get_padding (cell, &xpad, &ypad);
+ toggle_rect.x += cell_area->x + xpad;
+ toggle_rect.y += cell_area->y + ypad;
+ toggle_rect.width -= xpad * 2;
+ toggle_rect.height -= ypad * 2;
+
+ if (toggle_rect.width <= 0 || toggle_rect.height <= 0)
+ return;
+
+ active =
+ gtk_cell_renderer_toggle_get_active (GTK_CELL_RENDERER_TOGGLE (cell));
+
+ if (!gtk_cell_renderer_get_sensitive (cell))
+ {
+ state = GTK_STATE_INSENSITIVE;
+ }
+ else if ((flags & GTK_CELL_RENDERER_SELECTED) == GTK_CELL_RENDERER_SELECTED)
+ {
+ if (gtk_widget_has_focus (widget))
+ state = GTK_STATE_SELECTED;
+ else
+ state = GTK_STATE_ACTIVE;
+ }
+ else
+ {
+ if (gtk_cell_renderer_toggle_get_activatable (GTK_CELL_RENDERER_TOGGLE (cell)))
+ state = GTK_STATE_NORMAL;
+ else
+ state = GTK_STATE_INSENSITIVE;
+ }
+
+ if (gdk_rectangle_intersect (expose_area, cell_area, &draw_rect) &&
+ (flags & GTK_CELL_RENDERER_PRELIT))
+ gtk_paint_shadow (style,
+ window,
+ state,
+ active ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
+ &draw_rect,
+ widget, NULL,
+ toggle_rect.x, toggle_rect.y,
+ toggle_rect.width, toggle_rect.height);
+
+ if (active)
+ {
+ GdkPixbuf *insensitive = NULL;
+ GdkPixbuf *pixbuf = toggle->pixbuf;
+
+ toggle_rect.x += style->xthickness;
+ toggle_rect.y += style->ythickness;
+ toggle_rect.width -= style->xthickness * 2;
+ toggle_rect.height -= style->ythickness * 2;
+
+ if (state == GTK_STATE_INSENSITIVE)
+ {
+ GtkIconSource *source;
+
+ source = gtk_icon_source_new ();
+ gtk_icon_source_set_pixbuf (source, pixbuf);
+ /* The size here is arbitrary; since size isn't
+ * wildcarded in the source, it isn't supposed to be
+ * scaled by the engine function
+ */
+ gtk_icon_source_set_size (source, GTK_ICON_SIZE_SMALL_TOOLBAR);
+ gtk_icon_source_set_size_wildcarded (source, FALSE);
+
+ insensitive = gtk_style_render_icon (gtk_widget_get_style (widget),
+ source,
+ gtk_widget_get_direction (widget),
+ GTK_STATE_INSENSITIVE,
+ /* arbitrary */
+ (GtkIconSize)-1,
+ widget,
+ "gimpcellrenderertoggle");
+
+ gtk_icon_source_free (source);
+
+ pixbuf = insensitive;
+ }
+
+ if (gdk_rectangle_intersect (&draw_rect, &toggle_rect, &draw_rect))
+ {
+ cairo_t *cr;
+
+ cr = gdk_cairo_create (window);
+
+ gdk_cairo_set_source_pixbuf (cr, pixbuf, toggle_rect.x, toggle_rect.y);
+ gdk_cairo_rectangle (cr, &draw_rect);
+ cairo_fill (cr);
+
+ cairo_destroy (cr);
+ }
+
+ if (insensitive)
+ g_object_unref (insensitive);
+ }
+}
+
+static gboolean
+gimp_cell_renderer_toggle_activate (GtkCellRenderer *cell,
+ GdkEvent *event,
+ GtkWidget *widget,
+ const gchar *path,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GtkCellRendererState flags)
+{
+ GtkCellRendererToggle *toggle = GTK_CELL_RENDERER_TOGGLE (cell);
+
+ if (gtk_cell_renderer_toggle_get_activatable (toggle))
+ {
+ GdkModifierType state = 0;
+
+ GTK_CELL_RENDERER_CLASS (parent_class)->activate (cell, event, widget,
+ path, background_area,
+ cell_area, flags);
+
+ if (event && ((GdkEventAny *) event)->type == GDK_BUTTON_PRESS)
+ state = ((GdkEventButton *) event)->state;
+
+ gimp_cell_renderer_toggle_clicked (GIMP_CELL_RENDERER_TOGGLE (cell),
+ path, state);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+gimp_cell_renderer_toggle_create_pixbuf (GimpCellRendererToggle *toggle,
+ GtkWidget *widget)
+{
+ if (toggle->pixbuf)
+ g_object_unref (toggle->pixbuf);
+
+ toggle->pixbuf = gtk_widget_render_icon (widget,
+ toggle->stock_id,
+ toggle->stock_size, NULL);
+}
+
+
+/**
+ * gimp_cell_renderer_toggle_new:
+ * @stock_id: the stock_id of the icon to use for the active state
+ *
+ * Creates a custom version of the #GtkCellRendererToggle. Instead of
+ * showing the standard toggle button, it shows a stock icon if the
+ * cell is active and no icon otherwise. This cell renderer is for
+ * example used in the Layers treeview to indicate and control the
+ * layer's visibility by showing %GIMP_STOCK_VISIBLE.
+ *
+ * Return value: a new #GimpCellRendererToggle
+ *
+ * Since: GIMP 2.2
+ **/
+GtkCellRenderer *
+gimp_cell_renderer_toggle_new (const gchar *stock_id)
+{
+ return g_object_new (GIMP_TYPE_CELL_RENDERER_TOGGLE,
+ "stock_id", stock_id,
+ NULL);
+}
+
+/**
+ * gimp_cell_renderer_toggle_clicked:
+ * @cell: a #GimpCellRendererToggle
+ * @path:
+ * @state:
+ *
+ * Emits the "clicked" signal from a #GimpCellRendererToggle.
+ *
+ * Since: GIMP 2.2
+ **/
+void
+gimp_cell_renderer_toggle_clicked (GimpCellRendererToggle *cell,
+ const gchar *path,
+ GdkModifierType state)
+{
+ g_return_if_fail (GIMP_IS_CELL_RENDERER_TOGGLE (cell));
+ g_return_if_fail (path != NULL);
+
+ g_signal_emit (cell, toggle_cell_signals[CLICKED], 0, path, state);
+}
diff --git a/cut-n-paste/gimpcellrenderertoggle/gimpcellrenderertoggle.h b/cut-n-paste/gimpcellrenderertoggle/gimpcellrenderertoggle.h
new file mode 100644
index 00000000..6d516d73
--- /dev/null
+++ b/cut-n-paste/gimpcellrenderertoggle/gimpcellrenderertoggle.h
@@ -0,0 +1,77 @@
+/* LIBGIMP - The GIMP Library
+ * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
+ *
+ * gimpcellrenderertoggle.h
+ * Copyright (C) 2003-2004 Sven Neumann <[email protected]>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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 Lesser 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.
+ */
+
+#ifndef __GIMP_CELL_RENDERER_TOGGLE_H__
+#define __GIMP_CELL_RENDERER_TOGGLE_H__
+
+#include <gtk/gtk.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GIMP_TYPE_CELL_RENDERER_TOGGLE (gimp_cell_renderer_toggle_get_type ())
+#define GIMP_CELL_RENDERER_TOGGLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_CELL_RENDERER_TOGGLE, GimpCellRendererToggle))
+#define GIMP_CELL_RENDERER_TOGGLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_CELL_RENDERER_TOGGLE, GimpCellRendererToggleClass))
+#define GIMP_IS_CELL_RENDERER_TOGGLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_CELL_RENDERER_TOGGLE))
+#define GIMP_IS_CELL_RENDERER_TOGGLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_CELL_RENDERER_TOGGLE))
+#define GIMP_CELL_RENDERER_TOGGLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_CELL_RENDERER_TOGGLE, GimpCellRendererToggleClass))
+
+typedef struct _GimpCellRendererToggle GimpCellRendererToggle;
+typedef struct _GimpCellRendererToggleClass GimpCellRendererToggleClass;
+
+struct _GimpCellRendererToggle
+{
+ GtkCellRendererToggle parent_instance;
+
+ gchar *stock_id;
+ GtkIconSize stock_size;
+ GdkPixbuf *pixbuf;
+};
+
+struct _GimpCellRendererToggleClass
+{
+ GtkCellRendererToggleClass parent_class;
+
+ void (* clicked) (GimpCellRendererToggle *cell,
+ const gchar *path,
+ GdkModifierType state);
+
+ /* Padding for future expansion */
+ void (* _gimp_reserved1) (void);
+ void (* _gimp_reserved2) (void);
+ void (* _gimp_reserved3) (void);
+ void (* _gimp_reserved4) (void);
+};
+
+
+GType gimp_cell_renderer_toggle_get_type (void) G_GNUC_CONST;
+
+GtkCellRenderer * gimp_cell_renderer_toggle_new (const gchar *stock_id);
+
+void gimp_cell_renderer_toggle_clicked (GimpCellRendererToggle *cell,
+ const gchar *path,
+ GdkModifierType state);
+
+
+G_END_DECLS
+
+#endif /* __GIMP_CELL_RENDERER_TOGGLE_H__ */
diff --git a/cut-n-paste/gimpcellrenderertoggle/gimpwidgetsmarshal.list b/cut-n-paste/gimpcellrenderertoggle/gimpwidgetsmarshal.list
new file mode 100644
index 00000000..f32f0f95
--- /dev/null
+++ b/cut-n-paste/gimpcellrenderertoggle/gimpwidgetsmarshal.list
@@ -0,0 +1,26 @@
+# see glib-genmarshal(1) for a detailed description of the file format,
+# possible parameter types are:
+# VOID indicates no return type, or no extra
+# parameters. if VOID is used as the parameter
+# list, no additional parameters may be present.
+# BOOLEAN for boolean types (gboolean)
+# CHAR for signed char types (gchar)
+# UCHAR for unsigned char types (guchar)
+# INT for signed integer types (gint)
+# UINT for unsigned integer types (guint)
+# LONG for signed long integer types (glong)
+# ULONG for unsigned long integer types (gulong)
+# ENUM for enumeration types (gint)
+# FLAGS for flag enumeration types (guint)
+# FLOAT for single-precision float types (gfloat)
+# DOUBLE for double-precision float types (gdouble)
+# STRING for string types (gchar*)
+# BOXED for boxed (anonymous but reference counted) types (GBoxed*)
+# POINTER for anonymous pointer types (gpointer)
+# PARAM for GParamSpec or derived types (GParamSpec*)
+# OBJECT for GObject or derived types (GObject*)
+# NONE deprecated alias for VOID
+# BOOL deprecated alias for BOOLEAN
+
+VOID: STRING, FLAGS
+
diff --git a/cut-n-paste/smclient/Makefile.am b/cut-n-paste/smclient/Makefile.am
new file mode 100644
index 00000000..498ed756
--- /dev/null
+++ b/cut-n-paste/smclient/Makefile.am
@@ -0,0 +1,42 @@
+noinst_LTLIBRARIES = libsmclient.la
+
+NULL =
+
+if WITH_SMCLIENT
+libsmclient_la_SOURCES = \
+ eggsmclient.c \
+ eggsmclient.h \
+ eggsmclient-private.h \
+ $(NULL)
+
+libsmclient_la_CPPFLAGS = \
+ -DG_LOG_DOMAIN=\""EggSMClient"\" \
+ $(DISABLE_DEPRECATED) \
+ $(AM_CPPFLAGS)
+
+libsmclient_la_CFLAGS = \
+ $(SMCLIENT_CFLAGS) \
+ $(WARNING_CFLAGS) \
+ $(AM_CFLAGS)
+
+libsmclient_la_LIBADD = \
+ $(SMCLIENT_LIBS)
+
+if WITH_SMCLIENT_XSMP
+libsmclient_la_SOURCES += \
+ eggdesktopfile.c \
+ eggdesktopfile.h \
+ eggsmclient-xsmp.c \
+ $(NULL)
+libsmclient_la_CPPFLAGS += -DEGG_SM_CLIENT_BACKEND_XSMP
+endif
+if WITH_SMCLIENT_WIN32
+libsmclient_la_SOURCES += eggsmclient-win32.c
+endif
+if WITH_SMCLIENT_QUARTZ
+libsmclient_la_SOURCES += eggsmclient-osx.c
+endif
+
+endif # WITH_SMCLIENT
+
+-include $(top_srcdir)/git.mk
diff --git a/cut-n-paste/smclient/eggdesktopfile.c b/cut-n-paste/smclient/eggdesktopfile.c
new file mode 100644
index 00000000..1f432adc
--- /dev/null
+++ b/cut-n-paste/smclient/eggdesktopfile.c
@@ -0,0 +1,1477 @@
+/* eggdesktopfile.c - Freedesktop.Org Desktop Files
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * Based on mate-desktop-item.c
+ * Copyright (C) 1999, 2000 Red Hat Inc.
+ * Copyright (C) 2001 George Lebl
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "eggdesktopfile.h"
+
+#include <string.h>
+#include <unistd.h>
+
+#include <glib/gi18n.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+
+struct EggDesktopFile {
+ GKeyFile *key_file;
+ char *source;
+
+ char *name, *icon;
+ EggDesktopFileType type;
+ char document_code;
+};
+
+/**
+ * egg_desktop_file_new:
+ * @desktop_file_path: path to a Freedesktop-style Desktop file
+ * @error: error pointer
+ *
+ * Creates a new #EggDesktopFile for @desktop_file.
+ *
+ * Return value: the new #EggDesktopFile, or %NULL on error.
+ **/
+EggDesktopFile *
+egg_desktop_file_new (const char *desktop_file_path, GError **error)
+{
+ GKeyFile *key_file;
+
+ key_file = g_key_file_new ();
+ if (!g_key_file_load_from_file (key_file, desktop_file_path, 0, error))
+ {
+ g_key_file_free (key_file);
+ return NULL;
+ }
+
+ return egg_desktop_file_new_from_key_file (key_file, desktop_file_path,
+ error);
+}
+
+/**
+ * egg_desktop_file_new_from_data_dirs:
+ * @desktop_file_path: relative path to a Freedesktop-style Desktop file
+ * @error: error pointer
+ *
+ * Looks for @desktop_file_path in the paths returned from
+ * g_get_user_data_dir() and g_get_system_data_dirs(), and creates
+ * a new #EggDesktopFile from it.
+ *
+ * Return value: the new #EggDesktopFile, or %NULL on error.
+ **/
+EggDesktopFile *
+egg_desktop_file_new_from_data_dirs (const char *desktop_file_path,
+ GError **error)
+{
+ EggDesktopFile *desktop_file;
+ GKeyFile *key_file;
+ char *full_path;
+
+ key_file = g_key_file_new ();
+ if (!g_key_file_load_from_data_dirs (key_file, desktop_file_path,
+ &full_path, 0, error))
+ {
+ g_key_file_free (key_file);
+ return NULL;
+ }
+
+ desktop_file = egg_desktop_file_new_from_key_file (key_file,
+ full_path,
+ error);
+ g_free (full_path);
+ return desktop_file;
+}
+
+/**
+ * egg_desktop_file_new_from_dirs:
+ * @desktop_file_path: relative path to a Freedesktop-style Desktop file
+ * @search_dirs: NULL-terminated array of directories to search
+ * @error: error pointer
+ *
+ * Looks for @desktop_file_path in the paths returned from
+ * g_get_user_data_dir() and g_get_system_data_dirs(), and creates
+ * a new #EggDesktopFile from it.
+ *
+ * Return value: the new #EggDesktopFile, or %NULL on error.
+ **/
+EggDesktopFile *
+egg_desktop_file_new_from_dirs (const char *desktop_file_path,
+ const char **search_dirs,
+ GError **error)
+{
+ EggDesktopFile *desktop_file;
+ GKeyFile *key_file;
+ char *full_path;
+
+ key_file = g_key_file_new ();
+ if (!g_key_file_load_from_dirs (key_file, desktop_file_path, search_dirs,
+ &full_path, 0, error))
+ {
+ g_key_file_free (key_file);
+ return NULL;
+ }
+
+ desktop_file = egg_desktop_file_new_from_key_file (key_file,
+ full_path,
+ error);
+ g_free (full_path);
+ return desktop_file;
+}
+
+/**
+ * egg_desktop_file_new_from_key_file:
+ * @key_file: a #GKeyFile representing a desktop file
+ * @source: the path or URI that @key_file was loaded from, or %NULL
+ * @error: error pointer
+ *
+ * Creates a new #EggDesktopFile for @key_file. Assumes ownership of
+ * @key_file (on success or failure); you should consider @key_file to
+ * be freed after calling this function.
+ *
+ * Return value: the new #EggDesktopFile, or %NULL on error.
+ **/
+EggDesktopFile *
+egg_desktop_file_new_from_key_file (GKeyFile *key_file,
+ const char *source,
+ GError **error)
+{
+ EggDesktopFile *desktop_file;
+ char *version, *type;
+
+ if (!g_key_file_has_group (key_file, EGG_DESKTOP_FILE_GROUP))
+ {
+ g_set_error (error, EGG_DESKTOP_FILE_ERROR,
+ EGG_DESKTOP_FILE_ERROR_INVALID,
+ _("File is not a valid .desktop file"));
+ g_key_file_free (key_file);
+ return NULL;
+ }
+
+ version = g_key_file_get_value (key_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_VERSION,
+ NULL);
+ if (version)
+ {
+ double version_num;
+ char *end;
+
+ version_num = g_ascii_strtod (version, &end);
+ if (*end)
+ {
+ g_warning ("Invalid Version string '%s' in %s",
+ version, source ? source : "(unknown)");
+ }
+ else if (version_num > 1.0)
+ {
+ g_set_error (error, EGG_DESKTOP_FILE_ERROR,
+ EGG_DESKTOP_FILE_ERROR_INVALID,
+ _("Unrecognized desktop file Version '%s'"), version);
+ g_free (version);
+ g_key_file_free (key_file);
+ return NULL;
+ }
+ g_free (version);
+ }
+
+ desktop_file = g_new0 (EggDesktopFile, 1);
+ desktop_file->key_file = key_file;
+
+ if (g_path_is_absolute (source))
+ desktop_file->source = g_filename_to_uri (source, NULL, NULL);
+ else
+ desktop_file->source = g_strdup (source);
+
+ desktop_file->name = g_key_file_get_string (key_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_NAME, error);
+ if (!desktop_file->name)
+ {
+ egg_desktop_file_free (desktop_file);
+ return NULL;
+ }
+
+ type = g_key_file_get_string (key_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_TYPE, error);
+ if (!type)
+ {
+ egg_desktop_file_free (desktop_file);
+ return NULL;
+ }
+
+ if (!strcmp (type, "Application"))
+ {
+ char *exec, *p;
+
+ desktop_file->type = EGG_DESKTOP_FILE_TYPE_APPLICATION;
+
+ exec = g_key_file_get_string (key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_EXEC,
+ error);
+ if (!exec)
+ {
+ egg_desktop_file_free (desktop_file);
+ g_free (type);
+ return NULL;
+ }
+
+ /* See if it takes paths or URIs or neither */
+ for (p = exec; *p; p++)
+ {
+ if (*p == '%')
+ {
+ if (p[1] == '\0' || strchr ("FfUu", p[1]))
+ {
+ desktop_file->document_code = p[1];
+ break;
+ }
+ p++;
+ }
+ }
+
+ g_free (exec);
+ }
+ else if (!strcmp (type, "Link"))
+ {
+ char *url;
+
+ desktop_file->type = EGG_DESKTOP_FILE_TYPE_LINK;
+
+ url = g_key_file_get_string (key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_URL,
+ error);
+ if (!url)
+ {
+ egg_desktop_file_free (desktop_file);
+ g_free (type);
+ return NULL;
+ }
+ g_free (url);
+ }
+ else if (!strcmp (type, "Directory"))
+ desktop_file->type = EGG_DESKTOP_FILE_TYPE_DIRECTORY;
+ else
+ desktop_file->type = EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED;
+
+ g_free (type);
+
+ /* Check the Icon key */
+ desktop_file->icon = g_key_file_get_string (key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_ICON,
+ NULL);
+ if (desktop_file->icon && !g_path_is_absolute (desktop_file->icon))
+ {
+ char *ext;
+
+ /* Lots of .desktop files still get this wrong */
+ ext = strrchr (desktop_file->icon, '.');
+ if (ext && (!strcmp (ext, ".png") ||
+ !strcmp (ext, ".xpm") ||
+ !strcmp (ext, ".svg")))
+ {
+ g_warning ("Desktop file '%s' has malformed Icon key '%s'"
+ "(should not include extension)",
+ source ? source : "(unknown)",
+ desktop_file->icon);
+ *ext = '\0';
+ }
+ }
+
+ return desktop_file;
+}
+
+/**
+ * egg_desktop_file_free:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Frees @desktop_file.
+ **/
+void
+egg_desktop_file_free (EggDesktopFile *desktop_file)
+{
+ g_key_file_free (desktop_file->key_file);
+ g_free (desktop_file->source);
+ g_free (desktop_file->name);
+ g_free (desktop_file->icon);
+ g_free (desktop_file);
+}
+
+/**
+ * egg_desktop_file_get_source:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Gets the URI that @desktop_file was loaded from.
+ *
+ * Return value: @desktop_file's source URI
+ **/
+const char *
+egg_desktop_file_get_source (EggDesktopFile *desktop_file)
+{
+ return desktop_file->source;
+}
+
+/**
+ * egg_desktop_file_get_desktop_file_type:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Gets the desktop file type of @desktop_file.
+ *
+ * Return value: @desktop_file's type
+ **/
+EggDesktopFileType
+egg_desktop_file_get_desktop_file_type (EggDesktopFile *desktop_file)
+{
+ return desktop_file->type;
+}
+
+/**
+ * egg_desktop_file_get_name:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Gets the (localized) value of @desktop_file's "Name" key.
+ *
+ * Return value: the application/link name
+ **/
+const char *
+egg_desktop_file_get_name (EggDesktopFile *desktop_file)
+{
+ return desktop_file->name;
+}
+
+/**
+ * egg_desktop_file_get_icon:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Gets the value of @desktop_file's "Icon" key.
+ *
+ * If the icon string is a full path (that is, if g_path_is_absolute()
+ * returns %TRUE when called on it), it points to a file containing an
+ * unthemed icon. If the icon string is not a full path, it is the
+ * name of a themed icon, which can be looked up with %GtkIconTheme,
+ * or passed directly to a theme-aware widget like %GtkImage or
+ * %GtkCellRendererPixbuf.
+ *
+ * Return value: the icon path or name
+ **/
+const char *
+egg_desktop_file_get_icon (EggDesktopFile *desktop_file)
+{
+ return desktop_file->icon;
+}
+
+gboolean
+egg_desktop_file_has_key (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error)
+{
+ return g_key_file_has_key (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key,
+ error);
+}
+
+char *
+egg_desktop_file_get_string (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error)
+{
+ return g_key_file_get_string (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key,
+ error);
+}
+
+char *
+egg_desktop_file_get_locale_string (EggDesktopFile *desktop_file,
+ const char *key,
+ const char *locale,
+ GError **error)
+{
+ return g_key_file_get_locale_string (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key, locale,
+ error);
+}
+
+gboolean
+egg_desktop_file_get_boolean (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error)
+{
+ return g_key_file_get_boolean (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key,
+ error);
+}
+
+double
+egg_desktop_file_get_numeric (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error)
+{
+ return g_key_file_get_double (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key,
+ error);
+}
+
+char **
+egg_desktop_file_get_string_list (EggDesktopFile *desktop_file,
+ const char *key,
+ gsize *length,
+ GError **error)
+{
+ return g_key_file_get_string_list (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key, length,
+ error);
+}
+
+char **
+egg_desktop_file_get_locale_string_list (EggDesktopFile *desktop_file,
+ const char *key,
+ const char *locale,
+ gsize *length,
+ GError **error)
+{
+ return g_key_file_get_locale_string_list (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP, key,
+ locale, length,
+ error);
+}
+
+/**
+ * egg_desktop_file_can_launch:
+ * @desktop_file: an #EggDesktopFile
+ * @desktop_environment: the name of the running desktop environment,
+ * or %NULL
+ *
+ * Tests if @desktop_file can/should be launched in the current
+ * environment. If @desktop_environment is non-%NULL, @desktop_file's
+ * "OnlyShowIn" and "NotShowIn" keys are checked to make sure that
+ * this desktop_file is appropriate for the named environment.
+ *
+ * Furthermore, if @desktop_file has type
+ * %EGG_DESKTOP_FILE_TYPE_APPLICATION, its "TryExec" key (if any) is
+ * also checked, to make sure the binary it points to exists.
+ *
+ * egg_desktop_file_can_launch() does NOT check the value of the
+ * "Hidden" key.
+ *
+ * Return value: %TRUE if @desktop_file can be launched
+ **/
+gboolean
+egg_desktop_file_can_launch (EggDesktopFile *desktop_file,
+ const char *desktop_environment)
+{
+ char *try_exec, *found_program;
+ char **only_show_in, **not_show_in;
+ gboolean found;
+ int i;
+
+ if (desktop_file->type != EGG_DESKTOP_FILE_TYPE_APPLICATION &&
+ desktop_file->type != EGG_DESKTOP_FILE_TYPE_LINK)
+ return FALSE;
+
+ if (desktop_environment)
+ {
+ only_show_in = g_key_file_get_string_list (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_ONLY_SHOW_IN,
+ NULL, NULL);
+ if (only_show_in)
+ {
+ for (i = 0, found = FALSE; only_show_in[i] && !found; i++)
+ {
+ if (!strcmp (only_show_in[i], desktop_environment))
+ found = TRUE;
+ }
+
+ g_strfreev (only_show_in);
+
+ if (!found)
+ return FALSE;
+ }
+
+ not_show_in = g_key_file_get_string_list (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_NOT_SHOW_IN,
+ NULL, NULL);
+ if (not_show_in)
+ {
+ for (i = 0, found = FALSE; not_show_in[i] && !found; i++)
+ {
+ if (!strcmp (not_show_in[i], desktop_environment))
+ found = TRUE;
+ }
+
+ g_strfreev (not_show_in);
+
+ if (found)
+ return FALSE;
+ }
+ }
+
+ if (desktop_file->type == EGG_DESKTOP_FILE_TYPE_APPLICATION)
+ {
+ try_exec = g_key_file_get_string (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_TRY_EXEC,
+ NULL);
+ if (try_exec)
+ {
+ found_program = g_find_program_in_path (try_exec);
+ g_free (try_exec);
+
+ if (!found_program)
+ return FALSE;
+ g_free (found_program);
+ }
+ }
+
+ return TRUE;
+}
+
+/**
+ * egg_desktop_file_accepts_documents:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Tests if @desktop_file represents an application that can accept
+ * documents on the command line.
+ *
+ * Return value: %TRUE or %FALSE
+ **/
+gboolean
+egg_desktop_file_accepts_documents (EggDesktopFile *desktop_file)
+{
+ return desktop_file->document_code != 0;
+}
+
+/**
+ * egg_desktop_file_accepts_multiple:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Tests if @desktop_file can accept multiple documents at once.
+ *
+ * If this returns %FALSE, you can still pass multiple documents to
+ * egg_desktop_file_launch(), but that will result in multiple copies
+ * of the application being launched. See egg_desktop_file_launch()
+ * for more details.
+ *
+ * Return value: %TRUE or %FALSE
+ **/
+gboolean
+egg_desktop_file_accepts_multiple (EggDesktopFile *desktop_file)
+{
+ return (desktop_file->document_code == 'F' ||
+ desktop_file->document_code == 'U');
+}
+
+/**
+ * egg_desktop_file_accepts_uris:
+ * @desktop_file: an #EggDesktopFile
+ *
+ * Tests if @desktop_file can accept (non-"file:") URIs as documents to
+ * open.
+ *
+ * Return value: %TRUE or %FALSE
+ **/
+gboolean
+egg_desktop_file_accepts_uris (EggDesktopFile *desktop_file)
+{
+ return (desktop_file->document_code == 'U' ||
+ desktop_file->document_code == 'u');
+}
+
+static void
+append_quoted_word (GString *str,
+ const char *s,
+ gboolean in_single_quotes,
+ gboolean in_double_quotes)
+{
+ const char *p;
+
+ if (!in_single_quotes && !in_double_quotes)
+ g_string_append_c (str, '\'');
+ else if (!in_single_quotes && in_double_quotes)
+ g_string_append (str, "\"'");
+
+ if (!strchr (s, '\''))
+ g_string_append (str, s);
+ else
+ {
+ for (p = s; *p != '\0'; p++)
+ {
+ if (*p == '\'')
+ g_string_append (str, "'\\''");
+ else
+ g_string_append_c (str, *p);
+ }
+ }
+
+ if (!in_single_quotes && !in_double_quotes)
+ g_string_append_c (str, '\'');
+ else if (!in_single_quotes && in_double_quotes)
+ g_string_append (str, "'\"");
+}
+
+static void
+do_percent_subst (EggDesktopFile *desktop_file,
+ char code,
+ GString *str,
+ GSList **documents,
+ gboolean in_single_quotes,
+ gboolean in_double_quotes)
+{
+ GSList *d;
+ char *doc;
+
+ switch (code)
+ {
+ case '%':
+ g_string_append_c (str, '%');
+ break;
+
+ case 'F':
+ case 'U':
+ for (d = *documents; d; d = d->next)
+ {
+ doc = d->data;
+ g_string_append (str, " ");
+ append_quoted_word (str, doc, in_single_quotes, in_double_quotes);
+ }
+ *documents = NULL;
+ break;
+
+ case 'f':
+ case 'u':
+ if (*documents)
+ {
+ doc = (*documents)->data;
+ g_string_append (str, " ");
+ append_quoted_word (str, doc, in_single_quotes, in_double_quotes);
+ *documents = (*documents)->next;
+ }
+ break;
+
+ case 'i':
+ if (desktop_file->icon)
+ {
+ g_string_append (str, "--icon ");
+ append_quoted_word (str, desktop_file->icon,
+ in_single_quotes, in_double_quotes);
+ }
+ break;
+
+ case 'c':
+ if (desktop_file->name)
+ {
+ append_quoted_word (str, desktop_file->name,
+ in_single_quotes, in_double_quotes);
+ }
+ break;
+
+ case 'k':
+ if (desktop_file->source)
+ {
+ append_quoted_word (str, desktop_file->source,
+ in_single_quotes, in_double_quotes);
+ }
+ break;
+
+ case 'D':
+ case 'N':
+ case 'd':
+ case 'n':
+ case 'v':
+ case 'm':
+ /* Deprecated; skip */
+ break;
+
+ default:
+ g_warning ("Unrecognized %%-code '%%%c' in Exec", code);
+ break;
+ }
+}
+
+static char *
+parse_exec (EggDesktopFile *desktop_file,
+ GSList **documents,
+ GError **error)
+{
+ char *exec, *p, *command;
+ gboolean escape, single_quot, double_quot;
+ GString *gs;
+
+ exec = g_key_file_get_string (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_EXEC,
+ error);
+ if (!exec)
+ return NULL;
+
+ /* Build the command */
+ gs = g_string_new (NULL);
+ escape = single_quot = double_quot = FALSE;
+
+ for (p = exec; *p != '\0'; p++)
+ {
+ if (escape)
+ {
+ escape = FALSE;
+ g_string_append_c (gs, *p);
+ }
+ else if (*p == '\\')
+ {
+ if (!single_quot)
+ escape = TRUE;
+ g_string_append_c (gs, *p);
+ }
+ else if (*p == '\'')
+ {
+ g_string_append_c (gs, *p);
+ if (!single_quot && !double_quot)
+ single_quot = TRUE;
+ else if (single_quot)
+ single_quot = FALSE;
+ }
+ else if (*p == '"')
+ {
+ g_string_append_c (gs, *p);
+ if (!single_quot && !double_quot)
+ double_quot = TRUE;
+ else if (double_quot)
+ double_quot = FALSE;
+ }
+ else if (*p == '%' && p[1])
+ {
+ do_percent_subst (desktop_file, p[1], gs, documents,
+ single_quot, double_quot);
+ p++;
+ }
+ else
+ g_string_append_c (gs, *p);
+ }
+
+ g_free (exec);
+ command = g_string_free (gs, FALSE);
+
+ /* Prepend "xdg-terminal " if needed (FIXME: use gvfs) */
+ if (g_key_file_has_key (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_TERMINAL,
+ NULL))
+ {
+ GError *terminal_error = NULL;
+ gboolean use_terminal =
+ g_key_file_get_boolean (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_TERMINAL,
+ &terminal_error);
+ if (terminal_error)
+ {
+ g_free (command);
+ g_propagate_error (error, terminal_error);
+ return NULL;
+ }
+
+ if (use_terminal)
+ {
+ gs = g_string_new ("xdg-terminal ");
+ append_quoted_word (gs, command, FALSE, FALSE);
+ g_free (command);
+ command = g_string_free (gs, FALSE);
+ }
+ }
+
+ return command;
+}
+
+static GSList *
+translate_document_list (EggDesktopFile *desktop_file, GSList *documents)
+{
+ gboolean accepts_uris = egg_desktop_file_accepts_uris (desktop_file);
+ GSList *ret, *d;
+
+ for (d = documents, ret = NULL; d; d = d->next)
+ {
+ const char *document = d->data;
+ gboolean is_uri = !g_path_is_absolute (document);
+ char *translated;
+
+ if (accepts_uris)
+ {
+ if (is_uri)
+ translated = g_strdup (document);
+ else
+ translated = g_filename_to_uri (document, NULL, NULL);
+ }
+ else
+ {
+ if (is_uri)
+ translated = g_filename_from_uri (document, NULL, NULL);
+ else
+ translated = g_strdup (document);
+ }
+
+ if (translated)
+ ret = g_slist_prepend (ret, translated);
+ }
+
+ return g_slist_reverse (ret);
+}
+
+static void
+free_document_list (GSList *documents)
+{
+ GSList *d;
+
+ for (d = documents; d; d = d->next)
+ g_free (d->data);
+ g_slist_free (documents);
+}
+
+/**
+ * egg_desktop_file_parse_exec:
+ * @desktop_file: a #EggDesktopFile
+ * @documents: a list of document paths or URIs
+ * @error: error pointer
+ *
+ * Parses @desktop_file's Exec key, inserting @documents into it, and
+ * returns the result.
+ *
+ * If @documents contains non-file: URIs and @desktop_file does not
+ * accept URIs, those URIs will be ignored. Likewise, if @documents
+ * contains more elements than @desktop_file accepts, the extra
+ * documents will be ignored.
+ *
+ * Return value: the parsed Exec string
+ **/
+char *
+egg_desktop_file_parse_exec (EggDesktopFile *desktop_file,
+ GSList *documents,
+ GError **error)
+{
+ GSList *translated, *docs;
+ char *command;
+
+ docs = translated = translate_document_list (desktop_file, documents);
+ command = parse_exec (desktop_file, &docs, error);
+ free_document_list (translated);
+
+ return command;
+}
+
+static gboolean
+parse_link (EggDesktopFile *desktop_file,
+ EggDesktopFile **app_desktop_file,
+ GSList **documents,
+ GError **error)
+{
+ char *url;
+ GKeyFile *key_file;
+
+ url = g_key_file_get_string (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_URL,
+ error);
+ if (!url)
+ return FALSE;
+ *documents = g_slist_prepend (NULL, url);
+
+ /* FIXME: use gvfs */
+ key_file = g_key_file_new ();
+ g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_NAME,
+ "xdg-open");
+ g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_TYPE,
+ "Application");
+ g_key_file_set_string (key_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_EXEC,
+ "xdg-open %u");
+ *app_desktop_file = egg_desktop_file_new_from_key_file (key_file, NULL, NULL);
+ return TRUE;
+}
+
+#if GTK_CHECK_VERSION (2, 12, 0)
+static char *
+start_startup_notification (GdkDisplay *display,
+ EggDesktopFile *desktop_file,
+ const char *argv0,
+ int screen,
+ int workspace,
+ guint32 launch_time)
+{
+ static int sequence = 0;
+ char *startup_id;
+ char *description, *wmclass;
+ char *screen_str, *workspace_str;
+
+ if (g_key_file_has_key (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY,
+ NULL))
+ {
+ if (!g_key_file_get_boolean (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY,
+ NULL))
+ return NULL;
+ wmclass = NULL;
+ }
+ else
+ {
+ wmclass = g_key_file_get_string (desktop_file->key_file,
+ EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_STARTUP_WM_CLASS,
+ NULL);
+ if (!wmclass)
+ return NULL;
+ }
+
+ if (launch_time == (guint32)-1)
+ launch_time = gdk_x11_display_get_user_time (display);
+ startup_id = g_strdup_printf ("%s-%lu-%s-%s-%d_TIME%lu",
+ g_get_prgname (),
+ (unsigned long)getpid (),
+ g_get_host_name (),
+ argv0,
+ sequence++,
+ (unsigned long)launch_time);
+
+ description = g_strdup_printf (_("Starting %s"), desktop_file->name);
+ screen_str = g_strdup_printf ("%d", screen);
+ workspace_str = workspace == -1 ? NULL : g_strdup_printf ("%d", workspace);
+
+ gdk_x11_display_broadcast_startup_message (display, "new",
+ "ID", startup_id,
+ "NAME", desktop_file->name,
+ "SCREEN", screen_str,
+ "BIN", argv0,
+ "ICON", desktop_file->icon,
+ "DESKTOP", workspace_str,
+ "DESCRIPTION", description,
+ "WMCLASS", wmclass,
+ NULL);
+
+ g_free (description);
+ g_free (wmclass);
+ g_free (screen_str);
+ g_free (workspace_str);
+
+ return startup_id;
+}
+
+static void
+end_startup_notification (GdkDisplay *display,
+ const char *startup_id)
+{
+ gdk_x11_display_broadcast_startup_message (display, "remove",
+ "ID", startup_id,
+ NULL);
+}
+
+#define EGG_DESKTOP_FILE_SN_TIMEOUT_LENGTH (30 /* seconds */)
+
+typedef struct {
+ GdkDisplay *display;
+ char *startup_id;
+} StartupNotificationData;
+
+static gboolean
+startup_notification_timeout (gpointer data)
+{
+ StartupNotificationData *sn_data = data;
+
+ end_startup_notification (sn_data->display, sn_data->startup_id);
+ g_object_unref (sn_data->display);
+ g_free (sn_data->startup_id);
+ g_free (sn_data);
+
+ return FALSE;
+}
+
+static void
+set_startup_notification_timeout (GdkDisplay *display,
+ const char *startup_id)
+{
+ StartupNotificationData *sn_data;
+
+ sn_data = g_new (StartupNotificationData, 1);
+ sn_data->display = g_object_ref (display);
+ sn_data->startup_id = g_strdup (startup_id);
+
+ g_timeout_add_seconds (EGG_DESKTOP_FILE_SN_TIMEOUT_LENGTH,
+ startup_notification_timeout, sn_data);
+}
+#endif /* GTK 2.12 */
+
+static GPtrArray *
+array_putenv (GPtrArray *env, char *variable)
+{
+ guint i, keylen;
+
+ if (!env)
+ {
+ char **envp;
+
+ env = g_ptr_array_new ();
+
+ envp = g_listenv ();
+ for (i = 0; envp[i]; i++)
+ {
+ const char *value;
+
+ value = g_getenv (envp[i]);
+ g_ptr_array_add (env, g_strdup_printf ("%s=%s", envp[i],
+ value ? value : ""));
+ }
+ g_strfreev (envp);
+ }
+
+ keylen = strcspn (variable, "=");
+
+ /* Remove old value of key */
+ for (i = 0; i < env->len; i++)
+ {
+ char *envvar = env->pdata[i];
+
+ if (!strncmp (envvar, variable, keylen) && envvar[keylen] == '=')
+ {
+ g_free (envvar);
+ g_ptr_array_remove_index_fast (env, i);
+ break;
+ }
+ }
+
+ /* Add new value */
+ g_ptr_array_add (env, g_strdup (variable));
+
+ return env;
+}
+
+static gboolean
+egg_desktop_file_launchv (EggDesktopFile *desktop_file,
+ GSList *documents, va_list args,
+ GError **error)
+{
+ EggDesktopFileLaunchOption option;
+ GSList *translated_documents = NULL, *docs = NULL;
+ char *command, **argv;
+ int argc, i, screen_num;
+ gboolean success, current_success;
+ GdkDisplay *display;
+ char *startup_id;
+
+ GPtrArray *env = NULL;
+ char **variables = NULL;
+ GdkScreen *screen = NULL;
+ int workspace = -1;
+ const char *directory = NULL;
+ guint32 launch_time = (guint32)-1;
+ GSpawnFlags flags = G_SPAWN_SEARCH_PATH;
+ GSpawnChildSetupFunc setup_func = NULL;
+ gpointer setup_data = NULL;
+
+ GPid *ret_pid = NULL;
+ int *ret_stdin = NULL, *ret_stdout = NULL, *ret_stderr = NULL;
+ char **ret_startup_id = NULL;
+
+ if (documents && desktop_file->document_code == 0)
+ {
+ g_set_error (error, EGG_DESKTOP_FILE_ERROR,
+ EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
+ _("Application does not accept documents on command line"));
+ return FALSE;
+ }
+
+ /* Read the options: technically it's incorrect for the caller to
+ * NULL-terminate the list of options (rather than 0-terminating
+ * it), but NULL-terminating lets us use G_GNUC_NULL_TERMINATED,
+ * it's more consistent with other glib/gtk methods, and it will
+ * work as long as sizeof (int) <= sizeof (NULL), and NULL is
+ * represented as 0. (Which is true everywhere we care about.)
+ */
+ while ((option = va_arg (args, EggDesktopFileLaunchOption)))
+ {
+ switch (option)
+ {
+ case EGG_DESKTOP_FILE_LAUNCH_CLEARENV:
+ if (env)
+ g_ptr_array_free (env, TRUE);
+ env = g_ptr_array_new ();
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_PUTENV:
+ variables = va_arg (args, char **);
+ for (i = 0; variables[i]; i++)
+ env = array_putenv (env, variables[i]);
+ break;
+
+ case EGG_DESKTOP_FILE_LAUNCH_SCREEN:
+ screen = va_arg (args, GdkScreen *);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_WORKSPACE:
+ workspace = va_arg (args, int);
+ break;
+
+ case EGG_DESKTOP_FILE_LAUNCH_DIRECTORY:
+ directory = va_arg (args, const char *);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_TIME:
+ launch_time = va_arg (args, guint32);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_FLAGS:
+ flags |= va_arg (args, GSpawnFlags);
+ /* Make sure they didn't set any flags that don't make sense. */
+ flags &= ~G_SPAWN_FILE_AND_ARGV_ZERO;
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC:
+ setup_func = va_arg (args, GSpawnChildSetupFunc);
+ setup_data = va_arg (args, gpointer);
+ break;
+
+ case EGG_DESKTOP_FILE_LAUNCH_RETURN_PID:
+ ret_pid = va_arg (args, GPid *);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE:
+ ret_stdin = va_arg (args, int *);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE:
+ ret_stdout = va_arg (args, int *);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE:
+ ret_stderr = va_arg (args, int *);
+ break;
+ case EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID:
+ ret_startup_id = va_arg (args, char **);
+ break;
+
+ default:
+ g_set_error (error, EGG_DESKTOP_FILE_ERROR,
+ EGG_DESKTOP_FILE_ERROR_UNRECOGNIZED_OPTION,
+ _("Unrecognized launch option: %d"),
+ GPOINTER_TO_INT (option));
+ success = FALSE;
+ goto out;
+ }
+ }
+
+ if (screen)
+ {
+ char *display_name = gdk_screen_make_display_name (screen);
+ char *display_env = g_strdup_printf ("DISPLAY=%s", display_name);
+ env = array_putenv (env, display_env);
+ g_free (display_name);
+ g_free (display_env);
+
+ display = gdk_screen_get_display (screen);
+ }
+ else
+ {
+ display = gdk_display_get_default ();
+ screen = gdk_display_get_default_screen (display);
+ }
+ screen_num = gdk_screen_get_number (screen);
+
+ translated_documents = translate_document_list (desktop_file, documents);
+ docs = translated_documents;
+
+ success = FALSE;
+
+ do
+ {
+ command = parse_exec (desktop_file, &docs, error);
+ if (!command)
+ goto out;
+
+ if (!g_shell_parse_argv (command, &argc, &argv, error))
+ {
+ g_free (command);
+ goto out;
+ }
+ g_free (command);
+
+#if GTK_CHECK_VERSION (2, 12, 0)
+ startup_id = start_startup_notification (display, desktop_file,
+ argv[0], screen_num,
+ workspace, launch_time);
+ if (startup_id)
+ {
+ char *startup_id_env = g_strdup_printf ("DESKTOP_STARTUP_ID=%s",
+ startup_id);
+ env = array_putenv (env, startup_id_env);
+ g_free (startup_id_env);
+ }
+#else
+ startup_id = NULL;
+#endif /* GTK 2.12 */
+
+ if (env != NULL)
+ g_ptr_array_add (env, NULL);
+
+ current_success =
+ g_spawn_async_with_pipes (directory,
+ argv,
+ env ? (char **)(env->pdata) : NULL,
+ flags,
+ setup_func, setup_data,
+ ret_pid,
+ ret_stdin, ret_stdout, ret_stderr,
+ error);
+ g_strfreev (argv);
+
+ if (startup_id)
+ {
+#if GTK_CHECK_VERSION (2, 12, 0)
+ if (current_success)
+ {
+ set_startup_notification_timeout (display, startup_id);
+
+ if (ret_startup_id)
+ *ret_startup_id = startup_id;
+ else
+ g_free (startup_id);
+ }
+ else
+#endif /* GTK 2.12 */
+ g_free (startup_id);
+ }
+ else if (ret_startup_id)
+ *ret_startup_id = NULL;
+
+ if (current_success)
+ {
+ /* If we successfully launch any instances of the app, make
+ * sure we return TRUE and don't set @error.
+ */
+ success = TRUE;
+ error = NULL;
+
+ /* Also, only set the output params on the first one */
+ ret_pid = NULL;
+ ret_stdin = ret_stdout = ret_stderr = NULL;
+ ret_startup_id = NULL;
+ }
+ }
+ while (docs && current_success);
+
+ out:
+ if (env)
+ {
+ g_strfreev ((char **)env->pdata);
+ g_ptr_array_free (env, FALSE);
+ }
+ free_document_list (translated_documents);
+
+ return success;
+}
+
+/**
+ * egg_desktop_file_launch:
+ * @desktop_file: an #EggDesktopFile
+ * @documents: a list of URIs or paths to documents to open
+ * @error: error pointer
+ * @...: additional options
+ *
+ * Launches @desktop_file with the given arguments. Additional options
+ * can be specified as follows:
+ *
+ * %EGG_DESKTOP_FILE_LAUNCH_CLEARENV: (no arguments)
+ * clears the environment in the child process
+ * %EGG_DESKTOP_FILE_LAUNCH_PUTENV: (char **variables)
+ * adds the NAME=VALUE strings in the given %NULL-terminated
+ * array to the child process's environment
+ * %EGG_DESKTOP_FILE_LAUNCH_SCREEN: (GdkScreen *screen)
+ * causes the application to be launched on the given screen
+ * %EGG_DESKTOP_FILE_LAUNCH_WORKSPACE: (int workspace)
+ * causes the application to be launched on the given workspace
+ * %EGG_DESKTOP_FILE_LAUNCH_DIRECTORY: (char *dir)
+ * causes the application to be launched in the given directory
+ * %EGG_DESKTOP_FILE_LAUNCH_TIME: (guint32 launch_time)
+ * sets the "launch time" for the application. If the user
+ * interacts with another window after @launch_time but before
+ * the launched application creates its first window, the window
+ * manager may choose to not give focus to the new application.
+ * Passing 0 for @launch_time will explicitly request that the
+ * application not receive focus.
+ * %EGG_DESKTOP_FILE_LAUNCH_FLAGS (GSpawnFlags flags)
+ * Sets additional #GSpawnFlags to use. See g_spawn_async() for
+ * more details.
+ * %EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC (GSpawnChildSetupFunc, gpointer)
+ * Sets the child setup callback and the data to pass to it.
+ * (See g_spawn_async() for more details.)
+ *
+ * %EGG_DESKTOP_FILE_LAUNCH_RETURN_PID (GPid **pid)
+ * On a successful launch, sets *@pid to the PID of the launched
+ * application.
+ * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID (char **startup_id)
+ * On a successful launch, sets *@startup_id to the Startup
+ * Notification "startup id" of the launched application.
+ * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE (int *fd)
+ * On a successful launch, sets *@fd to the file descriptor of
+ * a pipe connected to the application's stdin.
+ * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE (int *fd)
+ * On a successful launch, sets *@fd to the file descriptor of
+ * a pipe connected to the application's stdout.
+ * %EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE (int *fd)
+ * On a successful launch, sets *@fd to the file descriptor of
+ * a pipe connected to the application's stderr.
+ *
+ * The options should be terminated with a single %NULL.
+ *
+ * If @documents contains multiple documents, but
+ * egg_desktop_file_accepts_multiple() returns %FALSE for
+ * @desktop_file, then egg_desktop_file_launch() will actually launch
+ * multiple instances of the application. In that case, the return
+ * value (as well as any values passed via
+ * %EGG_DESKTOP_FILE_LAUNCH_RETURN_PID, etc) will only reflect the
+ * first instance of the application that was launched (but the
+ * %EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC will be called for each
+ * instance).
+ *
+ * Return value: %TRUE if the application was successfully launched.
+ **/
+gboolean
+egg_desktop_file_launch (EggDesktopFile *desktop_file,
+ GSList *documents, GError **error,
+ ...)
+{
+ va_list args;
+ gboolean success;
+ EggDesktopFile *app_desktop_file;
+
+ switch (desktop_file->type)
+ {
+ case EGG_DESKTOP_FILE_TYPE_APPLICATION:
+ va_start (args, error);
+ success = egg_desktop_file_launchv (desktop_file, documents,
+ args, error);
+ va_end (args);
+ break;
+
+ case EGG_DESKTOP_FILE_TYPE_LINK:
+ if (documents)
+ {
+ g_set_error (error, EGG_DESKTOP_FILE_ERROR,
+ EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
+ _("Can't pass document URIs to a 'Type=Link' desktop entry"));
+ return FALSE;
+ }
+
+ if (!parse_link (desktop_file, &app_desktop_file, &documents, error))
+ return FALSE;
+
+ va_start (args, error);
+ success = egg_desktop_file_launchv (app_desktop_file, documents,
+ args, error);
+ va_end (args);
+
+ egg_desktop_file_free (app_desktop_file);
+ free_document_list (documents);
+ break;
+
+ default:
+ g_set_error (error, EGG_DESKTOP_FILE_ERROR,
+ EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
+ _("Not a launchable item"));
+ success = FALSE;
+ break;
+ }
+
+ return success;
+}
+
+
+GQuark
+egg_desktop_file_error_quark (void)
+{
+ return g_quark_from_static_string ("egg-desktop_file-error-quark");
+}
+
+
+G_LOCK_DEFINE_STATIC (egg_desktop_file);
+static EggDesktopFile *egg_desktop_file;
+
+/**
+ * egg_set_desktop_file:
+ * @desktop_file_path: path to the application's desktop file
+ *
+ * Creates an #EggDesktopFile for the application from the data at
+ * @desktop_file_path. This will also call g_set_application_name()
+ * with the localized application name from the desktop file, and
+ * gtk_window_set_default_icon_name() or
+ * gtk_window_set_default_icon_from_file() with the application's
+ * icon. Other code may use additional information from the desktop
+ * file.
+ *
+ * Note that for thread safety reasons, this function can only
+ * be called once.
+ **/
+void
+egg_set_desktop_file (const char *desktop_file_path)
+{
+ GError *error = NULL;
+
+ G_LOCK (egg_desktop_file);
+ if (egg_desktop_file)
+ egg_desktop_file_free (egg_desktop_file);
+
+ egg_desktop_file = egg_desktop_file_new (desktop_file_path, &error);
+ if (error)
+ {
+ g_warning ("Could not load desktop file '%s': %s",
+ desktop_file_path, error->message);
+ g_error_free (error);
+ }
+
+ if (egg_desktop_file) {
+ /* Set localized application name and default window icon */
+ if (egg_desktop_file->name)
+ g_set_application_name (egg_desktop_file->name);
+ if (egg_desktop_file->icon)
+ {
+ if (g_path_is_absolute (egg_desktop_file->icon))
+ gtk_window_set_default_icon_from_file (egg_desktop_file->icon, NULL);
+ else
+ gtk_window_set_default_icon_name (egg_desktop_file->icon);
+ }
+ }
+
+ G_UNLOCK (egg_desktop_file);
+}
+
+/**
+ * egg_get_desktop_file:
+ *
+ * Gets the application's #EggDesktopFile, as set by
+ * egg_set_desktop_file().
+ *
+ * Return value: the #EggDesktopFile, or %NULL if it hasn't been set.
+ **/
+EggDesktopFile *
+egg_get_desktop_file (void)
+{
+ EggDesktopFile *retval;
+
+ G_LOCK (egg_desktop_file);
+ retval = egg_desktop_file;
+ G_UNLOCK (egg_desktop_file);
+
+ return retval;
+}
diff --git a/cut-n-paste/smclient/eggdesktopfile.h b/cut-n-paste/smclient/eggdesktopfile.h
new file mode 100644
index 00000000..2be36210
--- /dev/null
+++ b/cut-n-paste/smclient/eggdesktopfile.h
@@ -0,0 +1,159 @@
+/* eggdesktopfile.h - Freedesktop.Org Desktop Files
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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 __EGG_DESKTOP_FILE_H__
+#define __EGG_DESKTOP_FILE_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef struct EggDesktopFile EggDesktopFile;
+
+typedef enum {
+ EGG_DESKTOP_FILE_TYPE_UNRECOGNIZED,
+
+ EGG_DESKTOP_FILE_TYPE_APPLICATION,
+ EGG_DESKTOP_FILE_TYPE_LINK,
+ EGG_DESKTOP_FILE_TYPE_DIRECTORY
+} EggDesktopFileType;
+
+EggDesktopFile *egg_desktop_file_new (const char *desktop_file_path,
+ GError **error);
+
+EggDesktopFile *egg_desktop_file_new_from_data_dirs (const char *desktop_file_path,
+ GError **error);
+EggDesktopFile *egg_desktop_file_new_from_dirs (const char *desktop_file_path,
+ const char **search_dirs,
+ GError **error);
+EggDesktopFile *egg_desktop_file_new_from_key_file (GKeyFile *key_file,
+ const char *source,
+ GError **error);
+
+void egg_desktop_file_free (EggDesktopFile *desktop_file);
+
+const char *egg_desktop_file_get_source (EggDesktopFile *desktop_file);
+
+EggDesktopFileType egg_desktop_file_get_desktop_file_type (EggDesktopFile *desktop_file);
+
+const char *egg_desktop_file_get_name (EggDesktopFile *desktop_file);
+const char *egg_desktop_file_get_icon (EggDesktopFile *desktop_file);
+
+gboolean egg_desktop_file_can_launch (EggDesktopFile *desktop_file,
+ const char *desktop_environment);
+
+gboolean egg_desktop_file_accepts_documents (EggDesktopFile *desktop_file);
+gboolean egg_desktop_file_accepts_multiple (EggDesktopFile *desktop_file);
+gboolean egg_desktop_file_accepts_uris (EggDesktopFile *desktop_file);
+
+char *egg_desktop_file_parse_exec (EggDesktopFile *desktop_file,
+ GSList *documents,
+ GError **error);
+
+gboolean egg_desktop_file_launch (EggDesktopFile *desktop_file,
+ GSList *documents,
+ GError **error,
+ ...) G_GNUC_NULL_TERMINATED;
+
+typedef enum {
+ EGG_DESKTOP_FILE_LAUNCH_CLEARENV = 1,
+ EGG_DESKTOP_FILE_LAUNCH_PUTENV,
+ EGG_DESKTOP_FILE_LAUNCH_SCREEN,
+ EGG_DESKTOP_FILE_LAUNCH_WORKSPACE,
+ EGG_DESKTOP_FILE_LAUNCH_DIRECTORY,
+ EGG_DESKTOP_FILE_LAUNCH_TIME,
+ EGG_DESKTOP_FILE_LAUNCH_FLAGS,
+ EGG_DESKTOP_FILE_LAUNCH_SETUP_FUNC,
+ EGG_DESKTOP_FILE_LAUNCH_RETURN_PID,
+ EGG_DESKTOP_FILE_LAUNCH_RETURN_STDIN_PIPE,
+ EGG_DESKTOP_FILE_LAUNCH_RETURN_STDOUT_PIPE,
+ EGG_DESKTOP_FILE_LAUNCH_RETURN_STDERR_PIPE,
+ EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID
+} EggDesktopFileLaunchOption;
+
+/* Standard Keys */
+#define EGG_DESKTOP_FILE_GROUP "Desktop Entry"
+
+#define EGG_DESKTOP_FILE_KEY_TYPE "Type"
+#define EGG_DESKTOP_FILE_KEY_VERSION "Version"
+#define EGG_DESKTOP_FILE_KEY_NAME "Name"
+#define EGG_DESKTOP_FILE_KEY_GENERIC_NAME "GenericName"
+#define EGG_DESKTOP_FILE_KEY_NO_DISPLAY "NoDisplay"
+#define EGG_DESKTOP_FILE_KEY_COMMENT "Comment"
+#define EGG_DESKTOP_FILE_KEY_ICON "Icon"
+#define EGG_DESKTOP_FILE_KEY_HIDDEN "Hidden"
+#define EGG_DESKTOP_FILE_KEY_ONLY_SHOW_IN "OnlyShowIn"
+#define EGG_DESKTOP_FILE_KEY_NOT_SHOW_IN "NotShowIn"
+#define EGG_DESKTOP_FILE_KEY_TRY_EXEC "TryExec"
+#define EGG_DESKTOP_FILE_KEY_EXEC "Exec"
+#define EGG_DESKTOP_FILE_KEY_PATH "Path"
+#define EGG_DESKTOP_FILE_KEY_TERMINAL "Terminal"
+#define EGG_DESKTOP_FILE_KEY_MIME_TYPE "MimeType"
+#define EGG_DESKTOP_FILE_KEY_CATEGORIES "Categories"
+#define EGG_DESKTOP_FILE_KEY_STARTUP_NOTIFY "StartupNotify"
+#define EGG_DESKTOP_FILE_KEY_STARTUP_WM_CLASS "StartupWMClass"
+#define EGG_DESKTOP_FILE_KEY_URL "URL"
+
+/* Accessors */
+gboolean egg_desktop_file_has_key (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error);
+char *egg_desktop_file_get_string (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error) G_GNUC_MALLOC;
+char *egg_desktop_file_get_locale_string (EggDesktopFile *desktop_file,
+ const char *key,
+ const char *locale,
+ GError **error) G_GNUC_MALLOC;
+gboolean egg_desktop_file_get_boolean (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error);
+double egg_desktop_file_get_numeric (EggDesktopFile *desktop_file,
+ const char *key,
+ GError **error);
+char **egg_desktop_file_get_string_list (EggDesktopFile *desktop_file,
+ const char *key,
+ gsize *length,
+ GError **error) G_GNUC_MALLOC;
+char **egg_desktop_file_get_locale_string_list (EggDesktopFile *desktop_file,
+ const char *key,
+ const char *locale,
+ gsize *length,
+ GError **error) G_GNUC_MALLOC;
+
+
+/* Errors */
+#define EGG_DESKTOP_FILE_ERROR egg_desktop_file_error_quark()
+
+GQuark egg_desktop_file_error_quark (void);
+
+typedef enum {
+ EGG_DESKTOP_FILE_ERROR_INVALID,
+ EGG_DESKTOP_FILE_ERROR_NOT_LAUNCHABLE,
+ EGG_DESKTOP_FILE_ERROR_UNRECOGNIZED_OPTION
+} EggDesktopFileError;
+
+/* Global application desktop file */
+void egg_set_desktop_file (const char *desktop_file_path);
+EggDesktopFile *egg_get_desktop_file (void);
+
+
+G_END_DECLS
+
+#endif /* __EGG_DESKTOP_FILE_H__ */
diff --git a/cut-n-paste/smclient/eggsmclient-osx.c b/cut-n-paste/smclient/eggsmclient-osx.c
new file mode 100644
index 00000000..5428c09f
--- /dev/null
+++ b/cut-n-paste/smclient/eggsmclient-osx.c
@@ -0,0 +1,235 @@
+/*
+ * Copyright (C) 2007 Novell, Inc.
+ * Copyright (C) 2008 Red Hat, Inc.
+ *
+ * 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.
+ */
+
+/* EggSMClientOSX
+ *
+ * For details on the OS X logout process, see:
+ * http://developer.apple.com/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/BootProcess.html#//apple_ref/doc/uid/20002130-114618
+ *
+ * EggSMClientOSX registers for the kAEQuitApplication AppleEvent; the
+ * handler we register (quit_requested()) will be invoked from inside
+ * the quartz event-handling code (specifically, from inside
+ * [NSApplication nextEventMatchingMask]) when an AppleEvent arrives.
+ * We use AESuspendTheCurrentEvent() and AEResumeTheCurrentEvent() to
+ * allow asynchronous / non-main-loop-reentering processing of the
+ * quit request. (These are part of the Carbon framework; it doesn't
+ * seem to be possible to handle AppleEvents asynchronously from
+ * Cocoa.)
+ */
+
+#include "config.h"
+
+#include "eggsmclient-private.h"
+#include <gdk/gdkquartz.h>
+#include <Carbon/Carbon.h>
+#include <CoreServices/CoreServices.h>
+
+#define EGG_TYPE_SM_CLIENT_OSX (egg_sm_client_osx_get_type ())
+#define EGG_SM_CLIENT_OSX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT_OSX, EggSMClientOSX))
+#define EGG_SM_CLIENT_OSX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT_OSX, EggSMClientOSXClass))
+#define EGG_IS_SM_CLIENT_OSX(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT_OSX))
+#define EGG_IS_SM_CLIENT_OSX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT_OSX))
+#define EGG_SM_CLIENT_OSX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT_OSX, EggSMClientOSXClass))
+
+typedef struct _EggSMClientOSX EggSMClientOSX;
+typedef struct _EggSMClientOSXClass EggSMClientOSXClass;
+
+struct _EggSMClientOSX {
+ EggSMClient parent;
+
+ AppleEvent quit_event, quit_reply;
+ gboolean quit_requested, quitting;
+};
+
+struct _EggSMClientOSXClass
+{
+ EggSMClientClass parent_class;
+
+};
+
+static void sm_client_osx_startup (EggSMClient *client,
+ const char *client_id);
+static void sm_client_osx_will_quit (EggSMClient *client,
+ gboolean will_quit);
+static gboolean sm_client_osx_end_session (EggSMClient *client,
+ EggSMClientEndStyle style,
+ gboolean request_confirmation);
+
+static pascal OSErr quit_requested (const AppleEvent *, AppleEvent *, long);
+
+G_DEFINE_TYPE (EggSMClientOSX, egg_sm_client_osx, EGG_TYPE_SM_CLIENT)
+
+static void
+egg_sm_client_osx_init (EggSMClientOSX *osx)
+{
+ ;
+}
+
+static void
+egg_sm_client_osx_class_init (EggSMClientOSXClass *klass)
+{
+ EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass);
+
+ sm_client_class->startup = sm_client_osx_startup;
+ sm_client_class->will_quit = sm_client_osx_will_quit;
+ sm_client_class->end_session = sm_client_osx_end_session;
+}
+
+EggSMClient *
+egg_sm_client_osx_new (void)
+{
+ return g_object_new (EGG_TYPE_SM_CLIENT_OSX, NULL);
+}
+
+static void
+sm_client_osx_startup (EggSMClient *client,
+ const char *client_id)
+{
+ AEInstallEventHandler (kCoreEventClass, kAEQuitApplication,
+ NewAEEventHandlerUPP (quit_requested),
+ (long)GPOINTER_TO_SIZE (client), false);
+}
+
+static gboolean
+idle_quit_requested (gpointer client)
+{
+ egg_sm_client_quit_requested (client);
+ return FALSE;
+}
+
+static pascal OSErr
+quit_requested (const AppleEvent *aevt, AppleEvent *reply, long refcon)
+{
+ EggSMClient *client = GSIZE_TO_POINTER ((gsize)refcon);
+ EggSMClientOSX *osx = GSIZE_TO_POINTER ((gsize)refcon);
+
+ g_return_val_if_fail (!osx->quit_requested, userCanceledErr);
+
+ /* FIXME AEInteractWithUser? */
+
+ osx->quit_requested = TRUE;
+ AEDuplicateDesc (aevt, &osx->quit_event);
+ AEDuplicateDesc (reply, &osx->quit_reply);
+ AESuspendTheCurrentEvent (aevt);
+
+ /* Don't emit the "quit_requested" signal immediately, since we're
+ * called from a weird point in the guts of gdkeventloop-quartz.c
+ */
+ g_idle_add (idle_quit_requested, client);
+ return noErr;
+}
+
+static pascal OSErr
+quit_requested_resumed (const AppleEvent *aevt, AppleEvent *reply, long refcon)
+{
+ EggSMClientOSX *osx = GSIZE_TO_POINTER ((gsize)refcon);
+
+ osx->quit_requested = FALSE;
+ return osx->quitting ? noErr : userCanceledErr;
+}
+
+static gboolean
+idle_will_quit (gpointer client)
+{
+ EggSMClientOSX *osx = (EggSMClientOSX *)client;
+
+ /* Resume the event with a new handler that will return a value to
+ * the system.
+ */
+ AEResumeTheCurrentEvent (&osx->quit_event, &osx->quit_reply,
+ NewAEEventHandlerUPP (quit_requested_resumed),
+ (long)GPOINTER_TO_SIZE (client));
+ AEDisposeDesc (&osx->quit_event);
+ AEDisposeDesc (&osx->quit_reply);
+
+ if (osx->quitting)
+ egg_sm_client_quit (client);
+ return FALSE;
+}
+
+static void
+sm_client_osx_will_quit (EggSMClient *client,
+ gboolean will_quit)
+{
+ EggSMClientOSX *osx = (EggSMClientOSX *)client;
+
+ g_return_if_fail (osx->quit_requested);
+
+ osx->quitting = will_quit;
+
+ /* Finish in an idle handler since the caller might have called
+ * egg_sm_client_will_quit() from inside the "quit_requested" signal
+ * handler, but may not expect the "quit" signal to arrive during
+ * the _will_quit() call.
+ */
+ g_idle_add (idle_will_quit, client);
+}
+
+static gboolean
+sm_client_osx_end_session (EggSMClient *client,
+ EggSMClientEndStyle style,
+ gboolean request_confirmation)
+{
+ static const ProcessSerialNumber loginwindow_psn = { 0, kSystemProcess };
+ AppleEvent event = { typeNull, NULL }, reply = { typeNull, NULL };
+ AEAddressDesc target;
+ AEEventID id;
+ OSErr err;
+
+ switch (style)
+ {
+ case EGG_SM_CLIENT_END_SESSION_DEFAULT:
+ case EGG_SM_CLIENT_LOGOUT:
+ id = request_confirmation ? kAELogOut : kAEReallyLogOut;
+ break;
+ case EGG_SM_CLIENT_REBOOT:
+ id = request_confirmation ? kAEShowRestartDialog : kAERestart;
+ break;
+ case EGG_SM_CLIENT_SHUTDOWN:
+ id = request_confirmation ? kAEShowShutdownDialog : kAEShutDown;
+ break;
+ }
+
+ err = AECreateDesc (typeProcessSerialNumber, &loginwindow_psn,
+ sizeof (loginwindow_psn), &target);
+ if (err != noErr)
+ {
+ g_warning ("Could not create descriptor for loginwindow: %d", err);
+ return FALSE;
+ }
+
+ err = AECreateAppleEvent (kCoreEventClass, id, &target,
+ kAutoGenerateReturnID, kAnyTransactionID,
+ &event);
+ AEDisposeDesc (&target);
+ if (err != noErr)
+ {
+ g_warning ("Could not create logout AppleEvent: %d", err);
+ return FALSE;
+ }
+
+ err = AESend (&event, &reply, kAENoReply, kAENormalPriority,
+ kAEDefaultTimeout, NULL, NULL);
+ AEDisposeDesc (&event);
+ if (err == noErr)
+ AEDisposeDesc (&reply);
+
+ return err == noErr;
+}
diff --git a/cut-n-paste/smclient/eggsmclient-private.h b/cut-n-paste/smclient/eggsmclient-private.h
new file mode 100644
index 00000000..fc3a0a2d
--- /dev/null
+++ b/cut-n-paste/smclient/eggsmclient-private.h
@@ -0,0 +1,53 @@
+/* eggsmclient-private.h
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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.
+ */
+
+#ifndef __EGG_SM_CLIENT_PRIVATE_H__
+#define __EGG_SM_CLIENT_PRIVATE_H__
+
+#include <gdkconfig.h>
+#include "eggsmclient.h"
+
+G_BEGIN_DECLS
+
+GKeyFile *egg_sm_client_save_state (EggSMClient *client);
+void egg_sm_client_quit_requested (EggSMClient *client);
+void egg_sm_client_quit_cancelled (EggSMClient *client);
+void egg_sm_client_quit (EggSMClient *client);
+
+#if defined (GDK_WINDOWING_X11)
+# ifdef EGG_SM_CLIENT_BACKEND_XSMP
+GType egg_sm_client_xsmp_get_type (void);
+EggSMClient *egg_sm_client_xsmp_new (void);
+# endif
+# ifdef EGG_SM_CLIENT_BACKEND_DBUS
+GType egg_sm_client_dbus_get_type (void);
+EggSMClient *egg_sm_client_dbus_new (void);
+# endif
+#elif defined (GDK_WINDOWING_WIN32)
+GType egg_sm_client_win32_get_type (void);
+EggSMClient *egg_sm_client_win32_new (void);
+#elif defined (GDK_WINDOWING_QUARTZ)
+GType egg_sm_client_osx_get_type (void);
+EggSMClient *egg_sm_client_osx_new (void);
+#endif
+
+G_END_DECLS
+
+
+#endif /* __EGG_SM_CLIENT_PRIVATE_H__ */
diff --git a/cut-n-paste/smclient/eggsmclient-win32.c b/cut-n-paste/smclient/eggsmclient-win32.c
new file mode 100644
index 00000000..3fec775c
--- /dev/null
+++ b/cut-n-paste/smclient/eggsmclient-win32.c
@@ -0,0 +1,353 @@
+/*
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * 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.
+ */
+
+/* EggSMClientWin32
+ *
+ * For details on the Windows XP logout process, see:
+ * http://msdn.microsoft.com/en-us/library/aa376876.aspx.
+ *
+ * Vista adds some new APIs which EggSMClient does not make use of; see
+ * http://msdn.microsoft.com/en-us/library/ms700677(VS.85).aspx
+ *
+ * When shutting down, Windows sends every top-level window a
+ * WM_QUERYENDSESSION event, which the application must respond to
+ * synchronously, saying whether or not it will quit. To avoid main
+ * loop re-entrancy problems (and to avoid having to muck about too
+ * much with the guts of the gdk-win32 main loop), we watch for this
+ * event in a separate thread, which then signals the main thread and
+ * waits for the main thread to handle the event. Since we don't want
+ * to require g_thread_init() to be called, we do this all using
+ * Windows-specific thread methods.
+ *
+ * After the application handles the WM_QUERYENDSESSION event,
+ * Windows then sends it a WM_ENDSESSION event with a TRUE or FALSE
+ * parameter indicating whether the session is or is not actually
+ * going to end now. We handle this from the other thread as well.
+ *
+ * As mentioned above, Vista introduces several additional new APIs
+ * that don't fit into the (current) EggSMClient API. Windows also has
+ * an entirely separate shutdown-notification scheme for non-GUI apps,
+ * which we also don't handle here.
+ */
+
+#include "config.h"
+
+#include "eggsmclient-private.h"
+#include <gdk/gdk.h>
+
+#define WIN32_LEAN_AND_MEAN
+#define UNICODE
+#include <windows.h>
+#include <process.h>
+
+#define EGG_TYPE_SM_CLIENT_WIN32 (egg_sm_client_win32_get_type ())
+#define EGG_SM_CLIENT_WIN32(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT_WIN32, EggSMClientWin32))
+#define EGG_SM_CLIENT_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT_WIN32, EggSMClientWin32Class))
+#define EGG_IS_SM_CLIENT_WIN32(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT_WIN32))
+#define EGG_IS_SM_CLIENT_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT_WIN32))
+#define EGG_SM_CLIENT_WIN32_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT_WIN32, EggSMClientWin32Class))
+
+typedef struct _EggSMClientWin32 EggSMClientWin32;
+typedef struct _EggSMClientWin32Class EggSMClientWin32Class;
+
+struct _EggSMClientWin32 {
+ EggSMClient parent;
+
+ HANDLE message_event, response_event;
+
+ volatile GSourceFunc event;
+ volatile gboolean will_quit;
+};
+
+struct _EggSMClientWin32Class
+{
+ EggSMClientClass parent_class;
+
+};
+
+static void sm_client_win32_startup (EggSMClient *client,
+ const char *client_id);
+static void sm_client_win32_will_quit (EggSMClient *client,
+ gboolean will_quit);
+static gboolean sm_client_win32_end_session (EggSMClient *client,
+ EggSMClientEndStyle style,
+ gboolean request_confirmation);
+
+static GSource *g_win32_handle_source_add (HANDLE handle, GSourceFunc callback,
+ gpointer user_data);
+static gboolean got_message (gpointer user_data);
+static void sm_client_thread (gpointer data);
+
+G_DEFINE_TYPE (EggSMClientWin32, egg_sm_client_win32, EGG_TYPE_SM_CLIENT)
+
+static void
+egg_sm_client_win32_init (EggSMClientWin32 *win32)
+{
+ ;
+}
+
+static void
+egg_sm_client_win32_class_init (EggSMClientWin32Class *klass)
+{
+ EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass);
+
+ sm_client_class->startup = sm_client_win32_startup;
+ sm_client_class->will_quit = sm_client_win32_will_quit;
+ sm_client_class->end_session = sm_client_win32_end_session;
+}
+
+EggSMClient *
+egg_sm_client_win32_new (void)
+{
+ return g_object_new (EGG_TYPE_SM_CLIENT_WIN32, NULL);
+}
+
+static void
+sm_client_win32_startup (EggSMClient *client,
+ const char *client_id)
+{
+ EggSMClientWin32 *win32 = (EggSMClientWin32 *)client;
+
+ win32->message_event = CreateEvent (NULL, FALSE, FALSE, NULL);
+ win32->response_event = CreateEvent (NULL, FALSE, FALSE, NULL);
+ g_win32_handle_source_add (win32->message_event, got_message, win32);
+ _beginthread (sm_client_thread, 0, client);
+}
+
+static void
+sm_client_win32_will_quit (EggSMClient *client,
+ gboolean will_quit)
+{
+ EggSMClientWin32 *win32 = (EggSMClientWin32 *)client;
+
+ win32->will_quit = will_quit;
+ SetEvent (win32->response_event);
+}
+
+static gboolean
+sm_client_win32_end_session (EggSMClient *client,
+ EggSMClientEndStyle style,
+ gboolean request_confirmation)
+{
+ UINT uFlags = EWX_LOGOFF;
+
+ switch (style)
+ {
+ case EGG_SM_CLIENT_END_SESSION_DEFAULT:
+ case EGG_SM_CLIENT_LOGOUT:
+ uFlags = EWX_LOGOFF;
+ break;
+ case EGG_SM_CLIENT_REBOOT:
+ uFlags = EWX_REBOOT;
+ break;
+ case EGG_SM_CLIENT_SHUTDOWN:
+ uFlags = EWX_POWEROFF;
+ break;
+ }
+
+ /* There's no way to make ExitWindowsEx() show a logout dialog, so
+ * we ignore @request_confirmation.
+ */
+
+#ifdef SHTDN_REASON_FLAG_PLANNED
+ ExitWindowsEx (uFlags, SHTDN_REASON_FLAG_PLANNED);
+#else
+ ExitWindowsEx (uFlags, 0);
+#endif
+
+ return TRUE;
+}
+
+
+/* callbacks from logout-listener thread */
+
+static gboolean
+emit_quit_requested (gpointer smclient)
+{
+ gdk_threads_enter ();
+ egg_sm_client_quit_requested (smclient);
+ gdk_threads_leave ();
+
+ return FALSE;
+}
+
+static gboolean
+emit_quit (gpointer smclient)
+{
+ EggSMClientWin32 *win32 = smclient;
+
+ gdk_threads_enter ();
+ egg_sm_client_quit (smclient);
+ gdk_threads_leave ();
+
+ SetEvent (win32->response_event);
+ return FALSE;
+}
+
+static gboolean
+emit_quit_cancelled (gpointer smclient)
+{
+ EggSMClientWin32 *win32 = smclient;
+
+ gdk_threads_enter ();
+ egg_sm_client_quit_cancelled (smclient);
+ gdk_threads_leave ();
+
+ SetEvent (win32->response_event);
+ return FALSE;
+}
+
+static gboolean
+got_message (gpointer smclient)
+{
+ EggSMClientWin32 *win32 = smclient;
+
+ win32->event (win32);
+ return TRUE;
+}
+
+/* Windows HANDLE GSource */
+
+typedef struct {
+ GSource source;
+ GPollFD pollfd;
+} GWin32HandleSource;
+
+static gboolean
+g_win32_handle_source_prepare (GSource *source, gint *timeout)
+{
+ *timeout = -1;
+ return FALSE;
+}
+
+static gboolean
+g_win32_handle_source_check (GSource *source)
+{
+ GWin32HandleSource *hsource = (GWin32HandleSource *)source;
+
+ return hsource->pollfd.revents;
+}
+
+static gboolean
+g_win32_handle_source_dispatch (GSource *source, GSourceFunc callback, gpointer user_data)
+{
+ return (*callback) (user_data);
+}
+
+static void
+g_win32_handle_source_finalize (GSource *source)
+{
+ ;
+}
+
+GSourceFuncs g_win32_handle_source_funcs = {
+ g_win32_handle_source_prepare,
+ g_win32_handle_source_check,
+ g_win32_handle_source_dispatch,
+ g_win32_handle_source_finalize
+};
+
+static GSource *
+g_win32_handle_source_add (HANDLE handle, GSourceFunc callback, gpointer user_data)
+{
+ GWin32HandleSource *hsource;
+ GSource *source;
+
+ source = g_source_new (&g_win32_handle_source_funcs, sizeof (GWin32HandleSource));
+ hsource = (GWin32HandleSource *)source;
+ hsource->pollfd.fd = (int)handle;
+ hsource->pollfd.events = G_IO_IN;
+ hsource->pollfd.revents = 0;
+ g_source_add_poll (source, &hsource->pollfd);
+
+ g_source_set_callback (source, callback, user_data, NULL);
+ g_source_attach (source, NULL);
+ return source;
+}
+
+/* logout-listener thread */
+
+LRESULT CALLBACK
+sm_client_win32_window_procedure (HWND hwnd,
+ UINT message,
+ WPARAM wParam,
+ LPARAM lParam)
+{
+ EggSMClientWin32 *win32 =
+ (EggSMClientWin32 *)GetWindowLongPtr (hwnd, GWLP_USERDATA);
+
+ switch (message)
+ {
+ case WM_QUERYENDSESSION:
+ win32->event = emit_quit_requested;
+ SetEvent (win32->message_event);
+
+ WaitForSingleObject (win32->response_event, INFINITE);
+ return win32->will_quit;
+
+ case WM_ENDSESSION:
+ if (wParam)
+ {
+ /* The session is ending */
+ win32->event = emit_quit;
+ }
+ else
+ {
+ /* Nope, the session *isn't* ending */
+ win32->event = emit_quit_cancelled;
+ }
+
+ SetEvent (win32->message_event);
+ WaitForSingleObject (win32->response_event, INFINITE);
+
+ return 0;
+
+ default:
+ return DefWindowProc (hwnd, message, wParam, lParam);
+ }
+}
+
+static void
+sm_client_thread (gpointer smclient)
+{
+ HINSTANCE instance;
+ WNDCLASSEXW wcl;
+ ATOM klass;
+ HWND window;
+ MSG msg;
+
+ instance = GetModuleHandle (NULL);
+
+ memset (&wcl, 0, sizeof (WNDCLASSEX));
+ wcl.cbSize = sizeof (WNDCLASSEX);
+ wcl.lpfnWndProc = sm_client_win32_window_procedure;
+ wcl.hInstance = instance;
+ wcl.lpszClassName = L"EggSmClientWindow";
+ klass = RegisterClassEx (&wcl);
+
+ window = CreateWindowEx (0, MAKEINTRESOURCE (klass),
+ L"EggSmClientWindow", 0,
+ 10, 10, 50, 50, GetDesktopWindow (),
+ NULL, instance, NULL);
+ SetWindowLongPtr (window, GWLP_USERDATA, (LONG_PTR)smclient);
+
+ /* main loop */
+ while (GetMessage (&msg, NULL, 0, 0))
+ DispatchMessage (&msg);
+}
diff --git a/cut-n-paste/smclient/eggsmclient-xsmp.c b/cut-n-paste/smclient/eggsmclient-xsmp.c
new file mode 100644
index 00000000..90f201d9
--- /dev/null
+++ b/cut-n-paste/smclient/eggsmclient-xsmp.c
@@ -0,0 +1,1370 @@
+/*
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * Inspired by various other pieces of code including GsmClient (C)
+ * 2001 Havoc Pennington, MateClient (C) 1998 Carsten Schaar, and twm
+ * session code (C) 1998 The Open Group.
+ *
+ * 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.
+ */
+
+#include "config.h"
+
+#include "eggsmclient.h"
+#include "eggsmclient-private.h"
+
+#include "eggdesktopfile.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <X11/SM/SMlib.h>
+
+#include <gdk/gdk.h>
+
+#define EGG_TYPE_SM_CLIENT_XSMP (egg_sm_client_xsmp_get_type ())
+#define EGG_SM_CLIENT_XSMP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT_XSMP, EggSMClientXSMP))
+#define EGG_SM_CLIENT_XSMP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT_XSMP, EggSMClientXSMPClass))
+#define EGG_IS_SM_CLIENT_XSMP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT_XSMP))
+#define EGG_IS_SM_CLIENT_XSMP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT_XSMP))
+#define EGG_SM_CLIENT_XSMP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT_XSMP, EggSMClientXSMPClass))
+
+typedef struct _EggSMClientXSMP EggSMClientXSMP;
+typedef struct _EggSMClientXSMPClass EggSMClientXSMPClass;
+
+/* These mostly correspond to the similarly-named states in section
+ * 9.1 of the XSMP spec. Some of the states there aren't represented
+ * here, because we don't need them. SHUTDOWN_CANCELLED is slightly
+ * different from the spec; we use it when the client is IDLE after a
+ * ShutdownCancelled message, but the application is still interacting
+ * and doesn't know the shutdown has been cancelled yet.
+ */
+typedef enum
+{
+ XSMP_STATE_IDLE,
+ XSMP_STATE_SAVE_YOURSELF,
+ XSMP_STATE_INTERACT_REQUEST,
+ XSMP_STATE_INTERACT,
+ XSMP_STATE_SAVE_YOURSELF_DONE,
+ XSMP_STATE_SHUTDOWN_CANCELLED,
+ XSMP_STATE_CONNECTION_CLOSED
+} EggSMClientXSMPState;
+
+static const char *state_names[] = {
+ "idle",
+ "save-yourself",
+ "interact-request",
+ "interact",
+ "save-yourself-done",
+ "shutdown-cancelled",
+ "connection-closed"
+};
+
+#define EGG_SM_CLIENT_XSMP_STATE(xsmp) (state_names[(xsmp)->state])
+
+struct _EggSMClientXSMP
+{
+ EggSMClient parent;
+
+ SmcConn connection;
+ char *client_id;
+
+ EggSMClientXSMPState state;
+ char **restart_command;
+ gboolean set_restart_command;
+ int restart_style;
+
+ guint idle;
+
+ /* Current SaveYourself state */
+ guint expecting_initial_save_yourself : 1;
+ guint need_save_state : 1;
+ guint need_quit_requested : 1;
+ guint interact_errors : 1;
+ guint shutting_down : 1;
+
+ /* Todo list */
+ guint waiting_to_set_initial_properties : 1;
+ guint waiting_to_emit_quit : 1;
+ guint waiting_to_emit_quit_cancelled : 1;
+ guint waiting_to_save_myself : 1;
+
+};
+
+struct _EggSMClientXSMPClass
+{
+ EggSMClientClass parent_class;
+
+};
+
+static void sm_client_xsmp_startup (EggSMClient *client,
+ const char *client_id);
+static void sm_client_xsmp_set_restart_command (EggSMClient *client,
+ int argc,
+ const char **argv);
+static void sm_client_xsmp_will_quit (EggSMClient *client,
+ gboolean will_quit);
+static gboolean sm_client_xsmp_end_session (EggSMClient *client,
+ EggSMClientEndStyle style,
+ gboolean request_confirmation);
+
+static void xsmp_save_yourself (SmcConn smc_conn,
+ SmPointer client_data,
+ int save_style,
+ Bool shutdown,
+ int interact_style,
+ Bool fast);
+static void xsmp_die (SmcConn smc_conn,
+ SmPointer client_data);
+static void xsmp_save_complete (SmcConn smc_conn,
+ SmPointer client_data);
+static void xsmp_shutdown_cancelled (SmcConn smc_conn,
+ SmPointer client_data);
+static void xsmp_interact (SmcConn smc_conn,
+ SmPointer client_data);
+
+static SmProp *array_prop (const char *name,
+ ...);
+static SmProp *ptrarray_prop (const char *name,
+ GPtrArray *values);
+static SmProp *string_prop (const char *name,
+ const char *value);
+static SmProp *card8_prop (const char *name,
+ unsigned char value);
+
+static void set_properties (EggSMClientXSMP *xsmp, ...);
+static void delete_properties (EggSMClientXSMP *xsmp, ...);
+
+static GPtrArray *generate_command (char **restart_command,
+ const char *client_id,
+ const char *state_file);
+
+static void save_state (EggSMClientXSMP *xsmp);
+static void do_save_yourself (EggSMClientXSMP *xsmp);
+static void update_pending_events (EggSMClientXSMP *xsmp);
+
+static void ice_init (void);
+static gboolean process_ice_messages (IceConn ice_conn);
+static void smc_error_handler (SmcConn smc_conn,
+ Bool swap,
+ int offending_minor_opcode,
+ unsigned long offending_sequence,
+ int error_class,
+ int severity,
+ SmPointer values);
+
+G_DEFINE_TYPE (EggSMClientXSMP, egg_sm_client_xsmp, EGG_TYPE_SM_CLIENT)
+
+static void
+egg_sm_client_xsmp_init (EggSMClientXSMP *xsmp)
+{
+ xsmp->state = XSMP_STATE_CONNECTION_CLOSED;
+ xsmp->connection = NULL;
+ xsmp->restart_style = SmRestartIfRunning;
+}
+
+static void
+egg_sm_client_xsmp_class_init (EggSMClientXSMPClass *klass)
+{
+ EggSMClientClass *sm_client_class = EGG_SM_CLIENT_CLASS (klass);
+
+ sm_client_class->startup = sm_client_xsmp_startup;
+ sm_client_class->set_restart_command = sm_client_xsmp_set_restart_command;
+ sm_client_class->will_quit = sm_client_xsmp_will_quit;
+ sm_client_class->end_session = sm_client_xsmp_end_session;
+}
+
+EggSMClient *
+egg_sm_client_xsmp_new (void)
+{
+ if (!g_getenv ("SESSION_MANAGER"))
+ return NULL;
+
+ return g_object_new (EGG_TYPE_SM_CLIENT_XSMP, NULL);
+}
+
+static gboolean
+sm_client_xsmp_set_initial_properties (gpointer user_data)
+{
+ EggSMClientXSMP *xsmp = user_data;
+ EggDesktopFile *desktop_file;
+ GPtrArray *clone, *restart;
+ char pid_str[64];
+
+ if (xsmp->idle)
+ {
+ g_source_remove (xsmp->idle);
+ xsmp->idle = 0;
+ }
+ xsmp->waiting_to_set_initial_properties = FALSE;
+
+ if (egg_sm_client_get_mode () == EGG_SM_CLIENT_MODE_NO_RESTART)
+ xsmp->restart_style = SmRestartNever;
+
+ /* Parse info out of desktop file */
+ desktop_file = egg_get_desktop_file ();
+ if (desktop_file)
+ {
+ GError *err = NULL;
+ char *cmdline, **argv;
+ int argc;
+
+ if (xsmp->restart_style == SmRestartIfRunning)
+ {
+ if (egg_desktop_file_get_boolean (desktop_file,
+ "X-MATE-AutoRestart", NULL))
+ xsmp->restart_style = SmRestartImmediately;
+ }
+
+ if (!xsmp->set_restart_command)
+ {
+ cmdline = egg_desktop_file_parse_exec (desktop_file, NULL, &err);
+ if (cmdline && g_shell_parse_argv (cmdline, &argc, &argv, &err))
+ {
+ egg_sm_client_set_restart_command (EGG_SM_CLIENT (xsmp),
+ argc, (const char **)argv);
+ g_strfreev (argv);
+ }
+ else
+ {
+ g_warning ("Could not parse Exec line in desktop file: %s",
+ err->message);
+ g_error_free (err);
+ }
+ g_free (cmdline);
+ }
+ }
+
+ if (!xsmp->set_restart_command)
+ xsmp->restart_command = g_strsplit (g_get_prgname (), " ", -1);
+
+ clone = generate_command (xsmp->restart_command, NULL, NULL);
+ restart = generate_command (xsmp->restart_command, xsmp->client_id, NULL);
+
+ g_debug ("Setting initial properties");
+
+ /* Program, CloneCommand, RestartCommand, and UserID are required.
+ * ProcessID isn't required, but the SM may be able to do something
+ * useful with it.
+ */
+ g_snprintf (pid_str, sizeof (pid_str), "%lu", (gulong) getpid ());
+ set_properties (xsmp,
+ string_prop (SmProgram, g_get_prgname ()),
+ ptrarray_prop (SmCloneCommand, clone),
+ ptrarray_prop (SmRestartCommand, restart),
+ string_prop (SmUserID, g_get_user_name ()),
+ string_prop (SmProcessID, pid_str),
+ card8_prop (SmRestartStyleHint, xsmp->restart_style),
+ NULL);
+ g_ptr_array_free (clone, TRUE);
+ g_ptr_array_free (restart, TRUE);
+
+ if (desktop_file)
+ {
+ set_properties (xsmp,
+ string_prop ("_GSM_DesktopFile", egg_desktop_file_get_source (desktop_file)),
+ NULL);
+ }
+
+ update_pending_events (xsmp);
+ return FALSE;
+}
+
+/* This gets called from two different places: xsmp_die() (when the
+ * server asks us to disconnect) and process_ice_messages() (when the
+ * server disconnects unexpectedly).
+ */
+static void
+sm_client_xsmp_disconnect (EggSMClientXSMP *xsmp)
+{
+ SmcConn connection;
+
+ if (!xsmp->connection)
+ return;
+
+ g_debug ("Disconnecting");
+
+ connection = xsmp->connection;
+ xsmp->connection = NULL;
+ SmcCloseConnection (connection, 0, NULL);
+ xsmp->state = XSMP_STATE_CONNECTION_CLOSED;
+
+ xsmp->waiting_to_save_myself = FALSE;
+ update_pending_events (xsmp);
+}
+
+static void
+sm_client_xsmp_startup (EggSMClient *client,
+ const char *client_id)
+{
+ EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client;
+ SmcCallbacks callbacks;
+ char *ret_client_id;
+ char error_string_ret[256];
+
+ xsmp->client_id = g_strdup (client_id);
+
+ ice_init ();
+ SmcSetErrorHandler (smc_error_handler);
+
+ callbacks.save_yourself.callback = xsmp_save_yourself;
+ callbacks.die.callback = xsmp_die;
+ callbacks.save_complete.callback = xsmp_save_complete;
+ callbacks.shutdown_cancelled.callback = xsmp_shutdown_cancelled;
+
+ callbacks.save_yourself.client_data = xsmp;
+ callbacks.die.client_data = xsmp;
+ callbacks.save_complete.client_data = xsmp;
+ callbacks.shutdown_cancelled.client_data = xsmp;
+
+ client_id = NULL;
+ error_string_ret[0] = '\0';
+ xsmp->connection =
+ SmcOpenConnection (NULL, xsmp, SmProtoMajor, SmProtoMinor,
+ SmcSaveYourselfProcMask | SmcDieProcMask |
+ SmcSaveCompleteProcMask |
+ SmcShutdownCancelledProcMask,
+ &callbacks,
+ xsmp->client_id, &ret_client_id,
+ sizeof (error_string_ret), error_string_ret);
+
+ if (!xsmp->connection)
+ {
+ g_warning ("Failed to connect to the session manager: %s\n",
+ error_string_ret[0] ?
+ error_string_ret : "no error message given");
+ xsmp->state = XSMP_STATE_CONNECTION_CLOSED;
+ return;
+ }
+
+ /* We expect a pointless initial SaveYourself if either (a) we
+ * didn't have an initial client ID, or (b) we DID have an initial
+ * client ID, but the server rejected it and gave us a new one.
+ */
+ if (!xsmp->client_id ||
+ (ret_client_id && strcmp (xsmp->client_id, ret_client_id) != 0))
+ xsmp->expecting_initial_save_yourself = TRUE;
+
+ if (ret_client_id)
+ {
+ g_free (xsmp->client_id);
+ xsmp->client_id = g_strdup (ret_client_id);
+ free (ret_client_id);
+
+ gdk_threads_enter ();
+ gdk_set_sm_client_id (xsmp->client_id);
+ gdk_threads_leave ();
+
+ g_debug ("Got client ID \"%s\"", xsmp->client_id);
+ }
+
+ xsmp->state = XSMP_STATE_IDLE;
+
+ /* Do not set the initial properties until we reach the main loop,
+ * so that the application has a chance to call
+ * egg_set_desktop_file(). (This may also help the session manager
+ * have a better idea of when the application is fully up and
+ * running.)
+ */
+ xsmp->waiting_to_set_initial_properties = TRUE;
+ xsmp->idle = g_idle_add (sm_client_xsmp_set_initial_properties, client);
+}
+
+static void
+sm_client_xsmp_set_restart_command (EggSMClient *client,
+ int argc,
+ const char **argv)
+{
+ EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client;
+ int i;
+
+ g_strfreev (xsmp->restart_command);
+
+ xsmp->restart_command = g_new (char *, argc + 1);
+ for (i = 0; i < argc; i++)
+ xsmp->restart_command[i] = g_strdup (argv[i]);
+ xsmp->restart_command[i] = NULL;
+
+ xsmp->set_restart_command = TRUE;
+}
+
+static void
+sm_client_xsmp_will_quit (EggSMClient *client,
+ gboolean will_quit)
+{
+ EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client;
+
+ if (xsmp->state == XSMP_STATE_CONNECTION_CLOSED)
+ {
+ /* The session manager has already exited! Schedule a quit
+ * signal.
+ */
+ xsmp->waiting_to_emit_quit = TRUE;
+ update_pending_events (xsmp);
+ return;
+ }
+ else if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED)
+ {
+ /* We received a ShutdownCancelled message while the application
+ * was interacting; Schedule a quit_cancelled signal.
+ */
+ xsmp->waiting_to_emit_quit_cancelled = TRUE;
+ update_pending_events (xsmp);
+ return;
+ }
+
+ g_return_if_fail (xsmp->state == XSMP_STATE_INTERACT);
+
+ g_debug ("Sending InteractDone(%s)", will_quit ? "False" : "True");
+ SmcInteractDone (xsmp->connection, !will_quit);
+
+ if (will_quit && xsmp->need_save_state)
+ save_state (xsmp);
+
+ g_debug ("Sending SaveYourselfDone(%s)", will_quit ? "True" : "False");
+ SmcSaveYourselfDone (xsmp->connection, will_quit);
+ xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;
+}
+
+static gboolean
+sm_client_xsmp_end_session (EggSMClient *client,
+ EggSMClientEndStyle style,
+ gboolean request_confirmation)
+{
+ EggSMClientXSMP *xsmp = (EggSMClientXSMP *)client;
+ int save_type;
+
+ /* To end the session via XSMP, we have to send a
+ * SaveYourselfRequest. We aren't allowed to do that if anything
+ * else is going on, but we don't want to expose this fact to the
+ * application. So we do our best to patch things up here...
+ *
+ * In the worst case, this method might block for some length of
+ * time in process_ice_messages, but the only time that code path is
+ * honestly likely to get hit is if the application tries to end the
+ * session as the very first thing it does, in which case it
+ * probably won't actually block anyway. It's not worth gunking up
+ * the API to try to deal nicely with the other 0.01% of cases where
+ * this happens.
+ */
+
+ while (xsmp->state != XSMP_STATE_IDLE ||
+ xsmp->expecting_initial_save_yourself)
+ {
+ /* If we're already shutting down, we don't need to do anything. */
+ if (xsmp->shutting_down)
+ return TRUE;
+
+ switch (xsmp->state)
+ {
+ case XSMP_STATE_CONNECTION_CLOSED:
+ return FALSE;
+
+ case XSMP_STATE_SAVE_YOURSELF:
+ /* Trying to log out from the save_state callback? Whatever.
+ * Abort the save_state.
+ */
+ SmcSaveYourselfDone (xsmp->connection, FALSE);
+ xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;
+ break;
+
+ case XSMP_STATE_INTERACT_REQUEST:
+ case XSMP_STATE_INTERACT:
+ case XSMP_STATE_SHUTDOWN_CANCELLED:
+ /* Already in a shutdown-related state, just ignore
+ * the new shutdown request...
+ */
+ return TRUE;
+
+ case XSMP_STATE_IDLE:
+ if (xsmp->waiting_to_set_initial_properties)
+ sm_client_xsmp_set_initial_properties (xsmp);
+
+ if (!xsmp->expecting_initial_save_yourself)
+ break;
+ /* else fall through */
+
+ case XSMP_STATE_SAVE_YOURSELF_DONE:
+ /* We need to wait for some response from the server.*/
+ process_ice_messages (SmcGetIceConnection (xsmp->connection));
+ break;
+
+ default:
+ /* Hm... shouldn't happen */
+ return FALSE;
+ }
+ }
+
+ /* xfce4-session will do the wrong thing if we pass SmSaveGlobal and
+ * the user chooses to save the session. But mate-session will do
+ * the wrong thing if we pass SmSaveBoth and the user chooses NOT to
+ * save the session... Sigh.
+ */
+ if (!strcmp (SmcVendor (xsmp->connection), "xfce4-session"))
+ save_type = SmSaveBoth;
+ else
+ save_type = SmSaveGlobal;
+
+ g_debug ("Sending SaveYourselfRequest(SmSaveGlobal, Shutdown, SmInteractStyleAny, %sFast)", request_confirmation ? "!" : "");
+ SmcRequestSaveYourself (xsmp->connection,
+ save_type,
+ True, /* shutdown */
+ SmInteractStyleAny,
+ !request_confirmation, /* fast */
+ True /* global */);
+ return TRUE;
+}
+
+static gboolean
+idle_do_pending_events (gpointer data)
+{
+ EggSMClientXSMP *xsmp = data;
+ EggSMClient *client = data;
+
+ gdk_threads_enter ();
+
+ xsmp->idle = 0;
+
+ if (xsmp->waiting_to_emit_quit)
+ {
+ xsmp->waiting_to_emit_quit = FALSE;
+ egg_sm_client_quit (client);
+ goto out;
+ }
+
+ if (xsmp->waiting_to_emit_quit_cancelled)
+ {
+ xsmp->waiting_to_emit_quit_cancelled = FALSE;
+ egg_sm_client_quit_cancelled (client);
+ xsmp->state = XSMP_STATE_IDLE;
+ }
+
+ if (xsmp->waiting_to_save_myself)
+ {
+ xsmp->waiting_to_save_myself = FALSE;
+ do_save_yourself (xsmp);
+ }
+
+ out:
+ gdk_threads_leave ();
+ return FALSE;
+}
+
+static void
+update_pending_events (EggSMClientXSMP *xsmp)
+{
+ gboolean want_idle =
+ xsmp->waiting_to_emit_quit ||
+ xsmp->waiting_to_emit_quit_cancelled ||
+ xsmp->waiting_to_save_myself;
+
+ if (want_idle)
+ {
+ if (xsmp->idle == 0)
+ xsmp->idle = g_idle_add (idle_do_pending_events, xsmp);
+ }
+ else
+ {
+ if (xsmp->idle != 0)
+ g_source_remove (xsmp->idle);
+ xsmp->idle = 0;
+ }
+}
+
+static void
+fix_broken_state (EggSMClientXSMP *xsmp, const char *message,
+ gboolean send_interact_done,
+ gboolean send_save_yourself_done)
+{
+ g_warning ("Received XSMP %s message in state %s: client or server error",
+ message, EGG_SM_CLIENT_XSMP_STATE (xsmp));
+
+ /* Forget any pending SaveYourself plans we had */
+ xsmp->waiting_to_save_myself = FALSE;
+ update_pending_events (xsmp);
+
+ if (send_interact_done)
+ SmcInteractDone (xsmp->connection, False);
+ if (send_save_yourself_done)
+ SmcSaveYourselfDone (xsmp->connection, True);
+
+ xsmp->state = send_save_yourself_done ? XSMP_STATE_SAVE_YOURSELF_DONE : XSMP_STATE_IDLE;
+}
+
+/* SM callbacks */
+
+static void
+xsmp_save_yourself (SmcConn smc_conn,
+ SmPointer client_data,
+ int save_type,
+ Bool shutdown,
+ int interact_style,
+ Bool fast)
+{
+ EggSMClientXSMP *xsmp = client_data;
+ gboolean wants_quit_requested;
+
+ g_debug ("Received SaveYourself(%s, %s, %s, %s) in state %s",
+ save_type == SmSaveLocal ? "SmSaveLocal" :
+ save_type == SmSaveGlobal ? "SmSaveGlobal" : "SmSaveBoth",
+ shutdown ? "Shutdown" : "!Shutdown",
+ interact_style == SmInteractStyleAny ? "SmInteractStyleAny" :
+ interact_style == SmInteractStyleErrors ? "SmInteractStyleErrors" :
+ "SmInteractStyleNone", fast ? "Fast" : "!Fast",
+ EGG_SM_CLIENT_XSMP_STATE (xsmp));
+
+ if (xsmp->state != XSMP_STATE_IDLE &&
+ xsmp->state != XSMP_STATE_SHUTDOWN_CANCELLED)
+ {
+ fix_broken_state (xsmp, "SaveYourself", FALSE, TRUE);
+ return;
+ }
+
+ if (xsmp->waiting_to_set_initial_properties)
+ sm_client_xsmp_set_initial_properties (xsmp);
+
+ /* If this is the initial SaveYourself, ignore it; we've already set
+ * properties and there's no reason to actually save state too.
+ */
+ if (xsmp->expecting_initial_save_yourself)
+ {
+ xsmp->expecting_initial_save_yourself = FALSE;
+
+ if (save_type == SmSaveLocal &&
+ interact_style == SmInteractStyleNone &&
+ !shutdown && !fast)
+ {
+ g_debug ("Sending SaveYourselfDone(True) for initial SaveYourself");
+ SmcSaveYourselfDone (xsmp->connection, True);
+ /* As explained in the comment at the end of
+ * do_save_yourself(), SAVE_YOURSELF_DONE is the correct
+ * state here, not IDLE.
+ */
+ xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;
+ return;
+ }
+ else
+ g_warning ("First SaveYourself was not the expected one!");
+ }
+
+ /* Even ignoring the "fast" flag completely, there are still 18
+ * different combinations of save_type, shutdown and interact_style.
+ * We interpret them as follows:
+ *
+ * Type Shutdown Interact Interpretation
+ * G F A/E/N do nothing (1)
+ * G T N do nothing (1)*
+ * G T A/E quit_requested (2)
+ * L/B F A/E/N save_state (3)
+ * L/B T N save_state (3)*
+ * L/B T A/E quit_requested, then save_state (4)
+ *
+ * 1. Do nothing, because the SM asked us to do something
+ * uninteresting (save open files, but then don't quit
+ * afterward) or rude (save open files without asking the user
+ * for confirmation).
+ *
+ * 2. Request interaction and then emit ::quit_requested. This
+ * perhaps isn't quite correct for the SmInteractStyleErrors
+ * case, but we don't care.
+ *
+ * 3. Emit ::save_state. The SmSaveBoth SaveYourselfs in these
+ * rows essentially get demoted to SmSaveLocal, because their
+ * Global halves correspond to "do nothing".
+ *
+ * 4. Request interaction, emit ::quit_requested, and then emit
+ * ::save_state after interacting. This is the SmSaveBoth
+ * equivalent of #2, but we also promote SmSaveLocal shutdown
+ * SaveYourselfs to SmSaveBoth here, because we want to give
+ * the user a chance to save open files before quitting.
+ *
+ * (* It would be nice if we could do something useful when the
+ * session manager sends a SaveYourself with shutdown True and
+ * SmInteractStyleNone. But we can't, so we just pretend it didn't
+ * even tell us it was shutting down. The docs for ::quit mention
+ * that it might not always be preceded by ::quit_requested.)
+ */
+
+ /* As an optimization, we don't actually request interaction and
+ * emit ::quit_requested if the application isn't listening to the
+ * signal.
+ */
+ wants_quit_requested = g_signal_has_handler_pending (xsmp, g_signal_lookup ("quit_requested", EGG_TYPE_SM_CLIENT), 0, FALSE);
+
+ xsmp->need_save_state = (save_type != SmSaveGlobal);
+ xsmp->need_quit_requested = (shutdown && wants_quit_requested &&
+ interact_style != SmInteractStyleNone);
+ xsmp->interact_errors = (interact_style == SmInteractStyleErrors);
+
+ xsmp->shutting_down = shutdown;
+
+ do_save_yourself (xsmp);
+}
+
+static void
+do_save_yourself (EggSMClientXSMP *xsmp)
+{
+ if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED)
+ {
+ /* The SM cancelled a previous SaveYourself, but we haven't yet
+ * had a chance to tell the application, so we can't start
+ * processing this SaveYourself yet.
+ */
+ xsmp->waiting_to_save_myself = TRUE;
+ update_pending_events (xsmp);
+ return;
+ }
+
+ if (xsmp->need_quit_requested)
+ {
+ xsmp->state = XSMP_STATE_INTERACT_REQUEST;
+
+ g_debug ("Sending InteractRequest(%s)",
+ xsmp->interact_errors ? "Error" : "Normal");
+ SmcInteractRequest (xsmp->connection,
+ xsmp->interact_errors ? SmDialogError : SmDialogNormal,
+ xsmp_interact,
+ xsmp);
+ return;
+ }
+
+ if (xsmp->need_save_state)
+ {
+ save_state (xsmp);
+
+ /* Though unlikely, the client could have been disconnected
+ * while the application was saving its state.
+ */
+ if (!xsmp->connection)
+ return;
+ }
+
+ g_debug ("Sending SaveYourselfDone(True)");
+ SmcSaveYourselfDone (xsmp->connection, True);
+
+ /* The client state diagram in the XSMP spec says that after a
+ * non-shutdown SaveYourself, we go directly back to "idle". But
+ * everything else in both the XSMP spec and the libSM docs
+ * disagrees.
+ */
+ xsmp->state = XSMP_STATE_SAVE_YOURSELF_DONE;
+}
+
+static void
+save_state (EggSMClientXSMP *xsmp)
+{
+ GKeyFile *state_file;
+ char *state_file_path, *data;
+ EggDesktopFile *desktop_file;
+ GPtrArray *restart;
+ int offset, fd;
+
+ /* We set xsmp->state before emitting save_state, but our caller is
+ * responsible for setting it back afterward.
+ */
+ xsmp->state = XSMP_STATE_SAVE_YOURSELF;
+
+ state_file = egg_sm_client_save_state ((EggSMClient *)xsmp);
+ if (!state_file)
+ {
+ restart = generate_command (xsmp->restart_command, xsmp->client_id, NULL);
+ set_properties (xsmp,
+ ptrarray_prop (SmRestartCommand, restart),
+ NULL);
+ g_ptr_array_free (restart, TRUE);
+ delete_properties (xsmp, SmDiscardCommand, NULL);
+ return;
+ }
+
+ desktop_file = egg_get_desktop_file ();
+ if (desktop_file)
+ {
+ GKeyFile *merged_file;
+ char *desktop_file_path;
+
+ merged_file = g_key_file_new ();
+ desktop_file_path =
+ g_filename_from_uri (egg_desktop_file_get_source (desktop_file),
+ NULL, NULL);
+ if (desktop_file_path &&
+ g_key_file_load_from_file (merged_file, desktop_file_path,
+ G_KEY_FILE_KEEP_COMMENTS |
+ G_KEY_FILE_KEEP_TRANSLATIONS, NULL))
+ {
+ guint g, k, i;
+ char **groups, **keys, *value, *exec;
+
+ groups = g_key_file_get_groups (state_file, NULL);
+ for (g = 0; groups[g]; g++)
+ {
+ keys = g_key_file_get_keys (state_file, groups[g], NULL, NULL);
+ for (k = 0; keys[k]; k++)
+ {
+ value = g_key_file_get_value (state_file, groups[g],
+ keys[k], NULL);
+ if (value)
+ {
+ g_key_file_set_value (merged_file, groups[g],
+ keys[k], value);
+ g_free (value);
+ }
+ }
+ g_strfreev (keys);
+ }
+ g_strfreev (groups);
+
+ g_key_file_free (state_file);
+ state_file = merged_file;
+
+ /* Update Exec key using "--sm-client-state-file %k" */
+ restart = generate_command (xsmp->restart_command,
+ NULL, "%k");
+ for (i = 0; i < restart->len; i++)
+ restart->pdata[i] = g_shell_quote (restart->pdata[i]);
+ g_ptr_array_add (restart, NULL);
+ exec = g_strjoinv (" ", (char **)restart->pdata);
+ g_strfreev ((char **)restart->pdata);
+ g_ptr_array_free (restart, FALSE);
+
+ g_key_file_set_string (state_file, EGG_DESKTOP_FILE_GROUP,
+ EGG_DESKTOP_FILE_KEY_EXEC,
+ exec);
+ g_free (exec);
+ }
+ else
+ desktop_file = NULL;
+
+ g_free (desktop_file_path);
+ }
+
+ /* Now write state_file to disk. (We can't use mktemp(), because
+ * that requires the filename to end with "XXXXXX", and we want
+ * it to end with ".desktop".)
+ */
+
+ data = g_key_file_to_data (state_file, NULL, NULL);
+ g_key_file_free (state_file);
+
+ offset = 0;
+ while (1)
+ {
+ state_file_path = g_strdup_printf ("%s%csession-state%c%s-%ld.%s",
+ g_get_user_config_dir (),
+ G_DIR_SEPARATOR, G_DIR_SEPARATOR,
+ g_get_prgname (),
+ (long)time (NULL) + offset,
+ desktop_file ? "desktop" : "state");
+
+ fd = open (state_file_path, O_WRONLY | O_CREAT | O_EXCL, 0644);
+ if (fd == -1)
+ {
+ if (errno == EEXIST)
+ {
+ offset++;
+ g_free (state_file_path);
+ continue;
+ }
+ else if (errno == ENOTDIR || errno == ENOENT)
+ {
+ char *sep = strrchr (state_file_path, G_DIR_SEPARATOR);
+
+ *sep = '\0';
+ if (g_mkdir_with_parents (state_file_path, 0755) != 0)
+ {
+ g_warning ("Could not create directory '%s'",
+ state_file_path);
+ g_free (state_file_path);
+ state_file_path = NULL;
+ break;
+ }
+
+ continue;
+ }
+
+ g_warning ("Could not create file '%s': %s",
+ state_file_path, g_strerror (errno));
+ g_free (state_file_path);
+ state_file_path = NULL;
+ break;
+ }
+
+ close (fd);
+ g_file_set_contents (state_file_path, data, -1, NULL);
+ break;
+ }
+ g_free (data);
+
+ restart = generate_command (xsmp->restart_command, xsmp->client_id,
+ state_file_path);
+ set_properties (xsmp,
+ ptrarray_prop (SmRestartCommand, restart),
+ NULL);
+ g_ptr_array_free (restart, TRUE);
+
+ if (state_file_path)
+ {
+ set_properties (xsmp,
+ array_prop (SmDiscardCommand,
+ "/bin/rm", "-rf", state_file_path,
+ NULL),
+ NULL);
+ g_free (state_file_path);
+ }
+}
+
+static void
+xsmp_interact (SmcConn smc_conn,
+ SmPointer client_data)
+{
+ EggSMClientXSMP *xsmp = client_data;
+ EggSMClient *client = client_data;
+
+ g_debug ("Received Interact message in state %s",
+ EGG_SM_CLIENT_XSMP_STATE (xsmp));
+
+ if (xsmp->state != XSMP_STATE_INTERACT_REQUEST)
+ {
+ fix_broken_state (xsmp, "Interact", TRUE, TRUE);
+ return;
+ }
+
+ xsmp->state = XSMP_STATE_INTERACT;
+ egg_sm_client_quit_requested (client);
+}
+
+static void
+xsmp_die (SmcConn smc_conn,
+ SmPointer client_data)
+{
+ EggSMClientXSMP *xsmp = client_data;
+ EggSMClient *client = client_data;
+
+ g_debug ("Received Die message in state %s",
+ EGG_SM_CLIENT_XSMP_STATE (xsmp));
+
+ sm_client_xsmp_disconnect (xsmp);
+ egg_sm_client_quit (client);
+}
+
+static void
+xsmp_save_complete (SmcConn smc_conn,
+ SmPointer client_data)
+{
+ EggSMClientXSMP *xsmp = client_data;
+
+ g_debug ("Received SaveComplete message in state %s",
+ EGG_SM_CLIENT_XSMP_STATE (xsmp));
+
+ if (xsmp->state == XSMP_STATE_SAVE_YOURSELF_DONE)
+ xsmp->state = XSMP_STATE_IDLE;
+ else
+ fix_broken_state (xsmp, "SaveComplete", FALSE, FALSE);
+}
+
+static void
+xsmp_shutdown_cancelled (SmcConn smc_conn,
+ SmPointer client_data)
+{
+ EggSMClientXSMP *xsmp = client_data;
+ EggSMClient *client = client_data;
+
+ g_debug ("Received ShutdownCancelled message in state %s",
+ EGG_SM_CLIENT_XSMP_STATE (xsmp));
+
+ xsmp->shutting_down = FALSE;
+
+ if (xsmp->state == XSMP_STATE_SAVE_YOURSELF_DONE)
+ {
+ /* We've finished interacting and now the SM has agreed to
+ * cancel the shutdown.
+ */
+ xsmp->state = XSMP_STATE_IDLE;
+ egg_sm_client_quit_cancelled (client);
+ }
+ else if (xsmp->state == XSMP_STATE_SHUTDOWN_CANCELLED)
+ {
+ /* Hm... ok, so we got a shutdown SaveYourself, which got
+ * cancelled, but the application was still interacting, so we
+ * didn't tell it yet, and then *another* SaveYourself arrived,
+ * which we must still be waiting to tell the app about, except
+ * that now that SaveYourself has been cancelled too! Dizzy yet?
+ */
+ xsmp->waiting_to_save_myself = FALSE;
+ update_pending_events (xsmp);
+ }
+ else
+ {
+ g_debug ("Sending SaveYourselfDone(False)");
+ SmcSaveYourselfDone (xsmp->connection, False);
+
+ if (xsmp->state == XSMP_STATE_INTERACT)
+ {
+ /* The application is currently interacting, so we can't
+ * tell it about the cancellation yet; we will wait until
+ * after it calls egg_sm_client_will_quit().
+ */
+ xsmp->state = XSMP_STATE_SHUTDOWN_CANCELLED;
+ }
+ else
+ {
+ /* The shutdown was cancelled before the application got a
+ * chance to interact.
+ */
+ xsmp->state = XSMP_STATE_IDLE;
+ }
+ }
+}
+
+/* Utilities */
+
+/* Create a restart/clone/Exec command based on @restart_command.
+ * If @client_id is non-%NULL, add "--sm-client-id @client_id".
+ * If @state_file is non-%NULL, add "--sm-client-state-file @state_file".
+ *
+ * None of the input strings are g_strdup()ed; the caller must keep
+ * them around until it is done with the returned GPtrArray, and must
+ * then free the array, but not its contents.
+ */
+static GPtrArray *
+generate_command (char **restart_command, const char *client_id,
+ const char *state_file)
+{
+ GPtrArray *cmd;
+ int i;
+
+ cmd = g_ptr_array_new ();
+ g_ptr_array_add (cmd, restart_command[0]);
+
+ if (client_id)
+ {
+ g_ptr_array_add (cmd, "--sm-client-id");
+ g_ptr_array_add (cmd, (char *)client_id);
+ }
+
+ if (state_file)
+ {
+ g_ptr_array_add (cmd, "--sm-client-state-file");
+ g_ptr_array_add (cmd, (char *)state_file);
+ }
+
+ for (i = 1; restart_command[i]; i++)
+ g_ptr_array_add (cmd, restart_command[i]);
+
+ return cmd;
+}
+
+/* Takes a NULL-terminated list of SmProp * values, created by
+ * array_prop, ptrarray_prop, string_prop, card8_prop, sets them, and
+ * frees them.
+ */
+static void
+set_properties (EggSMClientXSMP *xsmp, ...)
+{
+ GPtrArray *props;
+ SmProp *prop;
+ va_list ap;
+ guint i;
+
+ props = g_ptr_array_new ();
+
+ va_start (ap, xsmp);
+ while ((prop = va_arg (ap, SmProp *)))
+ g_ptr_array_add (props, prop);
+ va_end (ap);
+
+ if (xsmp->connection)
+ {
+ SmcSetProperties (xsmp->connection, props->len,
+ (SmProp **)props->pdata);
+ }
+
+ for (i = 0; i < props->len; i++)
+ {
+ prop = props->pdata[i];
+ g_free (prop->vals);
+ g_free (prop);
+ }
+ g_ptr_array_free (props, TRUE);
+}
+
+/* Takes a NULL-terminated list of property names and deletes them. */
+static void
+delete_properties (EggSMClientXSMP *xsmp, ...)
+{
+ GPtrArray *props;
+ char *prop;
+ va_list ap;
+
+ if (!xsmp->connection)
+ return;
+
+ props = g_ptr_array_new ();
+
+ va_start (ap, xsmp);
+ while ((prop = va_arg (ap, char *)))
+ g_ptr_array_add (props, prop);
+ va_end (ap);
+
+ SmcDeleteProperties (xsmp->connection, props->len,
+ (char **)props->pdata);
+
+ g_ptr_array_free (props, TRUE);
+}
+
+/* Takes an array of strings and creates a LISTofARRAY8 property. The
+ * strings are neither dupped nor freed; they need to remain valid
+ * until you're done with the SmProp.
+ */
+static SmProp *
+array_prop (const char *name, ...)
+{
+ SmProp *prop;
+ SmPropValue pv;
+ GArray *vals;
+ char *value;
+ va_list ap;
+
+ prop = g_new (SmProp, 1);
+ prop->name = (char *)name;
+ prop->type = SmLISTofARRAY8;
+
+ vals = g_array_new (FALSE, FALSE, sizeof (SmPropValue));
+
+ va_start (ap, name);
+ while ((value = va_arg (ap, char *)))
+ {
+ pv.length = strlen (value);
+ pv.value = value;
+ g_array_append_val (vals, pv);
+ }
+
+ prop->num_vals = vals->len;
+ prop->vals = (SmPropValue *)vals->data;
+
+ g_array_free (vals, FALSE);
+
+ return prop;
+}
+
+/* Takes a GPtrArray of strings and creates a LISTofARRAY8 property.
+ * The array contents are neither dupped nor freed; they need to
+ * remain valid until you're done with the SmProp.
+ */
+static SmProp *
+ptrarray_prop (const char *name, GPtrArray *values)
+{
+ SmProp *prop;
+ SmPropValue pv;
+ GArray *vals;
+ guint i;
+
+ prop = g_new (SmProp, 1);
+ prop->name = (char *)name;
+ prop->type = SmLISTofARRAY8;
+
+ vals = g_array_new (FALSE, FALSE, sizeof (SmPropValue));
+
+ for (i = 0; i < values->len; i++)
+ {
+ pv.length = strlen (values->pdata[i]);
+ pv.value = values->pdata[i];
+ g_array_append_val (vals, pv);
+ }
+
+ prop->num_vals = vals->len;
+ prop->vals = (SmPropValue *)vals->data;
+
+ g_array_free (vals, FALSE);
+
+ return prop;
+}
+
+/* Takes a string and creates an ARRAY8 property. The string is
+ * neither dupped nor freed; it needs to remain valid until you're
+ * done with the SmProp.
+ */
+static SmProp *
+string_prop (const char *name, const char *value)
+{
+ SmProp *prop;
+
+ prop = g_new (SmProp, 1);
+ prop->name = (char *)name;
+ prop->type = SmARRAY8;
+
+ prop->num_vals = 1;
+ prop->vals = g_new (SmPropValue, 1);
+
+ prop->vals[0].length = strlen (value);
+ prop->vals[0].value = (char *)value;
+
+ return prop;
+}
+
+/* Takes a char and creates a CARD8 property. */
+static SmProp *
+card8_prop (const char *name, unsigned char value)
+{
+ SmProp *prop;
+ char *card8val;
+
+ /* To avoid having to allocate and free prop->vals[0], we cheat and
+ * make vals a 2-element-long array and then use the second element
+ * to store value.
+ */
+
+ prop = g_new (SmProp, 1);
+ prop->name = (char *)name;
+ prop->type = SmCARD8;
+
+ prop->num_vals = 1;
+ prop->vals = g_new (SmPropValue, 2);
+ card8val = (char *)(&prop->vals[1]);
+ card8val[0] = value;
+
+ prop->vals[0].length = 1;
+ prop->vals[0].value = card8val;
+
+ return prop;
+}
+
+/* ICE code. This makes no effort to play nice with anyone else trying
+ * to use libICE. Fortunately, no one uses libICE for anything other
+ * than SM. (DCOP uses ICE, but it has its own private copy of
+ * libICE.)
+ *
+ * When this moves to gtk, it will need to be cleverer, to avoid
+ * tripping over old apps that use MateClient or that use libSM
+ * directly.
+ */
+
+#include <X11/ICE/ICElib.h>
+#include <fcntl.h>
+
+static void ice_error_handler (IceConn ice_conn,
+ Bool swap,
+ int offending_minor_opcode,
+ unsigned long offending_sequence,
+ int error_class,
+ int severity,
+ IcePointer values);
+static void ice_io_error_handler (IceConn ice_conn);
+static void ice_connection_watch (IceConn ice_conn,
+ IcePointer client_data,
+ Bool opening,
+ IcePointer *watch_data);
+
+static void
+ice_init (void)
+{
+ IceSetIOErrorHandler (ice_io_error_handler);
+ IceSetErrorHandler (ice_error_handler);
+ IceAddConnectionWatch (ice_connection_watch, NULL);
+}
+
+static gboolean
+process_ice_messages (IceConn ice_conn)
+{
+ IceProcessMessagesStatus status;
+
+ gdk_threads_enter ();
+ status = IceProcessMessages (ice_conn, NULL, NULL);
+ gdk_threads_leave ();
+
+ switch (status)
+ {
+ case IceProcessMessagesSuccess:
+ return TRUE;
+
+ case IceProcessMessagesIOError:
+ sm_client_xsmp_disconnect (IceGetConnectionContext (ice_conn));
+ return FALSE;
+
+ case IceProcessMessagesConnectionClosed:
+ return FALSE;
+
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static gboolean
+ice_iochannel_watch (GIOChannel *channel,
+ GIOCondition condition,
+ gpointer client_data)
+{
+ return process_ice_messages (client_data);
+}
+
+static void
+ice_connection_watch (IceConn ice_conn,
+ IcePointer client_data,
+ Bool opening,
+ IcePointer *watch_data)
+{
+ guint watch_id;
+
+ if (opening)
+ {
+ GIOChannel *channel;
+ int fd = IceConnectionNumber (ice_conn);
+
+ fcntl (fd, F_SETFD, fcntl (fd, F_GETFD, 0) | FD_CLOEXEC);
+ channel = g_io_channel_unix_new (fd);
+ watch_id = g_io_add_watch (channel, G_IO_IN | G_IO_ERR,
+ ice_iochannel_watch, ice_conn);
+ g_io_channel_unref (channel);
+
+ *watch_data = GUINT_TO_POINTER (watch_id);
+ }
+ else
+ {
+ watch_id = GPOINTER_TO_UINT (*watch_data);
+ g_source_remove (watch_id);
+ }
+}
+
+static void
+ice_error_handler (IceConn ice_conn,
+ Bool swap,
+ int offending_minor_opcode,
+ unsigned long offending_sequence,
+ int error_class,
+ int severity,
+ IcePointer values)
+{
+ /* Do nothing */
+}
+
+static void
+ice_io_error_handler (IceConn ice_conn)
+{
+ /* Do nothing */
+}
+
+static void
+smc_error_handler (SmcConn smc_conn,
+ Bool swap,
+ int offending_minor_opcode,
+ unsigned long offending_sequence,
+ int error_class,
+ int severity,
+ SmPointer values)
+{
+ /* Do nothing */
+}
diff --git a/cut-n-paste/smclient/eggsmclient.c b/cut-n-paste/smclient/eggsmclient.c
new file mode 100644
index 00000000..c568e9be
--- /dev/null
+++ b/cut-n-paste/smclient/eggsmclient.c
@@ -0,0 +1,589 @@
+/*
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * 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.
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <glib/gi18n.h>
+
+#include "eggsmclient.h"
+#include "eggsmclient-private.h"
+
+static void egg_sm_client_debug_handler (const char *log_domain,
+ GLogLevelFlags log_level,
+ const char *message,
+ gpointer user_data);
+
+enum {
+ SAVE_STATE,
+ QUIT_REQUESTED,
+ QUIT_CANCELLED,
+ QUIT,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+struct _EggSMClientPrivate {
+ GKeyFile *state_file;
+};
+
+#define EGG_SM_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), EGG_TYPE_SM_CLIENT, EggSMClientPrivate))
+
+G_DEFINE_TYPE (EggSMClient, egg_sm_client, G_TYPE_OBJECT)
+
+static EggSMClient *global_client;
+static EggSMClientMode global_client_mode = EGG_SM_CLIENT_MODE_NORMAL;
+
+static void
+egg_sm_client_init (EggSMClient *client)
+{
+ ;
+}
+
+static void
+egg_sm_client_class_init (EggSMClientClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (EggSMClientPrivate));
+
+ /**
+ * EggSMClient::save_state:
+ * @client: the client
+ * @state_file: a #GKeyFile to save state information into
+ *
+ * Emitted when the session manager has requested that the
+ * application save information about its current state. The
+ * application should save its state into @state_file, and then the
+ * session manager may then restart the application in a future
+ * session and tell it to initialize itself from that state.
+ *
+ * You should not save any data into @state_file's "start group"
+ * (ie, the %NULL group). Instead, applications should save their
+ * data into groups with names that start with the application name,
+ * and libraries that connect to this signal should save their data
+ * into groups with names that start with the library name.
+ *
+ * Alternatively, rather than (or in addition to) using @state_file,
+ * the application can save its state by calling
+ * egg_sm_client_set_restart_command() during the processing of this
+ * signal (eg, to include a list of files to open).
+ **/
+ signals[SAVE_STATE] =
+ g_signal_new ("save_state",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EggSMClientClass, save_state),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE,
+ 1, G_TYPE_POINTER);
+
+ /**
+ * EggSMClient::quit_requested:
+ * @client: the client
+ *
+ * Emitted when the session manager requests that the application
+ * exit (generally because the user is logging out). The application
+ * should decide whether or not it is willing to quit (perhaps after
+ * asking the user what to do with documents that have unsaved
+ * changes) and then call egg_sm_client_will_quit(), passing %TRUE
+ * or %FALSE to give its answer to the session manager. (It does not
+ * need to give an answer before returning from the signal handler;
+ * it can interact with the user asynchronously and then give its
+ * answer later on.) If the application does not connect to this
+ * signal, then #EggSMClient will automatically return %TRUE on its
+ * behalf.
+ *
+ * The application should not save its session state as part of
+ * handling this signal; if the user has requested that the session
+ * be saved when logging out, then ::save_state will be emitted
+ * separately.
+ *
+ * If the application agrees to quit, it should then wait for either
+ * the ::quit_cancelled or ::quit signals to be emitted.
+ **/
+ signals[QUIT_REQUESTED] =
+ g_signal_new ("quit_requested",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EggSMClientClass, quit_requested),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ /**
+ * EggSMClient::quit_cancelled:
+ * @client: the client
+ *
+ * Emitted when the session manager decides to cancel a logout after
+ * the application has already agreed to quit. After receiving this
+ * signal, the application can go back to what it was doing before
+ * receiving the ::quit_requested signal.
+ **/
+ signals[QUIT_CANCELLED] =
+ g_signal_new ("quit_cancelled",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EggSMClientClass, quit_cancelled),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ /**
+ * EggSMClient::quit:
+ * @client: the client
+ *
+ * Emitted when the session manager wants the application to quit
+ * (generally because the user is logging out). The application
+ * should exit as soon as possible after receiving this signal; if
+ * it does not, the session manager may choose to forcibly kill it.
+ *
+ * Normally a GUI application would only be sent a ::quit if it
+ * agreed to quit in response to a ::quit_requested signal. However,
+ * this is not guaranteed; in some situations the session manager
+ * may decide to end the session without giving applications a
+ * chance to object.
+ **/
+ signals[QUIT] =
+ g_signal_new ("quit",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EggSMClientClass, quit),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+}
+
+static gboolean sm_client_disable = FALSE;
+static char *sm_client_state_file = NULL;
+static char *sm_client_id = NULL;
+static char *sm_config_prefix = NULL;
+
+static gboolean
+sm_client_post_parse_func (GOptionContext *context,
+ GOptionGroup *group,
+ gpointer data,
+ GError **error)
+{
+ EggSMClient *client = egg_sm_client_get ();
+
+ if (sm_client_id == NULL)
+ {
+ const gchar *desktop_autostart_id;
+
+ desktop_autostart_id = g_getenv ("DESKTOP_AUTOSTART_ID");
+
+ if (desktop_autostart_id != NULL)
+ sm_client_id = g_strdup (desktop_autostart_id);
+ }
+
+ /* Unset DESKTOP_AUTOSTART_ID in order to avoid child processes to
+ * use the same client id. */
+ g_unsetenv ("DESKTOP_AUTOSTART_ID");
+
+ if (EGG_SM_CLIENT_GET_CLASS (client)->startup)
+ EGG_SM_CLIENT_GET_CLASS (client)->startup (client, sm_client_id);
+ return TRUE;
+}
+
+/**
+ * egg_sm_client_get_option_group:
+ *
+ * Creates a %GOptionGroup containing the session-management-related
+ * options. You should add this group to the application's
+ * %GOptionContext if you want to use #EggSMClient.
+ *
+ * Return value: the %GOptionGroup
+ **/
+GOptionGroup *
+egg_sm_client_get_option_group (void)
+{
+ const GOptionEntry entries[] = {
+ { "sm-client-disable", 0, 0,
+ G_OPTION_ARG_NONE, &sm_client_disable,
+ N_("Disable connection to session manager"), NULL },
+ { "sm-client-state-file", 0, 0,
+ G_OPTION_ARG_FILENAME, &sm_client_state_file,
+ N_("Specify file containing saved configuration"), N_("FILE") },
+ { "sm-client-id", 0, 0,
+ G_OPTION_ARG_STRING, &sm_client_id,
+ N_("Specify session management ID"), N_("ID") },
+ /* MateClient compatibility option */
+ { "sm-disable", 0, G_OPTION_FLAG_HIDDEN,
+ G_OPTION_ARG_NONE, &sm_client_disable,
+ NULL, NULL },
+ /* MateClient compatibility option. This is a dummy option that only
+ * exists so that sessions saved by apps with MateClient can be restored
+ * later when they've switched to EggSMClient. See bug #575308.
+ */
+ { "sm-config-prefix", 0, G_OPTION_FLAG_HIDDEN,
+ G_OPTION_ARG_STRING, &sm_config_prefix,
+ NULL, NULL },
+ { NULL }
+ };
+ GOptionGroup *group;
+
+ /* Use our own debug handler for the "EggSMClient" domain. */
+ g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG,
+ egg_sm_client_debug_handler, NULL);
+
+ group = g_option_group_new ("sm-client",
+ _("Session management options:"),
+ _("Show session management options"),
+ NULL, NULL);
+ g_option_group_add_entries (group, entries);
+ g_option_group_set_parse_hooks (group, NULL, sm_client_post_parse_func);
+
+ return group;
+}
+
+/**
+ * egg_sm_client_set_mode:
+ * @mode: an #EggSMClient mode
+ *
+ * Sets the "mode" of #EggSMClient as follows:
+ *
+ * %EGG_SM_CLIENT_MODE_DISABLED: Session management is completely
+ * disabled. The application will not even connect to the session
+ * manager. (egg_sm_client_get() will still return an #EggSMClient,
+ * but it will just be a dummy object.)
+ *
+ * %EGG_SM_CLIENT_MODE_NO_RESTART: The application will connect to
+ * the session manager (and thus will receive notification when the
+ * user is logging out, etc), but will request to not be
+ * automatically restarted with saved state in future sessions.
+ *
+ * %EGG_SM_CLIENT_MODE_NORMAL: The default. #EggSMCLient will
+ * function normally.
+ *
+ * This must be called before the application's main loop begins.
+ **/
+void
+egg_sm_client_set_mode (EggSMClientMode mode)
+{
+ global_client_mode = mode;
+}
+
+/**
+ * egg_sm_client_get_mode:
+ *
+ * Gets the global #EggSMClientMode. See egg_sm_client_set_mode()
+ * for details.
+ *
+ * Return value: the global #EggSMClientMode
+ **/
+EggSMClientMode
+egg_sm_client_get_mode (void)
+{
+ return global_client_mode;
+}
+
+/**
+ * egg_sm_client_get:
+ *
+ * Returns the master #EggSMClient for the application.
+ *
+ * On platforms that support saved sessions (ie, POSIX/X11), the
+ * application will only request to be restarted by the session
+ * manager if you call egg_set_desktop_file() to set an application
+ * desktop file. In particular, if the desktop file contains the key
+ * "X
+ *
+ * Return value: the master #EggSMClient.
+ **/
+EggSMClient *
+egg_sm_client_get (void)
+{
+ if (!global_client)
+ {
+ if (global_client_mode != EGG_SM_CLIENT_MODE_DISABLED &&
+ !sm_client_disable)
+ {
+#if defined (GDK_WINDOWING_WIN32)
+ global_client = egg_sm_client_win32_new ();
+#elif defined (GDK_WINDOWING_QUARTZ)
+ global_client = egg_sm_client_osx_new ();
+#else
+ /* If both D-Bus and XSMP are compiled in, try XSMP first
+ * (since it supports state saving) and fall back to D-Bus
+ * if XSMP isn't available.
+ */
+# ifdef EGG_SM_CLIENT_BACKEND_XSMP
+ global_client = egg_sm_client_xsmp_new ();
+# endif
+# ifdef EGG_SM_CLIENT_BACKEND_DBUS
+ if (!global_client)
+ global_client = egg_sm_client_dbus_new ();
+# endif
+#endif
+ }
+
+ /* Fallback: create a dummy client, so that callers don't have
+ * to worry about a %NULL return value.
+ */
+ if (!global_client)
+ global_client = g_object_new (EGG_TYPE_SM_CLIENT, NULL);
+ }
+
+ return global_client;
+}
+
+/**
+ * egg_sm_client_is_resumed:
+ * @client: the client
+ *
+ * Checks whether or not the current session has been resumed from
+ * a previous saved session. If so, the application should call
+ * egg_sm_client_get_state_file() and restore its state from the
+ * returned #GKeyFile.
+ *
+ * Return value: %TRUE if the session has been resumed
+ **/
+gboolean
+egg_sm_client_is_resumed (EggSMClient *client)
+{
+ g_return_val_if_fail (client == global_client, FALSE);
+
+ return sm_client_state_file != NULL;
+}
+
+/**
+ * egg_sm_client_get_state_file:
+ * @client: the client
+ *
+ * If the application was resumed by the session manager, this will
+ * return the #GKeyFile containing its state from the previous
+ * session.
+ *
+ * Note that other libraries and #EggSMClient itself may also store
+ * state in the key file, so if you call egg_sm_client_get_groups(),
+ * on it, the return value will likely include groups that you did not
+ * put there yourself. (It is also not guaranteed that the first
+ * group created by the application will still be the "start group"
+ * when it is resumed.)
+ *
+ * Return value: the #GKeyFile containing the application's earlier
+ * state, or %NULL on error. You should not free this key file; it
+ * is owned by @client.
+ **/
+GKeyFile *
+egg_sm_client_get_state_file (EggSMClient *client)
+{
+ EggSMClientPrivate *priv = EGG_SM_CLIENT_GET_PRIVATE (client);
+ char *state_file_path;
+ GError *err = NULL;
+
+ g_return_val_if_fail (client == global_client, NULL);
+
+ if (!sm_client_state_file)
+ return NULL;
+ if (priv->state_file)
+ return priv->state_file;
+
+ if (!strncmp (sm_client_state_file, "file://", 7))
+ state_file_path = g_filename_from_uri (sm_client_state_file, NULL, NULL);
+ else
+ state_file_path = g_strdup (sm_client_state_file);
+
+ priv->state_file = g_key_file_new ();
+ if (!g_key_file_load_from_file (priv->state_file, state_file_path, 0, &err))
+ {
+ g_warning ("Could not load SM state file '%s': %s",
+ sm_client_state_file, err->message);
+ g_clear_error (&err);
+ g_key_file_free (priv->state_file);
+ priv->state_file = NULL;
+ }
+
+ g_free (state_file_path);
+ return priv->state_file;
+}
+
+/**
+ * egg_sm_client_set_restart_command:
+ * @client: the client
+ * @argc: the length of @argv
+ * @argv: argument vector
+ *
+ * Sets the command used to restart @client if it does not have a
+ * .desktop file that can be used to find its restart command.
+ *
+ * This can also be used when handling the ::save_state signal, to
+ * save the current state via an updated command line. (Eg, providing
+ * a list of filenames to open when the application is resumed.)
+ **/
+void
+egg_sm_client_set_restart_command (EggSMClient *client,
+ int argc,
+ const char **argv)
+{
+ g_return_if_fail (EGG_IS_SM_CLIENT (client));
+
+ if (EGG_SM_CLIENT_GET_CLASS (client)->set_restart_command)
+ EGG_SM_CLIENT_GET_CLASS (client)->set_restart_command (client, argc, argv);
+}
+
+/**
+ * egg_sm_client_will_quit:
+ * @client: the client
+ * @will_quit: whether or not the application is willing to quit
+ *
+ * This MUST be called in response to the ::quit_requested signal, to
+ * indicate whether or not the application is willing to quit. The
+ * application may call it either directly from the signal handler, or
+ * at some later point (eg, after asynchronously interacting with the
+ * user).
+ *
+ * If the application does not connect to ::quit_requested,
+ * #EggSMClient will call this method on its behalf (passing %TRUE
+ * for @will_quit).
+ *
+ * After calling this method, the application should wait to receive
+ * either ::quit_cancelled or ::quit.
+ **/
+void
+egg_sm_client_will_quit (EggSMClient *client,
+ gboolean will_quit)
+{
+ g_return_if_fail (EGG_IS_SM_CLIENT (client));
+
+ if (EGG_SM_CLIENT_GET_CLASS (client)->will_quit)
+ EGG_SM_CLIENT_GET_CLASS (client)->will_quit (client, will_quit);
+}
+
+/**
+ * egg_sm_client_end_session:
+ * @style: a hint at how to end the session
+ * @request_confirmation: whether or not the user should get a chance
+ * to confirm the action
+ *
+ * Requests that the session manager end the current session. @style
+ * indicates how the session should be ended, and
+ * @request_confirmation indicates whether or not the user should be
+ * given a chance to confirm the logout/reboot/shutdown. Both of these
+ * flags are merely hints though; the session manager may choose to
+ * ignore them.
+ *
+ * Return value: %TRUE if the request was sent; %FALSE if it could not
+ * be (eg, because it could not connect to the session manager).
+ **/
+gboolean
+egg_sm_client_end_session (EggSMClientEndStyle style,
+ gboolean request_confirmation)
+{
+ EggSMClient *client = egg_sm_client_get ();
+
+ g_return_val_if_fail (EGG_IS_SM_CLIENT (client), FALSE);
+
+ if (EGG_SM_CLIENT_GET_CLASS (client)->end_session)
+ {
+ return EGG_SM_CLIENT_GET_CLASS (client)->end_session (client, style,
+ request_confirmation);
+ }
+ else
+ return FALSE;
+}
+
+/* Signal-emitting callbacks from platform-specific code */
+
+GKeyFile *
+egg_sm_client_save_state (EggSMClient *client)
+{
+ GKeyFile *state_file;
+ char *group;
+
+ g_return_val_if_fail (client == global_client, NULL);
+
+ state_file = g_key_file_new ();
+
+ g_debug ("Emitting save_state");
+ g_signal_emit (client, signals[SAVE_STATE], 0, state_file);
+ g_debug ("Done emitting save_state");
+
+ group = g_key_file_get_start_group (state_file);
+ if (group)
+ {
+ g_free (group);
+ return state_file;
+ }
+ else
+ {
+ g_key_file_free (state_file);
+ return NULL;
+ }
+}
+
+void
+egg_sm_client_quit_requested (EggSMClient *client)
+{
+ g_return_if_fail (client == global_client);
+
+ if (!g_signal_has_handler_pending (client, signals[QUIT_REQUESTED], 0, FALSE))
+ {
+ g_debug ("Not emitting quit_requested because no one is listening");
+ egg_sm_client_will_quit (client, TRUE);
+ return;
+ }
+
+ g_debug ("Emitting quit_requested");
+ g_signal_emit (client, signals[QUIT_REQUESTED], 0);
+ g_debug ("Done emitting quit_requested");
+}
+
+void
+egg_sm_client_quit_cancelled (EggSMClient *client)
+{
+ g_return_if_fail (client == global_client);
+
+ g_debug ("Emitting quit_cancelled");
+ g_signal_emit (client, signals[QUIT_CANCELLED], 0);
+ g_debug ("Done emitting quit_cancelled");
+}
+
+void
+egg_sm_client_quit (EggSMClient *client)
+{
+ g_return_if_fail (client == global_client);
+
+ g_debug ("Emitting quit");
+ g_signal_emit (client, signals[QUIT], 0);
+ g_debug ("Done emitting quit");
+
+ /* FIXME: should we just call gtk_main_quit() here? */
+}
+
+static void
+egg_sm_client_debug_handler (const char *log_domain,
+ GLogLevelFlags log_level,
+ const char *message,
+ gpointer user_data)
+{
+ static int debug = -1;
+
+ if (debug < 0)
+ debug = (g_getenv ("EGG_SM_CLIENT_DEBUG") != NULL);
+
+ if (debug)
+ g_log_default_handler (log_domain, log_level, message, NULL);
+}
diff --git a/cut-n-paste/smclient/eggsmclient.h b/cut-n-paste/smclient/eggsmclient.h
new file mode 100644
index 00000000..65e258b3
--- /dev/null
+++ b/cut-n-paste/smclient/eggsmclient.h
@@ -0,0 +1,117 @@
+/* eggsmclient.h
+ * Copyright (C) 2007 Novell, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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.
+ */
+
+#ifndef __EGG_SM_CLIENT_H__
+#define __EGG_SM_CLIENT_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define EGG_TYPE_SM_CLIENT (egg_sm_client_get_type ())
+#define EGG_SM_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_SM_CLIENT, EggSMClient))
+#define EGG_SM_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_SM_CLIENT, EggSMClientClass))
+#define EGG_IS_SM_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_SM_CLIENT))
+#define EGG_IS_SM_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_SM_CLIENT))
+#define EGG_SM_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_SM_CLIENT, EggSMClientClass))
+
+typedef struct _EggSMClient EggSMClient;
+typedef struct _EggSMClientClass EggSMClientClass;
+typedef struct _EggSMClientPrivate EggSMClientPrivate;
+
+typedef enum {
+ EGG_SM_CLIENT_END_SESSION_DEFAULT,
+ EGG_SM_CLIENT_LOGOUT,
+ EGG_SM_CLIENT_REBOOT,
+ EGG_SM_CLIENT_SHUTDOWN
+} EggSMClientEndStyle;
+
+typedef enum {
+ EGG_SM_CLIENT_MODE_DISABLED,
+ EGG_SM_CLIENT_MODE_NO_RESTART,
+ EGG_SM_CLIENT_MODE_NORMAL
+} EggSMClientMode;
+
+struct _EggSMClient
+{
+ GObject parent;
+
+};
+
+struct _EggSMClientClass
+{
+ GObjectClass parent_class;
+
+ /* signals */
+ void (*save_state) (EggSMClient *client,
+ GKeyFile *state_file);
+
+ void (*quit_requested) (EggSMClient *client);
+ void (*quit_cancelled) (EggSMClient *client);
+ void (*quit) (EggSMClient *client);
+
+ /* virtual methods */
+ void (*startup) (EggSMClient *client,
+ const char *client_id);
+ void (*set_restart_command) (EggSMClient *client,
+ int argc,
+ const char **argv);
+ void (*will_quit) (EggSMClient *client,
+ gboolean will_quit);
+ gboolean (*end_session) (EggSMClient *client,
+ EggSMClientEndStyle style,
+ gboolean request_confirmation);
+
+ /* Padding for future expansion */
+ void (*_egg_reserved1) (void);
+ void (*_egg_reserved2) (void);
+ void (*_egg_reserved3) (void);
+ void (*_egg_reserved4) (void);
+};
+
+GType egg_sm_client_get_type (void) G_GNUC_CONST;
+
+GOptionGroup *egg_sm_client_get_option_group (void);
+
+/* Initialization */
+void egg_sm_client_set_mode (EggSMClientMode mode);
+EggSMClientMode egg_sm_client_get_mode (void);
+EggSMClient *egg_sm_client_get (void);
+
+/* Resuming a saved session */
+gboolean egg_sm_client_is_resumed (EggSMClient *client);
+GKeyFile *egg_sm_client_get_state_file (EggSMClient *client);
+
+/* Alternate means of saving state */
+void egg_sm_client_set_restart_command (EggSMClient *client,
+ int argc,
+ const char **argv);
+
+/* Handling "quit_requested" signal */
+void egg_sm_client_will_quit (EggSMClient *client,
+ gboolean will_quit);
+
+/* Initiate a logout/reboot/shutdown */
+gboolean egg_sm_client_end_session (EggSMClientEndStyle style,
+ gboolean request_confirmation);
+
+G_END_DECLS
+
+
+#endif /* __EGG_SM_CLIENT_H__ */
diff --git a/cut-n-paste/synctex/Makefile.am b/cut-n-paste/synctex/Makefile.am
new file mode 100644
index 00000000..881ef4ab
--- /dev/null
+++ b/cut-n-paste/synctex/Makefile.am
@@ -0,0 +1,14 @@
+noinst_LTLIBRARIES = libsynctex.la
+
+libsynctex_la_SOURCES = \
+ synctex_parser.c \
+ synctex_parser.h \
+ synctex_parser_utils.h \
+ synctex_parser_utils.c
+
+libsynctex_la_CFLAGS = \
+ $(SHELL_CORE_CFLAGS) \
+ $(WARNING_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+-include $(top_srcdir)/git.mk
diff --git a/cut-n-paste/synctex/synctex_parser.c b/cut-n-paste/synctex/synctex_parser.c
new file mode 100644
index 00000000..060f32d1
--- /dev/null
+++ b/cut-n-paste/synctex/synctex_parser.c
@@ -0,0 +1,4171 @@
+/*
+Copyright (c) 2008, 2009; 2010 jerome DOT laurens AT u-bourgogne DOT fr
+
+This file is part of the SyncTeX package.
+
+Version: 1.12
+See synctex_parser_readme.txt for more details
+
+Latest Revision: Mon Jul 19 21:50:36 UTC 2010
+
+License:
+--------
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE
+
+Except as contained in this notice, the name of the copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in this Software without prior written
+authorization from the copyright holder.
+
+Acknowledgments:
+----------------
+The author received useful remarks from the pdfTeX developers, especially Hahn The Thanh,
+and significant help from XeTeX developer Jonathan Kew
+
+Nota Bene:
+----------
+If you include or use a significant part of the synctex package into a software,
+I would appreciate to be listed as contributor and see "SyncTeX" highlighted.
+
+Version 1
+Thu Jun 19 09:39:21 UTC 2008
+
+*/
+
+/* We assume that high level application like pdf viewers will want
+ * to embed this code as is. We assume that they also have locale.h and setlocale.
+ * For other tools such as TeXLive tools, you must define SYNCTEX_USE_LOCAL_HEADER,
+ * when building. You also have to create and customize synctex_parser_local.h to fit your system.
+ * In particular, the HAVE_LOCALE_H and HAVE_SETLOCALE macros should be properly defined.
+ * With this design, you should not need to edit this file. */
+
+# if defined(SYNCTEX_USE_LOCAL_HEADER)
+# include "synctex_parser_local.h"
+# else
+# define HAVE_LOCALE_H 1
+# define HAVE_SETLOCALE 1
+# if defined(_MSC_VER)
+# define SYNCTEX_INLINE __inline
+# else
+# define SYNCTEX_INLINE inline
+# endif
+# endif
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+
+#if defined(HAVE_LOCALE_H)
+#include <locale.h>
+#endif
+
+/* The data is organized in a graph with multiple entries.
+ * The root object is a scanner, it is created with the contents on a synctex file.
+ * Each leaf of the tree is a synctex_node_t object.
+ * There are 3 subtrees, two of them sharing the same leaves.
+ * The first tree is the list of input records, where input file names are associated with tags.
+ * The second tree is the box tree as given by TeX when shipping pages out.
+ * First level objects are sheets, containing boxes, glues, kerns...
+ * The third tree allows to browse leaves according to tag and line.
+ */
+
+#include "synctex_parser.h"
+#include <synctex_parser_utils.h>
+
+/* These are the possible extensions of the synctex file */
+const char * synctex_suffix = ".synctex";
+const char * synctex_suffix_gz = ".gz";
+
+static const char * synctex_io_modes[synctex_io_mode_append+2] = {"r","rb","a","ab"};
+
+/* each synctex node has a class */
+typedef struct __synctex_class_t _synctex_class_t;
+typedef _synctex_class_t * synctex_class_t;
+
+
+/* synctex_node_t is a pointer to a node
+ * _synctex_node is the target of the synctex_node_t pointer
+ * It is a pseudo object oriented program.
+ * class is a pointer to the class object the node belongs to.
+ * implementation is meant to contain the private data of the node
+ * basically, there are 2 kinds of information: navigation information and
+ * synctex information. Both will depend on the type of the node,
+ * thus different nodes will have different private data.
+ * There is no inheritancy overhead.
+ */
+typedef union _synctex_info_t {
+ int INT;
+ char * PTR;
+} synctex_info_t;
+
+struct _synctex_node {
+ synctex_class_t class;
+ synctex_info_t * implementation;
+};
+
+/* Each node of the tree, except the scanner itself belongs to a class.
+ * The class object is just a struct declaring the owning scanner
+ * This is a pointer to the scanner as root of the tree.
+ * The type is used to identify the kind of node.
+ * The class declares pointers to a creator and a destructor method.
+ * The log and display fields are used to log and display the node.
+ * display will also display the child, sibling and parent sibling.
+ * parent, child and sibling are used to navigate the tree,
+ * from TeX box hierarchy point of view.
+ * The friend field points to a method which allows to navigate from friend to friend.
+ * A friend is a node with very close tag and line numbers.
+ * Finally, the info field point to a method giving the private node info offset.
+ */
+
+typedef synctex_node_t *(*_synctex_node_getter_t)(synctex_node_t);
+typedef synctex_info_t *(*_synctex_info_getter_t)(synctex_node_t);
+
+struct __synctex_class_t {
+ synctex_scanner_t scanner;
+ int type;
+ synctex_node_t (*new)(synctex_scanner_t scanner);
+ void (*free)(synctex_node_t);
+ void (*log)(synctex_node_t);
+ void (*display)(synctex_node_t);
+ _synctex_node_getter_t parent;
+ _synctex_node_getter_t child;
+ _synctex_node_getter_t sibling;
+ _synctex_node_getter_t friend;
+ _synctex_node_getter_t next_box;
+ _synctex_info_getter_t info;
+};
+
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark Abstract OBJECTS and METHODS
+# endif
+
+/* These macros are shortcuts
+ * This macro checks if a message can be sent.
+ */
+# define SYNCTEX_CAN_PERFORM(NODE,SELECTOR)\
+ (NULL!=((((NODE)->class))->SELECTOR))
+
+/* This macro is some kind of objc_msg_send.
+ * It takes care of sending the proper message if possible.
+ */
+# define SYNCTEX_MSG_SEND(NODE,SELECTOR) if(NODE && SYNCTEX_CAN_PERFORM(NODE,SELECTOR)) {\
+ (*((((NODE)->class))->SELECTOR))(NODE);\
+ }
+
+/* read only safe getter
+ */
+# define SYNCTEX_GET(NODE,SELECTOR)((NODE && SYNCTEX_CAN_PERFORM(NODE,SELECTOR))?SYNCTEX_GETTER(NODE,SELECTOR)[0]:(NULL))
+
+/* read/write getter
+ */
+# define SYNCTEX_GETTER(NODE,SELECTOR)\
+ ((synctex_node_t *)((*((((NODE)->class))->SELECTOR))(NODE)))
+
+# define SYNCTEX_FREE(NODE) SYNCTEX_MSG_SEND(NODE,free);
+
+/* Parent getter and setter
+ */
+# define SYNCTEX_PARENT(NODE) SYNCTEX_GET(NODE,parent)
+# define SYNCTEX_SET_PARENT(NODE,NEW_PARENT) if(NODE && NEW_PARENT && SYNCTEX_CAN_PERFORM(NODE,parent)){\
+ SYNCTEX_GETTER(NODE,parent)[0]=NEW_PARENT;\
+ }
+
+/* Child getter and setter
+ */
+# define SYNCTEX_CHILD(NODE) SYNCTEX_GET(NODE,child)
+# define SYNCTEX_SET_CHILD(NODE,NEW_CHILD) if(NODE && NEW_CHILD){\
+ SYNCTEX_GETTER(NODE,child)[0]=NEW_CHILD;\
+ SYNCTEX_GETTER(NEW_CHILD,parent)[0]=NODE;\
+ }
+
+/* Sibling getter and setter
+ */
+# define SYNCTEX_SIBLING(NODE) SYNCTEX_GET(NODE,sibling)
+# define SYNCTEX_SET_SIBLING(NODE,NEW_SIBLING) if(NODE && NEW_SIBLING) {\
+ SYNCTEX_GETTER(NODE,sibling)[0]=NEW_SIBLING;\
+ if(SYNCTEX_CAN_PERFORM(NEW_SIBLING,parent) && SYNCTEX_CAN_PERFORM(NODE,parent)) {\
+ SYNCTEX_GETTER(NEW_SIBLING,parent)[0]=SYNCTEX_GETTER(NODE,parent)[0];\
+ }\
+ }
+/* Friend getter and setter. A friend is a kern, math, glue or void box node which tag and line numbers are similar.
+ * This is a first filter on the nodes that avoids testing all of them.
+ * Friends are used mainly in forward synchronization aka from source to output.
+ */
+# define SYNCTEX_FRIEND(NODE) SYNCTEX_GET(NODE,friend)
+# define SYNCTEX_SET_FRIEND(NODE,NEW_FRIEND) if(NODE && NEW_FRIEND){\
+ SYNCTEX_GETTER(NODE,friend)[0]=NEW_FRIEND;\
+ }
+
+/* Next box getter and setter. The box tree can be traversed from one horizontal box to the other.
+ * Navigation starts with the deeper boxes.
+ */
+# define SYNCTEX_NEXT_HORIZ_BOX(NODE) SYNCTEX_GET(NODE,next_box)
+# define SYNCTEX_SET_NEXT_HORIZ_BOX(NODE,NEXT_BOX) if(NODE && NEXT_BOX){\
+ SYNCTEX_GETTER(NODE,next_box)[0]=NEXT_BOX;\
+ }
+
+void _synctex_free_node(synctex_node_t node);
+void _synctex_free_leaf(synctex_node_t node);
+
+/* A node is meant to own its child and sibling.
+ * It is not owned by its parent, unless it is its first child.
+ * This destructor is for all nodes with children.
+ */
+void _synctex_free_node(synctex_node_t node) {
+ if(node) {
+ (*((node->class)->sibling))(node);
+ SYNCTEX_FREE(SYNCTEX_SIBLING(node));
+ SYNCTEX_FREE(SYNCTEX_CHILD(node));
+ free(node);
+ }
+ return;
+}
+
+/* A node is meant to own its child and sibling.
+ * It is not owned by its parent, unless it is its first child.
+ * This destructor is for nodes with no child.
+ */
+void _synctex_free_leaf(synctex_node_t node) {
+ if(node) {
+ SYNCTEX_FREE(SYNCTEX_SIBLING(node));
+ free(node);
+ }
+ return;
+}
+# ifdef __SYNCTEX_WORK__
+# include "/usr/include/zlib.h"
+# else
+# include <zlib.h>
+# endif
+
+/* The synctex scanner is the root object.
+ * Is is initialized with the contents of a text file or a gzipped file.
+ * The buffer_? are first used to parse the text.
+ */
+struct __synctex_scanner_t {
+ gzFile file; /* The (possibly compressed) file */
+ char * buffer_cur; /* current location in the buffer */
+ char * buffer_start; /* start of the buffer */
+ char * buffer_end; /* end of the buffer */
+ char * output_fmt; /* dvi or pdf, not yet used */
+ char * output; /* the output name used to create the scanner */
+ char * synctex; /* the .synctex or .synctex.gz name used to create the scanner */
+ int version; /* 1, not yet used */
+ struct {
+ unsigned has_parsed:1; /* Whether the scanner has parsed its underlying synctex file. */
+ unsigned reserved:sizeof(unsigned)-1; /* alignment */
+ } flags;
+ int pre_magnification; /* magnification from the synctex preamble */
+ int pre_unit; /* unit from the synctex preamble */
+ int pre_x_offset; /* X offste from the synctex preamble */
+ int pre_y_offset; /* Y offset from the synctex preamble */
+ int count; /* Number of records, from the synctex postamble */
+ float unit; /* real unit, from synctex preamble or post scriptum */
+ float x_offset; /* X offset, from synctex preamble or post scriptum */
+ float y_offset; /* Y Offset, from synctex preamble or post scriptum */
+ synctex_node_t sheet; /* The first sheet node, its siblings are the other sheet nodes */
+ synctex_node_t input; /* The first input node, its siblings are the other input nodes */
+ int number_of_lists; /* The number of friend lists */
+ synctex_node_t * lists_of_friends;/* The friend lists */
+ _synctex_class_t class[synctex_node_number_of_types]; /* The classes of the nodes of the scanner */
+};
+
+/* SYNCTEX_CUR, SYNCTEX_START and SYNCTEX_END are convenient shortcuts
+ */
+# define SYNCTEX_CUR (scanner->buffer_cur)
+# define SYNCTEX_START (scanner->buffer_start)
+# define SYNCTEX_END (scanner->buffer_end)
+
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark OBJECTS, their creators and destructors.
+# endif
+
+/* Here, we define the indices for the different informations.
+ * They are used to declare the size of the implementation.
+ * For example, if one object uses SYNCTEX_HORIZ_IDX is its size,
+ * then its info will contain a tag, line, column, horiz but no width nor height nor depth
+ */
+
+/* The sheet is a first level node.
+ * It has no parent (the parent is the scanner itself)
+ * Its sibling points to another sheet.
+ * Its child points to its first child, in general a box.
+ * A sheet node contains only one synctex information: the page.
+ * This is the 1 based page index as given by TeX.
+ */
+/* The next macros are used to access the node info
+ * SYNCTEX_INFO(node) points to the first synctex integer or pointer data of node
+ * SYNCTEX_INFO(node)[index] is the information at index
+ * for example, the page of a sheet is stored in SYNCTEX_INFO(sheet)[SYNCTEX_PAGE_IDX]
+ */
+# define SYNCTEX_INFO(NODE) ((*((((NODE)->class))->info))(NODE))
+# define SYNCTEX_PAGE_IDX 0
+# define SYNCTEX_PAGE(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_PAGE_IDX].INT
+
+/* This macro defines implementation offsets
+ * It is only used for pointer values
+ */
+# define SYNCTEX_MAKE_GET(SYNCTEX_GETTER,OFFSET)\
+synctex_node_t * SYNCTEX_GETTER (synctex_node_t node);\
+synctex_node_t * SYNCTEX_GETTER (synctex_node_t node) {\
+ return node?(synctex_node_t *)((&((node)->implementation))+OFFSET):NULL;\
+}
+SYNCTEX_MAKE_GET(_synctex_implementation_0,0)
+SYNCTEX_MAKE_GET(_synctex_implementation_1,1)
+SYNCTEX_MAKE_GET(_synctex_implementation_2,2)
+SYNCTEX_MAKE_GET(_synctex_implementation_3,3)
+SYNCTEX_MAKE_GET(_synctex_implementation_4,4)
+SYNCTEX_MAKE_GET(_synctex_implementation_5,5)
+
+typedef struct {
+ synctex_class_t class;
+ synctex_info_t implementation[3+SYNCTEX_PAGE_IDX+1];/* child, sibling, next box,
+ * SYNCTEX_PAGE_IDX */
+} synctex_sheet_t;
+
+synctex_node_t _synctex_new_sheet(synctex_scanner_t scanner);
+void _synctex_display_sheet(synctex_node_t sheet);
+void _synctex_log_sheet(synctex_node_t sheet);
+
+static _synctex_class_t synctex_class_sheet = {
+ NULL, /* No scanner yet */
+ synctex_node_type_sheet, /* Node type */
+ &_synctex_new_sheet, /* creator */
+ &_synctex_free_node, /* destructor */
+ &_synctex_log_sheet, /* log */
+ &_synctex_display_sheet, /* display */
+ NULL, /* No parent */
+ &_synctex_implementation_0, /* child */
+ &_synctex_implementation_1, /* sibling */
+ NULL, /* No friend */
+ &_synctex_implementation_2, /* Next box */
+ (_synctex_info_getter_t)&_synctex_implementation_3 /* info */
+};
+
+/* sheet node creator */
+synctex_node_t _synctex_new_sheet(synctex_scanner_t scanner) {
+ synctex_node_t node = _synctex_malloc(sizeof(synctex_sheet_t));
+ if(node) {
+ node->class = scanner?scanner->class+synctex_node_type_sheet:(synctex_class_t)&synctex_class_sheet;
+ }
+ return node;
+}
+
+/* A box node contains navigation and synctex information
+ * There are different kind of boxes.
+ * Only horizontal boxes are treated differently because of their visible size.
+ */
+# define SYNCTEX_TAG_IDX 0
+# define SYNCTEX_LINE_IDX (SYNCTEX_TAG_IDX+1)
+# define SYNCTEX_COLUMN_IDX (SYNCTEX_LINE_IDX+1)
+# define SYNCTEX_HORIZ_IDX (SYNCTEX_COLUMN_IDX+1)
+# define SYNCTEX_VERT_IDX (SYNCTEX_HORIZ_IDX+1)
+# define SYNCTEX_WIDTH_IDX (SYNCTEX_VERT_IDX+1)
+# define SYNCTEX_HEIGHT_IDX (SYNCTEX_WIDTH_IDX+1)
+# define SYNCTEX_DEPTH_IDX (SYNCTEX_HEIGHT_IDX+1)
+/* the corresponding info accessors */
+# define SYNCTEX_TAG(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_TAG_IDX].INT
+# define SYNCTEX_LINE(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_LINE_IDX].INT
+# define SYNCTEX_COLUMN(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_COLUMN_IDX].INT
+# define SYNCTEX_HORIZ(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_HORIZ_IDX].INT
+# define SYNCTEX_VERT(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_VERT_IDX].INT
+# define SYNCTEX_WIDTH(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_WIDTH_IDX].INT
+# define SYNCTEX_HEIGHT(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_HEIGHT_IDX].INT
+# define SYNCTEX_DEPTH(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_DEPTH_IDX].INT
+# define SYNCTEX_ABS_WIDTH(NODE) ((SYNCTEX_WIDTH(NODE)>0?SYNCTEX_WIDTH(NODE):-SYNCTEX_WIDTH(NODE)))
+# define SYNCTEX_ABS_HEIGHT(NODE) ((SYNCTEX_HEIGHT(NODE)>0?SYNCTEX_HEIGHT(NODE):-SYNCTEX_HEIGHT(NODE)))
+# define SYNCTEX_ABS_DEPTH(NODE) ((SYNCTEX_DEPTH(NODE)>0?SYNCTEX_DEPTH(NODE):-SYNCTEX_DEPTH(NODE)))
+
+typedef struct {
+ synctex_class_t class;
+ synctex_info_t implementation[5+SYNCTEX_DEPTH_IDX+1]; /* parent,child,sibling,friend,next box,
+ * SYNCTEX_TAG,SYNCTEX_LINE,SYNCTEX_COLUMN,
+ * SYNCTEX_HORIZ,SYNCTEX_VERT,SYNCTEX_WIDTH,SYNCTEX_HEIGHT,SYNCTEX_DEPTH */
+} synctex_vert_box_node_t;
+
+synctex_node_t _synctex_new_vbox(synctex_scanner_t scanner);
+void _synctex_log_box(synctex_node_t sheet);
+void _synctex_display_vbox(synctex_node_t node);
+
+/* These are static class objects, each scanner will make a copy of them and setup the scanner field.
+ */
+static _synctex_class_t synctex_class_vbox = {
+ NULL, /* No scanner yet */
+ synctex_node_type_vbox, /* Node type */
+ &_synctex_new_vbox, /* creator */
+ &_synctex_free_node, /* destructor */
+ &_synctex_log_box, /* log */
+ &_synctex_display_vbox, /* display */
+ &_synctex_implementation_0, /* parent */
+ &_synctex_implementation_1, /* child */
+ &_synctex_implementation_2, /* sibling */
+ &_synctex_implementation_3, /* friend */
+ &_synctex_implementation_4, /* next box */
+ (_synctex_info_getter_t)&_synctex_implementation_5
+};
+
+/* vertical box node creator */
+synctex_node_t _synctex_new_vbox(synctex_scanner_t scanner) {
+ synctex_node_t node = _synctex_malloc(sizeof(synctex_vert_box_node_t));
+ if(node) {
+ node->class = scanner?scanner->class+synctex_node_type_vbox:(synctex_class_t)&synctex_class_vbox;
+ }
+ return node;
+}
+
+# define SYNCTEX_HORIZ_V_IDX (SYNCTEX_DEPTH_IDX+1)
+# define SYNCTEX_VERT_V_IDX (SYNCTEX_HORIZ_V_IDX+1)
+# define SYNCTEX_WIDTH_V_IDX (SYNCTEX_VERT_V_IDX+1)
+# define SYNCTEX_HEIGHT_V_IDX (SYNCTEX_WIDTH_V_IDX+1)
+# define SYNCTEX_DEPTH_V_IDX (SYNCTEX_HEIGHT_V_IDX+1)
+/* the corresponding info accessors */
+# define SYNCTEX_HORIZ_V(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_HORIZ_V_IDX].INT
+# define SYNCTEX_VERT_V(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_VERT_V_IDX].INT
+# define SYNCTEX_WIDTH_V(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_WIDTH_V_IDX].INT
+# define SYNCTEX_HEIGHT_V(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_HEIGHT_V_IDX].INT
+# define SYNCTEX_DEPTH_V(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_DEPTH_V_IDX].INT
+# define SYNCTEX_ABS_WIDTH_V(NODE) ((SYNCTEX_WIDTH_V(NODE)>0?SYNCTEX_WIDTH_V(NODE):-SYNCTEX_WIDTH_V(NODE)))
+# define SYNCTEX_ABS_HEIGHT_V(NODE) ((SYNCTEX_HEIGHT_V(NODE)>0?SYNCTEX_HEIGHT_V(NODE):-SYNCTEX_HEIGHT_V(NODE)))
+# define SYNCTEX_ABS_DEPTH_V(NODE) ((SYNCTEX_DEPTH_V(NODE)>0?SYNCTEX_DEPTH_V(NODE):-SYNCTEX_DEPTH_V(NODE)))
+
+/* Horizontal boxes must contain visible size, because 0 width does not mean emptiness */
+typedef struct {
+ synctex_class_t class;
+ synctex_info_t implementation[5+SYNCTEX_DEPTH_V_IDX+1]; /*parent,child,sibling,friend,next box,
+ * SYNCTEX_TAG,SYNCTEX_LINE,SYNCTEX_COLUMN,
+ * SYNCTEX_HORIZ,SYNCTEX_VERT,SYNCTEX_WIDTH,SYNCTEX_HEIGHT,SYNCTEX_DEPTH,
+ * SYNCTEX_HORIZ_V,SYNCTEX_VERT_V,SYNCTEX_WIDTH_V,SYNCTEX_HEIGHT_V,SYNCTEX_DEPTH_V*/
+} synctex_horiz_box_node_t;
+
+synctex_node_t _synctex_new_hbox(synctex_scanner_t scanner);
+void _synctex_display_hbox(synctex_node_t node);
+void _synctex_log_horiz_box(synctex_node_t sheet);
+
+
+static _synctex_class_t synctex_class_hbox = {
+ NULL, /* No scanner yet */
+ synctex_node_type_hbox, /* Node type */
+ &_synctex_new_hbox, /* creator */
+ &_synctex_free_node, /* destructor */
+ &_synctex_log_horiz_box, /* log */
+ &_synctex_display_hbox, /* display */
+ &_synctex_implementation_0, /* parent */
+ &_synctex_implementation_1, /* child */
+ &_synctex_implementation_2, /* sibling */
+ &_synctex_implementation_3, /* friend */
+ &_synctex_implementation_4, /* next box */
+ (_synctex_info_getter_t)&_synctex_implementation_5
+};
+
+/* horizontal box node creator */
+synctex_node_t _synctex_new_hbox(synctex_scanner_t scanner) {
+ synctex_node_t node = _synctex_malloc(sizeof(synctex_horiz_box_node_t));
+ if(node) {
+ node->class = scanner?scanner->class+synctex_node_type_hbox:(synctex_class_t)&synctex_class_hbox;
+ }
+ return node;
+}
+
+/* This void box node implementation is either horizontal or vertical
+ * It does not contain a child field.
+ */
+typedef struct {
+ synctex_class_t class;
+ synctex_info_t implementation[3+SYNCTEX_DEPTH_IDX+1]; /* parent,sibling,friend,
+ * SYNCTEX_TAG,SYNCTEX_LINE,SYNCTEX_COLUMN,
+ * SYNCTEX_HORIZ,SYNCTEX_VERT,SYNCTEX_WIDTH,SYNCTEX_HEIGHT,SYNCTEX_DEPTH*/
+} synctex_void_box_node_t;
+
+synctex_node_t _synctex_new_void_vbox(synctex_scanner_t scanner);
+void _synctex_log_void_box(synctex_node_t sheet);
+void _synctex_display_void_vbox(synctex_node_t node);
+
+static _synctex_class_t synctex_class_void_vbox = {
+ NULL, /* No scanner yet */
+ synctex_node_type_void_vbox,/* Node type */
+ &_synctex_new_void_vbox, /* creator */
+ &_synctex_free_node, /* destructor */
+ &_synctex_log_void_box, /* log */
+ &_synctex_display_void_vbox,/* display */
+ &_synctex_implementation_0, /* parent */
+ NULL, /* No child */
+ &_synctex_implementation_1, /* sibling */
+ &_synctex_implementation_2, /* friend */
+ NULL, /* No next box */
+ (_synctex_info_getter_t)&_synctex_implementation_3
+};
+
+/* vertical void box node creator */
+synctex_node_t _synctex_new_void_vbox(synctex_scanner_t scanner) {
+ synctex_node_t node = _synctex_malloc(sizeof(synctex_void_box_node_t));
+ if(node) {
+ node->class = scanner?scanner->class+synctex_node_type_void_vbox:(synctex_class_t)&synctex_class_void_vbox;
+ }
+ return node;
+}
+
+synctex_node_t _synctex_new_void_hbox(synctex_scanner_t scanner);
+void _synctex_display_void_hbox(synctex_node_t node);
+
+static _synctex_class_t synctex_class_void_hbox = {
+ NULL, /* No scanner yet */
+ synctex_node_type_void_hbox,/* Node type */
+ &_synctex_new_void_hbox, /* creator */
+ &_synctex_free_node, /* destructor */
+ &_synctex_log_void_box, /* log */
+ &_synctex_display_void_hbox,/* display */
+ &_synctex_implementation_0, /* parent */
+ NULL, /* No child */
+ &_synctex_implementation_1, /* sibling */
+ &_synctex_implementation_2, /* friend */
+ NULL, /* No next box */
+ (_synctex_info_getter_t)&_synctex_implementation_3
+};
+
+/* horizontal void box node creator */
+synctex_node_t _synctex_new_void_hbox(synctex_scanner_t scanner) {
+ synctex_node_t node = _synctex_malloc(sizeof(synctex_void_box_node_t));
+ if(node) {
+ node->class = scanner?scanner->class+synctex_node_type_void_hbox:(synctex_class_t)&synctex_class_void_hbox;
+ }
+ return node;
+}
+
+/* The medium nodes correspond to kern, glue, penalty and math nodes. */
+typedef struct {
+ synctex_class_t class;
+ synctex_info_t implementation[3+SYNCTEX_WIDTH_IDX+1]; /* parent,sibling,friend,
+ * SYNCTEX_TAG,SYNCTEX_LINE,SYNCTEX_COLUMN,
+ * SYNCTEX_HORIZ,SYNCTEX_VERT,SYNCTEX_WIDTH */
+} synctex_medium_node_t;
+
+#define SYNCTEX_IS_BOX(NODE)\
+ ((NODE->class->type == synctex_node_type_vbox)\
+ || (NODE->class->type == synctex_node_type_void_vbox)\
+ || (NODE->class->type == synctex_node_type_hbox)\
+ || (NODE->class->type == synctex_node_type_void_hbox))
+
+#define SYNCTEX_HAS_CHILDREN(NODE) (NODE && SYNCTEX_CHILD(NODE))
+
+void _synctex_log_medium_node(synctex_node_t node);
+
+/* math node creator */
+synctex_node_t _synctex_new_math(synctex_scanner_t scanner);
+void _synctex_display_math(synctex_node_t node);
+
+static _synctex_class_t synctex_class_math = {
+ NULL, /* No scanner yet */
+ synctex_node_type_math, /* Node type */
+ &_synctex_new_math, /* creator */
+ &_synctex_free_leaf, /* destructor */
+ &_synctex_log_medium_node, /* log */
+ &_synctex_display_math, /* display */
+ &_synctex_implementation_0, /* parent */
+ NULL, /* No child */
+ &_synctex_implementation_1, /* sibling */
+ &_synctex_implementation_2, /* friend */
+ NULL, /* No next box */
+ (_synctex_info_getter_t)&_synctex_implementation_3
+};
+
+synctex_node_t _synctex_new_math(synctex_scanner_t scanner) {
+ synctex_node_t node = _synctex_malloc(sizeof(synctex_medium_node_t));
+ if(node) {
+ node->class = scanner?scanner->class+synctex_node_type_math:(synctex_class_t)&synctex_class_math;
+ }
+ return node;
+}
+
+/* kern node creator */
+synctex_node_t _synctex_new_kern(synctex_scanner_t scanner);
+void _synctex_display_kern(synctex_node_t node);
+
+static _synctex_class_t synctex_class_kern = {
+ NULL, /* No scanner yet */
+ synctex_node_type_kern, /* Node type */
+ &_synctex_new_kern, /* creator */
+ &_synctex_free_leaf, /* destructor */
+ &_synctex_log_medium_node, /* log */
+ &_synctex_display_kern, /* display */
+ &_synctex_implementation_0, /* parent */
+ NULL, /* No child */
+ &_synctex_implementation_1, /* sibling */
+ &_synctex_implementation_2, /* friend */
+ NULL, /* No next box */
+ (_synctex_info_getter_t)&_synctex_implementation_3
+};
+
+synctex_node_t _synctex_new_kern(synctex_scanner_t scanner) {
+ synctex_node_t node = _synctex_malloc(sizeof(synctex_medium_node_t));
+ if(node) {
+ node->class = scanner?scanner->class+synctex_node_type_kern:(synctex_class_t)&synctex_class_kern;
+ }
+ return node;
+}
+
+/* The small nodes correspond to glue and boundary nodes. */
+typedef struct {
+ synctex_class_t class;
+ synctex_info_t implementation[3+SYNCTEX_VERT_IDX+1]; /* parent,sibling,friend,
+ * SYNCTEX_TAG,SYNCTEX_LINE,SYNCTEX_COLUMN,
+ * SYNCTEX_HORIZ,SYNCTEX_VERT */
+} synctex_small_node_t;
+
+void _synctex_log_small_node(synctex_node_t node);
+/* glue node creator */
+synctex_node_t _synctex_new_glue(synctex_scanner_t scanner);
+void _synctex_display_glue(synctex_node_t node);
+
+static _synctex_class_t synctex_class_glue = {
+ NULL, /* No scanner yet */
+ synctex_node_type_glue, /* Node type */
+ &_synctex_new_glue, /* creator */
+ &_synctex_free_leaf, /* destructor */
+ &_synctex_log_medium_node, /* log */
+ &_synctex_display_glue, /* display */
+ &_synctex_implementation_0, /* parent */
+ NULL, /* No child */
+ &_synctex_implementation_1, /* sibling */
+ &_synctex_implementation_2, /* friend */
+ NULL, /* No next box */
+ (_synctex_info_getter_t)&_synctex_implementation_3
+};
+synctex_node_t _synctex_new_glue(synctex_scanner_t scanner) {
+ synctex_node_t node = _synctex_malloc(sizeof(synctex_medium_node_t));
+ if(node) {
+ node->class = scanner?scanner->class+synctex_node_type_glue:(synctex_class_t)&synctex_class_glue;
+ }
+ return node;
+}
+
+/* boundary node creator */
+synctex_node_t _synctex_new_boundary(synctex_scanner_t scanner);
+void _synctex_display_boundary(synctex_node_t node);
+
+static _synctex_class_t synctex_class_boundary = {
+ NULL, /* No scanner yet */
+ synctex_node_type_boundary, /* Node type */
+ &_synctex_new_boundary, /* creator */
+ &_synctex_free_leaf, /* destructor */
+ &_synctex_log_small_node, /* log */
+ &_synctex_display_boundary, /* display */
+ &_synctex_implementation_0, /* parent */
+ NULL, /* No child */
+ &_synctex_implementation_1, /* sibling */
+ &_synctex_implementation_2, /* friend */
+ NULL, /* No next box */
+ (_synctex_info_getter_t)&_synctex_implementation_3
+};
+
+synctex_node_t _synctex_new_boundary(synctex_scanner_t scanner) {
+ synctex_node_t node = _synctex_malloc(sizeof(synctex_small_node_t));
+ if(node) {
+ node->class = scanner?scanner->class+synctex_node_type_boundary:(synctex_class_t)&synctex_class_boundary;
+ }
+ return node;
+}
+
+# define SYNCTEX_NAME_IDX (SYNCTEX_TAG_IDX+1)
+# define SYNCTEX_NAME(NODE) SYNCTEX_INFO(NODE)[SYNCTEX_NAME_IDX].PTR
+
+/* Input nodes only know about their sibling, which is another input node.
+ * The synctex information is the SYNCTEX_TAG and SYNCTEX_NAME*/
+typedef struct {
+ synctex_class_t class;
+ synctex_info_t implementation[1+SYNCTEX_NAME_IDX+1]; /* sibling,
+ * SYNCTEX_TAG,SYNCTEX_NAME */
+} synctex_input_t;
+
+synctex_node_t _synctex_new_input(synctex_scanner_t scanner);
+void _synctex_free_input(synctex_node_t node);
+void _synctex_display_input(synctex_node_t node);
+void _synctex_log_input(synctex_node_t sheet);
+
+static _synctex_class_t synctex_class_input = {
+ NULL, /* No scanner yet */
+ synctex_node_type_input, /* Node type */
+ &_synctex_new_input, /* creator */
+ &_synctex_free_input, /* destructor */
+ &_synctex_log_input, /* log */
+ &_synctex_display_input, /* display */
+ NULL, /* No parent */
+ NULL, /* No child */
+ &_synctex_implementation_0, /* sibling */
+ NULL, /* No friend */
+ NULL, /* No next box */
+ (_synctex_info_getter_t)&_synctex_implementation_1
+};
+
+synctex_node_t _synctex_new_input(synctex_scanner_t scanner) {
+ synctex_node_t node = _synctex_malloc(sizeof(synctex_input_t));
+ if(node) {
+ node->class = scanner?scanner->class+synctex_node_type_input:(synctex_class_t)&synctex_class_input;
+ }
+ return node;
+}
+void _synctex_free_input(synctex_node_t node){
+ if(node) {
+ SYNCTEX_FREE(SYNCTEX_SIBLING(node));
+ free(SYNCTEX_NAME(node));
+ free(node);
+ }
+}
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark Navigation
+# endif
+synctex_node_t synctex_node_parent(synctex_node_t node)
+{
+ return SYNCTEX_PARENT(node);
+}
+synctex_node_t synctex_node_sheet(synctex_node_t node)
+{
+ while(node && node->class->type != synctex_node_type_sheet) {
+ node = SYNCTEX_PARENT(node);
+ }
+ /* exit the while loop either when node is NULL or node is a sheet */
+ return node;
+}
+synctex_node_t synctex_node_child(synctex_node_t node)
+{
+ return SYNCTEX_CHILD(node);
+}
+synctex_node_t synctex_node_sibling(synctex_node_t node)
+{
+ return SYNCTEX_SIBLING(node);
+}
+synctex_node_t synctex_node_next(synctex_node_t node) {
+ if(SYNCTEX_CHILD(node)) {
+ return SYNCTEX_CHILD(node);
+ }
+sibling:
+ if(SYNCTEX_SIBLING(node)) {
+ return SYNCTEX_SIBLING(node);
+ }
+ if((node = SYNCTEX_PARENT(node))) {
+ if(node->class->type == synctex_node_type_sheet) {/* EXC_BAD_ACCESS? */
+ return NULL;
+ }
+ goto sibling;
+ }
+ return NULL;
+}
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark CLASS
+# endif
+
+/* Public node accessor: the type */
+synctex_node_type_t synctex_node_type(synctex_node_t node) {
+ if(node) {
+ return (((node)->class))->type;
+ }
+ return synctex_node_type_error;
+}
+
+/* Public node accessor: the human readable type */
+const char * synctex_node_isa(synctex_node_t node) {
+static const char * isa[synctex_node_number_of_types] =
+ {"Not a node","input","sheet","vbox","void vbox","hbox","void hbox","kern","glue","math","boundary"};
+ return isa[synctex_node_type(node)];
+}
+
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark SYNCTEX_LOG
+# endif
+
+# define SYNCTEX_LOG(NODE) SYNCTEX_MSG_SEND(NODE,log)
+
+/* Public node logger */
+void synctex_node_log(synctex_node_t node) {
+ SYNCTEX_LOG(node);
+}
+
+# define SYNCTEX_DISPLAY(NODE) SYNCTEX_MSG_SEND(NODE,display)
+
+void synctex_node_display(synctex_node_t node) {
+ SYNCTEX_DISPLAY(node);
+}
+
+void _synctex_display_input(synctex_node_t node) {
+ printf("....Input:%i:%s\n",
+ SYNCTEX_TAG(node),
+ SYNCTEX_NAME(node));
+ SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));
+}
+
+void _synctex_log_sheet(synctex_node_t sheet) {
+ if(sheet) {
+ printf("%s:%i\n",synctex_node_isa(sheet),SYNCTEX_PAGE(sheet));
+ printf("SELF:%p",(void *)sheet);
+ printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(sheet));
+ printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(sheet));
+ printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(sheet));
+ printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(sheet));
+ }
+}
+
+void _synctex_log_small_node(synctex_node_t node) {
+ printf("%s:%i,%i:%i,%i\n",
+ synctex_node_isa(node),
+ SYNCTEX_TAG(node),
+ SYNCTEX_LINE(node),
+ SYNCTEX_HORIZ(node),
+ SYNCTEX_VERT(node));
+ printf("SELF:%p",(void *)node);
+ printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node));
+ printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node));
+ printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node));
+ printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(node));
+}
+
+void _synctex_log_medium_node(synctex_node_t node) {
+ printf("%s:%i,%i:%i,%i:%i\n",
+ synctex_node_isa(node),
+ SYNCTEX_TAG(node),
+ SYNCTEX_LINE(node),
+ SYNCTEX_HORIZ(node),
+ SYNCTEX_VERT(node),
+ SYNCTEX_WIDTH(node));
+ printf("SELF:%p",(void *)node);
+ printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node));
+ printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node));
+ printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node));
+ printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(node));
+}
+
+void _synctex_log_void_box(synctex_node_t node) {
+ printf("%s",synctex_node_isa(node));
+ printf(":%i",SYNCTEX_TAG(node));
+ printf(",%i",SYNCTEX_LINE(node));
+ printf(",%i",0);
+ printf(":%i",SYNCTEX_HORIZ(node));
+ printf(",%i",SYNCTEX_VERT(node));
+ printf(":%i",SYNCTEX_WIDTH(node));
+ printf(",%i",SYNCTEX_HEIGHT(node));
+ printf(",%i",SYNCTEX_DEPTH(node));
+ printf("\nSELF:%p",(void *)node);
+ printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node));
+ printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node));
+ printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node));
+ printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(node));
+}
+
+void _synctex_log_box(synctex_node_t node) {
+ printf("%s",synctex_node_isa(node));
+ printf(":%i",SYNCTEX_TAG(node));
+ printf(",%i",SYNCTEX_LINE(node));
+ printf(",%i",0);
+ printf(":%i",SYNCTEX_HORIZ(node));
+ printf(",%i",SYNCTEX_VERT(node));
+ printf(":%i",SYNCTEX_WIDTH(node));
+ printf(",%i",SYNCTEX_HEIGHT(node));
+ printf(",%i",SYNCTEX_DEPTH(node));
+ printf("\nSELF:%p",(void *)node);
+ printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node));
+ printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node));
+ printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node));
+ printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(node));
+}
+
+void _synctex_log_horiz_box(synctex_node_t node) {
+ printf("%s",synctex_node_isa(node));
+ printf(":%i",SYNCTEX_TAG(node));
+ printf(",%i",SYNCTEX_LINE(node));
+ printf(",%i",0);
+ printf(":%i",SYNCTEX_HORIZ(node));
+ printf(",%i",SYNCTEX_VERT(node));
+ printf(":%i",SYNCTEX_WIDTH(node));
+ printf(",%i",SYNCTEX_HEIGHT(node));
+ printf(",%i",SYNCTEX_DEPTH(node));
+ printf("/%i",SYNCTEX_HORIZ_V(node));
+ printf(",%i",SYNCTEX_VERT_V(node));
+ printf(":%i",SYNCTEX_WIDTH_V(node));
+ printf(",%i",SYNCTEX_HEIGHT_V(node));
+ printf(",%i",SYNCTEX_DEPTH_V(node));
+ printf("\nSELF:%p",(void *)node);
+ printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node));
+ printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node));
+ printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node));
+ printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(node));
+}
+
+void _synctex_log_input(synctex_node_t node) {
+ printf("%s",synctex_node_isa(node));
+ printf(":%i",SYNCTEX_TAG(node));
+ printf(",%s",SYNCTEX_NAME(node));
+ printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node));
+}
+
+void _synctex_display_sheet(synctex_node_t sheet) {
+ if(sheet) {
+ printf("....{%i\n",SYNCTEX_PAGE(sheet));
+ SYNCTEX_DISPLAY(SYNCTEX_CHILD(sheet));
+ printf("....}\n");
+ SYNCTEX_DISPLAY(SYNCTEX_SIBLING(sheet));
+ }
+}
+
+void _synctex_display_vbox(synctex_node_t node) {
+ printf("....[%i,%i:%i,%i:%i,%i,%i\n",
+ SYNCTEX_TAG(node),
+ SYNCTEX_LINE(node),
+ SYNCTEX_HORIZ(node),
+ SYNCTEX_VERT(node),
+ SYNCTEX_WIDTH(node),
+ SYNCTEX_HEIGHT(node),
+ SYNCTEX_DEPTH(node));
+ SYNCTEX_DISPLAY(SYNCTEX_CHILD(node));
+ printf("....]\n");
+ SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));
+}
+
+void _synctex_display_hbox(synctex_node_t node) {
+ printf("....(%i,%i:%i,%i:%i,%i,%i\n",
+ SYNCTEX_TAG(node),
+ SYNCTEX_LINE(node),
+ SYNCTEX_HORIZ(node),
+ SYNCTEX_VERT(node),
+ SYNCTEX_WIDTH(node),
+ SYNCTEX_HEIGHT(node),
+ SYNCTEX_DEPTH(node));
+ SYNCTEX_DISPLAY(SYNCTEX_CHILD(node));
+ printf("....)\n");
+ SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));
+}
+
+void _synctex_display_void_vbox(synctex_node_t node) {
+ printf("....v%i,%i;%i,%i:%i,%i,%i\n",
+ SYNCTEX_TAG(node),
+ SYNCTEX_LINE(node),
+ SYNCTEX_HORIZ(node),
+ SYNCTEX_VERT(node),
+ SYNCTEX_WIDTH(node),
+ SYNCTEX_HEIGHT(node),
+ SYNCTEX_DEPTH(node));
+ SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));
+}
+
+void _synctex_display_void_hbox(synctex_node_t node) {
+ printf("....h%i,%i:%i,%i:%i,%i,%i\n",
+ SYNCTEX_TAG(node),
+ SYNCTEX_LINE(node),
+ SYNCTEX_HORIZ(node),
+ SYNCTEX_VERT(node),
+ SYNCTEX_WIDTH(node),
+ SYNCTEX_HEIGHT(node),
+ SYNCTEX_DEPTH(node));
+ SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));
+}
+
+void _synctex_display_glue(synctex_node_t node) {
+ printf("....glue:%i,%i:%i,%i\n",
+ SYNCTEX_TAG(node),
+ SYNCTEX_LINE(node),
+ SYNCTEX_HORIZ(node),
+ SYNCTEX_VERT(node));
+ SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));
+}
+
+void _synctex_display_math(synctex_node_t node) {
+ printf("....math:%i,%i:%i,%i\n",
+ SYNCTEX_TAG(node),
+ SYNCTEX_LINE(node),
+ SYNCTEX_HORIZ(node),
+ SYNCTEX_VERT(node));
+ SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));
+}
+
+void _synctex_display_kern(synctex_node_t node) {
+ printf("....kern:%i,%i:%i,%i:%i\n",
+ SYNCTEX_TAG(node),
+ SYNCTEX_LINE(node),
+ SYNCTEX_HORIZ(node),
+ SYNCTEX_VERT(node),
+ SYNCTEX_WIDTH(node));
+ SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));
+}
+
+void _synctex_display_boundary(synctex_node_t node) {
+ printf("....boundary:%i,%i:%i,%i\n",
+ SYNCTEX_TAG(node),
+ SYNCTEX_LINE(node),
+ SYNCTEX_HORIZ(node),
+ SYNCTEX_VERT(node));
+ SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));
+}
+
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark SCANNER
+# endif
+
+/* Here are gathered all the possible status that the next scanning functions will return.
+ * All these functions return a status, and pass their result through pointers.
+ * Negative values correspond to errors.
+ * The management of the buffer is causing some significant overhead.
+ * Every function that may access the buffer returns a status related to the buffer and file state.
+ * status >= SYNCTEX_STATUS_OK means the function worked as expected
+ * status < SYNCTEX_STATUS_OK means the function did not work as expected
+ * status == SYNCTEX_STATUS_NOT_OK means the function did not work as expected but there is still some material to parse.
+ * status == SYNCTEX_STATUS_EOF means the function did not work as expected and there is no more material.
+ * status<SYNCTEX_STATUS_EOF means an error
+ */
+typedef int synctex_status_t;
+/* When the end of the synctex file has been reached: */
+# define SYNCTEX_STATUS_EOF 0
+/* When the function could not return the value it was asked for: */
+# define SYNCTEX_STATUS_NOT_OK (SYNCTEX_STATUS_EOF+1)
+/* When the function returns the value it was asked for: */
+# define SYNCTEX_STATUS_OK (SYNCTEX_STATUS_NOT_OK+1)
+/* Generic error: */
+# define SYNCTEX_STATUS_ERROR -1
+/* Parameter error: */
+# define SYNCTEX_STATUS_BAD_ARGUMENT -2
+
+# define SYNCTEX_FILE (scanner->file)
+
+/* Actually, the minimum buffer size is driven by integer and float parsing.
+ * ±0.123456789e123
+ */
+# define SYNCTEX_BUFFER_MIN_SIZE 16
+# define SYNCTEX_BUFFER_SIZE 32768
+
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark Prototypes
+# endif
+void _synctex_log_void_box(synctex_node_t node);
+void _synctex_log_box(synctex_node_t node);
+void _synctex_log_horiz_box(synctex_node_t node);
+void _synctex_log_input(synctex_node_t node);
+synctex_status_t _synctex_buffer_get_available_size(synctex_scanner_t scanner, size_t * size_ptr);
+synctex_status_t _synctex_next_line(synctex_scanner_t scanner);
+synctex_status_t _synctex_match_string(synctex_scanner_t scanner, const char * the_string);
+synctex_status_t _synctex_decode_int(synctex_scanner_t scanner, int* value_ref);
+synctex_status_t _synctex_decode_string(synctex_scanner_t scanner, char ** value_ref);
+synctex_status_t _synctex_scan_input(synctex_scanner_t scanner);
+synctex_status_t _synctex_scan_preamble(synctex_scanner_t scanner);
+synctex_status_t _synctex_scan_float_and_dimension(synctex_scanner_t scanner, float * value_ref);
+synctex_status_t _synctex_scan_post_scriptum(synctex_scanner_t scanner);
+int _synctex_scan_postamble(synctex_scanner_t scanner);
+synctex_status_t _synctex_setup_visible_box(synctex_node_t box);
+synctex_status_t _synctex_horiz_box_setup_visible(synctex_node_t node,int h, int v);
+synctex_status_t _synctex_scan_sheet(synctex_scanner_t scanner, synctex_node_t parent);
+synctex_status_t _synctex_scan_content(synctex_scanner_t scanner);
+int synctex_scanner_pre_x_offset(synctex_scanner_t scanner);
+int synctex_scanner_pre_y_offset(synctex_scanner_t scanner);
+const char * synctex_scanner_get_output_fmt(synctex_scanner_t scanner);
+int _synctex_node_is_box(synctex_node_t node);
+int _synctex_bail(void);
+
+/* Try to ensure that the buffer contains at least size bytes.
+ * Passing a huge size argument means the whole buffer length.
+ * Passing a null size argument means return the available buffer length, without reading the file.
+ * In that case, the return status is always SYNCTEX_STATUS_OK unless the given scanner is NULL,
+ * in which case, SYNCTEX_STATUS_BAD_ARGUMENT is returned.
+ * The value returned in size_ptr is the number of bytes now available in the buffer.
+ * This is a nonnegative integer, it may take the value 0.
+ * It is the responsibility of the caller to test whether this size is conforming to its needs.
+ * Negative values may return in case of error, actually
+ * when there was an error reading the synctex file. */
+synctex_status_t _synctex_buffer_get_available_size(synctex_scanner_t scanner, size_t * size_ptr) {
+ size_t available = 0;
+ if(NULL == scanner || NULL == size_ptr) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+# define size (* size_ptr)
+ if(size>SYNCTEX_BUFFER_SIZE){
+ size = SYNCTEX_BUFFER_SIZE;
+ }
+ available = SYNCTEX_END - SYNCTEX_CUR; /* available is the number of unparsed chars in the buffer */
+ if(size<=available) {
+ /* There are already sufficiently many characters in the buffer */
+ size = available;
+ return SYNCTEX_STATUS_OK;
+ }
+ if(SYNCTEX_FILE) {
+ /* Copy the remaining part of the buffer to the beginning,
+ * then read the next part of the file */
+ int already_read = 0;
+ if(available) {
+ memmove(SYNCTEX_START, SYNCTEX_CUR, available);
+ }
+ SYNCTEX_CUR = SYNCTEX_START + available; /* the next character after the move, will change. */
+ /* Fill the buffer up to its end */
+ already_read = gzread(SYNCTEX_FILE,(void *)SYNCTEX_CUR,SYNCTEX_BUFFER_SIZE - available);
+ if(already_read>0) {
+ /* We assume that 0<already_read<=SYNCTEX_BUFFER_SIZE - available, such that
+ * SYNCTEX_CUR + already_read = SYNCTEX_START + available + already_read <= SYNCTEX_START + SYNCTEX_BUFFER_SIZE */
+ SYNCTEX_END = SYNCTEX_CUR + already_read;
+ /* If the end of the file was reached, all the required SYNCTEX_BUFFER_SIZE - available
+ * may not be filled with values from the file.
+ * In that case, the buffer should stop properly after already_read characters. */
+ * SYNCTEX_END = '\0';
+ SYNCTEX_CUR = SYNCTEX_START;
+ size = SYNCTEX_END - SYNCTEX_CUR; /* == old available + already_read*/
+ return SYNCTEX_STATUS_OK; /* May be available is less than size, the caller will have to test. */
+ } else if(0>already_read) {
+ /* There is an error in zlib */
+ int errnum = 0;
+ const char * error_string = gzerror(SYNCTEX_FILE, &errnum);
+ if(Z_ERRNO == errnum) {
+ /* There is an error in zlib caused by the file system */
+ _synctex_error("gzread error from the file system (%i)",errno);
+ } else {
+ _synctex_error("gzread error (%i:%i,%s)",already_read,errnum,error_string);
+ }
+ return SYNCTEX_STATUS_ERROR;
+ } else {
+ /* Nothing was read, we are at the end of the file. */
+ gzclose(SYNCTEX_FILE);
+ SYNCTEX_FILE = NULL;
+ SYNCTEX_END = SYNCTEX_CUR;
+ SYNCTEX_CUR = SYNCTEX_START;
+ * SYNCTEX_END = '\0';/* Terminate the string properly.*/
+ size = SYNCTEX_END - SYNCTEX_CUR;
+ return SYNCTEX_STATUS_EOF; /* there might be a bit of text left */
+ }
+ /* At this point, the function has already returned from above */
+ }
+ /* We cannot enlarge the buffer because the end of the file was reached. */
+ size = available;
+ return SYNCTEX_STATUS_EOF;
+# undef size
+}
+
+/* Used when parsing the synctex file.
+ * Advance to the next character starting a line.
+ * Actually, only '\n' is recognized as end of line marker.
+ * On normal completion, the returned value is the number of unparsed characters available in the buffer.
+ * In general, it is a positive value, 0 meaning that the end of file was reached.
+ * -1 is returned in case of error, actually because there was an error while feeding the buffer.
+ * When the function returns with no error, SYNCTEX_CUR points to the first character of the next line, if any.
+ * J. Laurens: Sat May 10 07:52:31 UTC 2008
+ */
+synctex_status_t _synctex_next_line(synctex_scanner_t scanner) {
+ synctex_status_t status = SYNCTEX_STATUS_OK;
+ size_t available = 0;
+ if(NULL == scanner) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+infinite_loop:
+ while(SYNCTEX_CUR<SYNCTEX_END) {
+ if(*SYNCTEX_CUR == '\n') {
+ ++SYNCTEX_CUR;
+ available = 1;
+ return _synctex_buffer_get_available_size(scanner, &available);
+ }
+ ++SYNCTEX_CUR;
+ }
+ /* Here, we have SYNCTEX_CUR == SYNCTEX_END, such that the next call to _synctex_buffer_get_available_size
+ * will read another bunch of synctex file. Little by little, we advance to the end of the file. */
+ available = 1;
+ status = _synctex_buffer_get_available_size(scanner, &available);
+ if(status<=0) {
+ return status;
+ }
+ goto infinite_loop;
+}
+
+/* Scan the given string.
+ * Both scanner and the_string must not be NULL, and the_string must not be 0 length.
+ * SYNCTEX_STATUS_OK is returned if the string is found,
+ * SYNCTEX_STATUS_EOF is returned when the EOF is reached,
+ * SYNCTEX_STATUS_NOT_OK is returned is the string is not found,
+ * an error status is returned otherwise.
+ * This is a critical method because buffering renders things more difficult.
+ * The given string might be as long as the maximum size_t value.
+ * As side effect, the buffer state may have changed if the given argument string can't fit into the buffer.
+ */
+synctex_status_t _synctex_match_string(synctex_scanner_t scanner, const char * the_string) {
+ size_t tested_len = 0; /* the number of characters at the beginning of the_string that match */
+ size_t remaining_len = 0; /* the number of remaining characters of the_string that should match */
+ size_t available = 0;
+ synctex_status_t status = 0;
+ if(NULL == scanner || NULL == the_string) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+ remaining_len = strlen(the_string); /* All the_string should match */
+ if(0 == remaining_len) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+ /* How many characters available in the buffer? */
+ available = remaining_len;
+ status = _synctex_buffer_get_available_size(scanner,&available);
+ if(status<SYNCTEX_STATUS_EOF) {
+ return status;
+ }
+ /* Maybe we have less characters than expected because the buffer is too small. */
+ if(available>=remaining_len) {
+ /* The buffer is sufficiently big to hold the expected number of characters. */
+ if(strncmp((char *)SYNCTEX_CUR,the_string,remaining_len)) {
+ return SYNCTEX_STATUS_NOT_OK;
+ }
+return_OK:
+ /* Advance SYNCTEX_CUR to the next character after the_string. */
+ SYNCTEX_CUR += remaining_len;
+ return SYNCTEX_STATUS_OK;
+ } else if(strncmp((char *)SYNCTEX_CUR,the_string,available)) {
+ /* No need to goo further, this is not the expected string in the buffer. */
+ return SYNCTEX_STATUS_NOT_OK;
+ } else if(SYNCTEX_FILE) {
+ /* The buffer was too small to contain remaining_len characters.
+ * We have to cut the string into pieces. */
+ z_off_t offset = 0L;
+ /* the first part of the string is found, advance the_string to the next untested character. */
+ the_string += available;
+ /* update the remaining length and the parsed length. */
+ remaining_len -= available;
+ tested_len += available;
+ SYNCTEX_CUR += available; /* We validate the tested characters. */
+ if(0 == remaining_len) {
+ /* Nothing left to test, we have found the given string, we return the length. */
+ return tested_len;
+ }
+ /* We also have to record the current state of the file cursor because
+ * if the_string does not match, all this should be a totally blank operation,
+ * for which the file and buffer states should not be modified at all.
+ * In fact, the states of the buffer before and after this function are in general different
+ * but they are totally equivalent as long as the values of the buffer before SYNCTEX_CUR
+ * can be safely discarded. */
+ offset = gztell(SYNCTEX_FILE);
+ /* offset now corresponds to the first character of the file that was not buffered. */
+ available = SYNCTEX_CUR - SYNCTEX_START; /* available can be used as temporary placeholder. */
+ /* available now corresponds to the number of chars that where already buffered and
+ * that match the head of the_string. If in fine the_string does not match, all these chars must be recovered
+ * because the buffer contents is completely replaced by _synctex_buffer_get_available_size.
+ * They were buffered from offset-len location in the file. */
+ offset -= available;
+more_characters:
+ /* There is still some work to be done, so read another bunch of file.
+ * This is the second call to _synctex_buffer_get_available_size,
+ * which means that the actual contents of the buffer will be discarded.
+ * We will definitely have to recover the previous state in case we do not find the expected string. */
+ available = remaining_len;
+ status = _synctex_buffer_get_available_size(scanner,&available);
+ if(status<SYNCTEX_STATUS_EOF) {
+ return status; /* This is an error, no need to go further. */
+ }
+ if(available==0) {
+ /* Missing characters: recover the initial state of the file and return. */
+return_NOT_OK:
+ if(offset != gzseek(SYNCTEX_FILE,offset,SEEK_SET)) {
+ /* This is a critical error, we could not recover the previous state. */
+ _synctex_error("can't seek file");
+ return SYNCTEX_STATUS_ERROR;
+ }
+ /* Next time we are asked to fill the buffer,
+ * we will read a complete bunch of text from the file. */
+ SYNCTEX_CUR = SYNCTEX_END;
+ return SYNCTEX_STATUS_NOT_OK;
+ }
+ if(available<remaining_len) {
+ /* We'll have to loop one more time. */
+ if(strncmp((char *)SYNCTEX_CUR,the_string,available)) {
+ /* This is not the expected string, recover the previous state and return. */
+ goto return_NOT_OK;
+ }
+ /* Advance the_string to the first untested character. */
+ the_string += available;
+ /* update the remaining length and the parsed length. */
+ remaining_len -= available;
+ tested_len += available;
+ SYNCTEX_CUR += available; /* We validate the tested characters. */
+ if(0 == remaining_len) {
+ /* Nothing left to test, we have found the given string. */
+ return SYNCTEX_STATUS_OK;
+ }
+ goto more_characters;
+ }
+ /* This is the last step. */
+ if(strncmp((char *)SYNCTEX_CUR,the_string,remaining_len)) {
+ /* This is not the expected string, recover the previous state and return. */
+ goto return_NOT_OK;
+ }
+ goto return_OK;
+ } else {
+ /* The buffer can't contain the given string argument, and the EOF was reached */
+ return SYNCTEX_STATUS_EOF;
+ }
+}
+
+/* Used when parsing the synctex file.
+ * Decode an integer.
+ * First, field separators, namely ':' and ',' characters are skipped
+ * The returned value is negative if there is an unrecoverable error.
+ * It is SYNCTEX_STATUS_NOT_OK if an integer could not be parsed, for example
+ * if the characters at the current cursor position are not digits or
+ * if the end of the file has been reached.
+ * It is SYNCTEX_STATUS_OK if an int has been successfully parsed.
+ * The given scanner argument must not be NULL, on the contrary, value_ref may be NULL.
+ */
+synctex_status_t _synctex_decode_int(synctex_scanner_t scanner, int* value_ref) {
+ char * ptr = NULL;
+ char * end = NULL;
+ int result = 0;
+ size_t available = 0;
+ synctex_status_t status = 0;
+ if(NULL == scanner) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+ available = SYNCTEX_BUFFER_MIN_SIZE;
+ status = _synctex_buffer_get_available_size(scanner, &available);
+ if(status<SYNCTEX_STATUS_EOF) {
+ return status;/* Forward error. */
+ }
+ if(available==0) {
+ return SYNCTEX_STATUS_EOF;/* it is the end of file. */
+ }
+ ptr = SYNCTEX_CUR;
+ if(*ptr==':' || *ptr==',') {
+ ++ptr;
+ --available;
+ if(available==0) {
+ return SYNCTEX_STATUS_NOT_OK;/* It is not possible to scan an int */
+ }
+ }
+ result = (int)strtol(ptr, &end, 10);
+ if(end>ptr) {
+ SYNCTEX_CUR = end;
+ if(value_ref) {
+ * value_ref = result;
+ }
+ return SYNCTEX_STATUS_OK;/* Successfully scanned an int */
+ }
+ return SYNCTEX_STATUS_NOT_OK;/* Could not scan an int */
+}
+
+/* The purpose of this function is to read a string.
+ * A string is an array of characters from the current parser location
+ * and before the next '\n' character.
+ * If a string was properly decoded, it is returned in value_ref and
+ * the cursor points to the new line marker.
+ * The returned string was alloced on the heap, the caller is the owner and
+ * is responsible to free it in due time.
+ * If no string is parsed, * value_ref is undefined.
+ * The maximum length of a string that a scanner can decode is platform dependent, namely UINT_MAX.
+ * If you just want to blindly parse the file up to the end of the current line,
+ * use _synctex_next_line instead.
+ * On return, the scanner cursor is unchanged if a string could not be scanned or
+ * points to the terminating '\n' character otherwise. As a consequence,
+ * _synctex_next_line is necessary after.
+ * If either scanner or value_ref is NULL, it is considered as an error and
+ * SYNCTEX_STATUS_BAD_ARGUMENT is returned.
+ */
+synctex_status_t _synctex_decode_string(synctex_scanner_t scanner, char ** value_ref) {
+ char * end = NULL;
+ size_t current_size = 0;
+ size_t new_size = 0;
+ size_t len = 0;/* The number of bytes to copy */
+ size_t available = 0;
+ synctex_status_t status = 0;
+ if(NULL == scanner || NULL == value_ref) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+ /* The buffer must at least contain one character: the '\n' end of line marker */
+ if(SYNCTEX_CUR>=SYNCTEX_END) {
+ available = 1;
+ status = _synctex_buffer_get_available_size(scanner,&available);
+ if(status < 0) {
+ return status;
+ }
+ if(0 == available) {
+ return SYNCTEX_STATUS_EOF;
+ }
+ }
+ /* Now we are sure that there is at least one available character, either because
+ * SYNCTEX_CUR was already < SYNCTEX_END, or because the buffer has been properly filled. */
+ /* end will point to the next unparsed '\n' character in the file, when mapped to the buffer. */
+ end = SYNCTEX_CUR;
+ * value_ref = NULL;/* Initialize, it will be realloc'ed */
+ /* We scan all the characters up to the next '\n' */
+next_character:
+ if(end<SYNCTEX_END) {
+ if(*end == '\n') {
+ /* OK, we found where to stop */
+ len = end - SYNCTEX_CUR;
+ if(current_size>UINT_MAX-len-1) {
+ /* But we have reached the limit: we do not have current_size+len+1>UINT_MAX.
+ * We return the missing amount of memory.
+ * This will never occur in practice. */
+ return UINT_MAX-len-1 - current_size;
+ }
+ new_size = current_size+len;
+ /* We have current_size+len+1<=UINT_MAX
+ * or equivalently new_size<UINT_MAX,
+ * where we have assumed that len<UINT_MAX */
+ if((* value_ref = realloc(* value_ref,new_size+1)) != NULL) {
+ if(memcpy((*value_ref)+current_size,SYNCTEX_CUR,len)) {
+ (* value_ref)[new_size]='\0'; /* Terminate the string */
+ SYNCTEX_CUR += len;/* Advance to the terminating '\n' */
+ return SYNCTEX_STATUS_OK;
+ }
+ free(* value_ref);
+ * value_ref = NULL;
+ _synctex_error("could not copy memory (1).");
+ return SYNCTEX_STATUS_ERROR;
+ }
+ _synctex_error("could not allocate memory (1).");
+ return SYNCTEX_STATUS_ERROR;
+ } else {
+ ++end;
+ goto next_character;
+ }
+ } else {
+ /* end == SYNCTEX_END */
+ len = SYNCTEX_END - SYNCTEX_CUR;
+ if(current_size>UINT_MAX-len-1) {
+ /* We have reached the limit. */
+ _synctex_error("limit reached (missing %i).",current_size-(UINT_MAX-len-1));
+ return SYNCTEX_STATUS_ERROR;
+ }
+ new_size = current_size+len;
+ if((* value_ref = realloc(* value_ref,new_size+1)) != NULL) {
+ if(memcpy((*value_ref)+current_size,SYNCTEX_CUR,len)) {
+ (* value_ref)[new_size]='\0'; /* Terminate the string */
+ SYNCTEX_CUR = SYNCTEX_END;/* Advance the cursor to the end of the bufer */
+ return SYNCTEX_STATUS_OK;
+ }
+ free(* value_ref);
+ * value_ref = NULL;
+ _synctex_error("could not copy memory (2).");
+ return SYNCTEX_STATUS_ERROR;
+ }
+ /* Huge memory problem */
+ _synctex_error("could not allocate memory (2).");
+ return SYNCTEX_STATUS_ERROR;
+ }
+}
+
+/* Used when parsing the synctex file.
+ * Read an Input record.
+ */
+synctex_status_t _synctex_scan_input(synctex_scanner_t scanner) {
+ synctex_status_t status = 0;
+ size_t available = 0;
+ synctex_node_t input = NULL;
+ if(NULL == scanner) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+ status = _synctex_match_string(scanner,"Input:");
+ if(status<SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ /* Create a node */
+ input = _synctex_new_input(scanner);
+ if(NULL == input) {
+ _synctex_error("could not create an input node.");
+ return SYNCTEX_STATUS_ERROR;
+ }
+ /* Decode the synctag */
+ status = _synctex_decode_int(scanner,&(SYNCTEX_TAG(input)));
+ if(status<SYNCTEX_STATUS_OK) {
+ _synctex_error("bad format of input node.");
+ SYNCTEX_FREE(input);
+ return status;
+ }
+ /* The next character is a field separator, we expect one character in the buffer. */
+ available = 1;
+ status = _synctex_buffer_get_available_size(scanner, &available);
+ if(status<=SYNCTEX_STATUS_ERROR) {
+ return status;
+ }
+ if(0 == available) {
+ return SYNCTEX_STATUS_EOF;
+ }
+ /* We can now safely advance to the next character, stepping over the field separator. */
+ ++SYNCTEX_CUR;
+ --available;
+ /* Then we scan the file name */
+ status = _synctex_decode_string(scanner,&(SYNCTEX_NAME(input)));
+ if(status<SYNCTEX_STATUS_OK) {
+ SYNCTEX_FREE(input);
+ return status;
+ }
+ /* Prepend this input node to the input linked list of the scanner */
+ SYNCTEX_SET_SIBLING(input,scanner->input);
+ scanner->input = input;
+ return _synctex_next_line(scanner);/* read the line termination character, if any */
+ /* Now, set up the path */
+}
+
+typedef synctex_status_t (*synctex_decoder_t)(synctex_scanner_t,void *);
+
+synctex_status_t _synctex_scan_named(synctex_scanner_t scanner,const char * name,void * value_ref,synctex_decoder_t decoder);
+
+/* Used when parsing the synctex file.
+ * Read one of the settings.
+ * On normal completion, returns SYNCTEX_STATUS_OK.
+ * On error, returns SYNCTEX_STATUS_ERROR.
+ * Both arguments must not be NULL.
+ * On return, the scanner points to the next character after the decoded object whatever it is.
+ * It is the responsibility of the caller to prepare the scanner for the next line.
+ */
+synctex_status_t _synctex_scan_named(synctex_scanner_t scanner,const char * name,void * value_ref,synctex_decoder_t decoder) {
+ synctex_status_t status = 0;
+ if(NULL == scanner || NULL == name || NULL == value_ref || NULL == decoder) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+not_found:
+ status = _synctex_match_string(scanner,name);
+ if(status<SYNCTEX_STATUS_NOT_OK) {
+ return status;
+ } else if(status == SYNCTEX_STATUS_NOT_OK) {
+ status = _synctex_next_line(scanner);
+ if(status<SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ goto not_found;
+ }
+ /* A line is found, scan the value */
+ return (*decoder)(scanner,value_ref);
+}
+
+/* Used when parsing the synctex file.
+ * Read the preamble.
+ */
+synctex_status_t _synctex_scan_preamble(synctex_scanner_t scanner) {
+ synctex_status_t status = 0;
+ if(NULL == scanner) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+ status = _synctex_scan_named(scanner,"SyncTeX Version:",&(scanner->version),(synctex_decoder_t)&_synctex_decode_int);
+ if(status<SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ status = _synctex_next_line(scanner);
+ if(status<SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ /* Read all the input records */
+ do {
+ status = _synctex_scan_input(scanner);
+ if(status<SYNCTEX_STATUS_NOT_OK) {
+ return status;
+ }
+ } while(status == SYNCTEX_STATUS_OK);
+ /* the loop exits when status == SYNCTEX_STATUS_NOT_OK */
+ /* Now read all the required settings. */
+ status = _synctex_scan_named(scanner,"Output:",&(scanner->output_fmt),(synctex_decoder_t)&_synctex_decode_string);
+ if(status<SYNCTEX_STATUS_NOT_OK) {
+ return status;
+ }
+ status = _synctex_next_line(scanner);
+ if(status<SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ status = _synctex_scan_named(scanner,"Magnification:",&(scanner->pre_magnification),(synctex_decoder_t)&_synctex_decode_int);
+ if(status<SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ status = _synctex_next_line(scanner);
+ if(status<SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ status = _synctex_scan_named(scanner,"Unit:",&(scanner->pre_unit),(synctex_decoder_t)&_synctex_decode_int);
+ if(status<SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ status = _synctex_next_line(scanner);
+ if(status<SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ status = _synctex_scan_named(scanner,"X Offset:",&(scanner->pre_x_offset),(synctex_decoder_t)&_synctex_decode_int);
+ if(status<SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ status = _synctex_next_line(scanner);
+ if(status<SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ status = _synctex_scan_named(scanner,"Y Offset:",&(scanner->pre_y_offset),(synctex_decoder_t)&_synctex_decode_int);
+ if(status<SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ return _synctex_next_line(scanner);
+}
+
+/* parse a float with a dimension */
+synctex_status_t _synctex_scan_float_and_dimension(synctex_scanner_t scanner, float * value_ref) {
+ synctex_status_t status = 0;
+ char * endptr = NULL;
+ float f = 0;
+#ifdef HAVE_SETLOCALE
+ char * loc = setlocale(LC_NUMERIC, NULL);
+#endif
+ size_t available = 0;
+ if(NULL == scanner || NULL == value_ref) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+ available = SYNCTEX_BUFFER_MIN_SIZE;
+ status = _synctex_buffer_get_available_size(scanner, &available);
+ if(status<SYNCTEX_STATUS_EOF) {
+ _synctex_error("problem with float.");
+ return status;
+ }
+#ifdef HAVE_SETLOCALE
+ setlocale(LC_NUMERIC, "C");
+#endif
+ f = strtod(SYNCTEX_CUR,&endptr);
+#ifdef HAVE_SETLOCALE
+ setlocale(LC_NUMERIC, loc);
+#endif
+ if(endptr == SYNCTEX_CUR) {
+ _synctex_error("a float was expected.");
+ return SYNCTEX_STATUS_ERROR;
+ }
+ SYNCTEX_CUR = endptr;
+ if((status = _synctex_match_string(scanner,"in")) >= SYNCTEX_STATUS_OK) {
+ f *= 72.27f*65536;
+ } else if(status<SYNCTEX_STATUS_EOF) {
+report_unit_error:
+ _synctex_error("problem with unit.");
+ return status;
+ } else if((status = _synctex_match_string(scanner,"cm")) >= SYNCTEX_STATUS_OK) {
+ f *= 72.27f*65536/2.54f;
+ } else if(status<0) {
+ goto report_unit_error;
+ } else if((status = _synctex_match_string(scanner,"mm")) >= SYNCTEX_STATUS_OK) {
+ f *= 72.27f*65536/25.4f;
+ } else if(status<0) {
+ goto report_unit_error;
+ } else if((status = _synctex_match_string(scanner,"pt")) >= SYNCTEX_STATUS_OK) {
+ f *= 65536.0f;
+ } else if(status<0) {
+ goto report_unit_error;
+ } else if((status = _synctex_match_string(scanner,"bp")) >= SYNCTEX_STATUS_OK) {
+ f *= 72.27f/72*65536.0f;
+ } else if(status<0) {
+ goto report_unit_error;
+ } else if((status = _synctex_match_string(scanner,"pc")) >= SYNCTEX_STATUS_OK) {
+ f *= 12.0*65536.0f;
+ } else if(status<0) {
+ goto report_unit_error;
+ } else if((status = _synctex_match_string(scanner,"sp")) >= SYNCTEX_STATUS_OK) {
+ f *= 1.0f;
+ } else if(status<0) {
+ goto report_unit_error;
+ } else if((status = _synctex_match_string(scanner,"dd")) >= SYNCTEX_STATUS_OK) {
+ f *= 1238.0f/1157*65536.0f;
+ } else if(status<0) {
+ goto report_unit_error;
+ } else if((status = _synctex_match_string(scanner,"cc")) >= SYNCTEX_STATUS_OK) {
+ f *= 14856.0f/1157*65536;
+ } else if(status<0) {
+ goto report_unit_error;
+ } else if((status = _synctex_match_string(scanner,"nd")) >= SYNCTEX_STATUS_OK) {
+ f *= 685.0f/642*65536;
+ } else if(status<0) {
+ goto report_unit_error;
+ } else if((status = _synctex_match_string(scanner,"nc")) >= SYNCTEX_STATUS_OK) {
+ f *= 1370.0f/107*65536;
+ } else if(status<0) {
+ goto report_unit_error;
+ }
+ *value_ref = f;
+ return SYNCTEX_STATUS_OK;
+}
+
+/* parse the post scriptum
+ * SYNCTEX_STATUS_OK is returned on completion
+ * a negative error is returned otherwise */
+synctex_status_t _synctex_scan_post_scriptum(synctex_scanner_t scanner) {
+ synctex_status_t status = 0;
+ char * endptr = NULL;
+#ifdef HAVE_SETLOCALE
+ char * loc = setlocale(LC_NUMERIC, NULL);
+#endif
+ if(NULL == scanner) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+ /* Scan the file until a post scriptum line is found */
+post_scriptum_not_found:
+ status = _synctex_match_string(scanner,"Post scriptum:");
+ if(status<SYNCTEX_STATUS_NOT_OK) {
+ return status;
+ }
+ if(status == SYNCTEX_STATUS_NOT_OK) {
+ status = _synctex_next_line(scanner);
+ if(status<SYNCTEX_STATUS_EOF) {
+ return status;
+ } else if(status<SYNCTEX_STATUS_OK) {
+ return SYNCTEX_STATUS_OK;/* The EOF is found, we have properly scanned the file */
+ }
+ goto post_scriptum_not_found;
+ }
+ /* We found the name, advance to the next line. */
+next_line:
+ status = _synctex_next_line(scanner);
+ if(status<SYNCTEX_STATUS_EOF) {
+ return status;
+ } else if(status<SYNCTEX_STATUS_OK) {
+ return SYNCTEX_STATUS_OK;/* The EOF is found, we have properly scanned the file */
+ }
+ /* Scanning the information */
+ status = _synctex_match_string(scanner,"Magnification:");
+ if(status == SYNCTEX_STATUS_OK ) {
+#ifdef HAVE_SETLOCALE
+ setlocale(LC_NUMERIC, "C");
+#endif
+ scanner->unit = strtod(SYNCTEX_CUR,&endptr);
+#ifdef HAVE_SETLOCALE
+ setlocale(LC_NUMERIC, loc);
+#endif
+ if(endptr == SYNCTEX_CUR) {
+ _synctex_error("bad magnification in the post scriptum, a float was expected.");
+ return SYNCTEX_STATUS_ERROR;
+ }
+ if(scanner->unit<=0) {
+ _synctex_error("bad magnification in the post scriptum, a positive float was expected.");
+ return SYNCTEX_STATUS_ERROR;
+ }
+ SYNCTEX_CUR = endptr;
+ goto next_line;
+ }
+ if(status<SYNCTEX_STATUS_EOF){
+report_record_problem:
+ _synctex_error("Problem reading the Post Scriptum records");
+ return status; /* echo the error. */
+ }
+ status = _synctex_match_string(scanner,"X Offset:");
+ if(status == SYNCTEX_STATUS_OK) {
+ status = _synctex_scan_float_and_dimension(scanner, &(scanner->x_offset));
+ if(status<SYNCTEX_STATUS_OK) {
+ _synctex_error("problem with X offset in the Post Scriptum.");
+ return status;
+ }
+ goto next_line;
+ } else if(status<SYNCTEX_STATUS_EOF){
+ goto report_record_problem;
+ }
+ status = _synctex_match_string(scanner,"Y Offset:");
+ if(status==SYNCTEX_STATUS_OK) {
+ status = _synctex_scan_float_and_dimension(scanner, &(scanner->y_offset));
+ if(status<SYNCTEX_STATUS_OK) {
+ _synctex_error("problem with Y offset in the Post Scriptum.");
+ return status;
+ }
+ goto next_line;
+ } else if(status<SYNCTEX_STATUS_EOF){
+ goto report_record_problem;
+ }
+ goto next_line;
+}
+
+/* SYNCTEX_STATUS_OK is returned if the postamble is read
+ * SYNCTEX_STATUS_NOT_OK is returned if the postamble is not at the current location
+ * a negative error otherwise
+ * The postamble comprises the post scriptum section.
+ */
+int _synctex_scan_postamble(synctex_scanner_t scanner) {
+ int status = 0;
+ if(NULL == scanner) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+ status = _synctex_match_string(scanner,"Postamble:");
+ if(status < SYNCTEX_STATUS_OK) {
+ return status;
+ }
+count_again:
+ status = _synctex_next_line(scanner);
+ if(status < SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ status = _synctex_scan_named(scanner,"Count:",&(scanner->count),(synctex_decoder_t)&_synctex_decode_int);
+ if(status < SYNCTEX_STATUS_EOF) {
+ return status; /* forward the error */
+ } else if(status < SYNCTEX_STATUS_OK) { /* No Count record found */
+ status = _synctex_next_line(scanner); /* Advance one more line */
+ if(status<SYNCTEX_STATUS_OK) {
+ return status;
+ }
+ goto count_again;
+ }
+ /* Now we scan the last part of the SyncTeX file: the Post Scriptum section. */
+ return _synctex_scan_post_scriptum(scanner);
+}
+
+/* Horizontal boxes also have visible size.
+ * Visible size are bigger than real size.
+ * For example 0 width boxes may contain text.
+ * At creation time, the visible size is set to the values of the real size.
+ */
+synctex_status_t _synctex_setup_visible_box(synctex_node_t box) {
+ if(box) {
+ switch(box->class->type) {
+ case synctex_node_type_hbox:
+ if(SYNCTEX_INFO(box) != NULL) {
+ SYNCTEX_HORIZ_V(box) = SYNCTEX_HORIZ(box);
+ SYNCTEX_VERT_V(box) = SYNCTEX_VERT(box);
+ SYNCTEX_WIDTH_V(box) = SYNCTEX_WIDTH(box);
+ SYNCTEX_HEIGHT_V(box) = SYNCTEX_HEIGHT(box);
+ SYNCTEX_DEPTH_V(box) = SYNCTEX_DEPTH(box);
+ return SYNCTEX_STATUS_OK;
+ }
+ return SYNCTEX_STATUS_ERROR;
+ }
+ }
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+}
+
+/* This method is sent to an horizontal box to setup the visible size
+ * Some box have 0 width but do contain text material.
+ * With this method, one can enlarge the box to contain the given point (h,v).
+ */
+synctex_status_t _synctex_horiz_box_setup_visible(synctex_node_t node,int h, int v) {
+# ifdef __DARWIN_UNIX03
+# pragma unused(v)
+# endif
+ int itsBtm, itsTop;
+ if(NULL == node || node->class->type != synctex_node_type_hbox) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+ if(SYNCTEX_WIDTH_V(node)<0) {
+ itsBtm = SYNCTEX_HORIZ_V(node);
+ itsTop = SYNCTEX_HORIZ_V(node)-SYNCTEX_WIDTH_V(node);
+ if(h<itsBtm) {
+ SYNCTEX_HORIZ_V(node) = h;
+ SYNCTEX_WIDTH_V(node) = SYNCTEX_HORIZ_V(node) - itsTop;
+ } else if(h>itsTop) {
+ SYNCTEX_WIDTH_V(node) = SYNCTEX_HORIZ_V(node) - h;
+ }
+ } else {
+ itsBtm = SYNCTEX_HORIZ_V(node);
+ itsTop = SYNCTEX_HORIZ_V(node)+SYNCTEX_WIDTH_V(node);
+ if(h<itsBtm) {
+ SYNCTEX_HORIZ_V(node) = h;
+ SYNCTEX_WIDTH_V(node) = itsTop - SYNCTEX_HORIZ_V(node);
+ } else if(h>itsTop) {
+ SYNCTEX_WIDTH_V(node) = h - SYNCTEX_HORIZ_V(node);
+ }
+ }
+ return SYNCTEX_STATUS_OK;
+}
+
+/* Used when parsing the synctex file.
+ * The sheet argument is a newly created sheet node that will hold the contents.
+ * Something is returned in case of error.
+ */
+synctex_status_t _synctex_scan_sheet(synctex_scanner_t scanner, synctex_node_t sheet) {
+ synctex_node_t parent = sheet;
+ synctex_node_t child = NULL;
+ synctex_node_t sibling = NULL;
+ synctex_node_t box = sheet;
+ int friend_index = 0;
+ synctex_info_t * info = NULL;
+ synctex_status_t status = 0;
+ size_t available = 0;
+ if((NULL == scanner) || (NULL == sheet)) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+ /* We MUST start with a box, so at this level, the unique possibility is '[', '(' or "}". */
+prepare_loop:
+ if(SYNCTEX_CUR<SYNCTEX_END) {
+ if(*SYNCTEX_CUR == '[') {
+scan_vbox:
+ ++SYNCTEX_CUR;
+ if((child = _synctex_new_vbox(scanner)) && (info = SYNCTEX_INFO(child))) {
+# define SYNCTEX_DECODE_FAILED(WHAT) \
+ (_synctex_decode_int(scanner,&(info[WHAT].INT))<SYNCTEX_STATUS_OK)
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_WIDTH_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HEIGHT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_DEPTH_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad vbox record.");
+ #define SYNCTEX_RETURN(STATUS) return STATUS;
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_CHILD(parent,child);
+ parent = child;
+ child = NULL;
+ goto child_loop;/* next created node will be a child */
+ } else {
+ _synctex_error("Can't create vbox record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == '(') {
+scan_hbox:
+ ++SYNCTEX_CUR;
+ if((child = _synctex_new_hbox(scanner)) && (info = SYNCTEX_INFO(child))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_WIDTH_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HEIGHT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_DEPTH_IDX)
+ || _synctex_setup_visible_box(child)<SYNCTEX_STATUS_OK
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad hbox record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child),SYNCTEX_VERT(child));
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child)+SYNCTEX_ABS_WIDTH(child),SYNCTEX_VERT(child));
+ SYNCTEX_SET_CHILD(parent,child);
+ parent = child;
+ child = NULL;
+ goto child_loop;/* next created node will be a child */
+ } else {
+ _synctex_error("Can't create hbox record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == '}') {
+scan_teehs:
+ ++SYNCTEX_CUR;
+ if(NULL == parent || parent->class->type != synctex_node_type_sheet
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Unexpected end of sheet.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_RETURN(SYNCTEX_STATUS_OK);
+ } else if(*SYNCTEX_CUR == '!') {
+scan_anchor:
+ ++SYNCTEX_CUR;
+ if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Missing anchor.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ goto prepare_loop;
+ } else {
+ /* _synctex_error("Ignored record %c\n",*SYNCTEX_CUR); */
+ ++SYNCTEX_CUR;
+ if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Unexpected end.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ goto prepare_loop;
+ }
+ } else {
+ available = 1;
+ status = _synctex_buffer_get_available_size(scanner,&available);
+ if(status<SYNCTEX_STATUS_OK && available>0){
+ _synctex_error("Uncomplete sheet(0)");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ } else {
+ goto prepare_loop;
+ }
+ }
+ _synctex_bail();
+/* The child loop means that we go do one level, when we just created a box node,
+ * the next node created is a child of this box. */
+child_loop:
+ if(SYNCTEX_CUR<SYNCTEX_END) {
+ if(*SYNCTEX_CUR == '[') {
+ goto scan_vbox;
+ } else if(*SYNCTEX_CUR == ']') {
+scan_xobv:
+ ++SYNCTEX_CUR;
+ if(NULL != parent && parent->class->type == synctex_node_type_vbox) {
+ #define SYNCTEX_UPDATE_BOX_FRIEND(NODE)\
+ friend_index = ((SYNCTEX_INFO(NODE))[SYNCTEX_TAG_IDX].INT+(SYNCTEX_INFO(NODE))[SYNCTEX_LINE_IDX].INT)%(scanner->number_of_lists);\
+ SYNCTEX_SET_FRIEND(NODE,(scanner->lists_of_friends)[friend_index]);\
+ (scanner->lists_of_friends)[friend_index] = NODE;
+ if(NULL == SYNCTEX_CHILD(parent)) {
+ /* only void boxes are friends */
+ SYNCTEX_UPDATE_BOX_FRIEND(parent);
+ }
+ child = parent;
+ parent = SYNCTEX_PARENT(child);
+ } else {
+ _synctex_error("Unexpected ']', ignored.");
+ }
+ if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Uncomplete sheet.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ goto sibling_loop;
+ } else if(*SYNCTEX_CUR == '(') {
+ goto scan_hbox;
+ } else if(*SYNCTEX_CUR == ')') {
+scan_xobh:
+ ++SYNCTEX_CUR;
+ if((parent) && parent->class->type == synctex_node_type_hbox) {
+ if(NULL == child) {
+ /* Only boxes with no children are friends,
+ * boxes with children are indirectly friends through one of their descendants. */
+ SYNCTEX_UPDATE_BOX_FRIEND(parent);
+ }
+ /* setting the next horizontal box at the end ensures that a child is recorded before any of its ancestors. */
+ SYNCTEX_SET_NEXT_HORIZ_BOX(box,parent);
+ box = parent;
+ child = parent;
+ parent = SYNCTEX_PARENT(child);
+ } else {
+ _synctex_error("Unexpected ')', ignored.");
+ }
+ if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Uncomplete sheet.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ goto sibling_loop;
+ } else if(*SYNCTEX_CUR == 'v') {
+ ++SYNCTEX_CUR;
+ if(NULL != (child = _synctex_new_void_vbox(scanner))
+ && NULL != (info = SYNCTEX_INFO(child))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_WIDTH_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HEIGHT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_DEPTH_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad void vbox record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_CHILD(parent,child);
+ #define SYNCTEX_UPDATE_FRIEND(NODE)\
+ friend_index = (info[SYNCTEX_TAG_IDX].INT+info[SYNCTEX_LINE_IDX].INT)%(scanner->number_of_lists);\
+ SYNCTEX_SET_FRIEND(NODE,(scanner->lists_of_friends)[friend_index]);\
+ (scanner->lists_of_friends)[friend_index] = NODE;
+ SYNCTEX_UPDATE_FRIEND(child);
+ goto sibling_loop;
+ } else {
+ _synctex_error("Can't create vbox record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == 'h') {
+ ++SYNCTEX_CUR;
+ if(NULL != (child = _synctex_new_void_hbox(scanner))
+ && NULL != (info = SYNCTEX_INFO(child))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_WIDTH_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HEIGHT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_DEPTH_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad void hbox record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_CHILD(parent,child);
+ SYNCTEX_UPDATE_FRIEND(child);
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child),SYNCTEX_VERT(child));
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child)+SYNCTEX_ABS_WIDTH(child),SYNCTEX_VERT(child));
+ goto sibling_loop;
+ } else {
+ _synctex_error("Can't create void hbox record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == 'k') {
+ ++SYNCTEX_CUR;
+ if(NULL != (child = _synctex_new_kern(scanner))
+ && NULL != (info = SYNCTEX_INFO(child))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_WIDTH_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad kern record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_CHILD(parent,child);
+ SYNCTEX_UPDATE_FRIEND(child);
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child),SYNCTEX_VERT(child));
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child)-SYNCTEX_WIDTH(child),SYNCTEX_VERT(child));
+ goto sibling_loop;
+ } else {
+ _synctex_error("Can't create kern record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == 'g') {
+ ++SYNCTEX_CUR;
+ if(NULL != (child = _synctex_new_glue(scanner))
+ && NULL != (info = SYNCTEX_INFO(child))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad glue record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_CHILD(parent,child);
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child),SYNCTEX_VERT(child));
+ SYNCTEX_UPDATE_FRIEND(child);
+ goto sibling_loop;
+ } else {
+ _synctex_error("Can't create glue record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == '$') {
+ ++SYNCTEX_CUR;
+ if(NULL != (child = _synctex_new_math(scanner))
+ && NULL != (info = SYNCTEX_INFO(child))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad math record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_CHILD(parent,child);
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child),SYNCTEX_VERT(child));
+ SYNCTEX_UPDATE_FRIEND(child);
+ goto sibling_loop;
+ } else {
+ _synctex_error("Can't create math record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == 'x') {
+ ++SYNCTEX_CUR;
+ if(NULL != (child = _synctex_new_boundary(scanner))
+ && NULL != (info = SYNCTEX_INFO(child))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad boundary record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_CHILD(parent,child);
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child),SYNCTEX_VERT(child));
+ SYNCTEX_UPDATE_FRIEND(child);
+ goto sibling_loop;
+ } else {
+ _synctex_error("Can't create math record.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == '}') {
+ goto scan_teehs;
+ } else if(*SYNCTEX_CUR == '!') {
+ goto scan_anchor;
+ } else {
+ /* _synctex_error("Ignored record %c\n",*SYNCTEX_CUR); */
+ ++SYNCTEX_CUR;
+ if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Unexpected end.");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ goto child_loop;
+ }
+ } else {
+ available = 1;
+ status = _synctex_buffer_get_available_size(scanner,&available);
+ if(status<SYNCTEX_STATUS_OK && available>0){
+ _synctex_error("Uncomplete sheet(0)");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ } else {
+ goto child_loop;
+ }
+ }
+ _synctex_bail();
+/* The vertical loop means that we are on the same level, for example when we just ended a box.
+ * If a node is created now, it will be a sibling of the current node, sharing the same parent. */
+sibling_loop:
+ if(SYNCTEX_CUR<SYNCTEX_END) {
+ if(*SYNCTEX_CUR == '[') {
+ ++SYNCTEX_CUR;
+ if(NULL != (sibling = _synctex_new_vbox(scanner))
+ && NULL != (info = SYNCTEX_INFO(sibling))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_WIDTH_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HEIGHT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_DEPTH_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad vbox record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_SIBLING(child,sibling);
+ parent = sibling;
+ child = NULL;
+ goto child_loop;
+ } else {
+ _synctex_error("Can't create vbox record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == ']') {
+ goto scan_xobv;
+ } else if(*SYNCTEX_CUR == '(') {
+ ++SYNCTEX_CUR;
+ if(NULL != (sibling = _synctex_new_hbox(scanner)) &&
+ NULL != (info = SYNCTEX_INFO(sibling))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_WIDTH_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HEIGHT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_DEPTH_IDX)
+ || _synctex_setup_visible_box(sibling)<SYNCTEX_STATUS_OK
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad hbox record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_SIBLING(child,sibling);
+ child = sibling;
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child),SYNCTEX_VERT(child));
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child)+SYNCTEX_ABS_WIDTH(child),SYNCTEX_VERT(child));
+ parent = child;
+ child = NULL;
+ goto child_loop;
+ } else {
+ _synctex_error("Can't create hbox record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == ')') {
+ goto scan_xobh;
+ } else if(*SYNCTEX_CUR == 'v') {
+ ++SYNCTEX_CUR;
+ if(NULL != (sibling = _synctex_new_void_vbox(scanner)) &&
+ NULL != (info = SYNCTEX_INFO(sibling))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_WIDTH_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HEIGHT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_DEPTH_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad void vbox record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_SIBLING(child,sibling);
+ child = sibling;
+ SYNCTEX_UPDATE_FRIEND(child);
+ goto sibling_loop;
+ } else {
+ _synctex_error("can't create void vbox record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == 'h') {
+ ++SYNCTEX_CUR;
+ if(NULL != (sibling = _synctex_new_void_hbox(scanner)) &&
+ NULL != (info = SYNCTEX_INFO(sibling))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_WIDTH_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HEIGHT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_DEPTH_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad void hbox record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_SIBLING(child,sibling);
+ child = sibling;
+ SYNCTEX_UPDATE_FRIEND(child);
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child),SYNCTEX_VERT(child));
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child)+SYNCTEX_ABS_WIDTH(child),SYNCTEX_VERT(child));
+ goto sibling_loop;
+ } else {
+ _synctex_error("can't create void hbox record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == 'k') {
+ ++SYNCTEX_CUR;
+ if(NULL != (sibling = _synctex_new_kern(scanner))
+ && NULL != (info = SYNCTEX_INFO(sibling))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_WIDTH_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad kern record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_SIBLING(child,sibling);
+ child = sibling;
+ SYNCTEX_UPDATE_FRIEND(child);
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child),SYNCTEX_VERT(child));
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child)-SYNCTEX_WIDTH(child),SYNCTEX_VERT(child));
+ goto sibling_loop;
+ } else {
+ _synctex_error("Can't create kern record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == 'g') {
+ ++SYNCTEX_CUR;
+ if(NULL != (sibling = _synctex_new_glue(scanner))
+ && NULL != (info = SYNCTEX_INFO(sibling))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad glue record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_SIBLING(child,sibling);
+ child = sibling;
+ SYNCTEX_UPDATE_FRIEND(child);
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child),SYNCTEX_VERT(child));
+ goto sibling_loop;
+ } else {
+ _synctex_error("Can't create glue record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == '$') {
+ ++SYNCTEX_CUR;
+ if(NULL != (sibling = _synctex_new_math(scanner))
+ && NULL != (info = SYNCTEX_INFO(sibling))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad math record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_SIBLING(child,sibling);
+ child = sibling;
+ SYNCTEX_UPDATE_FRIEND(child);
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child),SYNCTEX_VERT(child));
+ goto sibling_loop;
+ } else {
+ _synctex_error("Can't create math record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == 'x') {
+ ++SYNCTEX_CUR;
+ if(NULL != (sibling = _synctex_new_boundary(scanner))
+ && NULL != (info = SYNCTEX_INFO(sibling))) {
+ if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
+ || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
+ || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad boundary record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ SYNCTEX_SET_SIBLING(child,sibling);
+ child = sibling;
+ SYNCTEX_UPDATE_FRIEND(child);
+ _synctex_horiz_box_setup_visible(parent,SYNCTEX_HORIZ(child),SYNCTEX_VERT(child));
+ goto sibling_loop;
+ } else {
+ _synctex_error("Can't create boundary record (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ } else if(*SYNCTEX_CUR == '}') {
+ goto scan_teehs;
+ } else if(*SYNCTEX_CUR == '!') {
+ ++SYNCTEX_CUR;
+ if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Missing anchor (2).");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ goto sibling_loop;
+ } else {
+ ++SYNCTEX_CUR;
+ /* _synctex_error("Ignored record %c(2)\n",*SYNCTEX_CUR); */
+ if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ goto sibling_loop;
+ }
+ } else {
+ available = 1;
+ status = _synctex_buffer_get_available_size(scanner,&available);
+ if(status<SYNCTEX_STATUS_OK && available>0){
+ goto sibling_loop;
+ } else {
+ _synctex_error("Uncomplete sheet(2)");
+ SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+ }
+ }
+# undef SYNCTEX_DECODE_FAILED
+}
+
+/* Used when parsing the synctex file
+ */
+synctex_status_t _synctex_scan_content(synctex_scanner_t scanner) {
+ synctex_node_t sheet = NULL;
+ synctex_status_t status = 0;
+ if(NULL == scanner) {
+ return SYNCTEX_STATUS_BAD_ARGUMENT;
+ }
+ /* set up the lists of friends */
+ if(NULL == scanner->lists_of_friends) {
+ scanner->number_of_lists = 1024;
+ scanner->lists_of_friends = (synctex_node_t *)_synctex_malloc(scanner->number_of_lists*sizeof(synctex_node_t));
+ if(NULL == scanner->lists_of_friends) {
+ _synctex_error("malloc:2");
+ return SYNCTEX_STATUS_ERROR;
+ }
+ }
+ /* Find where this section starts */
+content_not_found:
+ status = _synctex_match_string(scanner,"Content:");
+ if(status<SYNCTEX_STATUS_EOF) {
+ return status;
+ }
+ if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+ _synctex_error("Uncomplete Content.");
+ return SYNCTEX_STATUS_ERROR;
+ }
+ if(status == SYNCTEX_STATUS_NOT_OK) {
+ goto content_not_found;
+ }
+next_sheet:
+ if(*SYNCTEX_CUR != '{') {
+ status = _synctex_scan_postamble(scanner);
+ if(status < SYNCTEX_STATUS_EOF) {
+ _synctex_error("Bad content.");
+ return status;
+ }
+ if(status<SYNCTEX_STATUS_OK) {
+ status = _synctex_next_line(scanner);
+ if(status < SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad content.");
+ return status;
+ }
+ goto next_sheet;
+ }
+ return SYNCTEX_STATUS_OK;
+ }
+ ++SYNCTEX_CUR;
+ /* Create a new sheet node */
+ sheet = _synctex_new_sheet(scanner);
+ status = _synctex_decode_int(scanner,&(SYNCTEX_PAGE(sheet)));
+ if(status<SYNCTEX_STATUS_OK) {
+ _synctex_error("Missing sheet number.");
+bail:
+ SYNCTEX_FREE(sheet);
+ return SYNCTEX_STATUS_ERROR;
+ }
+ status = _synctex_next_line(scanner);
+ if(status<SYNCTEX_STATUS_OK) {
+ _synctex_error("Uncomplete file.");
+ goto bail;
+ }
+ status = _synctex_scan_sheet(scanner,sheet);
+ if(status<SYNCTEX_STATUS_OK) {
+ _synctex_error("Bad sheet content.");
+ goto bail;
+ }
+ SYNCTEX_SET_SIBLING(sheet,scanner->sheet);
+ scanner->sheet = sheet;
+ sheet = NULL;
+ /* Now read the list of Inputs between 2 sheets. */
+ do {
+ status = _synctex_scan_input(scanner);
+ if(status<SYNCTEX_STATUS_EOF) {
+ _synctex_error("Bad input section.");
+ goto bail;
+ }
+ }
+ while(status >= SYNCTEX_STATUS_OK);
+ goto next_sheet;
+}
+
+int _synctex_open(const char * output, const char * build_directory, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_modeRef);
+
+/* Where the synctex scanner is created. */
+synctex_scanner_t synctex_scanner_new_with_output_file(const char * output, const char * build_directory, int parse) {
+ gzFile file = NULL;
+ char * synctex = NULL;
+ synctex_scanner_t scanner = NULL;
+ synctex_io_mode_t io_mode = synctex_io_mode_read;
+ /* Here we assume that int are smaller than void * */
+ if(sizeof(int)>sizeof(void*)) {
+ _synctex_error("INTERNAL INCONSISTENCY: int's are unexpectedly bigger than pointers, bailing out.");
+ return NULL;
+ }
+ /* We ensure that SYNCTEX_BUFFER_SIZE < UINT_MAX, I don't know if it makes sense... */
+ if(SYNCTEX_BUFFER_SIZE >= UINT_MAX) {
+ _synctex_error("SyncTeX BUG: Internal inconsistency, bad SYNCTEX_BUFFER_SIZE (1)");
+ return NULL;
+ }
+ /* for integers: */
+ if(SYNCTEX_BUFFER_SIZE < SYNCTEX_BUFFER_MIN_SIZE) {
+ _synctex_error("SyncTeX BUG: Internal inconsistency, bad SYNCTEX_BUFFER_SIZE (2)");
+ return NULL;
+ }
+ /* now open the synctex file */
+ if(_synctex_open(output,build_directory,&synctex,&file,synctex_NO,&io_mode) || !file) {
+ if(_synctex_open(output,build_directory,&synctex,&file,synctex_YES,&io_mode) || !file) {
+ return NULL;
+ }
+ }
+ scanner = (synctex_scanner_t)_synctex_malloc(sizeof(_synctex_scanner_t));
+ if(NULL == scanner) {
+ _synctex_error("SyncTeX: malloc problem");
+ free(synctex);
+ gzclose(file);
+ return NULL;
+ }
+ /* make a private copy of output for the scanner */
+ if(NULL == (scanner->output = (char *)malloc(strlen(output)+1))){
+ _synctex_error("! synctex_scanner_new_with_output_file: Memory problem (2), scanner's output is not reliable.");
+ } else if(scanner->output != strcpy(scanner->output,output)) {
+ _synctex_error("! synctex_scanner_new_with_output_file: Copy problem, scanner's output is not reliable.");
+ }
+ scanner->synctex = synctex;/* Now the scanner owns synctex */
+ SYNCTEX_FILE = file;
+ return parse? synctex_scanner_parse(scanner):scanner;
+}
+
+int __synctex_open(const char * output, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_modeRef);
+
+/* This functions opens the file at the "output" given location.
+ * It manages the problem of quoted filenames that appear with pdftex an filenames containing the space character.
+ * In TeXLive 2008, the synctex file created with pdftex did contain unexpected quotes.
+ * This function will remove them if possible.
+ * 0 on success, non 0 on error. */
+int __synctex_open(const char * output, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_modeRef) {
+# define synctex_name (*synctex_name_ref)
+# define the_file (*file_ref)
+ if(synctex_name_ref && file_ref) {
+ char * quoteless = NULL;
+ synctex_io_mode_t io_mode = *io_modeRef;
+ const char * mode = synctex_io_modes[io_mode];
+ size_t size = 0;
+ /* now create the synctex file name */
+ size = strlen(output)+strlen(synctex_suffix)+strlen(synctex_suffix_gz)+1;
+ synctex_name = (char *)malloc(size);
+ if(NULL == synctex_name) {
+ _synctex_error("! __synctex_open: Memory problem (1)\n");
+ return 1;
+ }
+ /* we have reserved for synctex enough memory to copy output, both suffices and 2 quotes,
+ * including the terminating character. size is free now. */
+ if(synctex_name != strcpy(synctex_name,output)) {
+ _synctex_error("! __synctex_open: Copy problem\n");
+return_on_error:
+ free(synctex_name);
+ synctex_name = NULL;/* Don't forget to reinitialize. */
+ the_file = NULL; /* Here as well */
+ free(quoteless);
+ return 2;
+ }
+ /* remove the last path extension if any */
+ _synctex_strip_last_path_extension(synctex_name);
+ if(!strlen(synctex_name)) {
+ goto return_on_error;
+ }
+ /* now insert quotes. */
+ if(add_quotes) {
+ char * quoted = NULL;
+ if(_synctex_copy_with_quoting_last_path_component(synctex_name,&quoted,size) || (NULL == quoted)) {
+ /* There was an error or quoting does not make sense: */
+ goto return_on_error;
+ }
+ quoteless = synctex_name;
+ synctex_name = quoted;
+ }
+ /* Now add the first path extension. */
+ if(synctex_name != strcat(synctex_name,synctex_suffix)){
+ _synctex_error("! __synctex_open: Concatenation problem (can't add suffix '%s')\n",synctex_suffix);
+ goto return_on_error;
+ }
+ /* To quoteless as well. */
+ if(quoteless && (quoteless != strcat(quoteless,synctex_suffix))){
+ free(quoteless);
+ quoteless = NULL;
+ }
+ if(NULL == (the_file = gzopen(synctex_name,mode))) {
+ /* Could not open this file */
+ if(errno != ENOENT) {
+ /* The file does exist, this is a lower lever error, I can't do anything. */
+ _synctex_error("SyncTeX: could not open %s, error %i\n",synctex_name,errno);
+ goto return_on_error;
+ }
+ /* Try the compressed version */
+ if(synctex_name != strcat(synctex_name,synctex_suffix_gz)){
+ _synctex_error("! __synctex_open: Concatenation problem (can't add suffix '%s')\n",synctex_suffix_gz);
+ goto return_on_error;
+ }
+ ++io_mode;
+ mode = synctex_io_modes[io_mode]; /* the file is a compressed and is a binary file, this caused errors on Windows */
+ /* To quoteless as well. */
+ if(quoteless && (quoteless != strcat(quoteless,synctex_suffix_gz))){
+ free(quoteless);
+ quoteless = NULL;
+ }
+ if(NULL == (the_file = gzopen(synctex_name,mode))) {
+ /* Could not open this file */
+ if(errno != ENOENT) {
+ /* The file does exist, this is a lower lever error, I can't do anything. */
+ _synctex_error("SyncTeX: could not open %s, error %i\n",synctex_name,errno);
+ }
+ goto return_on_error;
+ }
+ }
+ /* At this point, the file is properly open.
+ * If we are in the add_quotes mode, we change the file name by removing the quotes. */
+ if(quoteless) {
+ gzclose(the_file);
+ if(rename(synctex_name,quoteless)) {
+ _synctex_error("SyncTeX: could not rename %s to %s, error %i\n",synctex_name,quoteless,errno);
+ /* Reopen the file. */
+ if(NULL == (the_file = gzopen(synctex_name,mode))) {
+ /* Could not open this file */
+ if(errno != ENOENT) {
+ /* The file does exist, this is a lower lever error, I can't do anything. */
+ _synctex_error("SyncTeX: could not open again %s, error %i\n",synctex_name,errno);
+ }
+ goto return_on_error;
+ }
+ } else {
+ if(NULL == (the_file = gzopen(quoteless,mode))) {
+ /* Could not open this file */
+ if(errno != ENOENT) {
+ /* The file does exist, this is a lower lever error, I can't do anything. */
+ _synctex_error("SyncTeX: could not open renamed %s, error %i\n",quoteless,errno);
+ }
+ goto return_on_error;
+ }
+ /* The quote free file name should replace the old one:*/
+ free(synctex_name);
+ synctex_name = quoteless;
+ quoteless = NULL;
+ }
+ }
+ /* We are returning properly so we can also return the proper io_mode */
+ *io_modeRef = io_mode;
+ return 0;
+ }
+ return 3; /* Bad parameter. */
+# undef synctex_name
+# undef the_file
+}
+
+/* Opens the ouput file, taking into account the eventual build_directory.
+ * 0 on success, non 0 on error. */
+int _synctex_open(const char * output, const char * build_directory, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_modeRef) {
+# define synctex_name (*synctex_name_ref)
+# define the_file (*file_ref)
+ int result = __synctex_open(output,synctex_name_ref,file_ref,add_quotes,io_modeRef);
+ if((result || !*file_ref) && build_directory && strlen(build_directory)) {
+ char * build_output;
+ const char * lpc;
+ size_t size;
+ synctex_bool_t is_absolute;
+ build_output = NULL;
+ lpc = _synctex_last_path_component(output);
+ size = strlen(build_directory)+strlen(lpc)+2;
+ is_absolute = _synctex_path_is_absolute(build_directory);
+ if(!is_absolute) {
+ size += strlen(output);
+ }
+ if((build_output = (char *)malloc(size))) {
+ if(is_absolute) {
+ build_output[0] = '\0';
+ } else {
+ if(build_output != strcpy(build_output,output)) {
+ return -4;
+ }
+ build_output[lpc-output]='\0';
+ }
+ if(build_output == strcat(build_output,build_directory)) {
+ /* Append a path separator if necessary. */
+ if(!SYNCTEX_IS_PATH_SEPARATOR(build_output[strlen(build_directory)-1])) {
+ if(build_output != strcat(build_output,"/")) {
+ return -2;
+ }
+ }
+ /* Append the last path component of the output. */
+ if(build_output != strcat(build_output,lpc)) {
+ return -3;
+ }
+ return __synctex_open(build_output,synctex_name_ref,file_ref,add_quotes,io_modeRef);
+ }
+ }
+ return -1;
+ }
+ return result;
+# undef synctex_name
+# undef the_file
+}
+
+/* The scanner destructor
+ */
+void synctex_scanner_free(synctex_scanner_t scanner) {
+ if(NULL == scanner) {
+ return;
+ }
+ if(SYNCTEX_FILE) {
+ gzclose(SYNCTEX_FILE);
+ SYNCTEX_FILE = NULL;
+ }
+ SYNCTEX_FREE(scanner->sheet);
+ SYNCTEX_FREE(scanner->input);
+ free(SYNCTEX_START);
+ free(scanner->output_fmt);
+ free(scanner->output);
+ free(scanner->synctex);
+ free(scanner->lists_of_friends);
+ free(scanner);
+}
+
+/* Where the synctex scanner parses the contents of the file. */
+synctex_scanner_t synctex_scanner_parse(synctex_scanner_t scanner) {
+ synctex_status_t status = 0;
+ if(!scanner || scanner->flags.has_parsed) {
+ return scanner;
+ }
+ scanner->flags.has_parsed=1;
+ scanner->pre_magnification = 1000;
+ scanner->pre_unit = 8192;
+ scanner->pre_x_offset = scanner->pre_y_offset = 578;
+ /* initialize the offset with a fake unprobable value,
+ * If there is a post scriptum section, this value will be overriden by the real life value */
+ scanner->x_offset = scanner->y_offset = 6.027e23f;
+ scanner->class[synctex_node_type_sheet] = synctex_class_sheet;
+ scanner->class[synctex_node_type_input] = synctex_class_input;
+ (scanner->class[synctex_node_type_input]).scanner = scanner;
+ (scanner->class[synctex_node_type_sheet]).scanner = scanner;
+ scanner->class[synctex_node_type_vbox] = synctex_class_vbox;
+ (scanner->class[synctex_node_type_vbox]).scanner = scanner;
+ scanner->class[synctex_node_type_void_vbox] = synctex_class_void_vbox;
+ (scanner->class[synctex_node_type_void_vbox]).scanner = scanner;
+ scanner->class[synctex_node_type_hbox] = synctex_class_hbox;
+ (scanner->class[synctex_node_type_hbox]).scanner = scanner;
+ scanner->class[synctex_node_type_void_hbox] = synctex_class_void_hbox;
+ (scanner->class[synctex_node_type_void_hbox]).scanner = scanner;
+ scanner->class[synctex_node_type_kern] = synctex_class_kern;
+ (scanner->class[synctex_node_type_kern]).scanner = scanner;
+ scanner->class[synctex_node_type_glue] = synctex_class_glue;
+ (scanner->class[synctex_node_type_glue]).scanner = scanner;
+ scanner->class[synctex_node_type_math] = synctex_class_math;
+ (scanner->class[synctex_node_type_math]).scanner = scanner;
+ scanner->class[synctex_node_type_boundary] = synctex_class_boundary;
+ (scanner->class[synctex_node_type_boundary]).scanner = scanner;
+ SYNCTEX_START = (char *)malloc(SYNCTEX_BUFFER_SIZE+1); /* one more character for null termination */
+ if(NULL == SYNCTEX_START) {
+ _synctex_error("SyncTeX: malloc error");
+ synctex_scanner_free(scanner);
+ return NULL;
+ }
+ SYNCTEX_END = SYNCTEX_START+SYNCTEX_BUFFER_SIZE;
+ /* SYNCTEX_END always points to a null terminating character.
+ * Maybe there is another null terminating character between SYNCTEX_CUR and SYNCTEX_END-1.
+ * At least, we are sure that SYNCTEX_CUR points to a string covering a valid part of the memory. */
+ *SYNCTEX_END = '\0';
+ SYNCTEX_CUR = SYNCTEX_END;
+ status = _synctex_scan_preamble(scanner);
+ if(status<SYNCTEX_STATUS_OK) {
+ _synctex_error("SyncTeX Error: Bad preamble\n");
+bailey:
+ synctex_scanner_free(scanner);
+ return NULL;
+ }
+ status = _synctex_scan_content(scanner);
+ if(status<SYNCTEX_STATUS_OK) {
+ _synctex_error("SyncTeX Error: Bad content\n");
+ goto bailey;
+ }
+ /* Everything is finished, free the buffer, close the file */
+ free((void *)SYNCTEX_START);
+ SYNCTEX_START = SYNCTEX_CUR = SYNCTEX_END = NULL;
+ gzclose(SYNCTEX_FILE);
+ SYNCTEX_FILE = NULL;
+ /* Final tuning: set the default values for various parameters */
+ /* 1 pre_unit = (scanner->pre_unit)/65536 pt = (scanner->pre_unit)/65781.76 bp
+ * 1 pt = 65536 sp */
+ if(scanner->pre_unit<=0) {
+ scanner->pre_unit = 8192;
+ }
+ if(scanner->pre_magnification<=0) {
+ scanner->pre_magnification = 1000;
+ }
+ if(scanner->unit <= 0) {
+ /* no post magnification */
+ scanner->unit = scanner->pre_unit / 65781.76;/* 65781.76 or 65536.0*/
+ } else {
+ /* post magnification */
+ scanner->unit *= scanner->pre_unit / 65781.76;
+ }
+ scanner->unit *= scanner->pre_magnification / 1000.0;
+ if(scanner->x_offset > 6e23) {
+ /* no post offset */
+ scanner->x_offset = scanner->pre_x_offset * (scanner->pre_unit / 65781.76);
+ scanner->y_offset = scanner->pre_y_offset * (scanner->pre_unit / 65781.76);
+ } else {
+ /* post offset */
+ scanner->x_offset /= 65781.76f;
+ scanner->y_offset /= 65781.76f;
+ }
+ return scanner;
+ #undef SYNCTEX_FILE
+}
+
+/* Scanner accessors.
+ */
+int synctex_scanner_pre_x_offset(synctex_scanner_t scanner){
+ return scanner?scanner->pre_x_offset:0;
+}
+int synctex_scanner_pre_y_offset(synctex_scanner_t scanner){
+ return scanner?scanner->pre_y_offset:0;
+}
+int synctex_scanner_x_offset(synctex_scanner_t scanner){
+ return scanner?scanner->x_offset:0;
+}
+int synctex_scanner_y_offset(synctex_scanner_t scanner){
+ return scanner?scanner->y_offset:0;
+}
+float synctex_scanner_magnification(synctex_scanner_t scanner){
+ return scanner?scanner->unit:1;
+}
+void synctex_scanner_display(synctex_scanner_t scanner) {
+ if(NULL == scanner) {
+ return;
+ }
+ printf("The scanner:\noutput:%s\noutput_fmt:%s\nversion:%i\n",scanner->output,scanner->output_fmt,scanner->version);
+ printf("pre_unit:%i\nx_offset:%i\ny_offset:%i\n",scanner->pre_unit,scanner->pre_x_offset,scanner->pre_y_offset);
+ printf("count:%i\npost_magnification:%f\npost_x_offset:%f\npost_y_offset:%f\n",
+ scanner->count,scanner->unit,scanner->x_offset,scanner->y_offset);
+ printf("The input:\n");
+ SYNCTEX_DISPLAY(scanner->input);
+ if(scanner->count<1000) {
+ printf("The sheets:\n");
+ SYNCTEX_DISPLAY(scanner->sheet);
+ printf("The friends:\n");
+ if(scanner->lists_of_friends) {
+ int i = scanner->number_of_lists;
+ synctex_node_t node;
+ while(i--) {
+ printf("Friend index:%i\n",i);
+ node = (scanner->lists_of_friends)[i];
+ while(node) {
+ printf("%s:%i,%i\n",
+ synctex_node_isa(node),
+ SYNCTEX_TAG(node),
+ SYNCTEX_LINE(node)
+ );
+ node = SYNCTEX_FRIEND(node);
+ }
+ }
+ }
+ } else {
+ printf("SyncTeX Warning: Too many objects\n");
+ }
+}
+/* Public*/
+const char * synctex_scanner_get_name(synctex_scanner_t scanner,int tag) {
+ synctex_node_t input = NULL;
+ if(NULL == scanner) {
+ return NULL;
+ }
+ input = scanner->input;
+ do {
+ if(tag == SYNCTEX_TAG(input)) {
+ return (SYNCTEX_NAME(input));
+ }
+ } while((input = SYNCTEX_SIBLING(input)) != NULL);
+ return NULL;
+}
+
+int _synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name);
+int _synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name) {
+ synctex_node_t input = NULL;
+ if(NULL == scanner) {
+ return 0;
+ }
+ input = scanner->input;
+ do {
+ if(_synctex_is_equivalent_file_name(name,(SYNCTEX_NAME(input)))) {
+ return SYNCTEX_TAG(input);
+ }
+ } while((input = SYNCTEX_SIBLING(input)) != NULL);
+ return 0;
+}
+
+int synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name) {
+ size_t char_index = strlen(name);
+ if((scanner = synctex_scanner_parse(scanner)) && (0 < char_index)) {
+ /* the name is not void */
+ char_index -= 1;
+ if(!SYNCTEX_IS_PATH_SEPARATOR(name[char_index])) {
+ /* the last character of name is not a path separator */
+ int result = _synctex_scanner_get_tag(scanner,name);
+ if(result) {
+ return result;
+ } else {
+ /* the given name was not the one known by TeX
+ * try a name relative to the enclosing directory of the scanner->output file */
+ const char * relative = name;
+ const char * ptr = scanner->output;
+ while((strlen(relative) > 0) && (strlen(ptr) > 0) && (*relative == *ptr))
+ {
+ relative += 1;
+ ptr += 1;
+ }
+ /* Find the last path separator before relative */
+ while(relative > name) {
+ if(SYNCTEX_IS_PATH_SEPARATOR(*(relative-1))) {
+ break;
+ }
+ relative -= 1;
+ }
+ if((relative > name) && (result = _synctex_scanner_get_tag(scanner,relative))) {
+ return result;
+ }
+ if(SYNCTEX_IS_PATH_SEPARATOR(name[0])) {
+ /* No tag found for the given absolute name,
+ * Try each relative path starting from the shortest one */
+ while(0<char_index) {
+ char_index -= 1;
+ if(SYNCTEX_IS_PATH_SEPARATOR(name[char_index])
+ && (result = _synctex_scanner_get_tag(scanner,name+char_index+1))) {
+ return result;
+ }
+ }
+ }
+ }
+ return result;
+ }
+ }
+ return 0;
+}
+synctex_node_t synctex_scanner_input(synctex_scanner_t scanner) {
+ return scanner?scanner->input:NULL;
+}
+const char * synctex_scanner_get_output_fmt(synctex_scanner_t scanner) {
+ return NULL != scanner && scanner->output_fmt?scanner->output_fmt:"";
+}
+const char * synctex_scanner_get_output(synctex_scanner_t scanner) {
+ return NULL != scanner && scanner->output?scanner->output:"";
+}
+const char * synctex_scanner_get_synctex(synctex_scanner_t scanner) {
+ return NULL != scanner && scanner->synctex?scanner->synctex:"";
+}
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark Public node attributes
+# endif
+int synctex_node_h(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ return SYNCTEX_HORIZ(node);
+}
+int synctex_node_v(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ return SYNCTEX_VERT(node);
+}
+int synctex_node_width(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ return SYNCTEX_WIDTH(node);
+}
+int synctex_node_box_h(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ if(SYNCTEX_IS_BOX(node)) {
+result:
+ return SYNCTEX_HORIZ(node);
+ }
+ if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+ goto result;
+ }
+ return 0;
+}
+int synctex_node_box_v(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ if(SYNCTEX_IS_BOX(node)) {
+result:
+ return SYNCTEX_VERT(node);
+ }
+ if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+ goto result;
+ }
+ return 0;
+}
+int synctex_node_box_width(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ if(SYNCTEX_IS_BOX(node)) {
+result:
+ return SYNCTEX_WIDTH(node);
+ }
+ if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+ goto result;
+ }
+ return 0;
+}
+int synctex_node_box_height(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ if(SYNCTEX_IS_BOX(node)) {
+result:
+ return SYNCTEX_HEIGHT(node);
+ }
+ if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+ goto result;
+ }
+ return 0;
+}
+int synctex_node_box_depth(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ if(SYNCTEX_IS_BOX(node)) {
+result:
+ return SYNCTEX_DEPTH(node);
+ }
+ if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+ goto result;
+ }
+ return 0;
+}
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark Public node visible attributes
+# endif
+float synctex_node_visible_h(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ return SYNCTEX_HORIZ(node)*node->class->scanner->unit+node->class->scanner->x_offset;
+}
+float synctex_node_visible_v(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ return SYNCTEX_VERT(node)*node->class->scanner->unit+node->class->scanner->y_offset;
+}
+float synctex_node_visible_width(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ return SYNCTEX_WIDTH(node)*node->class->scanner->unit;
+}
+float synctex_node_box_visible_h(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ switch(node->class->type) {
+ case synctex_node_type_vbox:
+ case synctex_node_type_void_vbox:
+ case synctex_node_type_void_hbox:
+ return SYNCTEX_HORIZ(node)*node->class->scanner->unit+node->class->scanner->x_offset;
+ case synctex_node_type_hbox:
+result:
+ return SYNCTEX_HORIZ_V(node)*node->class->scanner->unit+node->class->scanner->x_offset;
+ }
+ if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+ goto result;
+ }
+ return 0;
+}
+float synctex_node_box_visible_v(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ switch(node->class->type) {
+ case synctex_node_type_vbox:
+ case synctex_node_type_void_vbox:
+ case synctex_node_type_void_hbox:
+ return SYNCTEX_VERT(node)*node->class->scanner->unit+node->class->scanner->y_offset;
+ case synctex_node_type_hbox:
+result:
+ return SYNCTEX_VERT_V(node)*node->class->scanner->unit+node->class->scanner->y_offset;
+ }
+ if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+ goto result;
+ }
+ return 0;
+}
+float synctex_node_box_visible_width(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ switch(node->class->type) {
+ case synctex_node_type_vbox:
+ case synctex_node_type_void_vbox:
+ case synctex_node_type_void_hbox:
+ return SYNCTEX_WIDTH(node)*node->class->scanner->unit;
+ case synctex_node_type_hbox:
+result:
+ return SYNCTEX_WIDTH_V(node)*node->class->scanner->unit;
+ }
+ if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+ goto result;
+ }
+ return 0;
+}
+float synctex_node_box_visible_height(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ switch(node->class->type) {
+ case synctex_node_type_vbox:
+ case synctex_node_type_void_vbox:
+ case synctex_node_type_void_hbox:
+ return SYNCTEX_HEIGHT(node)*node->class->scanner->unit;
+ case synctex_node_type_hbox:
+result:
+ return SYNCTEX_HEIGHT_V(node)*node->class->scanner->unit;
+ }
+ if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+ goto result;
+ }
+ return 0;
+}
+float synctex_node_box_visible_depth(synctex_node_t node){
+ if(!node) {
+ return 0;
+ }
+ switch(node->class->type) {
+ case synctex_node_type_vbox:
+ case synctex_node_type_void_vbox:
+ case synctex_node_type_void_hbox:
+ return SYNCTEX_DEPTH(node)*node->class->scanner->unit;
+ case synctex_node_type_hbox:
+result:
+ return SYNCTEX_DEPTH_V(node)*node->class->scanner->unit;
+ }
+ if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+ goto result;
+ }
+ return 0;
+}
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark Other public node attributes
+# endif
+
+int synctex_node_page(synctex_node_t node){
+ synctex_node_t parent = NULL;
+ if(!node) {
+ return -1;
+ }
+ parent = SYNCTEX_PARENT(node);
+ while(parent) {
+ node = parent;
+ parent = SYNCTEX_PARENT(node);
+ }
+ if(node->class->type == synctex_node_type_sheet) {
+ return SYNCTEX_PAGE(node);
+ }
+ return -1;
+}
+int synctex_node_tag(synctex_node_t node) {
+ return node?SYNCTEX_TAG(node):-1;
+}
+int synctex_node_line(synctex_node_t node) {
+ return node?SYNCTEX_LINE(node):-1;
+}
+int synctex_node_column(synctex_node_t node) {
+# ifdef __DARWIN_UNIX03
+# pragma unused(node)
+# endif
+ return -1;
+}
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark Sheet
+# endif
+
+synctex_node_t synctex_sheet_content(synctex_scanner_t scanner,int page) {
+ if(scanner) {
+ synctex_node_t sheet = scanner->sheet;
+ while(sheet) {
+ if(page == SYNCTEX_PAGE(sheet)) {
+ return SYNCTEX_CHILD(sheet);
+ }
+ sheet = SYNCTEX_SIBLING(sheet);
+ }
+ }
+ return NULL;
+}
+
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark Query
+# endif
+
+int synctex_display_query(synctex_scanner_t scanner,const char * name,int line,int column) {
+# ifdef __DARWIN_UNIX03
+# pragma unused(column)
+# endif
+ int tag = synctex_scanner_get_tag(scanner,name);
+ size_t size = 0;
+ int friend_index = 0;
+ int max_line = 0;
+ synctex_node_t node = NULL;
+ if(tag == 0) {
+ printf("SyncTeX Warning: No tag for %s\n",name);
+ return -1;
+ }
+ free(SYNCTEX_START);
+ SYNCTEX_CUR = SYNCTEX_END = SYNCTEX_START = NULL;
+ max_line = line < INT_MAX-scanner->number_of_lists ? line+scanner->number_of_lists:INT_MAX;
+ while(line<max_line) {
+ /* This loop will only be performed once for advanced viewers */
+ friend_index = (tag+line)%(scanner->number_of_lists);
+ if((node = (scanner->lists_of_friends)[friend_index])) {
+ do {
+ if((synctex_node_type(node)>=synctex_node_type_boundary)
+ && (tag == SYNCTEX_TAG(node))
+ && (line == SYNCTEX_LINE(node))) {
+ if(SYNCTEX_CUR == SYNCTEX_END) {
+ size += 16;
+ SYNCTEX_END = realloc(SYNCTEX_START,size*sizeof(synctex_node_t *));
+ SYNCTEX_CUR += SYNCTEX_END - SYNCTEX_START;
+ SYNCTEX_START = SYNCTEX_END;
+ SYNCTEX_END = SYNCTEX_START + size*sizeof(synctex_node_t *);
+ }
+ *(synctex_node_t *)SYNCTEX_CUR = node;
+ SYNCTEX_CUR += sizeof(synctex_node_t);
+ }
+ } while((node = SYNCTEX_FRIEND(node)));
+ if(SYNCTEX_START == NULL) {
+ /* We did not find any matching boundary, retry with glue or kern */
+ node = (scanner->lists_of_friends)[friend_index];/* no need to test it again, already done */
+ do {
+ if((synctex_node_type(node)>=synctex_node_type_kern)
+ && (tag == SYNCTEX_TAG(node))
+ && (line == SYNCTEX_LINE(node))) {
+ if(SYNCTEX_CUR == SYNCTEX_END) {
+ size += 16;
+ SYNCTEX_END = realloc(SYNCTEX_START,size*sizeof(synctex_node_t *));
+ SYNCTEX_CUR += SYNCTEX_END - SYNCTEX_START;
+ SYNCTEX_START = SYNCTEX_END;
+ SYNCTEX_END = SYNCTEX_START + size*sizeof(synctex_node_t *);
+ }
+ *(synctex_node_t *)SYNCTEX_CUR = node;
+ SYNCTEX_CUR += sizeof(synctex_node_t);
+ }
+ } while((node = SYNCTEX_FRIEND(node)));
+ if(SYNCTEX_START == NULL) {
+ /* We did not find any matching glue or kern, retry with boxes */
+ node = (scanner->lists_of_friends)[friend_index];/* no need to test it again, already done */
+ do {
+ if((tag == SYNCTEX_TAG(node))
+ && (line == SYNCTEX_LINE(node))) {
+ if(SYNCTEX_CUR == SYNCTEX_END) {
+ size += 16;
+ SYNCTEX_END = realloc(SYNCTEX_START,size*sizeof(synctex_node_t *));
+ SYNCTEX_CUR += SYNCTEX_END - SYNCTEX_START;
+ SYNCTEX_START = SYNCTEX_END;
+ SYNCTEX_END = SYNCTEX_START + size*sizeof(synctex_node_t *);
+ }
+ *(synctex_node_t *)SYNCTEX_CUR = node;
+ SYNCTEX_CUR += sizeof(synctex_node_t);
+ }
+ } while((node = SYNCTEX_FRIEND(node)));
+ }
+ }
+ SYNCTEX_END = SYNCTEX_CUR;
+ /* Now reverse the order to have nodes in display order, and keep just a few nodes */
+ if((SYNCTEX_START) && (SYNCTEX_END))
+ {
+ synctex_node_t * start_ref = (synctex_node_t *)SYNCTEX_START;
+ synctex_node_t * end_ref = (synctex_node_t *)SYNCTEX_END;
+ end_ref -= 1;
+ while(start_ref < end_ref) {
+ node = *start_ref;
+ *start_ref = *end_ref;
+ *end_ref = node;
+ start_ref += 1;
+ end_ref -= 1;
+ }
+ /* Basically, we keep the first node for each parent.
+ * More precisely, we keep only nodes that are not descendants of
+ * their predecessor's parent. */
+ start_ref = (synctex_node_t *)SYNCTEX_START;
+ end_ref = (synctex_node_t *)SYNCTEX_START;
+ next_end:
+ end_ref += 1; /* we allways have start_ref<= end_ref*/
+ if(end_ref < (synctex_node_t *)SYNCTEX_END) {
+ node = *end_ref;
+ while((node = SYNCTEX_PARENT(node))) {
+ if(SYNCTEX_PARENT(*start_ref) == node) {
+ goto next_end;
+ }
+ }
+ start_ref += 1;
+ *start_ref = *end_ref;
+ goto next_end;
+ }
+ start_ref += 1;
+ SYNCTEX_END = (char *)start_ref;
+ }
+ SYNCTEX_CUR = NULL;
+ return (SYNCTEX_END-SYNCTEX_START)/sizeof(synctex_node_t);
+ }
+# if defined(__SYNCTEX_STRONG_DISPLAY_QUERY__)
+ break;
+# else
+ ++line;
+# endif
+ }
+ return 0;
+}
+
+synctex_node_t synctex_next_result(synctex_scanner_t scanner) {
+ if(NULL == SYNCTEX_CUR) {
+ SYNCTEX_CUR = SYNCTEX_START;
+ } else {
+ SYNCTEX_CUR+=sizeof(synctex_node_t);
+ }
+ if(SYNCTEX_CUR<SYNCTEX_END) {
+ return *(synctex_node_t*)SYNCTEX_CUR;
+ } else {
+ return NULL;
+ }
+}
+
+/* This struct records a point in TeX coordinates.*/
+typedef struct {
+ int h;
+ int v;
+} synctex_point_t;
+
+/* This struct records distances, the left one is positive or 0 and the right one is negative or 0.
+ * When comparing the locations of 2 different graphical objects on the page, we will have to also record the
+ * horizontal distance as signed to keep track of the typesetting order.*/
+typedef struct {
+ int left;
+ int right;
+} synctex_distances_t;
+
+typedef struct {
+ synctex_point_t left;
+ synctex_point_t right;
+} synctex_offsets_t;
+
+
+typedef struct {
+ synctex_node_t left;
+ synctex_node_t right;
+} synctex_node_set_t;
+
+/* The smallest container between two has the smallest width or height.
+ * This comparison is used when there are 2 overlapping boxes that contain the hit point.
+ * For ConTeXt, the problem appears at each page.
+ * The chosen box is the one with the smallest height, then the smallest width. */
+SYNCTEX_INLINE static synctex_node_t _synctex_smallest_container(synctex_node_t node, synctex_node_t other_node);
+
+/* Returns the distance between the hit point hitPoint=(H,V) and the given node. */
+synctex_bool_t _synctex_point_in_box(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible);
+int _synctex_node_distance_to_point(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible);
+
+/* The best container is the deeper box that contains the hit point (H,V).
+ * _synctex_eq_deepest_container starts with node whereas
+ * _synctex_box_child_deepest starts with node's children, if any
+ * if node is not a box, or a void box, NULL is returned.
+ * We traverse the node tree in a deep first manner and stop as soon as a result is found. */
+static synctex_node_t _synctex_eq_deepest_container(synctex_point_t hitPoint,synctex_node_t node, synctex_bool_t visible);
+
+/* Once a best container is found, the closest children are the closest nodes to the left or right of the hit point.
+ * Only horizontal and vertical offsets are used to compare the positions of the nodes. */
+SYNCTEX_INLINE static int _synctex_eq_get_closest_children_in_box(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t* bestNodesRef,synctex_distances_t* bestDistancesRef, synctex_bool_t visible);
+
+/* The closest container is the box that is the one closest to the given point.
+ * The "visible" version takes into account the visible dimensions instead of the real ones given by TeX. */
+SYNCTEX_INLINE static synctex_node_t _synctex_eq_closest_child(synctex_point_t hitPoint,synctex_node_t node, synctex_bool_t visible);
+
+#define SYNCTEX_MASK_LEFT 1
+#define SYNCTEX_MASK_RIGHT 2
+
+int synctex_edit_query(synctex_scanner_t scanner,int page,float h,float v) {
+ synctex_node_t sheet = NULL;
+ synctex_node_t node = NULL; /* placeholder */
+ synctex_node_t other_node = NULL; /* placeholder */
+ synctex_point_t hitPoint = {0,0}; /* placeholder */
+ synctex_node_set_t bestNodes = {NULL,NULL}; /* holds the best node */
+ synctex_distances_t bestDistances = {INT_MAX,INT_MAX}; /* holds the best distances for the best node */
+ synctex_node_t bestContainer = NULL; /* placeholder */
+ if(NULL == (scanner = synctex_scanner_parse(scanner)) || 0 >= scanner->unit) {/* scanner->unit must be >0 */
+ return 0;
+ }
+ /* Convert the given point to scanner integer coordinates */
+ hitPoint.h = (h-scanner->x_offset)/scanner->unit;
+ hitPoint.v = (v-scanner->y_offset)/scanner->unit;
+ /* We will store in the scanner's buffer the result of the query. */
+ free(SYNCTEX_START);
+ SYNCTEX_START = SYNCTEX_END = SYNCTEX_CUR = NULL;
+ /* Find the proper sheet */
+ sheet = scanner->sheet;
+ while((sheet) && SYNCTEX_PAGE(sheet) != page) {
+ sheet = SYNCTEX_SIBLING(sheet);
+ }
+ if(NULL == sheet) {
+ return -1;
+ }
+ /* Now sheet points to the sheet node with proper page number */
+ /* Here is how we work:
+ * At first we do not consider the visible box dimensions. This will cover the most frequent cases.
+ * Then we try with the visible box dimensions.
+ * We try to find a non void box containing the hit point.
+ * We browse all the horizontal boxes until we find one containing the hit point. */
+ if((node = SYNCTEX_NEXT_HORIZ_BOX(sheet))) {
+ do {
+ if(_synctex_point_in_box(hitPoint,node,synctex_YES)) {
+ /* Maybe the hitPoint belongs to a contained vertical box. */
+end:
+ /* This trick is for catching overlapping boxes */
+ if((other_node = SYNCTEX_NEXT_HORIZ_BOX(node))) {
+ do {
+ if(_synctex_point_in_box(hitPoint,other_node,synctex_YES)) {
+ node = _synctex_smallest_container(other_node,node);
+ }
+ } while((other_node = SYNCTEX_NEXT_HORIZ_BOX(other_node)));
+ }
+ /* node is the smallest horizontal box that contains hitPoint. */
+ if((bestContainer = _synctex_eq_deepest_container(hitPoint,node,synctex_YES))) {
+ node = bestContainer;
+ }
+ _synctex_eq_get_closest_children_in_box(hitPoint,node,&bestNodes,&bestDistances,synctex_YES);
+ if(bestNodes.right && bestNodes.left) {
+ if((SYNCTEX_TAG(bestNodes.right)!=SYNCTEX_TAG(bestNodes.left))
+ || (SYNCTEX_LINE(bestNodes.right)!=SYNCTEX_LINE(bestNodes.left))
+ || (SYNCTEX_COLUMN(bestNodes.right)!=SYNCTEX_COLUMN(bestNodes.left))) {
+ if((SYNCTEX_START = malloc(2*sizeof(synctex_node_t)))) {
+ if(bestDistances.left>bestDistances.right) {
+ ((synctex_node_t *)SYNCTEX_START)[0] = bestNodes.right;
+ ((synctex_node_t *)SYNCTEX_START)[1] = bestNodes.left;
+ } else {
+ ((synctex_node_t *)SYNCTEX_START)[0] = bestNodes.left;
+ ((synctex_node_t *)SYNCTEX_START)[1] = bestNodes.right;
+ }
+ SYNCTEX_END = SYNCTEX_START + 2*sizeof(synctex_node_t);
+ SYNCTEX_CUR = NULL;
+ return (SYNCTEX_END-SYNCTEX_START)/sizeof(synctex_node_t);
+ }
+ return SYNCTEX_STATUS_ERROR;
+ }
+ /* both nodes have the same input coordinates
+ * We choose the one closest to the hit point */
+ if(bestDistances.left>bestDistances.right) {
+ bestNodes.left = bestNodes.right;
+ }
+ bestNodes.right = NULL;
+ } else if(bestNodes.right) {
+ bestNodes.left = bestNodes.right;
+ } else if(!bestNodes.left){
+ bestNodes.left = node;
+ }
+ if((SYNCTEX_START = malloc(sizeof(synctex_node_t)))) {
+ * (synctex_node_t *)SYNCTEX_START = bestNodes.left;
+ SYNCTEX_END = SYNCTEX_START + sizeof(synctex_node_t);
+ SYNCTEX_CUR = NULL;
+ return (SYNCTEX_END-SYNCTEX_START)/sizeof(synctex_node_t);
+ }
+ return SYNCTEX_STATUS_ERROR;
+ }
+ } while ((node = SYNCTEX_NEXT_HORIZ_BOX(node)));
+ /* All the horizontal boxes have been tested,
+ * None of them contains the hit point.
+ */
+ }
+ /* We are not lucky */
+ if((node = SYNCTEX_CHILD(sheet))) {
+ goto end;
+ }
+ return 0;
+}
+
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark Utilities
+# endif
+
+int _synctex_bail(void) {
+ _synctex_error("SyncTeX ERROR\n");
+ return -1;
+}
+/* Rougly speaking, this is:
+ * node's h coordinate - hitPoint's h coordinate.
+ * If node is to the right of the hit point, then this distance is positive,
+ * if node is to the left of the hit point, this distance is negative.*/
+int _synctex_point_h_distance(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible);
+int _synctex_point_h_distance(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible) {
+ if(node) {
+ int min,med,max;
+ switch(node->class->type) {
+ /* The distance between a point and a box is special.
+ * It is not the euclidian distance, nor something similar.
+ * We have to take into account the particular layout,
+ * and the box hierarchy.
+ * Given a box, there are 9 regions delimited by the lines of the edges of the box.
+ * The origin being at the top left corner of the page,
+ * we also give names to the vertices of the box.
+ *
+ * 1 | 2 | 3
+ * ---A---B--->
+ * 4 | 5 | 6
+ * ---C---D--->
+ * 7 | 8 | 9
+ * v v
+ */
+ case synctex_node_type_hbox:
+ /* getting the box bounds, taking into account negative width, height and depth. */
+ min = visible?SYNCTEX_HORIZ_V(node):SYNCTEX_HORIZ(node);
+ max = min + (visible?SYNCTEX_ABS_WIDTH_V(node):SYNCTEX_ABS_WIDTH(node));
+ /* We allways have min <= max */
+ if(hitPoint.h<min) {
+ return min - hitPoint.h; /* regions 1+4+7, result is > 0 */
+ } else if (hitPoint.h>max) {
+ return max - hitPoint.h; /* regions 3+6+9, result is < 0 */
+ } else {
+ return 0; /* regions 2+5+8, inside the box, except for vertical coordinates */
+ }
+ break;
+ case synctex_node_type_vbox:
+ case synctex_node_type_void_vbox:
+ case synctex_node_type_void_hbox:
+ /* getting the box bounds, taking into account negative width, height and depth.
+ * For these boxes, no visible dimension available */
+ min = SYNCTEX_HORIZ(node);
+ max = min + SYNCTEX_ABS_WIDTH(node);
+ /* We allways have min <= max */
+ if(hitPoint.h<min) {
+ return min - hitPoint.h; /* regions 1+4+7, result is > 0 */
+ } else if (hitPoint.h>max) {
+ return max - hitPoint.h; /* regions 3+6+9, result is < 0 */
+ } else {
+ return 0; /* regions 2+5+8, inside the box, except for vertical coordinates */
+ }
+ break;
+ case synctex_node_type_kern:
+ /* IMPORTANT NOTICE: the location of the kern is recorded AFTER the move.
+ * The distance to the kern is very special,
+ * in general, there is no text material in the kern,
+ * this is why we compute the offset relative to the closest edge of the kern.*/
+ max = SYNCTEX_WIDTH(node);
+ if(max<0) {
+ min = SYNCTEX_HORIZ(node);
+ max = min - max;
+ } else {
+ min = -max;
+ max = SYNCTEX_HORIZ(node);
+ min += max;
+ }
+ med = (min+max)/2;
+ /* positive kern: '.' means text, '>' means kern offset
+ * .............
+ * min>>>>med>>>>max
+ * ...............
+ * negative kern: '.' means text, '<' means kern offset
+ * ............................
+ * min<<<<med<<<<max
+ * .................................
+ * Actually, we do not take into account negative widths.
+ * There is a problem for such situation when there is efectively overlapping text.
+ * But this should be extremely rare. I guess that in that case, many different choices
+ * could be made, one being in contradiction of the other.
+ * It means that the best choice should be made according to the situation that occurs
+ * most frequently.
+ */
+ if(hitPoint.h<min) {
+ return min - hitPoint.h + 1; /* penalty to ensure other nodes are chosen first in case of overlapping ones */
+ } else if (hitPoint.h>max) {
+ return max - hitPoint.h - 1; /* same kind of penalty */
+ } else if (hitPoint.h>med) {
+ /* do things like if the node had 0 width and was placed at the max edge + 1*/
+ return max - hitPoint.h + 1; /* positive, the kern is to the right of the hitPoint */
+ } else {
+ return min - hitPoint.h - 1; /* negative, the kern is to the left of the hitPoint */
+ }
+ case synctex_node_type_glue:
+ case synctex_node_type_math:
+ return SYNCTEX_HORIZ(node) - hitPoint.h;
+ }
+ }
+ return INT_MAX;/* We always assume that the node is faraway to the right*/
+}
+/* Rougly speaking, this is:
+ * node's v coordinate - hitPoint's v coordinate.
+ * If node is at the top of the hit point, then this distance is positive,
+ * if node is at the bottom of the hit point, this distance is negative.*/
+int _synctex_point_v_distance(synctex_point_t hitPoint, synctex_node_t node,synctex_bool_t visible);
+int _synctex_point_v_distance(synctex_point_t hitPoint, synctex_node_t node,synctex_bool_t visible) {
+# ifdef __DARWIN_UNIX03
+# pragma unused(visible)
+# endif
+ if(node) {
+ int min,max;
+ switch(node->class->type) {
+ /* The distance between a point and a box is special.
+ * It is not the euclidian distance, nor something similar.
+ * We have to take into account the particular layout,
+ * and the box hierarchy.
+ * Given a box, there are 9 regions delimited by the lines of the edges of the box.
+ * The origin being at the top left corner of the page,
+ * we also give names to the vertices of the box.
+ *
+ * 1 | 2 | 3
+ * ---A---B--->
+ * 4 | 5 | 6
+ * ---C---D--->
+ * 7 | 8 | 9
+ * v v
+ */
+ case synctex_node_type_hbox:
+ /* getting the box bounds, taking into account negative width, height and depth. */
+ min = SYNCTEX_VERT_V(node);
+ max = min + SYNCTEX_ABS_DEPTH_V(node);
+ min -= SYNCTEX_ABS_HEIGHT_V(node);
+ /* We allways have min <= max */
+ if(hitPoint.v<min) {
+ return min - hitPoint.v; /* regions 1+2+3, result is > 0 */
+ } else if (hitPoint.v>max) {
+ return max - hitPoint.v; /* regions 7+8+9, result is < 0 */
+ } else {
+ return 0; /* regions 4.5.6, inside the box, except for horizontal coordinates */
+ }
+ break;
+ case synctex_node_type_vbox:
+ case synctex_node_type_void_vbox:
+ case synctex_node_type_void_hbox:
+ /* getting the box bounds, taking into account negative width, height and depth. */
+ min = SYNCTEX_VERT(node);
+ max = min + SYNCTEX_ABS_DEPTH(node);
+ min -= SYNCTEX_ABS_HEIGHT(node);
+ /* We allways have min <= max */
+ if(hitPoint.v<min) {
+ return min - hitPoint.v; /* regions 1+2+3, result is > 0 */
+ } else if (hitPoint.v>max) {
+ return max - hitPoint.v; /* regions 7+8+9, result is < 0 */
+ } else {
+ return 0; /* regions 4.5.6, inside the box, except for horizontal coordinates */
+ }
+ break;
+ case synctex_node_type_kern:
+ case synctex_node_type_glue:
+ case synctex_node_type_math:
+ return SYNCTEX_VERT(node) - hitPoint.v;
+ }
+ }
+ return INT_MAX;/* We always assume that the node is faraway to the top*/
+}
+
+SYNCTEX_INLINE static synctex_node_t _synctex_smallest_container(synctex_node_t node, synctex_node_t other_node) {
+ float height, other_height;
+ if(SYNCTEX_ABS_WIDTH(node)<SYNCTEX_ABS_WIDTH(other_node)) {
+ return node;
+ }
+ if(SYNCTEX_ABS_WIDTH(node)>SYNCTEX_ABS_WIDTH(other_node)) {
+ return other_node;
+ }
+ height = SYNCTEX_ABS_DEPTH(node) + SYNCTEX_ABS_HEIGHT(node);
+ other_height = SYNCTEX_ABS_DEPTH(other_node) + SYNCTEX_ABS_HEIGHT(other_node);
+ if(height<other_height) {
+ return node;
+ }
+ if(height>other_height) {
+ return other_node;
+ }
+ return node;
+}
+
+synctex_bool_t _synctex_point_in_box(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible) {
+ if(node) {
+ if(0 == _synctex_point_h_distance(hitPoint,node,visible)
+ && 0 == _synctex_point_v_distance(hitPoint,node,visible)) {
+ return synctex_YES;
+ }
+ }
+ return synctex_NO;
+}
+
+int _synctex_node_distance_to_point(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible) {
+# ifdef __DARWIN_UNIX03
+# pragma unused(visible)
+# endif
+ int result = INT_MAX; /* when the distance is meaning less (sheet, input...) */
+ if(node) {
+ int minH,maxH,minV,maxV;
+ switch(node->class->type) {
+ /* The distance between a point and a box is special.
+ * It is not the euclidian distance, nor something similar.
+ * We have to take into account the particular layout,
+ * and the box hierarchy.
+ * Given a box, there are 9 regions delimited by the lines of the edges of the box.
+ * The origin being at the top left corner of the page,
+ * we also give names to the vertices of the box.
+ *
+ * 1 | 2 | 3
+ * ---A---B--->
+ * 4 | 5 | 6
+ * ---C---D--->
+ * 7 | 8 | 9
+ * v v
+ * In each region, there is a different formula.
+ * In the end we have a continuous distance which may not be a mathematical distance but who cares. */
+ case synctex_node_type_vbox:
+ case synctex_node_type_void_vbox:
+ case synctex_node_type_hbox:
+ case synctex_node_type_void_hbox:
+ /* getting the box bounds, taking into account negative widths. */
+ minH = SYNCTEX_HORIZ(node);
+ maxH = minH + SYNCTEX_ABS_WIDTH(node);
+ minV = SYNCTEX_VERT(node);
+ maxV = minV + SYNCTEX_ABS_DEPTH(node);
+ minV -= SYNCTEX_ABS_HEIGHT(node);
+ /* In what region is the point hitPoint=(H,V) ? */
+ if(hitPoint.v<minV) {
+ if(hitPoint.h<minH) {
+ /* This is region 1. The distance to the box is the L1 distance PA. */
+ result = minV - hitPoint.v + minH - hitPoint.h;/* Integer overflow? probability epsilon */
+ } else if(hitPoint.h<=maxH) {
+ /* This is region 2. The distance to the box is the geometrical distance to the top edge. */
+ result = minV - hitPoint.v;
+ } else {
+ /* This is region 3. The distance to the box is the L1 distance PB. */
+ result = minV - hitPoint.v + hitPoint.h - maxH;
+ }
+ } else if(hitPoint.v<=maxV) {
+ if(hitPoint.h<minH) {
+ /* This is region 4. The distance to the box is the geometrical distance to the left edge. */
+ result = minH - hitPoint.h;
+ } else if(hitPoint.h<=maxH) {
+ /* This is region 4. We are inside the box. */
+ result = 0;
+ } else {
+ /* This is region 6. The distance to the box is the geometrical distance to the right edge. */
+ result = hitPoint.h - maxH;
+ }
+ } else {
+ if(hitPoint.h<minH) {
+ /* This is region 7. The distance to the box is the L1 distance PC. */
+ result = hitPoint.v - maxV + minH - hitPoint.h;
+ } else if(hitPoint.h<=maxH) {
+ /* This is region 8. The distance to the box is the geometrical distance to the top edge. */
+ result = hitPoint.v - maxV;
+ } else {
+ /* This is region 9. The distance to the box is the L1 distance PD. */
+ result = hitPoint.v - maxV + hitPoint.h - maxH;
+ }
+ }
+ break;
+ case synctex_node_type_kern:
+ maxH = SYNCTEX_WIDTH(node);
+ if(maxH<0) {
+ minH = SYNCTEX_HORIZ(node);
+ maxH = minH - maxH;
+ } else {
+ minH = -maxH;
+ maxH = SYNCTEX_HORIZ(node);
+ minH += maxH;
+ }
+ minV = SYNCTEX_VERT(node);
+ if(hitPoint.h<minH) {
+ if(hitPoint.v>minV) {
+ result = hitPoint.v - minV + minH - hitPoint.h;
+ } else {
+ result = minV - hitPoint.v + minH - hitPoint.h;
+ }
+ } else if (hitPoint.h>maxH) {
+ if(hitPoint.v>minV) {
+ result = hitPoint.v - minV + hitPoint.h - maxH;
+ } else {
+ result = minV - hitPoint.v + hitPoint.h - maxH;
+ }
+ } else if(hitPoint.v>minV) {
+ result = hitPoint.v - minV;
+ } else {
+ result = minV - hitPoint.v;
+ }
+ break;
+ case synctex_node_type_glue:
+ case synctex_node_type_math:
+ minH = SYNCTEX_HORIZ(node);
+ minV = SYNCTEX_VERT(node);
+ if(hitPoint.h<minH) {
+ if(hitPoint.v>minV) {
+ result = hitPoint.v - minV + minH - hitPoint.h;
+ } else {
+ result = minV - hitPoint.v + minH - hitPoint.h;
+ }
+ } else if(hitPoint.v>minV) {
+ result = hitPoint.v - minV + hitPoint.h - minH;
+ } else {
+ result = minV - hitPoint.v + hitPoint.h - minH;
+ }
+ break;
+ }
+ }
+ return result;
+}
+
+static synctex_node_t _synctex_eq_deepest_container(synctex_point_t hitPoint,synctex_node_t node, synctex_bool_t visible) {
+ if(node) {
+ synctex_node_t result = NULL;
+ synctex_node_t child = NULL;
+ switch(node->class->type) {
+ case synctex_node_type_vbox:
+ case synctex_node_type_hbox:
+ /* test the deep nodes first */
+ if((child = SYNCTEX_CHILD(node))) {
+ do {
+ if((result = _synctex_eq_deepest_container(hitPoint,child,visible))) {
+ return result;
+ }
+ } while((child = SYNCTEX_SIBLING(child)));
+ }
+ /* is the hit point inside the box? */
+ if(_synctex_point_in_box(hitPoint,node,visible)) {
+ /* for vboxes we try to use some node inside.
+ * Walk through the list of siblings until we find the closest one.
+ * Only consider siblings with children. */
+ if((node->class->type == synctex_node_type_vbox) && (child = SYNCTEX_CHILD(node))) {
+ int bestDistance = INT_MAX;
+ do {
+ if(SYNCTEX_CHILD(child)) {
+ int distance = _synctex_node_distance_to_point(hitPoint,child,visible);
+ if(distance < bestDistance) {
+ bestDistance = distance;
+ node = child;
+ }
+ }
+ } while((child = SYNCTEX_SIBLING(child)));
+ }
+ return node;
+ }
+ }
+ }
+ return NULL;
+}
+
+/* Compares the locations of the hitPoint with the locations of the various nodes contained in the box.
+ * As it is an horizontal box, we only compare horizontal coordinates. */
+SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_hbox(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t* bestNodesRef,synctex_distances_t* bestDistancesRef, synctex_bool_t visible);
+SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_hbox(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t* bestNodesRef,synctex_distances_t* bestDistancesRef, synctex_bool_t visible) {
+ int result = 0;
+ if((node = SYNCTEX_CHILD(node))) {
+ do {
+ int off7 = _synctex_point_h_distance(hitPoint,node,visible);
+ if(off7 > 0) {
+ /* node is to the right of the hit point.
+ * We compare node and the previously recorded one, through the recorded distance.
+ * If the nodes have the same tag, prefer the one with the smallest line number,
+ * if the nodes also have the same line number, prefer the one with the smallest column. */
+ if(bestDistancesRef->right > off7) {
+ bestDistancesRef->right = off7;
+ bestNodesRef->right = node;
+ result |= SYNCTEX_MASK_RIGHT;
+ } else if(bestDistancesRef->right == off7 && bestNodesRef->right) {
+ if(SYNCTEX_TAG(bestNodesRef->right) == SYNCTEX_TAG(node)
+ && (SYNCTEX_LINE(bestNodesRef->right) > SYNCTEX_LINE(node)
+ || (SYNCTEX_LINE(bestNodesRef->right) == SYNCTEX_LINE(node)
+ && SYNCTEX_COLUMN(bestNodesRef->right) > SYNCTEX_COLUMN(node)))) {
+ bestNodesRef->right = node;
+ result |= SYNCTEX_MASK_RIGHT;
+ }
+ }
+ } else if(off7 == 0) {
+ /* hitPoint is inside node. */
+ bestDistancesRef->left = bestDistancesRef->right = 0;
+ bestNodesRef->left = node;
+ bestNodesRef->right = NULL;
+ result |= SYNCTEX_MASK_LEFT;
+ } else { /* here off7 < 0, hitPoint is to the right of node */
+ off7 = -off7;
+ if(bestDistancesRef->left > off7) {
+ bestDistancesRef->left = off7;
+ bestNodesRef->left = node;
+ result |= SYNCTEX_MASK_LEFT;
+ } else if(bestDistancesRef->left == off7 && bestNodesRef->left) {
+ if(SYNCTEX_TAG(bestNodesRef->left) == SYNCTEX_TAG(node)
+ && (SYNCTEX_LINE(bestNodesRef->left) > SYNCTEX_LINE(node)
+ || (SYNCTEX_LINE(bestNodesRef->left) == SYNCTEX_LINE(node)
+ && SYNCTEX_COLUMN(bestNodesRef->left) > SYNCTEX_COLUMN(node)))) {
+ bestNodesRef->left = node;
+ result |= SYNCTEX_MASK_LEFT;
+ }
+ }
+ }
+ } while((node = SYNCTEX_SIBLING(node)));
+ if(result & SYNCTEX_MASK_LEFT) {
+ /* the left node is new, try to narrow the result */
+ if((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->left,visible))) {
+ bestNodesRef->left = node;
+ }
+ if((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->left,visible))) {
+ bestNodesRef->left = node;
+ }
+ }
+ if(result & SYNCTEX_MASK_RIGHT) {
+ /* the right node is new, try to narrow the result */
+ if((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->right,visible))) {
+ bestNodesRef->right = node;
+ }
+ if((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->right,visible))) {
+ bestNodesRef->right = node;
+ }
+ }
+ }
+ return result;
+}
+SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_vbox(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t* bestNodesRef,synctex_distances_t* bestDistancesRef,synctex_bool_t visible);
+SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_vbox(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t* bestNodesRef,synctex_distances_t* bestDistancesRef,synctex_bool_t visible) {
+ int result = 0;
+ if((node = SYNCTEX_CHILD(node))) {
+ do {
+ int off7 = _synctex_point_v_distance(hitPoint,node,visible);/* this is what makes the difference with the h version above */
+ if(off7 > 0) {
+ /* node is to the top of the hit point (below because TeX is oriented from top to bottom.
+ * We compare node and the previously recorded one, through the recorded distance.
+ * If the nodes have the same tag, prefer the one with the smallest line number,
+ * if the nodes also have the same line number, prefer the one with the smallest column. */
+ if(bestDistancesRef->right > off7) {
+ bestDistancesRef->right = off7;
+ bestNodesRef->right = node;
+ result |= SYNCTEX_MASK_RIGHT;
+ } else if(bestDistancesRef->right == off7 && bestNodesRef->right) {
+ if(SYNCTEX_TAG(bestNodesRef->right) == SYNCTEX_TAG(node)
+ && (SYNCTEX_LINE(bestNodesRef->right) > SYNCTEX_LINE(node)
+ || (SYNCTEX_LINE(bestNodesRef->right) == SYNCTEX_LINE(node)
+ && SYNCTEX_COLUMN(bestNodesRef->right) > SYNCTEX_COLUMN(node)))) {
+ bestNodesRef->right = node;
+ result |= SYNCTEX_MASK_RIGHT;
+ }
+ }
+ } else if(off7 == 0) {
+ bestDistancesRef->left = bestDistancesRef->right = 0;
+ bestNodesRef->left = node;
+ bestNodesRef->right = NULL;
+ result |= SYNCTEX_MASK_LEFT;
+ } else { /* here off7 < 0 */
+ off7 = -off7;
+ if(bestDistancesRef->left > off7) {
+ bestDistancesRef->left = off7;
+ bestNodesRef->left = node;
+ result |= SYNCTEX_MASK_LEFT;
+ } else if(bestDistancesRef->left == off7 && bestNodesRef->left) {
+ if(SYNCTEX_TAG(bestNodesRef->left) == SYNCTEX_TAG(node)
+ && (SYNCTEX_LINE(bestNodesRef->left) > SYNCTEX_LINE(node)
+ || (SYNCTEX_LINE(bestNodesRef->left) == SYNCTEX_LINE(node)
+ && SYNCTEX_COLUMN(bestNodesRef->left) > SYNCTEX_COLUMN(node)))) {
+ bestNodesRef->left = node;
+ result |= SYNCTEX_MASK_LEFT;
+ }
+ }
+ }
+ } while((node = SYNCTEX_SIBLING(node)));
+ if(result & SYNCTEX_MASK_LEFT) {
+ /* the left node is new, try to narrow the result */
+ if((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->left,visible))) {
+ bestNodesRef->left = node;
+ }
+ if((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->left,visible))) {
+ bestNodesRef->left = node;
+ }
+ }
+ if(result & SYNCTEX_MASK_RIGHT) {
+ /* the right node is new, try to narrow the result */
+ if((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->right,visible))) {
+ bestNodesRef->right = node;
+ }
+ if((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->right,visible))) {
+ bestNodesRef->right = node;
+ }
+ }
+ }
+ return result;
+}
+SYNCTEX_INLINE static int _synctex_eq_get_closest_children_in_box(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t* bestNodesRef,synctex_distances_t* bestDistancesRef,synctex_bool_t visible) {
+ if(node) {
+ switch(node->class->type) {
+ case synctex_node_type_hbox:
+ return __synctex_eq_get_closest_children_in_hbox(hitPoint, node, bestNodesRef, bestDistancesRef,visible);
+ case synctex_node_type_vbox:
+ return __synctex_eq_get_closest_children_in_vbox(hitPoint, node, bestNodesRef, bestDistancesRef,visible);
+ }
+ }
+ return 0;
+}
+
+SYNCTEX_INLINE static synctex_node_t __synctex_eq_closest_child(synctex_point_t hitPoint, synctex_node_t node,int* distanceRef, synctex_bool_t visible);
+SYNCTEX_INLINE static synctex_node_t __synctex_eq_closest_child(synctex_point_t hitPoint, synctex_node_t node,int* distanceRef, synctex_bool_t visible) {
+ synctex_node_t best_node = NULL;
+ if((node = SYNCTEX_CHILD(node))) {
+ do {
+ int distance = _synctex_node_distance_to_point(hitPoint,node,visible);
+ synctex_node_t candidate = NULL;
+ if(distance<=*distanceRef) {
+ *distanceRef = distance;
+ best_node = node;
+ }
+ switch(node->class->type) {
+ case synctex_node_type_vbox:
+ case synctex_node_type_hbox:
+ if((candidate = __synctex_eq_closest_child(hitPoint,node,distanceRef,visible))) {
+ best_node = candidate;
+ }
+ }
+ } while((node = SYNCTEX_SIBLING(node)));
+ }
+ return best_node;
+}
+SYNCTEX_INLINE static synctex_node_t _synctex_eq_closest_child(synctex_point_t hitPoint,synctex_node_t node, synctex_bool_t visible) {
+ if(node) {
+ switch(node->class->type) {
+ case synctex_node_type_hbox:
+ case synctex_node_type_vbox:
+ {
+ int best_distance = INT_MAX;
+ synctex_node_t best_node = __synctex_eq_closest_child(hitPoint,node,&best_distance,visible);
+ if((best_node)) {
+ synctex_node_t child = NULL;
+ switch(best_node->class->type) {
+ case synctex_node_type_vbox:
+ case synctex_node_type_hbox:
+ if((child = SYNCTEX_CHILD(best_node))) {
+ best_distance = _synctex_node_distance_to_point(hitPoint,child,visible);
+ while((child = SYNCTEX_SIBLING(child))) {
+ int distance = _synctex_node_distance_to_point(hitPoint,child,visible);
+ if(distance<=best_distance) {
+ best_distance = distance;
+ best_node = child;
+ }
+ }
+ }
+ }
+ }
+ return best_node;
+ }
+ }
+ }
+ return NULL;
+}
+
+# ifdef SYNCTEX_NOTHING
+# pragma mark -
+# pragma mark Updater
+# endif
+
+typedef int (*synctex_fprintf_t)(void *, const char * , ...); /* print formatted to either FILE * or gzFile */
+
+# define SYNCTEX_BITS_PER_BYTE 8
+
+struct __synctex_updater_t {
+ void *file; /* the foo.synctex or foo.synctex.gz I/O identifier */
+ synctex_fprintf_t fprintf; /* either fprintf or gzprintf */
+ int length; /* the number of chars appended */
+ struct _flags {
+ unsigned int no_gz:1; /* Whether zlib is used or not */
+ unsigned int reserved:SYNCTEX_BITS_PER_BYTE*sizeof(int)-1; /* Align */
+ } flags;
+};
+# define SYNCTEX_FILE updater->file
+# define SYNCTEX_NO_GZ ((updater->flags).no_gz)
+# define SYNCTEX_fprintf (*(updater->fprintf))
+
+synctex_updater_t synctex_updater_new_with_output_file(const char * output, const char * build_directory) {
+ synctex_updater_t updater = NULL;
+ char * synctex = NULL;
+ synctex_io_mode_t io_mode = synctex_io_mode_read;
+ const char * mode;
+ /* prepare the updater */
+ updater = (synctex_updater_t)_synctex_malloc(sizeof(synctex_updater_t));
+ if(NULL == updater) {
+ _synctex_error("! synctex_updater_new_with_file: malloc problem");
+ return NULL;
+ }
+ if(_synctex_open(output,build_directory,&synctex,&SYNCTEX_FILE,synctex_NO,&io_mode)
+ && _synctex_open(output,build_directory,&synctex,&SYNCTEX_FILE,synctex_YES,&io_mode)) {
+return_on_error:
+ free(updater);
+ return NULL;
+ }
+ /* OK, the file exists */
+ gzclose(SYNCTEX_FILE);
+ SYNCTEX_FILE = NULL;
+ SYNCTEX_NO_GZ = io_mode%2?synctex_NO:synctex_YES;
+ mode = synctex_io_modes[io_mode+synctex_io_mode_append];/* either "a" or "ab", depending on the file extension */
+ if(SYNCTEX_NO_GZ) {
+ if(NULL == (SYNCTEX_FILE = (void *)fopen(synctex,mode))) {
+no_write_error:
+ _synctex_error("! synctex_updater_new_with_file: Can't append to %s",synctex);
+ free(synctex);
+ goto return_on_error;
+ }
+ updater->fprintf = (synctex_fprintf_t)(&fprintf);
+ } else {
+ if(NULL == (SYNCTEX_FILE = (void *)gzopen(synctex,mode))) {
+ goto no_write_error;
+ }
+ updater->fprintf = (synctex_fprintf_t)(&gzprintf);
+ }
+ printf("SyncTeX: updating %s...",synctex);
+ free(synctex);
+ return updater;
+}
+
+
+void synctex_updater_append_magnification(synctex_updater_t updater, char * magnification){
+ if(NULL==updater) {
+ return;
+ }
+ if(magnification && strlen(magnification)) {
+ updater->length += SYNCTEX_fprintf(SYNCTEX_FILE,"Magnification:%s\n",magnification);
+ }
+}
+
+void synctex_updater_append_x_offset(synctex_updater_t updater, char * x_offset){
+ if(NULL==updater) {
+ return;
+ }
+ if(x_offset && strlen(x_offset)) {
+ updater->length += SYNCTEX_fprintf(SYNCTEX_FILE,"X Offset:%s\n",x_offset);
+ }
+}
+
+void synctex_updater_append_y_offset(synctex_updater_t updater, char * y_offset){
+ if(NULL==updater) {
+ return;
+ }
+ if(y_offset && strlen(y_offset)) {
+ updater->length += SYNCTEX_fprintf(SYNCTEX_FILE,"Y Offset:%s\n",y_offset);
+ }
+}
+
+void synctex_updater_free(synctex_updater_t updater){
+ if(NULL==updater) {
+ return;
+ }
+ if(updater->length>0) {
+ SYNCTEX_fprintf(SYNCTEX_FILE,"!%i\n",updater->length);
+ }
+ if (SYNCTEX_NO_GZ) {
+ fclose((FILE *)SYNCTEX_FILE);
+ } else {
+ gzclose((gzFile)SYNCTEX_FILE);
+ }
+ free(updater);
+ printf("... done.\n");
+ return;
+}
diff --git a/cut-n-paste/synctex/synctex_parser.h b/cut-n-paste/synctex/synctex_parser.h
new file mode 100644
index 00000000..b164b7fb
--- /dev/null
+++ b/cut-n-paste/synctex/synctex_parser.h
@@ -0,0 +1,345 @@
+/*
+Copyright (c) 2008, 2009, 2010 jerome DOT laurens AT u-bourgogne DOT fr
+
+This file is part of the SyncTeX package.
+
+Latest Revision: Wed Jul 1 11:16:51 UTC 2009
+
+Version: 1.12
+See synctex_parser_readme.txt for more details
+
+License:
+--------
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE
+
+Except as contained in this notice, the name of the copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in this Software without prior written
+authorization from the copyright holder.
+
+Acknowledgments:
+----------------
+The author received useful remarks from the pdfTeX developers, especially Hahn The Thanh,
+and significant help from XeTeX developer Jonathan Kew
+
+Nota Bene:
+----------
+If you include or use a significant part of the synctex package into a software,
+I would appreciate to be listed as contributor and see "SyncTeX" highlighted.
+
+Version 1
+Thu Jun 19 09:39:21 UTC 2008
+
+*/
+
+#ifndef __SYNCTEX_PARSER__
+# define __SYNCTEX_PARSER__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* synctex_node_t is the type for all synctex nodes.
+ * The synctex file is parsed into a tree of nodes, either sheet, boxes, math nodes... */
+typedef struct _synctex_node * synctex_node_t;
+
+/* The main synctex object is a scanner
+ * Its implementation is considered private.
+ * The basic workflow is
+ * - create a "synctex scanner" with the contents of a file
+ * - perform actions on that scanner like display or edit queries
+ * - free the scanner when the work is done
+ */
+typedef struct __synctex_scanner_t _synctex_scanner_t;
+typedef _synctex_scanner_t * synctex_scanner_t;
+
+/* This is the designated method to create a new synctex scanner object.
+ * output is the pdf/dvi/xdv file associated to the synctex file.
+ * If necessary, it can be the tex file that originated the synctex file
+ * but this might cause problems if the \jobname has a custom value.
+ * Despite this method can accept a relative path in practice,
+ * you should only pass a full path name.
+ * The path should be encoded by the underlying file system,
+ * assuming that it is based on 8 bits characters, including UTF8,
+ * not 16 bits nor 32 bits.
+ * The last file extension is removed and replaced by the proper extension.
+ * Then the private method _synctex_scanner_new_with_contents_of_file is called.
+ * NULL is returned in case of an error or non existent file.
+ * Once you have a scanner, use the synctex_display_query and synctex_edit_query below.
+ * The new "build_directory" argument is available since version 1.5.
+ * It is the directory where all the auxiliary stuff is created.
+ * Sometimes, the synctex output file and the pdf, dvi or xdv files are not created in the same directory.
+ * This is the case in MikTeX (I will include this into TeX Live).
+ * This directory path can be nil, it will be ignored.
+ * It can be either absolute or relative to the directory of the output pdf (dvi or xdv) file.
+ * If no synctex file is found in the same directory as the output file, then we try to find one in the build directory.
+ * Please note that this new "build_directory" is provided as a convenient argument but should not be used.
+ * In fact, this is implempented as a work around of a bug in MikTeX where the synctex file does not follow the pdf file.
+ * The new "parse" argument is available since version 1.5. In general, use 1.
+ * Use 0 only if you do not want to parse the content but just check the existence.
+ */
+synctex_scanner_t synctex_scanner_new_with_output_file(const char * output, const char * build_directory, int parse);
+
+/* This is the designated method to delete a synctex scanner object.
+ * Frees all the memory, you must call it when you are finished with the scanner.
+ */
+void synctex_scanner_free(synctex_scanner_t scanner);
+
+/* Send this message to force the scanner to parse the contents of the synctex output file.
+ * Nothing is performed if the file was already parsed.
+ * In each query below, this message is sent, but if you need to access information more directly,
+ * you must be sure that the parsing did occur.
+ * Usage:
+ * if((my_scanner = synctex_scanner_parse(my_scanner))) {
+ * continue with my_scanner...
+ * } else {
+ * there was a problem
+ * }
+ */
+synctex_scanner_t synctex_scanner_parse(synctex_scanner_t scanner);
+
+/* The main entry points.
+ * Given the file name, a line and a column number, synctex_display_query returns the number of nodes
+ * satisfying the contrain. Use code like
+ *
+ * if(synctex_display_query(scanner,name,line,column)>0) {
+ * synctex_node_t node;
+ * while((node = synctex_next_result(scanner))) {
+ * // do something with node
+ * ...
+ * }
+ * }
+ *
+ * For example, one can
+ * - highlight each resulting node in the output, using synctex_node_h and synctex_node_v
+ * - highlight all the rectangles enclosing those nodes, using synctex_box_... functions
+ * - highlight just the character using that information
+ *
+ * Given the page and the position in the page, synctex_edit_query returns the number of nodes
+ * satisfying the contrain. Use code like
+ *
+ * if(synctex_edit_query(scanner,page,h,v)>0) {
+ * synctex_node_t node;
+ * while(node = synctex_next_result(scanner)) {
+ * // do something with node
+ * ...
+ * }
+ * }
+ *
+ * For example, one can
+ * - highlight each resulting line in the input,
+ * - highlight just the character using that information
+ *
+ * page is 1 based
+ * h and v are coordinates in 72 dpi unit, relative to the top left corner of the page.
+ * If you make a new query, the result of the previous one is discarded.
+ * If one of this function returns a non positive integer,
+ * it means that an error occurred.
+ *
+ * Both methods are conservative, in the sense that matching is weak.
+ * If the exact column number is not found, there will be an answer with the whole line.
+ *
+ * Sumatra-PDF, Skim, iTeXMac2 and Texworks are examples of open source software that use this library.
+ * You can browse their code for a concrete implementation.
+ */
+int synctex_display_query(synctex_scanner_t scanner,const char * name,int line,int column);
+int synctex_edit_query(synctex_scanner_t scanner,int page,float h,float v);
+synctex_node_t synctex_next_result(synctex_scanner_t scanner);
+
+/* Display all the information contained in the scanner object.
+ * If the records are too numerous, only the first ones are displayed.
+ * This is mainly for informatinal purpose to help developers.
+ */
+void synctex_scanner_display(synctex_scanner_t scanner);
+
+/* The x and y offset of the origin in TeX coordinates. The magnification
+ These are used by pdf viewers that want to display the real box size.
+ For example, getting the horizontal coordinates of a node would require
+ synctex_node_box_h(node)*synctex_scanner_magnification(scanner)+synctex_scanner_x_offset(scanner)
+ Getting its TeX width would simply require
+ synctex_node_box_width(node)*synctex_scanner_magnification(scanner)
+ but direct methods are available for that below.
+ */
+int synctex_scanner_x_offset(synctex_scanner_t scanner);
+int synctex_scanner_y_offset(synctex_scanner_t scanner);
+float synctex_scanner_magnification(synctex_scanner_t scanner);
+
+/* Managing the input file names.
+ * Given a tag, synctex_scanner_get_name will return the corresponding file name.
+ * Conversely, given a file name, synctex_scanner_get_tag will retur, the corresponding tag.
+ * The file name must be the very same as understood by TeX.
+ * For example, if you \input myDir/foo.tex, the file name is myDir/foo.tex.
+ * No automatic path expansion is performed.
+ * Finally, synctex_scanner_input is the first input node of the scanner.
+ * To browse all the input node, use a loop like
+ *
+ * if((input_node = synctex_scanner_input(scanner))){
+ * do {
+ * blah
+ * } while((input_node=synctex_node_sibling(input_node)));
+ * }
+ *
+ * The output is the name that was used to create the scanner.
+ * The synctex is the real name of the synctex file,
+ * it was obtained from output by setting the proper file extension.
+ */
+const char * synctex_scanner_get_name(synctex_scanner_t scanner,int tag);
+int synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name);
+synctex_node_t synctex_scanner_input(synctex_scanner_t scanner);
+const char * synctex_scanner_get_output(synctex_scanner_t scanner);
+const char * synctex_scanner_get_synctex(synctex_scanner_t scanner);
+
+/* Browsing the nodes
+ * parent, child and sibling are standard names for tree nodes.
+ * The parent is one level higher, the child is one level deeper,
+ * and the sibling is at the same level.
+ * The sheet of a node is the first ancestor, it is of type sheet.
+ * A node and its sibling have the same parent.
+ * A node is the parent of its child.
+ * A node is either the child of its parent,
+ * or belongs to the sibling chain of its parent's child.
+ * The next node is either the child, the sibling or the parent's sibling,
+ * unless the parent is a sheet.
+ * This allows to navigate through all the nodes of a given sheet node:
+ *
+ * synctex_node_t node = sheet;
+ * while((node = synctex_node_next(node))) {
+ * // do something with node
+ * }
+ *
+ * With synctex_sheet_content, you can retrieve the sheet node given the page.
+ * The page is 1 based, according to TeX standards.
+ * Conversely synctex_node_sheet allows to retrieve the sheet containing a given node.
+ */
+synctex_node_t synctex_node_parent(synctex_node_t node);
+synctex_node_t synctex_node_sheet(synctex_node_t node);
+synctex_node_t synctex_node_child(synctex_node_t node);
+synctex_node_t synctex_node_sibling(synctex_node_t node);
+synctex_node_t synctex_node_next(synctex_node_t node);
+synctex_node_t synctex_sheet_content(synctex_scanner_t scanner,int page);
+
+/* These are the types of the synctex nodes */
+typedef enum {
+ synctex_node_type_error = 0,
+ synctex_node_type_input,
+ synctex_node_type_sheet,
+ synctex_node_type_vbox,
+ synctex_node_type_void_vbox,
+ synctex_node_type_hbox,
+ synctex_node_type_void_hbox,
+ synctex_node_type_kern,
+ synctex_node_type_glue,
+ synctex_node_type_math,
+ synctex_node_type_boundary,
+ synctex_node_number_of_types
+} synctex_node_type_t;
+
+/* synctex_node_type gives the type of a given node,
+ * synctex_node_isa gives the same information as a human readable text. */
+synctex_node_type_t synctex_node_type(synctex_node_t node);
+const char * synctex_node_isa(synctex_node_t node);
+
+/* This is primarily used for debugging purpose.
+ * The second one logs information for the node and recursively displays information for its next node */
+void synctex_node_log(synctex_node_t node);
+void synctex_node_display(synctex_node_t node);
+
+/* Given a node, access to its tag, line and column.
+ * The line and column numbers are 1 based.
+ * The latter is not yet fully supported in TeX, the default implementation returns 0 which means the whole line.
+ * When the tag is known, the scanner of the node will give the corresponding file name.
+ * When the tag is known, the scanner of the node will give the name.
+ */
+int synctex_node_tag(synctex_node_t node);
+int synctex_node_line(synctex_node_t node);
+int synctex_node_column(synctex_node_t node);
+
+/* This is the page where the node appears.
+ * This is a 1 based index as given by TeX.
+ */
+int synctex_node_page(synctex_node_t node);
+
+/* For quite all nodes, horizontal, vertical coordinates, and width.
+ * These are expressed in TeX small points coordinates, with origin at the top left corner.
+ */
+int synctex_node_h(synctex_node_t node);
+int synctex_node_v(synctex_node_t node);
+int synctex_node_width(synctex_node_t node);
+
+/* For all nodes, dimensions of the enclosing box.
+ * These are expressed in TeX small points coordinates, with origin at the top left corner.
+ * A box is enclosing itself.
+ */
+int synctex_node_box_h(synctex_node_t node);
+int synctex_node_box_v(synctex_node_t node);
+int synctex_node_box_width(synctex_node_t node);
+int synctex_node_box_height(synctex_node_t node);
+int synctex_node_box_depth(synctex_node_t node);
+
+/* For quite all nodes, horizontal, vertical coordinates, and width.
+ * The visible dimensions are bigger than real ones to compensate 0 width boxes
+ * that do contain nodes.
+ * These are expressed in page coordinates, with origin at the top left corner.
+ * A box is enclosing itself.
+ */
+float synctex_node_visible_h(synctex_node_t node);
+float synctex_node_visible_v(synctex_node_t node);
+float synctex_node_visible_width(synctex_node_t node);
+/* For all nodes, visible dimensions of the enclosing box.
+ * A box is enclosing itself.
+ * The visible dimensions are bigger than real ones to compensate 0 width boxes
+ * that do contain nodes.
+ */
+float synctex_node_box_visible_h(synctex_node_t node);
+float synctex_node_box_visible_v(synctex_node_t node);
+float synctex_node_box_visible_width(synctex_node_t node);
+float synctex_node_box_visible_height(synctex_node_t node);
+float synctex_node_box_visible_depth(synctex_node_t node);
+
+/* The main synctex updater object.
+ * This object is used to append information to the synctex file.
+ * Its implementation is considered private.
+ * It is used by the synctex command line tool to take into account modifications
+ * that could occur while postprocessing files by dvipdf like filters.
+ */
+typedef struct __synctex_updater_t _synctex_updater_t;
+typedef _synctex_updater_t * synctex_updater_t;
+
+/* Designated initializer.
+ * Once you are done with your whole job,
+ * free the updater */
+synctex_updater_t synctex_updater_new_with_output_file(const char * output, const char * directory);
+
+/* Use the next functions to append records to the synctex file,
+ * no consistency tests made on the arguments */
+void synctex_updater_append_magnification(synctex_updater_t updater, char * magnification);
+void synctex_updater_append_x_offset(synctex_updater_t updater, char * x_offset);
+void synctex_updater_append_y_offset(synctex_updater_t updater, char * y_offset);
+
+/* You MUST free the updater, once everything is properly appended */
+void synctex_updater_free(synctex_updater_t updater);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/cut-n-paste/synctex/synctex_parser_utils.c b/cut-n-paste/synctex/synctex_parser_utils.c
new file mode 100644
index 00000000..0aef5777
--- /dev/null
+++ b/cut-n-paste/synctex/synctex_parser_utils.c
@@ -0,0 +1,462 @@
+/*
+Copyright (c) 2008, 2009 jerome DOT laurens AT u-bourgogne DOT fr
+
+This file is part of the SyncTeX package.
+
+Latest Revision: Wed Nov 4 11:52:35 UTC 2009
+
+Version: 1.9
+See synctex_parser_readme.txt for more details
+
+License:
+--------
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE
+
+Except as contained in this notice, the name of the copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in this Software without prior written
+authorization from the copyright holder.
+
+*/
+
+/* In this file, we find all the functions that may depend on the operating system. */
+
+#include <synctex_parser_utils.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdio.h>
+
+#include <limits.h>
+#include <ctype.h>
+#include <string.h>
+
+#include <sys/stat.h>
+
+#if defined(_WIN32) || defined(__WIN32__) || defined(__TOS_WIN__) || defined(__WINDOWS__)
+#define SYNCTEX_WINDOWS 1
+#endif
+
+#ifdef _WIN32_WINNT_WINXP
+#define SYNCTEX_RECENT_WINDOWS 1
+#endif
+
+#ifdef SYNCTEX_WINDOWS
+#include <windows.h>
+#endif
+
+void *_synctex_malloc(size_t size) {
+ void * ptr = malloc(size);
+ if(ptr) {
+/* There used to be a switch to use bzero because it is more secure. JL */
+ memset(ptr,0, size);
+ }
+ return (void *)ptr;
+}
+
+int _synctex_error(const char * reason,...) {
+ va_list arg;
+ int result;
+ va_start (arg, reason);
+# ifdef SYNCTEX_RECENT_WINDOWS
+ {/* This code is contributed by William Blum.
+ As it does not work on some older computers,
+ the _WIN32 conditional here is replaced with a SYNCTEX_RECENT_WINDOWS one.
+ According to http://msdn.microsoft.com/en-us/library/aa363362(VS.85).aspx
+ Minimum supported client Windows 2000 Professional
+ Minimum supported server Windows 2000 Server
+ People running Windows 2K standard edition will not have OutputDebugStringA.
+ JL.*/
+ char *buff;
+ size_t len;
+ OutputDebugStringA("SyncTeX ERROR: ");
+ len = _vscprintf(reason, arg) + 1;
+ buff = (char*)malloc( len * sizeof(char) );
+ result = vsprintf(buff, reason, arg) +strlen("SyncTeX ERROR: ");
+ OutputDebugStringA(buff);
+ OutputDebugStringA("\n");
+ free(buff);
+ }
+# else
+ result = fprintf(stderr,"SyncTeX ERROR: ");
+ result += vfprintf(stderr, reason, arg);
+ result += fprintf(stderr,"\n");
+# endif
+ va_end (arg);
+ return result;
+}
+
+/* strip the last extension of the given string, this string is modified! */
+void _synctex_strip_last_path_extension(char * string) {
+ if(NULL != string){
+ char * last_component = NULL;
+ char * last_extension = NULL;
+ char * next = NULL;
+ /* first we find the last path component */
+ if(NULL == (last_component = strstr(string,"/"))){
+ last_component = string;
+ } else {
+ ++last_component;
+ while((next = strstr(last_component,"/"))){
+ last_component = next+1;
+ }
+ }
+# ifdef SYNCTEX_WINDOWS
+ /* On Windows, the '\' is also a path separator. */
+ while((next = strstr(last_component,"\\"))){
+ last_component = next+1;
+ }
+# endif
+ /* then we find the last path extension */
+ if((last_extension = strstr(last_component,"."))){
+ ++last_extension;
+ while((next = strstr(last_extension,"."))){
+ last_extension = next+1;
+ }
+ --last_extension;/* back to the "." */
+ if(last_extension>last_component){/* filter out paths like ....my/dir/.hidden"*/
+ last_extension[0] = '\0';
+ }
+ }
+ }
+}
+
+/* Compare two file names, windows is sometimes case insensitive... */
+synctex_bool_t _synctex_is_equivalent_file_name(const char *lhs, const char *rhs) {
+# if SYNCTEX_WINDOWS
+ /* On Windows, filename should be compared case insensitive.
+ * The characters '/' and '\' are both valid path separators.
+ * There will be a very serious problem concerning UTF8 because
+ * not all the characters must be toupper...
+ * I would like to have URL's instead of filenames. */
+next_character:
+ if(SYNCTEX_IS_PATH_SEPARATOR(*lhs)) {/* lhs points to a path separator */
+ if(!SYNCTEX_IS_PATH_SEPARATOR(*rhs)) {/* but not rhs */
+ return synctex_NO;
+ }
+ } else if(SYNCTEX_IS_PATH_SEPARATOR(*rhs)) {/* rhs points to a path separator but not lhs */
+ return synctex_NO;
+ } else if(toupper(*lhs) != toupper(*rhs)){/* uppercase do not match */
+ return synctex_NO;
+ } else if (!*lhs) {/* lhs is at the end of the string */
+ return *rhs ? synctex_NO : synctex_YES;
+ } else if(!*rhs) {/* rhs is at the end of the string but not lhs */
+ return synctex_NO;
+ }
+ ++lhs;
+ ++rhs;
+ goto next_character;
+# else
+ return 0 == strcmp(lhs,rhs)?synctex_YES:synctex_NO;
+# endif
+}
+
+synctex_bool_t _synctex_path_is_absolute(const char * name) {
+ if(!strlen(name)) {
+ return synctex_NO;
+ }
+# if SYNCTEX_WINDOWS
+ if(strlen(name)>2) {
+ return (name[1]==':' && SYNCTEX_IS_PATH_SEPARATOR(name[2]))?synctex_YES:synctex_NO;
+ }
+ return synctex_NO;
+# else
+ return SYNCTEX_IS_PATH_SEPARATOR(name[0])?synctex_YES:synctex_NO;
+# endif
+}
+
+/* We do not take care of UTF-8 */
+const char * _synctex_last_path_component(const char * name) {
+ const char * c = name+strlen(name);
+ if(c>name) {
+ if(!SYNCTEX_IS_PATH_SEPARATOR(*c)) {
+ do {
+ --c;
+ if(SYNCTEX_IS_PATH_SEPARATOR(*c)) {
+ return c+1;
+ }
+ } while(c>name);
+ }
+ return c;/* the last path component is the void string*/
+ }
+ return c;
+}
+
+int _synctex_copy_with_quoting_last_path_component(const char * src, char ** dest_ref, size_t size) {
+ const char * lpc;
+ if(src && dest_ref) {
+# define dest (*dest_ref)
+ dest = NULL; /* Default behavior: no change and sucess. */
+ lpc = _synctex_last_path_component(src);
+ if(strlen(lpc)) {
+ if(strchr(lpc,' ') && lpc[0]!='"' && lpc[strlen(lpc)-1]!='"') {
+ /* We are in the situation where adding the quotes is allowed. */
+ /* Time to add the quotes. */
+ /* Consistency test: we must have dest+size>dest+strlen(dest)+2
+ * or equivalently: strlen(dest)+2<size (see below) */
+ if(strlen(src)<size) {
+ if((dest = (char *)malloc(size+2))) {
+ char * dpc = dest + (lpc-src); /* dpc is the last path component of dest. */
+ if(dest != strncpy(dest,src,size)) {
+ _synctex_error("! _synctex_copy_with_quoting_last_path_component: Copy problem");
+ free(dest);
+ dest = NULL;/* Don't forget to reinitialize. */
+ return -2;
+ }
+ memmove(dpc+1,dpc,strlen(dpc)+1); /* Also move the null terminating character. */
+ dpc[0]='"';
+ dpc[strlen(dpc)+1]='\0';/* Consistency test */
+ dpc[strlen(dpc)]='"';
+ return 0; /* Success. */
+ }
+ return -1; /* Memory allocation error. */
+ }
+ _synctex_error("! _synctex_copy_with_quoting_last_path_component: Internal inconsistency");
+ return -3;
+ }
+ return 0; /* Success. */
+ }
+ return 0; /* No last path component. */
+# undef dest
+ }
+ return 1; /* Bad parameter, this value is subject to changes. */
+}
+
+/* The client is responsible of the management of the returned string, if any. */
+char * _synctex_merge_strings(const char * first,...);
+
+char * _synctex_merge_strings(const char * first,...) {
+ va_list arg;
+ size_t size = 0;
+ const char * temp;
+ /* First retrieve the size necessary to store the merged string */
+ va_start (arg, first);
+ temp = first;
+ do {
+ size_t len = strlen(temp);
+ if(UINT_MAX-len<size) {
+ _synctex_error("! _synctex_merge_strings: Capacity exceeded.");
+ return NULL;
+ }
+ size+=len;
+ } while( (temp = va_arg(arg, const char *)) != NULL);
+ va_end(arg);
+ if(size>0) {
+ char * result = NULL;
+ ++size;
+ /* Create the memory storage */
+ if(NULL!=(result = (char *)malloc(size))) {
+ char * dest = result;
+ va_start (arg, first);
+ temp = first;
+ do {
+ if((size = strlen(temp))>0) {
+ /* There is something to merge */
+ if(dest != strncpy(dest,temp,size)) {
+ _synctex_error("! _synctex_merge_strings: Copy problem");
+ free(result);
+ result = NULL;
+ return NULL;
+ }
+ dest += size;
+ }
+ } while( (temp = va_arg(arg, const char *)) != NULL);
+ va_end(arg);
+ dest[0]='\0';/* Terminate the merged string */
+ return result;
+ }
+ _synctex_error("! _synctex_merge_strings: Memory problem");
+ return NULL;
+ }
+ return NULL;
+}
+
+/* The purpose of _synctex_get_name is to find the name of the synctex file.
+ * There is a list of possible filenames from which we return the most recent one and try to remove all the others.
+ * With two runs of pdftex or xetex we are sure the the synctex file is really the most appropriate.
+ */
+int _synctex_get_name(const char * output, const char * build_directory, char ** synctex_name_ref, synctex_compress_mode_t * compress_mode_ref)
+{
+ if(output && synctex_name_ref && compress_mode_ref) {
+# define synctex_name (*synctex_name_ref)
+# define compress_mode (*compress_mode_ref)
+ /* If output is already absolute, we just have to manage the quotes and the compress mode */
+ const char * basename = NULL; /* base name of output*/
+ size_t size = 0;
+ /* Initialize the return values. */
+ synctex_name = NULL;
+ compress_mode = synctex_compress_mode_none;
+ basename = _synctex_last_path_component(output); /* do not free, output is the owner. */
+ /* Do we have a real base name ? */
+ if((size = strlen(basename))>0) {
+ /* Yes, we do. */
+ const char * temp = NULL;
+ char * corename = NULL; /* base name of output without path extension. */
+ char * dirname = NULL; /* dir name of output */
+ char * quoted_corename = NULL;
+ char * none = NULL;
+ char * gz = NULL;
+ char * quoted = NULL;
+ char * quoted_gz = NULL;
+ char * build = NULL;
+ char * build_gz = NULL;
+ char * build_quoted = NULL;
+ char * build_quoted_gz = NULL;
+ struct stat buf;
+ time_t time = 0;
+ /* Create corename: let temp point to the dot before the path extension of basename;
+ * We start form the \0 terminating character and scan the string upward until we find a dot.
+ * The first dot is not accepted. */
+ temp = strrchr(basename,'.');
+ size = temp - basename;
+ if(size>0) {
+ /* dot properly found, now create corename */
+ if(NULL == (corename = (char *)malloc(size+1))) {
+ _synctex_error("! _synctex_get_name: Memory problem 1");
+ return -1;
+ }
+ if(corename != strncpy(corename,basename,size)) {
+ _synctex_error("! _synctex_get_name: Copy problem 1");
+ free(corename);
+ dirname = NULL;
+ return -2;
+ }
+ corename[size] = '\0';
+ } else {
+ /* There is no path extension,
+ * Just make a copy of basename */
+ corename = _synctex_merge_strings(basename);
+ }
+ /* corename is properly set up, owned by "self". */
+ /* creating dirname. */
+ size = strlen(output)-strlen(basename);
+ if(size>0) {
+ /* output contains more than one path component */
+ if(NULL == (dirname = (char *)malloc(size+1))) {
+ _synctex_error("! _synctex_get_name: Memory problem");
+ free(corename);
+ dirname = NULL;
+ return -1;
+ }
+ if(dirname != strncpy(dirname,output,size)) {
+ _synctex_error("! _synctex_get_name: Copy problem");
+ free(dirname);
+ dirname = NULL;
+ free(corename);
+ dirname = NULL;
+ return -2;
+ }
+ dirname[size] = '\0';
+ }
+ /* dirname is properly set up. It ends with a path separator, if non void. */
+ /* creating quoted_corename. */
+ if(strchr(corename,' ')) {
+ quoted_corename = _synctex_merge_strings("\"",corename,"\"");
+ }
+ /* quoted_corename is properly set up. */
+ if(dirname &&strlen(dirname)>0) {
+ none = _synctex_merge_strings(dirname,corename,synctex_suffix,NULL);
+ if(quoted_corename && strlen(quoted_corename)>0) {
+ quoted = _synctex_merge_strings(dirname,quoted_corename,synctex_suffix,NULL);
+ }
+ } else {
+ none = _synctex_merge_strings(corename,synctex_suffix,NULL);
+ if(quoted_corename && strlen(quoted_corename)>0) {
+ quoted = _synctex_merge_strings(quoted_corename,synctex_suffix,NULL);
+ }
+ }
+ if(!_synctex_path_is_absolute(output) && build_directory && (size = strlen(build_directory))) {
+ temp = build_directory + size - 1;
+ if(_synctex_path_is_absolute(temp)) {
+ build = _synctex_merge_strings(build_directory,none,NULL);
+ if(quoted_corename && strlen(quoted_corename)>0) {
+ build_quoted = _synctex_merge_strings(build_directory,quoted,NULL);
+ }
+ } else {
+ build = _synctex_merge_strings(build_directory,"/",none,NULL);
+ if(quoted_corename && strlen(quoted_corename)>0) {
+ build_quoted = _synctex_merge_strings(build_directory,"/",quoted,NULL);
+ }
+ }
+ }
+ if(none) {
+ gz = _synctex_merge_strings(none,synctex_suffix_gz,NULL);
+ }
+ if(quoted) {
+ quoted_gz = _synctex_merge_strings(quoted,synctex_suffix_gz,NULL);
+ }
+ if(build) {
+ build_gz = _synctex_merge_strings(build,synctex_suffix_gz,NULL);
+ }
+ if(build_quoted) {
+ build_quoted_gz = _synctex_merge_strings(build_quoted,synctex_suffix_gz,NULL);
+ }
+ /* All the others names are properly set up... */
+ /* retain the most recently modified file */
+# define TEST(FILENAME,COMPRESS_MODE) \
+ if(FILENAME) {\
+ if (stat(FILENAME, &buf)) { \
+ free(FILENAME);\
+ FILENAME = NULL;\
+ } else { \
+ if(buf.st_mtime>time) { \
+ time=buf.st_mtime; \
+ synctex_name = FILENAME; \
+ compress_mode = COMPRESS_MODE; \
+ } \
+ } \
+ }
+ TEST(none,synctex_compress_mode_none);
+ TEST(gz,synctex_compress_mode_gz);
+ TEST(quoted,synctex_compress_mode_none);
+ TEST(quoted_gz,synctex_compress_mode_gz);
+ TEST(build,synctex_compress_mode_none);
+ TEST(build_gz,synctex_compress_mode_gz);
+ TEST(build_quoted,synctex_compress_mode_none);
+ TEST(build_quoted_gz,synctex_compress_mode_gz);
+# undef TEST
+ /* Free all the intermediate filenames, except the one that will be used as returned value. */
+# define CLEAN_AND_REMOVE(FILENAME) \
+ if(FILENAME && (FILENAME!=synctex_name)) {\
+ remove(FILENAME);\
+ printf("synctex tool info: %s removed\n",FILENAME);\
+ free(FILENAME);\
+ FILENAME = NULL;\
+ }
+ CLEAN_AND_REMOVE(none);
+ CLEAN_AND_REMOVE(gz);
+ CLEAN_AND_REMOVE(quoted);
+ CLEAN_AND_REMOVE(quoted_gz);
+ CLEAN_AND_REMOVE(build);
+ CLEAN_AND_REMOVE(build_gz);
+ CLEAN_AND_REMOVE(build_quoted);
+ CLEAN_AND_REMOVE(build_quoted_gz);
+# undef CLEAN_AND_REMOVE
+ return 0;
+ }
+ return -1;/* bad argument */
+# undef synctex_name
+# undef compress_mode
+ }
+ return -2;
+}
+
diff --git a/cut-n-paste/synctex/synctex_parser_utils.h b/cut-n-paste/synctex/synctex_parser_utils.h
new file mode 100644
index 00000000..e28ff58a
--- /dev/null
+++ b/cut-n-paste/synctex/synctex_parser_utils.h
@@ -0,0 +1,123 @@
+/*
+Copyright (c) 2008, 2009 jerome DOT laurens AT u-bourgogne DOT fr
+
+This file is part of the SyncTeX package.
+
+Version: 1.8
+Latest Revision: Wed Jul 1 11:16:01 UTC 2009
+See synctex_parser_readme.txt for more details
+
+License:
+--------
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE
+
+Except as contained in this notice, the name of the copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in this Software without prior written
+authorization from the copyright holder.
+
+*/
+
+/* The utilities declared here are subject to conditional implementation.
+ * All the operating system special stuff goes here.
+ * The problem mainly comes from file name management: path separator, encoding...
+ */
+
+# define synctex_bool_t int
+# define synctex_YES -1
+# define synctex_NO 0
+
+#ifndef __SYNCTEX_PARSER_UTILS__
+# define __SYNCTEX_PARSER_UTILS__
+
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+# if _WIN32
+# define SYNCTEX_IS_PATH_SEPARATOR(c) ('/' == c || '\\' == c)
+# else
+# define SYNCTEX_IS_PATH_SEPARATOR(c) ('/' == c)
+# endif
+
+/* This custom malloc functions initializes to 0 the newly allocated memory.
+ * There is no bzero function on windows. */
+void *_synctex_malloc(size_t size);
+
+/* This is used to log some informational message to the standard error stream.
+ * On Windows, the stderr stream is not exposed and another method is used.
+ * The return value is the number of characters printed. */
+int _synctex_error(const char * reason,...);
+
+/* strip the last extension of the given string, this string is modified!
+ * This function depends on the OS because the path separator may differ.
+ * This should be discussed more precisely. */
+void _synctex_strip_last_path_extension(char * string);
+
+/* Compare two file names, windows is sometimes case insensitive...
+ * The given strings may differ stricto sensu, but represent the same file name.
+ * It might not be the real way of doing things.
+ * The return value is an undefined non 0 value when the two file names are equivalent.
+ * It is 0 otherwise. */
+synctex_bool_t _synctex_is_equivalent_file_name(const char *lhs, const char *rhs);
+
+/* Description forthcoming.*/
+synctex_bool_t _synctex_path_is_absolute(const char * name);
+
+/* Description forthcoming...*/
+const char * _synctex_last_path_component(const char * name);
+
+/* If the core of the last path component of src is not already enclosed with double quotes ('"')
+ * and contains a space character (' '), then a new buffer is created, the src is copied and quotes are added.
+ * In all other cases, no destination buffer is created and the src is not copied.
+ * 0 on success, which means no error, something non 0 means error, mainly due to memory allocation failure, or bad parameter.
+ * This is used to fix a bug in the first version of pdftex with synctex (1.40.9) for which names with spaces
+ * were not managed in a standard way.
+ * On success, the caller owns the buffer pointed to by dest_ref (is any) and
+ * is responsible of freeing the memory when done.
+ * The size argument is the size of the src buffer. On return the dest_ref points to a buffer sized size+2.*/
+int _synctex_copy_with_quoting_last_path_component(const char * src, char ** dest_ref, size_t size);
+
+/* These are the possible extensions of the synctex file */
+extern const char * synctex_suffix;
+extern const char * synctex_suffix_gz;
+
+typedef enum {
+ synctex_io_mode_read = 0,
+ synctex_io_mode_append = 2
+} synctex_io_mode_t;
+
+typedef enum {
+ synctex_compress_mode_none = 0,
+ synctex_compress_mode_gz = 1
+} synctex_compress_mode_t;
+
+int _synctex_get_name(const char * output, const char * build_directory, char ** synctex_name_ref, synctex_compress_mode_t * compress_mode_ref);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/cut-n-paste/toolbar-editor/Makefile.am b/cut-n-paste/toolbar-editor/Makefile.am
new file mode 100644
index 00000000..b3e843ec
--- /dev/null
+++ b/cut-n-paste/toolbar-editor/Makefile.am
@@ -0,0 +1,108 @@
+EGGSOURCES = \
+ egg-editable-toolbar.c \
+ egg-toolbars-model.c \
+ egg-toolbar-editor.c
+
+EGGHEADERS = \
+ egg-editable-toolbar.h \
+ egg-toolbars-model.h \
+ egg-toolbar-editor.h
+
+noinst_HEADERS = \
+ $(EGGHEADERS) \
+ eggmarshalers.h
+
+noinst_LTLIBRARIES = libtoolbareditor.la
+
+libtoolbareditor_la_SOURCES = \
+ $(BUILT_SOURCES) \
+ $(EGGSOURCES) \
+ $(EGGHEADERS)
+
+libtoolbareditor_la_CPPFLAGS = \
+ $(AM_CPPFLAGS)
+
+libtoolbareditor_la_CFLAGS = \
+ $(SHELL_CORE_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED) \
+ -DCURSOR_DIR=\"$(pkgdatadir)\" \
+ $(AM_CFLAGS)
+
+BUILT_SOURCES = \
+ eggmarshalers.c \
+ eggmarshalers.h \
+ eggtypebuiltins.c \
+ eggtypebuiltins.h
+
+stamp_files = \
+ stamp-eggmarshalers.c \
+ stamp-eggmarshalers.h \
+ stamp-eggtypebuiltins.c \
+ stamp-eggtypebuiltins.h
+
+eggmarshalers.h: stamp-eggmarshalers.h
+ @true
+stamp-eggmarshalers.h: eggmarshalers.list
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) --prefix=_egg_marshal $(srcdir)/eggmarshalers.list --header > eggmarshalers.h \
+ && echo timestamp > $(@F)
+
+eggmarshalers.c: stamp-eggmarshalers.c
+ @true
+stamp-eggmarshalers.c: eggmarshalers.list
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) --prefix=_egg_marshal $(srcdir)/eggmarshalers.list --header --body > eggmarshalers.c \
+ && echo timestamp > $(@F)
+
+eggtypebuiltins.c: stamp-eggtypebuiltins.c
+ @true
+stamp-eggtypebuiltins.c: $(EGGHEADERS)
+ $(AM_V_GEN)( cd $(srcdir) && $(GLIB_MKENUMS) \
+ --fhead "#include <config.h>\n\n" \
+ --fhead "#include \"eggtypebuiltins.h\"\n\n" \
+ --fprod "\n/* enumerations from \"@filename@\" */" \
+ --fprod "\n#include \"@filename@\"" \
+ --vhead "static const G@Type@Value _@enum_name@_values[] = {" \
+ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+ --vtail " { 0, NULL, NULL }\n};\n\n" \
+ --vtail "GType\n@enum_name@_get_type (void)\n{\n" \
+ --vtail " static GType type = 0;\n\n" \
+ --vtail " if (G_UNLIKELY (type == 0))\n" \
+ --vtail " type = g_@type@_register_static (\"@EnumName@\", _@enum_name@_values);\n\n" \
+ --vtail " return type;\n}\n\n" \
+ $(^F) ) > xgen-$(@F) \
+ && ( cmp -s xgen-$(@F) $(@F:stamp-%=%) || cp xgen-$(@F) $(@F:stamp-%=%) ) \
+ && rm -f xgen-$(@F) \
+ && echo timestamp > $(@F)
+
+eggtypebuiltins.h: stamp-eggtypebuiltins.h
+ @true
+stamp-eggtypebuiltins.h: $(EGGHEADERS)
+ $(AM_V_GEN)( cd $(srcdir) && $(GLIB_MKENUMS) \
+ --fhead "#ifndef __EGGTYPEBUILTINS_H__\n" \
+ --fhead "#define __EGGTYPEBUILTINS_H__ 1\n\n" \
+ --fhead "#include <glib-object.h>\n\n" \
+ --fhead "G_BEGIN_DECLS\n\n" \
+ --ftail "G_END_DECLS\n\n" \
+ --ftail "#endif /* __EGGTYPEBUILTINS_H__ */\n" \
+ --fprod "\n/* --- @filename@ --- */" \
+ --eprod "#define EGG_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n" \
+ --eprod "GType @enum_name@_get_type (void);\n" \
+ $(^F) ) > xgen-$(@F) \
+ && ( cmp -s xgen-$(@F) $(@F:stamp-%=%) || cp xgen-$(@F) $(@F:stamp-%=%) ) \
+ && rm -f xgen-$(@F) \
+ && echo timestamp > $(@F)
+
+EXTRA_DIST = \
+ eggmarshalers.list
+
+EGGFILES=$(EGGSOURCES) $(EGGHEADERS)
+EGGDIR=$(srcdir)/../../../libegg/libegg
+
+regenerate-built-sources:
+ EGGFILES="$(EGGFILES) eggmarshalers.list" EGGDIR="$(EGGDIR)" $(top_srcdir)/cut-n-paste/update-from-egg.sh
+
+CLEANFILES = $(stamp_files) $(BUILT_SOURCES)
+DISTCLEANFILES = $(stamp_files) $(BUILT_SOURCES)
+MAINTAINERCLEANFILES = $(stamp_files) $(BUILT_SOURCES)
+
+-include $(top_srcdir)/git.mk
diff --git a/cut-n-paste/toolbar-editor/egg-editable-toolbar.c b/cut-n-paste/toolbar-editor/egg-editable-toolbar.c
new file mode 100644
index 00000000..9193120a
--- /dev/null
+++ b/cut-n-paste/toolbar-editor/egg-editable-toolbar.c
@@ -0,0 +1,1828 @@
+/*
+ * Copyright (C) 2003, 2004 Marco Pesenti Gritti
+ * Copyright (C) 2003, 2004, 2005 Christian Persch
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#include "config.h"
+
+#include "egg-editable-toolbar.h"
+#include "egg-toolbars-model.h"
+#include "egg-toolbar-editor.h"
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <string.h>
+
+static GdkPixbuf * new_separator_pixbuf (void);
+
+#define MIN_TOOLBAR_HEIGHT 20
+#define EGG_ITEM_NAME "egg-item-name"
+#define STOCK_DRAG_MODE "stock_drag-mode"
+
+static const GtkTargetEntry dest_drag_types[] = {
+ {EGG_TOOLBAR_ITEM_TYPE, GTK_TARGET_SAME_APP, 0},
+};
+
+enum
+{
+ PROP_0,
+ PROP_TOOLBARS_MODEL,
+ PROP_UI_MANAGER,
+ PROP_POPUP_PATH,
+ PROP_SELECTED,
+ PROP_EDIT_MODE
+};
+
+enum
+{
+ ACTION_REQUEST,
+ LAST_SIGNAL
+};
+
+static guint egg_editable_toolbar_signals[LAST_SIGNAL] = { 0 };
+
+#define EGG_EDITABLE_TOOLBAR_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EGG_TYPE_EDITABLE_TOOLBAR, EggEditableToolbarPrivate))
+
+struct _EggEditableToolbarPrivate
+{
+ GtkUIManager *manager;
+ EggToolbarsModel *model;
+ guint edit_mode;
+ gboolean save_hidden;
+ GtkWidget *fixed_toolbar;
+
+ GtkWidget *selected;
+ GtkActionGroup *actions;
+
+ guint visibility_id;
+ GList *visibility_paths;
+ GPtrArray *visibility_actions;
+
+ char *popup_path;
+
+ guint dnd_pending;
+ GtkToolbar *dnd_toolbar;
+ GtkToolItem *dnd_toolitem;
+};
+
+G_DEFINE_TYPE (EggEditableToolbar, egg_editable_toolbar, GTK_TYPE_VBOX);
+
+static int
+get_dock_position (EggEditableToolbar *etoolbar,
+ GtkWidget *dock)
+{
+ GList *l;
+ int result;
+
+ l = gtk_container_get_children (GTK_CONTAINER (etoolbar));
+ result = g_list_index (l, dock);
+ g_list_free (l);
+
+ return result;
+}
+
+static int
+get_toolbar_position (EggEditableToolbar *etoolbar, GtkWidget *toolbar)
+{
+ return get_dock_position (etoolbar, gtk_widget_get_parent (toolbar));
+}
+
+static int
+get_n_toolbars (EggEditableToolbar *etoolbar)
+{
+ GList *l;
+ int result;
+
+ l = gtk_container_get_children (GTK_CONTAINER (etoolbar));
+ result = g_list_length (l);
+ g_list_free (l);
+
+ return result;
+}
+
+static GtkWidget *
+get_dock_nth (EggEditableToolbar *etoolbar,
+ int position)
+{
+ GList *l;
+ GtkWidget *result;
+
+ l = gtk_container_get_children (GTK_CONTAINER (etoolbar));
+ result = g_list_nth_data (l, position);
+ g_list_free (l);
+
+ return result;
+}
+
+static GtkWidget *
+get_toolbar_nth (EggEditableToolbar *etoolbar,
+ int position)
+{
+ GList *l;
+ GtkWidget *dock;
+ GtkWidget *result;
+
+ dock = get_dock_nth (etoolbar, position);
+ g_return_val_if_fail (dock != NULL, NULL);
+
+ l = gtk_container_get_children (GTK_CONTAINER (dock));
+ result = GTK_WIDGET (l->data);
+ g_list_free (l);
+
+ return result;
+}
+
+static GtkAction *
+find_action (EggEditableToolbar *etoolbar,
+ const char *name)
+{
+ GList *l;
+ GtkAction *action = NULL;
+
+ l = gtk_ui_manager_get_action_groups (etoolbar->priv->manager);
+
+ g_return_val_if_fail (name != NULL, NULL);
+
+ for (; l != NULL; l = l->next)
+ {
+ GtkAction *tmp;
+
+ tmp = gtk_action_group_get_action (GTK_ACTION_GROUP (l->data), name);
+ if (tmp)
+ action = tmp;
+ }
+
+ return action;
+}
+
+static void
+drag_data_delete_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ EggEditableToolbar *etoolbar)
+{
+ int pos, toolbar_pos;
+ GtkWidget *parent;
+
+ widget = gtk_widget_get_ancestor (widget, GTK_TYPE_TOOL_ITEM);
+ g_return_if_fail (widget != NULL);
+ g_return_if_fail (EGG_IS_EDITABLE_TOOLBAR (etoolbar));
+
+ parent = gtk_widget_get_parent (widget);
+ pos = gtk_toolbar_get_item_index (GTK_TOOLBAR (parent),
+ GTK_TOOL_ITEM (widget));
+ toolbar_pos = get_toolbar_position (etoolbar, parent);
+
+ egg_toolbars_model_remove_item (etoolbar->priv->model,
+ toolbar_pos, pos);
+}
+
+static void
+drag_begin_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ EggEditableToolbar *etoolbar)
+{
+ GtkAction *action;
+ gint flags;
+
+ gtk_widget_hide (widget);
+
+#if GTK_CHECK_VERSION (2, 16, 0)
+ action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (widget));
+#else
+ action = gtk_widget_get_action (widget);
+#endif
+
+ if (action == NULL) return;
+
+ flags = egg_toolbars_model_get_name_flags (etoolbar->priv->model,
+ gtk_action_get_name (action));
+ if (!(flags & EGG_TB_MODEL_NAME_INFINITE))
+ {
+ flags &= ~EGG_TB_MODEL_NAME_USED;
+ egg_toolbars_model_set_name_flags (etoolbar->priv->model,
+ gtk_action_get_name (action),
+ flags);
+ }
+}
+
+static void
+drag_end_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ EggEditableToolbar *etoolbar)
+{
+ GtkAction *action;
+ gint flags;
+
+ if (gtk_widget_get_parent (widget) != NULL)
+ {
+ gtk_widget_show (widget);
+
+#if GTK_CHECK_VERSION (2, 16, 0)
+ action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (widget));
+#else
+ action = gtk_widget_get_action (widget);
+#endif
+
+ if (action == NULL) return;
+
+ flags = egg_toolbars_model_get_name_flags (etoolbar->priv->model,
+ gtk_action_get_name (action));
+ if (!(flags & EGG_TB_MODEL_NAME_INFINITE))
+ {
+ flags |= EGG_TB_MODEL_NAME_USED;
+ egg_toolbars_model_set_name_flags (etoolbar->priv->model,
+ gtk_action_get_name (action),
+ flags);
+ }
+ }
+}
+
+static void
+drag_data_get_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint32 time,
+ EggEditableToolbar *etoolbar)
+{
+ EggToolbarsModel *model;
+ const char *name;
+ char *data;
+ GdkAtom target;
+
+ g_return_if_fail (EGG_IS_EDITABLE_TOOLBAR (etoolbar));
+ model = egg_editable_toolbar_get_model (etoolbar);
+
+ name = g_object_get_data (G_OBJECT (widget), EGG_ITEM_NAME);
+ if (name == NULL)
+ {
+ name = g_object_get_data (G_OBJECT (gtk_widget_get_parent (widget)), EGG_ITEM_NAME);
+ g_return_if_fail (name != NULL);
+ }
+
+ target = gtk_selection_data_get_target (selection_data);
+ data = egg_toolbars_model_get_data (model, target, name);
+ if (data != NULL)
+ {
+ gtk_selection_data_set (selection_data, target, 8, (unsigned char *)data, strlen (data));
+ g_free (data);
+ }
+}
+
+static void
+move_item_cb (GtkAction *action,
+ EggEditableToolbar *etoolbar)
+{
+ GtkWidget *toolitem = gtk_widget_get_ancestor (egg_editable_toolbar_get_selected (etoolbar), GTK_TYPE_TOOL_ITEM);
+ GtkTargetList *list = gtk_target_list_new (dest_drag_types, G_N_ELEMENTS (dest_drag_types));
+
+ GdkEvent *realevent = gtk_get_current_event();
+ GdkEventMotion event;
+ event.type = GDK_MOTION_NOTIFY;
+ event.window = realevent->any.window;
+ event.send_event = FALSE;
+ event.axes = NULL;
+ event.time = gdk_event_get_time (realevent);
+ gdk_event_get_state (realevent, &event.state);
+ gdk_event_get_coords (realevent, &event.x, &event.y);
+ gdk_event_get_root_coords (realevent, &event.x_root, &event.y_root);
+
+ gtk_drag_begin (toolitem, list, GDK_ACTION_MOVE, 1, (GdkEvent *)&event);
+ gtk_target_list_unref (list);
+}
+
+static void
+remove_item_cb (GtkAction *action,
+ EggEditableToolbar *etoolbar)
+{
+ GtkWidget *toolitem = gtk_widget_get_ancestor (egg_editable_toolbar_get_selected (etoolbar), GTK_TYPE_TOOL_ITEM);
+ GtkWidget *parent = gtk_widget_get_parent (toolitem);
+ int pos, toolbar_pos;
+
+ toolbar_pos = get_toolbar_position (etoolbar, parent);
+ pos = gtk_toolbar_get_item_index (GTK_TOOLBAR (parent),
+ GTK_TOOL_ITEM (toolitem));
+
+ egg_toolbars_model_remove_item (etoolbar->priv->model,
+ toolbar_pos, pos);
+
+ if (egg_toolbars_model_n_items (etoolbar->priv->model, toolbar_pos) == 0)
+ {
+ egg_toolbars_model_remove_toolbar (etoolbar->priv->model, toolbar_pos);
+ }
+}
+
+static void
+remove_toolbar_cb (GtkAction *action,
+ EggEditableToolbar *etoolbar)
+{
+ GtkWidget *selected = egg_editable_toolbar_get_selected (etoolbar);
+ GtkWidget *toolbar = gtk_widget_get_ancestor (selected, GTK_TYPE_TOOLBAR);
+ int toolbar_pos;
+
+ toolbar_pos = get_toolbar_position (etoolbar, toolbar);
+ egg_toolbars_model_remove_toolbar (etoolbar->priv->model, toolbar_pos);
+}
+
+static void
+popup_context_deactivate (GtkMenuShell *menu,
+ EggEditableToolbar *etoolbar)
+{
+ egg_editable_toolbar_set_selected (etoolbar, NULL);
+ g_object_notify (G_OBJECT (etoolbar), "selected");
+}
+
+static void
+popup_context_menu_cb (GtkWidget *toolbar,
+ gint x,
+ gint y,
+ gint button_number,
+ EggEditableToolbar *etoolbar)
+{
+ if (etoolbar->priv->popup_path != NULL)
+ {
+ GtkMenu *menu;
+
+ egg_editable_toolbar_set_selected (etoolbar, toolbar);
+ g_object_notify (G_OBJECT (etoolbar), "selected");
+
+ menu = GTK_MENU (gtk_ui_manager_get_widget (etoolbar->priv->manager,
+ etoolbar->priv->popup_path));
+ g_return_if_fail (menu != NULL);
+ gtk_menu_popup (menu, NULL, NULL, NULL, NULL, button_number, gtk_get_current_event_time ());
+ g_signal_connect_object (menu, "selection-done",
+ G_CALLBACK (popup_context_deactivate),
+ etoolbar, 0);
+ }
+}
+
+static gboolean
+button_press_event_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ EggEditableToolbar *etoolbar)
+{
+ if (event->button == 3 && etoolbar->priv->popup_path != NULL)
+ {
+ GtkMenu *menu;
+
+ egg_editable_toolbar_set_selected (etoolbar, widget);
+ g_object_notify (G_OBJECT (etoolbar), "selected");
+
+ menu = GTK_MENU (gtk_ui_manager_get_widget (etoolbar->priv->manager,
+ etoolbar->priv->popup_path));
+ g_return_val_if_fail (menu != NULL, FALSE);
+ gtk_menu_popup (menu, NULL, NULL, NULL, NULL, event->button, event->time);
+ g_signal_connect_object (menu, "selection-done",
+ G_CALLBACK (popup_context_deactivate),
+ etoolbar, 0);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+configure_item_sensitivity (GtkToolItem *item, EggEditableToolbar *etoolbar)
+{
+ GtkAction *action;
+ char *name;
+
+ name = g_object_get_data (G_OBJECT (item), EGG_ITEM_NAME);
+ action = name ? find_action (etoolbar, name) : NULL;
+
+ if (action)
+ {
+ g_object_notify (G_OBJECT (action), "sensitive");
+ }
+
+ gtk_tool_item_set_use_drag_window (item,
+ (etoolbar->priv->edit_mode > 0) ||
+ GTK_IS_SEPARATOR_TOOL_ITEM (item));
+
+}
+
+static void
+configure_item_cursor (GtkToolItem *item,
+ EggEditableToolbar *etoolbar)
+{
+ EggEditableToolbarPrivate *priv = etoolbar->priv;
+ GtkWidget *widget = GTK_WIDGET (item);
+ GdkWindow *window = gtk_widget_get_window (widget);
+
+ if (window != NULL)
+ {
+ if (priv->edit_mode > 0)
+ {
+ GdkCursor *cursor;
+ GdkScreen *screen;
+ GdkPixbuf *pixbuf = NULL;
+
+ screen = gtk_widget_get_screen (GTK_WIDGET (etoolbar));
+
+ cursor = gdk_cursor_new_for_display (gdk_screen_get_display (screen),
+ GDK_HAND2);
+ gdk_window_set_cursor (window, cursor);
+ gdk_cursor_unref (cursor);
+
+ gtk_drag_source_set (widget, GDK_BUTTON1_MASK, dest_drag_types,
+ G_N_ELEMENTS (dest_drag_types), GDK_ACTION_MOVE);
+ if (GTK_IS_SEPARATOR_TOOL_ITEM (item))
+ {
+ pixbuf = new_separator_pixbuf ();
+ }
+ else
+ {
+ char *icon_name=NULL;
+ char *stock_id=NULL;
+ GtkAction *action;
+ char *name;
+
+ name = g_object_get_data (G_OBJECT (widget), EGG_ITEM_NAME);
+ action = name ? find_action (etoolbar, name) : NULL;
+
+ if (action)
+ {
+ g_object_get (action,
+ "icon-name", &icon_name,
+ "stock-id", &stock_id,
+ NULL);
+ }
+ if (icon_name)
+ {
+ GdkScreen *screen;
+ GtkIconTheme *icon_theme;
+ GtkSettings *settings;
+ gint width, height;
+
+ screen = gtk_widget_get_screen (widget);
+ icon_theme = gtk_icon_theme_get_for_screen (screen);
+ settings = gtk_settings_get_for_screen (screen);
+
+ if (!gtk_icon_size_lookup_for_settings (settings,
+ GTK_ICON_SIZE_LARGE_TOOLBAR,
+ &width, &height))
+ {
+ width = height = 24;
+ }
+
+ pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name,
+ MIN (width, height), 0, NULL);
+ }
+ else if (stock_id)
+ {
+ pixbuf = gtk_widget_render_icon (widget, stock_id,
+ GTK_ICON_SIZE_LARGE_TOOLBAR, NULL);
+ }
+ g_free (icon_name);
+ g_free (stock_id);
+ }
+
+ if (G_UNLIKELY (!pixbuf))
+ {
+ return;
+ }
+ gtk_drag_source_set_icon_pixbuf (widget, pixbuf);
+ g_object_unref (pixbuf);
+
+ }
+ else
+ {
+ gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET(item)), NULL);
+ }
+ }
+}
+
+
+static void
+configure_item_tooltip (GtkToolItem *item)
+{
+ GtkAction *action;
+
+#if GTK_CHECK_VERSION (2, 16, 0)
+ action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (item));
+#else
+ action = gtk_widget_get_action (GTK_WIDGET (item));
+#endif
+
+ if (action != NULL)
+ {
+ g_object_notify (G_OBJECT (action), "tooltip");
+ }
+}
+
+
+static void
+connect_widget_signals (GtkWidget *proxy, EggEditableToolbar *etoolbar)
+{
+ if (GTK_IS_CONTAINER (proxy))
+ {
+ gtk_container_forall (GTK_CONTAINER (proxy),
+ (GtkCallback) connect_widget_signals,
+ (gpointer) etoolbar);
+ }
+
+ if (GTK_IS_TOOL_ITEM (proxy))
+ {
+ g_signal_connect_object (proxy, "drag_begin",
+ G_CALLBACK (drag_begin_cb),
+ etoolbar, 0);
+ g_signal_connect_object (proxy, "drag_end",
+ G_CALLBACK (drag_end_cb),
+ etoolbar, 0);
+ g_signal_connect_object (proxy, "drag_data_get",
+ G_CALLBACK (drag_data_get_cb),
+ etoolbar, 0);
+ g_signal_connect_object (proxy, "drag_data_delete",
+ G_CALLBACK (drag_data_delete_cb),
+ etoolbar, 0);
+ }
+
+ if (GTK_IS_BUTTON (proxy) || GTK_IS_TOOL_ITEM (proxy))
+ {
+ g_signal_connect_object (proxy, "button-press-event",
+ G_CALLBACK (button_press_event_cb),
+ etoolbar, 0);
+ }
+}
+
+static void
+action_sensitive_cb (GtkAction *action,
+ GParamSpec *pspec,
+ GtkToolItem *item)
+{
+ EggEditableToolbar *etoolbar = EGG_EDITABLE_TOOLBAR
+ (gtk_widget_get_ancestor (GTK_WIDGET (item), EGG_TYPE_EDITABLE_TOOLBAR));
+
+ if (etoolbar->priv->edit_mode > 0)
+ {
+ gtk_widget_set_sensitive (GTK_WIDGET (item), TRUE);
+ }
+}
+
+static GtkToolItem *
+create_item_from_action (EggEditableToolbar *etoolbar,
+ const char *name)
+{
+ GtkToolItem *item;
+
+ g_return_val_if_fail (name != NULL, NULL);
+
+ if (strcmp (name, "_separator") == 0)
+ {
+ item = gtk_separator_tool_item_new ();
+ }
+ else
+ {
+ GtkAction *action = find_action (etoolbar, name);
+ if (action == NULL) return NULL;
+
+ item = GTK_TOOL_ITEM (gtk_action_create_tool_item (action));
+
+ /* Normally done on-demand by the GtkUIManager, but no
+ * such demand may have been made yet, so do it ourselves.
+ */
+ gtk_action_set_accel_group
+ (action, gtk_ui_manager_get_accel_group(etoolbar->priv->manager));
+
+ g_signal_connect_object (action, "notify::sensitive",
+ G_CALLBACK (action_sensitive_cb), item, 0);
+ }
+
+ gtk_widget_show (GTK_WIDGET (item));
+
+ g_object_set_data_full (G_OBJECT (item), EGG_ITEM_NAME,
+ g_strdup (name), g_free);
+
+ return item;
+}
+
+static GtkToolItem *
+create_item_from_position (EggEditableToolbar *etoolbar,
+ int toolbar_position,
+ int position)
+{
+ GtkToolItem *item;
+ const char *name;
+
+ name = egg_toolbars_model_item_nth (etoolbar->priv->model, toolbar_position, position);
+ item = create_item_from_action (etoolbar, name);
+
+ return item;
+}
+
+static void
+toolbar_drag_data_received_cb (GtkToolbar *toolbar,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ EggEditableToolbar *etoolbar)
+{
+ /* This function can be called for two reasons
+ *
+ * (1) drag_motion() needs an item to pass to
+ * gtk_toolbar_set_drop_highlight_item(). We can
+ * recognize this case by etoolbar->priv->pending being TRUE
+ * We should just create an item and return.
+ *
+ * (2) The drag has finished, and drag_drop() wants us to
+ * actually add a new item to the toolbar.
+ */
+
+ GdkAtom type = gtk_selection_data_get_data_type (selection_data);
+ const char *data = (char *)gtk_selection_data_get_data (selection_data);
+
+ int ipos = -1;
+ char *name = NULL;
+ gboolean used = FALSE;
+
+ /* Find out where the drop is occuring, and the name of what is being dropped. */
+ if (gtk_selection_data_get_length (selection_data) >= 0)
+ {
+ ipos = gtk_toolbar_get_drop_index (toolbar, x, y);
+ name = egg_toolbars_model_get_name (etoolbar->priv->model, type, data, FALSE);
+ if (name != NULL)
+ {
+ used = ((egg_toolbars_model_get_name_flags (etoolbar->priv->model, name) & EGG_TB_MODEL_NAME_USED) != 0);
+ }
+ }
+
+ /* If we just want a highlight item, then . */
+ if (etoolbar->priv->dnd_pending > 0)
+ {
+ etoolbar->priv->dnd_pending--;
+
+ if (name != NULL && etoolbar->priv->dnd_toolbar == toolbar && !used)
+ {
+ etoolbar->priv->dnd_toolitem = create_item_from_action (etoolbar, name);
+ gtk_toolbar_set_drop_highlight_item (etoolbar->priv->dnd_toolbar,
+ etoolbar->priv->dnd_toolitem, ipos);
+ }
+ }
+ else
+ {
+ gtk_toolbar_set_drop_highlight_item (toolbar, NULL, 0);
+ etoolbar->priv->dnd_toolbar = NULL;
+ etoolbar->priv->dnd_toolitem = NULL;
+
+ /* If we don't have a name to use yet, try to create one. */
+ if (name == NULL && gtk_selection_data_get_length (selection_data) >= 0)
+ {
+ name = egg_toolbars_model_get_name (etoolbar->priv->model, type, data, TRUE);
+ }
+
+ if (name != NULL && !used)
+ {
+ gint tpos = get_toolbar_position (etoolbar, GTK_WIDGET (toolbar));
+ egg_toolbars_model_add_item (etoolbar->priv->model, tpos, ipos, name);
+ gtk_drag_finish (context, TRUE,
+ gdk_drag_context_get_selected_action (context) == GDK_ACTION_MOVE, time);
+ }
+ else
+ {
+ gtk_drag_finish (context, FALSE,
+ gdk_drag_context_get_selected_action (context) == GDK_ACTION_MOVE, time);
+ }
+ }
+
+ g_free (name);
+}
+
+static gboolean
+toolbar_drag_drop_cb (GtkToolbar *toolbar,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time,
+ EggEditableToolbar *etoolbar)
+{
+ GdkAtom target;
+
+ target = gtk_drag_dest_find_target (GTK_WIDGET (toolbar), context, NULL);
+ if (target != GDK_NONE)
+ {
+ gtk_drag_get_data (GTK_WIDGET (toolbar), context, target, time);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+toolbar_drag_motion_cb (GtkToolbar *toolbar,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time,
+ EggEditableToolbar *etoolbar)
+{
+ GdkAtom target = gtk_drag_dest_find_target (GTK_WIDGET (toolbar), context, NULL);
+ if (target == GDK_NONE)
+ {
+ gdk_drag_status (context, 0, time);
+ return FALSE;
+ }
+
+ /* Make ourselves the current dnd toolbar, and request a highlight item. */
+ if (etoolbar->priv->dnd_toolbar != toolbar)
+ {
+ etoolbar->priv->dnd_toolbar = toolbar;
+ etoolbar->priv->dnd_toolitem = NULL;
+ etoolbar->priv->dnd_pending++;
+ gtk_drag_get_data (GTK_WIDGET (toolbar), context, target, time);
+ }
+
+ /* If a highlight item is available, use it. */
+ else if (etoolbar->priv->dnd_toolitem)
+ {
+ gint ipos = gtk_toolbar_get_drop_index (etoolbar->priv->dnd_toolbar, x, y);
+ gtk_toolbar_set_drop_highlight_item (etoolbar->priv->dnd_toolbar,
+ etoolbar->priv->dnd_toolitem, ipos);
+ }
+
+ gdk_drag_status (context, gdk_drag_context_get_suggested_action (context), time);
+
+ return TRUE;
+}
+
+static void
+toolbar_drag_leave_cb (GtkToolbar *toolbar,
+ GdkDragContext *context,
+ guint time,
+ EggEditableToolbar *etoolbar)
+{
+ gtk_toolbar_set_drop_highlight_item (toolbar, NULL, 0);
+
+ /* If we were the current dnd toolbar target, remove the item. */
+ if (etoolbar->priv->dnd_toolbar == toolbar)
+ {
+ etoolbar->priv->dnd_toolbar = NULL;
+ etoolbar->priv->dnd_toolitem = NULL;
+ }
+}
+
+static void
+configure_drag_dest (EggEditableToolbar *etoolbar,
+ GtkToolbar *toolbar)
+{
+ EggToolbarsItemType *type;
+ GtkTargetList *targets;
+ GList *list;
+
+ /* Make every toolbar able to receive drag-drops. */
+ gtk_drag_dest_set (GTK_WIDGET (toolbar), 0,
+ dest_drag_types, G_N_ELEMENTS (dest_drag_types),
+ GDK_ACTION_MOVE | GDK_ACTION_COPY);
+
+ /* Add any specialist drag-drop abilities. */
+ targets = gtk_drag_dest_get_target_list (GTK_WIDGET (toolbar));
+ list = egg_toolbars_model_get_types (etoolbar->priv->model);
+ while (list)
+ {
+ type = list->data;
+ if (type->new_name != NULL || type->get_name != NULL)
+ gtk_target_list_add (targets, type->type, 0, 0);
+ list = list->next;
+ }
+}
+
+static void
+toggled_visibility_cb (GtkToggleAction *action,
+ EggEditableToolbar *etoolbar)
+{
+ EggEditableToolbarPrivate *priv = etoolbar->priv;
+ GtkWidget *dock;
+ EggTbModelFlags flags;
+ gboolean visible;
+ gint i;
+
+ visible = gtk_toggle_action_get_active (action);
+ for (i = 0; i < priv->visibility_actions->len; i++)
+ if (g_ptr_array_index (priv->visibility_actions, i) == action)
+ break;
+
+ g_return_if_fail (i < priv->visibility_actions->len);
+
+ dock = get_dock_nth (etoolbar, i);
+ if (visible)
+ {
+ gtk_widget_show (dock);
+ }
+ else
+ {
+ gtk_widget_hide (dock);
+ }
+
+ if (priv->save_hidden)
+ {
+ flags = egg_toolbars_model_get_flags (priv->model, i);
+
+ if (visible)
+ {
+ flags &= ~(EGG_TB_MODEL_HIDDEN);
+ }
+ else
+ {
+ flags |= (EGG_TB_MODEL_HIDDEN);
+ }
+
+ egg_toolbars_model_set_flags (priv->model, i, flags);
+ }
+}
+
+static void
+toolbar_visibility_refresh (EggEditableToolbar *etoolbar)
+{
+ EggEditableToolbarPrivate *priv = etoolbar->priv;
+ gint n_toolbars, n_items, i, j, k;
+ GtkToggleAction *action;
+ GList *list;
+ GString *string;
+ gboolean showing;
+ char action_name[40];
+ char *action_label;
+ char *tmp;
+
+ if (priv == NULL || priv->model == NULL || priv->manager == NULL ||
+ priv->visibility_paths == NULL || priv->actions == NULL)
+ {
+ return;
+ }
+
+ if (priv->visibility_actions == NULL)
+ {
+ priv->visibility_actions = g_ptr_array_new ();
+ }
+
+ if (priv->visibility_id != 0)
+ {
+ gtk_ui_manager_remove_ui (priv->manager, priv->visibility_id);
+ }
+
+ priv->visibility_id = gtk_ui_manager_new_merge_id (priv->manager);
+
+#if GTK_CHECK_VERSION(2,20,0)
+ showing = gtk_widget_get_visible (GTK_WIDGET (etoolbar));
+#else
+ showing = GTK_WIDGET_VISIBLE (etoolbar);
+#endif
+
+ n_toolbars = egg_toolbars_model_n_toolbars (priv->model);
+ for (i = 0; i < n_toolbars; i++)
+ {
+ string = g_string_sized_new (0);
+ n_items = egg_toolbars_model_n_items (priv->model, i);
+ for (k = 0, j = 0; j < n_items; j++)
+ {
+ GValue value = { 0, };
+ GtkAction *action;
+ const char *name;
+
+ name = egg_toolbars_model_item_nth (priv->model, i, j);
+ if (name == NULL) continue;
+ action = find_action (etoolbar, name);
+ if (action == NULL) continue;
+
+ g_value_init (&value, G_TYPE_STRING);
+ g_object_get_property (G_OBJECT (action), "label", &value);
+ name = g_value_get_string (&value);
+ if (name == NULL)
+ {
+ g_value_unset (&value);
+ continue;
+ }
+ k += g_utf8_strlen (name, -1) + 2;
+ if (j > 0)
+ {
+ g_string_append (string, ", ");
+ if (j > 1 && k > 25)
+ {
+ g_value_unset (&value);
+ break;
+ }
+ }
+ g_string_append (string, name);
+ g_value_unset (&value);
+ }
+ if (j < n_items)
+ {
+ g_string_append (string, " ...");
+ }
+
+ tmp = g_string_free (string, FALSE);
+ for (j = 0, k = 0; tmp[j]; j++)
+ {
+ if (tmp[j] == '_') continue;
+ tmp[k] = tmp[j];
+ k++;
+ }
+ tmp[k] = 0;
+ /* Translaters: This string is for a toggle to display a toolbar.
+ * The name of the toolbar is automatically computed from the widgets
+ * on the toolbar, and is placed at the %s. Note the _ before the %s
+ * which is used to add mnemonics. We know that this is likely to
+ * produce duplicates, but don't worry about it. If your language
+ * normally has a mnemonic at the start, please use the _. If not,
+ * please remove. */
+ action_label = g_strdup_printf (_("Show “_%s”"), tmp);
+ g_free (tmp);
+
+ sprintf(action_name, "ToolbarToggle%d", i);
+
+ if (i >= priv->visibility_actions->len)
+ {
+ action = gtk_toggle_action_new (action_name, action_label, NULL, NULL);
+ g_ptr_array_add (priv->visibility_actions, action);
+ g_signal_connect_object (action, "toggled",
+ G_CALLBACK (toggled_visibility_cb),
+ etoolbar, 0);
+ gtk_action_group_add_action (priv->actions, GTK_ACTION (action));
+ }
+ else
+ {
+ action = g_ptr_array_index (priv->visibility_actions, i);
+ g_object_set (action, "label", action_label, NULL);
+ }
+
+ gtk_action_set_visible (GTK_ACTION (action), (egg_toolbars_model_get_flags (priv->model, i)
+ & EGG_TB_MODEL_NOT_REMOVABLE) == 0);
+ gtk_action_set_sensitive (GTK_ACTION (action), showing);
+#if GTK_CHECK_VERSION(2,20,0)
+ gtk_toggle_action_set_active (action, gtk_widget_get_visible
+ (get_dock_nth (etoolbar, i)));
+#else
+ gtk_toggle_action_set_active (action, GTK_WIDGET_VISIBLE
+ (get_dock_nth (etoolbar, i)));
+#endif
+
+ for (list = priv->visibility_paths; list != NULL; list = g_list_next (list))
+ {
+ gtk_ui_manager_add_ui (priv->manager, priv->visibility_id,
+ (const char *)list->data, action_name, action_name,
+ GTK_UI_MANAGER_MENUITEM, FALSE);
+ }
+
+ g_free (action_label);
+ }
+
+ gtk_ui_manager_ensure_update (priv->manager);
+
+ while (i < priv->visibility_actions->len)
+ {
+ action = g_ptr_array_index (priv->visibility_actions, i);
+ g_ptr_array_remove_index_fast (priv->visibility_actions, i);
+ gtk_action_group_remove_action (priv->actions, GTK_ACTION (action));
+ i++;
+ }
+}
+
+static GtkWidget *
+create_dock (EggEditableToolbar *etoolbar)
+{
+ GtkWidget *toolbar, *hbox;
+
+ hbox = gtk_hbox_new (0, FALSE);
+
+ toolbar = gtk_toolbar_new ();
+ gtk_toolbar_set_show_arrow (GTK_TOOLBAR (toolbar), TRUE);
+ gtk_widget_show (toolbar);
+ gtk_box_pack_start (GTK_BOX (hbox), toolbar, TRUE, TRUE, 0);
+
+ g_signal_connect (toolbar, "drag_drop",
+ G_CALLBACK (toolbar_drag_drop_cb), etoolbar);
+ g_signal_connect (toolbar, "drag_motion",
+ G_CALLBACK (toolbar_drag_motion_cb), etoolbar);
+ g_signal_connect (toolbar, "drag_leave",
+ G_CALLBACK (toolbar_drag_leave_cb), etoolbar);
+
+ g_signal_connect (toolbar, "drag_data_received",
+ G_CALLBACK (toolbar_drag_data_received_cb), etoolbar);
+ g_signal_connect (toolbar, "popup_context_menu",
+ G_CALLBACK (popup_context_menu_cb), etoolbar);
+
+ configure_drag_dest (etoolbar, GTK_TOOLBAR (toolbar));
+
+ return hbox;
+}
+
+static void
+set_fixed_style (EggEditableToolbar *t, GtkToolbarStyle style)
+{
+ g_return_if_fail (GTK_IS_TOOLBAR (t->priv->fixed_toolbar));
+ gtk_toolbar_set_style (GTK_TOOLBAR (t->priv->fixed_toolbar),
+ style == GTK_TOOLBAR_ICONS ? GTK_TOOLBAR_BOTH_HORIZ : style);
+}
+
+static void
+unset_fixed_style (EggEditableToolbar *t)
+{
+ g_return_if_fail (GTK_IS_TOOLBAR (t->priv->fixed_toolbar));
+ gtk_toolbar_unset_style (GTK_TOOLBAR (t->priv->fixed_toolbar));
+}
+
+static void
+toolbar_changed_cb (EggToolbarsModel *model,
+ int position,
+ EggEditableToolbar *etoolbar)
+{
+ GtkWidget *toolbar;
+ EggTbModelFlags flags;
+ GtkToolbarStyle style;
+
+ flags = egg_toolbars_model_get_flags (model, position);
+ toolbar = get_toolbar_nth (etoolbar, position);
+
+ if (flags & EGG_TB_MODEL_ICONS)
+ {
+ style = GTK_TOOLBAR_ICONS;
+ }
+ else if (flags & EGG_TB_MODEL_TEXT)
+ {
+ style = GTK_TOOLBAR_TEXT;
+ }
+ else if (flags & EGG_TB_MODEL_BOTH)
+ {
+ style = GTK_TOOLBAR_BOTH;
+ }
+ else if (flags & EGG_TB_MODEL_BOTH_HORIZ)
+ {
+ style = GTK_TOOLBAR_BOTH_HORIZ;
+ }
+ else
+ {
+ gtk_toolbar_unset_style (GTK_TOOLBAR (toolbar));
+ if (position == 0 && etoolbar->priv->fixed_toolbar)
+ {
+ unset_fixed_style (etoolbar);
+ }
+ return;
+ }
+
+ gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), style);
+ if (position == 0 && etoolbar->priv->fixed_toolbar)
+ {
+ set_fixed_style (etoolbar, style);
+ }
+
+ toolbar_visibility_refresh (etoolbar);
+}
+
+static void
+unparent_fixed (EggEditableToolbar *etoolbar)
+{
+ GtkWidget *toolbar, *dock;
+ g_return_if_fail (GTK_IS_TOOLBAR (etoolbar->priv->fixed_toolbar));
+
+ toolbar = etoolbar->priv->fixed_toolbar;
+ dock = get_dock_nth (etoolbar, 0);
+
+ if (dock && gtk_widget_get_parent (toolbar) != NULL)
+ {
+ gtk_container_remove (GTK_CONTAINER (dock), toolbar);
+ }
+}
+
+static void
+update_fixed (EggEditableToolbar *etoolbar)
+{
+ GtkWidget *toolbar, *dock;
+ if (!etoolbar->priv->fixed_toolbar) return;
+
+ toolbar = etoolbar->priv->fixed_toolbar;
+ dock = get_dock_nth (etoolbar, 0);
+
+ if (dock && toolbar && gtk_widget_get_parent (toolbar) == NULL)
+ {
+ gtk_box_pack_end (GTK_BOX (dock), toolbar, FALSE, TRUE, 0);
+
+ gtk_widget_show (toolbar);
+
+ gtk_widget_set_size_request (dock, -1, -1);
+ gtk_widget_queue_resize_no_redraw (dock);
+ }
+}
+
+static void
+toolbar_added_cb (EggToolbarsModel *model,
+ int position,
+ EggEditableToolbar *etoolbar)
+{
+ GtkWidget *dock;
+
+ dock = create_dock (etoolbar);
+ if ((egg_toolbars_model_get_flags (model, position) & EGG_TB_MODEL_HIDDEN) == 0)
+ gtk_widget_show (dock);
+
+ gtk_widget_set_size_request (dock, -1, MIN_TOOLBAR_HEIGHT);
+
+ gtk_box_pack_start (GTK_BOX (etoolbar), dock, TRUE, TRUE, 0);
+
+ gtk_box_reorder_child (GTK_BOX (etoolbar), dock, position);
+
+ gtk_widget_show_all (dock);
+
+ update_fixed (etoolbar);
+
+ toolbar_visibility_refresh (etoolbar);
+}
+
+static void
+toolbar_removed_cb (EggToolbarsModel *model,
+ int position,
+ EggEditableToolbar *etoolbar)
+{
+ GtkWidget *dock;
+
+ if (position == 0 && etoolbar->priv->fixed_toolbar != NULL)
+ {
+ unparent_fixed (etoolbar);
+ }
+
+ dock = get_dock_nth (etoolbar, position);
+ gtk_widget_destroy (dock);
+
+ update_fixed (etoolbar);
+
+ toolbar_visibility_refresh (etoolbar);
+}
+
+static void
+item_added_cb (EggToolbarsModel *model,
+ int tpos,
+ int ipos,
+ EggEditableToolbar *etoolbar)
+{
+ GtkWidget *dock;
+ GtkWidget *toolbar;
+ GtkToolItem *item;
+
+ toolbar = get_toolbar_nth (etoolbar, tpos);
+ item = create_item_from_position (etoolbar, tpos, ipos);
+ if (item == NULL) return;
+
+ gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, ipos);
+
+ connect_widget_signals (GTK_WIDGET (item), etoolbar);
+ configure_item_tooltip (item);
+ configure_item_cursor (item, etoolbar);
+ configure_item_sensitivity (item, etoolbar);
+
+ dock = get_dock_nth (etoolbar, tpos);
+ gtk_widget_set_size_request (dock, -1, -1);
+ gtk_widget_queue_resize_no_redraw (dock);
+
+ toolbar_visibility_refresh (etoolbar);
+}
+
+static void
+item_removed_cb (EggToolbarsModel *model,
+ int toolbar_position,
+ int position,
+ EggEditableToolbar *etoolbar)
+{
+ EggEditableToolbarPrivate *priv = etoolbar->priv;
+
+ GtkWidget *toolbar;
+ GtkWidget *item;
+
+ toolbar = get_toolbar_nth (etoolbar, toolbar_position);
+ item = GTK_WIDGET (gtk_toolbar_get_nth_item
+ (GTK_TOOLBAR (toolbar), position));
+ g_return_if_fail (item != NULL);
+
+ if (item == priv->selected)
+ {
+ /* FIXME */
+ }
+
+ gtk_container_remove (GTK_CONTAINER (toolbar), item);
+
+ toolbar_visibility_refresh (etoolbar);
+}
+
+static void
+egg_editable_toolbar_build (EggEditableToolbar *etoolbar)
+{
+ int i, l, n_items, n_toolbars;
+ EggToolbarsModel *model = etoolbar->priv->model;
+
+ g_return_if_fail (model != NULL);
+ g_return_if_fail (etoolbar->priv->manager != NULL);
+
+ n_toolbars = egg_toolbars_model_n_toolbars (model);
+
+ for (i = 0; i < n_toolbars; i++)
+ {
+ GtkWidget *toolbar, *dock;
+
+ dock = create_dock (etoolbar);
+ if ((egg_toolbars_model_get_flags (model, i) & EGG_TB_MODEL_HIDDEN) == 0)
+ gtk_widget_show (dock);
+ gtk_box_pack_start (GTK_BOX (etoolbar), dock, TRUE, TRUE, 0);
+ toolbar = get_toolbar_nth (etoolbar, i);
+
+ n_items = egg_toolbars_model_n_items (model, i);
+ for (l = 0; l < n_items; l++)
+ {
+ GtkToolItem *item;
+
+ item = create_item_from_position (etoolbar, i, l);
+ if (item)
+ {
+ gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, l);
+
+ connect_widget_signals (GTK_WIDGET (item), etoolbar);
+ configure_item_tooltip (item);
+ configure_item_sensitivity (item, etoolbar);
+ }
+ else
+ {
+ egg_toolbars_model_remove_item (model, i, l);
+ l--;
+ n_items--;
+ }
+ }
+
+ if (n_items == 0)
+ {
+ gtk_widget_set_size_request (dock, -1, MIN_TOOLBAR_HEIGHT);
+ }
+ }
+
+ update_fixed (etoolbar);
+
+ /* apply styles */
+ for (i = 0; i < n_toolbars; i ++)
+ {
+ toolbar_changed_cb (model, i, etoolbar);
+ }
+}
+
+static void
+egg_editable_toolbar_disconnect_model (EggEditableToolbar *toolbar)
+{
+ EggToolbarsModel *model = toolbar->priv->model;
+
+ g_signal_handlers_disconnect_by_func
+ (model, G_CALLBACK (item_added_cb), toolbar);
+ g_signal_handlers_disconnect_by_func
+ (model, G_CALLBACK (item_removed_cb), toolbar);
+ g_signal_handlers_disconnect_by_func
+ (model, G_CALLBACK (toolbar_added_cb), toolbar);
+ g_signal_handlers_disconnect_by_func
+ (model, G_CALLBACK (toolbar_removed_cb), toolbar);
+ g_signal_handlers_disconnect_by_func
+ (model, G_CALLBACK (toolbar_changed_cb), toolbar);
+}
+
+static void
+egg_editable_toolbar_deconstruct (EggEditableToolbar *toolbar)
+{
+ EggToolbarsModel *model = toolbar->priv->model;
+ GList *children;
+
+ g_return_if_fail (model != NULL);
+
+ if (toolbar->priv->fixed_toolbar)
+ {
+ unset_fixed_style (toolbar);
+ unparent_fixed (toolbar);
+ }
+
+ children = gtk_container_get_children (GTK_CONTAINER (toolbar));
+ g_list_foreach (children, (GFunc) gtk_widget_destroy, NULL);
+ g_list_free (children);
+}
+
+void
+egg_editable_toolbar_set_model (EggEditableToolbar *etoolbar,
+ EggToolbarsModel *model)
+{
+ EggEditableToolbarPrivate *priv = etoolbar->priv;
+
+ if (priv->model == model) return;
+
+ if (priv->model)
+ {
+ egg_editable_toolbar_disconnect_model (etoolbar);
+ egg_editable_toolbar_deconstruct (etoolbar);
+
+ g_object_unref (priv->model);
+ }
+
+ priv->model = g_object_ref (model);
+
+ egg_editable_toolbar_build (etoolbar);
+
+ toolbar_visibility_refresh (etoolbar);
+
+ g_signal_connect (model, "item_added",
+ G_CALLBACK (item_added_cb), etoolbar);
+ g_signal_connect (model, "item_removed",
+ G_CALLBACK (item_removed_cb), etoolbar);
+ g_signal_connect (model, "toolbar_added",
+ G_CALLBACK (toolbar_added_cb), etoolbar);
+ g_signal_connect (model, "toolbar_removed",
+ G_CALLBACK (toolbar_removed_cb), etoolbar);
+ g_signal_connect (model, "toolbar_changed",
+ G_CALLBACK (toolbar_changed_cb), etoolbar);
+}
+
+static void
+egg_editable_toolbar_init (EggEditableToolbar *etoolbar)
+{
+ EggEditableToolbarPrivate *priv;
+
+ priv = etoolbar->priv = EGG_EDITABLE_TOOLBAR_GET_PRIVATE (etoolbar);
+
+ priv->save_hidden = TRUE;
+
+ g_signal_connect (etoolbar, "notify::visible",
+ G_CALLBACK (toolbar_visibility_refresh), NULL);
+}
+
+static void
+egg_editable_toolbar_dispose (GObject *object)
+{
+ EggEditableToolbar *etoolbar = EGG_EDITABLE_TOOLBAR (object);
+ EggEditableToolbarPrivate *priv = etoolbar->priv;
+ GList *children;
+
+ if (priv->fixed_toolbar != NULL)
+ {
+ g_object_unref (priv->fixed_toolbar);
+ priv->fixed_toolbar = NULL;
+ }
+
+ if (priv->visibility_paths)
+ {
+ children = priv->visibility_paths;
+ g_list_foreach (children, (GFunc) g_free, NULL);
+ g_list_free (children);
+ priv->visibility_paths = NULL;
+ }
+
+ g_free (priv->popup_path);
+ priv->popup_path = NULL;
+
+ if (priv->manager != NULL)
+ {
+ if (priv->visibility_id)
+ {
+ gtk_ui_manager_remove_ui (priv->manager, priv->visibility_id);
+ priv->visibility_id = 0;
+ }
+
+ g_object_unref (priv->manager);
+ priv->manager = NULL;
+ }
+
+ if (priv->model)
+ {
+ egg_editable_toolbar_disconnect_model (etoolbar);
+ g_object_unref (priv->model);
+ priv->model = NULL;
+ }
+
+ G_OBJECT_CLASS (egg_editable_toolbar_parent_class)->dispose (object);
+}
+
+static void
+egg_editable_toolbar_set_ui_manager (EggEditableToolbar *etoolbar,
+ GtkUIManager *manager)
+{
+ static const GtkActionEntry actions[] = {
+ { "MoveToolItem", STOCK_DRAG_MODE, N_("_Move on Toolbar"), NULL,
+ N_("Move the selected item on the toolbar"), G_CALLBACK (move_item_cb) },
+ { "RemoveToolItem", GTK_STOCK_REMOVE, N_("_Remove from Toolbar"), NULL,
+ N_("Remove the selected item from the toolbar"), G_CALLBACK (remove_item_cb) },
+ { "RemoveToolbar", GTK_STOCK_DELETE, N_("_Delete Toolbar"), NULL,
+ N_("Remove the selected toolbar"), G_CALLBACK (remove_toolbar_cb) },
+ };
+
+ etoolbar->priv->manager = g_object_ref (manager);
+
+ etoolbar->priv->actions = gtk_action_group_new ("ToolbarActions");
+ gtk_action_group_set_translation_domain (etoolbar->priv->actions, GETTEXT_PACKAGE);
+ gtk_action_group_add_actions (etoolbar->priv->actions, actions,
+ G_N_ELEMENTS (actions), etoolbar);
+ gtk_ui_manager_insert_action_group (manager, etoolbar->priv->actions, -1);
+ g_object_unref (etoolbar->priv->actions);
+
+ toolbar_visibility_refresh (etoolbar);
+}
+
+GtkWidget * egg_editable_toolbar_get_selected (EggEditableToolbar *etoolbar)
+{
+ return etoolbar->priv->selected;
+}
+
+void
+egg_editable_toolbar_set_selected (EggEditableToolbar *etoolbar,
+ GtkWidget *widget)
+{
+ GtkWidget *toolbar, *toolitem;
+ gboolean editable;
+
+ etoolbar->priv->selected = widget;
+
+ toolbar = (widget != NULL) ? gtk_widget_get_ancestor (widget, GTK_TYPE_TOOLBAR) : NULL;
+ toolitem = (widget != NULL) ? gtk_widget_get_ancestor (widget, GTK_TYPE_TOOL_ITEM) : NULL;
+
+ if(toolbar != NULL)
+ {
+ gint tpos = get_toolbar_position (etoolbar, toolbar);
+ editable = ((egg_toolbars_model_get_flags (etoolbar->priv->model, tpos) & EGG_TB_MODEL_NOT_EDITABLE) == 0);
+ }
+ else
+ {
+ editable = FALSE;
+ }
+
+ gtk_action_set_visible (find_action (etoolbar, "RemoveToolbar"), (toolbar != NULL) && (etoolbar->priv->edit_mode > 0));
+ gtk_action_set_visible (find_action (etoolbar, "RemoveToolItem"), (toolitem != NULL) && editable);
+ gtk_action_set_visible (find_action (etoolbar, "MoveToolItem"), (toolitem != NULL) && editable);
+}
+
+static void
+set_edit_mode (EggEditableToolbar *etoolbar,
+ gboolean mode)
+{
+ EggEditableToolbarPrivate *priv = etoolbar->priv;
+ int i, l, n_items;
+
+ i = priv->edit_mode;
+ if (mode)
+ {
+ priv->edit_mode++;
+ }
+ else
+ {
+ g_return_if_fail (priv->edit_mode > 0);
+ priv->edit_mode--;
+ }
+ i *= priv->edit_mode;
+
+ if (i == 0)
+ {
+ for (i = get_n_toolbars (etoolbar)-1; i >= 0; i--)
+ {
+ GtkWidget *toolbar;
+
+ toolbar = get_toolbar_nth (etoolbar, i);
+ n_items = gtk_toolbar_get_n_items (GTK_TOOLBAR (toolbar));
+
+ if (n_items == 0 && priv->edit_mode == 0)
+ {
+ egg_toolbars_model_remove_toolbar (priv->model, i);
+ }
+ else
+ {
+ for (l = 0; l < n_items; l++)
+ {
+ GtkToolItem *item;
+
+ item = gtk_toolbar_get_nth_item (GTK_TOOLBAR (toolbar), l);
+
+ configure_item_cursor (item, etoolbar);
+ configure_item_sensitivity (item, etoolbar);
+ }
+ }
+ }
+ }
+}
+
+static void
+egg_editable_toolbar_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EggEditableToolbar *etoolbar = EGG_EDITABLE_TOOLBAR (object);
+
+ switch (prop_id)
+ {
+ case PROP_UI_MANAGER:
+ egg_editable_toolbar_set_ui_manager (etoolbar, g_value_get_object (value));
+ break;
+ case PROP_TOOLBARS_MODEL:
+ egg_editable_toolbar_set_model (etoolbar, g_value_get_object (value));
+ break;
+ case PROP_SELECTED:
+ egg_editable_toolbar_set_selected (etoolbar, g_value_get_object (value));
+ break;
+ case PROP_POPUP_PATH:
+ etoolbar->priv->popup_path = g_strdup (g_value_get_string (value));
+ break;
+ case PROP_EDIT_MODE:
+ set_edit_mode (etoolbar, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+egg_editable_toolbar_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EggEditableToolbar *etoolbar = EGG_EDITABLE_TOOLBAR (object);
+
+ switch (prop_id)
+ {
+ case PROP_UI_MANAGER:
+ g_value_set_object (value, etoolbar->priv->manager);
+ break;
+ case PROP_TOOLBARS_MODEL:
+ g_value_set_object (value, etoolbar->priv->model);
+ break;
+ case PROP_SELECTED:
+ g_value_set_object (value, etoolbar->priv->selected);
+ break;
+ case PROP_EDIT_MODE:
+ g_value_set_boolean (value, etoolbar->priv->edit_mode>0);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+egg_editable_toolbar_class_init (EggEditableToolbarClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = egg_editable_toolbar_dispose;
+ object_class->set_property = egg_editable_toolbar_set_property;
+ object_class->get_property = egg_editable_toolbar_get_property;
+
+ egg_editable_toolbar_signals[ACTION_REQUEST] =
+ g_signal_new ("action_request",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EggEditableToolbarClass, action_request),
+ NULL, NULL, g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1, G_TYPE_STRING);
+
+ g_object_class_install_property (object_class,
+ PROP_UI_MANAGER,
+ g_param_spec_object ("ui-manager",
+ "UI-Mmanager",
+ "UI Manager",
+ GTK_TYPE_UI_MANAGER,
+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+ g_object_class_install_property (object_class,
+ PROP_TOOLBARS_MODEL,
+ g_param_spec_object ("model",
+ "Model",
+ "Toolbars Model",
+ EGG_TYPE_TOOLBARS_MODEL,
+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+ g_object_class_install_property (object_class,
+ PROP_SELECTED,
+ g_param_spec_object ("selected",
+ "Selected",
+ "Selected toolitem",
+ GTK_TYPE_TOOL_ITEM,
+ G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property (object_class,
+ PROP_POPUP_PATH,
+ g_param_spec_string ("popup-path",
+ "popup-path",
+ "popup-path",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property (object_class,
+ PROP_EDIT_MODE,
+ g_param_spec_boolean ("edit-mode",
+ "Edit-Mode",
+ "Edit Mode",
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+ g_type_class_add_private (object_class, sizeof (EggEditableToolbarPrivate));
+}
+
+GtkWidget *
+egg_editable_toolbar_new (GtkUIManager *manager,
+ const char *popup_path)
+{
+ return GTK_WIDGET (g_object_new (EGG_TYPE_EDITABLE_TOOLBAR,
+ "ui-manager", manager,
+ "popup-path", popup_path,
+ NULL));
+}
+
+GtkWidget *
+egg_editable_toolbar_new_with_model (GtkUIManager *manager,
+ EggToolbarsModel *model,
+ const char *popup_path)
+{
+ return GTK_WIDGET (g_object_new (EGG_TYPE_EDITABLE_TOOLBAR,
+ "ui-manager", manager,
+ "model", model,
+ "popup-path", popup_path,
+ NULL));
+}
+
+gboolean
+egg_editable_toolbar_get_edit_mode (EggEditableToolbar *etoolbar)
+{
+ EggEditableToolbarPrivate *priv = etoolbar->priv;
+
+ return priv->edit_mode > 0;
+}
+
+void
+egg_editable_toolbar_set_edit_mode (EggEditableToolbar *etoolbar,
+ gboolean mode)
+{
+ set_edit_mode (etoolbar, mode);
+ g_object_notify (G_OBJECT (etoolbar), "edit-mode");
+}
+
+void
+egg_editable_toolbar_add_visibility (EggEditableToolbar *etoolbar,
+ const char *path)
+{
+ etoolbar->priv->visibility_paths = g_list_prepend
+ (etoolbar->priv->visibility_paths, g_strdup (path));
+}
+
+void
+egg_editable_toolbar_show (EggEditableToolbar *etoolbar,
+ const char *name)
+{
+ EggEditableToolbarPrivate *priv = etoolbar->priv;
+ EggToolbarsModel *model = priv->model;
+ int i, n_toolbars;
+
+ n_toolbars = egg_toolbars_model_n_toolbars (model);
+ for (i = 0; i < n_toolbars; i++)
+ {
+ const char *toolbar_name;
+
+ toolbar_name = egg_toolbars_model_toolbar_nth (model, i);
+ if (strcmp (toolbar_name, name) == 0)
+ {
+ gtk_widget_show (get_dock_nth (etoolbar, i));
+ }
+ }
+}
+
+void
+egg_editable_toolbar_hide (EggEditableToolbar *etoolbar,
+ const char *name)
+{
+ EggEditableToolbarPrivate *priv = etoolbar->priv;
+ EggToolbarsModel *model = priv->model;
+ int i, n_toolbars;
+
+ n_toolbars = egg_toolbars_model_n_toolbars (model);
+ for (i = 0; i < n_toolbars; i++)
+ {
+ const char *toolbar_name;
+
+ toolbar_name = egg_toolbars_model_toolbar_nth (model, i);
+ if (strcmp (toolbar_name, name) == 0)
+ {
+ gtk_widget_hide (get_dock_nth (etoolbar, i));
+ }
+ }
+}
+
+void
+egg_editable_toolbar_set_fixed (EggEditableToolbar *etoolbar,
+ GtkToolbar *toolbar)
+{
+ EggEditableToolbarPrivate *priv = etoolbar->priv;
+
+ g_return_if_fail (!toolbar || GTK_IS_TOOLBAR (toolbar));
+
+ if (priv->fixed_toolbar)
+ {
+ unparent_fixed (etoolbar);
+ g_object_unref (priv->fixed_toolbar);
+ priv->fixed_toolbar = NULL;
+ }
+
+ if (toolbar)
+ {
+ priv->fixed_toolbar = GTK_WIDGET (toolbar);
+ gtk_toolbar_set_show_arrow (toolbar, FALSE);
+ g_object_ref_sink (toolbar);
+ }
+
+ update_fixed (etoolbar);
+}
+
+#define DEFAULT_ICON_HEIGHT 20
+
+/* We should probably experiment some more with this.
+ * Right now the rendered icon is pretty good for most
+ * themes. However, the icon is slightly large for themes
+ * with large toolbar icons.
+ */
+static GdkPixbuf *
+new_pixbuf_from_widget (GtkWidget *widget)
+{
+ GtkWidget *window;
+ GdkPixbuf *pixbuf;
+ gint icon_height;
+ GdkScreen *screen;
+
+ screen = gtk_widget_get_screen (widget);
+
+ if (!gtk_icon_size_lookup_for_settings (gtk_settings_get_for_screen (screen),
+ GTK_ICON_SIZE_LARGE_TOOLBAR,
+ NULL,
+ &icon_height))
+ {
+ icon_height = DEFAULT_ICON_HEIGHT;
+ }
+
+ window = gtk_offscreen_window_new ();
+ /* Set the width to -1 as we want the separator to be as thin as possible. */
+ gtk_widget_set_size_request (widget, -1, icon_height);
+
+ gtk_container_add (GTK_CONTAINER (window), widget);
+ gtk_widget_show_all (window);
+
+ /* Process the waiting events to have the widget actually drawn */
+ gdk_window_process_updates (gtk_widget_get_window (window), TRUE);
+ pixbuf = gtk_offscreen_window_get_pixbuf (GTK_OFFSCREEN_WINDOW (window));
+ gtk_widget_destroy (window);
+
+ return pixbuf;
+}
+
+static GdkPixbuf *
+new_separator_pixbuf (void)
+{
+ GtkWidget *separator;
+ GdkPixbuf *pixbuf;
+
+ separator = gtk_vseparator_new ();
+ pixbuf = new_pixbuf_from_widget (separator);
+ return pixbuf;
+}
+
+static void
+update_separator_image (GtkImage *image)
+{
+ GdkPixbuf *pixbuf = new_separator_pixbuf ();
+ gtk_image_set_from_pixbuf (GTK_IMAGE (image), pixbuf);
+ g_object_unref (pixbuf);
+}
+
+static gboolean
+style_set_cb (GtkWidget *widget,
+ GtkStyle *previous_style,
+ GtkImage *image)
+{
+
+ update_separator_image (image);
+ return FALSE;
+}
+
+GtkWidget *
+_egg_editable_toolbar_new_separator_image (void)
+{
+ GtkWidget *image = gtk_image_new ();
+ update_separator_image (GTK_IMAGE (image));
+ g_signal_connect (G_OBJECT (image), "style_set",
+ G_CALLBACK (style_set_cb), GTK_IMAGE (image));
+
+ return image;
+}
+
+EggToolbarsModel *
+egg_editable_toolbar_get_model (EggEditableToolbar *etoolbar)
+{
+ return etoolbar->priv->model;
+}
diff --git a/cut-n-paste/toolbar-editor/egg-editable-toolbar.h b/cut-n-paste/toolbar-editor/egg-editable-toolbar.h
new file mode 100644
index 00000000..669af415
--- /dev/null
+++ b/cut-n-paste/toolbar-editor/egg-editable-toolbar.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2003, 2004 Marco Pesenti Gritti
+ * Copyright (C) 2003, 2004, 2005 Christian Persch
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#ifndef EGG_EDITABLE_TOOLBAR_H
+#define EGG_EDITABLE_TOOLBAR_H
+
+#include "egg-toolbars-model.h"
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define EGG_TYPE_EDITABLE_TOOLBAR (egg_editable_toolbar_get_type ())
+#define EGG_EDITABLE_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_EDITABLE_TOOLBAR, EggEditableToolbar))
+#define EGG_EDITABLE_TOOLBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_EDITABLE_TOOLBAR, EggEditableToolbarClass))
+#define EGG_IS_EDITABLE_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_EDITABLE_TOOLBAR))
+#define EGG_IS_EDITABLE_TOOLBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_EDITABLE_TOOLBAR))
+#define EGG_EDITABLE_TOOLBAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_EDITABLE_TOOLBAR, EggEditableToolbarClass))
+
+typedef struct _EggEditableToolbar EggEditableToolbar;
+typedef struct _EggEditableToolbarPrivate EggEditableToolbarPrivate;
+typedef struct _EggEditableToolbarClass EggEditableToolbarClass;
+
+struct _EggEditableToolbar
+{
+ GtkVBox parent_object;
+
+ /*< private >*/
+ EggEditableToolbarPrivate *priv;
+};
+
+struct _EggEditableToolbarClass
+{
+ GtkVBoxClass parent_class;
+
+ void (* action_request) (EggEditableToolbar *etoolbar,
+ const char *action_name);
+};
+
+GType egg_editable_toolbar_get_type (void);
+GtkWidget *egg_editable_toolbar_new (GtkUIManager *manager,
+ const char *visibility_path);
+GtkWidget *egg_editable_toolbar_new_with_model (GtkUIManager *manager,
+ EggToolbarsModel *model,
+ const char *visibility_path);
+void egg_editable_toolbar_set_model (EggEditableToolbar *etoolbar,
+ EggToolbarsModel *model);
+EggToolbarsModel *egg_editable_toolbar_get_model (EggEditableToolbar *etoolbar);
+GtkUIManager *egg_editable_toolbar_get_manager (EggEditableToolbar *etoolbar);
+void egg_editable_toolbar_set_edit_mode (EggEditableToolbar *etoolbar,
+ gboolean mode);
+gboolean egg_editable_toolbar_get_edit_mode (EggEditableToolbar *etoolbar);
+void egg_editable_toolbar_show (EggEditableToolbar *etoolbar,
+ const char *name);
+void egg_editable_toolbar_hide (EggEditableToolbar *etoolbar,
+ const char *name);
+void egg_editable_toolbar_set_fixed (EggEditableToolbar *etoolbar,
+ GtkToolbar *fixed_toolbar);
+
+GtkWidget * egg_editable_toolbar_get_selected (EggEditableToolbar *etoolbar);
+void egg_editable_toolbar_set_selected (EggEditableToolbar *etoolbar,
+ GtkWidget *widget);
+
+void egg_editable_toolbar_add_visibility (EggEditableToolbar *etoolbar,
+ const char *path);
+
+/* Private Functions */
+
+GtkWidget *_egg_editable_toolbar_new_separator_image (void);
+
+G_END_DECLS
+
+#endif
diff --git a/cut-n-paste/toolbar-editor/egg-toolbar-editor.c b/cut-n-paste/toolbar-editor/egg-toolbar-editor.c
new file mode 100644
index 00000000..5e75ba82
--- /dev/null
+++ b/cut-n-paste/toolbar-editor/egg-toolbar-editor.c
@@ -0,0 +1,672 @@
+/*
+ * Copyright (C) 2003 Marco Pesenti Gritti
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#include "config.h"
+
+#include "egg-toolbar-editor.h"
+#include "egg-editable-toolbar.h"
+
+#include <string.h>
+#include <libxml/tree.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+
+static const GtkTargetEntry dest_drag_types[] = {
+ {EGG_TOOLBAR_ITEM_TYPE, GTK_TARGET_SAME_APP, 0},
+};
+
+static const GtkTargetEntry source_drag_types[] = {
+ {EGG_TOOLBAR_ITEM_TYPE, GTK_TARGET_SAME_APP, 0},
+};
+
+
+static void egg_toolbar_editor_finalize (GObject *object);
+static void update_editor_sheet (EggToolbarEditor *editor);
+
+enum
+{
+ PROP_0,
+ PROP_UI_MANAGER,
+ PROP_TOOLBARS_MODEL
+};
+
+enum
+{
+ SIGNAL_HANDLER_ITEM_ADDED,
+ SIGNAL_HANDLER_ITEM_REMOVED,
+ SIGNAL_HANDLER_TOOLBAR_REMOVED,
+ SIGNAL_HANDLER_LIST_SIZE /* Array size */
+};
+
+#define EGG_TOOLBAR_EDITOR_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EGG_TYPE_TOOLBAR_EDITOR, EggToolbarEditorPrivate))
+
+struct EggToolbarEditorPrivate
+{
+ GtkUIManager *manager;
+ EggToolbarsModel *model;
+
+ GtkWidget *table;
+ GtkWidget *scrolled_window;
+ GList *actions_list;
+ GList *factory_list;
+
+ /* These handlers need to be sanely disconnected when switching models */
+ gulong sig_handlers[SIGNAL_HANDLER_LIST_SIZE];
+};
+
+G_DEFINE_TYPE (EggToolbarEditor, egg_toolbar_editor, GTK_TYPE_VBOX);
+
+static gint
+compare_items (gconstpointer a,
+ gconstpointer b)
+{
+ const GtkWidget *item1 = a;
+ const GtkWidget *item2 = b;
+
+ char *key1 = g_object_get_data (G_OBJECT (item1),
+ "egg-collate-key");
+ char *key2 = g_object_get_data (G_OBJECT (item2),
+ "egg-collate-key");
+
+ return strcmp (key1, key2);
+}
+
+static GtkAction *
+find_action (EggToolbarEditor *t,
+ const char *name)
+{
+ GList *l;
+ GtkAction *action = NULL;
+
+ l = gtk_ui_manager_get_action_groups (t->priv->manager);
+
+ g_return_val_if_fail (EGG_IS_TOOLBAR_EDITOR (t), NULL);
+ g_return_val_if_fail (name != NULL, NULL);
+
+ for (; l != NULL; l = l->next)
+ {
+ GtkAction *tmp;
+
+ tmp = gtk_action_group_get_action (GTK_ACTION_GROUP (l->data), name);
+ if (tmp)
+ action = tmp;
+ }
+
+ return action;
+}
+
+static void
+egg_toolbar_editor_set_ui_manager (EggToolbarEditor *t,
+ GtkUIManager *manager)
+{
+ g_return_if_fail (GTK_IS_UI_MANAGER (manager));
+
+ t->priv->manager = g_object_ref (manager);
+}
+
+static void
+item_added_or_removed_cb (EggToolbarsModel *model,
+ int tpos,
+ int ipos,
+ EggToolbarEditor *editor)
+{
+ update_editor_sheet (editor);
+}
+
+static void
+toolbar_removed_cb (EggToolbarsModel *model,
+ int position,
+ EggToolbarEditor *editor)
+{
+ update_editor_sheet (editor);
+}
+
+static void
+egg_toolbar_editor_disconnect_model (EggToolbarEditor *t)
+{
+ EggToolbarEditorPrivate *priv = t->priv;
+ EggToolbarsModel *model = priv->model;
+ gulong handler;
+ int i;
+
+ for (i = 0; i < SIGNAL_HANDLER_LIST_SIZE; i++)
+ {
+ handler = priv->sig_handlers[i];
+
+ if (handler != 0)
+ {
+ if (g_signal_handler_is_connected (model, handler))
+ {
+ g_signal_handler_disconnect (model, handler);
+ }
+
+ priv->sig_handlers[i] = 0;
+ }
+ }
+}
+
+void
+egg_toolbar_editor_set_model (EggToolbarEditor *t,
+ EggToolbarsModel *model)
+{
+ EggToolbarEditorPrivate *priv;
+
+ g_return_if_fail (EGG_IS_TOOLBAR_EDITOR (t));
+ g_return_if_fail (model != NULL);
+
+ priv = t->priv;
+
+ if (priv->model)
+ {
+ if (G_UNLIKELY (priv->model == model)) return;
+
+ egg_toolbar_editor_disconnect_model (t);
+ g_object_unref (priv->model);
+ }
+
+ priv->model = g_object_ref (model);
+
+ update_editor_sheet (t);
+
+ priv->sig_handlers[SIGNAL_HANDLER_ITEM_ADDED] =
+ g_signal_connect_object (model, "item_added",
+ G_CALLBACK (item_added_or_removed_cb), t, 0);
+ priv->sig_handlers[SIGNAL_HANDLER_ITEM_REMOVED] =
+ g_signal_connect_object (model, "item_removed",
+ G_CALLBACK (item_added_or_removed_cb), t, 0);
+ priv->sig_handlers[SIGNAL_HANDLER_TOOLBAR_REMOVED] =
+ g_signal_connect_object (model, "toolbar_removed",
+ G_CALLBACK (toolbar_removed_cb), t, 0);
+}
+
+static void
+egg_toolbar_editor_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EggToolbarEditor *t = EGG_TOOLBAR_EDITOR (object);
+
+ switch (prop_id)
+ {
+ case PROP_UI_MANAGER:
+ egg_toolbar_editor_set_ui_manager (t, g_value_get_object (value));
+ break;
+ case PROP_TOOLBARS_MODEL:
+ egg_toolbar_editor_set_model (t, g_value_get_object (value));
+ break;
+ }
+}
+
+static void
+egg_toolbar_editor_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EggToolbarEditor *t = EGG_TOOLBAR_EDITOR (object);
+
+ switch (prop_id)
+ {
+ case PROP_UI_MANAGER:
+ g_value_set_object (value, t->priv->manager);
+ break;
+ case PROP_TOOLBARS_MODEL:
+ g_value_set_object (value, t->priv->model);
+ break;
+ }
+}
+
+static void
+egg_toolbar_editor_class_init (EggToolbarEditorClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = egg_toolbar_editor_finalize;
+ object_class->set_property = egg_toolbar_editor_set_property;
+ object_class->get_property = egg_toolbar_editor_get_property;
+
+ g_object_class_install_property (object_class,
+ PROP_UI_MANAGER,
+ g_param_spec_object ("ui-manager",
+ "UI-Manager",
+ "UI Manager",
+ GTK_TYPE_UI_MANAGER,
+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (object_class,
+ PROP_TOOLBARS_MODEL,
+ g_param_spec_object ("model",
+ "Model",
+ "Toolbars Model",
+ EGG_TYPE_TOOLBARS_MODEL,
+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB |
+ G_PARAM_CONSTRUCT));
+
+ g_type_class_add_private (object_class, sizeof (EggToolbarEditorPrivate));
+}
+
+static void
+egg_toolbar_editor_finalize (GObject *object)
+{
+ EggToolbarEditor *editor = EGG_TOOLBAR_EDITOR (object);
+
+ if (editor->priv->manager)
+ {
+ g_object_unref (editor->priv->manager);
+ }
+
+ if (editor->priv->model)
+ {
+ egg_toolbar_editor_disconnect_model (editor);
+ g_object_unref (editor->priv->model);
+ }
+
+ g_list_free (editor->priv->actions_list);
+ g_list_free (editor->priv->factory_list);
+
+ G_OBJECT_CLASS (egg_toolbar_editor_parent_class)->finalize (object);
+}
+
+GtkWidget *
+egg_toolbar_editor_new (GtkUIManager *manager,
+ EggToolbarsModel *model)
+{
+ return GTK_WIDGET (g_object_new (EGG_TYPE_TOOLBAR_EDITOR,
+ "ui-manager", manager,
+ "model", model,
+ NULL));
+}
+
+static void
+drag_begin_cb (GtkWidget *widget,
+ GdkDragContext *context)
+{
+ gtk_widget_hide (widget);
+}
+
+static void
+drag_end_cb (GtkWidget *widget,
+ GdkDragContext *context)
+{
+ gtk_widget_show (widget);
+}
+
+static void
+drag_data_get_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint32 time,
+ EggToolbarEditor *editor)
+{
+ const char *target;
+
+ target = g_object_get_data (G_OBJECT (widget), "egg-item-name");
+ g_return_if_fail (target != NULL);
+
+ gtk_selection_data_set (selection_data,
+ gtk_selection_data_get_target (selection_data), 8,
+ (const guchar *) target, strlen (target));
+}
+
+static gchar *
+elide_underscores (const gchar *original)
+{
+ gchar *q, *result;
+ const gchar *p;
+ gboolean last_underscore;
+
+ q = result = g_malloc (strlen (original) + 1);
+ last_underscore = FALSE;
+
+ for (p = original; *p; p++)
+ {
+ if (!last_underscore && *p == '_')
+ last_underscore = TRUE;
+ else
+ {
+ last_underscore = FALSE;
+ *q++ = *p;
+ }
+ }
+
+ *q = '\0';
+
+ return result;
+}
+
+static void
+set_drag_cursor (GtkWidget *widget)
+{
+ GdkCursor *cursor;
+ GdkScreen *screen;
+
+ screen = gtk_widget_get_screen (widget);
+
+ cursor = gdk_cursor_new_for_display (gdk_screen_get_display (screen),
+ GDK_HAND2);
+ gdk_window_set_cursor (gtk_widget_get_window (widget), cursor);
+ gdk_cursor_unref (cursor);
+}
+
+static void
+event_box_realize_cb (GtkWidget *widget, GtkImage *icon)
+{
+ GtkImageType type;
+
+ set_drag_cursor (widget);
+
+ type = gtk_image_get_storage_type (icon);
+ if (type == GTK_IMAGE_STOCK)
+ {
+ gchar *stock_id;
+ GdkPixbuf *pixbuf;
+
+ gtk_image_get_stock (icon, &stock_id, NULL);
+ pixbuf = gtk_widget_render_icon (widget, stock_id,
+ GTK_ICON_SIZE_LARGE_TOOLBAR, NULL);
+ gtk_drag_source_set_icon_pixbuf (widget, pixbuf);
+ g_object_unref (pixbuf);
+ }
+ else if (type == GTK_IMAGE_ICON_NAME)
+ {
+ const gchar *icon_name;
+ GdkScreen *screen;
+ GtkIconTheme *icon_theme;
+ GtkSettings *settings;
+ gint width, height;
+ GdkPixbuf *pixbuf;
+
+ gtk_image_get_icon_name (icon, &icon_name, NULL);
+ screen = gtk_widget_get_screen (widget);
+ icon_theme = gtk_icon_theme_get_for_screen (screen);
+ settings = gtk_settings_get_for_screen (screen);
+
+ if (!gtk_icon_size_lookup_for_settings (settings,
+ GTK_ICON_SIZE_LARGE_TOOLBAR,
+ &width, &height))
+ {
+ width = height = 24;
+ }
+
+ pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name,
+ MIN (width, height), 0, NULL);
+ if (G_UNLIKELY (!pixbuf))
+ return;
+
+ gtk_drag_source_set_icon_pixbuf (widget, pixbuf);
+ g_object_unref (pixbuf);
+
+ }
+ else if (type == GTK_IMAGE_PIXBUF)
+ {
+ GdkPixbuf *pixbuf = gtk_image_get_pixbuf (icon);
+ gtk_drag_source_set_icon_pixbuf (widget, pixbuf);
+ }
+}
+
+static GtkWidget *
+editor_create_item (EggToolbarEditor *editor,
+ GtkImage *icon,
+ const char *label_text,
+ GdkDragAction action)
+{
+ GtkWidget *event_box;
+ GtkWidget *vbox;
+ GtkWidget *label;
+ gchar *label_no_mnemonic = NULL;
+
+ event_box = gtk_event_box_new ();
+ gtk_event_box_set_visible_window (GTK_EVENT_BOX (event_box), FALSE);
+ gtk_widget_show (event_box);
+ gtk_drag_source_set (event_box,
+ GDK_BUTTON1_MASK,
+ source_drag_types, G_N_ELEMENTS (source_drag_types), action);
+ g_signal_connect (event_box, "drag_data_get",
+ G_CALLBACK (drag_data_get_cb), editor);
+ g_signal_connect_after (event_box, "realize",
+ G_CALLBACK (event_box_realize_cb), icon);
+
+ if (action == GDK_ACTION_MOVE)
+ {
+ g_signal_connect (event_box, "drag_begin",
+ G_CALLBACK (drag_begin_cb), NULL);
+ g_signal_connect (event_box, "drag_end",
+ G_CALLBACK (drag_end_cb), NULL);
+ }
+
+ vbox = gtk_vbox_new (0, FALSE);
+ gtk_widget_show (vbox);
+ gtk_container_add (GTK_CONTAINER (event_box), vbox);
+
+ gtk_widget_show (GTK_WIDGET (icon));
+ gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (icon), FALSE, TRUE, 0);
+ label_no_mnemonic = elide_underscores (label_text);
+ label = gtk_label_new (label_no_mnemonic);
+ g_free (label_no_mnemonic);
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0);
+
+ return event_box;
+}
+
+static GtkWidget *
+editor_create_item_from_name (EggToolbarEditor *editor,
+ const char * name,
+ GdkDragAction drag_action)
+{
+ GtkWidget *item;
+ const char *item_name;
+ char *short_label;
+ const char *collate_key;
+
+ if (strcmp (name, "_separator") == 0)
+ {
+ GtkWidget *icon;
+
+ icon = _egg_editable_toolbar_new_separator_image ();
+ short_label = _("Separator");
+ item_name = g_strdup (name);
+ collate_key = g_utf8_collate_key (short_label, -1);
+ item = editor_create_item (editor, GTK_IMAGE (icon),
+ short_label, drag_action);
+ }
+ else
+ {
+ GtkAction *action;
+ GtkWidget *icon;
+ char *stock_id, *icon_name = NULL;
+
+ action = find_action (editor, name);
+ g_return_val_if_fail (action != NULL, NULL);
+
+ g_object_get (action,
+ "icon-name", &icon_name,
+ "stock-id", &stock_id,
+ "short-label", &short_label,
+ NULL);
+
+ /* This is a workaround to catch named icons. */
+ if (icon_name)
+ icon = gtk_image_new_from_icon_name (icon_name,
+ GTK_ICON_SIZE_LARGE_TOOLBAR);
+ else
+ icon = gtk_image_new_from_stock (stock_id ? stock_id : GTK_STOCK_DND,
+ GTK_ICON_SIZE_LARGE_TOOLBAR);
+
+ item_name = g_strdup (name);
+ collate_key = g_utf8_collate_key (short_label, -1);
+ item = editor_create_item (editor, GTK_IMAGE (icon),
+ short_label, drag_action);
+
+ g_free (short_label);
+ g_free (stock_id);
+ g_free (icon_name);
+ }
+
+ g_object_set_data_full (G_OBJECT (item), "egg-collate-key",
+ (gpointer) collate_key, g_free);
+ g_object_set_data_full (G_OBJECT (item), "egg-item-name",
+ (gpointer) item_name, g_free);
+
+ return item;
+}
+
+static gint
+append_table (GtkTable *table, GList *items, gint y, gint width)
+{
+ if (items != NULL)
+ {
+ gint x = 0, height;
+ GtkWidget *alignment;
+ GtkWidget *item;
+
+ height = g_list_length (items) / width + 1;
+ gtk_table_resize (table, height, width);
+
+ if (y > 0)
+ {
+ item = gtk_hseparator_new ();
+ alignment = gtk_alignment_new (0.5, 0.5, 1.0, 0.0);
+ gtk_container_add (GTK_CONTAINER (alignment), item);
+ gtk_widget_show (alignment);
+ gtk_widget_show (item);
+
+ gtk_table_attach_defaults (table, alignment, 0, width, y-1, y+1);
+ }
+
+ for (; items != NULL; items = items->next)
+ {
+ item = items->data;
+ alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
+ gtk_container_add (GTK_CONTAINER (alignment), item);
+ gtk_widget_show (alignment);
+ gtk_widget_show (item);
+
+ if (x >= width)
+ {
+ x = 0;
+ y++;
+ }
+ gtk_table_attach_defaults (table, alignment, x, x+1, y, y+1);
+ x++;
+ }
+
+ y++;
+ }
+ return y;
+}
+
+static void
+update_editor_sheet (EggToolbarEditor *editor)
+{
+ gint y;
+ GPtrArray *items;
+ GList *to_move = NULL, *to_copy = NULL;
+ GtkWidget *table;
+ GtkWidget *viewport;
+
+ g_return_if_fail (EGG_IS_TOOLBAR_EDITOR (editor));
+
+ /* Create new table. */
+ table = gtk_table_new (0, 0, TRUE);
+ editor->priv->table = table;
+ gtk_container_set_border_width (GTK_CONTAINER (table), 12);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 24);
+ gtk_widget_show (table);
+ gtk_drag_dest_set (table, GTK_DEST_DEFAULT_ALL,
+ dest_drag_types, G_N_ELEMENTS (dest_drag_types),
+ GDK_ACTION_MOVE | GDK_ACTION_COPY);
+
+ /* Build two lists of items (one for copying, one for moving). */
+ items = egg_toolbars_model_get_name_avail (editor->priv->model);
+ while (items->len > 0)
+ {
+ GtkWidget *item;
+ const char *name;
+ gint flags;
+
+ name = g_ptr_array_index (items, 0);
+ g_ptr_array_remove_index_fast (items, 0);
+
+ flags = egg_toolbars_model_get_name_flags (editor->priv->model, name);
+ if ((flags & EGG_TB_MODEL_NAME_INFINITE) == 0)
+ {
+ item = editor_create_item_from_name (editor, name, GDK_ACTION_MOVE);
+ if (item != NULL)
+ to_move = g_list_insert_sorted (to_move, item, compare_items);
+ }
+ else
+ {
+ item = editor_create_item_from_name (editor, name, GDK_ACTION_COPY);
+ if (item != NULL)
+ to_copy = g_list_insert_sorted (to_copy, item, compare_items);
+ }
+ }
+
+ /* Add them to the sheet. */
+ y = 0;
+ y = append_table (GTK_TABLE (table), to_move, y, 4);
+ y = append_table (GTK_TABLE (table), to_copy, y, 4);
+
+ g_list_free (to_move);
+ g_list_free (to_copy);
+ g_ptr_array_free (items, TRUE);
+
+ /* Delete old table. */
+ viewport = gtk_bin_get_child (GTK_BIN (editor->priv->scrolled_window));
+ if (viewport)
+ {
+ gtk_container_remove (GTK_CONTAINER (viewport),
+ gtk_bin_get_child (GTK_BIN (viewport)));
+ }
+
+ /* Add table to window. */
+ gtk_scrolled_window_add_with_viewport
+ (GTK_SCROLLED_WINDOW (editor->priv->scrolled_window), table);
+
+}
+
+static void
+setup_editor (EggToolbarEditor *editor)
+{
+ GtkWidget *scrolled_window;
+
+ gtk_container_set_border_width (GTK_CONTAINER (editor), 12);
+ scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+ editor->priv->scrolled_window = scrolled_window;
+ gtk_widget_show (scrolled_window);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start (GTK_BOX (editor), scrolled_window, TRUE, TRUE, 0);
+}
+
+static void
+egg_toolbar_editor_init (EggToolbarEditor *t)
+{
+ t->priv = EGG_TOOLBAR_EDITOR_GET_PRIVATE (t);
+
+ t->priv->manager = NULL;
+ t->priv->actions_list = NULL;
+
+ setup_editor (t);
+}
+
diff --git a/cut-n-paste/toolbar-editor/egg-toolbar-editor.h b/cut-n-paste/toolbar-editor/egg-toolbar-editor.h
new file mode 100644
index 00000000..3b897c50
--- /dev/null
+++ b/cut-n-paste/toolbar-editor/egg-toolbar-editor.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2003 Marco Pesenti Gritti
+ *
+ * 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, 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 EGG_TOOLBAR_EDITOR_H
+#define EGG_TOOLBAR_EDITOR_H
+
+#include <gtk/gtk.h>
+
+#include "egg-toolbars-model.h"
+
+G_BEGIN_DECLS
+
+typedef struct EggToolbarEditorClass EggToolbarEditorClass;
+
+#define EGG_TYPE_TOOLBAR_EDITOR (egg_toolbar_editor_get_type ())
+#define EGG_TOOLBAR_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_TOOLBAR_EDITOR, EggToolbarEditor))
+#define EGG_TOOLBAR_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_TOOLBAR_EDITOR, EggToolbarEditorClass))
+#define EGG_IS_TOOLBAR_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_TOOLBAR_EDITOR))
+#define EGG_IS_TOOLBAR_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_TOOLBAR_EDITOR))
+#define EGG_TOOLBAR_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_TOOLBAR_EDITOR, EggToolbarEditorClass))
+
+
+typedef struct EggToolbarEditor EggToolbarEditor;
+typedef struct EggToolbarEditorPrivate EggToolbarEditorPrivate;
+
+struct EggToolbarEditor
+{
+ GtkVBox parent_object;
+
+ /*< private >*/
+ EggToolbarEditorPrivate *priv;
+};
+
+struct EggToolbarEditorClass
+{
+ GtkVBoxClass parent_class;
+};
+
+
+GType egg_toolbar_editor_get_type (void);
+GtkWidget *egg_toolbar_editor_new (GtkUIManager *manager,
+ EggToolbarsModel *model);
+void egg_toolbar_editor_set_model (EggToolbarEditor *t,
+ EggToolbarsModel *model);
+
+G_END_DECLS
+
+#endif
diff --git a/cut-n-paste/toolbar-editor/egg-toolbars-model.c b/cut-n-paste/toolbar-editor/egg-toolbars-model.c
new file mode 100644
index 00000000..27dbedf6
--- /dev/null
+++ b/cut-n-paste/toolbar-editor/egg-toolbars-model.c
@@ -0,0 +1,987 @@
+/*
+ * Copyright (C) 2002-2004 Marco Pesenti Gritti
+ * Copyright (C) 2004 Christian Persch
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#include "config.h"
+
+#include "egg-toolbars-model.h"
+#include "eggtypebuiltins.h"
+#include "eggmarshalers.h"
+
+#include <unistd.h>
+#include <string.h>
+#include <libxml/tree.h>
+#include <gdk/gdk.h>
+
+static void egg_toolbars_model_finalize (GObject *object);
+
+enum
+{
+ ITEM_ADDED,
+ ITEM_REMOVED,
+ TOOLBAR_ADDED,
+ TOOLBAR_CHANGED,
+ TOOLBAR_REMOVED,
+ LAST_SIGNAL
+};
+
+typedef struct
+{
+ char *name;
+ EggTbModelFlags flags;
+} EggToolbarsToolbar;
+
+typedef struct
+{
+ char *name;
+} EggToolbarsItem;
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+#define EGG_TOOLBARS_MODEL_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EGG_TYPE_TOOLBARS_MODEL, EggToolbarsModelPrivate))
+
+struct EggToolbarsModelPrivate
+{
+ GNode *toolbars;
+ GList *types;
+ GHashTable *flags;
+};
+
+G_DEFINE_TYPE (EggToolbarsModel, egg_toolbars_model, G_TYPE_OBJECT)
+
+static xmlDocPtr
+egg_toolbars_model_to_xml (EggToolbarsModel *model)
+{
+ GNode *l1, *l2, *tl;
+ GList *l3;
+ xmlDocPtr doc;
+
+ g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), NULL);
+
+ tl = model->priv->toolbars;
+
+ xmlIndentTreeOutput = TRUE;
+ doc = xmlNewDoc ((const xmlChar*) "1.0");
+ doc->children = xmlNewDocNode (doc, NULL, (const xmlChar*) "toolbars", NULL);
+
+ for (l1 = tl->children; l1 != NULL; l1 = l1->next)
+ {
+ xmlNodePtr tnode;
+ EggToolbarsToolbar *toolbar = l1->data;
+
+ tnode = xmlNewChild (doc->children, NULL, (const xmlChar*) "toolbar", NULL);
+ xmlSetProp (tnode, (const xmlChar*) "name", (const xmlChar*) toolbar->name);
+ xmlSetProp (tnode, (const xmlChar*) "hidden",
+ (toolbar->flags&EGG_TB_MODEL_HIDDEN) ? (const xmlChar*) "true" : (const xmlChar*) "false");
+ xmlSetProp (tnode, (const xmlChar*) "editable",
+ (toolbar->flags&EGG_TB_MODEL_NOT_EDITABLE) ? (const xmlChar*) "false" : (const xmlChar*) "true");
+
+ for (l2 = l1->children; l2 != NULL; l2 = l2->next)
+ {
+ xmlNodePtr node;
+ EggToolbarsItem *item = l2->data;
+
+ if (strcmp (item->name, "_separator") == 0)
+ {
+ node = xmlNewChild (tnode, NULL, (const xmlChar*) "separator", NULL);
+ continue;
+ }
+
+ node = xmlNewChild (tnode, NULL, (const xmlChar*) "toolitem", NULL);
+ xmlSetProp (node, (const xmlChar*) "name", (const xmlChar*) item->name);
+
+ /* Add 'data' nodes for each data type which can be written out for this
+ * item. Only write types which can be used to restore the data. */
+ for (l3 = model->priv->types; l3 != NULL; l3 = l3->next)
+ {
+ EggToolbarsItemType *type = l3->data;
+ if (type->get_name != NULL && type->get_data != NULL)
+ {
+ xmlNodePtr dnode;
+ char *tmp;
+
+ tmp = type->get_data (type, item->name);
+ if (tmp != NULL)
+ {
+ dnode = xmlNewTextChild (node, NULL, (const xmlChar*) "data", (const xmlChar*) tmp);
+ g_free (tmp);
+
+ tmp = gdk_atom_name (type->type);
+ xmlSetProp (dnode, (const xmlChar*) "type", (const xmlChar*) tmp);
+ g_free (tmp);
+ }
+ }
+ }
+ }
+ }
+
+ return doc;
+}
+
+static gboolean
+safe_save_xml (const char *xml_file, xmlDocPtr doc)
+{
+ char *tmp_file;
+ char *old_file;
+ gboolean old_exist;
+ gboolean retval = TRUE;
+
+ tmp_file = g_strconcat (xml_file, ".tmp", NULL);
+ old_file = g_strconcat (xml_file, ".old", NULL);
+
+ if (xmlSaveFormatFile (tmp_file, doc, 1) <= 0)
+ {
+ g_warning ("Failed to write XML data to %s", tmp_file);
+ goto failed;
+ }
+
+ old_exist = g_file_test (xml_file, G_FILE_TEST_EXISTS);
+
+ if (old_exist)
+ {
+ if (rename (xml_file, old_file) < 0)
+ {
+ g_warning ("Failed to rename %s to %s", xml_file, old_file);
+ retval = FALSE;
+ goto failed;
+ }
+ }
+
+ if (rename (tmp_file, xml_file) < 0)
+ {
+ g_warning ("Failed to rename %s to %s", tmp_file, xml_file);
+
+ if (rename (old_file, xml_file) < 0)
+ {
+ g_warning ("Failed to restore %s from %s", xml_file, tmp_file);
+ }
+ retval = FALSE;
+ goto failed;
+ }
+
+ if (old_exist)
+ {
+ if (unlink (old_file) < 0)
+ {
+ g_warning ("Failed to delete old file %s", old_file);
+ }
+ }
+
+ failed:
+ g_free (old_file);
+ g_free (tmp_file);
+
+ return retval;
+}
+
+void
+egg_toolbars_model_save_toolbars (EggToolbarsModel *model,
+ const char *xml_file,
+ const char *version)
+{
+ xmlDocPtr doc;
+ xmlNodePtr root;
+
+ g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model));
+
+ doc = egg_toolbars_model_to_xml (model);
+ root = xmlDocGetRootElement (doc);
+ xmlSetProp (root, (const xmlChar*) "version", (const xmlChar*) version);
+ safe_save_xml (xml_file, doc);
+ xmlFreeDoc (doc);
+}
+
+static gboolean
+is_unique (EggToolbarsModel *model,
+ EggToolbarsItem *idata)
+{
+ EggToolbarsItem *idata2;
+ GNode *toolbar, *item;
+
+
+ for(toolbar = g_node_first_child (model->priv->toolbars);
+ toolbar != NULL; toolbar = g_node_next_sibling (toolbar))
+ {
+ for(item = g_node_first_child (toolbar);
+ item != NULL; item = g_node_next_sibling (item))
+ {
+ idata2 = item->data;
+
+ if (idata != idata2 && strcmp (idata->name, idata2->name) == 0)
+ {
+ return FALSE;
+ }
+ }
+ }
+
+ return TRUE;
+}
+
+static GNode *
+toolbar_node_new (const char *name)
+{
+ EggToolbarsToolbar *toolbar;
+
+ toolbar = g_new (EggToolbarsToolbar, 1);
+ toolbar->name = g_strdup (name);
+ toolbar->flags = 0;
+
+ return g_node_new (toolbar);
+}
+
+static GNode *
+item_node_new (const char *name, EggToolbarsModel *model)
+{
+ EggToolbarsItem *item;
+ int flags;
+
+ g_return_val_if_fail (name != NULL, NULL);
+
+ item = g_new (EggToolbarsItem, 1);
+ item->name = g_strdup (name);
+
+ flags = GPOINTER_TO_INT (g_hash_table_lookup (model->priv->flags, item->name));
+ if ((flags & EGG_TB_MODEL_NAME_INFINITE) == 0)
+ g_hash_table_insert (model->priv->flags,
+ g_strdup (item->name),
+ GINT_TO_POINTER (flags | EGG_TB_MODEL_NAME_USED));
+
+ return g_node_new (item);
+}
+
+static void
+item_node_free (GNode *item_node, EggToolbarsModel *model)
+{
+ EggToolbarsItem *item = item_node->data;
+ int flags;
+
+ flags = GPOINTER_TO_INT (g_hash_table_lookup (model->priv->flags, item->name));
+ if ((flags & EGG_TB_MODEL_NAME_INFINITE) == 0 && is_unique (model, item))
+ g_hash_table_insert (model->priv->flags,
+ g_strdup (item->name),
+ GINT_TO_POINTER (flags & ~EGG_TB_MODEL_NAME_USED));
+
+ g_free (item->name);
+ g_free (item);
+
+ g_node_destroy (item_node);
+}
+
+static void
+toolbar_node_free (GNode *toolbar_node, EggToolbarsModel *model)
+{
+ EggToolbarsToolbar *toolbar = toolbar_node->data;
+
+ g_node_children_foreach (toolbar_node, G_TRAVERSE_ALL,
+ (GNodeForeachFunc) item_node_free, model);
+
+ g_free (toolbar->name);
+ g_free (toolbar);
+
+ g_node_destroy (toolbar_node);
+}
+
+EggTbModelFlags
+egg_toolbars_model_get_flags (EggToolbarsModel *model,
+ int toolbar_position)
+{
+ GNode *toolbar_node;
+ EggToolbarsToolbar *toolbar;
+
+ toolbar_node = g_node_nth_child (model->priv->toolbars, toolbar_position);
+ g_return_val_if_fail (toolbar_node != NULL, 0);
+
+ toolbar = toolbar_node->data;
+
+ return toolbar->flags;
+}
+
+void
+egg_toolbars_model_set_flags (EggToolbarsModel *model,
+ int toolbar_position,
+ EggTbModelFlags flags)
+{
+ GNode *toolbar_node;
+ EggToolbarsToolbar *toolbar;
+
+ toolbar_node = g_node_nth_child (model->priv->toolbars, toolbar_position);
+ g_return_if_fail (toolbar_node != NULL);
+
+ toolbar = toolbar_node->data;
+
+ toolbar->flags = flags;
+
+ g_signal_emit (G_OBJECT (model), signals[TOOLBAR_CHANGED],
+ 0, toolbar_position);
+}
+
+
+char *
+egg_toolbars_model_get_data (EggToolbarsModel *model,
+ GdkAtom type,
+ const char *name)
+{
+ EggToolbarsItemType *t;
+ char *data = NULL;
+ GList *l;
+
+ if (type == GDK_NONE || type == gdk_atom_intern (EGG_TOOLBAR_ITEM_TYPE, FALSE))
+ {
+ g_return_val_if_fail (name != NULL, NULL);
+ g_return_val_if_fail (*name != 0, NULL);
+ return strdup (name);
+ }
+
+ for (l = model->priv->types; l != NULL; l = l->next)
+ {
+ t = l->data;
+ if (t->type == type && t->get_data != NULL)
+ {
+ data = t->get_data (t, name);
+ if (data != NULL) break;
+ }
+ }
+
+ return data;
+}
+
+char *
+egg_toolbars_model_get_name (EggToolbarsModel *model,
+ GdkAtom type,
+ const char *data,
+ gboolean create)
+{
+ EggToolbarsItemType *t;
+ char *name = NULL;
+ GList *l;
+
+ if (type == GDK_NONE || type == gdk_atom_intern (EGG_TOOLBAR_ITEM_TYPE, FALSE))
+ {
+ g_return_val_if_fail (data, NULL);
+ g_return_val_if_fail (*data, NULL);
+ return strdup (data);
+ }
+
+ if (create)
+ {
+ for (l = model->priv->types; name == NULL && l != NULL; l = l->next)
+ {
+ t = l->data;
+ if (t->type == type && t->new_name != NULL)
+ name = t->new_name (t, data);
+ }
+
+ return name;
+ }
+ else
+ {
+ for (l = model->priv->types; name == NULL && l != NULL; l = l->next)
+ {
+ t = l->data;
+ if (t->type == type && t->get_name != NULL)
+ name = t->get_name (t, data);
+ }
+
+ return name;
+ }
+}
+
+static gboolean
+impl_add_item (EggToolbarsModel *model,
+ int toolbar_position,
+ int position,
+ const char *name)
+{
+ GNode *parent_node;
+ GNode *child_node;
+ int real_position;
+
+ g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), FALSE);
+ g_return_val_if_fail (name != NULL, FALSE);
+
+ parent_node = g_node_nth_child (model->priv->toolbars, toolbar_position);
+ child_node = item_node_new (name, model);
+ g_node_insert (parent_node, position, child_node);
+
+ real_position = g_node_child_position (parent_node, child_node);
+
+ g_signal_emit (G_OBJECT (model), signals[ITEM_ADDED], 0,
+ toolbar_position, real_position);
+
+ return TRUE;
+}
+
+gboolean
+egg_toolbars_model_add_item (EggToolbarsModel *model,
+ int toolbar_position,
+ int position,
+ const char *name)
+{
+ EggToolbarsModelClass *klass = EGG_TOOLBARS_MODEL_GET_CLASS (model);
+ return klass->add_item (model, toolbar_position, position, name);
+}
+
+int
+egg_toolbars_model_add_toolbar (EggToolbarsModel *model,
+ int position,
+ const char *name)
+{
+ GNode *node;
+ int real_position;
+
+ g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), -1);
+
+ node = toolbar_node_new (name);
+ g_node_insert (model->priv->toolbars, position, node);
+
+ real_position = g_node_child_position (model->priv->toolbars, node);
+
+ g_signal_emit (G_OBJECT (model), signals[TOOLBAR_ADDED],
+ 0, real_position);
+
+ return g_node_child_position (model->priv->toolbars, node);
+}
+
+static char *
+parse_data_list (EggToolbarsModel *model,
+ xmlNodePtr child,
+ gboolean create)
+{
+ char *name = NULL;
+ while (child && name == NULL)
+ {
+ if (xmlStrEqual (child->name, (const xmlChar*) "data"))
+ {
+ xmlChar *type = xmlGetProp (child, (const xmlChar*) "type");
+ xmlChar *data = xmlNodeGetContent (child);
+
+ if (type != NULL)
+ {
+ GdkAtom atom = gdk_atom_intern ((const char*) type, TRUE);
+ name = egg_toolbars_model_get_name (model, atom, (const char*) data, create);
+ }
+
+ xmlFree (type);
+ xmlFree (data);
+ }
+
+ child = child->next;
+ }
+
+ return name;
+}
+
+static void
+parse_item_list (EggToolbarsModel *model,
+ xmlNodePtr child,
+ int position)
+{
+ while (child)
+ {
+ if (xmlStrEqual (child->name, (const xmlChar*) "toolitem"))
+ {
+ char *name;
+
+ /* Try to get the name using the data elements first,
+ as they are more 'portable' or 'persistent'. */
+ name = parse_data_list (model, child->children, FALSE);
+ if (name == NULL)
+ {
+ name = parse_data_list (model, child->children, TRUE);
+ }
+
+ /* If that fails, try to use the name. */
+ if (name == NULL)
+ {
+ xmlChar *type = xmlGetProp (child, (const xmlChar*) "type");
+ xmlChar *data = xmlGetProp (child, (const xmlChar*) "name");
+ GdkAtom atom = type ? gdk_atom_intern ((const char*) type, TRUE) : GDK_NONE;
+
+ /* If an old format, try to use it. */
+ name = egg_toolbars_model_get_name (model, atom, (const char*) data, FALSE);
+ if (name == NULL)
+ {
+ name = egg_toolbars_model_get_name (model, atom, (const char*) data, TRUE);
+ }
+
+ xmlFree (type);
+ xmlFree (data);
+ }
+
+ if (name != NULL)
+ {
+ egg_toolbars_model_add_item (model, position, -1, name);
+ g_free (name);
+ }
+ }
+ else if (xmlStrEqual (child->name, (const xmlChar*) "separator"))
+ {
+ egg_toolbars_model_add_item (model, position, -1, "_separator");
+ }
+
+ child = child->next;
+ }
+}
+
+static void
+parse_toolbars (EggToolbarsModel *model,
+ xmlNodePtr child)
+{
+ while (child)
+ {
+ if (xmlStrEqual (child->name, (const xmlChar*) "toolbar"))
+ {
+ xmlChar *string;
+ int position;
+ EggTbModelFlags flags;
+
+ string = xmlGetProp (child, (const xmlChar*) "name");
+ position = egg_toolbars_model_add_toolbar (model, -1, (const char*) string);
+ flags = egg_toolbars_model_get_flags (model, position);
+ xmlFree (string);
+
+ string = xmlGetProp (child, (const xmlChar*) "editable");
+ if (string && xmlStrEqual (string, (const xmlChar*) "false"))
+ flags |= EGG_TB_MODEL_NOT_EDITABLE;
+ xmlFree (string);
+
+ string = xmlGetProp (child, (const xmlChar*) "hidden");
+ if (string && xmlStrEqual (string, (const xmlChar*) "true"))
+ flags |= EGG_TB_MODEL_HIDDEN;
+ xmlFree (string);
+
+ string = xmlGetProp (child, (const xmlChar*) "style");
+ if (string && xmlStrEqual (string, (const xmlChar*) "icons-only"))
+ flags |= EGG_TB_MODEL_ICONS;
+ xmlFree (string);
+
+ egg_toolbars_model_set_flags (model, position, flags);
+
+ parse_item_list (model, child->children, position);
+ }
+
+ child = child->next;
+ }
+}
+
+gboolean
+egg_toolbars_model_load_toolbars (EggToolbarsModel *model,
+ const char *xml_file)
+{
+ xmlDocPtr doc;
+ xmlNodePtr root;
+
+ g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), FALSE);
+
+ if (!xml_file || !g_file_test (xml_file, G_FILE_TEST_EXISTS)) return FALSE;
+
+ doc = xmlParseFile (xml_file);
+ if (doc == NULL)
+ {
+ g_warning ("Failed to load XML data from %s", xml_file);
+ return FALSE;
+ }
+ root = xmlDocGetRootElement (doc);
+
+ parse_toolbars (model, root->children);
+
+ xmlFreeDoc (doc);
+
+ return TRUE;
+}
+
+static void
+parse_available_list (EggToolbarsModel *model,
+ xmlNodePtr child)
+{
+ gint flags;
+
+ while (child)
+ {
+ if (xmlStrEqual (child->name, (const xmlChar*) "toolitem"))
+ {
+ xmlChar *name;
+
+ name = xmlGetProp (child, (const xmlChar*) "name");
+ flags = egg_toolbars_model_get_name_flags
+ (model, (const char*)name);
+ egg_toolbars_model_set_name_flags
+ (model, (const char*)name, flags | EGG_TB_MODEL_NAME_KNOWN);
+ xmlFree (name);
+ }
+ child = child->next;
+ }
+}
+
+static void
+parse_names (EggToolbarsModel *model,
+ xmlNodePtr child)
+{
+ while (child)
+ {
+ if (xmlStrEqual (child->name, (const xmlChar*) "available"))
+ {
+ parse_available_list (model, child->children);
+ }
+
+ child = child->next;
+ }
+}
+
+gboolean
+egg_toolbars_model_load_names (EggToolbarsModel *model,
+ const char *xml_file)
+{
+ xmlDocPtr doc;
+ xmlNodePtr root;
+
+ g_return_val_if_fail (EGG_IS_TOOLBARS_MODEL (model), FALSE);
+
+ if (!xml_file || !g_file_test (xml_file, G_FILE_TEST_EXISTS)) return FALSE;
+
+ doc = xmlParseFile (xml_file);
+ if (doc == NULL)
+ {
+ g_warning ("Failed to load XML data from %s", xml_file);
+ return FALSE;
+ }
+ root = xmlDocGetRootElement (doc);
+
+ parse_names (model, root->children);
+
+ xmlFreeDoc (doc);
+
+ return TRUE;
+}
+
+static void
+egg_toolbars_model_class_init (EggToolbarsModelClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ volatile GType flags_type; /* work around gcc's optimiser */
+
+ /* make sure the flags type is known */
+ flags_type = EGG_TYPE_TB_MODEL_FLAGS;
+
+ object_class->finalize = egg_toolbars_model_finalize;
+
+ klass->add_item = impl_add_item;
+
+ signals[ITEM_ADDED] =
+ g_signal_new ("item_added",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EggToolbarsModelClass, item_added),
+ NULL, NULL, _egg_marshal_VOID__INT_INT,
+ G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
+ signals[TOOLBAR_ADDED] =
+ g_signal_new ("toolbar_added",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EggToolbarsModelClass, toolbar_added),
+ NULL, NULL, g_cclosure_marshal_VOID__INT,
+ G_TYPE_NONE, 1, G_TYPE_INT);
+ signals[ITEM_REMOVED] =
+ g_signal_new ("item_removed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EggToolbarsModelClass, item_removed),
+ NULL, NULL, _egg_marshal_VOID__INT_INT,
+ G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
+ signals[TOOLBAR_REMOVED] =
+ g_signal_new ("toolbar_removed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EggToolbarsModelClass, toolbar_removed),
+ NULL, NULL, g_cclosure_marshal_VOID__INT,
+ G_TYPE_NONE, 1, G_TYPE_INT);
+ signals[TOOLBAR_CHANGED] =
+ g_signal_new ("toolbar_changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EggToolbarsModelClass, toolbar_changed),
+ NULL, NULL, g_cclosure_marshal_VOID__INT,
+ G_TYPE_NONE, 1, G_TYPE_INT);
+
+ g_type_class_add_private (object_class, sizeof (EggToolbarsModelPrivate));
+}
+
+static void
+egg_toolbars_model_init (EggToolbarsModel *model)
+{
+ model->priv =EGG_TOOLBARS_MODEL_GET_PRIVATE (model);
+
+ model->priv->toolbars = g_node_new (NULL);
+ model->priv->flags = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ egg_toolbars_model_set_name_flags (model, "_separator",
+ EGG_TB_MODEL_NAME_KNOWN |
+ EGG_TB_MODEL_NAME_INFINITE);
+}
+
+static void
+egg_toolbars_model_finalize (GObject *object)
+{
+ EggToolbarsModel *model = EGG_TOOLBARS_MODEL (object);
+
+ g_node_children_foreach (model->priv->toolbars, G_TRAVERSE_ALL,
+ (GNodeForeachFunc) toolbar_node_free, model);
+ g_node_destroy (model->priv->toolbars);
+ g_hash_table_destroy (model->priv->flags);
+
+ G_OBJECT_CLASS (egg_toolbars_model_parent_class)->finalize (object);
+}
+
+EggToolbarsModel *
+egg_toolbars_model_new (void)
+{
+ return EGG_TOOLBARS_MODEL (g_object_new (EGG_TYPE_TOOLBARS_MODEL, NULL));
+}
+
+void
+egg_toolbars_model_remove_toolbar (EggToolbarsModel *model,
+ int position)
+{
+ GNode *node;
+ EggTbModelFlags flags;
+
+ g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model));
+
+ flags = egg_toolbars_model_get_flags (model, position);
+
+ if (!(flags & EGG_TB_MODEL_NOT_REMOVABLE))
+ {
+ node = g_node_nth_child (model->priv->toolbars, position);
+ g_return_if_fail (node != NULL);
+
+ toolbar_node_free (node, model);
+
+ g_signal_emit (G_OBJECT (model), signals[TOOLBAR_REMOVED],
+ 0, position);
+ }
+}
+
+void
+egg_toolbars_model_remove_item (EggToolbarsModel *model,
+ int toolbar_position,
+ int position)
+{
+ GNode *node, *toolbar;
+
+ g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model));
+
+ toolbar = g_node_nth_child (model->priv->toolbars, toolbar_position);
+ g_return_if_fail (toolbar != NULL);
+
+ node = g_node_nth_child (toolbar, position);
+ g_return_if_fail (node != NULL);
+
+ item_node_free (node, model);
+
+ g_signal_emit (G_OBJECT (model), signals[ITEM_REMOVED], 0,
+ toolbar_position, position);
+}
+
+void
+egg_toolbars_model_move_item (EggToolbarsModel *model,
+ int toolbar_position,
+ int position,
+ int new_toolbar_position,
+ int new_position)
+{
+ GNode *node, *toolbar, *new_toolbar;
+
+ g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model));
+
+ toolbar = g_node_nth_child (model->priv->toolbars, toolbar_position);
+ g_return_if_fail (toolbar != NULL);
+
+ new_toolbar = g_node_nth_child (model->priv->toolbars, new_toolbar_position);
+ g_return_if_fail (new_toolbar != NULL);
+
+ node = g_node_nth_child (toolbar, position);
+ g_return_if_fail (node != NULL);
+
+ g_node_unlink (node);
+
+ g_signal_emit (G_OBJECT (model), signals[ITEM_REMOVED], 0,
+ toolbar_position, position);
+
+ g_node_insert (new_toolbar, new_position, node);
+
+ g_signal_emit (G_OBJECT (model), signals[ITEM_ADDED], 0,
+ new_toolbar_position, new_position);
+}
+
+void
+egg_toolbars_model_delete_item (EggToolbarsModel *model,
+ const char *name)
+{
+ EggToolbarsItem *idata;
+ EggToolbarsToolbar *tdata;
+ GNode *toolbar, *item, *next;
+ int tpos, ipos;
+
+ g_return_if_fail (EGG_IS_TOOLBARS_MODEL (model));
+
+ toolbar = g_node_first_child (model->priv->toolbars);
+ tpos = 0;
+
+ while (toolbar != NULL)
+ {
+ item = g_node_first_child (toolbar);
+ ipos = 0;
+
+ /* Don't delete toolbars that were already empty */
+ if (item == NULL)
+ {
+ toolbar = g_node_next_sibling (toolbar);
+ continue;
+ }
+
+ while (item != NULL)
+ {
+ next = g_node_next_sibling (item);
+ idata = item->data;
+ if (strcmp (idata->name, name) == 0)
+ {
+ item_node_free (item, model);
+ g_signal_emit (G_OBJECT (model),
+ signals[ITEM_REMOVED],
+ 0, tpos, ipos);
+ }
+ else
+ {
+ ipos++;
+ }
+
+ item = next;
+ }
+
+ next = g_node_next_sibling (toolbar);
+ tdata = toolbar->data;
+ if (!(tdata->flags & EGG_TB_MODEL_NOT_REMOVABLE) &&
+ g_node_first_child (toolbar) == NULL)
+ {
+ toolbar_node_free (toolbar, model);
+
+ g_signal_emit (G_OBJECT (model),
+ signals[TOOLBAR_REMOVED],
+ 0, tpos);
+ }
+ else
+ {
+ tpos++;
+ }
+
+ toolbar = next;
+ }
+}
+
+int
+egg_toolbars_model_n_items (EggToolbarsModel *model,
+ int toolbar_position)
+{
+ GNode *toolbar;
+
+ toolbar = g_node_nth_child (model->priv->toolbars, toolbar_position);
+ g_return_val_if_fail (toolbar != NULL, -1);
+
+ return g_node_n_children (toolbar);
+}
+
+const char *
+egg_toolbars_model_item_nth (EggToolbarsModel *model,
+ int toolbar_position,
+ int position)
+{
+ GNode *toolbar;
+ GNode *item;
+ EggToolbarsItem *idata;
+
+ toolbar = g_node_nth_child (model->priv->toolbars, toolbar_position);
+ g_return_val_if_fail (toolbar != NULL, NULL);
+
+ item = g_node_nth_child (toolbar, position);
+ g_return_val_if_fail (item != NULL, NULL);
+
+ idata = item->data;
+ return idata->name;
+}
+
+int
+egg_toolbars_model_n_toolbars (EggToolbarsModel *model)
+{
+ return g_node_n_children (model->priv->toolbars);
+}
+
+const char *
+egg_toolbars_model_toolbar_nth (EggToolbarsModel *model,
+ int position)
+{
+ GNode *toolbar;
+ EggToolbarsToolbar *tdata;
+
+ toolbar = g_node_nth_child (model->priv->toolbars, position);
+ g_return_val_if_fail (toolbar != NULL, NULL);
+
+ tdata = toolbar->data;
+
+ return tdata->name;
+}
+
+GList *
+egg_toolbars_model_get_types (EggToolbarsModel *model)
+{
+ return model->priv->types;
+}
+
+void
+egg_toolbars_model_set_types (EggToolbarsModel *model, GList *types)
+{
+ model->priv->types = types;
+}
+
+static void
+fill_avail_array (gpointer key, gpointer value, GPtrArray *array)
+{
+ int flags = GPOINTER_TO_INT (value);
+ if ((flags & EGG_TB_MODEL_NAME_KNOWN) && !(flags & EGG_TB_MODEL_NAME_USED))
+ g_ptr_array_add (array, key);
+}
+
+GPtrArray *
+egg_toolbars_model_get_name_avail (EggToolbarsModel *model)
+{
+ GPtrArray *array = g_ptr_array_new ();
+ g_hash_table_foreach (model->priv->flags, (GHFunc) fill_avail_array, array);
+ return array;
+}
+
+gint
+egg_toolbars_model_get_name_flags (EggToolbarsModel *model, const char *name)
+{
+ return GPOINTER_TO_INT (g_hash_table_lookup (model->priv->flags, name));
+}
+
+void
+egg_toolbars_model_set_name_flags (EggToolbarsModel *model, const char *name, gint flags)
+{
+ g_hash_table_insert (model->priv->flags, g_strdup (name), GINT_TO_POINTER (flags));
+}
diff --git a/cut-n-paste/toolbar-editor/egg-toolbars-model.h b/cut-n-paste/toolbar-editor/egg-toolbars-model.h
new file mode 100644
index 00000000..5d9841f8
--- /dev/null
+++ b/cut-n-paste/toolbar-editor/egg-toolbars-model.h
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2003-2004 Marco Pesenti Gritti
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#ifndef EGG_TOOLBARS_MODEL_H
+#define EGG_TOOLBARS_MODEL_H
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gdk/gdk.h>
+
+G_BEGIN_DECLS
+
+#define EGG_TYPE_TOOLBARS_MODEL (egg_toolbars_model_get_type ())
+#define EGG_TOOLBARS_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EGG_TYPE_TOOLBARS_MODEL, EggToolbarsModel))
+#define EGG_TOOLBARS_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_TOOLBARS_MODEL, EggToolbarsModelClass))
+#define EGG_IS_TOOLBARS_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EGG_TYPE_TOOLBARS_MODEL))
+#define EGG_IS_TOOLBARS_MODEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_TOOLBARS_MODEL))
+#define EGG_TOOLBARS_MODEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_TOOLBARS_MODEL, EggToolbarsModelClass))
+
+typedef struct EggToolbarsModel EggToolbarsModel;
+typedef struct EggToolbarsModelPrivate EggToolbarsModelPrivate;
+typedef struct EggToolbarsModelClass EggToolbarsModelClass;
+
+#define EGG_TOOLBAR_ITEM_TYPE "application/x-toolbar-item"
+
+typedef enum
+{
+ EGG_TB_MODEL_NOT_REMOVABLE = 1 << 0,
+ EGG_TB_MODEL_NOT_EDITABLE = 1 << 1,
+ EGG_TB_MODEL_BOTH = 1 << 2,
+ EGG_TB_MODEL_BOTH_HORIZ = 1 << 3,
+ EGG_TB_MODEL_ICONS = 1 << 4,
+ EGG_TB_MODEL_TEXT = 1 << 5,
+ EGG_TB_MODEL_STYLES_MASK = 0x3C,
+ EGG_TB_MODEL_ACCEPT_ITEMS_ONLY = 1 << 6,
+ EGG_TB_MODEL_HIDDEN = 1 << 7
+} EggTbModelFlags;
+
+typedef enum
+{
+ EGG_TB_MODEL_NAME_USED = 1 << 0,
+ EGG_TB_MODEL_NAME_INFINITE = 1 << 1,
+ EGG_TB_MODEL_NAME_KNOWN = 1 << 2
+} EggTbModelNameFlags;
+
+struct EggToolbarsModel
+{
+ GObject parent_object;
+
+ /*< private >*/
+ EggToolbarsModelPrivate *priv;
+};
+
+struct EggToolbarsModelClass
+{
+ GObjectClass parent_class;
+
+ /* Signals */
+ void (* item_added) (EggToolbarsModel *model,
+ int toolbar_position,
+ int position);
+ void (* item_removed) (EggToolbarsModel *model,
+ int toolbar_position,
+ int position);
+ void (* toolbar_added) (EggToolbarsModel *model,
+ int position);
+ void (* toolbar_changed) (EggToolbarsModel *model,
+ int position);
+ void (* toolbar_removed) (EggToolbarsModel *model,
+ int position);
+
+ /* Virtual Table */
+ gboolean (* add_item) (EggToolbarsModel *t,
+ int toolbar_position,
+ int position,
+ const char *name);
+};
+
+typedef struct EggToolbarsItemType EggToolbarsItemType;
+
+struct EggToolbarsItemType
+{
+ GdkAtom type;
+
+ gboolean (* has_data) (EggToolbarsItemType *type,
+ const char *name);
+ char * (* get_data) (EggToolbarsItemType *type,
+ const char *name);
+
+ char * (* new_name) (EggToolbarsItemType *type,
+ const char *data);
+ char * (* get_name) (EggToolbarsItemType *type,
+ const char *data);
+};
+
+GType egg_tb_model_flags_get_type (void);
+GType egg_toolbars_model_get_type (void);
+EggToolbarsModel *egg_toolbars_model_new (void);
+gboolean egg_toolbars_model_load_names (EggToolbarsModel *model,
+ const char *xml_file);
+gboolean egg_toolbars_model_load_toolbars (EggToolbarsModel *model,
+ const char *xml_file);
+void egg_toolbars_model_save_toolbars (EggToolbarsModel *model,
+ const char *xml_file,
+ const char *version);
+
+/* Functions for manipulating the types of portable data this toolbar understands. */
+GList * egg_toolbars_model_get_types (EggToolbarsModel *model);
+void egg_toolbars_model_set_types (EggToolbarsModel *model,
+ GList *types);
+
+/* Functions for converting between name and portable data. */
+char * egg_toolbars_model_get_name (EggToolbarsModel *model,
+ GdkAtom type,
+ const char *data,
+ gboolean create);
+char * egg_toolbars_model_get_data (EggToolbarsModel *model,
+ GdkAtom type,
+ const char *name);
+
+/* Functions for retrieving what items are available for adding to the toolbars. */
+GPtrArray * egg_toolbars_model_get_name_avail (EggToolbarsModel *model);
+gint egg_toolbars_model_get_name_flags (EggToolbarsModel *model,
+ const char *name);
+void egg_toolbars_model_set_name_flags (EggToolbarsModel *model,
+ const char *name,
+ gint flags);
+
+/* Functions for manipulating flags on individual toolbars. */
+EggTbModelFlags egg_toolbars_model_get_flags (EggToolbarsModel *model,
+ int toolbar_position);
+void egg_toolbars_model_set_flags (EggToolbarsModel *model,
+ int toolbar_position,
+ EggTbModelFlags flags);
+
+/* Functions for adding and removing toolbars. */
+int egg_toolbars_model_add_toolbar (EggToolbarsModel *model,
+ int position,
+ const char *name);
+void egg_toolbars_model_remove_toolbar (EggToolbarsModel *model,
+ int position);
+
+/* Functions for adding, removing and moving items. */
+gboolean egg_toolbars_model_add_item (EggToolbarsModel *model,
+ int toolbar_position,
+ int position,
+ const char *name);
+void egg_toolbars_model_remove_item (EggToolbarsModel *model,
+ int toolbar_position,
+ int position);
+void egg_toolbars_model_move_item (EggToolbarsModel *model,
+ int toolbar_position,
+ int position,
+ int new_toolbar_position,
+ int new_position);
+void egg_toolbars_model_delete_item (EggToolbarsModel *model,
+ const char *name);
+
+/* Functions for accessing the names of items. */
+int egg_toolbars_model_n_items (EggToolbarsModel *model,
+ int toolbar_position);
+const char * egg_toolbars_model_item_nth (EggToolbarsModel *model,
+ int toolbar_position,
+ int position);
+
+/* Functions for accessing the names of toolbars. */
+int egg_toolbars_model_n_toolbars (EggToolbarsModel *model);
+const char *egg_toolbars_model_toolbar_nth (EggToolbarsModel *model,
+ int position);
+
+G_END_DECLS
+
+#endif
diff --git a/cut-n-paste/toolbar-editor/eggmarshalers.list b/cut-n-paste/toolbar-editor/eggmarshalers.list
new file mode 100644
index 00000000..1f953ddf
--- /dev/null
+++ b/cut-n-paste/toolbar-editor/eggmarshalers.list
@@ -0,0 +1 @@
+VOID:INT,INT
diff --git a/cut-n-paste/totem-screensaver/Makefile.am b/cut-n-paste/totem-screensaver/Makefile.am
new file mode 100644
index 00000000..1304c8d4
--- /dev/null
+++ b/cut-n-paste/totem-screensaver/Makefile.am
@@ -0,0 +1,16 @@
+noinst_LTLIBRARIES = libtotemscrsaver.la
+libtotemscrsaver_la_SOURCES = \
+ totem-scrsaver.h \
+ totem-scrsaver.c
+
+libtotemscrsaver_la_CPPFLAGS = \
+ $(AM_CPPFLAGS)
+
+libtotemscrsaver_la_CFLAGS = \
+ $(SHELL_CORE_CFLAGS) \
+ $(DBUS_CFLAGS) \
+ $(WARNING_CFLAGS) \
+ $(DISABLE_DEPRECATED) \
+ $(AM_CFLAGS)
+
+-include $(top_srcdir)/git.mk
diff --git a/cut-n-paste/totem-screensaver/README b/cut-n-paste/totem-screensaver/README
new file mode 100644
index 00000000..a5be11b2
--- /dev/null
+++ b/cut-n-paste/totem-screensaver/README
@@ -0,0 +1,3 @@
+The sources for the screensaver enabling/disabling code are copied from Totem.
+A simple replacement (s/WITH_DBUS/ENABLE_DBUS/g) was needed. The hardcoded
+"reason for inhibiting" string was also modified.
diff --git a/cut-n-paste/totem-screensaver/totem-scrsaver.c b/cut-n-paste/totem-screensaver/totem-scrsaver.c
new file mode 100644
index 00000000..f30f533e
--- /dev/null
+++ b/cut-n-paste/totem-screensaver/totem-scrsaver.c
@@ -0,0 +1,554 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+
+ Copyright (C) 2004-2006 Bastien Nocera <[email protected]>
+ Copyright © 2010 Christian Persch
+ Copyright © 2010 Carlos Garcia Campos
+
+ The Mate 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.
+
+ The Mate 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 the Mate 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.
+
+ Authors: Bastien Nocera <[email protected]>
+ Christian Persch
+ Carlos Garcia Campos
+ */
+
+#include "config.h"
+
+#include <gdk/gdk.h>
+
+#ifdef GDK_WINDOWING_X11
+#include <gdk/gdkx.h>
+#include <X11/keysym.h>
+
+#ifdef HAVE_XTEST
+#include <X11/extensions/XTest.h>
+#endif /* HAVE_XTEST */
+#endif /* GDK_WINDOWING_X11 */
+
+#include "totem-scrsaver.h"
+
+#define GS_SERVICE "org.mate.ScreenSaver"
+#define GS_PATH "/org/mate/ScreenSaver"
+#define GS_INTERFACE "org.mate.ScreenSaver"
+
+#define XSCREENSAVER_MIN_TIMEOUT 60
+
+enum {
+ PROP_0,
+ PROP_REASON
+};
+
+static void totem_scrsaver_finalize (GObject *object);
+
+struct TotemScrsaverPrivate {
+ /* Whether the screensaver is disabled */
+ gboolean disabled;
+ /* The reason for the inhibition */
+ char *reason;
+
+ GDBusProxy *gs_proxy;
+ gboolean have_screensaver_dbus;
+ guint32 cookie;
+ gboolean old_dbus_api;
+
+ /* To save the screensaver info */
+ int timeout;
+ int interval;
+ int prefer_blanking;
+ int allow_exposures;
+
+ /* For use with XTest */
+ int keycode1, keycode2;
+ int *keycode;
+ gboolean have_xtest;
+};
+
+G_DEFINE_TYPE(TotemScrsaver, totem_scrsaver, G_TYPE_OBJECT)
+
+static gboolean
+screensaver_is_running_dbus (TotemScrsaver *scr)
+{
+ return scr->priv->have_screensaver_dbus;
+}
+
+static void
+on_inhibit_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GDBusProxy *proxy = G_DBUS_PROXY (source_object);
+ TotemScrsaver *scr = TOTEM_SCRSAVER (user_data);
+ GVariant *value;
+ GError *error = NULL;
+
+ value = g_dbus_proxy_call_finish (proxy, res, &error);
+ if (!value) {
+ if (!scr->priv->old_dbus_api &&
+ g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD)) {
+ g_return_if_fail (scr->priv->reason != NULL);
+ /* try the old API */
+ scr->priv->old_dbus_api = TRUE;
+ g_dbus_proxy_call (proxy,
+ "InhibitActivation",
+ g_variant_new ("(s)",
+ scr->priv->reason),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ -1,
+ NULL,
+ on_inhibit_cb,
+ scr);
+ } else {
+ g_warning ("Problem inhibiting the screensaver: %s", error->message);
+ }
+ g_error_free (error);
+
+ return;
+ }
+
+ /* save the cookie */
+ if (g_variant_is_of_type (value, G_VARIANT_TYPE ("(u)")))
+ g_variant_get (value, "(u)", &scr->priv->cookie);
+ else
+ scr->priv->cookie = 0;
+ g_variant_unref (value);
+}
+
+static void
+on_uninhibit_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GDBusProxy *proxy = G_DBUS_PROXY (source_object);
+ TotemScrsaver *scr = TOTEM_SCRSAVER (user_data);
+ GVariant *value;
+ GError *error = NULL;
+
+ value = g_dbus_proxy_call_finish (proxy, res, &error);
+ if (!value) {
+ if (!scr->priv->old_dbus_api &&
+ g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD)) {
+ /* try the old API */
+ scr->priv->old_dbus_api = TRUE;
+ g_dbus_proxy_call (proxy,
+ "AllowActivation",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ -1,
+ NULL,
+ on_uninhibit_cb,
+ scr);
+ } else {
+ g_warning ("Problem uninhibiting the screensaver: %s", error->message);
+ }
+ g_error_free (error);
+
+ return;
+ }
+
+ /* clear the cookie */
+ scr->priv->cookie = 0;
+ g_variant_unref (value);
+}
+
+static void
+screensaver_inhibit_dbus (TotemScrsaver *scr,
+ gboolean inhibit)
+{
+ TotemScrsaverPrivate *priv = scr->priv;
+
+ if (!priv->have_screensaver_dbus)
+ return;
+
+ scr->priv->old_dbus_api = FALSE;
+
+ if (inhibit) {
+ g_return_if_fail (scr->priv->reason != NULL);
+ g_dbus_proxy_call (priv->gs_proxy,
+ "Inhibit",
+ g_variant_new ("(ss)",
+ g_get_application_name (),
+ scr->priv->reason),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ -1,
+ NULL,
+ on_inhibit_cb,
+ scr);
+ } else {
+ g_dbus_proxy_call (priv->gs_proxy,
+ "UnInhibit",
+ g_variant_new ("(u)", priv->cookie),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ -1,
+ NULL,
+ on_uninhibit_cb,
+ scr);
+ }
+}
+
+static void
+screensaver_enable_dbus (TotemScrsaver *scr)
+{
+ screensaver_inhibit_dbus (scr, FALSE);
+}
+
+static void
+screensaver_disable_dbus (TotemScrsaver *scr)
+{
+ screensaver_inhibit_dbus (scr, TRUE);
+}
+
+static void
+screensaver_update_dbus_presence (TotemScrsaver *scr)
+{
+ TotemScrsaverPrivate *priv = scr->priv;
+ gchar *name_owner;
+
+ name_owner = g_dbus_proxy_get_name_owner (priv->gs_proxy);
+ if (name_owner) {
+ priv->have_screensaver_dbus = TRUE;
+ g_free (name_owner);
+ } else {
+ priv->have_screensaver_dbus = FALSE;
+ }
+}
+
+static void
+screensaver_dbus_owner_changed_cb (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ TotemScrsaver *scr = TOTEM_SCRSAVER (user_data);
+
+ screensaver_update_dbus_presence (scr);
+}
+
+static void
+screensaver_dbus_proxy_new_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ TotemScrsaver *scr = TOTEM_SCRSAVER (user_data);
+ TotemScrsaverPrivate *priv = scr->priv;
+
+ priv->gs_proxy = g_dbus_proxy_new_for_bus_finish (result, NULL);
+ if (!priv->gs_proxy)
+ return;
+
+ screensaver_update_dbus_presence (scr);
+
+ g_signal_connect (priv->gs_proxy, "notify::g-name-owner",
+ G_CALLBACK (screensaver_dbus_owner_changed_cb),
+ scr);
+}
+
+static void
+screensaver_init_dbus (TotemScrsaver *scr)
+{
+ g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
+ NULL,
+ GS_SERVICE,
+ GS_PATH,
+ GS_INTERFACE,
+ NULL,
+ screensaver_dbus_proxy_new_cb,
+ scr);
+}
+
+static void
+screensaver_finalize_dbus (TotemScrsaver *scr)
+{
+ if (scr->priv->gs_proxy) {
+ g_object_unref (scr->priv->gs_proxy);
+ }
+}
+
+#ifdef GDK_WINDOWING_X11
+static void
+screensaver_enable_x11 (TotemScrsaver *scr)
+{
+
+#ifdef HAVE_XTEST
+ if (scr->priv->have_xtest != FALSE)
+ {
+ g_source_remove_by_user_data (scr);
+ return;
+ }
+#endif /* HAVE_XTEST */
+
+ XLockDisplay (GDK_DISPLAY());
+ XSetScreenSaver (GDK_DISPLAY(),
+ scr->priv->timeout,
+ scr->priv->interval,
+ scr->priv->prefer_blanking,
+ scr->priv->allow_exposures);
+ XUnlockDisplay (GDK_DISPLAY());
+}
+
+#ifdef HAVE_XTEST
+static gboolean
+fake_event (TotemScrsaver *scr)
+{
+ if (scr->priv->disabled)
+ {
+ XLockDisplay (GDK_DISPLAY());
+ XTestFakeKeyEvent (GDK_DISPLAY(), *scr->priv->keycode,
+ True, CurrentTime);
+ XTestFakeKeyEvent (GDK_DISPLAY(), *scr->priv->keycode,
+ False, CurrentTime);
+ XUnlockDisplay (GDK_DISPLAY());
+ /* Swap the keycode */
+ if (scr->priv->keycode == &scr->priv->keycode1)
+ scr->priv->keycode = &scr->priv->keycode2;
+ else
+ scr->priv->keycode = &scr->priv->keycode1;
+ }
+
+ return TRUE;
+}
+#endif /* HAVE_XTEST */
+
+static void
+screensaver_disable_x11 (TotemScrsaver *scr)
+{
+
+#ifdef HAVE_XTEST
+ if (scr->priv->have_xtest != FALSE)
+ {
+ XLockDisplay (GDK_DISPLAY());
+ XGetScreenSaver(GDK_DISPLAY(), &scr->priv->timeout,
+ &scr->priv->interval,
+ &scr->priv->prefer_blanking,
+ &scr->priv->allow_exposures);
+ XUnlockDisplay (GDK_DISPLAY());
+
+ if (scr->priv->timeout != 0) {
+ g_timeout_add_seconds (scr->priv->timeout / 2,
+ (GSourceFunc) fake_event, scr);
+ } else {
+ g_timeout_add_seconds (XSCREENSAVER_MIN_TIMEOUT / 2,
+ (GSourceFunc) fake_event, scr);
+ }
+
+ return;
+ }
+#endif /* HAVE_XTEST */
+
+ XLockDisplay (GDK_DISPLAY());
+ XGetScreenSaver(GDK_DISPLAY(), &scr->priv->timeout,
+ &scr->priv->interval,
+ &scr->priv->prefer_blanking,
+ &scr->priv->allow_exposures);
+ XSetScreenSaver(GDK_DISPLAY(), 0, 0,
+ DontPreferBlanking, DontAllowExposures);
+ XUnlockDisplay (GDK_DISPLAY());
+}
+
+static void
+screensaver_init_x11 (TotemScrsaver *scr)
+{
+#ifdef HAVE_XTEST
+ int a, b, c, d;
+
+ XLockDisplay (GDK_DISPLAY());
+ scr->priv->have_xtest = (XTestQueryExtension (GDK_DISPLAY(), &a, &b, &c, &d) == True);
+ if (scr->priv->have_xtest != FALSE)
+ {
+ scr->priv->keycode1 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_L);
+ if (scr->priv->keycode1 == 0) {
+ g_warning ("scr->priv->keycode1 not existant");
+ }
+ scr->priv->keycode2 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_R);
+ if (scr->priv->keycode2 == 0) {
+ scr->priv->keycode2 = XKeysymToKeycode (GDK_DISPLAY(), XK_Alt_L);
+ if (scr->priv->keycode2 == 0) {
+ g_warning ("scr->priv->keycode2 not existant");
+ }
+ }
+ scr->priv->keycode = &scr->priv->keycode1;
+ }
+ XUnlockDisplay (GDK_DISPLAY());
+#endif /* HAVE_XTEST */
+}
+
+static void
+screensaver_finalize_x11 (TotemScrsaver *scr)
+{
+ g_source_remove_by_user_data (scr);
+}
+#endif
+
+static void
+totem_scrsaver_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ TotemScrsaver *scr;
+
+ scr = TOTEM_SCRSAVER (object);
+
+ switch (property_id)
+ {
+ case PROP_REASON:
+ g_value_set_string (value, scr->priv->reason);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+}
+
+static void
+totem_scrsaver_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ TotemScrsaver *scr;
+
+ scr = TOTEM_SCRSAVER (object);
+
+ switch (property_id)
+ {
+ case PROP_REASON:
+ g_free (scr->priv->reason);
+ scr->priv->reason = g_value_dup_string (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+}
+
+static void
+totem_scrsaver_class_init (TotemScrsaverClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (TotemScrsaverPrivate));
+
+ object_class->set_property = totem_scrsaver_set_property;
+ object_class->get_property = totem_scrsaver_get_property;
+ object_class->finalize = totem_scrsaver_finalize;
+
+ g_object_class_install_property (object_class, PROP_REASON,
+ g_param_spec_string ("reason", NULL, NULL,
+ NULL, G_PARAM_READWRITE));
+
+}
+
+/**
+ * totem_scrsaver_new:
+ *
+ * Creates a #TotemScrsaver object.
+ * If the MATE screen saver is running, it uses its DBUS interface to
+ * inhibit the screensaver; otherwise it falls back to using the X
+ * screensaver functionality for this.
+ *
+ * Returns: a newly created #TotemScrsaver
+ */
+TotemScrsaver *
+totem_scrsaver_new (void)
+{
+ return TOTEM_SCRSAVER (g_object_new (TOTEM_TYPE_SCRSAVER, NULL));
+}
+
+static void
+totem_scrsaver_init (TotemScrsaver *scr)
+{
+ scr->priv = G_TYPE_INSTANCE_GET_PRIVATE (scr,
+ TOTEM_TYPE_SCRSAVER,
+ TotemScrsaverPrivate);
+
+ screensaver_init_dbus (scr);
+#ifdef GDK_WINDOWING_X11
+ screensaver_init_x11 (scr);
+#else
+#warning Unimplemented
+#endif
+}
+
+void
+totem_scrsaver_disable (TotemScrsaver *scr)
+{
+ g_return_if_fail (TOTEM_SCRSAVER (scr));
+
+ if (scr->priv->disabled != FALSE)
+ return;
+
+ scr->priv->disabled = TRUE;
+
+ if (screensaver_is_running_dbus (scr) != FALSE)
+ screensaver_disable_dbus (scr);
+ else
+#ifdef GDK_WINDOWING_X11
+ screensaver_disable_x11 (scr);
+#else
+#warning Unimplemented
+ {}
+#endif
+}
+
+void
+totem_scrsaver_enable (TotemScrsaver *scr)
+{
+ g_return_if_fail (TOTEM_SCRSAVER (scr));
+
+ if (scr->priv->disabled == FALSE)
+ return;
+
+ scr->priv->disabled = FALSE;
+
+ if (screensaver_is_running_dbus (scr) != FALSE)
+ screensaver_enable_dbus (scr);
+ else
+#ifdef GDK_WINDOWING_X11
+ screensaver_enable_x11 (scr);
+#else
+#warning Unimplemented
+ {}
+#endif
+}
+
+void
+totem_scrsaver_set_state (TotemScrsaver *scr, gboolean enable)
+{
+ g_return_if_fail (TOTEM_SCRSAVER (scr));
+
+ if (scr->priv->disabled == !enable)
+ return;
+
+ if (enable == FALSE)
+ totem_scrsaver_disable (scr);
+ else
+ totem_scrsaver_enable (scr);
+}
+
+static void
+totem_scrsaver_finalize (GObject *object)
+{
+ TotemScrsaver *scr = TOTEM_SCRSAVER (object);
+
+ g_free (scr->priv->reason);
+
+ screensaver_finalize_dbus (scr);
+#ifdef GDK_WINDOWING_X11
+ screensaver_finalize_x11 (scr);
+#else
+#warning Unimplemented
+ {}
+#endif
+
+ G_OBJECT_CLASS (totem_scrsaver_parent_class)->finalize (object);
+}
diff --git a/cut-n-paste/totem-screensaver/totem-scrsaver.h b/cut-n-paste/totem-screensaver/totem-scrsaver.h
new file mode 100644
index 00000000..bb95174d
--- /dev/null
+++ b/cut-n-paste/totem-screensaver/totem-scrsaver.h
@@ -0,0 +1,57 @@
+/*
+ Copyright (C) 2004, Bastien Nocera <[email protected]>
+
+ The Mate 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.
+
+ The Mate 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 the Mate 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.
+
+ Author: Bastien Nocera <[email protected]>
+ */
+
+#ifndef TOTEM_SCRSAVER_H
+#define TOTEM_SCRSAVER_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define TOTEM_TYPE_SCRSAVER (totem_scrsaver_get_type ())
+#define TOTEM_SCRSAVER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TOTEM_TYPE_SCRSAVER, TotemScrsaver))
+#define TOTEM_SCRSAVER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TOTEM_TYPE_SCRSAVER, TotemScrsaverClass))
+#define TOTEM_IS_SCRSAVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TOTEM_TYPE_SCRSAVER))
+#define TOTEM_IS_SCRSAVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TOTEM_TYPE_SCRSAVER))
+
+typedef struct TotemScrsaver TotemScrsaver;
+typedef struct TotemScrsaverClass TotemScrsaverClass;
+typedef struct TotemScrsaverPrivate TotemScrsaverPrivate;
+
+struct TotemScrsaver {
+ GObject parent;
+ TotemScrsaverPrivate *priv;
+};
+
+struct TotemScrsaverClass {
+ GObjectClass parent_class;
+};
+
+GType totem_scrsaver_get_type (void) G_GNUC_CONST;
+TotemScrsaver *totem_scrsaver_new (void);
+void totem_scrsaver_enable (TotemScrsaver *scr);
+void totem_scrsaver_disable (TotemScrsaver *scr);
+void totem_scrsaver_set_state (TotemScrsaver *scr,
+ gboolean enable);
+
+G_END_DECLS
+
+#endif /* !TOTEM_SCRSAVER_H */
diff --git a/cut-n-paste/zoom-control/Makefile.am b/cut-n-paste/zoom-control/Makefile.am
new file mode 100644
index 00000000..af8bd48e
--- /dev/null
+++ b/cut-n-paste/zoom-control/Makefile.am
@@ -0,0 +1,16 @@
+noinst_LTLIBRARIES = libephyzoom.la
+
+libephyzoom_la_SOURCES = \
+ ephy-zoom-action.h \
+ ephy-zoom-action.c \
+ ephy-zoom-control.c \
+ ephy-zoom-control.h \
+ ephy-zoom.c \
+ ephy-zoom.h
+
+libephyzoom_la_CFLAGS = \
+ $(SHELL_CORE_CFLAGS) \
+ $(WARNING_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+-include $(top_srcdir)/git.mk
diff --git a/cut-n-paste/zoom-control/ephy-zoom-action.c b/cut-n-paste/zoom-control/ephy-zoom-action.c
new file mode 100644
index 00000000..b6250c8b
--- /dev/null
+++ b/cut-n-paste/zoom-control/ephy-zoom-action.c
@@ -0,0 +1,336 @@
+/*
+ * Copyright (C) 2003 Marco Pesenti Gritti
+ * Copyright (C) 2003, 2004 Christian Persch
+ *
+ * Modified 2005 by James Bowes for use in evince.
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#include "config.h"
+
+#include "ephy-zoom-action.h"
+#include "ephy-zoom-control.h"
+#include "ephy-zoom.h"
+
+#include <glib-object.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#define EPHY_ZOOM_ACTION_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_ZOOM_ACTION, EphyZoomActionPrivate))
+
+struct _EphyZoomActionPrivate
+{
+ float zoom;
+ float min_zoom;
+ float max_zoom;
+};
+
+enum
+{
+ PROP_0,
+ PROP_ZOOM,
+ PROP_MIN_ZOOM,
+ PROP_MAX_ZOOM
+};
+
+
+static void ephy_zoom_action_init (EphyZoomAction *action);
+static void ephy_zoom_action_class_init (EphyZoomActionClass *class);
+
+enum
+{
+ ZOOM_TO_LEVEL_SIGNAL,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE (EphyZoomAction, ephy_zoom_action, GTK_TYPE_ACTION)
+
+static void
+zoom_to_level_cb (EphyZoomControl *control,
+ float zoom,
+ EphyZoomAction *action)
+{
+ g_signal_emit (action, signals[ZOOM_TO_LEVEL_SIGNAL], 0, zoom);
+}
+
+static void
+sync_zoom_cb (GtkAction *action, GParamSpec *pspec, GtkWidget *proxy)
+{
+ EphyZoomAction *zoom_action = EPHY_ZOOM_ACTION (action);
+
+ g_object_set (G_OBJECT (proxy), "zoom", zoom_action->priv->zoom, NULL);
+}
+
+static void
+sync_min_zoom_cb (GtkAction *action, GParamSpec *pspec, GtkWidget *proxy)
+{
+ EphyZoomAction *zoom_action = EPHY_ZOOM_ACTION (action);
+
+ g_object_set (G_OBJECT (proxy), "min-zoom", zoom_action->priv->min_zoom, NULL);
+}
+
+static void
+sync_max_zoom_cb (GtkAction *action, GParamSpec *pspec, GtkWidget *proxy)
+{
+ EphyZoomAction *zoom_action = EPHY_ZOOM_ACTION (action);
+
+ g_object_set (G_OBJECT (proxy), "max-zoom", zoom_action->priv->max_zoom, NULL);
+}
+
+static void
+connect_proxy (GtkAction *action, GtkWidget *proxy)
+{
+ if (EPHY_IS_ZOOM_CONTROL (proxy))
+ {
+ g_signal_connect_object (action, "notify::zoom",
+ G_CALLBACK (sync_zoom_cb), proxy, 0);
+ g_signal_connect_object (action, "notify::min-zoom",
+ G_CALLBACK (sync_min_zoom_cb), proxy, 0);
+ g_signal_connect_object (action, "notify::max-zoom",
+ G_CALLBACK (sync_max_zoom_cb), proxy, 0);
+ g_signal_connect (proxy, "zoom_to_level",
+ G_CALLBACK (zoom_to_level_cb), action);
+ }
+
+ GTK_ACTION_CLASS (ephy_zoom_action_parent_class)->connect_proxy (action, proxy);
+}
+
+static void
+proxy_menu_activate_cb (GtkMenuItem *menu_item, EphyZoomAction *action)
+{
+ gint index;
+ float zoom;
+
+ /* menu item was toggled OFF */
+ if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menu_item))) return;
+
+ index = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu_item), "zoom-level"));
+ zoom = zoom_levels[index].level;
+
+ if (zoom != action->priv->zoom)
+ {
+ g_signal_emit (action, signals[ZOOM_TO_LEVEL_SIGNAL], 0, zoom);
+ }
+}
+
+static GtkWidget *
+create_menu_item (GtkAction *action)
+{
+ EphyZoomActionPrivate *p = EPHY_ZOOM_ACTION (action)->priv;
+ GtkWidget *menu, *menu_item;
+ GSList *group = NULL;
+ int i;
+
+ menu = gtk_menu_new ();
+
+ for (i = 0; i < n_zoom_levels; i++)
+ {
+ if (zoom_levels[i].level == EPHY_ZOOM_SEPARATOR)
+ {
+ menu_item = gtk_separator_menu_item_new ();
+ }
+ else
+ {
+ menu_item = gtk_radio_menu_item_new_with_label (group,
+ _(zoom_levels[i].name));
+ group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_item));
+
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item),
+ p->zoom == zoom_levels[i].level);
+
+ g_object_set_data (G_OBJECT (menu_item), "zoom-level", GINT_TO_POINTER (i));
+ g_signal_connect_object (G_OBJECT (menu_item), "activate",
+ G_CALLBACK (proxy_menu_activate_cb), action, 0);
+ }
+
+ gtk_widget_show (menu_item);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
+ }
+
+ gtk_widget_show (menu);
+
+ menu_item = GTK_ACTION_CLASS (ephy_zoom_action_parent_class)->create_menu_item (action);
+
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu);
+
+ gtk_widget_show (menu_item);
+
+ return menu_item;
+}
+
+static void
+ephy_zoom_action_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EphyZoomAction *action;
+
+ action = EPHY_ZOOM_ACTION (object);
+
+ switch (prop_id)
+ {
+ case PROP_ZOOM:
+ action->priv->zoom = g_value_get_float (value);
+ break;
+ case PROP_MIN_ZOOM:
+ action->priv->min_zoom = g_value_get_float (value);
+ break;
+ case PROP_MAX_ZOOM:
+ action->priv->max_zoom = g_value_get_float (value);
+ break;
+ }
+}
+
+static void
+ephy_zoom_action_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EphyZoomAction *action;
+
+ action = EPHY_ZOOM_ACTION (object);
+
+ switch (prop_id)
+ {
+ case PROP_ZOOM:
+ g_value_set_float (value, action->priv->zoom);
+ break;
+ case PROP_MIN_ZOOM:
+ g_value_set_float (value, action->priv->min_zoom);
+ break;
+ case PROP_MAX_ZOOM:
+ g_value_set_float (value, action->priv->max_zoom);
+ break;
+ }
+}
+
+static void
+ephy_zoom_action_class_init (EphyZoomActionClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+ GtkActionClass *action_class = GTK_ACTION_CLASS (class);
+
+ object_class->set_property = ephy_zoom_action_set_property;
+ object_class->get_property = ephy_zoom_action_get_property;
+
+ action_class->toolbar_item_type = EPHY_TYPE_ZOOM_CONTROL;
+ action_class->connect_proxy = connect_proxy;
+ action_class->create_menu_item = create_menu_item;
+
+ g_object_class_install_property (object_class,
+ PROP_ZOOM,
+ g_param_spec_float ("zoom",
+ "Zoom",
+ "Zoom",
+ ZOOM_MINIMAL,
+ ZOOM_MAXIMAL,
+ 1.0,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_MIN_ZOOM,
+ g_param_spec_float ("min-zoom",
+ "MinZoom",
+ "The minimum zoom",
+ ZOOM_MINIMAL,
+ ZOOM_MAXIMAL,
+ ZOOM_MINIMAL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_MAX_ZOOM,
+ g_param_spec_float ("max-zoom",
+ "MaxZoom",
+ "The maximum zoom",
+ ZOOM_MINIMAL,
+ ZOOM_MAXIMAL,
+ ZOOM_MAXIMAL,
+ G_PARAM_READWRITE));
+
+ signals[ZOOM_TO_LEVEL_SIGNAL] =
+ g_signal_new ("zoom_to_level",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (EphyZoomActionClass, zoom_to_level),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__FLOAT,
+ G_TYPE_NONE,
+ 1,
+ G_TYPE_FLOAT);
+
+ g_type_class_add_private (object_class, sizeof (EphyZoomActionPrivate));
+}
+
+static void
+ephy_zoom_action_init (EphyZoomAction *action)
+{
+ action->priv = EPHY_ZOOM_ACTION_GET_PRIVATE (action);
+
+ action->priv->zoom = 1.0;
+}
+
+void
+ephy_zoom_action_set_zoom_level (EphyZoomAction *action, float zoom)
+{
+ g_return_if_fail (EPHY_IS_ZOOM_ACTION (action));
+
+ if (zoom < ZOOM_MINIMAL || zoom > ZOOM_MAXIMAL) return;
+
+ action->priv->zoom = zoom;
+ g_object_notify (G_OBJECT (action), "zoom");
+}
+
+float
+ephy_zoom_action_get_zoom_level (EphyZoomAction *action)
+{
+ g_return_val_if_fail (EPHY_IS_ZOOM_ACTION (action), 1.0);
+
+ return action->priv->zoom;
+}
+
+void
+ephy_zoom_action_set_min_zoom_level (EphyZoomAction *action,
+ float zoom)
+{
+ g_return_if_fail (EPHY_IS_ZOOM_ACTION (action));
+
+ if (zoom < ZOOM_MINIMAL || zoom > ZOOM_MAXIMAL) return;
+
+ action->priv->min_zoom = zoom;
+ if (action->priv->zoom > 0 && action->priv->zoom < zoom)
+ ephy_zoom_action_set_zoom_level (action, zoom);
+
+ g_object_notify (G_OBJECT (action), "min-zoom");
+}
+
+void
+ephy_zoom_action_set_max_zoom_level (EphyZoomAction *action,
+ float zoom)
+{
+ g_return_if_fail (EPHY_IS_ZOOM_ACTION (action));
+
+ if (zoom < ZOOM_MINIMAL || zoom > ZOOM_MAXIMAL) return;
+
+ action->priv->max_zoom = zoom;
+ if (action->priv->zoom > 0 && action->priv->zoom > zoom)
+ ephy_zoom_action_set_zoom_level (action, zoom);
+
+ g_object_notify (G_OBJECT (action), "max-zoom");
+}
diff --git a/cut-n-paste/zoom-control/ephy-zoom-action.h b/cut-n-paste/zoom-control/ephy-zoom-action.h
new file mode 100644
index 00000000..cf9f6feb
--- /dev/null
+++ b/cut-n-paste/zoom-control/ephy-zoom-action.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2003 Marco Pesenti Gritti
+ * Copyright (C) 2003 Christian Persch
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#ifndef EPHY_ZOOM_ACTION_H
+#define EPHY_ZOOM_ACTION_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define EPHY_TYPE_ZOOM_ACTION (ephy_zoom_action_get_type ())
+#define EPHY_ZOOM_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EPHY_TYPE_ZOOM_ACTION, EphyZoomAction))
+#define EPHY_ZOOM_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EPHY_TYPE_ZOOM_ACTION, EphyZoomActionClass))
+#define EPHY_IS_ZOOM_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EPHY_TYPE_ZOOM_ACTION))
+#define EPHY_IS_ZOOM_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EPHY_TYPE_ZOOM_ACTION))
+#define EPHY_ZOOM_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), EPHY_TYPE_ZOOM_ACTION, EphyZoomActionClass))
+
+typedef struct _EphyZoomAction EphyZoomAction;
+typedef struct _EphyZoomActionClass EphyZoomActionClass;
+typedef struct _EphyZoomActionPrivate EphyZoomActionPrivate;
+
+struct _EphyZoomAction
+{
+ GtkAction parent;
+
+ /*< private >*/
+ EphyZoomActionPrivate *priv;
+};
+
+struct _EphyZoomActionClass
+{
+ GtkActionClass parent_class;
+
+ void (* zoom_to_level) (EphyZoomAction *action, float level);
+};
+
+GType ephy_zoom_action_get_type (void) G_GNUC_CONST;
+
+void ephy_zoom_action_set_zoom_level (EphyZoomAction *action,
+ float zoom);
+float ephy_zoom_action_get_zoom_level (EphyZoomAction *action);
+
+void ephy_zoom_action_set_min_zoom_level (EphyZoomAction *action,
+ float zoom);
+void ephy_zoom_action_set_max_zoom_level (EphyZoomAction *action,
+ float zoom);
+
+G_END_DECLS
+
+#endif
diff --git a/cut-n-paste/zoom-control/ephy-zoom-control.c b/cut-n-paste/zoom-control/ephy-zoom-control.c
new file mode 100644
index 00000000..6c86b4a4
--- /dev/null
+++ b/cut-n-paste/zoom-control/ephy-zoom-control.c
@@ -0,0 +1,345 @@
+/*
+ * Copyright (C) 2003, 2004 Christian Persch
+ *
+ * Modified 2005 by James Bowes for use in evince.
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#include "config.h"
+
+#include "ephy-zoom-control.h"
+#include "ephy-zoom.h"
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+
+#define EPHY_ZOOM_CONTROL_GET_PRIVATE(object)\
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_ZOOM_CONTROL, EphyZoomControlPrivate))
+
+struct _EphyZoomControlPrivate
+{
+ GtkComboBox *combo;
+ float zoom;
+ float min_zoom;
+ float max_zoom;
+ guint handler_id;
+};
+
+enum
+{
+ COL_TEXT,
+ COL_IS_SEP
+};
+
+enum
+{
+ PROP_0,
+ PROP_ZOOM,
+ PROP_MIN_ZOOM,
+ PROP_MAX_ZOOM
+};
+
+enum
+{
+ ZOOM_TO_LEVEL_SIGNAL,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+G_DEFINE_TYPE (EphyZoomControl, ephy_zoom_control, GTK_TYPE_TOOL_ITEM)
+
+static void
+combo_changed_cb (GtkComboBox *combo, EphyZoomControl *control)
+{
+ gint index;
+ float zoom;
+
+ index = gtk_combo_box_get_active (combo);
+ zoom = zoom_levels[index].level;
+
+ if (zoom != control->priv->zoom)
+ {
+ g_signal_emit (control, signals[ZOOM_TO_LEVEL_SIGNAL], 0, zoom);
+ }
+}
+
+static void
+sync_zoom_cb (EphyZoomControl *control, GParamSpec *pspec, gpointer data)
+{
+ EphyZoomControlPrivate *p = control->priv;
+ guint index;
+
+ index = ephy_zoom_get_zoom_level_index (p->zoom);
+
+ g_signal_handler_block (p->combo, p->handler_id);
+ gtk_combo_box_set_active (p->combo, index);
+ g_signal_handler_unblock (p->combo, p->handler_id);
+}
+
+static void
+sync_zoom_max_min_cb (EphyZoomControl *control, GParamSpec *pspec, gpointer data)
+{
+ EphyZoomControlPrivate *p = control->priv;
+ GtkListStore *model = (GtkListStore *)gtk_combo_box_get_model (p->combo);
+ GtkTreeIter iter;
+ gint i;
+
+ g_signal_handler_block (p->combo, p->handler_id);
+ gtk_list_store_clear (model);
+
+ for (i = 0; i < n_zoom_levels; i++)
+ {
+ if (zoom_levels[i].level > 0) {
+ if (zoom_levels[i].level < p->min_zoom)
+ continue;
+
+ if (zoom_levels[i].level > p->max_zoom)
+ break;
+ }
+
+ gtk_list_store_append (model, &iter);
+
+ if (zoom_levels[i].name != NULL) {
+ gtk_list_store_set (model, &iter,
+ COL_TEXT, _(zoom_levels[i].name),
+ -1);
+ } else {
+ gtk_list_store_set (model, &iter,
+ COL_IS_SEP, zoom_levels[i].name == NULL,
+ -1);
+ }
+ }
+
+ gtk_combo_box_set_active (p->combo, ephy_zoom_get_zoom_level_index (p->zoom));
+ g_signal_handler_unblock (p->combo, p->handler_id);
+}
+
+static gboolean
+row_is_separator (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ gboolean is_sep;
+ gtk_tree_model_get (model, iter, COL_IS_SEP, &is_sep, -1);
+ return is_sep;
+}
+
+static void
+ephy_zoom_control_finalize (GObject *o)
+{
+ EphyZoomControl *control = EPHY_ZOOM_CONTROL (o);
+
+ g_object_unref (control->priv->combo);
+
+ G_OBJECT_CLASS (ephy_zoom_control_parent_class)->finalize (o);
+}
+
+static void
+ephy_zoom_control_init (EphyZoomControl *control)
+{
+ EphyZoomControlPrivate *p;
+ GtkWidget *vbox;
+ GtkCellRenderer *renderer;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ guint i;
+
+ p = EPHY_ZOOM_CONTROL_GET_PRIVATE (control);
+ control->priv = p;
+
+ p->zoom = 1.0;
+
+ store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_BOOLEAN);
+
+ for (i = 0; i < n_zoom_levels; i++)
+ {
+ gtk_list_store_append (store, &iter);
+
+ if (zoom_levels[i].name != NULL) {
+ gtk_list_store_set (store, &iter,
+ COL_TEXT, _(zoom_levels[i].name),
+ -1);
+ } else {
+ gtk_list_store_set (store, &iter,
+ COL_IS_SEP, zoom_levels[i].name == NULL,
+ -1);
+ }
+ }
+
+ p->combo = GTK_COMBO_BOX (gtk_combo_box_new_with_model (GTK_TREE_MODEL (store)));
+ g_object_unref (store);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (p->combo), renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (p->combo), renderer,
+ "text", COL_TEXT, NULL);
+ gtk_combo_box_set_row_separator_func (p->combo,
+ (GtkTreeViewRowSeparatorFunc) row_is_separator,
+ NULL, NULL);
+
+ gtk_combo_box_set_focus_on_click (p->combo, FALSE);
+ g_object_ref_sink (G_OBJECT (p->combo));
+ gtk_widget_show (GTK_WIDGET (p->combo));
+
+ i = ephy_zoom_get_zoom_level_index (p->zoom);
+ gtk_combo_box_set_active (p->combo, i);
+
+ vbox = gtk_vbox_new (TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (p->combo), TRUE, FALSE, 0);
+ gtk_widget_show (vbox);
+
+ gtk_container_add (GTK_CONTAINER (control), vbox);
+
+ p->handler_id = g_signal_connect (p->combo, "changed",
+ G_CALLBACK (combo_changed_cb), control);
+
+ g_signal_connect_object (control, "notify::zoom",
+ G_CALLBACK (sync_zoom_cb), NULL, 0);
+ g_signal_connect_object (control, "notify::min-zoom",
+ G_CALLBACK (sync_zoom_max_min_cb), NULL, 0);
+ g_signal_connect_object (control, "notify::max-zoom",
+ G_CALLBACK (sync_zoom_max_min_cb), NULL, 0);
+}
+
+static void
+ephy_zoom_control_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EphyZoomControl *control;
+ EphyZoomControlPrivate *p;
+
+ control = EPHY_ZOOM_CONTROL (object);
+ p = control->priv;
+
+ switch (prop_id)
+ {
+ case PROP_ZOOM:
+ p->zoom = g_value_get_float (value);
+ break;
+ case PROP_MIN_ZOOM:
+ p->min_zoom = g_value_get_float (value);
+ break;
+ case PROP_MAX_ZOOM:
+ p->max_zoom = g_value_get_float (value);
+ break;
+ }
+}
+
+static void
+ephy_zoom_control_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EphyZoomControl *control;
+ EphyZoomControlPrivate *p;
+
+ control = EPHY_ZOOM_CONTROL (object);
+ p = control->priv;
+
+ switch (prop_id)
+ {
+ case PROP_ZOOM:
+ g_value_set_float (value, p->zoom);
+ break;
+ case PROP_MIN_ZOOM:
+ g_value_set_float (value, p->min_zoom);
+ break;
+ case PROP_MAX_ZOOM:
+ g_value_set_float (value, p->max_zoom);
+ break;
+ }
+}
+
+static void
+ephy_zoom_control_class_init (EphyZoomControlClass *klass)
+{
+ GObjectClass *object_class;
+ GtkToolItemClass *tool_item_class;
+
+ object_class = (GObjectClass *)klass;
+ tool_item_class = (GtkToolItemClass *)klass;
+
+ object_class->set_property = ephy_zoom_control_set_property;
+ object_class->get_property = ephy_zoom_control_get_property;
+ object_class->finalize = ephy_zoom_control_finalize;
+
+ g_object_class_install_property (object_class,
+ PROP_ZOOM,
+ g_param_spec_float ("zoom",
+ "Zoom",
+ "Zoom level to display in the item.",
+ ZOOM_MINIMAL,
+ ZOOM_MAXIMAL,
+ 1.0,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_MIN_ZOOM,
+ g_param_spec_float ("min-zoom",
+ "MinZoom",
+ "The minimum zoom",
+ ZOOM_MINIMAL,
+ ZOOM_MAXIMAL,
+ ZOOM_MINIMAL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_MAX_ZOOM,
+ g_param_spec_float ("max-zoom",
+ "MaxZoom",
+ "The maximum zoom",
+ ZOOM_MINIMAL,
+ ZOOM_MAXIMAL,
+ ZOOM_MAXIMAL,
+ G_PARAM_READWRITE));
+
+ signals[ZOOM_TO_LEVEL_SIGNAL] =
+ g_signal_new ("zoom_to_level",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EphyZoomControlClass,
+ zoom_to_level),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__FLOAT,
+ G_TYPE_NONE,
+ 1,
+ G_TYPE_FLOAT);
+
+ g_type_class_add_private (object_class, sizeof (EphyZoomControlPrivate));
+}
+
+void
+ephy_zoom_control_set_zoom_level (EphyZoomControl *control, float zoom)
+{
+ g_return_if_fail (EPHY_IS_ZOOM_CONTROL (control));
+
+ if (zoom < ZOOM_MINIMAL || zoom > ZOOM_MAXIMAL) return;
+
+ control->priv->zoom = zoom;
+ g_object_notify (G_OBJECT (control), "zoom");
+}
+
+float
+ephy_zoom_control_get_zoom_level (EphyZoomControl *control)
+{
+ g_return_val_if_fail (EPHY_IS_ZOOM_CONTROL (control), 1.0);
+
+ return control->priv->zoom;
+}
diff --git a/cut-n-paste/zoom-control/ephy-zoom-control.h b/cut-n-paste/zoom-control/ephy-zoom-control.h
new file mode 100644
index 00000000..8e74e7b1
--- /dev/null
+++ b/cut-n-paste/zoom-control/ephy-zoom-control.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2003 Christian Persch
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#ifndef EPHY_ZOOM_CONTROL_H
+#define EPHY_ZOOM_CONTROL_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define EPHY_TYPE_ZOOM_CONTROL (ephy_zoom_control_get_type())
+#define EPHY_ZOOM_CONTROL(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EPHY_TYPE_ZOOM_CONTROL, EphyZoomControl))
+#define EPHY_ZOOM_CONTROL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EPHY_TYPE_ZOOM_CONTROL, EphyZoomControlClass))
+#define EPHY_IS_ZOOM_CONTROL(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EPHY_TYPE_ZOOM_CONTROL))
+#define EPHY_IS_ZOOM_CONTROL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EPHY_TYPE_ZOOM_CONTROL))
+#define EPHY_ZOOM_CONTROL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), EPHY_TYPE_ZOOM_CONTROL, EphyZoomControlClass))
+
+typedef struct _EphyZoomControl EphyZoomControl;
+typedef struct _EphyZoomControlClass EphyZoomControlClass;
+typedef struct _EphyZoomControlPrivate EphyZoomControlPrivate;
+
+struct _EphyZoomControlClass
+{
+ GtkToolItemClass parent_class;
+
+ /* signals */
+ void (*zoom_to_level) (EphyZoomControl *control, float level);
+};
+
+struct _EphyZoomControl
+{
+ GtkToolItem parent_object;
+
+ /*< private >*/
+ EphyZoomControlPrivate *priv;
+};
+
+GType ephy_zoom_control_get_type (void);
+
+void ephy_zoom_control_set_zoom_level (EphyZoomControl *control, float zoom);
+
+float ephy_zoom_control_get_zoom_level (EphyZoomControl *control);
+
+G_END_DECLS
+
+#endif
diff --git a/cut-n-paste/zoom-control/ephy-zoom.c b/cut-n-paste/zoom-control/ephy-zoom.c
new file mode 100644
index 00000000..83bb8291
--- /dev/null
+++ b/cut-n-paste/zoom-control/ephy-zoom.c
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2003 Christian Persch
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#include "config.h"
+
+#include "ephy-zoom.h"
+
+#include <math.h>
+
+guint
+ephy_zoom_get_zoom_level_index (float level)
+{
+ guint i;
+ float previous, current, mean;
+
+ /* Handle our options at the beginning of the list. */
+ if (level == EPHY_ZOOM_BEST_FIT) {
+ return 0;
+ } else if (level == EPHY_ZOOM_FIT_WIDTH) {
+ return 1;
+ }
+
+ previous = zoom_levels[3].level;
+
+ for (i = 4; i < n_zoom_levels; i++)
+ {
+ current = zoom_levels[i].level;
+ mean = sqrt (previous * current);
+
+ if (level <= mean) return i - 1;
+
+ previous = current;
+ }
+
+ return n_zoom_levels - 1;
+}
+
+
+float
+ephy_zoom_get_changed_zoom_level (float level, gint steps)
+{
+ guint index;
+
+ index = ephy_zoom_get_zoom_level_index (level);
+ return zoom_levels[CLAMP(index + steps, 3, n_zoom_levels - 1)].level;
+}
+
+float ephy_zoom_get_nearest_zoom_level (float level)
+{
+ return ephy_zoom_get_changed_zoom_level (level, 0);
+}
diff --git a/cut-n-paste/zoom-control/ephy-zoom.h b/cut-n-paste/zoom-control/ephy-zoom.h
new file mode 100644
index 00000000..bf01f0d7
--- /dev/null
+++ b/cut-n-paste/zoom-control/ephy-zoom.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2003 Christian Persch
+ *
+ * Modified 2005 by James Bowes for use in evince.
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#ifndef EPHY_ZOOM_H
+#define EPHY_ZOOM_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+G_BEGIN_DECLS
+
+#define EPHY_ZOOM_BEST_FIT (-3.0)
+#define EPHY_ZOOM_FIT_WIDTH (-4.0)
+#define EPHY_ZOOM_SEPARATOR (-5.0)
+
+static const
+struct
+{
+ gchar *name;
+ float level;
+}
+
+zoom_levels[] =
+{
+ { N_("Best Fit"), EPHY_ZOOM_BEST_FIT },
+ { N_("Fit Page Width"), EPHY_ZOOM_FIT_WIDTH },
+ { NULL, EPHY_ZOOM_SEPARATOR },
+ { N_("50%"), 0.5 },
+ { N_("70%"), 0.7071067811 },
+ { N_("85%"), 0.8408964152 },
+ { N_("100%"), 1.0 },
+ { N_("125%"), 1.1892071149 },
+ { N_("150%"), 1.4142135623 },
+ { N_("175%"), 1.6817928304 },
+ { N_("200%"), 2.0 },
+ { N_("300%"), 2.8284271247 },
+ { N_("400%"), 4.0 },
+ { N_("800%"), 8.0 },
+ { N_("1600%"), 16.0 },
+ { N_("3200%"), 32.0 },
+ { N_("6400%"), 64.0 }
+};
+static const guint n_zoom_levels = G_N_ELEMENTS (zoom_levels);
+
+#define ZOOM_MINIMAL (EPHY_ZOOM_SEPARATOR)
+#define ZOOM_MAXIMAL (zoom_levels[n_zoom_levels - 1].level)
+#define ZOOM_IN (-1.0)
+#define ZOOM_OUT (-2.0)
+
+guint ephy_zoom_get_zoom_level_index (float level);
+
+float ephy_zoom_get_changed_zoom_level (float level, gint steps);
+
+float ephy_zoom_get_nearest_zoom_level (float level);
+
+G_END_DECLS
+
+#endif
diff --git a/data/Makefile.am b/data/Makefile.am
new file mode 100644
index 00000000..f80e9c6b
--- /dev/null
+++ b/data/Makefile.am
@@ -0,0 +1,109 @@
+SUBDIRS = icons
+NULL=
+
+install-data-local: update-icon-cache
+
+#
+# man file
+#
+
+man_MANS=evince.1
+
+#
+# UI descriptions
+#
+
+uidir = $(pkgdatadir)
+ui_DATA = \
+ evince-ui.xml \
+ evince-toolbar.xml \
+ hand-open.png
+
+if ENABLE_PREVIEWER
+ui_DATA += evince-previewer-ui.xml
+endif
+
+#
+# Desktop file
+#
+
+@INTLTOOL_DESKTOP_RULE@
+
+DESKTOP_IN_FILES= evince.desktop.in.in
+DESKTOP_FILES= $(DESKTOP_IN_FILES:.desktop.in.in=.desktop)
+
+desktopdir = $(datadir)/applications
+desktop_DATA = $(DESKTOP_FILES)
+
+#
+# DBus servide file
+#
+if ENABLE_DBUS
+servicedir = $(datadir)/dbus-1/services
+service_in_files = org.mate.evince.Daemon.service.in
+service_DATA = $(service_in_files:.service.in=.service)
+
+$(service_DATA): $(service_in_files) Makefile
+ $(AM_V_GEN) $(SED) -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@
+endif
+
+#
+# GSettings schema
+#
+gsettingsschema_in_files = org.mate.Evince.gschema.xml.in
+# gsettings_SCHEMAS is a list of all the schemas you want to install
+gsettings_SCHEMAS = $(gsettingsschema_in_files:.xml.in=.xml)
+
+.PRECIOUS: $(gsettings_SCHEMAS)
+
+@INTLTOOL_XML_NOMERGE_RULE@
+
+# include the appropriate makefile rules for schema handling
+@GSETTINGS_RULES@
+
+gsettingsconvertdir = $(datadir)/MateConf/gsettings
+gsettingsconvert_DATA = evince.convert
+
+#
+# GTK icon cache
+#
+
+gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
+
+install-data-hook: update-icon-cache
+uninstall-hook: update-icon-cache
+
+update-icon-cache:
+ if test -z "$(DESTDIR)"; then \
+ echo "Updating Gtk icon cache."; \
+ $(gtk_update_icon_cache); \
+ else \
+ echo "*** Icon cache not updated. After (un)install, run this:"; \
+ echo "*** $(gtk_update_icon_cache)"; \
+ fi
+
+
+#
+# Extra files to be included in the tarball
+#
+
+EXTRA_DIST = \
+ $(ui_DATA) \
+ $(DESKTOP_IN_FILES) \
+ $(gsettingsschema_in_files) \
+ org.mate.evince.Daemon.service.in \
+ $(man_MANS) \
+ evince.ico \
+ evince.convert \
+ $(NULL)
+
+#
+# Clean up properly
+#
+
+DISTCLEANFILES = \
+ $(DESKTOP_FILES) \
+ $(gsettings_SCHEMAS) \
+ $(service_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/data/evince-previewer-ui.xml b/data/evince-previewer-ui.xml
new file mode 100644
index 00000000..896b472e
--- /dev/null
+++ b/data/evince-previewer-ui.xml
@@ -0,0 +1,34 @@
+<ui>
+ <toolbar name="PreviewToolbar">
+ <toolitem name="GoPreviousPage" action="GoPreviousPage"/>
+ <toolitem name="GoNextPage" action="GoNextPage"/>
+ <separator/>
+ <toolitem name="PageSelector" action="PageSelector"/>
+ <separator/>
+ <toolitem name="ViewPageWidth" action="ViewPageWidth"/>
+ <toolitem name="ViewBestFit" action="ViewBestFit"/>
+ <toolitem name="ViewZoomIn" action="ViewZoomIn"/>
+ <toolitem name="ViewZoomOut" action="ViewZoomOut"/>
+ <separator/>
+ <toolitem name="PreviewPrint" action="PreviewPrint"/>
+ </toolbar>
+
+ <accelerator name="FileCloseWindowAccel" action="FileCloseWindow"/>
+ <accelerator name="SpaceAccel" action="Space"/>
+ <accelerator name="ReturnAccel" action="Return"/>
+ <accelerator name="BackSpaceAccel" action="BackSpace"/>
+ <accelerator name="ShiftSpaceAccel" action="ShiftSpace"/>
+ <accelerator name="ShiftBackSpaceAccel" action="ShiftBackSpace"/>
+ <accelerator name="pAccel" action="p"/>
+ <accelerator name="nAccel" action="n"/>
+ <accelerator name="ShiftReturnAccel" action="ShiftReturn"/>
+ <accelerator name="FocusPageSelectorAccel" action="FocusPageSelector"/>
+ <accelerator name="PlusAccel" action="Plus"/>
+ <accelerator name="MinusAccel" action="Minus"/>
+ <accelerator name="Equal" action="Equal"/>
+ <accelerator name="CtrlEqualAccel" action="CtrlEqual"/>
+ <accelerator name="KpPlusAccel" action="KpPlus"/>
+ <accelerator name="KpMinusAccel" action="KpMinus"/>
+ <accelerator name="CtrlKpPlusAccel" action="CtrlKpPlus"/>
+ <accelerator name="CtrlKpMinusAccel" action="CtrlKpMinus"/>
+</ui>
diff --git a/data/evince-toolbar.xml b/data/evince-toolbar.xml
new file mode 100644
index 00000000..b87bf717
--- /dev/null
+++ b/data/evince-toolbar.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<toolbars version="1.0">
+<available>
+ <toolitem name="FileOpenRecent"/>
+ <toolitem name="FilePrint"/>
+ <toolitem name="FileSaveAs"/>
+ <toolitem name="ViewContinuous"/>
+ <toolitem name="ViewDual"/>
+ <toolitem name="ViewInvertedColors"/>
+ <toolitem name="ViewReload"/>
+ <toolitem name="ViewAutoscroll"/>
+ <toolitem name="ViewSidebar"/>
+ <toolitem name="ViewZoom"/>
+ <toolitem name="ViewZoomIn"/>
+ <toolitem name="ViewZoomOut"/>
+ <toolitem name="ViewBestFit"/>
+ <toolitem name="ViewPageWidth"/>
+ <toolitem name="ViewFullscreen"/>
+ <toolitem name="ViewPresentation"/>
+ <toolitem name="GoPreviousPage"/>
+ <toolitem name="GoNextPage"/>
+ <toolitem name="GoFirstPage"/>
+ <toolitem name="GoLastPage"/>
+ <toolitem name="EditRotateLeft"/>
+ <toolitem name="EditRotateRight"/>
+ <toolitem name="EditSelectAll"/>
+ <toolitem name="EditFind"/>
+ <toolitem name="PageSelector"/>
+ <toolitem name="Navigation"/>
+</available>
+ <toolbar name="DefaultToolBar">
+ <toolitem name="GoPreviousPage"/>
+ <toolitem name="GoNextPage"/>
+ <separator/>
+ <toolitem name="PageSelector"/>
+ <separator/>
+ <toolitem name="ViewZoom"/>
+ </toolbar>
+</toolbars>
diff --git a/data/evince-ui.xml b/data/evince-ui.xml
new file mode 100644
index 00000000..f8e750db
--- /dev/null
+++ b/data/evince-ui.xml
@@ -0,0 +1,138 @@
+<ui>
+ <menubar name="MainMenu">
+ <menu name="FileMenu" action="File">
+ <menuitem name="FileOpenMenu" action="FileOpen"/>
+ <menuitem name="FileOpenCopyMenu" action="FileOpenCopy"/>
+ <menuitem name="FileSaveAsMenu" action="FileSaveAs"/>
+ <separator/>
+ <menuitem name="FilePrintMenu" action="FilePrint"/>
+ <separator/>
+ <menuitem name="FilePropertiesMenu" action="FileProperties"/>
+ <separator/>
+ <placeholder name="RecentFilesMenu"/>
+ <separator/>
+ <menuitem name="FileCloseWindowMenu" action="FileCloseWindow"/>
+ </menu>
+
+ <menu name="EditMenu" action="Edit">
+ <menuitem name="EditCopyMenu" action="EditCopy"/>
+ <separator/>
+ <menuitem name="EditSelectAllMenu" action="EditSelectAll"/>
+ <separator/>
+ <menuitem name="EditFindMenu" action="EditFind"/>
+ <menuitem name="EditFindNextMenu" action="EditFindNext"/>
+ <menuitem name="EditFindPreviousMenu" action="EditFindPrevious"/>
+ <separator/>
+ <menuitem name="EditRotateLeftMenu" action="EditRotateLeft"/>
+ <menuitem name="EditRotateRightMenu" action="EditRotateRight"/>
+ <separator/>
+ <menuitem name="EditToolbarMenu" action="EditToolbar"/>
+ <separator/>
+ <menuitem name="EditSaveSettingsMenu" action="EditSaveSettings"/>
+ </menu>
+
+ <menu name="ViewMenu" action="View">
+ <menuitem name="ViewToolbarMenu" action="ViewToolbar"/>
+ <menuitem name="ViewSidebarMenu" action="ViewSidebar"/>
+ <separator/>
+ <menuitem name="ViewFullscreenMenu" action="ViewFullscreen"/>
+ <menuitem name="ViewPresentationMenu" action="ViewPresentation"/>
+ <separator/>
+ <menuitem name="ViewContinuousMenu" action="ViewContinuous"/>
+ <menuitem name="ViewDualMenu" action="ViewDual"/>
+ <separator/>
+ <menuitem name="ViewInvertedColors" action="ViewInvertedColors"/>
+ <separator/>
+ <menuitem name="ViewZoomInMenu" action="ViewZoomIn"/>
+ <menuitem name="ViewZoomOutMenu" action="ViewZoomOut"/>
+ <menuitem name="ViewBestFitMenu" action="ViewBestFit"/>
+ <menuitem name="ViewPageWidthMenu" action="ViewPageWidth"/>
+ <separator/>
+ <menuitem name="ViewReload" action="ViewReload"/>
+ </menu>
+
+ <menu name="GoMenu" action="Go">
+ <menuitem name="GoPreviousPageMenu" action="GoPreviousPage"/>
+ <menuitem name="GoNextPageMenu" action="GoNextPage"/>
+ <separator/>
+ <menuitem name="GoFirstPageMenu" action="GoFirstPage"/>
+ <menuitem name="GoLastPageMenu" action="GoLastPage"/>
+ </menu>
+
+ <menu name="HelpMenu" action="Help">
+ <menuitem name="HelpContentsMenu" action="HelpContents"/>
+ <menuitem name="HelpAboutMenu" action="HelpAbout"/>
+ </menu>
+ </menubar>
+
+ <popup name="DocumentPopup" action="DocumentPopupAction">
+ <menuitem name="OpenLink" action="OpenLink"/>
+ <menuitem name="CopyLinkAddress" action="CopyLinkAddress"/>
+ <menuitem name="GoLink" action="GoLink"/>
+ <menuitem name="OpenLinkNewWindow" action="OpenLinkNewWindow"/>
+ <separator/>
+ <menuitem name="GoPreviousPage" action="GoPreviousPage"/>
+ <menuitem name="GoNextPage" action="GoNextPage"/>
+ <menuitem name="ViewReload" action="ViewReload"/>
+ <menuitem name="ViewAutoscroll" action="ViewAutoscroll"/>
+ <separator/>
+ <menuitem name="EditCopy" action="EditCopy"/>
+ <menuitem name="EditSelectAllPopup" action="EditSelectAll"/>
+ <separator/>
+ <menuitem name="SaveImageAs" action="SaveImageAs"/>
+ <menuitem name="CopyImage" action="CopyImage"/>
+ <separator/>
+ <menuitem name="OpenAttachment" action="OpenAttachment"/>
+ <menuitem name="SaveAttachmentAs" action="SaveAttachmentAs"/>
+ <separator/>
+ <menuitem name="AnnotProperties" action="AnnotProperties"/>
+ </popup>
+
+ <popup name="AttachmentPopup" action="AttachmentPopupAction">
+ <menuitem name="OpenAttachment" action="OpenAttachment"/>
+ <separator/>
+ <menuitem name="SaveAttachmentAs" action="SaveAttachmentAs"/>
+ </popup>
+
+ <popup name="ToolbarPopup" action="ToolbarPopupAction">
+ <menuitem name="EditToolbarMenu" action="EditToolbar"/>
+ </popup>
+
+ <accelerator name="PageDownAccel" action="PageDown"/>
+ <accelerator name="PageUpAccel" action="PageUp"/>
+ <accelerator name="GoBackwardFastAccel" action="GoBackwardFast"/>
+ <accelerator name="GoForwardFastAccel" action="GoForwardFast"/>
+ <accelerator name="EscapeAccel" action="Escape"/>
+ <accelerator name="SlashAccel" action="Slash"/>
+ <accelerator name="F3Accel" action="F3"/>
+ <accelerator name="SpaceAccel" action="Space"/>
+ <accelerator name="ReturnAccel" action="Return"/>
+ <accelerator name="BackSpaceAccel" action="BackSpace"/>
+ <accelerator name="ShiftSpaceAccel" action="ShiftSpace"/>
+ <accelerator name="ShiftBackSpaceAccel" action="ShiftBackSpace"/>
+ <accelerator name="pAccel" action="p"/>
+ <accelerator name="nAccel" action="n"/>
+ <accelerator name="ShiftReturnAccel" action="ShiftReturn"/>
+ <accelerator name="FocusPageSelectorAccel" action="FocusPageSelector"/>
+ <accelerator name="PlusAccel" action="Plus"/>
+ <accelerator name="MinusAccel" action="Minus"/>
+ <accelerator name="Equal" action="Equal"/>
+ <accelerator name="CtrlEqualAccel" action="CtrlEqual"/>
+ <accelerator name="KpPlusAccel" action="KpPlus"/>
+ <accelerator name="KpMinusAccel" action="KpMinus"/>
+ <accelerator name="CtrlKpPlusAccel" action="CtrlKpPlus"/>
+ <accelerator name="CtrlKpMinusAccel" action="CtrlKpMinus"/>
+ <accelerator name="CtrlInsertAccel" action="CtrlInsert" />
+
+ <toolbar name="FullscreenToolbar">
+ <toolitem name="GoPreviousPage" action="GoPreviousPage"/>
+ <toolitem name="GoNextPage" action="GoNextPage"/>
+ <separator/>
+ <toolitem name="PageSelector" action="PageSelector"/>
+ <separator/>
+ <toolitem name="ViewZoom" action="ViewZoom"/>
+ <separator expand="true"/>
+ <toolitem name="StartPresentation" action="StartPresentation"/>
+ <toolitem name="LeaveFullscreen" action="LeaveFullscreen"/>
+ </toolbar>
+</ui>
diff --git a/data/evince.1 b/data/evince.1
new file mode 100644
index 00000000..43dd768b
--- /dev/null
+++ b/data/evince.1
@@ -0,0 +1,41 @@
+.TH EVINCE 1 "30 Jan 2007"
+.SH NAME
+\fBevince\fP \- MATE document viewer
+
+The Evince Document Viewer application for MATE desktop environment
+
+.SH SYNTAX
+.B evince
+.RI [--help]
+.RI [--usage]
+.RI [--page-label=<label>]
+.RI [--quit]
+.RI [filename(s)...]
+.SH DESCRIPTION
+.B evince
+
+Evince is a document viewer capable of displaying multiple and single
+page document formats like PDF and Postscript. For more general
+information about Evince please visit our website at
+http://www.mate.org/projects/evince/
+
+.LP
+.SH OPTIONS
+
+.TP
+\fB\-\-help\fR
+Prints the command line options.
+.TP
+\fB\-\-page\-label=label\fR
+You can pass a page label or page number here, this page will be selected in
+the document if it exists.
+.TP
+\fBfilename(s)...\fR
+Specifies the file to open when Evince starts. If this is not
+specified, Evince will open a blank window. Multiple files can be loaded
+if they are separated by spaces. Evince also supports handling of
+remote files. For example, you can pass the location on the web or load
+a file from a FTP server, like "ftp://adobe.com/sample.pdf".
+
+.SH BUGS
+If you find a bug, please report it at http://bugzilla.mate.org/enter_bug.cgi?product=evince.
diff --git a/data/evince.convert b/data/evince.convert
new file mode 100644
index 00000000..0071bc73
--- /dev/null
+++ b/data/evince.convert
@@ -0,0 +1,2 @@
+[org.mate.Evince]
+override-restrictions = /apps/evince/override_restrictions
diff --git a/data/evince.desktop.in.in b/data/evince.desktop.in.in
new file mode 100644
index 00000000..f871bc17
--- /dev/null
+++ b/data/evince.desktop.in.in
@@ -0,0 +1,17 @@
+[Desktop Entry]
+_Name=Document Viewer
+_Comment=View multi-page documents
+TryExec=evince
+Exec=evince %U
+StartupNotify=true
+Terminal=false
+Type=Application
+Icon=evince
+NoDisplay=true
+X-MATE-DocPath=
+X-MATE-Bugzilla-Bugzilla=MATE
+X-MATE-Bugzilla-Product=evince
+X-MATE-Bugzilla-Component=BugBuddyBugs
+X-MATE-Bugzilla-Version=@VERSION@
+Categories=MATE;GTK;Graphics;VectorGraphics;Viewer;
+MimeType=@EVINCE_MIME_TYPES@
diff --git a/data/evince.ico b/data/evince.ico
new file mode 100644
index 00000000..1015d1f8
--- /dev/null
+++ b/data/evince.ico
Binary files differ
diff --git a/data/hand-open.png b/data/hand-open.png
new file mode 100644
index 00000000..55ac7b8c
--- /dev/null
+++ b/data/hand-open.png
Binary files differ
diff --git a/data/icons/16x16/Makefile.am b/data/icons/16x16/Makefile.am
new file mode 100644
index 00000000..b02d3a8c
--- /dev/null
+++ b/data/icons/16x16/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = actions apps mimetypes
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/16x16/actions/Makefile.am b/data/icons/16x16/actions/Makefile.am
new file mode 100644
index 00000000..d82ea2a3
--- /dev/null
+++ b/data/icons/16x16/actions/Makefile.am
@@ -0,0 +1,27 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 16x16
+context = actions
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ view-page-continuous.png \
+ view-page-facing.png \
+ zoom.png \
+ zoom-fit-height.png \
+ zoom-fit-width.png \
+ object-rotate-left.png \
+ object-rotate-right.png
+
+noinst_DATA = \
+ view-page-continuous.xcf \
+ view-page-facing.xcf \
+ zoom.svg \
+ zoom-fit-page.svg \
+ zoom-fit-width.svg
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/16x16/actions/object-rotate-left.png b/data/icons/16x16/actions/object-rotate-left.png
new file mode 100644
index 00000000..c455b536
--- /dev/null
+++ b/data/icons/16x16/actions/object-rotate-left.png
Binary files differ
diff --git a/data/icons/16x16/actions/object-rotate-right.png b/data/icons/16x16/actions/object-rotate-right.png
new file mode 100644
index 00000000..49e5727c
--- /dev/null
+++ b/data/icons/16x16/actions/object-rotate-right.png
Binary files differ
diff --git a/data/icons/16x16/actions/view-page-continuous.png b/data/icons/16x16/actions/view-page-continuous.png
new file mode 100644
index 00000000..fc583098
--- /dev/null
+++ b/data/icons/16x16/actions/view-page-continuous.png
Binary files differ
diff --git a/data/icons/16x16/actions/view-page-continuous.xcf b/data/icons/16x16/actions/view-page-continuous.xcf
new file mode 100644
index 00000000..1a1b36c1
--- /dev/null
+++ b/data/icons/16x16/actions/view-page-continuous.xcf
Binary files differ
diff --git a/data/icons/16x16/actions/view-page-facing.png b/data/icons/16x16/actions/view-page-facing.png
new file mode 100644
index 00000000..078b4c9e
--- /dev/null
+++ b/data/icons/16x16/actions/view-page-facing.png
Binary files differ
diff --git a/data/icons/16x16/actions/view-page-facing.xcf b/data/icons/16x16/actions/view-page-facing.xcf
new file mode 100644
index 00000000..cfe5f232
--- /dev/null
+++ b/data/icons/16x16/actions/view-page-facing.xcf
Binary files differ
diff --git a/data/icons/16x16/actions/zoom-fit-height.png b/data/icons/16x16/actions/zoom-fit-height.png
new file mode 100644
index 00000000..91d6ec7c
--- /dev/null
+++ b/data/icons/16x16/actions/zoom-fit-height.png
Binary files differ
diff --git a/data/icons/16x16/actions/zoom-fit-page.svg b/data/icons/16x16/actions/zoom-fit-page.svg
new file mode 100644
index 00000000..d6bf4aea
--- /dev/null
+++ b/data/icons/16x16/actions/zoom-fit-page.svg
@@ -0,0 +1,282 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ id="svg4639"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docbase="/home/luca/Desktop/16x16/actions"
+ sodipodi:docname="zoom-fit-page.svg"
+ version="1.0">
+ <defs
+ id="defs4641">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2889">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1;"
+ offset="0"
+ id="stop2891" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop2893" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2881">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop2883" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="1"
+ id="stop2885" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2853">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2855" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2857" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5631">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop5633" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="1"
+ id="stop5635" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8163">
+ <stop
+ style="stop-color:#bad0e8;stop-opacity:1;"
+ offset="0"
+ id="stop8165" />
+ <stop
+ style="stop-color:#7fa9d5;stop-opacity:1"
+ offset="1"
+ id="stop8167" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8163"
+ id="radialGradient4666"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.941673,0,0,0.792865,0.946634,3.041907)"
+ cx="5.9125323"
+ cy="9.0931339"
+ fx="5.9125323"
+ fy="9.0931339"
+ r="6.6046906" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5631"
+ id="linearGradient5637"
+ x1="7.5"
+ y1="8.8833847"
+ x2="7.5"
+ y2="-0.79768431"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2853"
+ id="radialGradient2861"
+ cx="4.9147677"
+ cy="5.1328478"
+ fx="4.9147677"
+ fy="5.1328478"
+ r="5"
+ gradientTransform="matrix(1.925041,0,1.17341e-7,1.382998,-4.336128,-1.661216)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2881"
+ id="linearGradient2887"
+ x1="2.8480079"
+ y1="1.379131"
+ x2="7.0234137"
+ y2="10.952174"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2889"
+ id="linearGradient2895"
+ x1="7.4401245"
+ y1="0.79882336"
+ x2="10.728523"
+ y2="13.712273"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="21.524656"
+ inkscape:cy="11.367931"
+ inkscape:current-layer="layer8"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showborder="false"
+ inkscape:grid-points="true"
+ inkscape:window-width="1041"
+ inkscape:window-height="710"
+ inkscape:window-x="26"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4644">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Lapo Calamandrei</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>Andreas Nillson</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ <dc:title>Zoom</dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="magnifying lens"
+ inkscape:groupmode="layer"
+ style="display:inline">
+ <rect
+ y="-0.1077"
+ x="9.9999997e-05"
+ height="16"
+ width="16"
+ id="rect4613"
+ style="fill:white;fill-opacity:0;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="matrix(0.707107,-0.707107,0.707107,0.707107,0,0)"
+ y="14.201591"
+ x="-0.97432232"
+ height="3.0000219"
+ width="1.9875129"
+ id="rect4615"
+ style="fill:#525655;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="matrix(0.708405,-0.705806,0.708405,0.705806,0,0)"
+ ry="1.4539403"
+ rx="1.3503115"
+ y="16.878378"
+ x="-1.4629019"
+ height="4.4376249"
+ width="2.8660307"
+ id="rect4617"
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#2e3436;stroke-width:1.00001717;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="path4619"
+ d="M 11.128133,11.108613 L 14.215547,14.196027"
+ style="fill:none;fill-rule:evenodd;stroke:#525655;stroke-width:1.0000006px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ transform="matrix(1.088272,0,0,1.200299,-8.933437e-2,0.259922)"
+ d="M 12.487086 5.6153316 A 5.9727769 5.415318 0 1 1 0.54153204,5.6153316 A 5.9727769 5.415318 0 1 1 12.487086 5.6153316 z"
+ sodipodi:ry="5.415318"
+ sodipodi:rx="5.9727769"
+ sodipodi:cy="5.6153316"
+ sodipodi:cx="6.5143089"
+ id="path4621"
+ style="fill:white;fill-opacity:0;stroke:url(#linearGradient2895);stroke-width:0.96245235;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.920843,0,0,1.015635,1.001354,1.29686)"
+ d="M 12.487086 5.6153316 A 5.9727769 5.415318 0 1 1 0.54153204,5.6153316 A 5.9727769 5.415318 0 1 1 12.487086 5.6153316 z"
+ sodipodi:ry="5.415318"
+ sodipodi:rx="5.9727769"
+ sodipodi:cy="5.6153316"
+ sodipodi:cx="6.5143089"
+ id="path4623"
+ style="opacity:1;fill:url(#radialGradient4666);fill-opacity:1;stroke:url(#linearGradient2887);stroke-width:1.03404319;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <rect
+ style="opacity:1;fill:#999;fill-opacity:1;stroke:none;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1928"
+ width="1"
+ height="1"
+ x="12"
+ y="12" />
+ <path
+ style="opacity:0.5;fill:url(#radialGradient2861);fill-opacity:1;stroke:none;stroke-width:1.03404319;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ d="M 7,2 C 4.2399952,2 2.0000001,4.2399964 2,7 C 3,10.521525 8,3.5447287 12,7 C 12,4.2399964 9.7600047,2 7,2 z "
+ id="path2847" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer8"
+ inkscape:label="pagewidth"
+ style="display:inline">
+ <g
+ id="g4561"
+ transform="matrix(0,1,-1,0,14,0)">
+ <g
+ style="opacity:0.8"
+ id="g5768">
+ <path
+ style="fill:white;fill-opacity:1;fill-rule:evenodd;stroke:#729fcf;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 5,4 L 2,7 L 5,10 L 5,4 z M 9,4 L 9,10 L 12,7 L 9,4 z "
+ id="path5760" />
+ <rect
+ style="opacity:1;fill:#729fcf;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect5752"
+ width="4"
+ height="4"
+ x="5"
+ y="5"
+ rx="0"
+ ry="0" />
+ </g>
+ <rect
+ ry="0"
+ rx="0"
+ y="6"
+ x="4"
+ height="2"
+ width="6"
+ id="rect5754"
+ style="fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ id="path5756"
+ d="M 5,4 L 2,7 L 5,10 L 5,4"
+ style="fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ id="path5758"
+ d="M 9,4 L 12,7 L 9,10 L 9,4"
+ style="fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+ </g>
+ </g>
+</svg>
diff --git a/data/icons/16x16/actions/zoom-fit-width.png b/data/icons/16x16/actions/zoom-fit-width.png
new file mode 100644
index 00000000..64c81b26
--- /dev/null
+++ b/data/icons/16x16/actions/zoom-fit-width.png
Binary files differ
diff --git a/data/icons/16x16/actions/zoom-fit-width.svg b/data/icons/16x16/actions/zoom-fit-width.svg
new file mode 100644
index 00000000..86dcf876
--- /dev/null
+++ b/data/icons/16x16/actions/zoom-fit-width.svg
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ id="svg4639"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docbase="/home/lapo/Desktop/zoom"
+ sodipodi:docname="zoom-fit-width.svg"
+ version="1.0">
+ <defs
+ id="defs4641">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2889">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1;"
+ offset="0"
+ id="stop2891" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop2893" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2881">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop2883" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="1"
+ id="stop2885" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2853">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2855" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2857" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5631">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop5633" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="1"
+ id="stop5635" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8163">
+ <stop
+ style="stop-color:#bad0e8;stop-opacity:1;"
+ offset="0"
+ id="stop8165" />
+ <stop
+ style="stop-color:#7fa9d5;stop-opacity:1"
+ offset="1"
+ id="stop8167" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8163"
+ id="radialGradient4666"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.941673,0,0,0.792865,0.946634,3.041907)"
+ cx="5.9125323"
+ cy="9.0931339"
+ fx="5.9125323"
+ fy="9.0931339"
+ r="6.6046906" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5631"
+ id="linearGradient5637"
+ x1="7.5"
+ y1="8.8833847"
+ x2="7.5"
+ y2="-0.79768431"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2853"
+ id="radialGradient2861"
+ cx="4.9147677"
+ cy="5.1328478"
+ fx="4.9147677"
+ fy="5.1328478"
+ r="5"
+ gradientTransform="matrix(1.925041,0,1.17341e-7,1.382998,-4.336128,-1.661216)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2881"
+ id="linearGradient2887"
+ x1="2.8480079"
+ y1="1.379131"
+ x2="7.0234137"
+ y2="10.952174"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2889"
+ id="linearGradient2895"
+ x1="7.4401245"
+ y1="0.79882336"
+ x2="10.728523"
+ y2="13.712273"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="14.680503"
+ inkscape:cy="2.2039917"
+ inkscape:current-layer="layer8"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showborder="false"
+ inkscape:grid-points="true"
+ inkscape:window-width="1034"
+ inkscape:window-height="710"
+ inkscape:window-x="26"
+ inkscape:window-y="0" />
+ <metadata
+ id="metadata4644">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Lapo Calamandrei</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>Andreas Nillson</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ <dc:title>Zoom</dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="magnifying lens"
+ inkscape:groupmode="layer"
+ style="display:inline">
+ <rect
+ y="-0.1077"
+ x="9.9999997e-05"
+ height="16"
+ width="16"
+ id="rect4613"
+ style="fill:white;fill-opacity:0;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="matrix(0.707107,-0.707107,0.707107,0.707107,0,0)"
+ y="14.201591"
+ x="-0.97432232"
+ height="3.0000219"
+ width="1.9875129"
+ id="rect4615"
+ style="fill:#525655;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="matrix(0.708405,-0.705806,0.708405,0.705806,0,0)"
+ ry="1.4539403"
+ rx="1.3503115"
+ y="16.878378"
+ x="-1.4629019"
+ height="4.4376249"
+ width="2.8660307"
+ id="rect4617"
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#2e3436;stroke-width:1.00001717;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="path4619"
+ d="M 11.128133,11.108613 L 14.215547,14.196027"
+ style="fill:none;fill-rule:evenodd;stroke:#525655;stroke-width:1.0000006px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ transform="matrix(1.088272,0,0,1.200299,-8.933437e-2,0.259922)"
+ d="M 12.487086 5.6153316 A 5.9727769 5.415318 0 1 1 0.54153204,5.6153316 A 5.9727769 5.415318 0 1 1 12.487086 5.6153316 z"
+ sodipodi:ry="5.415318"
+ sodipodi:rx="5.9727769"
+ sodipodi:cy="5.6153316"
+ sodipodi:cx="6.5143089"
+ id="path4621"
+ style="fill:white;fill-opacity:0;stroke:url(#linearGradient2895);stroke-width:0.96245235;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.920843,0,0,1.015635,1.001354,1.29686)"
+ d="M 12.487086 5.6153316 A 5.9727769 5.415318 0 1 1 0.54153204,5.6153316 A 5.9727769 5.415318 0 1 1 12.487086 5.6153316 z"
+ sodipodi:ry="5.415318"
+ sodipodi:rx="5.9727769"
+ sodipodi:cy="5.6153316"
+ sodipodi:cx="6.5143089"
+ id="path4623"
+ style="opacity:1;fill:url(#radialGradient4666);fill-opacity:1;stroke:url(#linearGradient2887);stroke-width:1.03404319;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <rect
+ style="opacity:1;fill:#999;fill-opacity:1;stroke:none;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1928"
+ width="1"
+ height="1"
+ x="12"
+ y="12" />
+ <path
+ style="opacity:0.5;fill:url(#radialGradient2861);fill-opacity:1;stroke:none;stroke-width:1.03404319;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ d="M 7,2 C 4.2399952,2 2.0000001,4.2399964 2,7 C 3,10.521525 8,3.5447287 12,7 C 12,4.2399964 9.7600047,2 7,2 z "
+ id="path2847" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer8"
+ inkscape:label="pagewidth"
+ style="display:inline">
+ <g
+ id="g5768"
+ style="opacity:0.8">
+ <path
+ id="path5760"
+ d="M 5,4 L 2,7 L 5,10 L 5,4 z M 9,4 L 9,10 L 12,7 L 9,4 z "
+ style="fill:white;fill-opacity:1;fill-rule:evenodd;stroke:#729fcf;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+ <rect
+ ry="0"
+ rx="0"
+ y="5"
+ x="5"
+ height="4"
+ width="4"
+ id="rect5752"
+ style="opacity:1;fill:#729fcf;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ </g>
+ <rect
+ style="fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect5754"
+ width="6"
+ height="2"
+ x="4"
+ y="6"
+ rx="0"
+ ry="0" />
+ <path
+ style="fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 5,4 L 2,7 L 5,10 L 5,4"
+ id="path5756" />
+ <path
+ style="fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="M 9,4 L 12,7 L 9,10 L 9,4"
+ id="path5758" />
+ </g>
+</svg>
diff --git a/data/icons/16x16/actions/zoom.png b/data/icons/16x16/actions/zoom.png
new file mode 100644
index 00000000..fad7019e
--- /dev/null
+++ b/data/icons/16x16/actions/zoom.png
Binary files differ
diff --git a/data/icons/16x16/actions/zoom.svg b/data/icons/16x16/actions/zoom.svg
new file mode 100644
index 00000000..14e713e9
--- /dev/null
+++ b/data/icons/16x16/actions/zoom.svg
@@ -0,0 +1,247 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="16"
+ id="svg4639"
+ sodipodi:version="0.32"
+ inkscape:version="0.45+devel"
+ sodipodi:docbase="/home/luca/Desktop/16x16/actions"
+ sodipodi:docname="zoom.svg"
+ version="1.0"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/nx/Desktop/zoom.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4641">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2889">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1;"
+ offset="0"
+ id="stop2891" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop2893" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2881">
+ <stop
+ style="stop-color:white;stop-opacity:1"
+ offset="0"
+ id="stop2883" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="1"
+ id="stop2885" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2853">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2855" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2857" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5631">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop5633" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="1"
+ id="stop5635" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8163">
+ <stop
+ style="stop-color:#bad0e8;stop-opacity:1;"
+ offset="0"
+ id="stop8165" />
+ <stop
+ style="stop-color:#7fa9d5;stop-opacity:1"
+ offset="1"
+ id="stop8167" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8163"
+ id="radialGradient4666"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.941673,0,0,0.792865,0.946634,3.041907)"
+ cx="5.9125323"
+ cy="9.0931339"
+ fx="5.9125323"
+ fy="9.0931339"
+ r="6.6046906" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5631"
+ id="linearGradient5637"
+ x1="7.5"
+ y1="8.8833847"
+ x2="7.5"
+ y2="-0.79768431"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2853"
+ id="radialGradient2861"
+ cx="4.9147677"
+ cy="5.1328478"
+ fx="4.9147677"
+ fy="5.1328478"
+ r="5"
+ gradientTransform="matrix(1.925041,0,1.17341e-7,1.382998,-4.336128,-1.661216)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2881"
+ id="linearGradient2887"
+ x1="2.8480079"
+ y1="1.379131"
+ x2="7.0234137"
+ y2="10.952174"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2889"
+ id="linearGradient2895"
+ x1="7.4401245"
+ y1="0.79882336"
+ x2="10.728523"
+ y2="13.712273"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16"
+ inkscape:cx="21.524656"
+ inkscape:cy="11.367931"
+ inkscape:current-layer="layer8"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showborder="false"
+ inkscape:grid-points="true"
+ inkscape:window-width="1041"
+ inkscape:window-height="710"
+ inkscape:window-x="26"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata4644">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Lapo Calamandrei</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>Andreas Nillson</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ <dc:title>Zoom</dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="magnifying lens"
+ inkscape:groupmode="layer"
+ style="display:inline">
+ <rect
+ y="-0.1077"
+ x="9.9999997e-05"
+ height="16"
+ width="16"
+ id="rect4613"
+ style="fill:white;fill-opacity:0;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="matrix(0.707107,-0.707107,0.707107,0.707107,0,0)"
+ y="14.201591"
+ x="-0.97432232"
+ height="3.0000219"
+ width="1.9875129"
+ id="rect4615"
+ style="fill:#525655;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ transform="matrix(0.708405,-0.705806,0.708405,0.705806,0,0)"
+ ry="1.4539403"
+ rx="1.3503115"
+ y="16.878378"
+ x="-1.4629019"
+ height="4.4376249"
+ width="2.8660307"
+ id="rect4617"
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#2e3436;stroke-width:1.00001717;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="path4619"
+ d="M 11.128133,11.108613 L 14.215547,14.196027"
+ style="fill:none;fill-rule:evenodd;stroke:#525655;stroke-width:1.0000006px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ transform="matrix(1.088272,0,0,1.200299,-8.933437e-2,0.259922)"
+ d="M 12.487086 5.6153316 A 5.9727769 5.415318 0 1 1 0.54153204,5.6153316 A 5.9727769 5.415318 0 1 1 12.487086 5.6153316 z"
+ sodipodi:ry="5.415318"
+ sodipodi:rx="5.9727769"
+ sodipodi:cy="5.6153316"
+ sodipodi:cx="6.5143089"
+ id="path4621"
+ style="fill:white;fill-opacity:0;stroke:url(#linearGradient2895);stroke-width:0.96245235;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.920843,0,0,1.015635,1.001354,1.29686)"
+ d="M 12.487086 5.6153316 A 5.9727769 5.415318 0 1 1 0.54153204,5.6153316 A 5.9727769 5.415318 0 1 1 12.487086 5.6153316 z"
+ sodipodi:ry="5.415318"
+ sodipodi:rx="5.9727769"
+ sodipodi:cy="5.6153316"
+ sodipodi:cx="6.5143089"
+ id="path4623"
+ style="opacity:1;fill:url(#radialGradient4666);fill-opacity:1;stroke:url(#linearGradient2887);stroke-width:1.03404319;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <rect
+ style="opacity:1;fill:#999;fill-opacity:1;stroke:none;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1928"
+ width="1"
+ height="1"
+ x="12"
+ y="12" />
+ <path
+ style="opacity:0.5;fill:url(#radialGradient2861);fill-opacity:1;stroke:none;stroke-width:1.03404319;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ d="M 7,2 C 4.2399952,2 2.0000001,4.2399964 2,7 C 3,10.521525 8,3.5447287 12,7 C 12,4.2399964 9.7600047,2 7,2 z "
+ id="path2847" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer8"
+ inkscape:label="pagewidth"
+ style="display:inline" />
+</svg>
diff --git a/data/icons/16x16/apps/Makefile.am b/data/icons/16x16/apps/Makefile.am
new file mode 100644
index 00000000..f23ab1a5
--- /dev/null
+++ b/data/icons/16x16/apps/Makefile.am
@@ -0,0 +1,16 @@
+themedir = $(datadir)/icons/hicolor
+size = 16x16
+context = apps
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ evince.png
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/16x16/apps/evince.png b/data/icons/16x16/apps/evince.png
new file mode 100644
index 00000000..e2e7fae1
--- /dev/null
+++ b/data/icons/16x16/apps/evince.png
Binary files differ
diff --git a/data/icons/16x16/mimetypes/Makefile.am b/data/icons/16x16/mimetypes/Makefile.am
new file mode 100644
index 00000000..9a2164cc
--- /dev/null
+++ b/data/icons/16x16/mimetypes/Makefile.am
@@ -0,0 +1,14 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 16x16
+context = mimetypes
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ x-office-presentation.png
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
diff --git a/data/icons/16x16/mimetypes/x-office-presentation.png b/data/icons/16x16/mimetypes/x-office-presentation.png
new file mode 100644
index 00000000..da0546d1
--- /dev/null
+++ b/data/icons/16x16/mimetypes/x-office-presentation.png
Binary files differ
diff --git a/data/icons/22x22/Makefile.am b/data/icons/22x22/Makefile.am
new file mode 100644
index 00000000..b02d3a8c
--- /dev/null
+++ b/data/icons/22x22/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = actions apps mimetypes
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/22x22/actions/Makefile.am b/data/icons/22x22/actions/Makefile.am
new file mode 100644
index 00000000..eba54c2a
--- /dev/null
+++ b/data/icons/22x22/actions/Makefile.am
@@ -0,0 +1,28 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 22x22
+context = actions
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ eye.png \
+ object-rotate-left.png \
+ object-rotate-right.png \
+ view-page-continuous.png \
+ view-page-facing.png \
+ zoom.png \
+ zoom-fit-page.png \
+ zoom-fit-width.png
+
+noinst_DATA = \
+ view-page-continuous.xcf \
+ view-page-facing.xcf \
+ zoom.svg \
+ zoom-fit-page.svg \
+ zoom-fit-width.svg
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/22x22/actions/eye.png b/data/icons/22x22/actions/eye.png
new file mode 100644
index 00000000..32f278c1
--- /dev/null
+++ b/data/icons/22x22/actions/eye.png
Binary files differ
diff --git a/data/icons/22x22/actions/object-rotate-left.png b/data/icons/22x22/actions/object-rotate-left.png
new file mode 100644
index 00000000..cbd71e52
--- /dev/null
+++ b/data/icons/22x22/actions/object-rotate-left.png
Binary files differ
diff --git a/data/icons/22x22/actions/object-rotate-right.png b/data/icons/22x22/actions/object-rotate-right.png
new file mode 100644
index 00000000..b0e33dc6
--- /dev/null
+++ b/data/icons/22x22/actions/object-rotate-right.png
Binary files differ
diff --git a/data/icons/22x22/actions/view-page-continuous.png b/data/icons/22x22/actions/view-page-continuous.png
new file mode 100644
index 00000000..7f74603b
--- /dev/null
+++ b/data/icons/22x22/actions/view-page-continuous.png
Binary files differ
diff --git a/data/icons/22x22/actions/view-page-continuous.xcf b/data/icons/22x22/actions/view-page-continuous.xcf
new file mode 100644
index 00000000..cf3ee516
--- /dev/null
+++ b/data/icons/22x22/actions/view-page-continuous.xcf
Binary files differ
diff --git a/data/icons/22x22/actions/view-page-facing.png b/data/icons/22x22/actions/view-page-facing.png
new file mode 100644
index 00000000..8158ae31
--- /dev/null
+++ b/data/icons/22x22/actions/view-page-facing.png
Binary files differ
diff --git a/data/icons/22x22/actions/view-page-facing.xcf b/data/icons/22x22/actions/view-page-facing.xcf
new file mode 100644
index 00000000..1a4942c8
--- /dev/null
+++ b/data/icons/22x22/actions/view-page-facing.xcf
Binary files differ
diff --git a/data/icons/22x22/actions/zoom-fit-page.png b/data/icons/22x22/actions/zoom-fit-page.png
new file mode 100644
index 00000000..a074b422
--- /dev/null
+++ b/data/icons/22x22/actions/zoom-fit-page.png
Binary files differ
diff --git a/data/icons/22x22/actions/zoom-fit-page.svg b/data/icons/22x22/actions/zoom-fit-page.svg
new file mode 100644
index 00000000..0ac072a1
--- /dev/null
+++ b/data/icons/22x22/actions/zoom-fit-page.svg
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg7360"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ version="1.0"
+ sodipodi:docbase="/home/luca/Desktop/22x22/actions"
+ sodipodi:docname="zoom-fit-page.svg"
+ inkscape:export-filename="/home/andreas/project/misc icons/22x22/actions/zoom-fit-width.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs7362">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5398">
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop5400" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:0;"
+ offset="1"
+ id="stop5402" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5398"
+ id="linearGradient7413"
+ gradientUnits="userSpaceOnUse"
+ x1="-1.650571"
+ y1="229.18515"
+ x2="6.1053252"
+ y2="250.19063" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7659">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop7661" />
+ <stop
+ style="stop-color:#555753;stop-opacity:0;"
+ offset="1"
+ id="stop7663" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7659"
+ id="radialGradient7411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.973425,0,0,0.24,0.401944,173.945)"
+ cx="15.125"
+ cy="229.39583"
+ fx="15.125"
+ fy="229.39583"
+ r="9.375" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5388">
+ <stop
+ style="stop-color:#bcd2e9;stop-opacity:1"
+ offset="0"
+ id="stop5390" />
+ <stop
+ style="stop-color:#93b6db;stop-opacity:1"
+ offset="1"
+ id="stop5392" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5388"
+ id="radialGradient7409"
+ gradientUnits="userSpaceOnUse"
+ cx="2.96875"
+ cy="240.416"
+ fx="2.96875"
+ fy="240.416"
+ r="8.96875" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7629">
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="0"
+ id="stop7631" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1"
+ offset="1"
+ id="stop7633" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7629"
+ id="linearGradient7407"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(235.4321,-644.2117)"
+ x1="-164.73708"
+ y1="182.09869"
+ x2="-162.92517"
+ y2="182.10544" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.672167"
+ inkscape:cx="14.098689"
+ inkscape:cy="13.127552"
+ inkscape:current-layer="draw_zoom"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="1270"
+ inkscape:window-height="922"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata7365">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g7387"
+ transform="translate(-1,-1)">
+ <g
+ inkscape:label="#g18331"
+ transform="translate(295.0516,397.0022)"
+ id="draw_zoom">
+ <rect
+ transform="matrix(0.707107,-0.707107,0.707107,0.707107,0,0)"
+ ry="1.4928225"
+ rx="1.4928225"
+ y="-467.01642"
+ x="70.877777"
+ height="9.0625086"
+ width="2.5000021"
+ id="rect18273"
+ style="fill:url(#linearGradient7407);fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1.00000107;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ transform="matrix(1.003826,0,0,1,-288.0306,-622.4396)"
+ d="M 11.4375 235.40625 A 8.46875 8.46875 0 1 1 -5.5,235.40625 A 8.46875 8.46875 0 1 1 11.4375 235.40625 z"
+ sodipodi:ry="8.46875"
+ sodipodi:rx="8.46875"
+ sodipodi:cy="235.40625"
+ sodipodi:cx="2.96875"
+ id="path18275"
+ style="fill:url(#radialGradient7409);fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.99809253;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="czccc"
+ id="path18277"
+ d="M -292.15418,-386.77986 C -292.15418,-386.77986 -288.74097,-385.87708 -284.98838,-385.87708 C -281.2922,-385.87708 -277.82258,-387.68264 -277.82258,-387.68264 C -277.82258,-387.68264 -278.8839,-394.00208 -284.98838,-394.00208 C -291.88279,-393.88923 -292.15418,-386.77986 -292.15418,-386.77986 z "
+ style="opacity:0.2857143;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ transform="matrix(0.885609,0,0,0.885612,-287.6784,-595.4806)"
+ d="M 11.4375 235.40625 A 8.46875 8.46875 0 1 1 -5.5,235.40625 A 8.46875 8.46875 0 1 1 11.4375 235.40625 z"
+ sodipodi:ry="8.46875"
+ sodipodi:rx="8.46875"
+ sodipodi:cy="235.40625"
+ sodipodi:cx="2.96875"
+ id="path18279"
+ style="opacity:0.8;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:white;stroke-width:1.12916505;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.119412,0,0,1.555533,-300.897,-733.5249)"
+ d="M 24.875 228.875 A 9.375 2.25 0 1 1 6.125,228.875 A 9.375 2.25 0 1 1 24.875 228.875 z"
+ sodipodi:ry="2.25"
+ sodipodi:rx="9.375"
+ sodipodi:cy="228.875"
+ sodipodi:cx="15.5"
+ id="path18281"
+ style="opacity:0.2;fill:url(#radialGradient7411);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.6;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient7413);stroke-width:1.2950778;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path5396"
+ sodipodi:cx="2.96875"
+ sodipodi:cy="235.40625"
+ sodipodi:rx="8.46875"
+ sodipodi:ry="8.46875"
+ d="M 11.4375 235.40625 A 8.46875 8.46875 0 1 1 -5.5,235.40625 A 8.46875 8.46875 0 1 1 11.4375 235.40625 z"
+ transform="matrix(0.770704,0,0,0.773608,-287.3127,-569.1141)" />
+ <g
+ id="g4556"
+ transform="matrix(0,1,-1,0,-671.8038,-101.7006)">
+ <g
+ transform="matrix(1.043478,0,0,1,-292.3559,-393.7522)"
+ style="opacity:0.8;display:inline"
+ id="g5768">
+ <path
+ sodipodi:nodetypes="cccccccc"
+ style="fill:white;fill-opacity:1;fill-rule:evenodd;stroke:#729fcf;stroke-width:1.46841753;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 5.3328369,4 L 2,7 L 5.3328369,10 L 5.3328369,4 z M 8.697421,4 L 8.697421,10 L 12,7 L 8.697421,4 z "
+ id="path5760" />
+ <rect
+ style="opacity:1;fill:#729fcf;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect5752"
+ width="4"
+ height="4"
+ x="5"
+ y="4.75"
+ rx="0"
+ ry="0" />
+ </g>
+ <rect
+ ry="0"
+ rx="0"
+ y="-388.0022"
+ x="-288.30161"
+ height="2"
+ width="6"
+ id="rect5754"
+ style="fill:white;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ <path
+ id="path5756"
+ d="M -287.0516,-389.7522 L -290.0516,-386.7522 L -287.0516,-383.7522 L -287.0516,-389.7522"
+ style="fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+ <path
+ id="path5758"
+ d="M -283.0516,-389.7522 L -280.0516,-386.7522 L -283.0516,-383.7522 L -283.0516,-389.7522"
+ style="fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+ </g>
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/data/icons/22x22/actions/zoom-fit-width.png b/data/icons/22x22/actions/zoom-fit-width.png
new file mode 100644
index 00000000..f9fe77fd
--- /dev/null
+++ b/data/icons/22x22/actions/zoom-fit-width.png
Binary files differ
diff --git a/data/icons/22x22/actions/zoom-fit-width.svg b/data/icons/22x22/actions/zoom-fit-width.svg
new file mode 100644
index 00000000..d1498db5
--- /dev/null
+++ b/data/icons/22x22/actions/zoom-fit-width.svg
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg7360"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/misc icons/22x22/actions"
+ sodipodi:docname="zoom-fit-width.svg"
+ inkscape:export-filename="/home/andreas/project/misc icons/22x22/actions/zoom-fit-width.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ sodipodi:modified="TRUE">
+ <defs
+ id="defs7362">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5398">
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop5400" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:0;"
+ offset="1"
+ id="stop5402" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5398"
+ id="linearGradient7413"
+ gradientUnits="userSpaceOnUse"
+ x1="-1.650571"
+ y1="229.18515"
+ x2="6.1053252"
+ y2="250.19063" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7659">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop7661" />
+ <stop
+ style="stop-color:#555753;stop-opacity:0;"
+ offset="1"
+ id="stop7663" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7659"
+ id="radialGradient7411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.973425,0,0,0.24,0.401944,173.945)"
+ cx="15.125"
+ cy="229.39583"
+ fx="15.125"
+ fy="229.39583"
+ r="9.375" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5388">
+ <stop
+ style="stop-color:#bcd2e9;stop-opacity:1"
+ offset="0"
+ id="stop5390" />
+ <stop
+ style="stop-color:#93b6db;stop-opacity:1"
+ offset="1"
+ id="stop5392" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5388"
+ id="radialGradient7409"
+ gradientUnits="userSpaceOnUse"
+ cx="2.96875"
+ cy="240.416"
+ fx="2.96875"
+ fy="240.416"
+ r="8.96875" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7629">
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="0"
+ id="stop7631" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1"
+ offset="1"
+ id="stop7633" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7629"
+ id="linearGradient7407"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(235.4321,-644.2117)"
+ x1="-164.73708"
+ y1="182.09869"
+ x2="-162.92517"
+ y2="182.10544" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.672167"
+ inkscape:cx="14.098689"
+ inkscape:cy="13.127552"
+ inkscape:current-layer="draw_zoom"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="1680"
+ inkscape:window-height="975"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata7365">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g7387"
+ transform="translate(-1,-1)">
+ <g
+ inkscape:label="#g18331"
+ transform="translate(295.0516,397.0022)"
+ id="draw_zoom">
+ <rect
+ transform="matrix(0.707107,-0.707107,0.707107,0.707107,0,0)"
+ ry="1.4928225"
+ rx="1.4928225"
+ y="-467.01642"
+ x="70.877777"
+ height="9.0625086"
+ width="2.5000021"
+ id="rect18273"
+ style="fill:url(#linearGradient7407);fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1.00000107;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ transform="matrix(1.003826,0,0,1,-288.0306,-622.4396)"
+ d="M 11.4375 235.40625 A 8.46875 8.46875 0 1 1 -5.5,235.40625 A 8.46875 8.46875 0 1 1 11.4375 235.40625 z"
+ sodipodi:ry="8.46875"
+ sodipodi:rx="8.46875"
+ sodipodi:cy="235.40625"
+ sodipodi:cx="2.96875"
+ id="path18275"
+ style="fill:url(#radialGradient7409);fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.99809253;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="czccc"
+ id="path18277"
+ d="M -292.15418,-386.77986 C -292.15418,-386.77986 -288.74097,-385.87708 -284.98838,-385.87708 C -281.2922,-385.87708 -277.82258,-387.68264 -277.82258,-387.68264 C -277.82258,-387.68264 -278.8839,-394.00208 -284.98838,-394.00208 C -291.88279,-393.88923 -292.15418,-386.77986 -292.15418,-386.77986 z "
+ style="opacity:0.2857143;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ transform="matrix(0.885609,0,0,0.885612,-287.6784,-595.4806)"
+ d="M 11.4375 235.40625 A 8.46875 8.46875 0 1 1 -5.5,235.40625 A 8.46875 8.46875 0 1 1 11.4375 235.40625 z"
+ sodipodi:ry="8.46875"
+ sodipodi:rx="8.46875"
+ sodipodi:cy="235.40625"
+ sodipodi:cx="2.96875"
+ id="path18279"
+ style="opacity:0.8;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:white;stroke-width:1.12916505;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.119412,0,0,1.555533,-300.897,-733.5249)"
+ d="M 24.875 228.875 A 9.375 2.25 0 1 1 6.125,228.875 A 9.375 2.25 0 1 1 24.875 228.875 z"
+ sodipodi:ry="2.25"
+ sodipodi:rx="9.375"
+ sodipodi:cy="228.875"
+ sodipodi:cx="15.5"
+ id="path18281"
+ style="opacity:0.2;fill:url(#radialGradient7411);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.6;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient7413);stroke-width:1.2950778;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path5396"
+ sodipodi:cx="2.96875"
+ sodipodi:cy="235.40625"
+ sodipodi:rx="8.46875"
+ sodipodi:ry="8.46875"
+ d="M 11.4375 235.40625 A 8.46875 8.46875 0 1 1 -5.5,235.40625 A 8.46875 8.46875 0 1 1 11.4375 235.40625 z"
+ transform="matrix(0.770704,0,0,0.773608,-287.3127,-569.1141)" />
+ <g
+ id="g5768"
+ style="opacity:0.8;display:inline"
+ transform="matrix(1.0434783,0,0,1,-292.35595,-393.7522)">
+ <path
+ id="path5760"
+ d="M 5.3328369,4 L 2,7 L 5.3328369,10 L 5.3328369,4 z M 8.697421,4 L 8.697421,10 L 12,7 L 8.697421,4 z "
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#729fcf;stroke-width:1.46841753;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ sodipodi:nodetypes="cccccccc" />
+ <rect
+ ry="0"
+ rx="0"
+ y="4.75"
+ x="5"
+ height="4"
+ width="4"
+ id="rect5752"
+ style="opacity:1;fill:#729fcf;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ </g>
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+ id="rect5754"
+ width="6"
+ height="2"
+ x="-288.30161"
+ y="-388.0022"
+ rx="0"
+ ry="0" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="M -287.0516,-389.7522 L -290.0516,-386.7522 L -287.0516,-383.7522 L -287.0516,-389.7522"
+ id="path5756" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="M -283.0516,-389.7522 L -280.0516,-386.7522 L -283.0516,-383.7522 L -283.0516,-389.7522"
+ id="path5758" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/data/icons/22x22/actions/zoom.png b/data/icons/22x22/actions/zoom.png
new file mode 100644
index 00000000..aa5be522
--- /dev/null
+++ b/data/icons/22x22/actions/zoom.png
Binary files differ
diff --git a/data/icons/22x22/actions/zoom.svg b/data/icons/22x22/actions/zoom.svg
new file mode 100644
index 00000000..bff113b8
--- /dev/null
+++ b/data/icons/22x22/actions/zoom.svg
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg7360"
+ sodipodi:version="0.32"
+ inkscape:version="0.45+devel"
+ version="1.0"
+ sodipodi:docbase="/home/luca/Desktop/22x22/actions"
+ sodipodi:docname="zoom-fit-page.svg"
+ inkscape:export-filename="/home/andreas/project/misc icons/22x22/actions/zoom-fit-width.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs7362">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5398">
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop5400" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:0;"
+ offset="1"
+ id="stop5402" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5398"
+ id="linearGradient7413"
+ gradientUnits="userSpaceOnUse"
+ x1="-1.650571"
+ y1="229.18515"
+ x2="6.1053252"
+ y2="250.19063" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7659">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop7661" />
+ <stop
+ style="stop-color:#555753;stop-opacity:0;"
+ offset="1"
+ id="stop7663" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7659"
+ id="radialGradient7411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.973425,0,0,0.24,0.401944,173.945)"
+ cx="15.125"
+ cy="229.39583"
+ fx="15.125"
+ fy="229.39583"
+ r="9.375" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5388">
+ <stop
+ style="stop-color:#bcd2e9;stop-opacity:1"
+ offset="0"
+ id="stop5390" />
+ <stop
+ style="stop-color:#93b6db;stop-opacity:1"
+ offset="1"
+ id="stop5392" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5388"
+ id="radialGradient7409"
+ gradientUnits="userSpaceOnUse"
+ cx="2.96875"
+ cy="240.416"
+ fx="2.96875"
+ fy="240.416"
+ r="8.96875" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7629">
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="0"
+ id="stop7631" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1"
+ offset="1"
+ id="stop7633" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7629"
+ id="linearGradient7407"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(235.4321,-644.2117)"
+ x1="-164.73708"
+ y1="182.09869"
+ x2="-162.92517"
+ y2="182.10544" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.672167"
+ inkscape:cx="14.098689"
+ inkscape:cy="13.127552"
+ inkscape:current-layer="draw_zoom"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="1270"
+ inkscape:window-height="922"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata7365">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g7387"
+ transform="translate(-1,-1)">
+ <g
+ inkscape:label="#g18331"
+ transform="translate(295.0516,397.0022)"
+ id="draw_zoom">
+ <rect
+ transform="matrix(0.707107,-0.707107,0.707107,0.707107,0,0)"
+ ry="1.4928225"
+ rx="1.4928225"
+ y="-467.01642"
+ x="70.877777"
+ height="9.0625086"
+ width="2.5000021"
+ id="rect18273"
+ style="fill:url(#linearGradient7407);fill-opacity:1;fill-rule:nonzero;stroke:#555753;stroke-width:1.00000107;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ transform="matrix(1.003826,0,0,1,-288.0306,-622.4396)"
+ d="M 11.4375 235.40625 A 8.46875 8.46875 0 1 1 -5.5,235.40625 A 8.46875 8.46875 0 1 1 11.4375 235.40625 z"
+ sodipodi:ry="8.46875"
+ sodipodi:rx="8.46875"
+ sodipodi:cy="235.40625"
+ sodipodi:cx="2.96875"
+ id="path18275"
+ style="fill:url(#radialGradient7409);fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.99809253;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="czccc"
+ id="path18277"
+ d="M -292.15418,-386.77986 C -292.15418,-386.77986 -288.74097,-385.87708 -284.98838,-385.87708 C -281.2922,-385.87708 -277.82258,-387.68264 -277.82258,-387.68264 C -277.82258,-387.68264 -278.8839,-394.00208 -284.98838,-394.00208 C -291.88279,-393.88923 -292.15418,-386.77986 -292.15418,-386.77986 z "
+ style="opacity:0.2857143;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ transform="matrix(0.885609,0,0,0.885612,-287.6784,-595.4806)"
+ d="M 11.4375 235.40625 A 8.46875 8.46875 0 1 1 -5.5,235.40625 A 8.46875 8.46875 0 1 1 11.4375 235.40625 z"
+ sodipodi:ry="8.46875"
+ sodipodi:rx="8.46875"
+ sodipodi:cy="235.40625"
+ sodipodi:cx="2.96875"
+ id="path18279"
+ style="opacity:0.8;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:white;stroke-width:1.12916505;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.119412,0,0,1.555533,-300.897,-733.5249)"
+ d="M 24.875 228.875 A 9.375 2.25 0 1 1 6.125,228.875 A 9.375 2.25 0 1 1 24.875 228.875 z"
+ sodipodi:ry="2.25"
+ sodipodi:rx="9.375"
+ sodipodi:cy="228.875"
+ sodipodi:cx="15.5"
+ id="path18281"
+ style="opacity:0.2;fill:url(#radialGradient7411);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.6;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient7413);stroke-width:1.2950778;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path5396"
+ sodipodi:cx="2.96875"
+ sodipodi:cy="235.40625"
+ sodipodi:rx="8.46875"
+ sodipodi:ry="8.46875"
+ d="M 11.4375 235.40625 A 8.46875 8.46875 0 1 1 -5.5,235.40625 A 8.46875 8.46875 0 1 1 11.4375 235.40625 z"
+ transform="matrix(0.770704,0,0,0.773608,-287.3127,-569.1141)" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/data/icons/22x22/apps/Makefile.am b/data/icons/22x22/apps/Makefile.am
new file mode 100644
index 00000000..30c03967
--- /dev/null
+++ b/data/icons/22x22/apps/Makefile.am
@@ -0,0 +1,16 @@
+themedir = $(datadir)/icons/hicolor
+size = 22x22
+context = apps
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ evince.png
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/22x22/apps/evince.png b/data/icons/22x22/apps/evince.png
new file mode 100644
index 00000000..e8b8c12e
--- /dev/null
+++ b/data/icons/22x22/apps/evince.png
Binary files differ
diff --git a/data/icons/22x22/mimetypes/Makefile.am b/data/icons/22x22/mimetypes/Makefile.am
new file mode 100644
index 00000000..b81bf64d
--- /dev/null
+++ b/data/icons/22x22/mimetypes/Makefile.am
@@ -0,0 +1,14 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 22x22
+context = mimetypes
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ x-office-presentation.png
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
diff --git a/data/icons/22x22/mimetypes/x-office-presentation.png b/data/icons/22x22/mimetypes/x-office-presentation.png
new file mode 100644
index 00000000..6c8fb624
--- /dev/null
+++ b/data/icons/22x22/mimetypes/x-office-presentation.png
Binary files differ
diff --git a/data/icons/24x24/Makefile.am b/data/icons/24x24/Makefile.am
new file mode 100644
index 00000000..b02d3a8c
--- /dev/null
+++ b/data/icons/24x24/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = actions apps mimetypes
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/24x24/actions/Makefile.am b/data/icons/24x24/actions/Makefile.am
new file mode 100644
index 00000000..f44f8b6b
--- /dev/null
+++ b/data/icons/24x24/actions/Makefile.am
@@ -0,0 +1,23 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 24x24
+context = actions
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ stock_filters-invert.png \
+ view-page-continuous.png \
+ view-page-facing.png \
+ zoom.png \
+ zoom-fit-height.png \
+ zoom-fit-width.png \
+ object-rotate-left.png \
+ object-rotate-right.png
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/24x24/actions/object-rotate-left.png b/data/icons/24x24/actions/object-rotate-left.png
new file mode 100644
index 00000000..29aa9ab5
--- /dev/null
+++ b/data/icons/24x24/actions/object-rotate-left.png
Binary files differ
diff --git a/data/icons/24x24/actions/object-rotate-right.png b/data/icons/24x24/actions/object-rotate-right.png
new file mode 100644
index 00000000..dea855ac
--- /dev/null
+++ b/data/icons/24x24/actions/object-rotate-right.png
Binary files differ
diff --git a/data/icons/24x24/actions/stock_filters-invert.png b/data/icons/24x24/actions/stock_filters-invert.png
new file mode 100644
index 00000000..fd459a1c
--- /dev/null
+++ b/data/icons/24x24/actions/stock_filters-invert.png
Binary files differ
diff --git a/data/icons/24x24/actions/view-page-continuous.png b/data/icons/24x24/actions/view-page-continuous.png
new file mode 100644
index 00000000..00b411ca
--- /dev/null
+++ b/data/icons/24x24/actions/view-page-continuous.png
Binary files differ
diff --git a/data/icons/24x24/actions/view-page-facing.png b/data/icons/24x24/actions/view-page-facing.png
new file mode 100644
index 00000000..cb9891bc
--- /dev/null
+++ b/data/icons/24x24/actions/view-page-facing.png
Binary files differ
diff --git a/data/icons/24x24/actions/zoom-fit-height.png b/data/icons/24x24/actions/zoom-fit-height.png
new file mode 100644
index 00000000..012ff4a0
--- /dev/null
+++ b/data/icons/24x24/actions/zoom-fit-height.png
Binary files differ
diff --git a/data/icons/24x24/actions/zoom-fit-width.png b/data/icons/24x24/actions/zoom-fit-width.png
new file mode 100644
index 00000000..cb877a7e
--- /dev/null
+++ b/data/icons/24x24/actions/zoom-fit-width.png
Binary files differ
diff --git a/data/icons/24x24/actions/zoom.png b/data/icons/24x24/actions/zoom.png
new file mode 100644
index 00000000..3b0c6ff5
--- /dev/null
+++ b/data/icons/24x24/actions/zoom.png
Binary files differ
diff --git a/data/icons/24x24/apps/Makefile.am b/data/icons/24x24/apps/Makefile.am
new file mode 100644
index 00000000..ff718d9a
--- /dev/null
+++ b/data/icons/24x24/apps/Makefile.am
@@ -0,0 +1,16 @@
+themedir = $(datadir)/icons/hicolor
+size = 24x24
+context = apps
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ evince.png
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/24x24/apps/evince.png b/data/icons/24x24/apps/evince.png
new file mode 100644
index 00000000..0e6f3690
--- /dev/null
+++ b/data/icons/24x24/apps/evince.png
Binary files differ
diff --git a/data/icons/24x24/mimetypes/Makefile.am b/data/icons/24x24/mimetypes/Makefile.am
new file mode 100644
index 00000000..abc9554a
--- /dev/null
+++ b/data/icons/24x24/mimetypes/Makefile.am
@@ -0,0 +1,14 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 24x24
+context = mimetypes
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ x-office-presentation.png
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
diff --git a/data/icons/24x24/mimetypes/x-office-presentation.png b/data/icons/24x24/mimetypes/x-office-presentation.png
new file mode 100644
index 00000000..4133d22a
--- /dev/null
+++ b/data/icons/24x24/mimetypes/x-office-presentation.png
Binary files differ
diff --git a/data/icons/32x32/Makefile.am b/data/icons/32x32/Makefile.am
new file mode 100644
index 00000000..02d9f743
--- /dev/null
+++ b/data/icons/32x32/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = actions mimetypes
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/32x32/actions/Makefile.am b/data/icons/32x32/actions/Makefile.am
new file mode 100644
index 00000000..09e20499
--- /dev/null
+++ b/data/icons/32x32/actions/Makefile.am
@@ -0,0 +1,19 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 32x32
+context = actions
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ object-rotate-left.png \
+ object-rotate-right.png \
+ view-page-continuous.png \
+ view-page-facing.png
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/32x32/actions/object-rotate-left.png b/data/icons/32x32/actions/object-rotate-left.png
new file mode 100644
index 00000000..26e74b06
--- /dev/null
+++ b/data/icons/32x32/actions/object-rotate-left.png
Binary files differ
diff --git a/data/icons/32x32/actions/object-rotate-right.png b/data/icons/32x32/actions/object-rotate-right.png
new file mode 100644
index 00000000..9164b5d9
--- /dev/null
+++ b/data/icons/32x32/actions/object-rotate-right.png
Binary files differ
diff --git a/data/icons/32x32/actions/view-page-continuous.png b/data/icons/32x32/actions/view-page-continuous.png
new file mode 100644
index 00000000..405b3708
--- /dev/null
+++ b/data/icons/32x32/actions/view-page-continuous.png
Binary files differ
diff --git a/data/icons/32x32/actions/view-page-facing.png b/data/icons/32x32/actions/view-page-facing.png
new file mode 100644
index 00000000..9dd9d7fa
--- /dev/null
+++ b/data/icons/32x32/actions/view-page-facing.png
Binary files differ
diff --git a/data/icons/32x32/mimetypes/Makefile.am b/data/icons/32x32/mimetypes/Makefile.am
new file mode 100644
index 00000000..014f357f
--- /dev/null
+++ b/data/icons/32x32/mimetypes/Makefile.am
@@ -0,0 +1,14 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 32x32
+context = mimetypes
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ x-office-presentation.png
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
diff --git a/data/icons/32x32/mimetypes/x-office-presentation.png b/data/icons/32x32/mimetypes/x-office-presentation.png
new file mode 100644
index 00000000..251800d4
--- /dev/null
+++ b/data/icons/32x32/mimetypes/x-office-presentation.png
Binary files differ
diff --git a/data/icons/48x48/Makefile.am b/data/icons/48x48/Makefile.am
new file mode 100644
index 00000000..ae033087
--- /dev/null
+++ b/data/icons/48x48/Makefile.am
@@ -0,0 +1,4 @@
+SUBDIRS = actions apps
+
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/48x48/actions/Makefile.am b/data/icons/48x48/actions/Makefile.am
new file mode 100644
index 00000000..a8047edf
--- /dev/null
+++ b/data/icons/48x48/actions/Makefile.am
@@ -0,0 +1,20 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 48x48
+context = actions
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ close.png \
+ view-page-continuous.png \
+ view-page-facing.png \
+ resize-se.png \
+ resize-sw.png
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/48x48/actions/close.png b/data/icons/48x48/actions/close.png
new file mode 100644
index 00000000..ad0e1eaa
--- /dev/null
+++ b/data/icons/48x48/actions/close.png
Binary files differ
diff --git a/data/icons/48x48/actions/resize-se.png b/data/icons/48x48/actions/resize-se.png
new file mode 100644
index 00000000..374314ba
--- /dev/null
+++ b/data/icons/48x48/actions/resize-se.png
Binary files differ
diff --git a/data/icons/48x48/actions/resize-sw.png b/data/icons/48x48/actions/resize-sw.png
new file mode 100644
index 00000000..fa216283
--- /dev/null
+++ b/data/icons/48x48/actions/resize-sw.png
Binary files differ
diff --git a/data/icons/48x48/actions/view-page-continuous.png b/data/icons/48x48/actions/view-page-continuous.png
new file mode 100644
index 00000000..d70e49f3
--- /dev/null
+++ b/data/icons/48x48/actions/view-page-continuous.png
Binary files differ
diff --git a/data/icons/48x48/actions/view-page-facing.png b/data/icons/48x48/actions/view-page-facing.png
new file mode 100644
index 00000000..bd725138
--- /dev/null
+++ b/data/icons/48x48/actions/view-page-facing.png
Binary files differ
diff --git a/data/icons/48x48/apps/Makefile.am b/data/icons/48x48/apps/Makefile.am
new file mode 100644
index 00000000..8fb3b67b
--- /dev/null
+++ b/data/icons/48x48/apps/Makefile.am
@@ -0,0 +1,16 @@
+themedir = $(datadir)/icons/hicolor
+size = 48x48
+context = apps
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ evince.png
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/48x48/apps/evince.png b/data/icons/48x48/apps/evince.png
new file mode 100644
index 00000000..f0b382fd
--- /dev/null
+++ b/data/icons/48x48/apps/evince.png
Binary files differ
diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am
new file mode 100644
index 00000000..6101c565
--- /dev/null
+++ b/data/icons/Makefile.am
@@ -0,0 +1,4 @@
+SUBDIRS = 16x16 22x22 24x24 32x32 48x48 scalable
+
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/scalable/Makefile.am b/data/icons/scalable/Makefile.am
new file mode 100644
index 00000000..b02d3a8c
--- /dev/null
+++ b/data/icons/scalable/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = actions apps mimetypes
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/scalable/actions/Makefile.am b/data/icons/scalable/actions/Makefile.am
new file mode 100644
index 00000000..45fbb93c
--- /dev/null
+++ b/data/icons/scalable/actions/Makefile.am
@@ -0,0 +1,15 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = scalable
+context = actions
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ object-rotate-left.svg \
+ object-rotate-right.svg
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
diff --git a/data/icons/scalable/actions/object-rotate-left.svg b/data/icons/scalable/actions/object-rotate-left.svg
new file mode 100644
index 00000000..82f82e78
--- /dev/null
+++ b/data/icons/scalable/actions/object-rotate-left.svg
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45"
+ version="1.0"
+ sodipodi:docbase="/home/dobey/Projects/mate-icon-theme/scalable/actions"
+ sodipodi:docname="object-rotate-left.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/lapo/Desktop/rotate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient6924">
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:1"
+ offset="0"
+ id="stop6926" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop6928" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3263">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3265" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3267" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3209">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3211" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3213" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3263"
+ id="linearGradient3315"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,1,48.99999,-118)"
+ x1="19.375"
+ y1="27.371426"
+ x2="17.167892"
+ y2="43.640007" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3263"
+ id="linearGradient3317"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,1,48.99999,-118)"
+ x1="21.875"
+ y1="8.75"
+ x2="0.88711649"
+ y2="31.759331" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3209"
+ id="radialGradient3321"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.537849,0,7.842131)"
+ cx="12.15625"
+ cy="16.96875"
+ fx="12.15625"
+ fy="16.96875"
+ r="7.84375" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924"
+ id="linearGradient6930"
+ x1="22.125"
+ y1="-75.955933"
+ x2="22.125"
+ y2="-148.64252"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#afafaf"
+ borderopacity="1"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="43.450724"
+ inkscape:cy="42.078559"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ width="48px"
+ height="48px"
+ gridspacingx="0.5px"
+ gridspacingy="0.5px"
+ inkscape:showpageshadow="false"
+ borderlayer="true"
+ gridempspacing="2"
+ inkscape:window-width="1085"
+ inkscape:window-height="880"
+ inkscape:window-x="10"
+ inkscape:window-y="48"
+ showgrid="false"
+ showguides="true"
+ showborder="true"
+ inkscape:guide-bbox="true"
+ inkscape:grid-points="true" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Lapo Calamandrei</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+ <dc:title>Rotate Left</dc:title>
+ <dc:date>2006-10-02</dc:date>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>object</rdf:li>
+ <rdf:li>rotate</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/SourceCode" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Livello 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <g
+ id="g3486"
+ transform="translate(-2,120)">
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/lapo/Desktop/rotate.png"
+ transform="matrix(-2.67729,0,0,2.133333,57.5458,-117.2)"
+ d="M 20 16.96875 A 7.84375 4.21875 0 1 1 4.3125,16.96875 A 7.84375 4.21875 0 1 1 20 16.96875 z"
+ sodipodi:ry="4.21875"
+ sodipodi:rx="7.84375"
+ sodipodi:cy="16.96875"
+ sodipodi:cx="12.15625"
+ id="path3275"
+ style="opacity:0.15;color:#000000;fill:url(#radialGradient3321);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.4;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ style="color:#000000;fill:url(#linearGradient6930);fill-opacity:1;fill-rule:nonzero;stroke:#ce5c00;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:1.4;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 36.84375,-115.5 C 25.398954,-115.5 16.5,-106.41493 16.5,-95.5 L 16.5,-92.5 L 10,-92.5 C 9.601905,-92.496959 9.243526,-92.258098 9.087523,-91.89183 C 8.93152,-91.525563 9.007607,-91.101651 9.28125,-90.8125 L 22.25,-76.78125 C 22.439303,-76.576476 22.705506,-76.460041 22.984375,-76.460041 C 23.263244,-76.460041 23.529447,-76.576476 23.71875,-76.78125 L 36.65625,-90.8125 C 36.933974,-91.105757 37.008042,-91.537281 36.844006,-91.906364 C 36.679969,-92.275446 36.310029,-92.509633 35.90625,-92.5 L 29.5,-92.5 L 29.5,-95.5 C 29.500001,-97.607932 30.224447,-99.378169 31.5,-100.59375 C 32.778286,-101.81193 34.631337,-102.5 36.84375,-102.5 L 45.5,-102.5 C 46.052262,-102.50006 46.499945,-102.94774 46.5,-103.5 L 46.5,-114.5 C 46.499945,-115.05226 46.052262,-115.49994 45.5,-115.5 L 36.84375,-115.5 z "
+ id="path5948" />
+ <path
+ sodipodi:nodetypes="ccccccscc"
+ id="path3279"
+ d="M 17.499993,-91.5 L 17.499993,-95.5 C 17.499993,-105.87535 25.896261,-114.5 36.812493,-114.5 L 45.499993,-114.5 L 45.499993,-103.5 L 36.843743,-103.5 C 34.420315,-103.5 32.303004,-102.73293 30.812493,-101.3125 C 29.321982,-99.892067 28.499993,-97.841924 28.499993,-95.5 L 28.499993,-91.5"
+ style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3317);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:1.4;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path3281"
+ d="M 28.499993,-91.5 L 35.906243,-91.5 L 22.968743,-77.46875 L 9.999993,-91.5 L 17.499993,-91.5"
+ style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3315);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:1.4;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+</svg>
diff --git a/data/icons/scalable/actions/object-rotate-right.svg b/data/icons/scalable/actions/object-rotate-right.svg
new file mode 100644
index 00000000..3f2ac853
--- /dev/null
+++ b/data/icons/scalable/actions/object-rotate-right.svg
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45"
+ version="1.0"
+ sodipodi:docbase="/home/dobey/Projects/mate-icon-theme/scalable/actions"
+ sodipodi:docname="object-rotate-right.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/lapo/Desktop/rotate.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <linearGradient
+ id="linearGradient6950"
+ inkscape:collect="always">
+ <stop
+ id="stop6952"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1" />
+ <stop
+ id="stop6954"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3263">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3265" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3267" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3209">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3211" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3213" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3209"
+ id="radialGradient6966"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.537849,0,7.842131)"
+ cx="12.15625"
+ cy="16.96875"
+ fx="12.15625"
+ fy="16.96875"
+ r="7.84375" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6950"
+ id="linearGradient6968"
+ gradientUnits="userSpaceOnUse"
+ x1="22.125"
+ y1="-75.955933"
+ x2="22.125"
+ y2="-148.64252" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3263"
+ id="linearGradient6970"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,1,48.99999,-118)"
+ x1="18.5"
+ y1="5.625"
+ x2="26.262117"
+ y2="33.009331" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3263"
+ id="linearGradient6972"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,1,48.99999,-118)"
+ x1="19.375"
+ y1="27.371426"
+ x2="17.167892"
+ y2="43.640007" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#afafaf"
+ borderopacity="1"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="82.361665"
+ inkscape:cy="19.90492"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ width="48px"
+ height="48px"
+ gridspacingx="0.5px"
+ gridspacingy="0.5px"
+ inkscape:showpageshadow="false"
+ borderlayer="true"
+ gridempspacing="2"
+ inkscape:window-width="1085"
+ inkscape:window-height="880"
+ inkscape:window-x="379"
+ inkscape:window-y="59"
+ showgrid="false"
+ showguides="true"
+ showborder="false"
+ inkscape:guide-bbox="true"
+ inkscape:grid-points="true" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Lapo Calamandrei</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+ <dc:title>Rotate Left</dc:title>
+ <dc:date>2006-10-02</dc:date>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>object</rdf:li>
+ <rdf:li>rotate</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/SourceCode" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Livello 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <g
+ style="display:inline"
+ id="g6956"
+ transform="matrix(-1,0,0,1,49,120)">
+ <path
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/home/lapo/Desktop/rotate.png"
+ transform="matrix(-2.67729,0,0,2.133333,57.5458,-117.2)"
+ d="M 20 16.96875 A 7.84375 4.21875 0 1 1 4.3125,16.96875 A 7.84375 4.21875 0 1 1 20 16.96875 z"
+ sodipodi:ry="4.21875"
+ sodipodi:rx="7.84375"
+ sodipodi:cy="16.96875"
+ sodipodi:cx="12.15625"
+ id="path6958"
+ style="opacity:0.15;color:#000000;fill:url(#radialGradient6966);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.4;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ sodipodi:type="arc" />
+ <path
+ style="color:#000000;fill:url(#linearGradient6968);fill-opacity:1;fill-rule:nonzero;stroke:#ce5c00;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:1.4;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ d="M 36.84375,-115.5 C 25.398954,-115.5 16.5,-106.41493 16.5,-95.5 L 16.5,-92.5 L 10,-92.5 C 9.601905,-92.496959 9.243526,-92.258098 9.087523,-91.89183 C 8.93152,-91.525563 9.007607,-91.101651 9.28125,-90.8125 L 22.25,-76.78125 C 22.439303,-76.576476 22.705506,-76.460041 22.984375,-76.460041 C 23.263244,-76.460041 23.529447,-76.576476 23.71875,-76.78125 L 36.65625,-90.8125 C 36.933974,-91.105757 37.008042,-91.537281 36.844006,-91.906364 C 36.679969,-92.275446 36.310029,-92.509633 35.90625,-92.5 L 29.5,-92.5 L 29.5,-95.5 C 29.500001,-97.607932 30.224447,-99.378169 31.5,-100.59375 C 32.778286,-101.81193 34.631337,-102.5 36.84375,-102.5 L 45.5,-102.5 C 46.052262,-102.50006 46.499945,-102.94774 46.5,-103.5 L 46.5,-114.5 C 46.499945,-115.05226 46.052262,-115.49994 45.5,-115.5 L 36.84375,-115.5 z "
+ id="path6960" />
+ <path
+ sodipodi:nodetypes="ccccccscc"
+ id="path6962"
+ d="M 17.499993,-91.5 L 17.499993,-95.5 C 17.499993,-105.87535 25.896261,-114.5 36.812493,-114.5 L 45.499993,-114.5 L 45.499993,-103.5 L 36.843743,-103.5 C 34.420315,-103.5 32.303004,-102.73293 30.812493,-101.3125 C 29.321982,-99.892067 28.499993,-97.841924 28.499993,-95.5 L 28.499993,-91.5"
+ style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient6970);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:1.4;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path6964"
+ d="M 28.499993,-91.5 L 35.906243,-91.5 L 22.968743,-77.46875 L 9.999993,-91.5 L 17.499993,-91.5"
+ style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient6972);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:1.4;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+ </g>
+</svg>
diff --git a/data/icons/scalable/apps/Makefile.am b/data/icons/scalable/apps/Makefile.am
new file mode 100644
index 00000000..8898fbb2
--- /dev/null
+++ b/data/icons/scalable/apps/Makefile.am
@@ -0,0 +1,16 @@
+themedir = $(datadir)/icons/hicolor
+size = scalable
+context = apps
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ evince.svg
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/data/icons/scalable/apps/evince.svg b/data/icons/scalable/apps/evince.svg
new file mode 100644
index 00000000..9b0332fb
--- /dev/null
+++ b/data/icons/scalable/apps/evince.svg
@@ -0,0 +1,500 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ inkscape:export-ydpi="90.000000"
+ inkscape:export-xdpi="90.000000"
+ inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
+ width="48px"
+ height="48px"
+ id="svg11300"
+ sodipodi:version="0.32"
+ inkscape:version="0.43"
+ sodipodi:docbase="/home/jimmac/gfx/ximian/art/icons/application-icons"
+ sodipodi:docname="evince.svg">
+ <defs
+ id="defs3">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3507">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3509" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3511" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3497">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3499" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.56730771;"
+ offset="1"
+ id="stop3501" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4598">
+ <stop
+ style="stop-color:#e6eef7;stop-opacity:1;"
+ offset="0"
+ id="stop4600" />
+ <stop
+ style="stop-color:#8ab0d8;stop-opacity:1;"
+ offset="1"
+ id="stop4602" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4590">
+ <stop
+ style="stop-color:#cc0000;stop-opacity:1;"
+ offset="0"
+ id="stop4592" />
+ <stop
+ style="stop-color:#ffa2a2;stop-opacity:1;"
+ offset="1"
+ id="stop4594" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4582">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4584" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop4586" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4570">
+ <stop
+ style="stop-color:#eceeea;stop-opacity:1;"
+ offset="0"
+ id="stop4572" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1;"
+ offset="1"
+ id="stop4574" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11520">
+ <stop
+ id="stop11522"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop11524"
+ offset="1.0000000"
+ style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11508"
+ inkscape:collect="always">
+ <stop
+ id="stop11510"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop11512"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11494"
+ inkscape:collect="always">
+ <stop
+ id="stop11496"
+ offset="0"
+ style="stop-color:#ef2929;stop-opacity:1;" />
+ <stop
+ id="stop11498"
+ offset="1"
+ style="stop-color:#ef2929;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11415">
+ <stop
+ id="stop11417"
+ offset="0.0000000"
+ style="stop-color:#204a87;stop-opacity:0.0000000;" />
+ <stop
+ style="stop-color:#204a87;stop-opacity:1.0000000;"
+ offset="0.50000000"
+ id="stop11423" />
+ <stop
+ id="stop11419"
+ offset="1"
+ style="stop-color:#204a87;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11399"
+ inkscape:collect="always">
+ <stop
+ id="stop11401"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop11403"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(-60.28571,-0.285714)"
+ y2="34.462429"
+ x2="43.615788"
+ y1="3.7744560"
+ x1="15.828360"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11425"
+ xlink:href="#linearGradient11415"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(-60.57143,0.000000)"
+ y2="39.033859"
+ x2="35.679932"
+ y1="9.3458843"
+ x1="9.6957054"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11427"
+ xlink:href="#linearGradient11415"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="33.462429"
+ x2="26.758644"
+ y1="19.774456"
+ x1="13.267134"
+ gradientTransform="translate(-60.85714,0.428571)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11439"
+ xlink:href="#linearGradient11415"
+ inkscape:collect="always" />
+ <radialGradient
+ r="8.5000000"
+ fy="39.142857"
+ fx="12.071428"
+ cy="39.142857"
+ cx="12.071428"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.487395,0.000000,20.06483)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11441"
+ xlink:href="#linearGradient11399"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
+ gradientUnits="userSpaceOnUse"
+ r="3.8335034"
+ fy="15.048258"
+ fx="27.577173"
+ cy="15.048258"
+ cx="27.577173"
+ id="radialGradient11500"
+ xlink:href="#linearGradient11494"
+ inkscape:collect="always" />
+ <radialGradient
+ r="3.8335034"
+ fy="16.049133"
+ fx="27.577173"
+ cy="16.049133"
+ cx="27.577173"
+ gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11504"
+ xlink:href="#linearGradient11494"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,2.166583e-14,29.48178)"
+ r="6.5659914"
+ fy="44.565483"
+ fx="30.203562"
+ cy="44.565483"
+ cx="30.203562"
+ id="radialGradient11514"
+ xlink:href="#linearGradient11508"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
+ gradientUnits="userSpaceOnUse"
+ r="20.530962"
+ fy="35.878170"
+ fx="24.445690"
+ cy="35.878170"
+ cx="24.445690"
+ id="radialGradient11526"
+ xlink:href="#linearGradient11520"
+ inkscape:collect="always" />
+ <radialGradient
+ r="6.5659914"
+ fy="44.565483"
+ fx="30.203562"
+ cy="44.565483"
+ cx="30.203562"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,3.185827e-15,29.48178)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient11532"
+ xlink:href="#linearGradient11508"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11508"
+ id="radialGradient1348"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,-1.353344e-14,29.48178)"
+ cx="30.203562"
+ cy="44.565483"
+ fx="30.203562"
+ fy="44.565483"
+ r="6.5659914" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11520"
+ id="radialGradient1350"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.995058,-1.651527e-32,0.000000,1.995058,-24.32488,-35.70087)"
+ cx="24.445690"
+ cy="35.878170"
+ fx="24.445690"
+ fy="35.878170"
+ r="20.530962" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11494"
+ id="radialGradient1352"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
+ cx="27.577173"
+ cy="16.049133"
+ fx="27.577173"
+ fy="16.049133"
+ r="3.8335034" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11494"
+ id="radialGradient1354"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.243453,2.106784e-16,-2.106784e-16,1.243453,-6.713754,-3.742847)"
+ cx="27.577173"
+ cy="15.048258"
+ fx="27.577173"
+ fy="15.048258"
+ r="3.8335034" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11508"
+ id="radialGradient1356"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.000000,0.000000,0.000000,0.338462,2.220359e-14,29.48178)"
+ cx="30.203562"
+ cy="44.565483"
+ fx="30.203562"
+ fy="44.565483"
+ r="6.5659914" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11520"
+ id="radialGradient1366"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.049266,-1.696401e-32,0.000000,2.049266,-25.65002,-37.31089)"
+ cx="24.445690"
+ cy="35.878170"
+ fx="24.445690"
+ fy="35.878170"
+ r="20.530962" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4582"
+ id="radialGradient4588"
+ cx="24.625"
+ cy="38.625"
+ fx="24.625"
+ fy="38.625"
+ r="21.125"
+ gradientTransform="matrix(1,0,0,0.420118,0,22.39793)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4590"
+ id="linearGradient4596"
+ x1="24.689142"
+ y1="24.109001"
+ x2="53.568085"
+ y2="24.109001"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-6.8085e-2,-5.100256)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4598"
+ id="radialGradient4604"
+ cx="24.502396"
+ cy="12.604746"
+ fx="24.502396"
+ fy="12.604746"
+ r="20.507692"
+ gradientTransform="matrix(2.319263,1.846486e-24,-3.426469e-24,2.374685,-32.32511,-17.59985)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3497"
+ id="radialGradient3503"
+ cx="24.621058"
+ cy="19.188286"
+ fx="24.621058"
+ fy="19.188286"
+ r="19.378943"
+ gradientTransform="matrix(2.476948,-1.582729e-16,7.838822e-8,1.851413,-36.36402,-15.71214)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3507"
+ id="radialGradient3513"
+ cx="25.986174"
+ cy="26.786797"
+ fx="25.986174"
+ fy="26.786797"
+ r="15.465359"
+ gradientTransform="matrix(0.863137,0,0,0.438896,3.556549,15.03019)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ stroke="#3465a4"
+ fill="#729fcf"
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="0.25490196"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="23.885378"
+ inkscape:cy="21.61759"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:showpageshadow="false"
+ inkscape:window-width="866"
+ inkscape:window-height="861"
+ inkscape:window-x="597"
+ inkscape:window-y="231" />
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Jakub Steiner</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source>http://jimmac.musichall.cz</dc:source>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+ <dc:title>Evince</dc:title>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/SourceCode" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;color:#000000;fill:url(#radialGradient4588);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path4580"
+ sodipodi:cx="24.625"
+ sodipodi:cy="38.625"
+ sodipodi:rx="21.125"
+ sodipodi:ry="8.875"
+ d="M 45.75 38.625 A 21.125 8.875 0 1 1 3.5,38.625 A 21.125 8.875 0 1 1 45.75 38.625 z" />
+ <rect
+ style="opacity:1;color:#000000;fill:url(#radialGradient4604);fill-opacity:1.0;fill-rule:evenodd;stroke:#3465a4;stroke-width:0.99999988;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect2362"
+ width="40.015385"
+ height="40.995502"
+ x="4.4947042"
+ y="3.5019624"
+ rx="5.25"
+ ry="5.249999" />
+ <rect
+ ry="4.1893401"
+ rx="4.1893401"
+ y="4.5014553"
+ x="5.4887967"
+ height="38.996178"
+ width="38.016666"
+ id="rect4578"
+ style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000048;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.33516487;color:#000000;fill:url(#radialGradient3513);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:20;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3505"
+ sodipodi:cx="25.986174"
+ sodipodi:cy="26.786797"
+ sodipodi:rx="13.965359"
+ sodipodi:ry="6.3639612"
+ d="M 39.951532 26.786797 A 13.965359 6.3639612 0 1 1 12.020815,26.786797 A 13.965359 6.3639612 0 1 1 39.951532 26.786797 z"
+ transform="matrix(1.341772,0,0,0.722222,-10.47234,10.2692)" />
+ <path
+ sodipodi:nodetypes="csscccssc"
+ d="M 7.1259973,31.741117 C 11.765805,27.68571 30.893861,10.081732 25.852282,9.673849 C 23.236513,9.462225 17.109192,11.147428 14.375577,16.263462 C 9.2571747,25.842698 20.796041,27.247528 25.587041,26.667586 C 33.436885,25.444662 42.417893,19.773745 42.417893,19.773745 L 42.287308,26.225495 C 25.462936,30.983654 15.478556,29.674247 9.6155212,23.977042 C 3.9116018,18.434447 17.535095,5.924967 28.574516,7.075922 C 39.972698,8.264281 7.1259973,31.741117 7.1259973,31.741117 z "
+ id="path3495"
+ style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#radialGradient3503);stroke-width:3;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:20;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <path
+ style="opacity:1;color:#000000;fill:url(#linearGradient4596);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="path3695"
+ d="M 6.2421138,32 C 10.881922,27.944593 30.893861,9.456732 25.852282,9.048849 C 23.236513,8.837225 17.109192,10.522428 14.375577,15.638462 C 9.2571747,25.217698 20.796041,26.622528 25.587041,26.042586 C 33.436885,24.819662 43,19.721968 43,19.721968 L 42.994415,24.923718 C 26.170043,29.681877 15.478556,29.049247 9.6155212,23.352042 C 3.9116018,17.809447 17.535095,5.299967 28.574516,6.450922 C 39.972698,7.639281 6.2421138,32 6.2421138,32 z "
+ sodipodi:nodetypes="csscccssc" />
+ <rect
+ y="35"
+ x="10"
+ height="1"
+ width="28"
+ id="rect4626"
+ style="opacity:0.33516487;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ <rect
+ style="opacity:0.33516487;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+ id="rect4628"
+ width="28"
+ height="1"
+ x="10"
+ y="37" />
+ <rect
+ y="39"
+ x="10"
+ height="1"
+ width="18"
+ id="rect4630"
+ style="opacity:0.33516487;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+ </g>
+</svg>
diff --git a/data/icons/scalable/mimetypes/Makefile.am b/data/icons/scalable/mimetypes/Makefile.am
new file mode 100644
index 00000000..0fbf88d4
--- /dev/null
+++ b/data/icons/scalable/mimetypes/Makefile.am
@@ -0,0 +1,14 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = scalable
+context = mimetypes
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+ x-office-presentation.svg
+
+noinst_DATA =
+
+EXTRA_DIST = \
+ $(icons_DATA) \
+ $(noinst_DATA)
diff --git a/data/icons/scalable/mimetypes/x-office-presentation.svg b/data/icons/scalable/mimetypes/x-office-presentation.svg
new file mode 100644
index 00000000..8ded5a23
--- /dev/null
+++ b/data/icons/scalable/mimetypes/x-office-presentation.svg
@@ -0,0 +1,686 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2160"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docbase="/home/hbons/Desktop/Ubuntu Visual Refresh: Discovery"
+ sodipodi:docname="x-office-presentation.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs2162">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3926">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3928" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3930" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3832">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0"
+ id="stop3834" />
+ <stop
+ id="stop3840"
+ offset="0.67355675"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="1"
+ id="stop3836" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3448">
+ <stop
+ style="stop-color:#f57900;stop-opacity:1"
+ offset="0"
+ id="stop3450" />
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:1"
+ offset="1"
+ id="stop3452" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3359">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3361" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3363" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3269">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3271" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3273" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3253">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1;"
+ offset="0"
+ id="stop3255" />
+ <stop
+ style="stop-color:#d3d7cf;stop-opacity:1"
+ offset="1"
+ id="stop3257" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3363">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0"
+ id="stop3365" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:0;"
+ offset="1"
+ id="stop3367" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3860">
+ <stop
+ style="stop-color:#888a85;stop-opacity:1;"
+ offset="0"
+ id="stop3862" />
+ <stop
+ style="stop-color:#555753;stop-opacity:1"
+ offset="1"
+ id="stop3864" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3844">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop3846" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:0;"
+ offset="1"
+ id="stop3848" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3780">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3782" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3784" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3688"
+ inkscape:collect="always">
+ <stop
+ id="stop3690"
+ offset="0"
+ style="stop-color:black;stop-opacity:1;" />
+ <stop
+ id="stop3692"
+ offset="1"
+ style="stop-color:black;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3702">
+ <stop
+ id="stop3704"
+ offset="0"
+ style="stop-color:black;stop-opacity:0;" />
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0.5"
+ id="stop3710" />
+ <stop
+ id="stop3706"
+ offset="1"
+ style="stop-color:black;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3688"
+ id="radialGradient3095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
+ cx="4.9929786"
+ cy="43.5"
+ fx="4.9929786"
+ fy="43.5"
+ r="2.5" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3688"
+ id="radialGradient3097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
+ cx="4.9929786"
+ cy="43.5"
+ fx="4.9929786"
+ fy="43.5"
+ r="2.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3702"
+ id="linearGradient3099"
+ gradientUnits="userSpaceOnUse"
+ x1="25.058096"
+ y1="47.027729"
+ x2="25.058096"
+ y2="39.999443" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3269"
+ id="linearGradient3966"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.2704924,0,0,-1.2704925,-50.516555,48.821273)"
+ x1="14.548253"
+ y1="23.127861"
+ x2="15.581317"
+ y2="26.866568" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3844"
+ id="linearGradient3977"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.972973,0,0,1,-88.837838,-1)"
+ x1="15.470238"
+ y1="-4.5"
+ x2="43"
+ y2="-4.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3860"
+ id="linearGradient3980"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-90,2)"
+ x1="26.357143"
+ y1="2.5714288"
+ x2="29"
+ y2="10.571428" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3832"
+ id="radialGradient3985"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.041059,0,0,0.815965,2.689362,5.4046471)"
+ cx="-65.5"
+ cy="18.5"
+ fx="-65.5"
+ fy="18.5"
+ r="18.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3780"
+ id="linearGradient3990"
+ gradientUnits="userSpaceOnUse"
+ x1="20.134581"
+ y1="29.676609"
+ x2="13.635802"
+ y2="17.022938" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3448"
+ id="linearGradient3992"
+ gradientUnits="userSpaceOnUse"
+ x1="17.696638"
+ y1="29.965809"
+ x2="14.499061"
+ y2="20.717426" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3926"
+ id="radialGradient4157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.3157895,0,29.421053)"
+ cx="24.5"
+ cy="43"
+ fx="24.5"
+ fy="43"
+ r="9.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3253"
+ id="linearGradient4159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(90,-1)"
+ x1="-25.94198"
+ y1="42.406563"
+ x2="-25.94198"
+ y2="45" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3359"
+ id="linearGradient4161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-89,2)"
+ x1="24.5"
+ y1="34"
+ x2="24.5"
+ y2="35" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3363"
+ id="linearGradient4163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-69,-4)"
+ x1="24.857141"
+ y1="39.5"
+ x2="25.5"
+ y2="40" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="-166.8402"
+ inkscape:cy="39.459165"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1440"
+ inkscape:window-height="847"
+ inkscape:window-x="36"
+ inkscape:window-y="188"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:snap-nodes="true"
+ inkscape:snap-bbox="false"
+ objecttolerance="10000"
+ gridtolerance="10000"
+ guidetolerance="10000"
+ showborder="false"
+ inkscape:showpageshadow="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid2561"
+ empspacing="2"
+ visible="true"
+ enabled="true"
+ spacingx="0.5px"
+ spacingy="0.5px" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata2165">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Lapo Calamandrei</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:title>Presentation</dc:title>
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>Based of Hylke Bons Work</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ <cc:license
+ rdf:resource="http://www.gnu.org/licenses/lgpl.html" />
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>presentation</rdf:li>
+ <rdf:li>slides</rdf:li>
+ <rdf:li>powerpoint</rdf:li>
+ <rdf:li>spreadsheet</rdf:li>
+ <rdf:li>impress</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ transform="matrix(1.1999995,0,0,0.7777773,-4.8,11.944489)"
+ inkscape:label="Shadow"
+ id="g3075"
+ style="opacity:0.13963964;display:inline">
+ <g
+ transform="matrix(1.052632,0,0,1.285713,-1.263158,-13.42854)"
+ style="opacity:0.4"
+ id="g3077">
+ <rect
+ style="opacity:1;fill:url(#radialGradient3095);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3079"
+ width="5"
+ height="7"
+ x="38"
+ y="40" />
+ <rect
+ style="opacity:1;fill:url(#radialGradient3097);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3081"
+ width="5"
+ height="7"
+ x="-10"
+ y="-47"
+ transform="scale(-1,-1)" />
+ <rect
+ style="opacity:1;fill:url(#linearGradient3099);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3083"
+ width="28"
+ height="7.0000005"
+ x="10"
+ y="40" />
+ </g>
+ </g>
+ <g
+ id="g4142"
+ transform="translate(90,0)">
+ <path
+ transform="matrix(1,0,0,0.8333338,-89,7.1666452)"
+ d="M 34,43 A 9.5,3 0 1 1 15,43 A 9.5,3 0 1 1 34,43 z"
+ sodipodi:ry="3"
+ sodipodi:rx="9.5"
+ sodipodi:cy="43"
+ sodipodi:cx="24.5"
+ id="path3924"
+ style="opacity:0.2837838;fill:url(#radialGradient4157);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <rect
+ transform="scale(-1,1)"
+ ry="1.0000001"
+ rx="1.0000001"
+ y="34.5"
+ x="63.5"
+ height="9"
+ width="2.0000002"
+ id="rect2466"
+ style="fill:url(#linearGradient4159);fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#d3d7cf;fill-opacity:1;stroke:#999999;stroke-width:0.99999994;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect2472"
+ width="2.0000002"
+ height="12.888889"
+ x="63.5"
+ y="27.611113"
+ rx="1.0000001"
+ ry="1.432099"
+ transform="scale(-1,1)" />
+ <g
+ transform="translate(-21,4)"
+ id="g3125">
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:#d3d7cf;fill-rule:evenodd;stroke:#888a85;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M -49.5,39.5 L -43.5,36"
+ id="path3107" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:#d3d7cf;fill-rule:evenodd;stroke:#888a85;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M -37.5,39.5 L -43.5,36"
+ id="path3109" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:#d3d7cf;fill-rule:evenodd;stroke:#d3d7cf;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="M -49.5,39.5 L -43.5,36"
+ id="path3111" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:#d3d7cf;fill-rule:evenodd;stroke:#d3d7cf;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="M -37.5,39.5 L -43.5,36"
+ id="path3113" />
+ <rect
+ style="fill:#d3d7cf;fill-opacity:1;stroke:#777974;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3115"
+ width="4"
+ height="3.0000002"
+ x="-45.5"
+ y="34.5"
+ rx="1.5000001"
+ ry="1.5000001" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.58113861;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path3119"
+ sodipodi:cx="20.178572"
+ sodipodi:cy="44.67857"
+ sodipodi:rx="1.25"
+ sodipodi:ry="0.96428573"
+ d="M 21.428572,44.67857 A 1.25,0.96428573 0 1 1 18.928572,44.67857 A 1.25,0.96428573 0 1 1 21.428572,44.67857 z"
+ transform="matrix(0.5767767,0,0,0.7476738,-61.13853,6.0950058)" />
+ <rect
+ style="fill:url(#linearGradient4163);fill-opacity:1;stroke:none"
+ id="rect3121"
+ width="3"
+ height="2"
+ x="-45"
+ y="35"
+ rx="1.1250001"
+ ry="1" />
+ </g>
+ </g>
+ <path
+ sodipodi:type="arc"
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.58113861;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4170"
+ sodipodi:cx="20.178572"
+ sodipodi:cy="44.67857"
+ sodipodi:rx="1.25"
+ sodipodi:ry="0.96428573"
+ d="M 21.428572,44.67857 A 1.25,0.96428573 0 1 1 18.928572,44.67857 A 1.25,0.96428573 0 1 1 21.428572,44.67857 z"
+ transform="matrix(0.5767767,0,0,0.7476738,19.86147,10.095006)" />
+ <g
+ id="g4173"
+ transform="translate(90,0)">
+ <rect
+ ry="1.0573044"
+ rx="1.0195435"
+ y="6.5"
+ x="-84.5"
+ height="28"
+ width="38"
+ id="rect2484"
+ style="fill:url(#radialGradient3985);fill-opacity:1;stroke:#babdb6;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccccc"
+ id="path2488"
+ d="M -82.59375,7.4999999 C -83.123321,7.4999999 -83.5,7.7440554 -83.5,8.0871703 L -83.5,32.829314 C -83.5,33.172429 -83.123321,33.416484 -82.59375,33.416484 L -48.40625,33.416484 C -47.87668,33.416484 -47.5,33.172428 -47.5,32.829314 L -47.5,8.0871703 C -47.5,7.7440557 -47.876682,7.4999999 -48.40625,7.4999999 L -82.59375,7.4999999 z"
+ style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1" />
+ <rect
+ y="7"
+ x="-85"
+ height="2"
+ width="39"
+ id="rect2490"
+ style="opacity:0.11711713;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <rect
+ ry="1.5"
+ rx="1.5833334"
+ y="4.5"
+ x="-85.5"
+ height="3"
+ width="40"
+ id="rect2492"
+ style="fill:#babdb6;fill-opacity:1;stroke:url(#linearGradient3980);stroke-width:0.99999982;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ ry="0.5"
+ rx="0.48648649"
+ transform="scale(1,-1)"
+ y="-6"
+ x="-84"
+ height="1"
+ width="37"
+ id="rect2494"
+ style="fill:url(#linearGradient3977);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ ry="0.99999988"
+ rx="0.99999988"
+ transform="matrix(7.3523151e-8,1,1,-1.8380792e-8,0,0)"
+ y="-85"
+ x="5.0000005"
+ height="1.9999998"
+ width="1.9999999"
+ id="rect2496"
+ style="fill:#ffffff;fill-opacity:1;stroke:none" />
+ <rect
+ ry="1.0000001"
+ rx="0.99999988"
+ transform="matrix(7.3523171e-8,1,1,-1.8380787e-8,0,0)"
+ y="-48"
+ x="5.000001"
+ height="2.0000002"
+ width="1.9999999"
+ id="rect2498"
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <g
+ transform="translate(-88,0)"
+ style="opacity:0.12108112"
+ id="g2502">
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.837834;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2504"
+ sodipodi:cx="16.515995"
+ sodipodi:cy="22.291618"
+ sodipodi:rx="4.6972094"
+ sodipodi:ry="4.6972094"
+ d="M 21.213204,22.291618 A 4.6972094,4.6972094 0 1 1 16.554686,17.594568 L 16.515995,22.291618 z"
+ transform="matrix(1.2704924,0,0,1.2704925,-5.483446,-4.8213349)"
+ sodipodi:start="0"
+ sodipodi:end="4.7206261" />
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.06400001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 17.527085,15.532232 C 21.071259,15.234682 23.763908,17.873475 23.467706,21.527025 L 17.499999,21.49994 L 17.527085,15.532232 z"
+ id="path2506"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <path
+ sodipodi:end="4.7206261"
+ sodipodi:start="0"
+ transform="matrix(1.2704924,0,0,1.2704925,-94.483446,-5.8213349)"
+ d="M 21.213204,22.291618 A 4.6972094,4.6972094 0 1 1 16.554686,17.594568 L 16.515995,22.291618 z"
+ sodipodi:ry="4.6972094"
+ sodipodi:rx="4.6972094"
+ sodipodi:cy="22.291618"
+ sodipodi:cx="16.515995"
+ id="path2508"
+ style="fill:url(#linearGradient3992);fill-opacity:1;stroke:#af4e00;stroke-width:0.62967712;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path2510"
+ d="M -71.472915,14.532232 C -67.928741,14.234682 -65.236092,16.873475 -65.532294,20.527025 L -71.500001,20.49994 L -71.472915,14.532232 z"
+ style="fill:#729fcf;fill-opacity:1;stroke:#3465a4;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ transform="matrix(1.2704924,0,0,1.2704925,-94.483446,-5.8213349)"
+ d="M 15.75,18.5625 C 13.977674,18.92812 12.625,20.405564 12.625,22.28125 C 12.625,24.430908 14.381592,26.187501 16.53125,26.1875 C 18.396407,26.1875 19.873194,24.851202 20.25,23.09375 L 16.53125,23.09375 C 16.315632,23.094172 16.108724,23.008705 15.956259,22.856241 C 15.803795,22.703776 15.718328,22.496868 15.71875,22.28125 L 15.75,18.5625 z"
+ id="path2512"
+ style="fill:none;fill-opacity:1;stroke:url(#linearGradient3990);stroke-width:0.83783406;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:original="M 16.53125 17.59375 C 13.93839 17.59375 11.8125 19.68839 11.8125 22.28125 C 11.8125 24.87411 13.93839 27.000001 16.53125 27 C 19.12411 27 21.218751 24.87411 21.21875 22.28125 L 16.53125 22.28125 L 16.5625 17.59375 C 16.548904 17.593638 16.544847 17.593749 16.53125 17.59375 z "
+ inkscape:radius="-0.81083226"
+ sodipodi:type="inkscape:offset" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path2514"
+ d="M -66.536286,19.497742 C -66.692364,17.568713 -68.253498,15.778125 -70.447405,15.561265 L -70.487107,19.480837 L -66.536286,19.497742 z"
+ style="opacity:0.3918919;fill:none;fill-opacity:1;stroke:url(#linearGradient3966);stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ ry="0.5"
+ rx="0.3888889"
+ y="23"
+ x="-59"
+ height="1"
+ width="7"
+ id="rect2516"
+ style="fill:#babdb6;fill-opacity:1;stroke:none" />
+ <rect
+ ry="0.5"
+ rx="0.5"
+ y="21"
+ x="-59"
+ height="1"
+ width="9"
+ id="rect2518"
+ style="fill:#babdb6;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ ry="0.5"
+ rx="0.5"
+ y="19"
+ x="-59"
+ height="1"
+ width="9"
+ id="rect2520"
+ style="fill:#555753;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ ry="0.5"
+ rx="0.44444445"
+ y="14"
+ x="-61"
+ height="1"
+ width="8"
+ id="rect2522"
+ style="fill:#babdb6;fill-opacity:1;stroke:none" />
+ <rect
+ ry="0.5"
+ rx="0.5"
+ y="12"
+ x="-61"
+ height="1"
+ width="9"
+ id="rect2524"
+ style="fill:#555753;fill-opacity:1;stroke:none" />
+ <path
+ sodipodi:nodetypes="ccc"
+ id="path2526"
+ d="M -67,28.5 L -58.461826,28.510369 L -58.528544,25.488699"
+ style="fill:none;fill-rule:evenodd;stroke:#d3d7cf;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccc"
+ id="path2528"
+ d="M -65.5,14.5 L -65.5,12.5 L -62.5,12.5"
+ style="fill:none;fill-rule:evenodd;stroke:#d3d7cf;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
+ <rect
+ style="opacity:0.11711713;fill:url(#linearGradient4161);fill-opacity:1;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2482"
+ width="3"
+ height="2"
+ x="-66"
+ y="35" />
+ </g>
+ </g>
+</svg>
diff --git a/data/org.mate.Evince.gschema.xml.in b/data/org.mate.Evince.gschema.xml.in
new file mode 100644
index 00000000..0ed50e9d
--- /dev/null
+++ b/data/org.mate.Evince.gschema.xml.in
@@ -0,0 +1,51 @@
+<schemalist>
+
+ <enum id="org.mate.Evince.SizingMode">
+ <value nick="best-fit" value="0"/>
+ <value nick="fit-width" value="1"/>
+ <value nick="free" value="2"/>
+ </enum>
+
+ <schema id="org.mate.Evince" path="/org/mate/evince/" gettext-domain="evince">
+ <key name="override-restrictions" type="b">
+ <default>true</default>
+ <_summary>Override document restrictions</_summary>
+ <_description>Override document restrictions, like restriction to copy or to print.</_description>
+ </key>
+ <child name="default" schema="org.mate.Evince.Default"/>
+ </schema>
+
+ <schema id="org.mate.Evince.Default" path="/org/mate/evince/default/" gettext-domain="evince">
+ <key name="show-toolbar" type="b">
+ <default>true</default>
+ </key>
+ <key name="show-sidebar" type="b">
+ <default>true</default>
+ </key>
+ <key name="window-ratio" type="(dd)">
+ <default>(0., 0.)</default>
+ </key>
+ <key name="sizing-mode" enum="org.mate.Evince.SizingMode">
+ <default>'fit-width'</default>
+ </key>
+ <key name="inverted-colors" type="b">
+ <default>false</default>
+ </key>
+ <key name="continuous" type="b">
+ <default>true</default>
+ </key>
+ <key name="dual-page" type="b">
+ <default>false</default>
+ </key>
+ <key name="fullscreen" type="b">
+ <default>false</default>
+ </key>
+ <key name="sidebar-page" type="s">
+ <default>'links'</default>
+ </key>
+ <key name="sidebar-size" type="i">
+ <default>132</default>
+ </key>
+ </schema>
+
+</schemalist>
diff --git a/data/org.mate.evince.Daemon.service.in b/data/org.mate.evince.Daemon.service.in
new file mode 100644
index 00000000..ba7bd537
--- /dev/null
+++ b/data/org.mate.evince.Daemon.service.in
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.mate.evince.Daemon
+Exec=@libexecdir@/evinced
diff --git a/evince-document.h b/evince-document.h
new file mode 100644
index 00000000..3e38c25b
--- /dev/null
+++ b/evince-document.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright © 2009 Christian Persch
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 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 Lesser
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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 EVINCE_DOCUMENT_H
+#define EVINCE_DOCUMENT_H
+
+#define __EV_EVINCE_DOCUMENT_H_INSIDE__
+
+#include <libdocument/ev-annotation.h>
+#include <libdocument/ev-async-renderer.h>
+#include <libdocument/ev-attachment.h>
+#include <libdocument/ev-backends-manager.h>
+#include <libdocument/ev-document-attachments.h>
+#include <libdocument/ev-document-factory.h>
+#include <libdocument/ev-document-find.h>
+#include <libdocument/ev-document-fonts.h>
+#include <libdocument/ev-document-forms.h>
+#include <libdocument/ev-document.h>
+#include <libdocument/ev-document-images.h>
+#include <libdocument/ev-document-info.h>
+#include <libdocument/ev-document-layers.h>
+#include <libdocument/ev-document-print.h>
+#include <libdocument/ev-document-links.h>
+#include <libdocument/ev-document-misc.h>
+#include <libdocument/ev-document-security.h>
+#include <libdocument/ev-document-thumbnails.h>
+#include <libdocument/ev-document-transition.h>
+#include <libdocument/ev-document-type-builtins.h>
+#include <libdocument/ev-file-exporter.h>
+#include <libdocument/ev-file-helpers.h>
+#include <libdocument/ev-form-field.h>
+#include <libdocument/ev-image.h>
+#include <libdocument/ev-init.h>
+#include <libdocument/ev-layer.h>
+#include <libdocument/ev-link-action.h>
+#include <libdocument/ev-link-dest.h>
+#include <libdocument/ev-link.h>
+#include <libdocument/ev-mapping-list.h>
+#include <libdocument/ev-page.h>
+#include <libdocument/ev-render-context.h>
+#include <libdocument/ev-selection.h>
+#include <libdocument/ev-transition-effect.h>
+#include <libdocument/ev-version.h>
+
+#undef __EV_EVINCE_DOCUMENT_H_INSIDE__
+
+#endif /* !EVINCE_DOCUMENT_H */
diff --git a/evince-document.pc.in b/evince-document.pc.in
new file mode 100644
index 00000000..025710cc
--- /dev/null
+++ b/evince-document.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/evince/@EV_API_VERSION@
+backenddir=@libdir@/evince/@EV_BINARY_VERSION@/backends
+
+Name: Evince Document
+Description: MATE document viewer backend library
+Version: @VERSION@
+Requires: gio-2.0 >= @GLIB_REQUIRED@ gtk+-@GTK_API_VERSION@ >= @GTK_REQUIRED@
+Libs: -L${libdir} -levdocument
+Cflags: -I${includedir}
diff --git a/evince-view.h b/evince-view.h
new file mode 100644
index 00000000..8b8d2868
--- /dev/null
+++ b/evince-view.h
@@ -0,0 +1,34 @@
+/*
+* Copyright © 2009 Christian Persch
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 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 Lesser
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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 EVINCE_VIEW_H
+#define EVINCE_VIEW_H
+
+#define __EV_EVINCE_VIEW_H_INSIDE__
+
+#include <libview/ev-job-scheduler.h>
+#include <libview/ev-jobs.h>
+#include <libview/ev-document-model.h>
+#include <libview/ev-print-operation.h>
+#include <libview/ev-view.h>
+#include <libview/ev-view-type-builtins.h>
+#include <libview/ev-stock-icons.h>
+
+#undef __EV_EVINCE_VIEW_H_INSIDE__
+
+#endif /* !EVINCE_VIEW_H */
diff --git a/evince-view.pc.in b/evince-view.pc.in
new file mode 100644
index 00000000..c1077bb3
--- /dev/null
+++ b/evince-view.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/evince/@EV_API_VERSION@
+
+Name: Evince View
+Description: MATE document viewer view library
+Version: @VERSION@
+Requires: evince-document-@EV_API_VERSION@ = @VERSION@ gthread-2.0
+Libs: -L${libdir} -levview
+Cflags: -I${includedir}
diff --git a/help/C/evince.xml b/help/C/evince.xml
new file mode 100644
index 00000000..90e9ce2f
--- /dev/null
+++ b/help/C/evince.xml
@@ -0,0 +1,774 @@
+<?xml version="1.0"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+ <!ENTITY legal SYSTEM "legal.xml">
+ <!ENTITY appversion "0.2">
+ <!ENTITY manrevision "1.1">
+ <!ENTITY date "April 2008">
+ <!ENTITY app "<application>Evince Document Viewer</application>">
+ <!ENTITY appname "Evince Document Viewer">
+]>
+
+<!--
+ (Do not remove this comment block.)
+ Maintained by the MATE Documentation Project
+ http://developer.mate.org/projects/gdp
+ Template version: 2.0 beta
+ Template last modified Apr 11, 2002
+-->
+
+<!-- =============Document Header ============================= -->
+<article id="index" lang="en">
+<!-- please do not change the id; for translations, change lang to -->
+<!-- appropriate code -->
+ <articleinfo>
+ <title>&appname; Manual </title>
+ <abstract role="description">
+ <para>
+ The Evince Document Viewer application enables you to view documents of various formats like Portable
+ Document Format (PDF) files and PostScript files
+ </para>
+ </abstract>
+ <copyright>
+ <year>2005</year>
+ <holder>Nickolay V. Shmyrev</holder>
+ </copyright>
+ <copyright>
+ <year>2004</year>
+ <holder>Sun Microsystems</holder>
+ </copyright>
+
+<!-- translators: uncomment this:
+ <copyright>
+ <year>2002</year>
+ <holder>ME-THE-TRANSLATOR (Latin translation)</holder>
+ </copyright>
+-->
+
+ <publisher>
+ <publishername> MATE Documentation Project </publishername>
+ </publisher>
+
+ &legal;
+ <!-- This file contains link to license for the documentation (GNU FDL), and
+ other legal stuff such as "NO WARRANTY" statement. Please do not change
+ any of this. -->
+
+ <authorgroup>
+ <author>
+ <firstname>Sun</firstname>
+ <surname>MATE Documentation Team</surname>
+ <affiliation><orgname>Sun Microsystems</orgname></affiliation>
+ </author>
+ <author role="maintainer">
+ <firstname>Nickolay V. </firstname>
+ <surname>Shmyrev</surname>
+ <affiliation>
+ <orgname>MATE Documentation Project</orgname>
+ <address> <email>[email protected]</email> </address>
+ </affiliation>
+ </author>
+
+<!-- This is appropriate place for other contributors: translators,
+ maintainers, etc. Commented out by default.
+ <othercredit role="translator">
+ <firstname>Latin</firstname>
+ <surname>Translator 1</surname>
+ <affiliation>
+ <orgname>Latin Translation Team</orgname>
+ <address> <email>[email protected]</email> </address>
+ </affiliation>
+ <contrib>Latin translation</contrib>
+ </othercredit>
+-->
+ </authorgroup>
+
+ <revhistory>
+ <revision>
+ <revnumber>&appname; Manual V1.1</revnumber>
+ <date>2008-04-05</date>
+ <revdescription>
+ <para role="author">Niels Giesen</para>
+ <para role="author">Claude Paroz</para>
+ <para role="publisher">MATE Documentation Project</para>
+ </revdescription>
+ </revision>
+ <revision>
+ <revnumber>&appname; Manual V1.0</revnumber>
+ <date>2005-04-06</date>
+ <revdescription>
+ <para role="author">Nickolay V. Shmyrev</para>
+ <para role="publisher">MATE Documentation Project</para>
+ </revdescription>
+ </revision>
+ </revhistory>
+
+ <releaseinfo>This manual describes version &appversion; of &appname;
+ </releaseinfo>
+ <legalnotice>
+ <title>Feedback</title>
+ <para>To report a bug or make a suggestion regarding the &appname; application or this manual, follow the directions in the <ulink url="ghelp:mate-feedback" type="help">MATE Feedback Page</ulink>.
+ </para>
+<!-- Translators may also add here feedback address for translations -->
+ </legalnotice>
+ </articleinfo>
+
+ <indexterm zone="index">
+ <primary>&appname;</primary>
+ </indexterm>
+ <indexterm zone="index">
+ <primary>evince</primary>
+ </indexterm>
+
+<!-- ============= Document Body ============================= -->
+<!-- ============= Introduction ============================== -->
+<!-- Use the Introduction section to give a brief overview of what
+ the application is and what it does. -->
+ <sect1 id="evince-introduction">
+ <title>Introduction</title>
+ <para>The &app; application enables you to view documents of various formats like Portable Document Format (PDF) files and PostScript files. &app; follows Freedesktop.org and MATE standards to provide integration with Desktop Environment.
+ </para>
+ </sect1>
+
+<!-- =========== Getting Started ============================== -->
+
+ <sect1 id="evince-getting-started">
+ <title>Getting Started</title>
+
+ <sect2 id="evince-start">
+ <title>To Start &appname;</title>
+ <para>&app; starts when you open a document such as a PDF or PostScript file.</para>
+ <para>Alternatively, you can start &app; from the command line, with the command: <command>evince</command>.</para>
+
+ </sect2>
+
+ <sect2 id="evince-when-start">
+ <title>When You Start &appname;</title>
+ <para>When you start &app;, the following window is displayed.</para>
+
+ <!-- ==== Figure ==== -->
+ <figure id="mainwindow-fig">
+ <title>&appname; Window</title>
+ <screenshot>
+ <mediaobject>
+ <imageobject><imagedata
+ fileref="figures/evince_start_window.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>Shows &appname; main window. Contains titlebar, menubar, toolbar and display area. Menubar contains File, Edit, View, Go and Help menus. </phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+ </figure>
+
+ <para>The &app; window contains the following elements:
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term>Menubar</term>
+ <listitem>
+ <para>The menus on the menubar contain all of the commands that you need to work with documents in &app;.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Toolbar</term>
+ <listitem>
+ <para>The toolbar contains a subset of the commands that you can access from the menubar.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Display area</term>
+ <listitem>
+ <para>The display area displays the document.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ In &app;, you can perform the same action in several ways. For example, you can open a document in the following ways:
+ <informaltable frame="all">
+ <tgroup cols="2" colsep="1" rowsep="1">
+ <colspec colname="COLSPEC0" colwidth="50*"/>
+ <colspec colname="COLSPEC1" colwidth="50*"/>
+ <thead>
+ <row valign="top">
+ <entry colname="COLSPEC0">
+ <para>UI Component</para></entry>
+ <entry colname="COLSPEC1" align="left">
+ <para>Action</para></entry>
+ </row>
+ </thead>
+ <tbody>
+ <row valign="top">
+ <entry><para>Window</para></entry>
+ <entry>
+ <itemizedlist>
+ <listitem>
+ <para>Drag a file into the &app; window from another application such as a file manager.</para>
+ </listitem>
+ <listitem>
+ <para>Double-click on the file name in the file manager</para>
+ </listitem>
+ </itemizedlist>
+ </entry>
+ </row>
+ <row valign="top">
+ <entry><para>Menubar</para></entry>
+ <entry><para>Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></menuchoice>.</para>
+</entry>
+ </row>
+ <row valign="top">
+ <entry><para>Shortcut keys</para></entry>
+ <entry><para>Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>.</para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </para>
+ <para>
+ This manual documents functionality from the menubar.
+ </para>
+ </sect2>
+ </sect1>
+
+<!-- ================ Usage ================================ -->
+ <sect1 id="evince-usage">
+ <title>Usage</title>
+
+ <!-- ================ Usage Subsection ================================ -->
+ <sect2 id="evince-open-file">
+ <title>To Open A Document</title>
+ <para>To open a document, perform the following steps:</para>
+ <orderedlist>
+ <listitem>
+ <para>
+ Choose <menuchoice> <guimenu>File</guimenu><guimenuitem>Open</guimenuitem> </menuchoice>. </para>
+ </listitem>
+ <listitem>
+ <para>
+ In the <guilabel>Open Document</guilabel> dialog, select the file you want to open.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Click <guibutton>Open</guibutton>. &app; displays the name of the document in the titlebar of the window.
+ </para>
+ </listitem>
+ </orderedlist>
+ <para>
+ To open another document, choose <menuchoice> <guimenu>File</guimenu><guimenuitem>Open</guimenuitem> </menuchoice> again. &app; opens each file in a new window.
+ </para>
+ <para>
+ If you try to open a document with format that &app; does not recognize, the application displays an error message.
+ </para>
+ </sect2>
+
+ <sect2 id="evince-navigate-file">
+ <title>To Navigate Through a Document</title>
+ <para>You can navigate through a file as follows:</para>
+ <itemizedlist>
+ <listitem>
+ <para>To view the next page, choose <menuchoice> <guimenu>Go</guimenu> <guimenuitem>Next Page</guimenuitem> </menuchoice>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>To view the previous page, choose <menuchoice> <guimenu>Go</guimenu> <guimenuitem>Previous Page</guimenuitem> </menuchoice>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>To view the first page in the document, choose <menuchoice> <guimenu>Go</guimenu> <guimenuitem>First Page</guimenuitem> </menuchoice>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>To view the last page in the document, choose <menuchoice> <guimenu>Go</guimenu> <guimenuitem>Last Page</guimenuitem> </menuchoice>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>To view a particular page, enter the page number or page label in the text box on the toolbar, then press <keycap>Return</keycap>.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <!-- ================ Usage Subsection ================================ -->
+ <sect2 id="evince-scroll-page">
+ <title>To Scroll a Page</title>
+ <para>To display the page contents that are not currently displayed in the display area, use the following methods:</para>
+ <itemizedlist>
+ <listitem>
+ <para>Use the arrow keys or space key on the keyboard.</para>
+ </listitem>
+ <listitem>
+ <para>Drag the display area by clicking with the middle mouse button somewhere in the document and then moving the mouse. For example, to scroll down the page, drag the display area upwards in the window.</para>
+ </listitem>
+ <listitem>
+ <para>Use the scrollbars on the window.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <!-- ================ Usage Subsection ================================ -->
+ <sect2 id="evince-manipulate-zoom-factor">
+ <title>To Change the Page Size</title>
+ <para>
+ You can use the following methods to resize a page in the &app; display area:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ To increase the page size, choose <menuchoice> <guimenu>View</guimenu> <guimenuitem>Zoom In</guimenuitem> </menuchoice>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ To decrease the page size, choose <menuchoice> <guimenu>View</guimenu> <guimenuitem>Zoom Out</guimenuitem> </menuchoice>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ To resize a page to have the same width as the &app; display area, choose <menuchoice> <guimenu>View</guimenu> <guimenuitem>Fit page width</guimenuitem> </menuchoice>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ To resize a page to fit within the &app; display area, choose <menuchoice> <guimenu>View</guimenu> <guimenuitem>Best Fit</guimenuitem> </menuchoice>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ To resize the &app; window to have the same width and height as the screen, choose <menuchoice> <guimenu>View</guimenu> <guimenuitem>Full Screen</guimenuitem> </menuchoice>. To resize the &app; window to the original size, click on the <guibutton>Exit Full Screen</guibutton> button.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2 id="evince-view-pages">
+ <title>To View Pages or Document Structure</title>
+ <para>To view bookmarks or pages, perform the following steps:
+ </para>
+ <orderedlist>
+ <listitem>
+ <para>
+ Choose <menuchoice> <guimenu>View</guimenu> <guimenuitem>Sidebar</guimenuitem> </menuchoice> or press <keycap>F9</keycap>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Use the drop-down list in the side-pane header to select whether to display document structure or pages in the side pane.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Use the side-pane scrollbars to display the required item or page in the side pane.
+ </para>
+ </listitem>
+ <listitem>
+ <para>Click on an entry to navigate to that location in the document. Click on a page to navigate to that page in the document.</para>
+ </listitem>
+ </orderedlist>
+ </sect2>
+
+ <sect2 id="evince-view-properties">
+ <title>To View the Properties of a Document</title>
+ <para>To view the properties of a document, choose
+ <menuchoice>
+ <guimenu>File</guimenu>
+ <guimenuitem>Properties</guimenuitem>
+ </menuchoice>.
+ </para>
+ <para>
+ The <guilabel>Properties</guilabel> dialog displays all information available
+ </para>
+ </sect2>
+
+ <sect2 id="evince-print-file">
+ <title>To Print a Document</title>
+ <para>
+ To print a Document, choose <menuchoice> <guimenu>File</guimenu> <guimenuitem>Print</guimenuitem> </menuchoice>.
+ </para>
+ <note>
+ <para>
+ If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the author of the document has disabled the print option for this document. To enable the print option, you must enter the master password when you open the document. See <xref linkend="evince-password"/> for more information about password-protected files.
+ </para>
+ </note>
+ <para>
+ The <guilabel>Print</guilabel> dialog has the following tabbed sections:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <link linkend="print-dialog-job">Job</link>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <link linkend="print-dialog-printer">Printer</link>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <link linkend="print-dialog-paper">Paper</link>
+ </para>
+ </listitem>
+ </itemizedlist>
+
+ <sect3 id="print-dialog-job">
+ <title>Job</title>
+ <variablelist>
+ <varlistentry> <term><guilabel>Print range</guilabel> </term>
+ <listitem>
+ <para>Select one of the following options to determine how many pages to print:</para>
+ <itemizedlist>
+ <listitem>
+ <para><guilabel>All</guilabel></para>
+ <para>Select this option to print all of the pages in the document.</para>
+ </listitem>
+ <listitem>
+ <para><guilabel>Pages From</guilabel></para>
+ <para>Select this option to print the selected range of pages in the document. Use the spin boxes to specify the first page and last page of the range.
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect3>
+
+ <sect3 id="print-dialog-printer">
+ <title>Printer</title>
+ <variablelist>
+ <varlistentry> <term><guilabel>Printer</guilabel> </term>
+ <listitem>
+ <para>Use this drop-down list to select the printer to which you want to print the document.</para>
+ <note>
+ <para>
+ The <guilabel>Create a PDF document</guilabel> option is not supported in this version of &app;.
+ </para>
+ </note>
+ </listitem>
+ </varlistentry>
+ <varlistentry> <term><guilabel>Settings</guilabel> </term>
+ <listitem>
+ <para>Use this drop-down list to select the printer settings.
+ </para>
+ <para>To configure the printer, click <guibutton>Configure</guibutton>. For example, you can enable or disable duplex printing, or schedule delayed printing, if this functionality is supported by the printer.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry> <term><guilabel>Location</guilabel> </term>
+ <listitem>
+ <para>
+ Use this drop-down list to select one of the following print destinations:
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term><guilabel>CUPS</guilabel></term>
+ <listitem>
+ <para>
+ Print the document to a CUPS printer.
+ </para>
+ <note>
+ <para>
+ If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the only entry in this drop-down list.
+ </para>
+ </note>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><guilabel>lpr</guilabel></term>
+ <listitem>
+ <para>
+ Print the document to a printer.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><guilabel>File</guilabel></term>
+ <listitem>
+ <para>
+ Print the document to a PostScript file.
+ </para>
+ <para>
+ Click <guibutton>Save As</guibutton> to display a dialog where you specify the name and location of the PostScript file.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><guilabel>Custom</guilabel></term>
+ <listitem>
+ <para>
+ Use the specified command to print the document.
+ </para>
+ <para>
+ Type the name of the command in the text box. Include all command-line arguments.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </listitem>
+ </varlistentry>
+ <varlistentry> <term><guilabel>State</guilabel> </term>
+ <listitem>
+ <para>This functionality is not supported in this version of &app;.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry> <term><guilabel>Type</guilabel> </term>
+ <listitem>
+ <para>This functionality is not supported in this version of &app;.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry> <term><guilabel>Comment</guilabel> </term>
+ <listitem>
+ <para>This functionality is not supported in this version of &app;.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect3>
+
+ <sect3 id="print-dialog-paper">
+ <title>Paper</title>
+ <variablelist>
+ <varlistentry> <term><guilabel>Paper size</guilabel> </term>
+ <listitem>
+ <para>Use this drop-down list to select the size of the paper to which you want to print the document.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry> <term><guilabel>Width</guilabel> </term>
+ <listitem>
+ <para>Use this spin box to specify the width of the paper. Use the adjacent drop-down list to change the measurement unit.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry> <term><guilabel>Height</guilabel> </term>
+ <listitem>
+ <para>Use this spin box to specify the height of the paper.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry> <term><guilabel>Feed orientation</guilabel> </term>
+ <listitem>
+ <para>Use this drop-down list to select the orientation of the paper in the printer.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry> <term><guilabel>Page orientation</guilabel> </term>
+ <listitem>
+ <para>Use this drop-down list to select the page orientation.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry> <term><guilabel>Layout</guilabel> </term>
+ <listitem>
+ <para>Use this drop-down list to select the page layout. A preview of each layout that you select is displayed in the <guilabel>Preview</guilabel> area.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry> <term><guilabel>Paper Tray</guilabel> </term>
+ <listitem>
+ <para>Use this drop-down list to select the paper tray.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect3>
+ </sect2>
+
+ <!-- ================ Usage Subsection ================================ -->
+ <sect2 id="evince-copy-file">
+ <title>To Copy a Document</title>
+ <para>To copy a file, perform the following steps:
+ </para>
+ <orderedlist>
+ <listitem>
+ <para>
+ Choose <menuchoice> <guimenu>File</guimenu> <guimenuitem>Save a Copy</guimenuitem> </menuchoice>.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Type the new filename in the <guilabel>Filename</guilabel> text box in the <guilabel>Save a Copy</guilabel> dialog.
+ </para>
+ <para>
+ If necessary, specify the location of the copied document. By default, copies are saved in your home directory.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Click <guibutton>Save</guibutton>.
+ </para>
+ </listitem>
+ </orderedlist>
+ </sect2>
+
+ <!-- this id must be kept in sync with evince-persist-file.cc/evince-persist-stream.cc -->
+ <sect2 id="evince-password">
+ <title>To Work With Password-Protected Documents</title>
+ <para>
+ An author can use the following password levels to protect a document:
+ </para>
+ <itemizedlist>
+ <listitem>
+ <para>User password that allows others only to read the document.
+ </para>
+ </listitem>
+ <listitem>
+ <para>Master password that allows others to perform additional actions, such as print the document.
+ </para>
+ </listitem>
+ </itemizedlist>
+ <para>
+ When you try to open a password-protected document, &app; displays a security dialog. Type either the user password or the master password in the <guilabel>Enter document password</guilabel> text box, then click <guibutton>Open Document</guibutton>.
+ </para>
+ </sect2>
+
+ <!-- ================ Usage Subsection ================================ -->
+ <sect2 id="evince-close-file">
+ <title>To Close a Document</title>
+ <para>To close a document, choose <menuchoice> <guimenu>File</guimenu> <guimenuitem>Close</guimenuitem> </menuchoice>.
+ </para>
+ <para>
+ If the window is the last &app; window open, the application exits.
+ </para>
+ </sect2>
+
+ </sect1>
+
+ <!-- ================ Shortcuts ================================ -->
+ <sect1 id="evince-shortcuts">
+ <title>Shortcuts</title>
+ <para>Below is a list of all shortcuts present in &app;:</para>
+ <informaltable frame="all">
+ <tgroup cols="2" colsep="1" rowsep="1">
+ <colspec colname="COLSPEC0" colwidth="50*"/>
+ <colspec colname="COLSPEC1" colwidth="50*"/>
+ <thead>
+ <row valign="top">
+ <entry colname="COLSPEC0">
+ <para>Shortcut</para></entry>
+ <entry colname="COLSPEC1" align="left">
+ <para>Action</para></entry>
+ </row>
+ </thead>
+ <tbody>
+ <row valign="middle">
+ <entry><para><keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo></para></entry>
+ <entry><para>Open an existing document</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycombo><keycap>Ctrl</keycap><keycap>S</keycap></keycombo></para></entry>
+ <entry><para>Save a copy of the current document</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycombo><keycap>Ctrl</keycap><keycap>P</keycap></keycombo></para></entry>
+ <entry><para>Print document</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycombo><keycap>Ctrl</keycap><keycap>W</keycap></keycombo></para></entry>
+ <entry><para>Close window</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycombo><keycap>Ctrl</keycap><keycap>C</keycap></keycombo></para></entry>
+ <entry><para>Copy selection</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycombo><keycap>Ctrl</keycap><keycap>A</keycap></keycombo></para></entry>
+ <entry><para>Select All</para></entry>
+ </row>
+ <row valign="middle">
+ <entry>
+ <para><keycombo><keycap>Ctrl</keycap><keycap>F</keycap></keycombo></para>
+ <para><keycap>/</keycap> (slash)</para>
+ </entry>
+ <entry><para>Find a word or phrase in the document</para></entry>
+ </row>
+ <row valign="middle">
+ <entry>
+ <para><keycombo><keycap>Ctrl</keycap><keycap>G</keycap></keycombo></para>
+ <para><keycap>F3</keycap></para>
+ </entry>
+ <entry><para>Find next</para></entry>
+ </row>
+ <row valign="middle">
+ <entry>
+ <para><keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)</para>
+ <para><keycap>+</keycap></para>
+ <para><keycap>=</keycap></para>
+ </entry>
+ <entry><para>Zoom in</para></entry>
+ </row>
+ <row valign="middle">
+ <entry>
+ <para><keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)</para>
+ <para><keycap>-</keycap></para>
+ </entry>
+ <entry><para>Zoom out</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycombo><keycap>Ctrl</keycap><keycap>R</keycap></keycombo></para></entry>
+ <entry><para>Reload the document</para></entry>
+ </row>
+ <row valign="middle">
+ <entry>
+ <para><keycap>Page Up</keycap></para></entry>
+ <entry><para>Go to the previous page</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycap>Page Down</keycap></para></entry>
+ <entry><para>Go to the next page</para></entry>
+ </row>
+ <row valign="middle">
+ <entry>
+ <para><keycap>Space</keycap></para>
+ <para><keycombo><keycap>Shift</keycap><keycap>Backspace</keycap></keycombo></para>
+ <para><keycap>Return</keycap></para>
+ </entry>
+ <entry><para>Scroll forward</para></entry>
+ </row>
+ <row valign="middle">
+ <entry>
+ <para><keycombo><keycap>Shift</keycap><keycap>Space</keycap></keycombo></para>
+ <para><keycap>Backspace</keycap></para>
+ <para><keycombo><keycap>Shift</keycap><keycap>Return</keycap></keycombo></para>
+ </entry>
+ <entry><para>Scroll backward</para></entry>
+ </row>
+ <row valign="middle">
+ <entry>
+ <para><keycombo><keycap>Shift</keycap><keycap>Page Up</keycap></keycombo></para></entry>
+ <entry><para>Go a bunch of pages up</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycombo><keycap>Shift</keycap><keycap>Page Down</keycap></keycombo></para></entry>
+ <entry><para>Go a bunch of pages down</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycap>Home</keycap></para></entry>
+ <entry><para>Go to the first page</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycap>End</keycap></para></entry>
+ <entry><para>Go to the last page</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycombo><keycap>Ctrl</keycap><keycap>L</keycap></keycombo></para></entry>
+ <entry><para>Go to page by number or label</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycap>F1</keycap></para></entry>
+ <entry><para>Help</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycap>F5</keycap></para></entry>
+ <entry><para>Run document as presentation</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycap>F9</keycap></para></entry>
+ <entry><para>Show or hide the side pane</para></entry>
+ </row>
+ <row valign="middle">
+ <entry><para><keycap>F11</keycap></para></entry>
+ <entry><para>Toggle fullscreen mode</para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </sect1>
+
+</article>
diff --git a/help/C/figures/evince_start_window.png b/help/C/figures/evince_start_window.png
new file mode 100644
index 00000000..cc57ee5a
--- /dev/null
+++ b/help/C/figures/evince_start_window.png
Binary files differ
diff --git a/help/C/legal.xml b/help/C/legal.xml
new file mode 100644
index 00000000..acb0b403
--- /dev/null
+++ b/help/C/legal.xml
@@ -0,0 +1,76 @@
+ <legalnotice id="legalnotice">
+ <para>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation
+ License (GFDL), Version 1.1 or any later version published
+ by the Free Software Foundation with no Invariant Sections,
+ no Front-Cover Texts, and no Back-Cover Texts. You can find
+ a copy of the GFDL at this <ulink type="help"
+ url="ghelp:fdl">link</ulink> or in the file COPYING-DOCS
+ distributed with this manual.
+ </para>
+ <para> This manual is part of a collection of MATE manuals
+ distributed under the GFDL. If you want to distribute this
+ manual separately from the collection, you can do so by
+ adding a copy of the license to the manual, as described in
+ section 6 of the license.
+ </para>
+
+ <para>
+ Many of the names used by companies to distinguish their
+ products and services are claimed as trademarks. Where those
+ names appear in any MATE documentation, and the members of
+ the MATE Documentation Project are made aware of those
+ trademarks, then the names are in capital letters or initial
+ capital letters.
+ </para>
+
+ <para>
+ DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED
+ UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE
+ WITH THE FURTHER UNDERSTANDING THAT:
+
+ <orderedlist>
+ <listitem>
+ <para>DOCUMENT IS PROVIDED ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
+ IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
+ THAT THE DOCUMENT OR MODIFIED VERSION OF THE
+ DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR
+ A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE
+ RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE
+ OF THE DOCUMENT OR MODIFIED VERSION OF THE
+ DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR
+ MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY
+ CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
+ SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS
+ LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED
+ VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER
+ EXCEPT UNDER THIS DISCLAIMER; AND
+ </para>
+ </listitem>
+ <listitem>
+ <para>UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL
+ THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE),
+ CONTRACT, OR OTHERWISE, SHALL THE AUTHOR,
+ INITIAL WRITER, ANY CONTRIBUTOR, OR ANY
+ DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION
+ OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH
+ PARTIES, BE LIABLE TO ANY PERSON FOR ANY
+ DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
+ CONSEQUENTIAL DAMAGES OF ANY CHARACTER
+ INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS
+ OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR
+ MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR
+ LOSSES ARISING OUT OF OR RELATING TO USE OF THE
+ DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT,
+ EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF
+ THE POSSIBILITY OF SUCH DAMAGES.
+ </para>
+ </listitem>
+ </orderedlist>
+ </para>
+ </legalnotice>
+
diff --git a/help/ChangeLog b/help/ChangeLog
new file mode 100644
index 00000000..851db786
--- /dev/null
+++ b/help/ChangeLog
@@ -0,0 +1,362 @@
+2009-03-28 Simos Xenitellis <[email protected]>
+
+ * el/figures/*.png: Added figures by Fotis Tsamis.
+
+2009-03-11 Andre Klapper <[email protected]>
+
+ * cs/cs.po: Updated Czech translation by Lucas Lommer.
+
+2009-03-09 Andre Klapper <[email protected]>
+
+ * cs/cs.po:
+ * Makefile.am: Added Czech translation by Martin Picek.
+
+2009-03-02 Philip Withnall <[email protected]>
+
+ * en_GB/en_GB.po: Updated British English translation.
+
+2009-02-17 Inaki Larranaga Murgoitio <[email protected]>
+
+ * eu/figures/: Added image in Basque language. Images are:
+ evince_start_window.png
+
+2009-02-16 Inaki Larranaga Murgoitio <[email protected]>
+
+ * eu/eu.po: Added Basque translation.
+ * Makefile.am: Added 'eu' to DOC_LINGUAS.
+
+2008-12-07 Leonardo Ferreira Fontenelle <[email protected]>
+
+ * pt_BR/pt_BR.po: Fixed terminology ("spin box") and credits in the
+ Brazilian Portuguese translation. Contributed by Vladimir Melo.
+
+2008-12-07 Leonardo Ferreira Fontenelle <[email protected]>
+
+ * pt_BR/pt_BR.po: Updated Brazilian Portuguese translation. Contributed
+ by Daniel S. Koda and reviewed by Vladimir Melo.
+
+2008-09-23 Gil Forcada <[email protected]>
+
+ * ca/ca.po: Updated Catalan documentation.
+
+2008-09-20 Luca Ferretti <[email protected]>
+
+ * it.po: Updated Italian translation by Milo Casagrande.
+
+2008-08-29 Mario Blättermann <[email protected]>
+
+ * de/de.po: Updated german translation
+
+2008-07-27 Nickolay V. Shmyrev <[email protected]>
+
+ * ru/ru.po: Updated Russian translation by
+ Timur Salikhov <[email protected]>.
+
+2008-07-22 Daniel Nylander <[email protected]>
+
+ * sv/sv.po: Updated Swedish translation.
+
+2008-07-07 Timo Jyrinki <[email protected]>
+
+ * fi/fi.po: Updated Finnish translation
+
+2008-06-08 Jan Arne Petersen <[email protected]>
+
+ * Makefile.am:
+ * de/de.po:
+ * de/figures/evince_start_window.png: Added German translation by
+ Mario Blättermann <[email protected]>.
+
+2008-04-07 Jorge Gonzalez <[email protected]>
+
+ * es/es.po: Updated Spanish translation.
+
+2008-04-05 Claude Paroz <[email protected]>
+
+ * C/evince.xml: Added Shortcuts section. Patch by Niels Giesen.
+ * fr/fr.po: Updated Franch translation.
+
+2008-03-04 Jorge Gonzalez <[email protected]>
+
+ * es/es.po: Updated Spanish translation.
+ * es/figures/*.png: Updated Spanish screenshot.
+
+2008-03-03 Leonardo Ferreira Fontenelle <[email protected]>
+
+ * pt_BR/pt_BR.po: Minor fix in Brazilian Portuguese translation to
+ match the GUI.
+
+2008-02-21 Funda Wang <[email protected]>
+
+ * Makefile.am: Add zh_CN to DOC_LINGUAS.
+
+2008-02-12 Jorge Gonzalez <[email protected]>
+
+ * es/es.po: Updated Spanish translation.
+
+2007-10-05 Jonh Wendell <[email protected]>
+
+ * pt_BR/pt_BR.po: Added Brazilian Portuguese translation,
+ by Hugo Doria and Pedro de Medeiros
+ * Makefile.am: Added pt_BR to DOC_LINGUAS
+
+2007-09-16 Yannig Marchegay <[email protected]>
+
+ * po/oc.po: Updated Occitan translation
+
+2007-09-11 Luca Ferretti <[email protected]>
+
+ * it/it.po: Updated Italian translation.
+ * it/figures/evince_start_window.png: Updated to new MATE
+ default theme.
+
+2007-08-22 Satoru SATOH <[email protected]>
+
+ * ja/ja.po: Added Japanese help translation.
+ * ja/figures/evince_start_window.png: Added evince screenshot.
+
+2007-08-14 Nickolay V. Shmyrev <[email protected]>
+
+ * uk/uk.po:
+
+2007-07-31 Josep Puigdemont i Casamajó <[email protected]>
+
+ * ca/figues: renamed to ca/figures.
+
+2007-04-03 Claudio Saavedra <[email protected]>
+
+ * es/es.po: Updated Spanish translation by Jorge González.
+
+2007-03-15 Luca Ferretti <[email protected]>
+
+ * it.po: Restore Italian translation, it seems the last time
+ I uploaded the po template file :-(
+
+2007-03-12 Maxim Dziumanenko <[email protected]>
+
+ * uk/uk.po: Updated Ukrainian translation.
+
+2007-03-05 Ilkka Tuohela <[email protected]>
+
+ * fi/fi.po: Updated Finnish translation.
+
+2007-02-28 Christophe Bliard <[email protected]>
+
+ * fr/fr.po: Updated French translation
+
+2007-02-09 David Lodge <[email protected]>
+
+ * en_GB/en_GB.po: Added English (British) translation
+ * Makefile.am: Added en_GB to DOC_LINGUAS
+
+2007-01-30 Nickolay V. Shmyrev <[email protected]>
+
+ * reference/Makefile.am:
+ * reference/evince-docs.sgml:
+ * reference/evince.types:
+
+ Updated index document.
+
+2007-01-29 Nickolay V. Shmyrev <[email protected]>
+
+ * reference/Makefile.am:
+ * reference/evince-docs.sgml:
+ * reference/evince.types:
+ * reference/version.xml.in:
+
+ Added gtk-doc based documentation for Evince.
+ Still in initial state but I hope it will
+ grow.
+
+2007-01-17 Daniel Nylander <[email protected]>
+
+ * sv/sv.po: Updated Swedish translation.
+
+2007-01-16 Marc Brockschmidt <[email protected]>
+
+ * C/evince.xml: Documentation about document
+ dragging is corrected. Fixes bug #396532.
+
+2006-12-05 Luca Ferretti <[email protected]>
+
+ * it/it.po: Updated Italian translation.
+
+2006-11-19 Christophe Bliard <[email protected]>
+
+ * fr/fr.po: Updated French translation.
+
+2006-11-12 Francisco Javier F. Serrador <[email protected]>
+
+ * es/es.po: Updated Spanish translation.
+
+2006-11-10 Wouter Bolsterlee <[email protected]>
+
+ * C/evince.xml: Fixed build error with newer
+ mate-doc-utils.
+
+2006-11-08 Daniel Nylander <[email protected]>
+
+ * sv/sv.po: Updated Swedish translation.
+
+2006-11-06 Joachim Noreiko <[email protected]>
+
+ * C/evince.xml: Update dialog name and corrected use of 'File' to 'Document'. Patch from Steve Willoughby. Fixes #371042
+
+2006-10-20 Wouter Bolsterlee <[email protected]>
+
+ * nl/nl.po: Dutch translation updated by Wouter
+ Bolsterlee.
+
+2006-10-07 Daniel Nylander <[email protected]>
+
+ * sv/sv.po: Added Swedish translation.
+ * sv/figures/*png: Added screenshot.
+ * Makefile.am: Added sv to DOC_LINGUAS.
+
+2006-10-01 Wouter Bolsterlee <[email protected]>
+
+ * fi/.cvsignore: Ignore generated files.
+ * fr/.cvsignore: Same here.
+ * it/.cvsignore: Same here.
+
+2006-09-21 Luca Ferretti <[email protected]>
+
+ * it/it.po: Updated Italian translation.
+ * it/figures/evince_start_window.png: Updated to match MATE 2.16
+ default theme.
+
+2006-09-16 Tommi Vainikainen <[email protected]>
+
+ * fi/figures/evince_start_window.png, fi/fi.po: Added Finnish
+ translation
+ * Makefile.am: Added fi to DOC_LINGUAS
+
+2006-09-03 Francisco Javier F. Serrador <[email protected]>
+
+ * es/es.po: Updated Spanish translation by Jorge Gonzalez.
+
+2006-09-01 Christophe Bliard <[email protected]>
+
+ * fr/fr.po: Updated French translation
+
+2006-08-15 Christophe Bliard <[email protected]>
+
+ * fr/figures:
+ * fr/fr.po: Added French translation
+ * Makefile.am: Added fr to DOC_LINGUAS
+
+2006-06-11 Luca Ferretti <[email protected]>
+
+ * Makefile.am:
+ * it/it.po:
+ * it/figures/evince_start_window.png:
+ Added Italian translation by Ubuntu Italian Team and myself.
+
+2006-03-15 Maxim Dziumanenko <[email protected]>
+
+ * uk/uk.po: Updated Ukrainian translation.
+
+2006-02-28 Nickolay V. Shmyrev <[email protected]>
+
+ * ru/ru.po: Updated Russian translation.
+
+2006-03-09 Joachim Noreiko <[email protected]>
+
+ * C/evince.xml:
+ Removed incorrect information about launching Evince from the Applications menu
+
+2006-02-28 Nickolay V. Shmyrev <[email protected]>
+
+ * ru/ru.po, Makefile.am:
+ * ru/.cvsignore, nl/.cvsignore, bg/.cvsignore:
+ Added Russian translation.
+
+2006-02-27 Alexander Shopov <[email protected]>
+
+ * Makefile.am:
+ * bg/bg.po:
+ * bg/figures/evince_start_window.png:
+ Added Bulgarian translation by
+ Rostislav Raykov <[email protected]>
+
+2006-01-28 Francisco Javier F. Serrador <[email protected]>
+
+ * es/es.po: Updated Spanish translation.
+
+2006-01-21 Nickolay V. Shmyrev <[email protected]>
+
+ * C/evince.xml: Applied document standartization patch by
+ Allessandro Ferucci <[email protected]>. See bug #327791.
+
+2006-01-01 Reinout van Schouwen <[email protected]>
+
+ * Added nl/nl.po
+ * Added nl/figures/evince_start_window.png
+ * Makefile.am: added nl
+ * C/evince.xml: remove Quit from section 3.10. Fixes #325451.
+ Patch by Brian Pepple <[email protected]>
+
+2005-10-25 Nickolay V. Shmyrev <[email protected]>
+
+ * C/evince.xml: Fix typo.
+
+2005-10-02 Nickolay V. Shmyrev <[email protected]>
+
+ * uk, el: Add .cvsignore to keep cvs silent.
+
+2005-08-25 Nickolay V. Shmyrev <[email protected]>
+
+ * uk, Makefile.am: Fix help file and move figure to correct
+ folder
+
+Thu Aug 25 02:32:54 2005 Jonathan Blandford <[email protected]>
+
+ * Makefile.am:
+ * sr/sr.po: Remove uk.po from the help pages as I can't get it to
+ validate.
+
+2005-08-18 Maxim Dziumanenko <[email protected]>
+
+ * uk.po: Added Ukrainian translation.
+
+2005-08-15 Nikos Charonitakis <[email protected]>
+
+ * el.po: Updated Greek translation
+ by ta_panta_rei (fix typos)
+
+2005-08-11 Francisco Javier F. Serrador <[email protected]>
+
+ * es/es.po: Some corrections
+
+2005-08-09 Nikos Charonitakis <[email protected]>
+ * el/el.po: Added full Greek translation
+ by Stylianos Papanastasiou <[email protected]>
+ * Makefile.am (DOC_LINGUAS): Added "el".
+
+2005-08-03 Francisco Javier F. Serrador <[email protected]>
+
+ * es/es.po: Correct mispelling reported by Tommi Vainikainen.
+
+2005-07-27 Francisco Javier F. Serrador <[email protected]>
+
+ * es/es.po: Updated Spanish translation.
+
+2005-07-24 Francisco Javier F. Serrador <[email protected]>
+
+ * es/es.po: Added partial Spanish translation.
+
+2005-07-24 Danilo Šegan <[email protected]>
+
+ * Makefile.am (DOC_LINGUAS): Added "sr".
+ * sr/sr.po: Added partial Serbian translation.
+
+2005-07-24 Tommi Vainikainen <[email protected]>
+
+ * xmldocs.make: Removed, should not be here.
+ * .cvsignore: Added *.omf as those are generated files.
+
+2005-07-23 Tommi Vainikainen <[email protected]>
+
+ * Makefile.am, evince.omf.in, C/evince.xml: Migrated to use
+ mate-doc-utils.
+ * C/Makefile.am, C/evince-C.omf: Removed in migration.
diff --git a/help/Makefile.am b/help/Makefile.am
new file mode 100644
index 00000000..eedae993
--- /dev/null
+++ b/help/Makefile.am
@@ -0,0 +1,17 @@
+SUBDIRS = reference
+
+if ENABLE_HELP
+
+include $(top_srcdir)/mate-doc-utils.make
+dist-hook: doc-dist-hook
+
+DOC_MODULE = evince
+DOC_ENTITIES = legal.xml
+DOC_INCLUDES =
+DOC_FIGURES = figures/evince_start_window.png
+
+DOC_LINGUAS = bg ca cs de el en_GB es eu fi fr it ja nl oc pt_BR ru sl sr sv uk vi zh_CN
+
+-include $(top_srcdir)/git.mk
+
+endif
diff --git a/help/bg/bg.po b/help/bg/bg.po
new file mode 100644
index 00000000..e4b67edc
--- /dev/null
+++ b/help/bg/bg.po
@@ -0,0 +1,1015 @@
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-02-27 16:50+0200\n"
+"PO-Revision-Date: 2006-02-27 16:53+0200\n"
+"Last-Translator: Rostislav \"zbrox\" Raykov <[email protected]>\n"
+"Language-Team: Bulgarian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: legal.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Предоставя се разрешение за копиране, разпространение и/или промяна на този "
+"документ, съгласно условията на „Лиценза за свободна документация на GNU“, "
+"версия 1.1 или всяка следваща версия, издадена от Фондация „Свободен "
+"софтуер“; без „Непроменливи раздели“, „Текстове на предната корица“, както и "
+"„Текстове на задната корица“. Копие на лиценза може да бъде намерено <ulink "
+"type=\"help\" url=\"ghelp:fdl\">тук</ulink> или във файла COPYING-DOCS, "
+"разпространяван с това ръководство."
+
+#: legal.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Това ръководство е част от колекция ръководства за MATE, разпространявани "
+"под GFDL. Ако искате да разпространявате това ръководство отделно, можете да "
+"го направите, като включите копие на лиценза към ръководството, както е "
+"описано в раздел 6 от лиценза."
+
+#: legal.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Много от имената, използвани от компании, за да отличават собствените си "
+"продукти и услуги, са регистрирани търговски марки. Когато такива имена "
+"присъстват в която и да е документация за MATE и членовете на проекта за "
+"документация на MATE са осведомени за съответните търговски марки, тогава "
+"имената са с главни букви или начални главни букви."
+
+#: legal.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"ДОКУМЕНТЪТ СЕ ПРЕДОСТАВЯ НА БАЗА „КАКТО Е“, БЕЗ КАКВАТО И ДА Е ГАРАНЦИЯ, "
+"ПРЯКА ИЛИ КОСВЕНА, ВКЛЮЧИТЕЛНО БЕЗ ОГРАНИЧЕНИЯ И ГАРАНЦИИ, ЧЕ ДОКУМЕНТЪТ ИЛИ "
+"ПРОМЕНЕНАТА МУ ВЕРСИЯ СА БЕЗ ДЕФЕКТИ, ГОДНИ ЗА КОНКРЕТНА УПОТРЕБА ИЛИ "
+"НЕНАРУШАВАЩИ. ЦЕЛИЯТ РИСК ОТНОСНО КАЧЕСТВОТО, ТОЧНОСТТА И ХАРАКТЕРИСТИКИТЕ "
+"НА ДОКУМЕНТА ИЛИ ПРОМЕНЕНАТА МУ ВЕРСИЯ Е ЗА ВАША СМЕТКА. АКО НЯКОЙ ДОКУМЕНТ "
+"ИЛИ ПРОМЕНЕНАТА МУ ВЕРСИЯ СЕ ОКАЖЕ ДЕФЕКТЕН В КАКВОТО И ДА Е ОТНОШЕНИЕ, ВИЕ "
+"(НЕ ПЪРВОНАЧАЛНИЯ АВТОР ИЛИ КОЙТО И ДА Е ДОПРИНЕСЪЛ ЗА РАЗРАБОТКАТА) ПОЕМАТЕ "
+"РАЗХОДИТЕ ЗА ВСЯКАКВО НЕОБХОДИМО ОБСЛУЖВАНЕ, ПОПРАВКА ИЛИ КОРЕКЦИИ. ТОВА "
+"ОТКАЗВАНЕ ОТ ГАРАНЦИЯТА ПРЕДСТАВЛЯВА СЪЩЕСТВЕНА ЧАСТ ОТ ТОЗИ ЛИЦЕНЗ. НЕ Е "
+"РАЗРЕШЕНА УПОТРЕБАТА НА КОЙТО И ДА Е ДОКУМЕНТ ИЛИ ПРОМЕНЕНАТА ВЕРСИЯ НА "
+"ДОКУМЕНТА, ОСВЕН ПРИ СПАЗВАНЕ НА ТОЗИ ОТКАЗ ОТ ГАРАНЦИЯ; И"
+
+#: legal.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"ПРИ НИКАКВИ ОБСТОЯТЕЛСТВА И ПОД НИКАКВА ЮРИДИЧЕСКА ОСНОВА, НЕЗАВИСИМО ДАЛИ Е "
+"В НАРУШЕНИЕ (ВКЛЮЧИТЕЛНО ПРИЧИНЕНО ОТ НЕБРЕЖНОСТ), ДОГОВОР ИЛИ ДРУГО, "
+"АВТОРЪТ, ПЪРВОНАЧАЛНИЯТ АВТОР ИЛИ КОЙТО И ДА Е ДОПРИНЕСЪЛ ЗА РАЗРАБОТКАТА, "
+"ИЛИ КОЙТО И ДА Е ДИСТРИБУТОР НА ДОКУМЕНТА ИЛИ ПРОМЕНЕНАТА МУ ВЕРСИЯ, ИЛИ "
+"КОЙТО И ДА Е ДОСТАВЧИК НА КОЯТО И ДА Е ОТ ИЗБРОЕНИТЕ СТРАНИ, НЯМА ДА БЪДЕ "
+"ОТГОВОРЕН ПРЕД НИКОГО ЗА ВСИЧКИ ПРЕКИ, КОСВЕНИ, СПЕЦИАЛНИ, СЛУЧАЙНИ ИЛИ "
+"ПОСЛЕДСТВЕНИ ЩЕТИ ОТ КАКЪВТО И ДА Е ХАРАКТЕР, ВКЛЮЧИТЕЛНО, БЕЗ ОГРАНИЧЕНИЯ, "
+"ЩЕТИ ЗА ЗАГУБА НА ДОБРОЖЕЛАТЕЛНОСТ, СПИРАНЕ НА РАБОТАТА, КОМПЮТЪРНА ПОВРЕДА "
+"ИЛИ НЕИЗПРАВНОСТ, ИЛИ ВСЯКАКВИ ДРУГИ ЩЕТИ ИЛИ ЗАГУБИ, ВЪЗНИКНАЛИ ИЛИ "
+"СВЪРЗАНИ С УПОТРЕБАТА НА ДОКУМЕНТА ИЛИ ПРОМЕНЕНИТЕ МУ ВЕРСИИ, ДОРИ И КОГАТО "
+"ТАЗИ СТРАНА Е БИЛА ИНФОРМИРАНА ЗА ВЪЗМОЖНОСТТА ОТ ТАКИВА ЩЕТИ."
+
+#: legal.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"ДОКУМЕНТЪТ И ПРОМЕНЕНИТЕ МУ ВЕРСИИ СЕ ПРЕДОСТАВЯТ ПОД УСЛОВИЯТА НА ЛИЦЕНЗА "
+"ЗА СВОБОДНА ДОКУМЕНТАЦИЯ НА GNU, С ДОПЪЛНИТЕЛНОТО ПОЯСНЕНИЕ, ЧЕ:<placeholder-"
+"1/>"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: evince.xml:161(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr "FIXME: Необходима е локализирана снимка."
+
+#: evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Ръководство за програмата за разглеждане на документи - Evince"
+
+#: evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr "Програмата за разглеждане на документи Evince Ви позволява да преглеждате документи от различни формати като Portable Document Format (PDF) или PostScript."
+
+#: evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: evince.xml:34(holder) evince.xml:91(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: evince.xml:38(holder) evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: evince.xml:49(publishername) evince.xml:67(orgname) evince.xml:92(para)
+msgid "MATE Documentation Project"
+msgstr "Проект за документация на MATE"
+
+#: evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Екип на Sun"
+
+#: evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "Екипът за документация на MATE"
+
+#: evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: evince.xml:68(email)
+
+#: evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Ръководство за Evince, версия 1.0"
+
+#: evince.xml:89(date)
+msgid "2005-04-06"
+msgstr "06-04-2005"
+
+#: evince.xml:97(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr ""
+"Това ръководство е за версия 0.2 на програмата за преглед на документи "
+"Evince."
+
+#: evince.xml:100(title)
+msgid "Feedback"
+msgstr "Обратна връзка"
+
+#: evince.xml:101(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"За да докладвате за грешка или да направите предложение относно програмата "
+"за преглед на документи Evince или това ръководство, следвайте указанията, "
+"описани в <ulink url=\"ghelp:mate-feedback\" type=\"help\">Страницата за "
+"обратна връзка на MATE</ulink>."
+
+#: evince.xml:111(primary)
+msgid "evince"
+msgstr "evince"
+
+#: evince.xml:119(title)
+msgid "Introduction"
+msgstr "Въведение"
+
+#: evince.xml:120(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+"Програмата <application>Evince</application> позволява да преглеждате "
+"документи от различни формати като Portable Document Format (PDF) файлове "
+"или PostScript файлове. <application>Evince</application> следва стандартите "
+"на Freedesktop.org и MATE, за да предостави интеграция с работната среда."
+
+#: evince.xml:127(title)
+msgid "Getting Started"
+msgstr "Първи стъпки"
+
+#: evince.xml:130(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Стартиране на Evince"
+
+#: evince.xml:131(para)
+msgid ""
+"You can start <application>Evince Document Viewer</application> in the "
+"following ways:"
+msgstr ""
+"Може да стартирате <application>Evince</application> по следните начини:"
+
+#: evince.xml:135(term)
+msgid "<guimenu>Applications</guimenu> menu"
+msgstr "От менюто <guimenu>Програми</guimenu>"
+
+#: evince.xml:137(para)
+msgid ""
+"Choose <menuchoice><guisubmenu>Graphics</guisubmenu><guimenuitem>Evince "
+"Document Viewer</guimenuitem></menuchoice>."
+msgstr ""
+"Изберете <menuchoice><guisubmenu>Графика</guisubmenu><guimenuitem>Преглед на "
+"документи</guimenuitem></menuchoice>."
+
+#: evince.xml:142(term)
+msgid "Command line"
+msgstr "От командния ред"
+
+#: evince.xml:144(para)
+msgid "Execute the following command: <command>evince</command>"
+msgstr "Изпълнете следната команда: <command>evince</command>"
+
+#: evince.xml:152(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Когато стартирате Evince"
+
+#: evince.xml:153(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"Когато стартирате <application>Evince</application> се появява следният "
+"прозорец."
+
+#: evince.xml:157(title)
+msgid "Evince Document Viewer Window"
+msgstr "Прозорецът на програмата за преглед на документи Evince"
+
+#: evince.xml:164(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+"Показва главния прозорец на програмата за преглед на документи Evince. "
+"Съдържа заглавна лента, лента с менюта, лента с инструменти и район на "
+"преглед. Лентата с менюта съдържа менютата Файл, Редактиране, Изглед, "
+"Отиване и Помощ."
+
+#: evince.xml:170(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+"Прозорецът на <application>Evince</application> съдържа следните елементи:"
+
+#: evince.xml:174(term) evince.xml:222(para)
+msgid "Menubar"
+msgstr "Лента с менюта"
+
+#: evince.xml:176(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+"Менютата на лентата с менюта съдържат всички команди, които са Ви нужни, за "
+"да работите с документи чрез <application>Evince</application>."
+
+#: evince.xml:180(term)
+msgid "Toolbar"
+msgstr "Лента с инструменти"
+
+#: evince.xml:182(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr ""
+"Лентата с инструменти съдържа набор от част от командите, които са достъпни "
+"през менютата."
+
+#: evince.xml:186(term)
+msgid "Display area"
+msgstr "Район на преглед"
+
+#: evince.xml:188(para)
+msgid "The display area displays the document."
+msgstr "Районът на преглед е там, където се показва документа."
+
+#: evince.xml:202(para)
+msgid "UI Component"
+msgstr "Компонент от интерфейса"
+
+#: evince.xml:204(para)
+msgid "Action"
+msgstr "Действие"
+
+#: evince.xml:209(para)
+msgid "Window"
+msgstr "Прозорец"
+
+#: evince.xml:213(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+"Изтеглете файл, от друга програма като например файлов мениджър, към "
+"прозореца на <application>Evince</application>."
+
+#: evince.xml:216(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Натиснете два пъти върху файла във файловия мениджър."
+
+#: evince.xml:223(para) evince.xml:250(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+"Изберете <menuchoice><guimenu>Файл</guimenu><guimenuitem>Отваряне</"
+"guimenuitem></menuchoice>."
+
+#: evince.xml:227(para)
+msgid "Shortcut keys"
+msgstr "Бързи клавиши"
+
+#: evince.xml:228(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr ""
+"Натиснете <keycombo><keycap>Ctrl</keycap><keycap>О</keycap></keycombo>."
+
+#: evince.xml:193(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><thead><row valign=\"top\"><entry "
+"colname=\"COLSPEC0\"><placeholder-1/></entry><entry colname=\"COLSPEC1\" "
+"align=\"left\"><placeholder-2/></entry></row></thead><tbody><row valign=\"top"
+"\"><placeholder-3/><entry><placeholder-4/></entry></row><row valign=\"top"
+"\"><placeholder-5/><entry><placeholder-6/></entry></row><row valign=\"top"
+"\"><placeholder-7/><placeholder-8/></row></tbody></tgroup></informaltable>"
+msgstr ""
+"В <application>Evince</application> можете да извършвате едно и също "
+"действие по различни начини. Например, може да отварите документ по следните "
+"начини: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep="
+"\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname="
+"\"COLSPEC1\" colwidth=\"50*\"/><thead><row valign=\"top\"><entry colname="
+"\"COLSPEC0\"><placeholder-1/></entry><entry colname=\"COLSPEC1\" align=\"left"
+"\"><placeholder-2/></entry></row></thead><tbody><row valign=\"top"
+"\"><placeholder-3/><entry><placeholder-4/></entry></row><row valign=\"top"
+"\"><placeholder-5/><entry><placeholder-6/></entry></row><row valign=\"top"
+"\"><placeholder-7/><placeholder-8/></row></tbody></tgroup></informaltable>"
+
+#: evince.xml:234(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Това ръководство описва функционалността от лентата с менюта."
+
+#: evince.xml:242(title)
+msgid "Usage"
+msgstr "Употреба"
+
+#: evince.xml:246(title)
+msgid "To Open a File"
+msgstr "Отваряне на файл"
+
+#: evince.xml:247(para)
+msgid "To open a File, perform the following steps:"
+msgstr "За да отворите файл, следвайте следните стъпки:"
+
+#: evince.xml:254(para)
+msgid ""
+"In the <guilabel>Load file</guilabel> dialog, select the file you want to "
+"open."
+msgstr ""
+"В прозореца за <guilabel>Зареждане на файл</guilabel>, изберете файла, който "
+"искате да отворите."
+
+#: evince.xml:259(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+"Натиснете <guibutton>Отваряне</guibutton>. <application>Evince</application> "
+"показва името на документа в заглавната лента на главния прозорец прозорец."
+
+#: evince.xml:264(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+"За да отворите друг документ, изберете отново <menuchoice><guimenu>Файл</"
+"guimenu><guimenuitem>Отваряне</guimenuitem></menuchoice>. "
+"<application>Evince</application> отваря всеки файл в отделен прозорец."
+
+#: evince.xml:267(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+"Ако се опитате да отворите документ с формат, който <application>Evince</"
+"application> не разпознава, програмата ще покаже съобщение за грешка."
+
+#: evince.xml:273(title)
+msgid "To Navigate Through a Document"
+msgstr "Навигация из документа"
+
+#: evince.xml:274(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Може да сменяте прегледа на файл, както следва:"
+
+#: evince.xml:277(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+"За да видите следващата страница, изберете <menuchoice><guimenu>Отиване</"
+"guimenu><guimenuitem>Следваща страница</guimenuitem></menuchoice>."
+
+#: evince.xml:281(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+"За да видите предишната страница, изберете <menuchoice><guimenu>Отиване</"
+"guimenu><guimenuitem>Предишна страница</guimenuitem></menuchoice>."
+
+#: evince.xml:285(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+"За да видите първата страница, изберете <menuchoice><guimenu>Отиване</"
+"guimenu><guimenuitem>Първа страница</guimenuitem></menuchoice>."
+
+#: evince.xml:289(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+"За да видите последната страница, изберете <menuchoice><guimenu>Отиване</"
+"guimenu><guimenuitem>Последна страница</guimenuitem></menuchoice>."
+
+#: evince.xml:293(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+"За да видите точно определена страница, въведете номера или етикета на "
+"страницата в текстовото поле на лентата с инструменти и натиснете "
+"<keycap>Enter</keycap>."
+
+#: evince.xml:300(title)
+msgid "To Scroll a Page"
+msgstr "Прелистване"
+
+#: evince.xml:301(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+"За да се покаже съдържанието на страница, което не се вижда на момента в "
+"района на преглед, използвайте следните методи:"
+
+#: evince.xml:304(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Използвайте интервала или стрелките на клавиатурата."
+
+#: evince.xml:307(para)
+msgid ""
+"Drag the display area in the opposite direction to the direction in which "
+"you want to scroll. For example, to scroll down the page, drag the display "
+"area upwards in the window."
+msgstr ""
+"Изтеглете района на преглед в обратната посока, на която искате да "
+"преместите страницата. Примерно, ако искате да прелистите надолу, изтеглете "
+"района на преглед нагоре."
+
+#: evince.xml:310(para)
+msgid "Use the scrollbars on the window."
+msgstr "Използвайте плъзгача за прелистване отстрани на прозореца."
+
+#: evince.xml:317(title)
+msgid "To Change the Page Size"
+msgstr "Промяна размера на страницата"
+
+#: evince.xml:318(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+"Може да използвате следните методи, за да преоразмерите страница в района на "
+"преглед на <application>Evince</application>:"
+
+#: evince.xml:323(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+"За да увеличите размера на страницата, изберете <menuchoice><guimenu>Изглед</"
+"guimenu><guimenuitem>Увеличаване</guimenuitem></menuchoice>."
+
+#: evince.xml:328(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+"За да намалите размера на страницата, изберете <menuchoice><guimenu>Изглед</"
+"guimenu><guimenuitem>Намаляване</guimenuitem></menuchoice>."
+
+#: evince.xml:333(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+"За да преоразмерите страница, така че да има същата ширина като района на "
+"преглед на <application>Evince</application>, изберете "
+"<menuchoice><guimenu>Изглед</guimenu><guimenuitem>Запълване на страницата по "
+"ширина</guimenuitem></menuchoice>."
+
+#: evince.xml:338(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+"За да преоразмерите страница, така че пасне като големина на района на "
+"преглед на <application>Evince</application>, изберете "
+"<menuchoice><guimenu>Изглед</guimenu><guimenuitem>Запълване на екрана</"
+"guimenuitem></menuchoice>."
+
+#: evince.xml:343(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+"За да преоразмерите прозореца на <application>Evince</application>, така че "
+"да има същата дължина и височина като екрана, изберете "
+"<menuchoice><guimenu>Изглед</guimenu><guimenuitem>Цял екран</guimenuitem></"
+"menuchoice>. За върнете прозореца на <application>Evince</application> към "
+"предишните му размери, натиснете на бутона <guibutton>Напускане на режим "
+"„Цял екран“</guibutton>."
+
+#: evince.xml:351(title)
+msgid "To View Pages or Document Structure"
+msgstr "За преглед на страниците или структурата на документа"
+
+#: evince.xml:352(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "За преглеждате отметките или страниците, следвайте следните стъпки:"
+
+#: evince.xml:356(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"Изберете <menuchoice><guimenu>Изглед</guimenu><guimenuitem>Странична лента</"
+"guimenuitem></menuchoice> или натиснете <keycap>F9</keycap>."
+
+#: evince.xml:361(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+"Използвайте падащия списък в горната част на страничния панел, за да "
+"изберете дали да показва стуктурата на документа или страниците."
+
+#: evince.xml:366(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+"Използвайте плъзгачите на страничния панел, за да прегледате необходимия "
+"обект или страница в страничния панел."
+
+#: evince.xml:371(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+"Натиснете върху някой запис, за да отидете към него в документа. Натиснете "
+"на някоя страница, за да отидете към нея в документа."
+
+#: evince.xml:377(title)
+msgid "To View the Properties of a Document"
+msgstr "Преглед на настройките за документ"
+
+#: evince.xml:378(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"За да прегледате настройките за документ, изберете "
+"<menuchoice><guimenu>Файл</guimenu><guimenuitem>Настройки</guimenuitem></"
+"menuchoice>."
+
+#: evince.xml:384(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+"Прозорецът <guilabel>Настройки</guilabel> показва цялата налична информация."
+
+#: evince.xml:390(title)
+msgid "To Print a Document"
+msgstr "Разпечатване на документ"
+
+#: evince.xml:391(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"За да разпечатате документ, изберете <menuchoice><guimenu>Файл</"
+"guimenu><guimenuitem>Печат</guimenuitem></menuchoice>."
+
+#: evince.xml:395(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+"Ако не можете да изберете елемента <guimenuitem>Печат</guimenuitem>, авторът "
+"на документа е изключил опцията за печат за този документ. За да включите "
+"опцията за печат, трябва да въведете главната парола, когато отваряте "
+"документа. Вижте <xref linkend=\"evince-password\"/> за повече информация "
+"относно паролно защитените файлове."
+
+#: evince.xml:399(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr "Прозорецът за <guilabel>Печат</guilabel> има следните раздели:"
+
+#: evince.xml:405(link) evince.xml:421(title)
+msgid "Job"
+msgstr "Задача"
+
+#: evince.xml:410(link) evince.xml:443(title) evince.xml:445(guilabel)
+msgid "Printer"
+msgstr "Принтер"
+
+#: evince.xml:415(link) evince.xml:537(title)
+msgid "Paper"
+msgstr "Хартия"
+
+#: evince.xml:423(guilabel)
+msgid "Print range"
+msgstr "Обхват на печата"
+
+#: evince.xml:425(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+"Изберете една от следните опции, за да определите колко страници да бъдат "
+"отпечатани:"
+
+#: evince.xml:428(guilabel)
+msgid "All"
+msgstr "Всички"
+
+#: evince.xml:429(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Изберете тази опция, за да разпечатате всички станици в документа."
+
+#: evince.xml:432(guilabel)
+msgid "Pages From"
+msgstr "Страници от"
+
+#: evince.xml:433(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"Изберете тази опция, за да разпечатате избраният обхват от страници в "
+"документа. Използвайте полетата, за да определите първата и последната "
+"страница на обхвата."
+
+#: evince.xml:447(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr ""
+"Използвайте падащия списък, за да изберете принтера, на който искате да "
+"отпечатате документа."
+
+#: evince.xml:449(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+"Опцията <guilabel>Създаване на PDF документ</guilabel> не е поддържана в "
+"тази версия на <application>Evince</application>."
+
+#: evince.xml:455(guilabel)
+msgid "Settings"
+msgstr "Настройки"
+
+#: evince.xml:457(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "Използвайте падащия списък, за да изберете настройки за принтера."
+
+#: evince.xml:459(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+"За да конфигурирате принтера, натиснете <guibutton>Настройки</guibutton>. "
+"Примерно, може да включите или изключите печатане от двете страни или да "
+"настроите печатане в точно време, ако тази функционалност е поддържана от "
+"принтера Ви."
+
+#: evince.xml:463(guilabel)
+msgid "Location"
+msgstr "Местоположение"
+
+#: evince.xml:465(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr ""
+"Използвайте падащия списък, за да изберете едно от следните печатни "
+"дестинации:"
+
+#: evince.xml:470(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: evince.xml:472(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Разпечатване на документа на CUPS принтер."
+
+#: evince.xml:476(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+"Ако избраният принтер е CUPS принтер, <guilabel>CUPS</guilabel> ще е "
+"единственият запис в този падащ списък."
+
+#: evince.xml:483(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: evince.xml:485(para)
+msgid "Print the document to a printer."
+msgstr "Разпечатване на документа на принтер."
+
+#: evince.xml:491(guilabel)
+msgid "File"
+msgstr "Файл"
+
+#: evince.xml:493(para)
+msgid "Print the document to a PostScript file."
+msgstr "Разпечатване на документа в PostScript файл."
+
+#: evince.xml:496(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+"Натиснете <guibutton>Запазване като</guibutton>, за да се появи прозорец, "
+"където да определите името и местоположението на PostScript файла."
+
+#: evince.xml:502(guilabel)
+msgid "Custom"
+msgstr "По избор"
+
+#: evince.xml:504(para)
+msgid "Use the specified command to print the document."
+msgstr "Използване на указаната команда, за да разпечатате документа."
+
+#: evince.xml:507(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr ""
+"Въведете името на командата в текстовото поле. Включете всички командни "
+"аргументи."
+
+#: evince.xml:515(guilabel)
+msgid "State"
+msgstr "Състояние"
+
+#: evince.xml:517(para) evince.xml:523(para) evince.xml:529(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+"Тази функционалност не се поддържа от тази версия на <application>Evince</"
+"application>."
+
+#: evince.xml:521(guilabel)
+msgid "Type"
+msgstr "Вид"
+
+#: evince.xml:527(guilabel)
+msgid "Comment"
+msgstr "Коментар"
+
+#: evince.xml:539(guilabel)
+msgid "Paper size"
+msgstr "Размер на хартията"
+
+#: evince.xml:541(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+"Използвайте този падащ списък, за да изберете размер на хартията, на която "
+"искате да печатате."
+
+#: evince.xml:544(guilabel)
+msgid "Width"
+msgstr "Ширина"
+
+#: evince.xml:546(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+"Използвайте това поле, за да определите ширината на хартията. Използвайте "
+"близкия падащ списък, за да промените мерната единица."
+
+#: evince.xml:549(guilabel)
+msgid "Height"
+msgstr "Височина"
+
+#: evince.xml:551(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Използвайте това поле, за да определите височината на хартията."
+
+#: evince.xml:554(guilabel)
+msgid "Feed orientation"
+msgstr "Ориентация на листоподаването"
+
+#: evince.xml:556(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr ""
+"Използвайте този падащ списък, за да изберете ориентацията на хартията за "
+"принтера."
+
+#: evince.xml:559(guilabel)
+msgid "Page orientation"
+msgstr "Ориентация на страницата"
+
+#: evince.xml:561(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr ""
+"Използвайте този падащ списък, за да изберете ориентацията на страницата."
+
+#: evince.xml:564(guilabel)
+msgid "Layout"
+msgstr "Оформление"
+
+#: evince.xml:566(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"Използвайте този падащ списък, за да изберете оформлението на страницата. "
+"Предварителен преглед на всяко оформление се показва в района за "
+"<guilabel>Преглед</guilabel>"
+
+#: evince.xml:569(guilabel)
+msgid "Paper Tray"
+msgstr "Контейнер за хартията"
+
+#: evince.xml:571(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Използвайте този падащ списък, за да изберете контейнера за хартията."
+
+#: evince.xml:581(title)
+msgid "To Copy a Document"
+msgstr "Копиране на документ"
+
+#: evince.xml:582(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "За да копирате файл, следвайте следните стъпки:"
+
+#: evince.xml:586(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Изберете <menuchoice><guimenu>Файл</guimenu><guimenuitem>Запазване на копие</"
+"guimenuitem></menuchoice>."
+
+#: evince.xml:591(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+"Въведете новото файлово име в полето <guilabel>Име</guilabel> в прозореца "
+"<guilabel>Запазване на копие</guilabel>."
+
+#: evince.xml:594(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+"Ако е нужно, определете местоположението на копирания документ. По "
+"подразбиране, копията се запазват в домашната Ви папка."
+
+#: evince.xml:599(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Натиснете <guibutton>Запазване</guibutton>."
+
+#: evince.xml:608(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Работа с документи, защитени с парола"
+
+#: evince.xml:609(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr ""
+"Авторът може да използва следните паролни нива, за да защитава документите:"
+
+#: evince.xml:614(para)
+msgid "User password that allows others only to read the document."
+msgstr ""
+"Потребителска парола, която позволява на други хора само да четат документа."
+
+#: evince.xml:618(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+"Главна парола, която позволява други да изпълняват допълнителни действия, "
+"като разпечатване на документа."
+
+#: evince.xml:622(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+"Когато се опитате да отворите паролно защитен документ, <application>Evince</"
+"application> показва прозорец за сигурността. Въведете или потребителската "
+"парола, или главната такава в полето за <guilabel>Въвеждане на документна "
+"парола</guilabel> и после натиснете <guibutton>Отваряне на документ</"
+"guibutton>."
+
+#: evince.xml:629(title)
+msgid "To Close a Document"
+msgstr "Затваряне на документ"
+
+#: evince.xml:630(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"За да затворите документ, изберете <menuchoice><guimenu>Файл</"
+"guimenu><guimenuitem>Затваряне</guimenuitem></menuchoice>."
+
+#: evince.xml:632(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+"Ако прозорецът е последният отворен <application>Evince</application> "
+"прозорец, програмата ще се затвори."
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: evince.xml:0(None)
+msgid "translator-credits"
+msgstr "Ростислав \"zbrox\" Райков <[email protected]>, 2005."
diff --git a/help/bg/figures/evince_start_window.png b/help/bg/figures/evince_start_window.png
new file mode 100644
index 00000000..9fbdb3fd
--- /dev/null
+++ b/help/bg/figures/evince_start_window.png
Binary files differ
diff --git a/help/ca/ca.po b/help/ca/ca.po
new file mode 100644
index 00000000..0f5dce9b
--- /dev/null
+++ b/help/ca/ca.po
@@ -0,0 +1,1281 @@
+# Carles Ferrando Garcia <[email protected]>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: Evince\n"
+"POT-Creation-Date: 2010-04-21 22:12+0000\n"
+"PO-Revision-Date: 2010-04-22 16:06+0200\n"
+"Last-Translator: Carles Ferrando Garcia <[email protected]>\n"
+"Language-Team: catalan <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:155(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Manual del visualitzador de documents Evince"
+
+#: C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr ""
+"L'aplicació de visualització de documents Evince us permet visualitzar "
+"documents en diferents formats, per exemple el Format de Document Portable "
+"(PDF) i PostScript"
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder) C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder) C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername) C/evince.xml:67(orgname)
+#: C/evince.xml:93(para) C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "Projecte de Documentació del MATE"
+
+#: C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Teniu permís per a copiar, distribuir i/o modificar aquest document, sota "
+"els termes de la Llicència de documentació lliure GNU (GFDL), versió 1.1 o "
+"qualsevol versió publicada posteriorment per la Free Software Foundation, "
+"sense seccions invariants, sense texts de portada i sense texts de "
+"contraportada. Podeu trobar una còpia de la GFDL en aquest <ulink type=\"help"
+"\" url=\"ghelp:fdl\">enllaç</ulink> o en el fitxer COPYING-DOCS distribuït "
+"amb aquest manual."
+
+#: C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Aquest manual forma part d'una col·lecció de manuals del MATE distribuïts "
+"sota la GFDL. Si voleu distribuir aquest manual independentment de la "
+"col·lecció, podeu fer-ho afegint una còpia de la llicència al manual, tal "
+"com es descriu a la secció 6 de la llicència."
+
+#: C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Molts dels noms que les empreses utilitzen per a distingir els seus "
+"productes i serveis es consideren marques comercials. Quan aquests noms "
+"apareguin en qualsevol documentació del MATE, si els membres del Projecte "
+"de documentació del MATE han estat avisats pel que fa a les marques, els "
+"noms apareixeran en majúscules o amb les inicials en majúscules."
+
+#: C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"EL DOCUMENT S'OFEREIX «TAL COM ÉS», SENSE CAP TIPUS DE GARANTIA, NI EXPLÍCITA "
+"NI IMPLÍCITA; AIXÒ INCLOU, SENSE LIMITAR-S'HI, LES GARANTIES QUE EL DOCUMENT "
+"O LA VERSIÓ MODIFICADA DEL DOCUMENT NO TINGUI DEFECTES, SIGUI "
+"COMERCIALITZABLE, SIGUI ADEQUAT PER A UN ÚS CONCRET O NO INFRINGEIXI CAP "
+"LLEI. TOT EL RISC PEL QUE FA A LA QUALITAT, EXACTITUD I RENDIMENT DEL "
+"DOCUMENT O LA VERSIÓ MODIFICADA DEL DOCUMENT ÉS VOSTRE. EN CAS QUE EL "
+"DOCUMENT RESULTÉS DEFECTUÓS EN QUALSEVOL ASPECTE, VÓS (NO PAS L'ESCRIPTOR "
+"INICIAL, L'AUTOR O CAP ALTRE COL·LABORADOR) ASSUMIU TOT EL COST DE "
+"MANTENIMENT, REPARACIÓ O CORRECCIÓ. AQUESTA RENÚNCIA DE GARANTIA CONSTITUEIX "
+"UNA PART ESSENCIAL D'AQUESTA LLICÈNCIA. NO S'AUTORITZA L'ÚS DE CAP DOCUMENT "
+"O VERSIÓ MODIFICADA DEL DOCUMENT EXCEPTE SOTA AQUESTA RENÚNCIA DE GARANTIA; "
+"I "
+
+#: C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"EN CAP CAS I SOTA CAP INTERPRETACIÓ LEGAL, JA SIGUI PER AGREUJAMENT "
+"(INCLOENT-HI LA NEGLIGÈNCIA), CONTRACTE O ALTRE CAS, L'AUTOR, L'ESCRIPTOR "
+"ORIGINAL, QUALSEVOL DELS COL·LABORADORS O DISTRIBUÏDORS DEL DOCUMENT O UNA "
+"VERSIÓ MODIFICADA DEL DOCUMENT NI CAP PROVEÏDOR D'AQUESTES PARTS NO SERAN "
+"RESPONSABLES DAVANT DE NINGÚ PER CAP DANY DIRECTE, INDIRECTE, ESPECIAL, "
+"ACCIDENTAL O CONSECUTIU DE QUALSEVOL TIPUS; AIXÒ INCLOU, SENSE LIMITAR-S'HI, "
+"ELS DANYS PER PÈRDUA DE CLIENTS, INTERRUPCIONS DE LA FEINA, FALLADA O "
+"MALFUNCIONAMENT DE L'ORDINADOR, O QUALSEVOL ALTRA PÈRDUA O DANY RELACIONAT "
+"AMB L'ÚS DEL DOCUMENT I LES VERSIONS MODIFICADES DEL DOCUMENT, FINS I TOT SI "
+"S'HA INFORMAT AQUESTA PART DE LA POSSIBILITAT D'AQUESTS DANYS."
+
+#: C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"EL DOCUMENT I LES VERSIONS MODIFICADES DEL DOCUMENT S'OFEREIXEN SOTA ELS "
+"TERMES DE LA LLICÈNCIA DE DOCUMENTACIÓ LLIURE DE GNU, TENINT EN COMPTE QUE: "
+"<placeholder-1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "Equip de documentació del MATE"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Manual del visualitzador de documents Evince v1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "2008-04-05"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Manual del visualitzador de documents Evince v1.0"
+
+#: C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "2005-04-06"
+
+#: C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr ""
+"Aquest manual descriu la versió 0.2 del visualitzador de documents Evince"
+
+#: C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "Comentaris"
+
+#: C/evince.xml:110(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"Per informar d'un error o fer suggeriments quant al visualitzador de "
+"documents Evince o aquest manual, seguiu les directrius de la <ulink url="
+"\"ghelp:mate-feedback\" type=\"help\">Pàgina de comentaris del MATE</ulink>"
+
+#: C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Visualitzador de documents Evince"
+
+#: C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "Introducció"
+
+#: C/evince.xml:129(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+"El <application>visualitzador de documents Evince</application> us permet "
+"visualitzar documents en diferents, per exemple el Format de Document "
+"Portable (PDF) i PostScript. El <application>visualitzador de documents "
+"Evince</application> segueix els estàndards de Freedesktop.org i el MATE "
+"per proporcionar integració amb l'entorn d'escriptori."
+
+#: C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "Primers passos"
+
+#: C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Per iniciar el visualitzador de documents Evince"
+
+#: C/evince.xml:140(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+"El <application>visualitzador de documents Evince</application> s'inicia "
+"quan obriu un document PDF o PostScript."
+
+#: C/evince.xml:141(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+"Alternativament, podeu iniciar el <application>visualitzador de documents "
+"Evince</application> des de la línia d'ordres, amb l'ordre: <command>evince</"
+"command>."
+
+#: C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Quan inicieu el visualitzador de documents Evince"
+
+#: C/evince.xml:147(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"Quan inicieu <application>visualitzador de documents Evince</application>, "
+"es mostrarà la finestra següent."
+
+#: C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Finestra del visualitzador de documents Evince"
+
+#: C/evince.xml:158(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+"Mostra la finestra principal del visualitzador de documents Evince. Conté la "
+"barra de títol, la barra de menú, la barra d'eines i l'àrea de "
+"visualització. La barra de menú conté els menús Fitxer, Edita, Visualitza, "
+"Vés i Ajuda"
+
+#: C/evince.xml:164(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+"La finestra del <application>visualitzador de documents Evince</application> "
+"conté els elements següents:"
+
+#: C/evince.xml:168(term) C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "Barra de menú"
+
+#: C/evince.xml:170(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+"Els menús de la barra de menú contenen totes les ordres que necessiteu per "
+"treballar amb documents en el <application>visualitzador de documents "
+"Evince</application>."
+
+#: C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "Barra d'eines"
+
+#: C/evince.xml:176(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr ""
+"La barra d'eines conté un subconjunt de les ordres que podeu accedir des de "
+"la barra de menú"
+
+#: C/evince.xml:180(term)
+msgid "Display area"
+msgstr "Àrea de visualització"
+
+#: C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "L'àrea de visualització mostra el document."
+
+#: C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "Component UI"
+
+#: C/evince.xml:198(para) C/evince.xml:646(para)
+msgid "Action"
+msgstr "Acció"
+
+#: C/evince.xml:203(para)
+msgid "Window"
+msgstr "Finestra"
+
+#: C/evince.xml:207(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+"Arrossegueu un fitxer a la finestra del <application>visualitzador de "
+"documents Evince</application> des d'una altra aplicació com un gestor de "
+"fitxers."
+
+#: C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Feu un doble clic en un fitxer en el gestor de fitxers"
+
+#: C/evince.xml:217(para) C/evince.xml:244(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+"Trieu <menuchoice><guimenu>Fitxer</guimenu><guimenuitem>Obre</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "Tecles de drecera"
+
+#: C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "Premeu <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:187(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+msgstr ""
+"En el <application>visualitzador de documents Evince</application>, podeu "
+"fer la mateixa acció de moltes maneres diferents. Per exemple, podeu obrir "
+"un document de les següents maneres: <informaltable frame=\"all\"><tgroup "
+"cols=\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth="
+"\"50*\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/"
+"><placeholder-2/></tgroup></informaltable>"
+
+#: C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Aquest manual documenta la funcionalitat des de la barra de menú"
+
+#: C/evince.xml:236(title)
+msgid "Usage"
+msgstr "Ús"
+
+#: C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "Per a obrir un document"
+
+#: C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Per a obrir un document, seguiu els passos següents:"
+
+#: C/evince.xml:248(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want "
+"to open."
+msgstr ""
+"En el diàleg d'<guilabel>Obre un document</guilabel>, seleccioneu el fitxer "
+"que voleu obrir."
+
+#: C/evince.xml:253(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+"Feu clic a <guibutton>Obre</guibutton>. El <application>visualitzador de "
+"documents Evince</application> mostra el nom del document en la barra de "
+"títol de la finestra."
+
+#: C/evince.xml:258(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+"Per a obrir un altre document, trieu altre cop <menuchoice><guimenu>Fitxer</"
+"guimenu><guimenuitem>Obre</guimenuitem></menuchoice>. El "
+"<application>visualitzador de documents Evince</application> obre cada "
+"fitxer en una finestra nova."
+
+#: C/evince.xml:261(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+"Si proveu d'obrir un document amb un format que no reconeix el "
+"<application>visualitzador de documents Evince</application>, l'aplicació "
+"mostrarà un missatge d'error."
+
+#: C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "Per navegar a través d'un document"
+
+#: C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Per navegar per un document heu de fer el següent:"
+
+#: C/evince.xml:271(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+"Per veure la pàgina següent, trieu <menuchoice><guimenu>Vés</"
+"guimenu><guimenuitem>Pàgina següent</guimenuitem></menuchoice>."
+
+#: C/evince.xml:275(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+"Per veure la pàgina anterior, trieu <menuchoice><guimenu>Vés</"
+"guimenu><guimenuitem>Pàgina anterior</guimenuitem></menuchoice>."
+
+#: C/evince.xml:279(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+"Per veure la primera pàgina del document, trieu <menuchoice><guimenu>Vés</"
+"guimenu><guimenuitem>Primera pàgina</guimenuitem></menuchoice>."
+
+#: C/evince.xml:283(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+"Per veure l'última pàgina del document, trieu <menuchoice><guimenu>Vés</"
+"guimenu><guimenuitem>Última pàgina</guimenuitem></menuchoice>."
+
+#: C/evince.xml:287(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+"Per veure una pàgina en concret, entreu el número de pàgina o la seva "
+"etiqueta en el requadre de text de la barra d'eines, després premeu "
+"<keycap>Retorn</keycap>."
+
+#: C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "Per desplaçar-vos per una pàgina"
+
+#: C/evince.xml:295(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+"Per mostrar el contingut d'una pàgina que no s'està mostrant en l'àrea de "
+"visualització, seguiu els mètodes següents:"
+
+#: C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Feu servir les tecles de fletxa o la tecla d'espai del teclat."
+
+#: C/evince.xml:301(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+msgstr ""
+"Arrossegueu l'àrea de visualització fent clic amb el botó del mig en "
+"qualsevol lloc del document i després moveu el ratolí. Per exemple, per a "
+"desplaçar-vos cap avall de la pàgina, arrossegueu l'àrea de visualització "
+"cap amunt de la finestra."
+
+#: C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "Utilitzeu les barres de desplaçament de la finestra"
+
+#: C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "Per canviar la mida de la pàgina"
+
+#: C/evince.xml:312(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+"Per redimensionar una pàgina en l'àrea de visualització del "
+"<application>visualitzador de documents Evince</application> podeu utilitzar "
+"els següents mètodes:"
+
+#: C/evince.xml:317(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+"Per incrementar la mida de la pàgina, trieu <menuchoice><guimenu>Visualitza</"
+"guimenu><guimenuitem>Amplia</guimenuitem></menuchoice>."
+
+#: C/evince.xml:322(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+"Per decrementar la mida de la pàgina, trieu <menuchoice><guimenu>Visualitza</"
+"guimenu><guimenuitem>Redueix</guimenuitem></menuchoice>."
+
+#: C/evince.xml:327(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+"Per redimensionar una pàgina perquè tingui la mateixa amplada que l'àrea de "
+"visualització del <application>visualitzador de documents Evince</"
+"application>, trieu <menuchoice><guimenu>Visualitza</"
+"guimenu><guimenuitem>Ajusta a l'amplada de la pàgina</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:332(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+"Per a redimensionar la pàgina perquè es vegi en tota l'àrea de visualització "
+"del <application>visualitzador de documents Evince</application>, trieu "
+"<menuchoice><guimenu>Visualitza</guimenu><guimenuitem>Millor ajust</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:337(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+"Per a que la finestra del <application>visualitzador de documents Evince</"
+"application> tingui la mateixa amplada i alçada que la pantalla, trieu "
+"<menuchoice><guimenu>Visualitza</guimenu><guimenuitem>Pantalla completa</"
+"guimenuitem></menuchoice>. Per a redimensionar la finestra del "
+"<application>visualitzador de documents Evince</application> a la mida "
+"original, feu clic al botó <guibutton>Surt de pantalla completa</guibutton>."
+
+#: C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr ""
+"Per a visualitzar miniatures de les pàgines o l'estructura del document"
+
+#: C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "Per a veure adreces d'interès o pàgines, seguiu els passos següents:"
+
+#: C/evince.xml:350(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"Trieu <menuchoice><guimenu>Visualitza</guimenu><guimenuitem>Barra lateral</"
+"guimenuitem></menuchoice> o premeu <keycap>F9</keycap>."
+
+#: C/evince.xml:355(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+"Utilitzeu la llista desplegable en la capçalera de la subfinestra lateral "
+"per seleccionar si voleu visualitzar l'estructura del document o les "
+"miniatures de les pàgines en subfinestra lateral."
+
+#: C/evince.xml:360(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+"Utilitzeu les barres de desplaçament de la subfinestra lateral per "
+"visualitzar l'element desitjat o la miniatura de la pàgina en la subfinestra "
+"lateral."
+
+#: C/evince.xml:365(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+"Feu clic en una entrada per navegar a aquella ubicació del document. Feu "
+"clic en una miniatura de pàgina per navegar a aquella pàgina del document."
+
+#: C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "Per visualitzar les propietats d'un document"
+
+#: C/evince.xml:372(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"Per visualitzar les propietats d'un document, trieu "
+"<menuchoice><guimenu>Fitxer</guimenu><guimenuitem>Propietats</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:378(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+"El diàleg de <guilabel>Propietats</guilabel> mostra tota la informació "
+"disponible"
+
+#: C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "Per a imprimir un document"
+
+#: C/evince.xml:385(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"Per a imprimir un document, trieu <menuchoice><guimenu>Fitxer</"
+"guimenu><guimenuitem>Imprimeix</guimenuitem></menuchoice>."
+
+#: C/evince.xml:389(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+"Si no podeu triar l'element de menú <guimenuitem>Imprimeix</guimenuitem>, "
+"l'autor del document ha inhabilitat l'opció d'impressió per a aquest "
+"document. Per a habilitar l'opció d'impressió, heu d'entrar la contrasenya "
+"mestre quan obriu el document. Vegeu <xref linkend=\"evince-password\"/> per "
+"a més informació quant al fitxers protegits per contrasenya."
+
+#: C/evince.xml:393(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr ""
+"El diàleg <guilabel>Imprimeix</guilabel> conté les següents seccions amb "
+"pestanya:"
+
+#: C/evince.xml:399(link) C/evince.xml:415(title)
+msgid "Job"
+msgstr "Treball"
+
+#: C/evince.xml:404(link) C/evince.xml:437(title) C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr "Impressora"
+
+#: C/evince.xml:409(link) C/evince.xml:531(title)
+msgid "Paper"
+msgstr "Paper"
+
+#: C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "Rang d'impressió"
+
+#: C/evince.xml:419(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+"Seleccioneu una de les opcions següents per determinar quantes pàgines "
+"s'imprimiran:"
+
+#: C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "Totes"
+
+#: C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr ""
+"Seleccioneu aquesta opció per a imprimir totes les pàgines del document."
+
+#: C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "Pàgines des de"
+
+#: C/evince.xml:427(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"Seleccioneu aquesta opció per a imprimir el rang de pàgines seleccionades "
+"del document. Utilitzeu les caixes giratòries per especificar la primera i "
+"última pàgina del rang."
+
+#: C/evince.xml:441(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr ""
+"Utilitzeu la llista desplegable per seleccionar la impressora on imprimir el "
+"document."
+
+#: C/evince.xml:443(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+"L'opció <guilabel>Crea un document PDF</guilabel> no està implementada en "
+"aquesta versió del <application>visualitzador de documents Evince</"
+"application>."
+
+#: C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "Configuració"
+
+#: C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr ""
+"Utilitzeu la llista desplegable per seleccionar la configuració de "
+"l'impressora."
+
+#: C/evince.xml:453(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+"Per configurar l'impressora, feu clic a <guibutton>Configura</guibutton>. "
+"Per exemple, podeu habilitar o inhabilitar la impressió a doble cara, o la "
+"impressió a amb retard planificat, si la impressora permet aquesta opció."
+
+#: C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "Ubicació"
+
+#: C/evince.xml:459(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr ""
+"Utilitza aquesta llista desplegable per seleccionar les següents ubicacions "
+"d'impressió:"
+
+#: C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Imprimeix el document a una impressora CUPS."
+
+#: C/evince.xml:470(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+"Si la impressora seleccionada és una impressora CUPS, <guilabel>CUPS</"
+"guilabel> és la única entrada en la llista desplegable."
+
+#: C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "Imprimeix el document a una impressora."
+
+#: C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "Fitxer"
+
+#: C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "Imprimeix el document a un fitxer PostScript."
+
+#: C/evince.xml:490(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+"Feu clic a <guibutton>Anomena i desa</guibutton> per mostrar el diàleg on "
+"podeu especificar el nom i la ubicació del fitxer PostScript."
+
+#: C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "Personalitza"
+
+#: C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "Utilitzeu l'ordre específica per imprimir el document."
+
+#: C/evince.xml:501(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr ""
+"Escriviu el nom de l'ordre en el quadre de text. Incloeu tots els arguments "
+"de la ordre."
+
+#: C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "Estat"
+
+#: C/evince.xml:511(para) C/evince.xml:517(para) C/evince.xml:523(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+"Aquesta funcionalitat no està implementada en aquesta versió del "
+"<application>visualitzador de documents Evince</application>."
+
+#: C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "Tipus"
+
+#: C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "Comentari"
+
+#: C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "Mida del paper"
+
+#: C/evince.xml:535(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+"Utilitzeu aquesta llista desplegable per seleccionar la mida del paper al "
+"que voleu imprimir el document."
+
+#: C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "Amplada"
+
+#: C/evince.xml:540(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+"Utilitzeu aquesta caixa giratòria per especificar l'amplada del paper. "
+"Utilitzeu la llista desplegable del costat per canviar les unitats de mesura."
+
+#: C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "Alçada"
+
+#: C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Utilitzeu aquesta caixa giratòria per especificar l'alçada del paper."
+
+#: C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "Orientació de l'alimentació"
+
+#: C/evince.xml:550(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr ""
+"Utilitzeu aquesta llista desplegable per seleccionar l'orientació del paper "
+"en l'impressora."
+
+#: C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr "Orientació del paper"
+
+#: C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr ""
+"Utilitzeu aquesta llista desplegable per seleccionar l'orientació de la "
+"pàgina."
+
+#: C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr "Disposició"
+
+#: C/evince.xml:560(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"Utilitzeu aquesta llista desplegable per seleccionar la disposició de la "
+"pàgina. En l'àrea de <guilabel>Previsualització</guilabel> es mostrarà una "
+"previsualització de cada disposició que seleccioneu."
+
+#: C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr "Safata de paper"
+
+#: C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr ""
+"Utilitzeu aquesta llista desplegable per seleccionar la safata de paper."
+
+#: C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "Per copiar un document"
+
+#: C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Per copiar un document, seguiu els passos següents:"
+
+#: C/evince.xml:580(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Trieu <menuchoice><guimenu>Fitxer</guimenu><guimenuitem>Desa una còpia</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:585(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+"Escriviu el nom de fitxer nou en el quadre de text <guilabel>Nom del fitxer</"
+"guilabel> en el diàleg de <guilabel>Desa una còpia</guilabel>."
+
+#: C/evince.xml:588(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+"Si és necessari, especifiqueu la ubicació del document copiat. Per defecte, "
+"les còpies es desen en el vostre directori d'inici."
+
+#: C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Feu clic a <guibutton>Desa</guibutton>."
+
+#: C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Per treballar amb documents protegits per contrasenya"
+
+#: C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr ""
+"Un autor pot utilitzar els següents nivells de contrasenya per protegir un "
+"document:"
+
+#: C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr "Contrasenya d'usuari per permetre als altres només llegir el document."
+
+#: C/evince.xml:612(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+"Contrasenya mestre que permet als altres fer accions addicionals, com "
+"imprimir el document."
+
+#: C/evince.xml:616(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+"Quan intenteu obrir un document protegit per contrasenya, el "
+"<application>visualitzador de documents Evince</application> mostra un "
+"diàleg de seguretat. Escriviu la contrasenya d'usuari o la mestre en el "
+"quadre de text <guilabel>Entreu la contrasenya del document</guilabel>, "
+"llavors feu clic a <guibutton>Obre el document</guibutton>."
+
+#: C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "Per tancar un document"
+
+#: C/evince.xml:624(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"Per tancar un document, trieu <menuchoice><guimenu>Fitxer</"
+"guimenu><guimenuitem>Tanca</guimenuitem></menuchoice>."
+
+#: C/evince.xml:626(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+"Si la finestra és l'última finestra oberta del <application>visualitzador de "
+"documents Evince</application>, es tanca l'aplicació."
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Dreceres"
+
+#: C/evince.xml:636(para)
+msgid ""
+"Below is a list of all shortcuts present in <application>Evince Document "
+"Viewer</application>:"
+msgstr ""
+"Aquí sota hi ha la llista de totes les dreceres del "
+"<application>visualitzador de documents Evince</application>."
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Drecera"
+
+#: C/evince.xml:651(keycap) C/evince.xml:655(keycap) C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap) C/evince.xml:667(keycap) C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap) C/evince.xml:683(keycap) C/evince.xml:704(keycap)
+#: C/evince.xml:750(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Obre un document existent"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Desa una còpia del document actual"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "Imprimeix un document"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Tanca la finestra"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Copia la selecció"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Selecciona-ho tot"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (barra inclinada)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Cerca una paraula o frase en el document"
+
+#: C/evince.xml:683(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:684(keycap)
+msgid "F3"
+msgstr "F3"
+
+#: C/evince.xml:686(para)
+msgid "Find next"
+msgstr "Cerca la següent"
+
+#: C/evince.xml:690(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (signe de suma)"
+
+#: C/evince.xml:691(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:692(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:694(para)
+msgid "Zoom in"
+msgstr "Amplia"
+
+#: C/evince.xml:698(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (signe de resta)"
+
+#: C/evince.xml:699(keycap)
+msgid "-"
+msgstr "-"
+
+#: C/evince.xml:701(para)
+msgid "Zoom out"
+msgstr "Redueix"
+
+#: C/evince.xml:704(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:705(para)
+msgid "Reload the document"
+msgstr "Torna a carregar el document"
+
+#: C/evince.xml:709(keycap) C/evince.xml:734(keycap)
+msgid "Page Up"
+msgstr "Retrocedir pàgina"
+
+#: C/evince.xml:710(para)
+msgid "Go to the previous page"
+msgstr "Vés a la pàgina anterior"
+
+#: C/evince.xml:713(keycap) C/evince.xml:738(keycap)
+msgid "Page Down"
+msgstr "Avançar pàgina"
+
+#: C/evince.xml:714(para)
+msgid "Go to the next page"
+msgstr "Vés a la pàgina següent"
+
+#: C/evince.xml:718(keycap) C/evince.xml:726(keycap)
+msgid "Space"
+msgstr "Espai"
+
+#: C/evince.xml:719(keycap) C/evince.xml:726(keycap) C/evince.xml:728(keycap)
+#: C/evince.xml:734(keycap) C/evince.xml:738(keycap)
+msgid "Shift"
+msgstr "Majúscules"
+
+#: C/evince.xml:719(keycap) C/evince.xml:727(keycap)
+msgid "Backspace"
+msgstr "Retrocés"
+
+#: C/evince.xml:720(keycap) C/evince.xml:728(keycap)
+msgid "Return"
+msgstr "Retorn"
+
+#: C/evince.xml:722(para)
+msgid "Scroll forward"
+msgstr "Desplaça endavant"
+
+#: C/evince.xml:730(para)
+msgid "Scroll backward"
+msgstr "Desplaça endarrere"
+
+#: C/evince.xml:735(para)
+msgid "Go a bunch of pages up"
+msgstr "Vés unes quantes pàgines endarrere"
+
+#: C/evince.xml:739(para)
+msgid "Go a bunch of pages down"
+msgstr "Vés unes quantes pàgines endavant"
+
+#: C/evince.xml:742(keycap)
+msgid "Home"
+msgstr "Inici"
+
+#: C/evince.xml:743(para)
+msgid "Go to the first page"
+msgstr "Vés a la primera pàgina"
+
+#: C/evince.xml:746(keycap)
+msgid "End"
+msgstr "Final"
+
+#: C/evince.xml:747(para)
+msgid "Go to the last page"
+msgstr "Vés a l'última pàgina"
+
+#: C/evince.xml:750(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:751(para)
+msgid "Go to page by number or label"
+msgstr "Vés a la pàgina per número o etiqueta"
+
+#: C/evince.xml:754(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:755(para)
+msgid "Help"
+msgstr "Ajuda"
+
+#: C/evince.xml:758(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:759(para)
+msgid "Run document as presentation"
+msgstr "Executa el document com a presentació"
+
+#: C/evince.xml:762(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:763(para)
+msgid "Show or hide the side pane"
+msgstr "Mostra o oculta la subfinestra lateral"
+
+#: C/evince.xml:766(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:767(para)
+msgid "Toggle fullscreen mode"
+msgstr "Commuta el mode a pantalla completa"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr "Gil Forcada <[email protected]>"
diff --git a/help/ca/figures/evince_start_window.png b/help/ca/figures/evince_start_window.png
new file mode 100644
index 00000000..62235ab1
--- /dev/null
+++ b/help/ca/figures/evince_start_window.png
Binary files differ
diff --git a/help/cs/cs.po b/help/cs/cs.po
new file mode 100644
index 00000000..b7a087ed
--- /dev/null
+++ b/help/cs/cs.po
@@ -0,0 +1,1257 @@
+# Czech translation of evince
+# Copyright (C) YEAR THE evince COPYRIGHT HOLDER
+# This file is distributed under the same license as the evince package.
+# Martin Picek <[email protected]>, 2009.
+# Lucas Lommer <[email protected]>, 2009. (mikroopravy)
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince mate-2-28\n"
+"POT-Creation-Date: 2009-07-15 06:55+0000\n"
+"PO-Revision-Date: 2009-07-17 06:41+0100\n"
+"Last-Translator: Marek Černocký <[email protected]>\n"
+"Language-Team: Czech <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Poedit-Language: Czech\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:155(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Příručka k prohlížeči dokumentů Evince"
+
+#: C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr ""
+"Aplikace prohlížeč dokumentů Evince umožňuje prohlížení dokumentů v různých "
+"formátech souborů, jako jsou Portable Document Format (PDF) nebo PostScript."
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder) C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder) C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername) C/evince.xml:67(orgname)
+#: C/evince.xml:93(para) C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "Dokumentační projekt MATE"
+
+#: C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Je povoleno kopírovat, šířit a/nebo upravovat tento dokument za podmínek GNU "
+"Free Documentation License (GFDL) ve verzi 1.1 nebo v jakékoli další verzi "
+"vydané nadací Free Software Foundation; bez neměnných oddílů, bez textů "
+"předních desek a bez textů zadních desek. Kopii licence GFDL naleznete pod "
+"<ulink type=\"help\" url=\"ghelp:fdl\">tímto odkazem</ulink> nebo v souboru "
+"COPYING-DOCS dodávaném s touto příručkou."
+
+#: C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Tato příručka je součástí sbírky příruček MATE šířených za podmínek licence "
+"GNU FDL. Pokud chcete tento dokument šířit odděleně od sbírky, musíte "
+"přiložit kopii licence dle popisu v oddílu 6 dané licence."
+
+#: C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Mnoho užívaných názvů určených k zviditelnění produktů nebo služeb jsou "
+"ochranné známky. Na místech, kde jsou tato jména v dokumentaci užita a "
+"členové Dokumentačního projektu MATE jsou si vědomi skutečnosti, že se "
+"jedná o ochrannou známku, je takové jméno psáno velkými písmeny celé nebo s "
+"velkým písmenem na začátku."
+
+#: C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"DOKUMENT JE POSKYTOVÁN V PODOBĚ „JAK JE“ BEZ ZÁRUKY V JAKÉKOLIV PODOBĚ, "
+"NEPOSKYTUJÍ SE ANI ODVOZENÉ ZÁRUKY, ZÁRUKY, ŽE DOKUMENT, NEBO JEHO UPRAVENÁ "
+"VERZE, JE BEZCHYBNÝ NEBO ZÁRUKY PRODEJNOSTI, VHODNOSTI PRO URČITÝ ÚČEL NEBO "
+"NEPORUŠENOSTI. RIZIKO NEKVALITY, NEPŘESNOSTI A ŠPATNÉHO PROVEDENÍ DOKUMENTU, "
+"NEBO JEHO UPRAVENÉ VERZE, LEŽÍ NA VÁS. POKUD KVŮLI TOMUTO DOKUMENTU, NEBO "
+"JEHO UPRAVENÉ VERZI, NASTANE PROBLÉM, VY (NIKOLIV PŮVODNÍ AUTOR NEBO "
+"JAKÝKOLIV PŘISPĚVATEL) PŘEBÍRÁTE JAKÉKOLIV NÁKLADY ZA NUTNÉ ÚPRAVY, OPRAVY "
+"ČI SLUŽBY. TOTO PROHLÁŠENÍ O ZÁRUCE PŘEDSTAVUJE ZÁKLADNÍ SOUČÁST TÉTO "
+"LICENCE. BEZ TOHOTO PROHLÁŠENÍ NENÍ, PODLE TÉTO DOHODY, POVOLENO UŽÍVÁNÍ ANI "
+"ÚPRAVY TOHOTO DOKUMENTU; DÁLE"
+
+#: C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"ZA ŽÁDNÝCH OKOLNOSTÍ A ŽÁDNÝCH PRÁVNÍCH PŘEDPOKLADŮ, AŤ SE JEDNÁ O PŘEČIN "
+"(VČETNĚ NEDBALOSTNÍCH), SMLOUVU NEBO JINÉ, NENÍ AUTOR, PŮVODNÍ PISATEL, "
+"KTERÝKOLIV PŘISPĚVATEL NEBO KTERÝKOLIV DISTRIBUTOR TOHOTO DOKUMENTU NEBO "
+"UPRAVENÉ VERZE DOKUMENTU NEBO KTERÝKOLIV DODAVATEL NĚKTERÉ Z TĚCHTO STRAN "
+"ODPOVĚDNÝ NĚJAKÉ OSOBĚ ZA PŘÍMÉ, NEPŘÍMÉ, SPECIÁLNÍ, NAHODILÉ NEBO NÁSLEDNÉ "
+"ŠKODY JAKÉHOKOLIV CHARAKTERU, VČETNĚ, ALE NEJEN, ZA POŠKOZENÍ ZE ZTRÁTY "
+"DOBRÉHO JMÉNA, PŘERUŠENÍ PRÁCE, PORUCHY NEBO NESPRÁVNÉ FUNKCE POČÍTAČE NEBO "
+"JINÉHO A VŠECH DALŠÍCH ŠKOD NEBO ZTRÁT VYVSTÁVAJÍCÍCH Z NEBO VZTAHUJÍCÍCH SE "
+"K POUŽÍVÁNÍ TOHOTO DOKUMENTU NEBO UPRAVENÝCH VERZÍ DOKUMENTU, I KDYŽ BY "
+"TAKOVÁTO STRANA BYLA INFORMOVANÁ O MOŽNOSTI TAKOVÉHOTO POŠKOZENÍ."
+
+#: C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"DOKUMENT A JEHO UPRAVENÉ VERZE JSOU ŠÍŘENY V SOULADU SE ZNĚNÍM LICENCE GNU "
+"FREE DOCUMENTATION LICENSE S NÁSLEDUJÍCÍM USTANOVENÍM: <placeholder-1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "Dokumentační tým MATE"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Příručka k prohlížeči dokumentů Evince V1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "5.4.2008"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Příručka k prohlížeči dokumentů Evince V1.0"
+
+#: C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "6.4.2005"
+
+#: C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "Tato příručka popisuje prohlížeč dokumentů ve verzi 0.2"
+
+#: C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "Ohlasy"
+
+#: C/evince.xml:110(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"Pokud chcete oznámit chybu nebo navrhnout vylepšení vztahující se k aplikaci "
+"Evince nebo této příručce, postupujte dle instrukcí na stránce <ulink url="
+"\"ghelp:mate-feedback\" type=\"help\">Zpětná vazba MATE</ulink>."
+
+#: C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Prohlížeč dokumentů Evince"
+
+#: C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "Úvod"
+
+#: C/evince.xml:129(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+"Aplikace <application>prohlížeč dokumentů Evince</application> umožňuje "
+"prohlížení dokumentů v různých formátech souborů, jako jsou Portable "
+"Document Format (PDF) nebo PostScript. <application>Prohlížeč dokumentů "
+"Evince</application> ctí standardy Freedesktop.org a MATE, aby zajistil "
+"integraci s pracovním prostředím."
+
+#: C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "Začínáme"
+
+#: C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Spuštění prohlížeče dokumentů Evince"
+
+#: C/evince.xml:140(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+"<application>Prohlížeč dokumentů Evince</application> je spuštěn, otevřete-"
+"li dokument, jakým jsou například soubory typu PDF nebo PostScript."
+
+#: C/evince.xml:141(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+"<application>Prohlížeč dokumentů Evince</application> můžete spouštět také z "
+"příkazové řádky pomocí příkazu <command>evince</command>."
+
+#: C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Když spustíte prohlížeč dokumentů Evince…"
+
+#: C/evince.xml:147(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"Když spustíte <application>prohlížeč dokumentů Evince</application>, zobrazí "
+"se následující okno."
+
+#: C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Okno prohlížeče dokumentů Evince"
+
+#: C/evince.xml:158(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+"Zobrazuje hlavní okno prohlížeče dokumentů Evince. Obsahuje záhlaví, "
+"nabídkovou lištu, nástrojovou lištu a oblast zobrazování. Nabídková lišta "
+"obsahuje nabídky Soubor, Upravit, Zobrazit, Přejít a Nápověda."
+
+#: C/evince.xml:164(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+"Okno <application>prohlížeče dokumentů Evince</application> obsahuje "
+"následující prvky:"
+
+#: C/evince.xml:168(term) C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "Nabídková lišta"
+
+#: C/evince.xml:170(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+"Nabídky nabídkové lišty obsahují všechny příkazy potřebné k práci s "
+"dokumenty v <application>prohlížeči dokumentů Evince</application>."
+
+#: C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "Nástrojová lišta"
+
+#: C/evince.xml:176(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr "Nástrojová lišta obsahuje vybrané příkazy z nabídkové lišty."
+
+#: C/evince.xml:180(term)
+msgid "Display area"
+msgstr "Oblast zobrazování"
+
+#: C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "V oblasti zobrazování se zobrazují dokumenty."
+
+#: C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "Komponenta uživatelského rozhraní"
+
+#: C/evince.xml:198(para) C/evince.xml:646(para)
+msgid "Action"
+msgstr "Činnost"
+
+#: C/evince.xml:203(para)
+msgid "Window"
+msgstr "Okno"
+
+#: C/evince.xml:207(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+"Přetáhnutí souboru do okna <application>prohlížeče dokumentů Evince</"
+"application> z jiné aplikace, například ze správce souborů."
+
+#: C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Dvojité kliknutí na název souboru ve správci souborů."
+
+#: C/evince.xml:217(para) C/evince.xml:244(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+"Vybrání <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Otevřít…</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "Klávesové zkratky"
+
+#: C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr ""
+"Stisknutí <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:187(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+msgstr ""
+"V <application>prohlížeči dokumentů Evince</application> lze jednu činnost "
+"vykonávat několika způsoby. Například otevírat dokumenty je možné těmito "
+"způsoby: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep="
+"\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname="
+"\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></tgroup></"
+"informaltable>"
+
+#: C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Tato příručka popisuje funkce nabídkové lišty."
+
+#: C/evince.xml:236(title)
+msgid "Usage"
+msgstr "Používání"
+
+#: C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "Otevření dokumentu"
+
+#: C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Chcete-li otevřít dokument, proveďte následující kroky:"
+
+#: C/evince.xml:248(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want "
+"to open."
+msgstr ""
+"V dialogovém okně <guilabel>Otevřít dokument</guilabel> vyberte soubor, jenž "
+"chcete otevřít."
+
+#: C/evince.xml:253(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+"Klikněte na <guibutton>Otevřít</guibutton>. <application>Prohlížeč dokumentů "
+"Evince</application> v záhlaví okna zobrazí název dokumentu."
+
+#: C/evince.xml:258(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+"Chcete-li otevřít další dokument, vyberte znovu <menuchoice><guimenu>Soubor</"
+"guimenu><guimenuitem>Otevřít…</guimenuitem></menuchoice>. "
+"<application>Prohlížeč dokumentů Evince</application> otevírá všechny "
+"soubory v nových oknech."
+
+#: C/evince.xml:261(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+"Jestliže se pokoušíte otevřít dokument ve formátu, se kterým "
+"<application>prohlížeč dokumentů Evince</application> neumí pracovat, "
+"aplikace zobrazí chybovou zprávu."
+
+#: C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "Pohyb dokumentem"
+
+#: C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Dokumentem se lze pohybovat následujícími způsoby:"
+
+#: C/evince.xml:271(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+"Chcete-li zobrazit následující stránku, vyberte <menuchoice><guimenu>Přejít</"
+"guimenu><guimenuitem>Následující stránka</guimenuitem></menuchoice>."
+
+#: C/evince.xml:275(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+"Chcete-li zobrazit předchozí stránku, vyberte <menuchoice><guimenu>Přejít</"
+"guimenu><guimenuitem>Předchozí stránka</guimenuitem></menuchoice>."
+
+#: C/evince.xml:279(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+"Chcete-li zobrazit první stránku dokumentu, vyberte "
+"<menuchoice><guimenu>Přejít</guimenu><guimenuitem>První stránka</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:283(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+"Chcete-li zobrazit poslední stránku dokumentu, vyberte "
+"<menuchoice><guimenu>Přejít</guimenu><guimenuitem>Poslední stránka</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:287(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+"Chcete-li zobrazit určitou stránku, zadejte její číslo nebo nadpis do "
+"textového políčka v nástrojové liště a stiskněte <keycap>Enter</keycap>"
+
+#: C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "Posouvání se stránkou"
+
+#: C/evince.xml:295(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+"Chcete-li zobrazit obsah stránek, které právě nejsou vidět v oblasti "
+"zobrazování, proveďte jednu z následujících činností:"
+
+#: C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Použijte směrové šipky nebo mezerník na klávesnici."
+
+#: C/evince.xml:301(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+msgstr ""
+"Posuňte oblast zobrazování kliknutím prostředním tlačítkem myši někam do "
+"dokumentu a jejím tažením. Například, chcete-li se posunout dolů, táhněte "
+"myší směrem nahoru."
+
+#: C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "Použijte posuvníky okna."
+
+#: C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "Změna velikosti stránky"
+
+#: C/evince.xml:312(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+"Změnu velikosti stránky v oblasti zobrazování <application>prohlížeče "
+"dokumentů Evince</application> můžete provést následujícími způsoby:"
+
+#: C/evince.xml:317(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+"Chcete-li zvětšit velikost stránky, vyberte <menuchoice><guimenu>Zobrazit</"
+"guimenu><guimenuitem>Zvětšit</guimenuitem></menuchoice>."
+
+#: C/evince.xml:322(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+"Chcete-li zmenšit velikost stránky, vyberte <menuchoice><guimenu>Zobrazit</"
+"guimenu><guimenuitem>Zmenšit</guimenuitem></menuchoice>."
+
+#: C/evince.xml:327(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+"Chcete-li nastavit velikost stránky na stejnou šířku, jako má oblast "
+"zobrazování <application>prohlížeče dokumentů Evince</application>, "
+"zaškrtněte <menuchoice><guimenu>Zobrazit</guimenu><guimenuitem>Přizpůsobit "
+"šířce stránky</guimenuitem></menuchoice>."
+
+#: C/evince.xml:332(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+"Chcete-li nastavit velikost stránky tak, aby se vešla do oblasti zobrazování "
+"<application>prohlížeče dokumentů Evince</application>, zaškrtněte "
+"<menuchoice><guimenu>Zobrazit</guimenu><guimenuitem>Přizpůsobit</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:337(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+"Chcete-li nastavit šířku a výšku okna <application>prohlížeče dokumentů "
+"Evince</application> dle obrazovky, zaškrtněte "
+"<menuchoice><guimenu>Zobrazit</guimenu><guimenuitem>Přes celou obrazovku</"
+"guimenuitem></menuchoice>. Chcete-li nastavit okno <application>prohlížeče "
+"dokumentů Evince</application> na původní velikost, klikněte na tlačítko "
+"<guibutton>Opustit celou obrazovku</guibutton>."
+
+#: C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr "Zobrazení struktury stránky nebo dokumentu"
+
+#: C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "Chcete-li zobrazit záložky nebo stránky, proveďte následující kroky:"
+
+#: C/evince.xml:350(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"Zaškrtněte <menuchoice><guimenu>Zobrazit</guimenu><guimenuitem>Postranní "
+"lišta</guimenuitem></menuchoice>, nebo stiskněte <keycap>F9</keycap>."
+
+#: C/evince.xml:355(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+"Použijte rozbalovací seznam v záhlaví postranní lišty a zvolte, zda se v ní "
+"má zobrazit struktura dokumentu nebo stránky."
+
+#: C/evince.xml:360(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+"Použijte posuvníky postranní lišty, aby se v ní zobrazila požadovaná "
+"položka či stránka."
+
+#: C/evince.xml:365(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+"Klikněte na položku a přesunete se na místo v dokumentu. Klikněte na stránku "
+"a v dokumentu se na ni posunete."
+
+#: C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "Zobrazení vlastností dokumentu"
+
+#: C/evince.xml:372(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"Chcete-li zobrazit vlastnosti dokumentu, vyberte "
+"<menuchoice><guimenu>Soubor</guimenu><guimenuitem>Vlastnosti</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:378(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+"Dialogové okno <guilabel>Vlastnosti</guilabel> zobrazuje všechny dostupné "
+"informace."
+
+#: C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "Tisk dokumentu"
+
+#: C/evince.xml:385(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"Chcete-li dokument vytisknout, vyberte <menuchoice><guimenu>Soubor</"
+"guimenu><guimenuitem>Tisk…</guimenuitem></menuchoice>."
+
+#: C/evince.xml:389(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+"Jestliže nemůžete v nabídce položku <guimenuitem>Tisk…</guimenuitem> vybrat, "
+"autor dokumentu možnost tisku tohoto dokumentu zakázal. Chcete-li tuto "
+"možnost povolit, musíte při otevírání dokumentu zadat hlavní heslo. Chcete-"
+"li se o heslem chráněných souborech dovědět více, přečtěte si <xref linkend="
+"\"evince-password\"/>."
+
+#: C/evince.xml:393(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr "Dialogové okno <guilabel>Vytisknout</guilabel> má následující sekce:"
+
+#: C/evince.xml:399(link) C/evince.xml:415(title)
+msgid "Job"
+msgstr "Úloha"
+
+#: C/evince.xml:404(link) C/evince.xml:437(title) C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr "Tiskárna"
+
+#: C/evince.xml:409(link) C/evince.xml:531(title)
+msgid "Paper"
+msgstr "Papír"
+
+#: C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "Rozsah tisku"
+
+#: C/evince.xml:419(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+"Zvolte jednu z následujících možností, abyste určili, kolik stránek se bude "
+"tisknout:"
+
+#: C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "Vše"
+
+#: C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Zvolte tuto možnost, chctete-li vytisknout všechny stránky dokumentu."
+
+#: C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "Stránky od"
+
+#: C/evince.xml:427(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"Zvolte tuto možnost, chcete-li vytisknout vybraný rozsah stránek dokumentu. "
+"Použijte číselníky k zadání první a poslední stránky rozsahu."
+
+#: C/evince.xml:441(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr ""
+"Tento rozbalovací seznam použijte k výběru tiskárny, pomocí níž chcete tisk "
+"dokumentu provést."
+
+#: C/evince.xml:443(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+"Volba <guilabel>Vytvořit dokument PDF</guilabel> není v této verzi "
+"<application>prohlížeče dokumentů Evince</application> podporována."
+
+#: C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "Nastavení"
+
+#: C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "Tento rozbalovací seznam použijte k nastavení vlastností tiskárny."
+
+#: C/evince.xml:453(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+"Chcete-li nastavit tiskárnu, klikněte na <guibutton>Nastavit</guibutton>. "
+"Například můžete povolit či zakázat duplexní tisk či plánované odložení "
+"tisku, pokud vaše tiskárna tyto funkce podporuje."
+
+#: C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "Umístění"
+
+#: C/evince.xml:459(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr ""
+"Tento rozbalovací seznam použijte k volbě jednoho z následujících cílů tisku:"
+
+#: C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Tisk dokumentu pomocí tiskárny CUPS."
+
+#: C/evince.xml:470(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+"Je-li vybraná tiskárna tiskárnou CUPS, <guilabel>CUPS</guilabel> je jedinou "
+"položkou v rozbalovacím seznamu."
+
+#: C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "Tisk dokumentu pomocí tiskárny."
+
+#: C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "Soubor"
+
+#: C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "Tisk dokumentu do souboru PostScript."
+
+#: C/evince.xml:490(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+"Klikněte na <guibutton>Uložit jako</guibutton>, chcete-li zobrazit dialogové "
+"okno, kam lze zadat název a umístění souboru PosctScript."
+
+#: C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "Vlastní"
+
+#: C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "Použít zadaný příkaz k tisku dokumentu."
+
+#: C/evince.xml:501(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr ""
+"Do vstupního pole zadejte název příkazu včetně všech jeho argumentů "
+"příkazové řádky."
+
+#: C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "Stav"
+
+#: C/evince.xml:511(para) C/evince.xml:517(para) C/evince.xml:523(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+"Tato funkce není touto verzí <application>prolížeče dokumentů Evince</"
+"application> podporována."
+
+#: C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "Typ"
+
+#: C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "Komentář"
+
+#: C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "Velikost papíru"
+
+#: C/evince.xml:535(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+"Tento rozbalovací seznam použijte k volbě velikosti papíru, na který chcete "
+"dokument vytisknout."
+
+#: C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "Šířka"
+
+#: C/evince.xml:540(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+"Tento číselník použijte k zadání šířky stránky. Vedlejší rozbalovací seznam "
+"použijte ke změně jednotky."
+
+#: C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "Výška"
+
+#: C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Tento číselník použijte k zadání výšky papíru."
+
+#: C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "Orientace zásobníku"
+
+#: C/evince.xml:550(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr "Tento rozbalovací seznam použijte k volbě orientace papíru v tiskárně."
+
+#: C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr "Orientace stránky"
+
+#: C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "Tento rozbalovací seznam použijte k volbě orientace stránky."
+
+#: C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr "Rozvržení"
+
+#: C/evince.xml:560(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"Tento rozbalovací seznam použijte k volbě rozvržení stránky. V oblasti "
+"<guilabel>Náhled</guilabel> se zobrazuje náhled vybraného rozvržení."
+
+#: C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr "Přihrádka na papír"
+
+#: C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Tento rozbalovací seznam použijte k volbě přihrádky na papír."
+
+#: C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "Kopírování dokumentu"
+
+#: C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Chcete-li zkopírovat soubor, proveďte následující kroky:"
+
+#: C/evince.xml:580(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Vyberte <menuchoice><guimenu>Soubor</guimenu><guimenuitem>Uložit kopii…</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:585(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+"V dialogu <guilabel>Uložit kopii</guilabel> zadejte do vstupního pole "
+"<guilabel>Název souboru</guilabel> nový název souboru."
+
+#: C/evince.xml:588(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+"Je-li to potřeba, zadejte umístění zkopírovaného dokumentu. Dle výchozího "
+"nastavení se kopie ukládají do vašeho domovského adresáře."
+
+#: C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Klikněte na <guibutton>Uložit</guibutton>."
+
+#: C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Práce s dokumenty chráněnými heslem"
+
+#: C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr ""
+"Autor dokumentu může k ochraně dokumentu použít následující úrovně "
+"zaheslování:"
+
+#: C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr "Uživatelské heslo umožňující ostatním číst dokument."
+
+#: C/evince.xml:612(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+"Hlavní heslo umožňující ostatním provádět další činnosti, jako je tisk "
+"dokumentu."
+
+#: C/evince.xml:616(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+"Když se pokoušíte otevřít heslem chráněný dokument, <application>prohlížeč "
+"dokumentů Evince</application> zobrazuje bezpečnostní dialog. Do vstupního "
+"políčka <guilabel>Zadejte heslo k dokumentu</guilabel> zadejte buď "
+"uživatelské nebo hlavní heslo a pak klikněte na <guibutton>Otevřít dokument</"
+"guibutton>."
+
+#: C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "Zavření dokumentu"
+
+#: C/evince.xml:624(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"Chcete-li dokument zavřít, vyberte <menuchoice><guimenu>Soubor</"
+"guimenu><guimenuitem>Zavřít</guimenuitem></menuchoice>."
+
+#: C/evince.xml:626(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+"Je-li zavírané okno posledním otevřeným oknem <application>prohlížeče "
+"dokumentů Evince</application>, aplikace bude ukončena."
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Klávesové zkratky"
+
+#: C/evince.xml:636(para)
+msgid ""
+"Below is a list of all shortcuts present in <application>Evince Document "
+"Viewer</application>:"
+msgstr ""
+"Níže je seznam všech klávesových zkratek dostupných v "
+"<application>prohlížeči dokumentů Evince</application>:"
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Klávesová zkratka"
+
+#: C/evince.xml:651(keycap) C/evince.xml:655(keycap) C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap) C/evince.xml:667(keycap) C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap) C/evince.xml:683(keycap) C/evince.xml:704(keycap)
+#: C/evince.xml:750(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Otevřít existující dokument"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Uložit kopii aktuálního dokumentu"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "Tisknout dokument"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Zavřít okno"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Zkopírovat výběr"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Vybrat vše"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (lomítko)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Najít v dokumentu slovo či frázi"
+
+#: C/evince.xml:683(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:684(keycap)
+msgid "F3"
+msgstr "F3"
+
+#: C/evince.xml:686(para)
+msgid "Find next"
+msgstr "Najít další"
+
+#: C/evince.xml:690(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (symbol plus)"
+
+#: C/evince.xml:691(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:692(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:694(para)
+msgid "Zoom in"
+msgstr "Zvětšit"
+
+#: C/evince.xml:698(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (symbol minus)"
+
+#: C/evince.xml:699(keycap)
+msgid "-"
+msgstr "-"
+
+#: C/evince.xml:701(para)
+msgid "Zoom out"
+msgstr "Zmenšit"
+
+#: C/evince.xml:704(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:705(para)
+msgid "Reload the document"
+msgstr "Obnovit dokument"
+
+#: C/evince.xml:709(keycap) C/evince.xml:734(keycap)
+msgid "Page Up"
+msgstr "Page Up"
+
+#: C/evince.xml:710(para)
+msgid "Go to the previous page"
+msgstr "Přejít na předchozí stránku"
+
+#: C/evince.xml:713(keycap) C/evince.xml:738(keycap)
+msgid "Page Down"
+msgstr "Page Down"
+
+#: C/evince.xml:714(para)
+msgid "Go to the next page"
+msgstr "Přejít na následující stránku"
+
+#: C/evince.xml:718(keycap) C/evince.xml:726(keycap)
+msgid "Space"
+msgstr "Mezerník"
+
+#: C/evince.xml:719(keycap) C/evince.xml:726(keycap) C/evince.xml:728(keycap)
+#: C/evince.xml:734(keycap) C/evince.xml:738(keycap)
+msgid "Shift"
+msgstr "Shift"
+
+#: C/evince.xml:719(keycap) C/evince.xml:727(keycap)
+msgid "Backspace"
+msgstr "Backspace"
+
+#: C/evince.xml:720(keycap) C/evince.xml:728(keycap)
+msgid "Return"
+msgstr "Enter"
+
+#: C/evince.xml:722(para)
+msgid "Scroll forward"
+msgstr "Posunout vpřed"
+
+#: C/evince.xml:730(para)
+msgid "Scroll backward"
+msgstr "Posunout zpět"
+
+#: C/evince.xml:735(para)
+msgid "Go a bunch of pages up"
+msgstr "Přejít o několik stránek nahoru"
+
+#: C/evince.xml:739(para)
+msgid "Go a bunch of pages down"
+msgstr "Přejít o několik stránek dolů"
+
+#: C/evince.xml:742(keycap)
+msgid "Home"
+msgstr "Home"
+
+#: C/evince.xml:743(para)
+msgid "Go to the first page"
+msgstr "Přejít na první stránku"
+
+#: C/evince.xml:746(keycap)
+msgid "End"
+msgstr "End"
+
+#: C/evince.xml:747(para)
+msgid "Go to the last page"
+msgstr "Přejít na poslední stránku"
+
+#: C/evince.xml:750(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:751(para)
+msgid "Go to page by number or label"
+msgstr "Přejít na stránku dle čísla stránky nebo nadpisu"
+
+#: C/evince.xml:754(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:755(para)
+msgid "Help"
+msgstr "Nápověda"
+
+#: C/evince.xml:758(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:759(para)
+msgid "Run document as presentation"
+msgstr "Spustit dokument jako prezentaci"
+
+#: C/evince.xml:762(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:763(para)
+msgid "Show or hide the side pane"
+msgstr "Zobrazit nebo skrýt postranní lištu"
+
+#: C/evince.xml:766(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:767(para)
+msgid "Toggle fullscreen mode"
+msgstr "Přepnout režim celé obrazovky"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr "Martin Picek <[email protected]>, 2009"
diff --git a/help/cs/figures/evince_start_window.png b/help/cs/figures/evince_start_window.png
new file mode 100644
index 00000000..35131108
--- /dev/null
+++ b/help/cs/figures/evince_start_window.png
Binary files differ
diff --git a/help/de/de.po b/help/de/de.po
new file mode 100644
index 00000000..9bf2862c
--- /dev/null
+++ b/help/de/de.po
@@ -0,0 +1,1275 @@
+# German translation of the evince manual.
+# Mario Blättermann <[email protected]>, 2008, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"POT-Creation-Date: 2009-04-30 12:12+0000\n"
+"PO-Revision-Date: 2009-07-23 22:47+0100\n"
+"Last-Translator: Mario Blättermann <[email protected]>\n"
+"Language-Team: Deutsch <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:155(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=2787fa5e0e910f484226535e4bdb5323"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Evince-Dokumentenbetrachter-Handbuch"
+
+#: C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript files"
+msgstr ""
+"Der Evince-Dokumentenbetrachter erlaubt Ihnen die Anzeige von Dokumenten in "
+"verschiedenen Formaten wie dem Portable Document Format (PDF) oder PostScript."
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder) C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder) C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername) C/evince.xml:67(orgname)
+#: C/evince.xml:93(para) C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "MATE-Dokumentationsprojekt"
+
+#: C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or in "
+"the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Das vorliegende Dokument kann gemäß den Bedingungen der GNU Free "
+"Documentation License (GFDL), Version 1.1 oder jeder späteren, von der Free "
+"Software Foundation veröffentlichten Version ohne unveränderbare Abschnitte "
+"sowie ohne Texte auf dem vorderen und hinteren Buchdeckel kopiert, verteilt "
+"und/oder modifiziert werden. Eine Kopie der GFDL finden Sie unter diesem "
+"<ulink type=\"help\" url=\"ghelp:fdl\">Link</ulink> oder in der mit diesem "
+"Handbuch gelieferten Datei COPYING-DOCS."
+
+#: C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Dieses Handbuch ist Teil einer Sammlung von MATE-Handbüchern, die unter der "
+"GFDL veröffentlicht werden. Wenn Sie dieses Handbuch getrennt von der "
+"Sammlung weiterverbreiten möchten, können Sie das tun, indem Sie eine Kopie "
+"der Lizenz zum Handbuch hinzufügen, wie es in Abschnitt 6 der Lizenz "
+"beschrieben ist."
+
+#: C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Viele der Namen, die von Unternehmen verwendet werden, um ihre Produkte und "
+"Dienstleistungen von anderen zu unterscheiden, sind eingetragene "
+"Warenzeichen. An den Stellen, an denen diese Namen in einer MATE-"
+"Dokumentation erscheinen, werden die Namen in Großbuchstaben oder mit einem "
+"großen Anfangsbuchstaben geschrieben, wenn das MATE-Dokumentationsprojekt "
+"auf diese Warenzeichen hingewiesen wird."
+
+#: C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK "
+"AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR MODIFIED "
+"VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION "
+"PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY "
+"CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR "
+"CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS "
+"LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS "
+"AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"DIESES DOKUMENT WIRD »WIE VORLIEGEND« GELIEFERT, OHNE GARANTIEN IRGENDEINER "
+"ART, SOWOHL AUSDRÜCKLICH GENANNTE ALS AUCH ANGEDEUTETE. DIES BEZIEHT SICH "
+"AUCH OHNE EINSCHRÄNKUNG AUF GARANTIEN, DASS DIESES DOKUMENT ODER VERÄNDERTE "
+"FASSUNGEN DIESES DOKUMENTS FREI VON HANDELSDEFEKTEN, FÜR EINEN BESTIMMTEN "
+"ZWECK GEEIGNET IST ODER DASS ES KEINE RECHTE DRITTER VERLETZT. DAS VOLLE "
+"RISIKO WAS QUALITÄT, GENAUIGKEIT UND LEISTUNG DES DOKUMENTS ODER VERÄNDERTE "
+"FASSUNGEN DES DOKUMENTS LIEGT BEI IHNEN. SOLLTE EIN DOKUMENT ODER EINE "
+"VERÄNDERTE FASSUNG DAVON FEHLER IRGENDEINER ART BEINHALTEN, TRAGEN SIE (NICHT "
+"DER URSPRUNGSAUTOR, DER AUTOR ODER EIN MITWIRKENDER) DIE KOSTEN FÜR "
+"NOTWENDIGE DIENSTLEISTUNGEN, REPARATUREN ODER FEHLERKORREKTUREN. DIESER "
+"HAFTUNGSAUSSCHLUSS IST EIN ESSENZIELLER TEIL DIESER LIZENZ. DIE VERWENDUNG "
+"EINES DOKUMENTS ODER EINER VERÄNDERTEN VERSION DES DOKUMENTS IST NICHT "
+"GESTATTET AUßER UNTER BEACHTUNG DIESES HAFTUNGSAUSSCHLUSSES UND"
+
+#: C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR "
+"ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY "
+"CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK "
+"STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR "
+"LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"UNTER KEINEN UMSTÄNDEN UND AUF BASIS KEINER RECHTSGRUNDLAGE, EGAL OB DURCH "
+"UNERLAUBTEN HANDLUNGEN (EINSCHLIEßLICH FAHRLÄSSIGKEIT), VERTRAG ODER "
+"ANDERWEITIG KANN DER AUTOR, URSPRUNGSAUTOR, EIN MITWIRKENDER ODER EIN "
+"VERTRIEBSPARTNER DIESES DOKUMENTS ODER EINER VERÄNDERTEN FASSUNG DES "
+"DOKUMENTS ODER EIN ZULIEFERER EINER DIESER PARTEIEN, HAFTBAR GEMACHT WERDEN "
+"FÜR DIREKTE, INDIREKTE, SPEZIELLE, VERSEHENTLICHE ODER FOLGESCHÄDEN JEGLICHER "
+"ART, EINSCHLIEßLICH UND OHNE EINSCHRÄNKUNGEN SCHÄDEN DURCH VERLUST VON "
+"KULANZ, ARBEITSAUSFALL, COMPUTERVERSAGEN ODER COMPUTERFEHLFUNKTIONEN ODER "
+"ALLE ANDEREN SCHÄDEN ODER VERLUSTE, DIE SICH AUS ODER IN VERBINDUNG MIT DER "
+"VERWENDUNG DES DOKUMENTS UND VERÄNDERTER FASSUNGEN DES DOKUMENTS ERGEBEN, "
+"AUCH WENN DIE OBEN GENANNTEN PARTEIEN ÜBER DIE MÖGLICHKEIT SOLCHER SCHÄDEN "
+"INFORMIERT WAREN."
+
+#: C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"DAS DOKUMENT UND VERÄNDERTE FASSUNGEN DES DOKUMENTS WERDEN UNTER DEN "
+"BEDINGUNGEN DER GNU FREE DOCUMENTATION LICENSE ZUR VERFÜGUNG GESTELLT MIT DEM "
+"WEITERGEHENDEN VERSTÄNDNIS, DASS: <placeholder-1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "MATE Dokumentationsteam"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Evince-Dokumentenbetrachter-Handbuch V1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "05.04.2008"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Evince-Dokumentenbetrachter-Handbuch V1.0"
+
+#: C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "06. April 2005"
+
+#: C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "Dieses Handbuch beschreibt Version 0.2 des Evince-Dokumentenbetrachters"
+
+#: C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "Rückmeldungen"
+
+#: C/evince.xml:110(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"Um Fehler zu melden oder einen Vorschlag zur Anwendung <application>Evince-"
+"Dokumentenbetrachter</application> oder zu diesem Handbuch zu machen, folgen "
+"Sie den Anweisungen auf der <ulink url=\"ghelp:mate-feedback\" type=\"help"
+"\">MATE-Seite für Rückmeldungen</ulink>."
+
+#: C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Evince-Dokumentenbetrachter"
+
+#: C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "Einführung"
+
+#: C/evince.xml:129(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables you "
+"to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</application> "
+"follows Freedesktop.org and MATE standards to provide integration with "
+"Desktop Environment."
+msgstr ""
+"Die Anwendung <application>Evince-Dokumentenbetrachter</application> erlaubt "
+"Ihnen die Anzeige von Dokumenten verschiedener Formate wie »Portable Document "
+"Format«-(PDF)-Dateien und PostScript-Dateien. <application>Evince-"
+"Dokumentenbetrachter</application> folgt den Standards von Freedesktop.org "
+"und MATE zur Bereitstellung einer integrierten Arbeitsumgebung."
+
+#: C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "Erste Schritte"
+
+#: C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Evince-Dokumentenbetrachter starten"
+
+#: C/evince.xml:140(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+"<application>Evince-Dokumentenbetrachter</application> startet, wenn Sie eine "
+"PDF- oder PostScript-Datei öffnen."
+
+#: C/evince.xml:141(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+"Alternativ können Sie <application>Evince-Dokumentenbetrachter</application> "
+"auf der Befehlszeile starten, mit dem Befehl: <command>evince</command>."
+
+#: C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Wenn Sie Evince-Dokumentenbetrachter starten"
+
+#: C/evince.xml:147(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"Wenn Sie <application>Evince-Dokumentenbetrachter</application> starten, wird "
+"folgendes Fenster angezeigt."
+
+#: C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Evince-Dokumentenbetrachter-Fenster"
+
+#: C/evince.xml:158(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, toolbar "
+"and display area. Menubar contains File, Edit, View, Go and Help menus."
+msgstr ""
+"Zeigt das Hauptfenster von Evince-Dokumentenbetrachter. Enthält Titelleiste, "
+"Menüleiste, Werkzeugleiste und Anzeigebereich. Die Menüleiste beinhaltet Die "
+"Menüs Datei, Bearbeiten, Ansicht, Gehe zu und Hilfe."
+
+#: C/evince.xml:164(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+"Das <application>Evince-Dokumentenbetrachter</application>-Fenster enthält "
+"die folgenden Elemente:"
+
+#: C/evince.xml:168(term) C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "Menüleiste"
+
+#: C/evince.xml:170(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+"Die Menüs in der Menüleiste enthalten alle Befehle, die Sie für die Arbeit "
+"mit Dokumenten im <application>Evince-Dokumentenbetrachter</application> "
+"benötigen."
+
+#: C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "Werkzeugleiste"
+
+#: C/evince.xml:176(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr ""
+"Die Werkzeugleiste enthält eine Auswahl der Befehle, die Sie über die "
+"Menüleiste erreichen."
+
+#: C/evince.xml:180(term)
+msgid "Display area"
+msgstr "Anzeigebereich"
+
+#: C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "Der Anzeigebereich zeigt das Dokument an."
+
+#: C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "Komponente der Benutzeroberfläche"
+
+#: C/evince.xml:198(para) C/evince.xml:646(para)
+msgid "Action"
+msgstr "Aktion"
+
+#: C/evince.xml:203(para)
+msgid "Window"
+msgstr "Fenster"
+
+#: C/evince.xml:207(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> window "
+"from another application such as a file manager."
+msgstr ""
+"Ziehen Sie eine Datei aus einer anderen Anwendung in das <application>Evince-"
+"Dokumentenbetrachter</application>-Fenster, z. B. aus einem Dateimanager."
+
+#: C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Doppelklick auf den Dateinamen im Dateimanager"
+
+#: C/evince.xml:217(para) C/evince.xml:244(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+"Wählen Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Öffnen</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "Tastenkombinationen"
+
+#: C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr ""
+"Drücken Sie <keycombo><keycap>Strg</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:187(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname="
+"\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></tgroup></"
+"informaltable>"
+msgstr ""
+"Im <application>Evince-Dokumentenbetrachter</application> lässt sich eine "
+"Aktion auf verschiedene Arten durchführen. Beispielsweise können Sie ein "
+"Dokument auf folgende Arten öffnen: <informaltable frame=\"all\"><tgroup cols="
+"\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*"
+"\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/"
+"><placeholder-2/></tgroup></informaltable>"
+
+#: C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr ""
+"In diesem Handbuch wird die Arbeitsweise über die Menüleiste beschrieben."
+
+#: C/evince.xml:236(title)
+msgid "Usage"
+msgstr "Benutzung"
+
+#: C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "Ein Dokument öffnen"
+
+#: C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Um ein Dokument zu öffnen, führen Sie die folgenden Schritte aus:"
+
+#: C/evince.xml:248(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want to "
+"open."
+msgstr ""
+"Im <guilabel>Dokument öffnen</guilabel>-Dialog wählen Sie die Datei aus, die "
+"Sie öffnen möchten."
+
+#: C/evince.xml:253(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+"Klicken Sie auf <guibutton>Öffnen</guibutton>. <application>Evince-"
+"Dokumentenbetrachter</application> zeigt den Namen des Dokuments in der "
+"Titelleiste des Fensters an."
+
+#: C/evince.xml:258(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+"Um ein weiteres Dokument zu öffnen, wählen Sie wieder "
+"<menuchoice><guimenu>Datei</guimenu><guimenuitem>Öffnen</guimenuitem></"
+"menuchoice>. <application>Evince-Dokumentenbetrachter</application> öffnet "
+"jede Datei in einem neuen Fenster."
+
+#: C/evince.xml:261(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+"Sollten Sie versuchen, ein von <application>Evince-Dokumentenbetrachter</"
+"application> nicht unterstütztes Dokumentenformat zu öffnen, wird eine "
+"Fehlermeldung angezeigt."
+
+#: C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "Navigieren durch ein Dokument"
+
+#: C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Sie können wie folgt durch ein Dokument navigieren:"
+
+#: C/evince.xml:271(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+"Um die nächste Seite zu betrachten, wählen Sie <menuchoice><guimenu>Gehe zu</"
+"guimenu><guimenuitem>Nächste Seite</guimenuitem></menuchoice>."
+
+#: C/evince.xml:275(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+"Um die vorige Seite zu betrachten, wählen Sie <menuchoice><guimenu>Gehe zu</"
+"guimenu><guimenuitem>Vorherige Seite</guimenuitem></menuchoice>."
+
+#: C/evince.xml:279(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+"Um die erste Seite des Dokuments zu betrachten, wählen Sie "
+"<menuchoice><guimenu>Gehe zu</guimenu><guimenuitem>Erste Seite</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:283(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+"Um die letzte Seite eines Dokuments zu betrachten, wählen Sie "
+"<menuchoice><guimenu>Gehe zu</guimenu><guimenuitem>Letzte Seite</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:287(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+"Um eine bestimmte Seite zu betrachten, tippen Sie die Seitennummer in die "
+"Textbox in der Werkzeugleiste, und drücken <keycap>Enter</keycap>."
+
+#: C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "Eine Seite im Anzeigebereich verschieben"
+
+#: C/evince.xml:295(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+"Um Teile der Seite anzuzeigen, die sich gegenwärtig nicht im Anzeigebereich "
+"befinden, gehen Sie wie folgt vor:"
+
+#: C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Verwenden Sie die Pfeiltasten oder die Leertaste auf der Tastatur."
+
+#: C/evince.xml:301(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the page, "
+"drag the display area upwards in the window."
+msgstr ""
+"Klicken Sie mit der mittleren Maustaste auf eine beliebige Stelle des "
+"Anzeigebereichs, halten die Maustaste gedrückt und bewegen dann die Maus. Um "
+"beispielsweise auf einer Seite nach unten zu rollen, verschieben Sie den "
+"Anzeigebereich nach oben."
+
+#: C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "Verwenden Sie die Rollbalken des Fensters."
+
+#: C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "Ansichtsgröße ändern"
+
+#: C/evince.xml:312(para)
+msgid ""
+"You can use the following methods to resize a page in the <application>Evince "
+"Document Viewer</application> display area:"
+msgstr ""
+"Sie können die Ansichtsgröße einer Seite im <application>Evince-"
+"Dokumentenbetrachter</application> auf folgende Arten ändern:"
+
+#: C/evince.xml:317(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+"Um die Ansicht zu vergrößern, wählen Sie <menuchoice><guimenu>Ansicht</"
+"guimenu><guimenuitem>Heranzoomen</guimenuitem></menuchoice>."
+
+#: C/evince.xml:322(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+"Um die Ansicht zu verkleinern, wählen Sie <menuchoice><guimenu>Ansicht</"
+"guimenu><guimenuitem>Wegzoomen</guimenuitem></menuchoice>."
+
+#: C/evince.xml:327(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+"Um die Größe der Seite an die Breite des <application>Evince-"
+"Dokumentenbetrachter</application>-Anzeigebereichs anzupassen, wählen Sie "
+"<menuchoice><guimenu>Ansicht</guimenu><guimenuitem>Seitenbreite einpassen</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:332(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+"Um die Größe der Seite an die Größe des <application>Evince-"
+"Dokumentenbetrachter</application>-Anzeigebereichs anzupassen, wählen Sie "
+"<menuchoice><guimenu>Ansicht</guimenu><guimenuitem>Einpassen</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:337(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+"Um die Größe des <application>Evince-Dokumentenbetrachter</application>-"
+"Fensters derart anzupassen, dass es den Bildschirm ausfüllt, wählen Sie "
+"<menuchoice><guimenu>Ansicht</guimenu><guimenuitem>Vollbild</guimenuitem></"
+"menuchoice>. Um das <application>Evince-Dokumentenbetrachter</application>-"
+"Fenster wieder in die Originalansicht zurückkehren zu lassen, klicken Sie auf "
+"<guibutton>Vollbild verlassen</guibutton>"
+
+#: C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr "Vorschaubilder und Inhalt"
+
+#: C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr ""
+"Um Vorschaubilder oder den Dokumenteninhalt anzuzeigen, führen Sie die "
+"folgenden Schritte aus:"
+
+#: C/evince.xml:350(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</guimenuitem></"
+"menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"Wählen Sie <menuchoice><guimenu>Ansicht</guimenu><guimenuitem>Seitenleiste</"
+"guimenuitem></menuchoice> oder drücken Sie <keycap>F9</keycap>."
+
+#: C/evince.xml:355(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+"Verwenden Sie das Aufklappmenü in der Titelzeile der Seitenleiste, um "
+"auszuwählen, ob in der Seitenleiste Vorschaubilder oder der Dokumenteninhalt "
+"angezeigt werden sollen."
+
+#: C/evince.xml:360(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the side "
+"pane."
+msgstr ""
+"Verwenden Sie die Rollbalken in der Seitenleiste, um zum gewünschten Eintrag "
+"in der Seitenleiste zu gelangen."
+
+#: C/evince.xml:365(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+"Klicken Sie auf einen Eintrag oder ein Vorschaubild, um zu der gewünschten "
+"Stelle im Dokument zu gelangen."
+
+#: C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "Eigenschaften eines Dokuments anzeigen"
+
+#: C/evince.xml:372(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"Um die Eigenschaften eines Dokuments anzuzeigen, wählen Sie "
+"<menuchoice><guimenu>Datei</guimenu><guimenuitem>Eigenschaften</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:378(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+"Der <guilabel>Eigenschaften</guilabel>-Dialog zeigt alle verfügbaren "
+"Informationen an."
+
+#: C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "Ein Dokument drucken"
+
+#: C/evince.xml:385(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"Um ein Dokument zu drucken, wählen Sie <menuchoice><guimenu>Datei</"
+"guimenu><guimenuitem>Drucken</guimenuitem></menuchoice>."
+
+#: C/evince.xml:389(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open the "
+"document. See <xref linkend=\"evince-password\"/> for more information about "
+"password-protected files."
+msgstr ""
+"Wenn Sie den Menüeintrag <guimenuitem>Drucken</guimenuitem> nicht auswählen "
+"können, hat der Autor des Dokuments die Druckoption für dieses Dokument "
+"abgeschaltet. Um das Drucken zu ermöglichen, müssen Sie das Master-Passwort "
+"beim Öffnen des Dokuments angeben. Lesen Sie hierzu <xref linkend=\"evince-"
+"password\"/> für weitere Informationen über passwortgeschützte Dokumente."
+
+#: C/evince.xml:393(para)
+msgid "The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr ""
+"Der <guilabel>Drucken</guilabel>-Dialog verfügt über die folgenden über "
+"Reiter erreichbaren Bereiche: "
+
+#: C/evince.xml:399(link) C/evince.xml:415(title)
+msgid "Job"
+msgstr "Auftrag"
+
+#: C/evince.xml:404(link) C/evince.xml:437(title) C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr "Drucker"
+
+#: C/evince.xml:409(link) C/evince.xml:531(title)
+msgid "Paper"
+msgstr "Papier"
+
+#: C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "Druckbereich"
+
+#: C/evince.xml:419(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+"Wählen Sie eine der folgenden Optionen, um die Anzahl der zu druckenden "
+"Seiten zu bestimmen:"
+
+#: C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "Alle"
+
+#: C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Wählen Sie diese Option, um alle Seiten des Dokuments zu drucken."
+
+#: C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "Druckbereich"
+
+#: C/evince.xml:427(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"Wählen Sie diese Option, um die ausgewählten Seiten des Dokuments zu drucken. "
+"Verwenden Sie die Eingabefelder, um die erste und die letzte Seite des zu "
+"druckenden Bereichs anzugeben."
+
+#: C/evince.xml:441(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr ""
+"Verwenden Sie das Aufklappmenü, um den Drucker auszuwählen, auf welchem Sie "
+"das Dokument ausgeben wollen."
+
+#: C/evince.xml:443(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+"Die Option <guilabel>Ein PDF-Dokument erzeugen</guilabel> steht in dieser "
+"Version von <application>Evince-Dokumentenbetrachter</application> nicht zur "
+"Verfügung."
+
+#: C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "Verwenden Sie das Aufklappmenü, um die Druckeinstellungen zu ändern."
+
+#: C/evince.xml:453(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+"Um den Drucker zu konfigurieren, klicken Sie auf <guibutton>Konfigurieren</"
+"guibutton>.Beispielsweise können Sie den beidseitigen Druck ein- und "
+"ausschalten, oder den Druck zu einem späteren Zeitpunkt definieren, sofern "
+"Ihr Drucker dies unterstützt."
+
+#: C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "Drucker"
+
+#: C/evince.xml:459(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr ""
+"Verwenden Sie dieses Aufklappmenü, um eines der folgenden Druckziele "
+"auszuwählen:"
+
+#: C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Gibt das Dokument auf einem CUPS-Drucker aus."
+
+#: C/evince.xml:470(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+"Wenn der ausgewählte Drucker ein CUPS-Drucker ist, dann ist <guilabel>CUPS</"
+"guilabel> der einzige Eintrag in diesem Auflklappmenü."
+
+#: C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "Druckt das Dokument auf einem Drucker."
+
+#: C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "Datei"
+
+#: C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "Druckt das Dokument in eine PostScript-Datei."
+
+#: C/evince.xml:490(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+"Klicken Sie auf <guibutton>Speichern unter</guibutton>, um einen Dialog zur "
+"Auswahl des Namens und des Speicherorts der PostScript-Datei anzuzeigen."
+
+#: C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "Benutzerdefiniert"
+
+#: C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "Verwendet einen spezifischen Befehl zum Drucken des Dokuments."
+
+#: C/evince.xml:501(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr ""
+"Geben Sie den Namen des Befehls in das Textfeld ein, einschließlich aller "
+"Befehlszeilenargumente."
+
+#: C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "Status"
+
+#: C/evince.xml:511(para) C/evince.xml:517(para) C/evince.xml:523(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+"Diese Funktionalität wird in dieser Version von <application>Evince-"
+"Dokumentenbetrachter</application> nicht unterstützt."
+
+#: C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "Typ"
+
+#: C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "Kommentar"
+
+#: C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "Papiergröße"
+
+#: C/evince.xml:535(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+"Verwenden Sie dieses Aufklappmenü, um die Papiergröße auszuwählen, die Sie "
+"für das Dokument verwenden möchten."
+
+#: C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "Breite"
+
+#: C/evince.xml:540(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+"Verwenden Sie dieses Einstellfeld, um die Breite des Papiers anzugeben. Im "
+"nebenstehenden Aufklappmenü können sie die verwendete Maßeinheit ändern."
+
+#: C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "Höhe"
+
+#: C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Verwenden Sie dieses Einstellfeld, um die Höhe des Papiers anzugeben."
+
+#: C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "Einzugsorientierung"
+
+#: C/evince.xml:550(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the printer."
+msgstr ""
+"Verwenden Sie dieses Aufklappmenü, um die Orientierung des Papiereinzugs im "
+"Drucker auszuwählen."
+
+#: C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr "Seitenorientierung"
+
+#: C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "Verwenden Sie dieses Aufklappmenü, um die Seitenorientierung anzugeben."
+
+#: C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr "Layout"
+
+#: C/evince.xml:560(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"Verwenden Sie dieses Aufklappmenü, um das Seitenlayout auszuwählen. Eine "
+"Voransicht jedes ausgewählten Layouts wird im Bereich <guilabel>Vorschau</"
+"guilabel> angezeigt."
+
+#: C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr "Papierfach"
+
+#: C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Verwenden Sie dieses Aufklappmenü, um das Papierfach auszuwählen."
+
+#: C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "Ein Dokument kopieren"
+
+#: C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Um eine Datei zu kopieren, führen Sie die folgenden Schritte aus:"
+
+#: C/evince.xml:580(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Wählen Sie <menuchoice><guimenu>Datei</guimenu><guimenuitem>Eine Kopie "
+"speichern</guimenuitem></menuchoice>."
+
+#: C/evince.xml:585(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+"Geben Sie den neuen Dateinamen in das Textfeld <guilabel>Dateiname</guilabel> "
+"ein."
+
+#: C/evince.xml:588(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, copies "
+"are saved in your home directory."
+msgstr ""
+"Falls nötig, bestimmen Sie den Speicherort der Kopie. Als Standard werden "
+"Kopien in Ihrem persönlichen Ordner gespeichert."
+
+#: C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Klicken Sie auf <guibutton>Speichern</guibutton>."
+
+#: C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Arbeiten mit passwortgeschützten Dokumenten"
+
+#: C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr ""
+"Ein Autor kann die folgenden Passwort-Stufen bestimmen, um ein Dokument zu "
+"schützen:"
+
+#: C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr "Benutzerpasswort, das es anderen erlaubt, das Dokument nur zu lesen."
+
+#: C/evince.xml:612(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+"Master-Passwort, das es anderen erlaubt, bestimmte zusätzliche Aktionen "
+"auszuführen, beispielsweise das Dokument zu drucken."
+
+#: C/evince.xml:616(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</guibutton>."
+msgstr ""
+"Wenn Sie versuchen, ein passwortgeschütztes Dokument zu öffnen, zeigt "
+"<application>Evince-Dokumentenbetrachter</application> einen "
+"Sicherheitsdialog an. Schreiben Sie entweder das Benutzerpasswort oder das "
+"Masterpasswort in die <guilabel>Enter document password</guilabel>-Textbox, "
+"und klicken dann auf <guibutton>Dokument öffnen</guibutton>."
+
+#: C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "Ein Dokument schließen"
+
+#: C/evince.xml:624(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"Um ein Dokument zu schließen, wählen Sie <menuchoice><guimenu>Datei</"
+"guimenu><guimenuitem>Schließen</guimenuitem></menuchoice>."
+
+#: C/evince.xml:626(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+"Wenn das Fenster das letzte geöffnete <application>Evince-"
+"Dokumentenbetrachter</application>-Fenster ist, wird die Anwendung beendet."
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Tastenkombinationen"
+
+#: C/evince.xml:636(para)
+msgid ""
+"Below is a list of all shortcuts present in <application>Evince Document "
+"Viewer</application>:"
+msgstr ""
+"Nachstehend finden Sie eine Liste aller im <application>Evince-"
+"Dokumentenbetrachter</application> verwendeten Tastenkombinationen:"
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Tastenkombination"
+
+#: C/evince.xml:651(keycap) C/evince.xml:655(keycap) C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap) C/evince.xml:667(keycap) C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap) C/evince.xml:683(keycap) C/evince.xml:704(keycap)
+#: C/evince.xml:750(keycap)
+msgid "Ctrl"
+msgstr "Strg"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Ein existierendes Dokument öffnen"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Eine Kopie des aktuellen Dokuments speichern"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "Dokument drucken"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Fenster schließen"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Auswahl kopieren"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Alles auswählen"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (Schrägstrich)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Wort oder Ausdruck im Dokument suchen"
+
+#: C/evince.xml:683(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:684(keycap)
+#| msgid "F"
+msgid "F3"
+msgstr "F3"
+
+#: C/evince.xml:686(para)
+msgid "Find next"
+msgstr "Nächstes suchen"
+
+#: C/evince.xml:690(para)
+msgid "<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr ""
+"<keycombo><keycap>Strg</keycap><keycap>+</keycap></keycombo> (Pluszeichen)"
+
+#: C/evince.xml:691(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:692(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:694(para)
+msgid "Zoom in"
+msgstr "Heranzoomen"
+
+#: C/evince.xml:698(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr ""
+"<keycombo><keycap>Strg</keycap><keycap>-</keycap></keycombo> (Minuszeichen)"
+
+#: C/evince.xml:699(keycap)
+msgid "-"
+msgstr "-"
+
+#: C/evince.xml:701(para)
+msgid "Zoom out"
+msgstr "Wegzoomen"
+
+#: C/evince.xml:704(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:705(para)
+msgid "Reload the document"
+msgstr "Dokument neu laden"
+
+#: C/evince.xml:709(keycap) C/evince.xml:734(keycap)
+msgid "Page Up"
+msgstr "Bild auf"
+
+#: C/evince.xml:710(para)
+msgid "Go to the previous page"
+msgstr "Zur vorherigen Seite gehen"
+
+#: C/evince.xml:713(keycap) C/evince.xml:738(keycap)
+msgid "Page Down"
+msgstr "Bild ab"
+
+#: C/evince.xml:714(para)
+msgid "Go to the next page"
+msgstr "Zur nächsten Seite gehen"
+
+#: C/evince.xml:718(keycap) C/evince.xml:726(keycap)
+msgid "Space"
+msgstr "Leertaste"
+
+#: C/evince.xml:719(keycap) C/evince.xml:726(keycap) C/evince.xml:728(keycap)
+#: C/evince.xml:734(keycap) C/evince.xml:738(keycap)
+msgid "Shift"
+msgstr "Umschalttaste"
+
+#: C/evince.xml:719(keycap) C/evince.xml:727(keycap)
+msgid "Backspace"
+msgstr "Löschtaste"
+
+#: C/evince.xml:720(keycap) C/evince.xml:728(keycap)
+msgid "Return"
+msgstr "Eingabetaste"
+
+#: C/evince.xml:722(para)
+msgid "Scroll forward"
+msgstr "Mausrad vorwärts"
+
+#: C/evince.xml:730(para)
+msgid "Scroll backward"
+msgstr "Mausrad rückwärts"
+
+#: C/evince.xml:735(para)
+msgid "Go a bunch of pages up"
+msgstr "Mehrere Seiten nach oben gehen"
+
+#: C/evince.xml:739(para)
+msgid "Go a bunch of pages down"
+msgstr "Mehrere Seiten nach unten gehen"
+
+#: C/evince.xml:742(keycap)
+msgid "Home"
+msgstr "Pos1"
+
+#: C/evince.xml:743(para)
+msgid "Go to the first page"
+msgstr "Zur ersten Seite gehen"
+
+#: C/evince.xml:746(keycap)
+msgid "End"
+msgstr "Ende"
+
+#: C/evince.xml:747(para)
+msgid "Go to the last page"
+msgstr "Zur letzten Seite gehen"
+
+#: C/evince.xml:750(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:751(para)
+msgid "Go to page by number or label"
+msgstr "Zu bestimmter Seite anhand Nummer oder Bezeichnung gehen"
+
+#: C/evince.xml:754(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:755(para)
+msgid "Help"
+msgstr "Hilfe"
+
+#: C/evince.xml:758(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:759(para)
+msgid "Run document as presentation"
+msgstr "Dokument als Präsentation anzeigen"
+
+#: C/evince.xml:762(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:763(para)
+msgid "Show or hide the side pane"
+msgstr "Seitenleiste anzeigen oder verbergen"
+
+#: C/evince.xml:766(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:767(para)
+msgid "Toggle fullscreen mode"
+msgstr "Vollbildmodus ein-oder ausschalten"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr "Mario Blättermann <[email protected]>, 2008, 2009"
diff --git a/help/de/figures/evince_start_window.png b/help/de/figures/evince_start_window.png
new file mode 100644
index 00000000..22f40f50
--- /dev/null
+++ b/help/de/figures/evince_start_window.png
Binary files differ
diff --git a/help/el/el.po b/help/el/el.po
new file mode 100644
index 00000000..67b1f4dc
--- /dev/null
+++ b/help/el/el.po
@@ -0,0 +1,943 @@
+# Stylianos Papanastasiou <[email protected]>, 2005.
+#
+#
+# Μάριος Ζηντίλης <[email protected]>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince greek help 1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-08-09 09:40+0000\n"
+"PO-Revision-Date: 2009-09-10 18:14+0200\n"
+"Last-Translator: Kostas Papadimas <[email protected]>\n"
+"Language-Team: Greek <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:155(None)
+msgid "@@image: 'figures/evince_start_window.png'; md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr "@@image: 'figures/evince_start_window.png'; md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Τεκμηρίωση εφαρμογής προβολής εγγράφων Evince"
+
+#: C/evince.xml:27(para)
+msgid "The Evince Document Viewer application enables you to view documents of various formats like Portable Document Format (PDF) files and PostScript files"
+msgstr "Η εφαρμογή Προβολής εγγράφων Evince σάς επιτρέπει να διαβάσετε έγγραφα διαφόρων μορφών, όπως αρχεία τύπου Portable Document Format (PDF) ή PostScript."
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder)
+#: C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder)
+#: C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername)
+#: C/evince.xml:67(orgname)
+#: C/evince.xml:93(para)
+#: C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "Έργο τεκμηρίωσης MATE"
+
+#: C/evince.xml:2(para)
+msgid "Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or in the file COPYING-DOCS distributed with this manual."
+msgstr "Σας παρέχεται άδεια να αντιγράψετε, διανείμετε ή/και να τροποποιήσετε το υπάρχον κείμενο υπό τους όρους της άδειας GNU Free Documentation License (GFDL), έκδοση 1.1, ή οποιαδήποτε μεταγενέστερη έκδοση που να έχει εκδοθεί από το Free Software Foundation υπό τις προϋποθέσεις no Invariant Sections, no Front-Cover Texts, και no Back-Cover Texts. Μπορείτε να βρείτε αντίγραφο του GFDL σε αυτό το <ulink type=\"help\" url=\"ghelp:fdl\">σύνδεσμο</ulink> ή στο αρχείο COPYING-DOCS όπως διανέμεται με αυτή την τεκμηρίωση."
+
+#: C/evince.xml:12(para)
+msgid "This manual is part of a collection of MATE manuals distributed under the GFDL. If you want to distribute this manual separately from the collection, you can do so by adding a copy of the license to the manual, as described in section 6 of the license."
+msgstr "Αυτή η τεκμηρίωση είναι μέρος της συλλογής τεκμηρίωσης του MATE όπως διανέμεται υπό τους όρους του GFDL. Εάν επιθυμείτε να διανείμετε αυτή την τεκμηρίωση ξεχωριστά από την συλλογή, μπορείτε να το κάνετε εάν η τεκμηρίωση συνοδεύεται από αντίγραφο της άδειας (GFDL) όπως περιγράφεται στον τομέα 6 της άδειας."
+
+#: C/evince.xml:19(para)
+msgid "Many of the names used by companies to distinguish their products and services are claimed as trademarks. Where those names appear in any MATE documentation, and the members of the MATE Documentation Project are made aware of those trademarks, then the names are in capital letters or initial capital letters."
+msgstr "Πολλά από τα ονόματα που χρησιμοποιούνται από εταιρίες για να ξεχωρίσουν τα προϊόντα και τις υπηρεσίες είναι σήματα κατατεθέν. Όπου αυτά τα ονόματα εμφανίζονται στην τεκμηρίωση MATE, και τα μέλη της ομάδας τεκμηρίωσης MATE έχουν γνώση αυτών, τότε αυτά αναγράφονται με κεφαλαίους χαρακτήρες ή με αρχικούς κεφαλαίους χαρακτήρες."
+
+#: C/evince.xml:35(para)
+msgid "DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr "Η ΤΕΚΜΗΡΙΩΣΗ ΑΥΤΗ ΠΑΡΕΧΕΤΑΙ \"ΩΣ ΕΧΕΙ\", ΧΩΡΙΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ ΟΤΙ ΜΠΟΡΕΙ ΝΑ ΕΞΥΠΗΡΕΤΗΣΕΙ ΚΑΠΟΙΟ ΣΚΟΠΟ Η ΟΤΙ ΕΙΝΑΙ ΧΩΡΙΣ ΣΦΑΛΜΑ. ΟΛΟΚΛΗΡΗ Η ΕΥΘΥΝΗ ΓΙΑ ΤΗΝ ΠΟΙΟΤΗΤΑ, ΑΚΡΙΒΕΙΑ ΚΑΙ ΛΕΙΤΟΥΡΓΙΚΟΤΗΤΑ ΤΗΣ ΤΕΚΜΗΡΙΩΣΗΣ Ή ΠΑΡΑΛΛΑΓΩΝ ΑΥΤΗΣ ΑΝΗΚΕΙ ΣΕ ΕΣΑΣ. ΕΑΝ Η ΤΕΚΜΗΡΙΩΣΗ ΑΥΤΗ Ή ΠΑΡΑΛΛΑΓΗ ΑΥΤΗΣ ΕΙΝΑΙ ΛΑΘΟΣ ΚΑΤΑ ΚΑΠΟΙΟ ΤΡΟΠΟ ΕΣΕΙΣ ΑΝΑΛΑΜΒΑΝΕΤΕ ΤΗΝ ΕΥΘΥΝΗ ΤΗΣ ΔΙΟΡΘΩΣΗΣ. Η ΑΠΑΛΛΑΓΗ ΕΥΘΥΝΗΣ ΠΟΥ ΣΥΝΟΔΕΥΕΙ ΑΥΤΗ ΤΗΝ ΤΕΚΜΗΡΙΩΣΗ ΕΙΝΑΙ ΑΝΑΠΟΣΠΑΣΤΟ ΚΟΜΜΑΤΙ ΑΥΤΗΣ. ΚΑΜΙΑ ΧΡΗΣΗ ΤΗΣ ΤΕΚΜΗΡΙΩΣΗΣ Ή ΠΑΡΑΛΛΑΓΩΝ ΑΥΤΗΣ ΔΕΝ ΕΠΙΤΡΕΠΕΤΑΙ ΠΑΡΑ ΜΟΝΟ ΕΑΝ ΣΥΝΟΔΕΥΕΤΑΙ ΑΠΟ ΤΗΝ ΑΠΑΛΛΑΓΗ ΕΥΘΥΝΗΣ."
+
+#: C/evince.xml:55(para)
+msgid "UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES."
+msgstr "ΣΕ ΚΑΜΙΑ ΠΕΡΙΠΤΩΣΗ ΚΑΙ ΥΠΟ ΚΑΜΙΑ ΝΟΜΙΚΗ ΣΥΝΘΗΚΗ, ΕΙΤΕ ΜΕΣΩ ΣΥΜΒΟΛΑΙΩΝ Ή ΑΛΛΙΩΣ, ΔΕΝ ΕΥΘΥΝΟΝΤΑΙ Ο ΣΥΓΓΡΑΦΕΑΣ, Ο ΔΙΑΝΟΜΕΑΣ, Η ΑΛΛΟΣ ΣΥΝΥΠΕΥΘΥΝΟΣ ΓΙΑ ΤΗΝ ΣΥΓΓΡΑΦΗ ΤΗΣ ΤΕΚΜΗΡΙΩΣΗΣ, ΓΙΑ ΕΜΜΕΣΕΣ Η ΑΜΕΣΕΣ, ΤΥΧΑΙΕΣ Ή ΜΗ ΖΗΜΙΕΣ ΠΑΝΤΩΣ ΦΥΣΕΩΣ ΠΟΥ ΠΡΟΕΡΧΟΝΤΑΙ ΑΠΟ ΤΗΝ ΧΡΗΣΗ ΤΗΣ ΤΕΚΜΗΡΙΩΣΗΣ ΚΑΙ/Ή ΠΑΡΑΛΛΑΓΩΝ ΑΥΤΗΣ ΑΚΟΜΑ ΚΑΙ ΕΑΝ ΕΧΕΙ ΥΠΑΡΞΕΙ ΠΡΟΕΙΔΟΠΟΙΗΣΗ ΓΙΑ ΤΗΝ ΠΙΘΑΝΟΤΗΤΑ ΥΠΑΡΞΗΣ ΤΕΤΟΙΩΝ ΖΗΜΙΩΝ."
+
+#: C/evince.xml:28(para)
+msgid "DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: <placeholder-1/>"
+msgstr "ΤΟ ΈΓΓΡΑΦΟ ΚΑΙ ΤΡΟΠΟΠΟΙΗΜΕΝΕΣ ΕΚΔΟΣΕΙΣ ΑΥΤΟΥ ΠΑΡΕΧΟΝΤΑΙ ΥΠΟ ΤΟΥΣ ΟΡΟΥΣ ΤΗΣ ΑΔΕΙΑΣ GNU FREE DOCUMENTATION ΜΕ ΤΗΝ ΠΕΡΑΙΤΕΡΩ ΔΙΕΥΚΡΙΝΙΣΗ ΟΤΙ: <placeholder-1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "Ομάδα Τεκμηρίωσης MATE"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Εγχειρίδιο της Προβολής εγγράφων Evince έκδοσης V1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "05-04-2008"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Τεκμηρίωση Προβολής εγγράφων Evince Έκδοση 1.0"
+
+#: C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "2005-04-06"
+
+#: C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "Η τεκμηρίωση αυτή περιγράφει την έκδοση 0.2 της Προβολής εγγράφων Evince"
+
+#: C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "Ανάδραση"
+
+#: C/evince.xml:110(para)
+msgid "To report a bug or make a suggestion regarding the Evince Document Viewer application or this manual, follow the directions in the <ulink url=\"ghelp:mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr "Για να αναφέρετε ένα σφάλμα ή να κάνετε μια πρόταση σχετικά με την Προβολή εγγράφων Evince ή αυτή την τεκμηρίωση, ακολουθήστε τις οδηγίες στη σελίδα <ulink url=\"ghelp:mate-feedback\" type=\"help\">ανάδρασης MATE </ulink>."
+
+#: C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Προβολή εγγράφων Evince"
+
+#: C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "Εισαγωγή"
+
+#: C/evince.xml:129(para)
+msgid "The <application>Evince Document Viewer</application> application enables you to view documents of various formats like Portable Document Format (PDF) files and PostScript files. <application>Evince Document Viewer</application> follows Freedesktop.org and MATE standards to provide integration with Desktop Environment."
+msgstr "Η <application>Προβολή εγγράφων Evince</application> σας επιτρέπει να διαβάσετε έγγραφα διαφόρων μορφών, όπως αρχεία τύπου Portable Document Format (PDF) ή PostScript. Η <application>Προβολή εγγράφων Evince</application> ακολουθεί τις προδιαγραφές του Freedesktop.org και MATE για να την ενσωμάτωσή του με το περιβάλλον εργασίας."
+
+#: C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "Ξεκινώντας"
+
+#: C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Για να ξεκινήσετε την Προβολή εγγράφων Evince"
+
+#: C/evince.xml:140(para)
+msgid "<application>Evince Document Viewer</application> starts when you open a document such as a PDF or PostScript file."
+msgstr "Η <application>Προβολή εγγράφων Evince </application> ξεκινάει όταν ανοίγετε ένα έγγραφο όπως π.χ. κάποιο αρχείο PDF ή Postscript."
+
+#: C/evince.xml:141(para)
+msgid "Alternatively, you can start <application>Evince Document Viewer</application> from the command line, with the command: <command>evince</command>."
+msgstr "Εναλλακτικά μπορείτε να εκκινήσετε το <application>Προβολή εγγράφων Evince</application>από τη γραμμή εντολών, με την εντολή <command>evince</command>."
+
+#: C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Όταν ξεκινήσετε το Evince"
+
+#: C/evince.xml:147(para)
+msgid "When you start <application>Evince Document Viewer</application>, the following window is displayed."
+msgstr "Όταν ξεκινήσετε την <application>Προβολή εγγράφων Evince</application>, θα εμφανιστεί το παρακάτω παράθυρο."
+
+#: C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Παράθυρο Προβολή εγγράφων Evince"
+
+#: C/evince.xml:158(phrase)
+msgid "Shows Evince Document Viewer main window. Contains titlebar, menubar, toolbar and display area. Menubar contains File, Edit, View, Go and Help menus."
+msgstr "Παρουσιάζεται το κυρίως παράθυρο του Evince. Περιέχει τη γραμμή τίτλου, τη γραμμή μενού, την εργαλειοθήκη και την περιοχή εμφάνισης κειμένου. Η γραμμή μενού περιλαμβάνει τις επιλογές Αρχείο, Επεξεργασία, Προβολή, Μετάβαση και Βοήθεια. "
+
+#: C/evince.xml:164(para)
+msgid "The <application>Evince Document Viewer</application> window contains the following elements:"
+msgstr "Το παράθυρο του <application>Evince</application> περιλαμβάνει τα παρακάτω στοιχεία:"
+
+#: C/evince.xml:168(term)
+#: C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "Γραμμή μενού"
+
+#: C/evince.xml:170(para)
+msgid "The menus on the menubar contain all of the commands that you need to work with documents in <application>Evince Document Viewer</application>."
+msgstr "Τα στοιχεία στη γραμμή μενού έχουν όλες τις εντολές που θα χρειαστείτε για εργασία με έγγραφα στο <application>Evince Προβολή εγγράφων</application>"
+
+#: C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "Εργαλειοθήκη"
+
+#: C/evince.xml:176(para)
+msgid "The toolbar contains a subset of the commands that you can access from the menubar."
+msgstr "Η εργαλειοθήκη περιέχει κάποιες από τις εντολές που βρίσκονται στην γραμμή μενού."
+
+#: C/evince.xml:180(term)
+msgid "Display area"
+msgstr "Περιοχή εμφάνισης εγγράφου"
+
+#: C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "Η περιοχή εμφάνισης εγγράφου εμφανίζει το κείμενο."
+
+#: C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "Συστατικό UI"
+
+#: C/evince.xml:198(para)
+#: C/evince.xml:646(para)
+msgid "Action"
+msgstr "Ενέργεια"
+
+#: C/evince.xml:203(para)
+msgid "Window"
+msgstr "Παράθυρο"
+
+#: C/evince.xml:207(para)
+msgid "Drag a file into the <application>Evince Document Viewer</application> window from another application such as a file manager."
+msgstr "Σύρτε ένα αρχείο στο <application>Evince Προβολή εγγράφων</application> από άλλη εφαρμογή όπως π.χ. τον διαχειριστή αρχείων. "
+
+#: C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Κάντε διπλό κλικ στο όνομα του αρχείου στον διαχειριστή αρχείων"
+
+#: C/evince.xml:217(para)
+#: C/evince.xml:244(para)
+msgid "Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></menuchoice>."
+msgstr "Διαλέξτε <menuchoice><guimenu>Αρχείο</guimenu><guimenuitem>Άνοιγμα</guimenuitem></menuchoice>."
+
+#: C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "Πλήκτρα συντόμευσης"
+
+#: C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "Πατήστε <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:187(para)
+msgid "In <application>Evince Document Viewer</application>, you can perform the same action in several ways. For example, you can open a document in the following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></tgroup></informaltable>"
+msgstr "Στον <application>Προβολή εγγράφων Evince</application>, μπορείτε να πραγματοποιήσετε την ίδια ενέργεια με διάφορους τρόπους. Για παράδειγμα, μπορείτε να ανοίξετε ένα έγγραφο με τους ακόλουθους τρόπους: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></tgroup></informaltable>"
+
+#: C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Αυτή η τεκμηρίωση αυτή περιγράφει τη λειτουργικότητα της γραμμής μενού."
+
+#: C/evince.xml:236(title)
+msgid "Usage"
+msgstr "Χρήση"
+
+#: C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "Για να ανοίξετε ένα έγγραφο"
+
+#: C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Για να ανοίξετε ένα έγγραφο, πραγματοποιήστε τα ακόλουθα βήματα:"
+
+#: C/evince.xml:248(para)
+msgid "In the <guilabel>Open Document</guilabel> dialog, select the file you want to open."
+msgstr "Στο παράθυρο διαλόγου <guilabel>Άνοιγμα εγγράφου</guilabel>, επιλέξτε το αρχείο που επιθυμείτε να ανοίξετε."
+
+#: C/evince.xml:253(para)
+msgid "Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</application> displays the name of the document in the titlebar of the window."
+msgstr "Κάντε κλικ στο <guibutton>Άνοιγμα αρχείου</guibutton>. Ο <application>Evince Προβολή εγγράφων</application> δείχνει το όνομα του εγγράφου στην μπάρα τίτλου του παραθύρου."
+
+#: C/evince.xml:258(para)
+msgid "To open another document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. <application>Evince Document Viewer</application> opens each file in a new window."
+msgstr "Για να ανοίξετε κάποιο άλλο κείμενο, επιλέξτε ξανά <menuchoice><guimenu>Αρχείο</guimenu><guimenuitem>Άνοιγμα</guimenuitem></menuchoice>. Ο <application>Evince Προβολή εγγράφων</application> ανοίγει κάθε αρχείο σε νέο παράθυρο."
+
+#: C/evince.xml:261(para)
+msgid "If you try to open a document with format that <application>Evince Document Viewer</application> does not recognize, the application displays an error message."
+msgstr "Αν προσπαθήσετε να ανοίξετε ένα έγγραφο σε μορφή που ο <application>Evince Προβολή εγγράφων</application> δεν αναγνωρίζει, η εφαρμογή θα εμφανίσει μήνυμα λάθους."
+
+#: C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "Για να κάνετε περιήγηση ενός εγγράφου."
+
+#: C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Μπορείτε να κάνετε περιήγηση σε ένα αρχείο με τον ακόλουθο τρόπο:"
+
+#: C/evince.xml:271(para)
+msgid "To view the next page, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr "Για να προβάλετε την επόμενη σελίδα, επιλέξτε <menuchoice><guimenu>Μετάβαση</guimenu><guimenuitem>Επόμενη Σελίδα</guimenuitem></menuchoice>."
+
+#: C/evince.xml:275(para)
+msgid "To view the previous page, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr "Για να προβάλετε την προηγούμενη σελίδα, επιλέξτε <menuchoice><guimenu>Μετάβαση</guimenu><guimenuitem>Προηγούμενη Σελίδα</guimenuitem></menuchoice>."
+
+#: C/evince.xml:279(para)
+msgid "To view the first page in the document, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr "Για να προβάλετε την πρώτη σελίδα του εγγράφου, επιλέξτε <menuchoice><guimenu>Μετάβαση</guimenu><guimenuitem>Πρώτη Σελίδα</guimenuitem></menuchoice>."
+
+#: C/evince.xml:283(para)
+msgid "To view the last page in the document, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr "Για να προβάλετε την τελευταία σελίδα του εγγράφου, επιλέξτε <menuchoice><guimenu>Μετάβαση</guimenu><guimenuitem>Τελευταία Σελίδα</guimenuitem></menuchoice>."
+
+#: C/evince.xml:287(para)
+msgid "To view a particular page, enter the page number or page label in the text box on the toolbar, then press <keycap>Return</keycap>."
+msgstr "Για να προβάλετε μια συγκεκριμένη σελίδα, εισάγετε τον αριθμό της σελίδας ή την ετικέτα της σελίδας στο κουτί κειμένου της εργαλειοθήκης και πατήστε <keycap>Return</keycap>."
+
+#: C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "Για να κυλίσετε μια σελίδα"
+
+#: C/evince.xml:295(para)
+msgid "To display the page contents that are not currently displayed in the display area, use the following methods:"
+msgstr "Για να προβάλετε τα περιεχόμενα της σελίδας που δεν εμφανίζονται στην περιοχή κειμένου, χρησιμοποιήστε τις παρακάτω μεθόδους:"
+
+#: C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Χρησιμοποιήστε τα κουμπιά βέλους ή το πλήκτρο διαστήματος του πληκτρολογίου."
+
+#: C/evince.xml:301(para)
+msgid "Drag the display area by clicking with the middle mouse button somewhere in the document and then moving the mouse. For example, to scroll down the page, drag the display area upwards in the window."
+msgstr "Μεταφέρετε την περιοχή εμφάνισης κάνοντας κλικ με το μεσαίο κουμπί του ποντικιού σας σε ένα σημείο του εγγράφου και ύστερα μετακινώντας το ποντίκι σας. Για παράδειγμα, για να πραγματοποιήσετε κύλιση προς τα κάτω στη σελίδα, μεταφέρετε την περιοχή εμφάνισης προς τα πάνω εντός του παραθύρου."
+
+#: C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "Χρησιμοποιήστε τις μπάρες κύλισης του παραθύρου."
+
+#: C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "Για να αλλάξετε το μέγεθος της σελίδας"
+
+#: C/evince.xml:312(para)
+msgid "You can use the following methods to resize a page in the <application>Evince Document Viewer</application> display area:"
+msgstr "Μπορείτε να χρησιμοποιήσετε τις παρακάτω μεθόδους για να αλλάξετε το μέγεθος της σελίδας στον <application>Evince Προβολή εγγράφων</application> "
+
+#: C/evince.xml:317(para)
+msgid "To increase the page size, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr "Για να αυξήσετε το μέγεθος σελίδας, επιλέξτε <menuchoice><guimenu>Προβολή</guimenu><guimenuitem>Μεγέθυνση</guimenuitem></menuchoice>."
+
+#: C/evince.xml:322(para)
+msgid "To decrease the page size, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr "Για να μειώσετε το μέγεθος σελίδας, επιλέξτε <menuchoice><guimenu>Προβολή</guimenu><guimenuitem>Σμίκρυνση</guimenuitem></menuchoice>."
+
+#: C/evince.xml:327(para)
+msgid "To resize a page to have the same width as the <application>Evince Document Viewer</application> display area, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr "Για να αλλάξετε το μέγεθος της σελίδας ώστε να έχει το ίδιο πλάτος με την περιοχή κειμένου του <application>Evince Προβολή εγγράφων</application>, επιλέξτε <menuchoice><guimenu>Προβολή</guimenu><guimenuitem>Ταίριασμα στο πλάτος της σελίδας</guimenuitem></menuchoice>."
+
+#: C/evince.xml:332(para)
+msgid "To resize a page to fit within the <application>Evince Document Viewer</application> display area, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr "Για να αλλάξετε το μέγεθος της σελίδας ώστε να ταιριάζει με την περιοχή κειμένου του <application>Evince Προβολή εγγράφων</application>, επιλέξτε <menuchoice><guimenu>Προβολή</guimenu><guimenuitem>Καλύτερο Ταίριασμα</guimenuitem></menuchoice>."
+
+#: C/evince.xml:337(para)
+msgid "To resize the <application>Evince Document Viewer</application> window to have the same width and height as the screen, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></menuchoice>. To resize the <application>Evince Document Viewer</application> window to the original size, click on the <guibutton>Exit Full Screen</guibutton> button."
+msgstr "Για να αλλάξετε το μέγεθος παραθύρου της <application>Προβολής εγγράφων Evince</application> ώστε να έχει το ίδιο μήκος και πλάτος όσο η οθόνη, επιλέξτε <menuchoice><guimenu>Προβολή</guimenu><guimenuitem>Πλήρης οθόνη</guimenuitem></menuchoice>. Για να επαναφέρετε το παράθυρο του <application>Evince Προβολή εγγράφων</application> στο αρχικό του μέγεθος, κάντε κλικ στο κουμπί με την κεφαλίδα Έξοδος Πλήρης Οθόνης."
+
+#: C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr "Για να προβάλετε σελίδες ή τη δομή του εγγράφου"
+
+#: C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "Για να προβάλετε σελιδοδείκτες ή σελίδες εκτελέστε τα παρακάτω βήματα:"
+
+#: C/evince.xml:350(para)
+msgid "Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr "Επιλέξτε <menuchoice><guimenu>Προβολή</guimenu><guimenuitem>Πλάγια μπάρα</guimenuitem></menuchoice> ή πατήστε <keycap>F9</keycap>."
+
+#: C/evince.xml:355(para)
+msgid "Use the drop-down list in the side-pane header to select whether to display document structure or pages in the side pane."
+msgstr "Χρησιμοποιήστε τη λίστα στη κεφαλίδα του πλευρικού ταμπλώ για να διαλέξετε εάν θα προβάλετε την δομή του κειμένου ή τις σελίδες στο πλευρικό ταμπλώ."
+
+#: C/evince.xml:360(para)
+msgid "Use the side-pane scrollbars to display the required item or page in the side pane."
+msgstr "Χρησιμοποιήστε την μπάρα κύλισης του πλευρικού ταμπλώ για να προβάλλετε το αντικείμενο ή την σελίδα στο πλευρικό ταμπλώ."
+
+#: C/evince.xml:365(para)
+msgid "Click on an entry to navigate to that location in the document. Click on a page to navigate to that page in the document."
+msgstr "Κάντε κλικ σε ένα σημείο για να περιηγηθείτε σε αυτή την περιοχή του εγγράφου. Κάντε κλικ σε μια σελίδα για να περιηγηθείτε σε αυτή τη σελίδα του εγγράφου."
+
+#: C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "Για να προβάλετε τις ιδιότητες ενός εγγράφου"
+
+#: C/evince.xml:372(para)
+msgid "To view the properties of a document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr "Για να προβάλετε τις ιδιότητες ενός εγγράφου, επιλέξτε <menuchoice><guimenu>Αρχείο</guimenu><guimenuitem>Ιδιότητες</guimenuitem></menuchoice>."
+
+#: C/evince.xml:378(para)
+msgid "The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr "Το παράθυρο διαλόγου <guilabel>Ιδιότητες</guilabel> προβάλει όλες τις διαθέσιμες πληροφορίες για το έγγραφο"
+
+#: C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "Για να τυπώσετε ένα έγγραφο"
+
+#: C/evince.xml:385(para)
+msgid "To print a Document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr "Για να τυπώσετε ένα έγγραφο, επιλέξτε <menuchoice><guimenu>Αρχείο</guimenu><guimenuitem>Εκτύπωση</guimenuitem></menuchoice>."
+
+#: C/evince.xml:389(para)
+msgid "If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the author of the document has disabled the print option for this document. To enable the print option, you must enter the master password when you open the document. See <xref linkend=\"evince-password\"/> for more information about password-protected files."
+msgstr "Εάν δεν μπορείτε να διαλέξετε από το μενού την επιλογή <guimenuitem>Εκτύπωση</guimenuitem>, ο συγγραφέας του εγγράφου έχει απενεργοποιήσει την επιλογή εκτύπωσης. Για να ενεργοποιήσετε την επιλογή εκτύπωσης, πρέπει να εισάγετε τον κύριο κωδικό όταν ανοίξετε το έγγραφο. Δείτε το <xref linkend=\"evince-password\"/> για περισσότερες πληροφορίες σχετικά με αρχεία που προστατεύονται με κωδικό."
+
+#: C/evince.xml:393(para)
+msgid "The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr "Ο διάλογος <guilabel>Εκτύπωση</guilabel> έχει τους ακόλουθους τομείς:"
+
+#: C/evince.xml:399(link)
+#: C/evince.xml:415(title)
+msgid "Job"
+msgstr "Δουλειά"
+
+#: C/evince.xml:404(link)
+#: C/evince.xml:437(title)
+#: C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr "Εκτυπωτής"
+
+#: C/evince.xml:409(link)
+#: C/evince.xml:531(title)
+msgid "Paper"
+msgstr "Χαρτί"
+
+#: C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "Εύρος εκτύπωσης"
+
+#: C/evince.xml:419(para)
+msgid "Select one of the following options to determine how many pages to print:"
+msgstr "Διαλέξτε μια από τις παρακάτω επιλογές για να ορίσετε πόσες σελίδες θα τυπωθούν:"
+
+#: C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "Όλες"
+
+#: C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Διαλέξτε αυτή την επιλογή για να τυπώσετε όλες τις σελίδες του εγγράφου."
+
+#: C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "Σελίδες από"
+
+#: C/evince.xml:427(para)
+msgid "Select this option to print the selected range of pages in the document. Use the spin boxes to specify the first page and last page of the range."
+msgstr "Διαλέξτε αυτή την επιλογή για να τυπώσετε το επιλεγμένο εύρος σελίδων του εγγράφου. Χρησιμοποιήστε τα κουτιά εισαγωγής για να ορίσετε την πρώτη και τελευταία σελίδα του εύρους."
+
+#: C/evince.xml:441(para)
+msgid "Use this drop-down list to select the printer to which you want to print the document."
+msgstr "Χρησιμοποιήστε την λίστα για να διαλέξετε τον εκτυπωτή στον οποίο θα τυπωθεί το έγγραφο."
+
+#: C/evince.xml:443(para)
+msgid "The <guilabel>Create a PDF document</guilabel> option is not supported in this version of <application>Evince Document Viewer</application>."
+msgstr "Η επιλογή <guilabel>Δημιουργία εγγράφου PDF</guilabel> δεν υποστηρίζεται σε αυτή την έκδοση του <application>Evince Προβολή εγγράφων</application>."
+
+#: C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "Ρυθμίσεις"
+
+#: C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "Χρησιμοποιήστε αυτή τη λίστα για να διαλέξετε τις ρυθμίσεις του εκτυπωτή."
+
+#: C/evince.xml:453(para)
+msgid "To configure the printer, click <guibutton>Configure</guibutton>. For example, you can enable or disable duplex printing, or schedule delayed printing, if this functionality is supported by the printer."
+msgstr "Για να ρυθμίσετε τον εκτυπωτή, κάντε κλικ στο κουμπί <guibutton>Ρυθμίσεις</guibutton>. Για παράδειγμα, μπορείτε να ενεργοποιήσετε ή να απενεργοποιήσετε την εκτύπωση μπρος-πίσω ή να προγραμματίσετε την εκτύπωση για αργότερα, αν αυτό υποστηρίζεται από τον εκτυπωτή."
+
+#: C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "Τοποθεσία"
+
+#: C/evince.xml:459(para)
+msgid "Use this drop-down list to select one of the following print destinations:"
+msgstr "Χρησιμοποιήστε αυτή τη λίστα για να διαλέξετε έναν από τους παρακάτω προορισμούς εκτύπωσης:"
+
+#: C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Εκτυπώστε το έγγραφο σε εκτυπωτή CUPS."
+
+#: C/evince.xml:470(para)
+msgid "If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the only entry in this drop-down list."
+msgstr "Εάν ο επιλεγμένος εκτυπωτής είναι CUPS, <guilabel>CUPS</guilabel> είναι η μόνη επιλογή στη λίστα."
+
+#: C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "Εκτυπώστε το έγγραφο σε εκτυπωτή."
+
+#: C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "Αρχείο"
+
+#: C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "Εκτυπώστε το έγγραφο σε αρχείο PostScript."
+
+#: C/evince.xml:490(para)
+msgid "Click <guibutton>Save As</guibutton> to display a dialog where you specify the name and location of the PostScript file."
+msgstr "Κάντε κλικ στο <guibutton>Αποθήκευση ως</guibutton> για την εμφάνιση διαλόγου όπου μπορείτε να ορίσετε το όνομα και την τοποθεσία του αρχείου PostScript."
+
+#: C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "Custom"
+
+#: C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "Χρησιμοποιήστε την συγκεκριμένη εντολή για να τυπώσετε το έγγραφο."
+
+#: C/evince.xml:501(para)
+msgid "Type the name of the command in the text box. Include all command-line arguments."
+msgstr "Τυπώστε την εντολή στο κουτί κειμένου. Εισάγετε όλες τις επιλογές για την γραμμή εντολών."
+
+#: C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "State"
+
+#: C/evince.xml:511(para)
+#: C/evince.xml:517(para)
+#: C/evince.xml:523(para)
+msgid "This functionality is not supported in this version of <application>Evince Document Viewer</application>."
+msgstr "Αυτή η λειτουργία δεν υποστηρίζεται σε αυτή την έκδοση του <application>Evince Προβολή εγγράφων</application>."
+
+#: C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "Τύπος"
+
+#: C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "Σχόλιο"
+
+#: C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "Μέγεθος σελίδας"
+
+#: C/evince.xml:535(para)
+msgid "Use this drop-down list to select the size of the paper to which you want to print the document."
+msgstr "Χρησιμοποιήστε αυτή τη λίστα για να επιλέξετε το μέγεθος του χαρτιού που θέλετε να τυπώσετε το έγγραφο."
+
+#: C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "Πλάτος"
+
+#: C/evince.xml:540(para)
+msgid "Use this spin box to specify the width of the paper. Use the adjacent drop-down list to change the measurement unit."
+msgstr "Χρησιμοποιήστε αυτό το κουτί για να ορίσετε το πλάτος του χαρτιού. Χρησιμοποιήστε την διπλανή λίστα για να αλλάξετε την μονάδα μέτρησης."
+
+#: C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "Ύψος"
+
+#: C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Χρησιμοποιήστε αυτό το κουτί για να ορίσετε το ύψος του χαρτιού."
+
+#: C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "Προσανατολισμός εισαγωγής χαρτιού"
+
+#: C/evince.xml:550(para)
+msgid "Use this drop-down list to select the orientation of the paper in the printer."
+msgstr "Χρησιμοποιήστε αυτή τη λίστα για να διαλέξετε το προσανατολισμό του χαρτιού στον εκτυπωτή."
+
+#: C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr "Προσανατολισμός σελίδας"
+
+#: C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "Χρησιμοποιήστε αυτή τη λίστα για να διαλέξετε τον προσανατολισμό σελίδας."
+
+#: C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr "Διάταξη"
+
+#: C/evince.xml:560(para)
+msgid "Use this drop-down list to select the page layout. A preview of each layout that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr "Χρησιμοποιήστε αυτή τη λίστα για να διαλέξετε την διάταξη της σελίδας. Η προεπισκόπηση της διάταξης που διαλέξατε εμφανίζεται στην περιοχή <guilabel>Προεπισκόπηση</guilabel>."
+
+#: C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr "Εισαγωγή χαρτιού"
+
+#: C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Χρησιμοποιήστε αυτή τη λίστα για να διαλέξετε τον εισαγωγέα χαρτιού."
+
+#: C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "Για να αντιγράψετε ένα έγγραφο"
+
+#: C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Για να αντιγράψετε ένα αρχείο, εκτελέστε τα παρακάτω βήματα:"
+
+#: C/evince.xml:580(para)
+msgid "Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</guimenuitem></menuchoice>."
+msgstr "Επιλέξτε <menuchoice><guimenu>Αρχείο</guimenu><guimenuitem>Αποθήκευση αντιγράφου</guimenuitem></menuchoice>."
+
+#: C/evince.xml:585(para)
+msgid "Type the new filename in the <guilabel>Filename</guilabel> text box in the <guilabel>Save a Copy</guilabel> dialog."
+msgstr "Τυπώστε ένα όνομα στο κουτί κειμένου <guilabel>Όνομα αρχείου</guilabel> στο διάλογο <guilabel>Αποθήκευση αντιγράφου</guilabel>"
+
+#: C/evince.xml:588(para)
+msgid "If necessary, specify the location of the copied document. By default, copies are saved in your home directory."
+msgstr "Εάν είναι αναγκαίο, ορίστε την τοποθεσία του αντίγραφου εγγράφου. Εξ ορισμού αντίγραφα σώζονται στον αρχικό κατάλογο χρήστη."
+
+#: C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Κάντε κλικ στην <guibutton>Αποθήκευση</guibutton>."
+
+#: C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Για να εργαστείτε με αρχεία προστατευμένα με κωδικό"
+
+#: C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr "Ο συγγραφέας μπορεί να χρησιμοποιήσει τα ακόλουθα επίπεδα ασφαλείας με κωδικό για να προστατεύσει το έγγραφο:"
+
+#: C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr "Κωδικός χρήστη που επιτρέπει σε άλλους μόνο να διαβάσουν το έγγραφο."
+
+#: C/evince.xml:612(para)
+msgid "Master password that allows others to perform additional actions, such as print the document."
+msgstr "Κύριος κωδικός που επιτρέπει σε άλλους να εκτελέσουν και άλλες λειτουργίες όπως εκτύπωση του εγγράφου."
+
+#: C/evince.xml:616(para)
+msgid "When you try to open a password-protected document, <application>Evince Document Viewer</application> displays a security dialog. Type either the user password or the master password in the <guilabel>Enter document password</guilabel> text box, then click <guibutton>Open Document</guibutton>."
+msgstr "Όταν προσπαθήσετε να ανοίξετε ένα έγγραφο που προστατεύεται με κωδικό, ο <application>Evince Προβολή εγγράφων</application> εμφανίζει ένα διάλογο ασφαλείας. Δώστε είτε τον κωδικό χρήστη ή τον κύριο κωδικό στο κουτί <guilabel>Εισαγωγή κωδικού εγγράφου</guilabel> και μετά κάντε κλικ <guibutton>Άνοιγμα Εγγράφου</guibutton>."
+
+#: C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "Για να κλείσετε ένα έγγραφο"
+
+#: C/evince.xml:624(para)
+msgid "To close a document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr "Για να κλείσετε ένα έγγραφο, επιλέξτε <menuchoice><guimenu>Αρχείο</guimenu><guimenuitem>Κλείσιμο</guimenuitem></menuchoice>."
+
+#: C/evince.xml:626(para)
+msgid "If the window is the last <application>Evince Document Viewer</application> window open, the application exits."
+msgstr "Εάν το παράθυρο είναι το τελευταίο ανοιχτό παράθυρο του <application>Προβολής εγγράφων Evince</application>, η εφαρμογή θα κλείσει."
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Συντομεύσεις"
+
+#: C/evince.xml:636(para)
+msgid "Below is a list of all shortcuts present in <application>Evince Document Viewer</application>:"
+msgstr "Παρακάτω μπορείτε να δείτε μία λίστα με όλες τις συντομεύσεις που παρουσιάζονται στην <application>Προβολή εγγράφων Evince</application>:"
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Πλήκτρο συντόμευσης"
+
+#: C/evince.xml:651(keycap)
+#: C/evince.xml:655(keycap)
+#: C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap)
+#: C/evince.xml:667(keycap)
+#: C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap)
+#: C/evince.xml:683(keycap)
+#: C/evince.xml:704(keycap)
+#: C/evince.xml:750(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Άνοιγμα υπάρχοντος εγγράφου"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Αποθήκευση ενός αντιγράφου για το τρέχον έγγραφο"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "Εκτύπωση εγγράφου"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Κλείσιμο παραθύρου"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Αντιγραφή επιλογής"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Επιλογή όλων"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (κάθετος)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Εύρεση λέξης ή φράσης μέσα στο έγγραφο"
+
+#: C/evince.xml:683(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:684(keycap)
+#| msgid "F"
+msgid "F3"
+msgstr "F3"
+
+#: C/evince.xml:686(para)
+msgid "Find next"
+msgstr "Εύρεση επόμενου"
+
+#: C/evince.xml:690(para)
+msgid "<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr "<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (σύμβολο πρόσθεσης)"
+
+#: C/evince.xml:691(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:692(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:694(para)
+msgid "Zoom in"
+msgstr "Μεγέθυνση"
+
+#: C/evince.xml:698(para)
+msgid "<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr "<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (σύμβολο μείον)"
+
+#: C/evince.xml:699(keycap)
+msgid "-"
+msgstr "-"
+
+#: C/evince.xml:701(para)
+msgid "Zoom out"
+msgstr "Σμίκρυνση"
+
+#: C/evince.xml:704(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:705(para)
+msgid "Reload the document"
+msgstr "Επαναφόρτωση του εγγράφου"
+
+#: C/evince.xml:709(keycap)
+#: C/evince.xml:734(keycap)
+msgid "Page Up"
+msgstr "Page Up"
+
+#: C/evince.xml:710(para)
+msgid "Go to the previous page"
+msgstr "Μετάβαση στην προηγούμενη σελίδα"
+
+#: C/evince.xml:713(keycap)
+#: C/evince.xml:738(keycap)
+msgid "Page Down"
+msgstr "Page Down"
+
+#: C/evince.xml:714(para)
+msgid "Go to the next page"
+msgstr "Μετάβαση στην επόμενη σελίδα"
+
+#: C/evince.xml:718(keycap)
+#: C/evince.xml:726(keycap)
+msgid "Space"
+msgstr "Πλήκτρο διαστήματος"
+
+#: C/evince.xml:719(keycap)
+#: C/evince.xml:726(keycap)
+#: C/evince.xml:728(keycap)
+#: C/evince.xml:734(keycap)
+#: C/evince.xml:738(keycap)
+msgid "Shift"
+msgstr "Shift"
+
+#: C/evince.xml:719(keycap)
+#: C/evince.xml:727(keycap)
+msgid "Backspace"
+msgstr "Backspace"
+
+#: C/evince.xml:720(keycap)
+#: C/evince.xml:728(keycap)
+msgid "Return"
+msgstr "Return"
+
+#: C/evince.xml:722(para)
+msgid "Scroll forward"
+msgstr "Κύλιση εμπρός"
+
+#: C/evince.xml:730(para)
+msgid "Scroll backward"
+msgstr "Κύλιση πίσω"
+
+#: C/evince.xml:735(para)
+msgid "Go a bunch of pages up"
+msgstr "Μετάβαση κατά μία δέσμη σελίδων προς τα πάνω"
+
+#: C/evince.xml:739(para)
+msgid "Go a bunch of pages down"
+msgstr "Μετάβαση κατά μία δέσμη σελίδων προς τα κάτω"
+
+#: C/evince.xml:742(keycap)
+msgid "Home"
+msgstr "Home"
+
+#: C/evince.xml:743(para)
+msgid "Go to the first page"
+msgstr "Μετάβαση στην πρώτη σελίδα"
+
+#: C/evince.xml:746(keycap)
+msgid "End"
+msgstr "End"
+
+#: C/evince.xml:747(para)
+msgid "Go to the last page"
+msgstr "Μετάβαση στην τελευταία σελίδα"
+
+#: C/evince.xml:750(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:751(para)
+msgid "Go to page by number or label"
+msgstr "Μετάβαση σε σελίδα με βάση τον αριθμό της ή κάποια ετικέτα"
+
+#: C/evince.xml:754(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:755(para)
+msgid "Help"
+msgstr "Μετάβαση στην βοήθεια"
+
+#: C/evince.xml:758(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:759(para)
+msgid "Run document as presentation"
+msgstr "Εκτέλεση του εγγράφου ως παρουσίαση"
+
+#: C/evince.xml:762(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:763(para)
+msgid "Show or hide the side pane"
+msgstr "Εμφάνιση ή απόκρυψη του πλευρικού πλαισίου"
+
+#: C/evince.xml:766(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:767(para)
+msgid "Toggle fullscreen mode"
+msgstr "Εναλλαγή λειτουργίας πλήρους οθόνης"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr "Στυλιανός Παπαναστασίου <[email protected]>, 2005."
+
+#~ msgid "To Open a File"
+#~ msgstr "Για να ανοίξετε ένα αρχείο"
+#~ msgid "User manual for the Evince Document Viewer."
+#~ msgstr "Τεκμηρίωση για το Evince Προβολή εγγράφων.<"
+#~ msgid ""
+#~ "You can start <application>Evince Document Viewer</application> in the "
+#~ "following ways:"
+#~ msgstr ""
+#~ "Μπορείτε να ξεκινήσετε το <application>Evince Προβολή εγγράφων</"
+#~ "application> με τους παρακάτω τρόπους:"
+#~ msgid "<guimenu>Applications</guimenu> menu"
+#~ msgstr "Μενού <guimenu>Εφαρμογές</guimenu>"
+#~ msgid ""
+#~ "Choose <menuchoice><guisubmenu>Graphics</guisubmenu><guimenuitem>Evince "
+#~ "Document Viewer</guimenuitem></menuchoice>."
+#~ msgstr ""
+#~ "Επιλέξτε <menuchoice><guisubmenu>Γραφικά</guisubmenu><guimenuitem>Evince "
+#~ "Προβολή εγγράφων</guimenuitem></menuchoice>."
+#~ msgid "Command line"
+#~ msgstr "Γραμμή εντολών"
+#~ msgid "Execute the following command: <command>evince</command>"
+#~ msgstr "Εκτελέστε την ακόλουθη εντολή: <command>evince</command>"
+#~ msgid ""
+#~ "To quit <application>Evince Document Viewer</application> at any time, no "
+#~ "matter how many windows are open, choose <menuchoice><guimenu>File</"
+#~ "guimenu><guimenuitem>Quit</guimenuitem></menuchoice>."
+#~ msgstr ""
+#~ "Για να εγκαταλείψετε τον <application>Evince Προβολή εγγράφων</"
+#~ "application> οποιαδήποτε στιγμή, ανεξάρτητα από το πόσα παράθυρα είναι "
+#~ "ανοιχτά, επιλέξτε <menuchoice><guimenu>Αρχείο</"
+#~ "guimenu><guimenuitem>Έξοδος</guimenuitem></menuchoice>."
+#~ msgid ""
+#~ "When you quit, <application>Evince Document Viewer</application> closes "
+#~ "all documents opened in the current session."
+#~ msgstr ""
+#~ "Όταν εγκαταλείψετε την εφαρμογή, ο <application>Evince Προβολέας "
+#~ "Εγγράφου</application> θα κλείσει όλα τα έγγραφα ανοιχτά κατά την "
+#~ "τρέχουσα συνεδρία."
+
diff --git a/help/el/figures/evince_start_window.png b/help/el/figures/evince_start_window.png
new file mode 100644
index 00000000..d68625fe
--- /dev/null
+++ b/help/el/figures/evince_start_window.png
Binary files differ
diff --git a/help/en_GB/en_GB.po b/help/en_GB/en_GB.po
new file mode 100644
index 00000000..3f13e432
--- /dev/null
+++ b/help/en_GB/en_GB.po
@@ -0,0 +1,1256 @@
+# Copyright (C) 2006 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the evince package.
+# David Lodge <[email protected]>, 2007
+#
+# Philip Withnall <[email protected]>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince docs\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-02-09 07:18+0100\n"
+"PO-Revision-Date: 2009-03-02 22:51+0000\n"
+"Last-Translator: Philip Withnall <[email protected]>\n"
+"Language-Team: British English <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: ../C/evince.xml:155(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: ../C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Evince Document Viewer Manual"
+
+#: ../C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+
+#: ../C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: ../C/evince.xml:34(holder) ../C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: ../C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: ../C/evince.xml:38(holder) ../C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: ../C/evince.xml:49(publishername) ../C/evince.xml:67(orgname)
+#: ../C/evince.xml:93(para) ../C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "MATE Documentation Project"
+
+#: ../C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation Licence (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+
+#: ../C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the licence to the manual, as described in "
+"section 6 of the licence."
+
+#: ../C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+
+#: ../C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY AND PERFORMANCE OF THE DOCUMENT OR MODIFIED "
+"VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION "
+"PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY "
+"CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR "
+"CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF "
+"THIS LICENCE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS "
+"AUTHORISED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+
+#: ../C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR "
+"ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY "
+"CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK "
+"STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR "
+"LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+
+#: ../C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENCE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+
+#: ../C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: ../C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "MATE Documentation Team"
+
+#: ../C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: ../C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: ../C/evince.xml:68(email)
+
+#: ../C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Evince Document Viewer Manual V1.1"
+
+#: ../C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "2008-04-05"
+
+#: ../C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: ../C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: ../C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Evince Document Viewer Manual V1.0"
+
+#: ../C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "2005-04-06"
+
+#: ../C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "This manual describes version 0.2 of Evince Document Viewer"
+
+#: ../C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "Feedback"
+
+#: ../C/evince.xml:110(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+
+#: ../C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Evince Document Viewer"
+
+#: ../C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: ../C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "Introduction"
+
+#: ../C/evince.xml:129(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. The <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+
+#: ../C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "Getting Started"
+
+#: ../C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "To Start Evince Document Viewer"
+
+#: ../C/evince.xml:140(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+
+#: ../C/evince.xml:141(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+
+#: ../C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "When You Start Evince Document Viewer"
+
+#: ../C/evince.xml:147(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+
+#: ../C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Evince Document Viewer Window"
+
+#: ../C/evince.xml:158(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+"Shows Evince Document Viewer main window. This contains a titlebar, menubar, "
+"toolbar and display area. The Menubar contains File, Edit, View, Go and Help "
+"menus."
+
+#: ../C/evince.xml:164(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+
+#: ../C/evince.xml:168(term) ../C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "Menubar"
+
+#: ../C/evince.xml:170(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+
+#: ../C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "Toolbar"
+
+#: ../C/evince.xml:176(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+
+#: ../C/evince.xml:180(term)
+msgid "Display area"
+msgstr "Display area"
+
+#: ../C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "The display area displays the document."
+
+#: ../C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "UI Component"
+
+#: ../C/evince.xml:198(para) ../C/evince.xml:646(para)
+msgid "Action"
+msgstr "Action"
+
+#: ../C/evince.xml:203(para)
+msgid "Window"
+msgstr "Window"
+
+#: ../C/evince.xml:207(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+
+#: ../C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Double-click on the file name in the file manager"
+
+#: ../C/evince.xml:217(para) ../C/evince.xml:244(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+
+#: ../C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "Shortcut keys"
+
+#: ../C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: ../C/evince.xml:187(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+msgstr ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+
+#: ../C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "This manual documents functionality from the menubar."
+
+#: ../C/evince.xml:236(title)
+msgid "Usage"
+msgstr "Usage"
+
+#: ../C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "To Open A Document"
+
+#: ../C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "To open a document, perform the following steps:"
+
+#: ../C/evince.xml:248(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want "
+"to open."
+msgstr ""
+"In the <guilabel>Open Document</guilabel> dialogue, select the file you want "
+"to open."
+
+#: ../C/evince.xml:253(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+
+#: ../C/evince.xml:258(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+
+#: ../C/evince.xml:261(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognise, the application displays an error "
+"message."
+
+#: ../C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "To Navigate Through a Document"
+
+#: ../C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr "You can navigate through a file as follows:"
+
+#: ../C/evince.xml:271(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:275(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:279(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:283(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:287(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+
+#: ../C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "To Scroll a Page"
+
+#: ../C/evince.xml:295(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+
+#: ../C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Use the arrow keys or space key on the keyboard."
+
+#: ../C/evince.xml:301(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+msgstr ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+
+#: ../C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "Use the scrollbars on the window."
+
+#: ../C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "To Change the Page Size"
+
+#: ../C/evince.xml:312(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+
+#: ../C/evince.xml:317(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:322(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:327(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:332(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:337(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+
+#: ../C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr "To View Pages or Document Structure"
+
+#: ../C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "To view bookmarks or pages, perform the following steps:"
+
+#: ../C/evince.xml:350(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+
+#: ../C/evince.xml:355(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+
+#: ../C/evince.xml:360(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+
+#: ../C/evince.xml:365(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+
+#: ../C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "To View the Properties of a Document"
+
+#: ../C/evince.xml:372(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:378(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+"The <guilabel>Properties</guilabel> dialogue displays all information "
+"available"
+
+#: ../C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "To Print a Document"
+
+#: ../C/evince.xml:385(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:389(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+
+#: ../C/evince.xml:393(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr ""
+"The <guilabel>Print</guilabel> dialogue has the following tabbed sections:"
+
+#: ../C/evince.xml:399(link) ../C/evince.xml:415(title)
+msgid "Job"
+msgstr "Job"
+
+#: ../C/evince.xml:404(link) ../C/evince.xml:437(title)
+#: ../C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr "Printer"
+
+#: ../C/evince.xml:409(link) ../C/evince.xml:531(title)
+msgid "Paper"
+msgstr "Paper"
+
+#: ../C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "Print range"
+
+#: ../C/evince.xml:419(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+"Select one of the following options to determine how many pages to print:"
+
+#: ../C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "All"
+
+#: ../C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Select this option to print all of the pages in the document."
+
+#: ../C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "Pages From"
+
+#: ../C/evince.xml:427(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+
+#: ../C/evince.xml:441(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+
+#: ../C/evince.xml:443(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+
+#: ../C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "Settings"
+
+#: ../C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "Use this drop-down list to select the printer settings."
+
+#: ../C/evince.xml:453(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+
+#: ../C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "Location"
+
+#: ../C/evince.xml:459(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr ""
+"Use this drop-down list to select one of the following print destinations:"
+
+#: ../C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: ../C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Print the document to a CUPS printer."
+
+#: ../C/evince.xml:470(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+
+#: ../C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: ../C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "Print the document to a printer."
+
+#: ../C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "File"
+
+#: ../C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "Print the document to a PostScript file."
+
+#: ../C/evince.xml:490(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+"Click <guibutton>Save As</guibutton> to display a dialogue where you specify "
+"the name and location of the PostScript file."
+
+#: ../C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "Custom"
+
+#: ../C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "Use the specified command to print the document."
+
+#: ../C/evince.xml:501(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+
+#: ../C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "State"
+
+#: ../C/evince.xml:511(para) ../C/evince.xml:517(para)
+#: ../C/evince.xml:523(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+
+#: ../C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "Type"
+
+#: ../C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "Comment"
+
+#: ../C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "Paper size"
+
+#: ../C/evince.xml:535(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+
+#: ../C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "Width"
+
+#: ../C/evince.xml:540(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+
+#: ../C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "Height"
+
+#: ../C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Use this spin box to specify the height of the paper."
+
+#: ../C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "Feed orientation"
+
+#: ../C/evince.xml:550(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+
+#: ../C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr "Page orientation"
+
+#: ../C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "Use this drop-down list to select the page orientation."
+
+#: ../C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr "Layout"
+
+#: ../C/evince.xml:560(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+
+#: ../C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr "Paper Tray"
+
+#: ../C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Use this drop-down list to select the paper tray."
+
+#: ../C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "To Copy a Document"
+
+#: ../C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "To copy a file, perform the following steps:"
+
+#: ../C/evince.xml:580(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:585(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialogue."
+
+#: ../C/evince.xml:588(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+
+#: ../C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Click <guibutton>Save</guibutton>."
+
+#: ../C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "To Work With Password-Protected Documents"
+
+#: ../C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr "An author can use the following password levels to protect a document:"
+
+#: ../C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr "User password that allows others only to read the document."
+
+#: ../C/evince.xml:612(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+
+#: ../C/evince.xml:616(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialogue. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+
+#: ../C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "To Close a Document"
+
+#: ../C/evince.xml:624(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:626(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+
+#: ../C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Shortcuts"
+
+#: ../C/evince.xml:636(para)
+msgid ""
+"Below is a list of all shortcuts present in <application>Evince Document "
+"Viewer</application>:"
+msgstr ""
+"Below is a list of all shortcuts present in <application>Evince Document "
+"Viewer</application>:"
+
+#: ../C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Shortcut"
+
+#: ../C/evince.xml:651(keycap) ../C/evince.xml:655(keycap)
+#: ../C/evince.xml:659(keycap) ../C/evince.xml:663(keycap)
+#: ../C/evince.xml:667(keycap) ../C/evince.xml:671(keycap)
+#: ../C/evince.xml:676(keycap) ../C/evince.xml:682(keycap)
+#: ../C/evince.xml:701(keycap) ../C/evince.xml:747(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: ../C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: ../C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Open an existing document"
+
+#: ../C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: ../C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Save a copy of the current document"
+
+#: ../C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: ../C/evince.xml:660(para)
+msgid "Print document"
+msgstr "Print document"
+
+#: ../C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: ../C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Close window"
+
+#: ../C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: ../C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Copy selection"
+
+#: ../C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: ../C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Select All"
+
+#: ../C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: ../C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (slash)"
+
+#: ../C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Find a word or phrase in the document"
+
+#: ../C/evince.xml:682(keycap)
+msgid "G"
+msgstr "G"
+
+#: ../C/evince.xml:683(para)
+msgid "Find next"
+msgstr "Find next"
+
+#: ../C/evince.xml:687(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+
+#: ../C/evince.xml:688(keycap)
+msgid "+"
+msgstr "+"
+
+#: ../C/evince.xml:689(keycap)
+msgid "="
+msgstr "="
+
+#: ../C/evince.xml:691(para)
+msgid "Zoom in"
+msgstr "Zoom in"
+
+#: ../C/evince.xml:695(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+
+#: ../C/evince.xml:696(keycap)
+msgid "-"
+msgstr "-"
+
+#: ../C/evince.xml:698(para)
+msgid "Zoom out"
+msgstr "Zoom out"
+
+#: ../C/evince.xml:701(keycap)
+msgid "R"
+msgstr "R"
+
+#: ../C/evince.xml:702(para)
+msgid "Reload the document"
+msgstr "Reload the document"
+
+#: ../C/evince.xml:706(keycap) ../C/evince.xml:731(keycap)
+msgid "Page Up"
+msgstr "Page Up"
+
+#: ../C/evince.xml:707(para)
+msgid "Go to the previous page"
+msgstr "Go to the previous page"
+
+#: ../C/evince.xml:710(keycap) ../C/evince.xml:735(keycap)
+msgid "Page Down"
+msgstr "Page Down"
+
+#: ../C/evince.xml:711(para)
+msgid "Go to the next page"
+msgstr "Go to the next page"
+
+#: ../C/evince.xml:715(keycap) ../C/evince.xml:723(keycap)
+msgid "Space"
+msgstr "Space"
+
+#: ../C/evince.xml:716(keycap) ../C/evince.xml:723(keycap)
+#: ../C/evince.xml:725(keycap) ../C/evince.xml:731(keycap)
+#: ../C/evince.xml:735(keycap)
+msgid "Shift"
+msgstr "Shift"
+
+#: ../C/evince.xml:716(keycap) ../C/evince.xml:724(keycap)
+msgid "Backspace"
+msgstr "Backspace"
+
+#: ../C/evince.xml:717(keycap) ../C/evince.xml:725(keycap)
+msgid "Return"
+msgstr "Return"
+
+#: ../C/evince.xml:719(para)
+msgid "Scroll forward"
+msgstr "Scroll forward"
+
+#: ../C/evince.xml:727(para)
+msgid "Scroll backward"
+msgstr "Scroll backward"
+
+#: ../C/evince.xml:732(para)
+msgid "Go a bunch of pages up"
+msgstr "Go a bunch of pages up"
+
+#: ../C/evince.xml:736(para)
+msgid "Go a bunch of pages down"
+msgstr "Go a bunch of pages down"
+
+#: ../C/evince.xml:739(keycap)
+msgid "Home"
+msgstr "Home"
+
+#: ../C/evince.xml:740(para)
+msgid "Go to the first page"
+msgstr "Go to the first page"
+
+#: ../C/evince.xml:743(keycap)
+msgid "End"
+msgstr "End"
+
+#: ../C/evince.xml:744(para)
+msgid "Go to the last page"
+msgstr "Go to the last page"
+
+#: ../C/evince.xml:747(keycap)
+msgid "L"
+msgstr "L"
+
+#: ../C/evince.xml:748(para)
+msgid "Go to page by number or label"
+msgstr "Go to page by number or label"
+
+#: ../C/evince.xml:751(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: ../C/evince.xml:752(para)
+msgid "Help"
+msgstr "Help"
+
+#: ../C/evince.xml:755(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: ../C/evince.xml:756(para)
+msgid "Run document as presentation"
+msgstr "Run document as presentation"
+
+#: ../C/evince.xml:759(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: ../C/evince.xml:760(para)
+msgid "Show or hide the side pane"
+msgstr "Show or hide the side pane"
+
+#: ../C/evince.xml:763(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: ../C/evince.xml:764(para)
+msgid "Toggle fullscreen mode"
+msgstr "Toggle fullscreen mode"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: ../C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr "David Lodge <[email protected]>, 2007"
diff --git a/help/es/es.po b/help/es/es.po
new file mode 100644
index 00000000..50c22149
--- /dev/null
+++ b/help/es/es.po
@@ -0,0 +1,1281 @@
+# translation of evince.help.HEAD.po to Español
+# Francisco Javier F. Serrador <[email protected]>, 2005.
+# Jorge González <[email protected]>, 2006, 2007.
+# traducción al español del manual de evince
+# spanish transtation for evince
+# Jorge González <[email protected]>, 200, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.help.HEAD\n"
+"POT-Creation-Date: 2009-04-30 12:12+0000\n"
+"PO-Revision-Date: 2009-05-02 18:47+0200\n"
+"Last-Translator: Jorge González <[email protected]>\n"
+"Language-Team: Español <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:155(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=844626d1125e2f50b295b139d6a406d0"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Manual del visor de documentos Evince"
+
+#: C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr ""
+"La aplicación Visor de Documentos Evince le permite ver documentos en varios "
+"formatos como Portable Document Format (PDF) y archivos PostScript."
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder) C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder) C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername) C/evince.xml:67(orgname)
+#: C/evince.xml:93(para) C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "Proyecto de Documentación de Mate"
+
+#: C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Se concede permiso para copiar, distribuir o modificar este documento según "
+"las condiciones de la GNU Free Documentation License (GFDL), Versión 1.1 o "
+"cualquier versión posterior publicada por la Free Software Foundation sin "
+"Secciones invariantes, Textos de portada y Textos de contraportada. "
+"Encontrará una copia de la GFDL en este <ulink type=\"help\" url=\"ghelp:fdl"
+"\">enlace</ulink> o en el archivo COPYING-DOCS distribuido con este manual."
+
+#: C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Este manual forma parte de una colección de documentos de MATE distribuidos "
+"según la GFDL. Si desea distribuir este manual de forma independiente de la "
+"colección, puede hacerlo agregando una copia de la licencia al documento, "
+"según se describe en la sección 6 de la misma."
+
+#: C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Muchos de los nombres utilizados por las empresas para distinguir sus "
+"productos y servicios se consideran marcas comerciales. Cuando estos nombres "
+"aparezcan en la documentación de MATE, y siempre que se haya informado a "
+"los miembros del Proyecto de documentación de MATE de dichas marcas "
+"comerciales, los nombres aparecerán en mayúsculas o con las iniciales en "
+"mayúsculas."
+
+#: C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"EL DOCUMENTO SE ENTREGA \"TAL CUAL\", SIN GARANTÍA DE NINGÚN TIPO, NI "
+"EXPLÍCITA NI IMPLÍCITA INCLUYENDO, SIN LIMITACIÓN, GARANTÍA DE QUE EL "
+"DOCUMENTO O VERSIÓN MODIFICADA DE ÉSTE CAREZCA DE DEFECTOS EN EL MOMENTO DE "
+"SU VENTA, SEA ADECUADO A UN FIN CONCRETO O INCUMPLA ALGUNA NORMATIVA. TODO "
+"EL RIESGO RELATIVO A LA CALIDAD, PRECISIÓN Y UTILIDAD DEL DOCUMENTO O SU "
+"VERSIÓN MODIFICADA RECAE EN USTED. SI CUALQUIER DOCUMENTO O VERSIÓN "
+"MODIFICADA DE AQUÉL RESULTARA DEFECTUOSO EN CUALQUIER ASPECTO, USTED (Y NO "
+"EL REDACTOR INICIAL, AUTOR O AUTOR DE APORTACIONES) ASUMIRÁ LOS COSTES DE "
+"TODA REPARACIÓN, MANTENIMIENTO O CORRECCIÓN NECESARIOS. ESTA EXENCIÓN DE "
+"RESPONSABILIDAD SOBRE LA GARANTÍA ES UNA PARTE ESENCIAL DE ESTA LICENCIA. NO "
+"SE AUTORIZA EL USO DE NINGÚN DOCUMENTO NI VERSIÓN MODIFICADA DE ÉSTE POR EL "
+"PRESENTE, SALVO DENTRO DEL CUMPLIMIENTO DE LA EXENCIÓN DE RESPONSABILIDAD;Y"
+
+#: C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"EN NINGUNA CIRCUNSTANCIA NI BAJO NINGUNA TEORÍA LEGAL, SEA POR ERROR "
+"(INCLUYENDO NEGLIGENCIA) CONTRATO O DOCUMENTO DE OTRO TIPO, EL AUTOR, EL "
+"ESCRITOR INICIAL, EL AUTOR DE APORTACIONES NI NINGÚN DISTRIBUIDOR DEL "
+"DOCUMENTO O VERSIÓN MODIFICADA DEL DOCUMENTO, NI NINGÚN PROVEEDOR DE NINGUNA "
+"DE ESAS PARTES, SERÁ RESPONSABLE ANTE NINGUNA PERSONA POR NINGÚN DAÑO "
+"DIRECTO, INDIRECTO, ESPECIAL, INCIDENTAL O DERIVADO DE NINGÚN TIPO, "
+"INCLUYENDO, SIN LIMITACIÓN DAÑOS POR PÉRDIDA DE FONDO DE COMERCIO, PARO "
+"TÉCNICO, FALLO INFORMÁTICO O AVERÍA O CUALQUIER OTRO POSIBLE DAÑO O AVERÍA "
+"DERIVADO O RELACIONADO CON EL USO DEL DOCUMENTO O SUS VERSIONES MODIFICADAS, "
+"AUNQUE DICHA PARTE HAYA SIDO INFORMADA DE LA POSIBILIDAD DE QUE SE "
+"PRODUJESEN ESOS DAÑOS."
+
+#: C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"ESTE DOCUMENTO Y LAS VERSIONES MODIFICADAS DEL MISMO SE OFRECEN SEGÚN LAS "
+"CONDICIONES ESTABLECIDAS EN LA LICENCIA DE DOCUMENTACIÓN LIBRE DE GNU (GFDL) "
+"Y TENIENDO EN CUENTA QUE: <placeholder-1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "Equipo de documentación de Mate"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Manual del visor de documentos Evince V1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "2008-04-05"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Manual del visor de documentos Evince V1.0"
+
+#: C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "06-04-2005"
+
+#: C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "Este manual describe la versión 0.2 del Visor de documentos Evince"
+
+#: C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "Comentarios"
+
+#: C/evince.xml:110(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"Para informar de un fallo, o hacer alguna sugerencia concerniente al visor "
+"de documentos Evince\n"
+"o este manual, siga las indicaciones en la <ulink url=\"ghelp:mate-feedback"
+"\" type=\"help\">Página de \n"
+"retroalimentación de Mate</ulink>."
+
+#: C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Visor de documentos Evince"
+
+#: C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "Introducción"
+
+#: C/evince.xml:129(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+"La aplicación <application>Visor de Documentos Evince</application> le "
+"permite ver documentos en varios formatos como Portable Document Format "
+"(PDF) y archivos PostScript. El <application>Visor de documentos Evince</"
+"application> sigue los estándares Freedesktop.org y Mate para proporcionar "
+"integración con el entorno de escritorio."
+
+#: C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "Inicio"
+
+#: C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Para iniciar el visor de documentos Evince"
+
+#: C/evince.xml:140(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+"El <application>Visor de documentos Evince</application> se inicia cuando "
+"abre un documento tal como un PDF o un archivo PostScript."
+
+#: C/evince.xml:141(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+"Alternativamente, puede iniciar el <application>Visor de documentos Evince</"
+"application> desde la línea de comandos, con el comando: <command>evince</"
+"command>."
+
+#: C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Al iniciar el visor de documentos Evince"
+
+#: C/evince.xml:147(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"Cuando inicie el <application>Visor de documentos Evince</application>, la "
+"siguiente ventana se mostrará."
+
+#: C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Ventana del visor de documentos Evince"
+
+#: C/evince.xml:158(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+"Muestra la ventana principal del visor de documentos Evince. Contiene la "
+"barra de título, la de menús, la de herramientas y el área de visualización. "
+"La barra de menú contiene los menús Archivar, Editar, Ver, Ir y Ayuda."
+
+#: C/evince.xml:164(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+"La ventana del <application>Visor de Documentos Evince</application> "
+"contiene los siguientes elementos:"
+
+#: C/evince.xml:168(term) C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "Barra de menú"
+
+#: C/evince.xml:170(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+"Los menús en la barra de menú contienen todos los comandos que necesita para "
+"trabajar con documentos en el \n"
+"<application>Visor de documentos Evince</application>."
+
+#: C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "Barra de herramientas"
+
+#: C/evince.xml:176(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr ""
+"La barra de herramientas contiene un subconjunto de comandos con los que "
+"puede acceder desde la barra de menú."
+
+#: C/evince.xml:180(term)
+msgid "Display area"
+msgstr "Área de visualización"
+
+#: C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "El área de visualización muestra el documento."
+
+#: C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "Componente IU"
+
+#: C/evince.xml:198(para) C/evince.xml:646(para)
+msgid "Action"
+msgstr "Acción"
+
+#: C/evince.xml:203(para)
+msgid "Window"
+msgstr "Ventana"
+
+#: C/evince.xml:207(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+"Arrastre un archivo en la ventana del <application>Visor de Documentos "
+"Evince</application> desde otra aplicación como un administrador de archivos."
+
+#: C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Doble pulsación en el nombre del archivo en el gestor de archivos"
+
+#: C/evince.xml:217(para) C/evince.xml:244(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+"Elija <menuchoice><guimenu>Archivar</guimenu><guimenuitem>Abrir</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "Combinaciones de teclas"
+
+#: C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "Pulse <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:187(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+msgstr ""
+"En el <application>Visor de documentos Evince</application>, puede realizar "
+"la misma acción de varias formas. Por ejemplo, puede abrir un documento de "
+"las siguientes formas:<informaltable frame=\"all\"><tgroup cols=\"2\" colsep="
+"\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+
+#: C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Este manual documenta la funcionalidad de la barra de menús."
+
+#: C/evince.xml:236(title)
+msgid "Usage"
+msgstr "Uso"
+
+#: C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "Para abrir un documento"
+
+#: C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Para abrir un documento, realice los siguientes pasos:"
+
+#: C/evince.xml:248(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want "
+"to open."
+msgstr ""
+"En el diálogo <guilabel>Abrir documento</guilabel>, seleccione el archivo "
+"que quiere abrir."
+
+#: C/evince.xml:253(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+"Pulse en el botón <guibutton>Abrir</guibutton>. La aplicación "
+"<application>Visor de documentos Evince</application> muestra el nombre del "
+"documento en la barra de título de la ventana."
+
+#: C/evince.xml:258(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+"Para abrir otro documento, elija <menuchoice><guimenu>Archivar</"
+"guimenu><guimenuitem>Abrir</guimenuitem></menuchoice> otra vez. El "
+"<application>Visor de documentos Evince</application> abre cada archivo en "
+"una ventana nueva."
+
+#: C/evince.xml:261(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+"Si intenta abrir un documento con un formato que el <application>Visor de "
+"documentos Evince</application> no reconozca, la aplicación muestra un "
+"mensaje de error."
+
+#: C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "Para navegar a través de un documento"
+
+#: C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Puede navegar a través de un documento así:"
+
+#: C/evince.xml:271(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+"Para ver la página siguiente, elija <menuchoice><guimenu>Ir</"
+"guimenu><guimenuitem>Página siguiente</guimenuitem></menuchoice>."
+
+#: C/evince.xml:275(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+"Para ver la página anterior, elija <menuchoice><guimenu>Ir</"
+"guimenu><guimenuitem>Página anterior</guimenuitem></menuchoice>."
+
+#: C/evince.xml:279(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+"Para ver la primera página del documento, elija <menuchoice><guimenu>Ir</"
+"guimenu><guimenuitem>Primera página</guimenuitem></menuchoice>."
+
+#: C/evince.xml:283(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+"Para ver la última página del documento, elija <menuchoice><guimenu>Ir</"
+"guimenu><guimenuitem>Última página</guimenuitem></menuchoice>."
+
+#: C/evince.xml:287(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+"Para ver una página particular, introduzca el número de página o la etiqueta "
+"en la caja de texto de la barra de herramientas, después pulse "
+"<keycap>Retorno</keycap>."
+
+#: C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "Para desplazar una página"
+
+#: C/evince.xml:295(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+"Para mostrar el contenido de la página que actualmente no se muestra en el "
+"área de visualización, use los métodos siguientes:"
+
+#: C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Use las teclas de flechas o la barra espaciadora del teclado."
+
+#: C/evince.xml:301(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+msgstr ""
+"Arrastre el área de visualización presionando con el botón del medio del "
+"ratón en cualquier parte dentro del documento y después moviendo el ratón. "
+"Por ejemplo, para desplazar la página hacia abajo, arrastre el área de "
+"visualización hacia la parte superior de la ventana."
+
+#: C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "Use las barras de desplazamiento en la ventana."
+
+#: C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "Para cambiar el tamaño de la página"
+
+#: C/evince.xml:312(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+"Puede usar los siguientes métodos para redimensionar una página en el área "
+"de visualización del <application>Visor de documentos Evince</application>:"
+
+#: C/evince.xml:317(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+"Para incrementar el tamaño de página, elija <menuchoice><guimenu>Ver</"
+"guimenu><guimenuitem>Ampliar</guimenuitem></menuchoice>."
+
+#: C/evince.xml:322(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+"Para reducir el tamaño de la página, elija <menuchoice><guimenu>Ver</"
+"guimenu><guimenuitem>Reducir</guimenuitem></menuchoice>."
+
+#: C/evince.xml:327(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+"Para redimensionar una página para que tenga la misma anchura que el área de "
+"visualización del <application>Visor de documentos Evince</application>, "
+"elija <menuchoice><guimenu>Ver</guimenu><guimenuitem>Ajustar al ancho de "
+"página</guimenuitem></menuchoice>."
+
+#: C/evince.xml:332(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+"Para redimensionar una página para que quepa en el área de visualización del "
+"<application>Visor de documentos de Evince</application>, elija "
+"<menuchoice><guimenu>Ver</guimenu><guimenuitem>Ajuste óptimo</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:337(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+"Para redimensionar la ventana del <application>Visor de documentos Evince</"
+"application> para que tenga la misma altura y anchura que la pantalla , "
+"elija <menuchoice><guimenu>Ver</guimenu><guimenuitem>Pantalla completa</"
+"guimenuitem></menuchoice>. Para redimensionar la ventana del "
+"<application>Visor de documentos Evince</application> a su tamaño original, "
+"pulse en el botón <guibutton>Salir de pantalla completa</guibutton>."
+
+#: C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr "Para ver páginas o la estructura del documento"
+
+#: C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "Para ver marcadores o páginas, realice los pasos siguientes:"
+
+#: C/evince.xml:350(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"Elija <menuchoice><guimenu>Ver</guimenu><guimenuitem>Barra lateral</"
+"guimenuitem></menuchoice> o pulse <keycap>F9</keycap> ."
+
+#: C/evince.xml:355(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+"Use la lista desplegable en la cabecera del panel lateral para seleccionar "
+"si de debe mostrar la estructura del documento o las páginas en el panel "
+"lateral."
+
+#: C/evince.xml:360(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+"Use las barras de desplazamiento laterales para mostrar el elemento "
+"requerido o la página en el panel lateral."
+
+#: C/evince.xml:365(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+"Pulse en una entrada para navegar a esa posición en el documento. Pulse en "
+"una página para navegar a esa página en el documento."
+
+#: C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "Para ver las propiedades de un documento"
+
+#: C/evince.xml:372(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"Para ver las propiedades de un documento, elija "
+"<menuchoice><guimenu>Archivar</guimenu><guimenuitem>Propiedades</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:378(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+"El diálogo <guilabel>Propiedades</guilabel> muestra toda la información "
+"disponible"
+
+#: C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "Para imprimir un documento"
+
+#: C/evince.xml:385(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"Para imprimir un documento, elija <menuchoice><guimenu>Archivar</"
+"guimenu><guimenuitem>Imprimir</guimenuitem></menuchoice>."
+
+#: C/evince.xml:389(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+"Si no puede elegir el elemento del menú <guimenuitem>Imprimir</guimenuitem>, "
+"entonces el autor del documento ha desactivado la opción de impresión para "
+"este documento. Para activar la opción de impresión debe introducir la "
+"contraseña maestra al abrir el documento. Vea el <xref linkend=\"evince-"
+"password\"/> para más información acerca de los archivos protegidos por "
+"clave."
+
+#: C/evince.xml:393(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr ""
+"El diálogo <guilabel>Imprimir</guilabel> tiene las siguientes secciones en "
+"solapas:"
+
+#: C/evince.xml:399(link) C/evince.xml:415(title)
+msgid "Job"
+msgstr "Tarea"
+
+#: C/evince.xml:404(link) C/evince.xml:437(title) C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr "Impresora"
+
+#: C/evince.xml:409(link) C/evince.xml:531(title)
+msgid "Paper"
+msgstr "Papel"
+
+#: C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "Rango de impresión"
+
+#: C/evince.xml:419(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+"Seleccione una de las siguientes opciones para determinar cuántas páginas "
+"imprimir:"
+
+#: C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "Todo"
+
+#: C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Seleccione esta opción para imprimir todas las páginas del documento."
+
+#: C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "Páginas desde"
+
+#: C/evince.xml:427(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"Seleccione esta opción para imprimir el rango seleccionado de páginas en el "
+"documento. Use las cajas de números para especificar la primera página y la "
+"última página del rango."
+
+#: C/evince.xml:441(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr ""
+"Use esta lista desplegable para seleccionar la impresora en la cual quiere "
+"imprimir el documento."
+
+#: C/evince.xml:443(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+"La opción <guilabel>Crear un documento PDF</guilabel> no está soportada en "
+"esta versión del <application>Visor de documentos Evince</application>."
+
+#: C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "Configuración"
+
+#: C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "Use esta lista desplegable para seleccionar las opciones de impresión."
+
+#: C/evince.xml:453(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+"Para configurar la impresora, pulse en el botón <guibutton>Configurar</"
+"guibutton>. Por ejemplo, puede activar o desactivar la impresión dúplex, o "
+"programar una impresión diferida, si su impresora tiene esta funcionalidad."
+
+#: C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "Lugar"
+
+#: C/evince.xml:459(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr ""
+"Use esta lista desplegable para seleccionar uno de los siguientes destinos "
+"de impresión:"
+
+#: C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Imprimir el documento en una impresora CUPS."
+
+#: C/evince.xml:470(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+"Si la impresora seleccionada es una impresora CUPS, <guilabel>CUPS</"
+"guilabel> es la única entrada en la lista desplegable."
+
+#: C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "Imprimir el documento en una impresora."
+
+#: C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "Archivo"
+
+#: C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "Imprimir el documento a un archivo PostScript."
+
+#: C/evince.xml:490(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+"Pulse en <guibutton>Guardar como</guibutton> para mostrar un diálogo donde "
+"especifique el nombre y ubicación del archivo PostScript."
+
+#: C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "Personalizado"
+
+#: C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "use el comando especificado para imprimir el documento."
+
+#: C/evince.xml:501(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr ""
+"Teclee el nombre del comando en la caja de texto. Incluya todos los "
+"argumentos de la línea de comandos."
+
+#: C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "Estado"
+
+#: C/evince.xml:511(para) C/evince.xml:517(para) C/evince.xml:523(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+"Esta función no está soportada en esta versión del <application>Visor de "
+"documentos Evince</application>."
+
+#: C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "Tipo"
+
+#: C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "Comentario"
+
+#: C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "Tamaño del papel"
+
+#: C/evince.xml:535(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+"Use esta lista desplegable para seleccionar el tamaño del papel para el cual "
+"quiere imprimir el documento."
+
+#: C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "Anchura"
+
+#: C/evince.xml:540(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+"Use esta caja rotatoria para especificar el ancho del papel. Use la lista "
+"desplegable adyacente para cambiar la unidad de medida."
+
+#: C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "Altura"
+
+#: C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Use esta caja rotatoria para especificar la altura del papel."
+
+#: C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "Orientación del alimentador"
+
+#: C/evince.xml:550(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr ""
+"Use esta lista desplegable para seleccionar la orientación del papel en la "
+"impresora."
+
+#: C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr "Orientación de la página"
+
+#: C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr ""
+"Use esta lista desplegable para seleccionar la orientación de la página."
+
+#: C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr "Distribución"
+
+#: C/evince.xml:560(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"Use esta lista desplegable para seleccionar la distribución de la página. Se "
+"mostrará una vista previa de cada distribución que seleccione en el área de "
+"<guilabel>Vista previa</guilabel>."
+
+#: C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr "Bandeja del papel"
+
+#: C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Use esta lista desplegable para seleccionar la bandeja del papel."
+
+#: C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "Para copiar un documento"
+
+#: C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Para copiar un archivo, realice los siguientes pasos:"
+
+#: C/evince.xml:580(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Elija <menuchoice><guimenu>Archivar</guimenu><guimenuitem>Guardar una copia</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:585(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+"Teclee el nombre de archivo nuevo en la caja de texto <guilabel>Nombre de "
+"archivo</guilabel> del diálogo <guilabel>Guardar una copia</guilabel>."
+
+#: C/evince.xml:588(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+"Si fuese necesario, especifique la ubicación del documento copiado. Por "
+"omisión las copias se guardan en su directorio personal."
+
+#: C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Pulse en el botón <guibutton>Guardar</guibutton>."
+
+#: C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Para trabajar con documentos protegidos por contraseña"
+
+#: C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr ""
+"Un auto puede usar los siguientes niveles de contraseñas para proteger un "
+"documento:"
+
+#: C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr "Contraseña que permite a otros leer el documento."
+
+#: C/evince.xml:612(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+"Contraseña maestra que permite a otros hacer acciones adicionales, como "
+"imprimir el documento."
+
+#: C/evince.xml:616(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+"Cuando intente abrir un documento protegido por contraseña, el "
+"<application>Visor de documentos Evince</application> mostrará un diálogo de "
+"seguridad. Teclee o la contraseña de usuario o la contraseña maestra en la "
+"caja de texto <guilabel>Introduzca la contraseña del documento</guilabel>, "
+"después pulse en el botón <guibutton>Abrir documento</guibutton>."
+
+#: C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "Para cerrar un documento"
+
+#: C/evince.xml:624(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"Para cerrar un documento, elija <menuchoice><guimenu>Archivar</"
+"guimenu><guimenuitem>Cerrar</guimenuitem></menuchoice>."
+
+#: C/evince.xml:626(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+"Si la ventana es la última abierta de <application>Visor de documentos "
+"Evince</application>, la aplicación terminará."
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Combinaciones de teclas"
+
+#: C/evince.xml:636(para)
+msgid ""
+"Below is a list of all shortcuts present in <application>Evince Document "
+"Viewer</application>:"
+msgstr ""
+"Debajo se muestra una lista de todas las combinaciones de teclas presentes "
+"en el <application>Visor de documentos Evince</application>."
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Combinación de teclas"
+
+#: C/evince.xml:651(keycap) C/evince.xml:655(keycap) C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap) C/evince.xml:667(keycap) C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap) C/evince.xml:683(keycap) C/evince.xml:704(keycap)
+#: C/evince.xml:750(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Abrir un documento existente"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Guardar una copia del documento actual"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "Imprimir el documento"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Cerrar la ventana"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Copiar la selección"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Seleccionar todo"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (barra)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Buscar una palabra o frase en el documento"
+
+#: C/evince.xml:683(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:684(keycap)
+#| msgid "F"
+msgid "F3"
+msgstr "F3"
+
+#: C/evince.xml:686(para)
+msgid "Find next"
+msgstr "Buscar siguiente"
+
+#: C/evince.xml:690(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (signo más)"
+
+#: C/evince.xml:691(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:692(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:694(para)
+msgid "Zoom in"
+msgstr "Ampliar"
+
+#: C/evince.xml:698(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (signo menos)"
+
+#: C/evince.xml:699(keycap)
+msgid "-"
+msgstr "-"
+
+#: C/evince.xml:701(para)
+msgid "Zoom out"
+msgstr "Reducir"
+
+#: C/evince.xml:704(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:705(para)
+msgid "Reload the document"
+msgstr "Recargar el documento"
+
+#: C/evince.xml:709(keycap) C/evince.xml:734(keycap)
+msgid "Page Up"
+msgstr "Re. Pág."
+
+#: C/evince.xml:710(para)
+msgid "Go to the previous page"
+msgstr "Ir a la página anterior"
+
+#: C/evince.xml:713(keycap) C/evince.xml:738(keycap)
+msgid "Page Down"
+msgstr "Av. Pág."
+
+#: C/evince.xml:714(para)
+msgid "Go to the next page"
+msgstr "Ir a la siguiente página"
+
+#: C/evince.xml:718(keycap) C/evince.xml:726(keycap)
+msgid "Space"
+msgstr "Espacio"
+
+#: C/evince.xml:719(keycap) C/evince.xml:726(keycap) C/evince.xml:728(keycap)
+#: C/evince.xml:734(keycap) C/evince.xml:738(keycap)
+msgid "Shift"
+msgstr "Mayús."
+
+#: C/evince.xml:719(keycap) C/evince.xml:727(keycap)
+msgid "Backspace"
+msgstr "Retroceso"
+
+#: C/evince.xml:720(keycap) C/evince.xml:728(keycap)
+msgid "Return"
+msgstr "Intro"
+
+#: C/evince.xml:722(para)
+msgid "Scroll forward"
+msgstr "Desplazamiento arriba"
+
+#: C/evince.xml:730(para)
+msgid "Scroll backward"
+msgstr "Desplazamiento atrás"
+
+#: C/evince.xml:735(para)
+msgid "Go a bunch of pages up"
+msgstr "Ir unas cuantas páginas arriba"
+
+#: C/evince.xml:739(para)
+msgid "Go a bunch of pages down"
+msgstr "Ir unas cuantas páginas abajo"
+
+#: C/evince.xml:742(keycap)
+msgid "Home"
+msgstr "Inicio"
+
+#: C/evince.xml:743(para)
+msgid "Go to the first page"
+msgstr "Ir a la primera página"
+
+#: C/evince.xml:746(keycap)
+msgid "End"
+msgstr "Fin"
+
+#: C/evince.xml:747(para)
+msgid "Go to the last page"
+msgstr "Ir a la última página"
+
+#: C/evince.xml:750(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:751(para)
+msgid "Go to page by number or label"
+msgstr "Ir a una página por número o etiqueta"
+
+#: C/evince.xml:754(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:755(para)
+msgid "Help"
+msgstr "Ayuda"
+
+#: C/evince.xml:758(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:759(para)
+msgid "Run document as presentation"
+msgstr "Ejecutar el documento como una presentación"
+
+#: C/evince.xml:762(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:763(para)
+msgid "Show or hide the side pane"
+msgstr "Mostrar u ocultar el panel lateral"
+
+#: C/evince.xml:766(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:767(para)
+msgid "Toggle fullscreen mode"
+msgstr "Conmutar el modo a pantalla completa"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+"Jorge González <[email protected]>, 2006-2008.\n"
+"Francisco Javier F. Serrador <[email protected]>, 2005."
diff --git a/help/es/figures/evince_start_window.png b/help/es/figures/evince_start_window.png
new file mode 100644
index 00000000..4e4f76e6
--- /dev/null
+++ b/help/es/figures/evince_start_window.png
Binary files differ
diff --git a/help/eu/eu.po b/help/eu/eu.po
new file mode 100644
index 00000000..d031a19e
--- /dev/null
+++ b/help/eu/eu.po
@@ -0,0 +1,626 @@
+# translation of evince_help.HEAD.po to Basque
+# Iñaki Larrañaga Murgoitio <[email protected]>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince_help.HEAD\n"
+"POT-Creation-Date: 2007-09-04 03:16+0100\n"
+"PO-Revision-Date: 2008-12-14 19:27+0100\n"
+"Last-Translator: Iñaki Larrañaga Murgoitio <[email protected]>\n"
+"Language-Team: Basque <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:146(None)
+msgid "@@image: 'figures/evince_start_window.png'; md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr "@@image: 'figures/evince_start_window.png'; md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Evince dokumentu-ikustailearen eskuliburua"
+
+#: C/evince.xml:27(para)
+msgid "The Evince Document Viewer application enables you to view documents of various formats like Portable Document Format (PDF) files and PostScript files"
+msgstr "Evince dokumentu-ikustailearen bidez hainbat formatuko dokumentuak ikus ditzakezu, adibidez, PDF dokumentuak (Portable Document Format) eta PostScript fitxategiak"
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder) C/evince.xml:91(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder) C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername) C/evince.xml:67(orgname) C/evince.xml:92(para)
+msgid "MATE Documentation Project"
+msgstr "MATEren dokumentazio-proiektua"
+
+#: C/evince.xml:2(para)
+msgid "Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or in the file COPYING-DOCS distributed with this manual."
+msgstr "Baimena ematen da dokumentu hau kopiatu, banatu eta/edo aldatzeko Free Software Foundation-ek argitaratutako GNU Dokumentazio Librearen Lizentziaren 1.1. bertsioan edo berriago batean ezarritako baldintzak betetzen badira; Atal Aldaezinik, Aurreko azaleko testurik eta Atzeko azaleko testurik gabe. GFDL lizentziaren kopia <ulink type=\"help\" url=\"ghelp:fdl\">esteka honetan</ulink> edo eskuliburu honekin batera ematen den COPYING-DOCS fitxategian aurkituko duzu."
+
+#: C/evince.xml:12(para)
+msgid "This manual is part of a collection of MATE manuals distributed under the GFDL. If you want to distribute this manual separately from the collection, you can do so by adding a copy of the license to the manual, as described in section 6 of the license."
+msgstr "Eskuliburu hau GFDL lizentziarekin banatzen diren MATE eskuliburuen bildumakoa da. Eskuliburu hau bildumatik bereizita banatu nahi baduzu, bana dezakezu, baina eskuliburuari lizentziaren kopia bat gehitu beharko diozu, lizentzian bertan 6. atalean azaltzen den bezala."
+
+#: C/evince.xml:19(para)
+msgid "Many of the names used by companies to distinguish their products and services are claimed as trademarks. Where those names appear in any MATE documentation, and the members of the MATE Documentation Project are made aware of those trademarks, then the names are in capital letters or initial capital letters."
+msgstr "Enpresek euren produktu eta zerbitzuak bereizteko erabiltzen dituzten izen asko marka erregistratu moduan hartu behar dira. Izen horiek MATEren edozein agiritan agertzen direnean, eta MATEren Dokumentazio Proiektuko kideak marka komertzialak direla konturatu badira, orduan izen horiek maiuskulaz idatzita egongo dira, osorik edo hasierako letra maiuskulaz jarrita."
+
+#: C/evince.xml:35(para)
+msgid "DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr "DOKUMENTUA \"DAGOEN-DAGOENEAN\" EMATEN DA, INOLAKO BERMERIK GABE, EZ ESPRESUKI ADIERAZITAKORIK ETA EZ INPLIZITURIK ERE; BESTEAK BESTE (MUGARIK GABE), EZ DA BERMATZEN DOKUMENTUA EDO BERTSIO ALDATUA AKATSIK GABEA DENIK, MERKATURATZEKO EDO XEDE JAKIN BATERAKO EGOKIA DENIK EDO ARAURIK HAUSTEN EZ DUENIK. DOKUMENTUAREN EDO DOKUMENTUAREN BERTSIO ALDATUAREN KALITATEARI, ZEHAZTASUNARI ETA PERFORMANTZIARI BURUZKO ERANTZUKIZUN OSOA ZUREA DA. DOKUMENTUREN BATEK EDO BERTSIO ALDATUREN BATEK EDOZEIN MOTATAKO AKATSIK IZANEZ GERO, ZUK (EZ HASIERAKO IDAZLEAK, EZ EGILEAK ETA EZ INONGO KOLABORATZAILEK) ZEURE GAIN HARTU BEHARKO DUZU BERRIKUSTEKO, KONPONTZEKO EDO ZUZENTZEKO BEHARREZKO ZERBITZU GUZTIEN KOSTUA. BERME-UKATZE HAU LIZENTZIA HONEN FUNTSEZKO ZATIA DA. EZ DA BAIMENIK EMATEN EZEIN DOKUMENTU EDO BERTSIO ALDATU ERABILTZEKO, BALDIN ETA EZ BADA BERME-UKATZE HAU ONARTZEN."
+
+#: C/evince.xml:55(para)
+msgid "UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES."
+msgstr "EZINGO DA INONGO ZIRKUNSTANTZIA EDO LEGE-TEORIARIK OINARRI HARTU --EZ ERANTZUKIZUN ZIBILARI BURUZKORIK (ZABARKERIA BARNE HARTUTA) EZ KONTRATUARI BURUZKORIK, EZ BESTERIK-- DOKUMENTU HONEN EDO BERTSIO ALDATU BATEN EGILEA, HASIERAKO IDAZLEA, EDOZEIN KOLABORATZAILE EDO BANATZAILE, EDO ALDERDI HORIEN EDOZEIN HORNITZAILE BESTE PERTSONA BATEN AURREAN ERANTZULE EGITEKO, PERTSONA HORREK EDOZEIN MOTATAKO KALTE ZUZENEKO, ZEHARKAKO, BEREZI, INTZIDENTAL EDO ONDORIOZKOAK JASAN DITUELAKO, BESTEAK BESTE (MUGARIK GABE), BEZEROAK GALTZEAREN, LANA ETEN BEHARRAREN, ORDENAGAILUAK EZ IBILTZEAREN EDO GAIZKI IBILTZEAREN ONDORIOZKO KALTEAK, EDO DOKUMENTUA NAHIZ HAREN BERTSIO ALDATUAK ERABILTZETIK ONDORIOZTATZEN DIREN EDO ERABILERA HORREKIN ZERIKUSIA DUEN EDOZEIN KALTE EDO GALERA, ALDERDIARI KALTE HORIEK GERTA ZITEZKEELA ADITZERA EMAN BAZAIO ERE."
+
+#: C/evince.xml:28(para)
+msgid "DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: <placeholder-1/>"
+msgstr "DOKUMENTUA ETA DOKUMENTUAREN BERTSIO ALDATUAK GNU DOKUMENTAZIO LIBREAREN LIZENTZIAREN BALDINTZEN ARABERA EMATEN DIRA, ETA ONDOREN ZEHAZTEN DIRENAK ONARTZERA BEHARTZEN DUTE: <placeholder-1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "MATEren dokumentazio-taldea"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Evince dokumentu-ikustailearen eskuliburua V1.0"
+
+#: C/evince.xml:89(date)
+msgid "2005-04-06"
+msgstr "2005-04-06"
+
+#: C/evince.xml:97(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "Evince dokumentu-ikustailearen 0.2 bertsioa azaltzen da eskuliburu honetan."
+
+#: C/evince.xml:100(title)
+msgid "Feedback"
+msgstr "Ohar-bidaltzea"
+
+#: C/evince.xml:101(para)
+msgid "To report a bug or make a suggestion regarding the Evince Document Viewer application or this manual, follow the directions in the <ulink url=\"ghelp:mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr "Evince dokumentu-ikustaileari buruzko akatsen berri emateko edo oharrak bidaltzeko, <ulink url=\"ghelp:mate-feedback\" type=\"help\">MATEra oharrak bidaltzeko orria</ulink>n aurkituko dituzu argibideak."
+
+#: C/evince.xml:108(primary)
+msgid "Evince Document Viewer"
+msgstr "Evince dokumentu-ikustailea"
+
+#: C/evince.xml:111(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:119(title)
+msgid "Introduction"
+msgstr "Sarrera"
+
+#: C/evince.xml:120(para)
+msgid "The <application>Evince Document Viewer</application> application enables you to view documents of various formats like Portable Document Format (PDF) files and PostScript files. <application>Evince Document Viewer</application> follows Freedesktop.org and MATE standards to provide integration with Desktop Environment."
+msgstr "<application>Evince dokumentu-ikustailea</application>ren bidez hainbat formatuko dokumentuak ikus ditzakezu, adibidez, PDF dokumentuak (Portable Document Format) eta PostScript fitxategiak. Freedesktop.org eta MATEren estandarrei jarraitzen die <application>Evince dokumentu-ikustailea</application>k, mahaigaineko ingurunean integratzeko."
+
+#: C/evince.xml:127(title)
+msgid "Getting Started"
+msgstr "Erabiltzen hasteko"
+
+#: C/evince.xml:130(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Evince dokumentu-ikustailea abiaraztea"
+
+#: C/evince.xml:131(para)
+msgid "<application>Evince Document Viewer</application> starts when you open a document such as a PDF or PostScript file."
+msgstr "Besteak beste PDF edo PostScript motako dokumentu bat irekitzean abiarazten da <application>Evince dokumentu-ikustailea</application>."
+
+#: C/evince.xml:132(para)
+msgid "Alternatively, you can start <application>Evince Document Viewer</application> from the command line, with the command: <command>evince</command>."
+msgstr "Bestela, komando-lerrotik abiarazi daiteke <application>Evince dokumentu-ikustailea</application>, komando hau idatzita: <command>evince</command>."
+
+#: C/evince.xml:137(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Evince dokumentu-ikustailea abiaraztean"
+
+#: C/evince.xml:138(para)
+msgid "When you start <application>Evince Document Viewer</application>, the following window is displayed."
+msgstr "<application>Evince dokumentu-ikustailea</application> abiarazten duzunean, leiho hau azalduko da."
+
+#: C/evince.xml:142(title)
+msgid "Evince Document Viewer Window"
+msgstr "Evince dokumentu-ikustailearen leihoa"
+
+#: C/evince.xml:149(phrase)
+msgid "Shows Evince Document Viewer main window. Contains titlebar, menubar, toolbar and display area. Menubar contains File, Edit, View, Go and Help menus."
+msgstr "Evince dokumentu-ikustailearen leiho nagusia erakusten du. Titulu-barra, menu-barra, tresna-barra eta bistaratze-area erakusten ditu. Menu-barrak menu hauek ditu: Fitxategia, Editatu, Ikusi, Joan eta Laguntza."
+
+#: C/evince.xml:155(para)
+msgid "The <application>Evince Document Viewer</application> window contains the following elements:"
+msgstr "<application>Evince dokumentu-ikustailea</application>ren leihoan elementu hauek daude:"
+
+#: C/evince.xml:159(term) C/evince.xml:207(para)
+msgid "Menubar"
+msgstr "Menu-barra"
+
+#: C/evince.xml:161(para)
+msgid "The menus on the menubar contain all of the commands that you need to work with documents in <application>Evince Document Viewer</application>."
+msgstr "<application>Evince dokumentu-ikustailea</application>n dokumentuekin lan egiteko behar dituzun komando guztiak dituzte menu-barrako menuek."
+
+#: C/evince.xml:165(term)
+msgid "Toolbar"
+msgstr "Tresna-barra"
+
+#: C/evince.xml:167(para)
+msgid "The toolbar contains a subset of the commands that you can access from the menubar."
+msgstr "Menu-barrako komando erabilienak izaten ditu tresna-barrak."
+
+#: C/evince.xml:171(term)
+msgid "Display area"
+msgstr "Bistaratze-area"
+
+#: C/evince.xml:173(para)
+msgid "The display area displays the document."
+msgstr "Bistaratze-arean bistaratzen da dokumentua."
+
+#: C/evince.xml:187(para)
+msgid "UI Component"
+msgstr "Erabiltzaile-interfazearen osagaiak"
+
+#: C/evince.xml:189(para)
+msgid "Action"
+msgstr "Ekintza"
+
+#: C/evince.xml:194(para)
+msgid "Window"
+msgstr "Leihoa"
+
+#: C/evince.xml:198(para)
+msgid "Drag a file into the <application>Evince Document Viewer</application> window from another application such as a file manager."
+msgstr "Arrastatu fitxategi bat <application>Evince dokumentu-ikustailea</application>ren leihora beste aplikazio batetik (adibidez, fitxategi-kudeatzaile batetik)."
+
+#: C/evince.xml:201(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Egin klik bikoitza fitxategi-kudeatzaileko fitxategi-izenean."
+
+#: C/evince.xml:208(para) C/evince.xml:235(para)
+msgid "Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></menuchoice>."
+msgstr "Aukeratu <menuchoice><guimenu>Fitxategia</guimenu><guimenuitem>Ireki</guimenuitem></menuchoice>."
+
+#: C/evince.xml:212(para)
+msgid "Shortcut keys"
+msgstr "Laster-teklak"
+
+#: C/evince.xml:213(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "Sakatu <keycombo><keycap>Ktrl</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:178(para)
+msgid "In <application>Evince Document Viewer</application>, you can perform the same action in several ways. For example, you can open a document in the following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></tgroup></informaltable>"
+msgstr "Ekintza bera egiteko modu bat baino gehiago dago <application>Evince dokumentu-ikustailea</application>n. Esate baterako, hona dokumentu bat irekitzeko moduak: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></tgroup></informaltable>"
+
+#: C/evince.xml:219(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Menu-barraren funtzionaltasuna dokumentatzen da eskuliburu honetan."
+
+#: C/evince.xml:227(title)
+msgid "Usage"
+msgstr "Erabilera"
+
+#: C/evince.xml:231(title)
+msgid "To Open A Document"
+msgstr "Dokumentu bat irekitzea"
+
+#: C/evince.xml:232(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Dokumentu bat irekitzeko, jarraitu urrats hauei:"
+
+#: C/evince.xml:239(para)
+msgid "In the <guilabel>Open Document</guilabel> dialog, select the file you want to open."
+msgstr "<guilabel>Ireki dokumentua</guilabel> elkarrizketa-koadroan, hautatu ireki nahi duzun fitxategia."
+
+#: C/evince.xml:244(para)
+msgid "Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</application> displays the name of the document in the titlebar of the window."
+msgstr "Egin klik <guibutton>Ireki</guibutton> botoian. Leihoaren titulu-barran bistaratzen du dokumentuaren izena <application>Evince dokumentu-ikustailea</application>k."
+
+#: C/evince.xml:249(para)
+msgid "To open another document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. <application>Evince Document Viewer</application> opens each file in a new window."
+msgstr "Beste dokumentu bat irekitzeko, aukeratu berriz <menuchoice><guimenu>Fitxategia</guimenu><guimenuitem>Ireki</guimenuitem></menuchoice>. Fitxategi bakoitza leiho berri batean irekitzen du <application>Evince dokumentu-ikustailea</application>k."
+
+#: C/evince.xml:252(para)
+msgid "If you try to open a document with format that <application>Evince Document Viewer</application> does not recognize, the application displays an error message."
+msgstr "<application>Evince dokumentu-ikustailea</application>k ezagutzen ez duen formaturen bateko dokumentu bat irekitzen saiatzen bazara, errore-mezu bat azalduko da."
+
+#: C/evince.xml:258(title)
+msgid "To Navigate Through a Document"
+msgstr "Dokumentu batean nabigatzea"
+
+#: C/evince.xml:259(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Honela nabiga daiteke dokumentu batean:"
+
+#: C/evince.xml:262(para)
+msgid "To view the next page, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr "Hurrengo orria ikusteko, aukeratu <menuchoice><guimenu>Joan</guimenu><guimenuitem>Hurrengo orria</guimenuitem></menuchoice>."
+
+#: C/evince.xml:266(para)
+msgid "To view the previous page, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr "Aurreko orria ikusteko, aukeratu <menuchoice><guimenu>Joan</guimenu><guimenuitem>Aurreko orria</guimenuitem></menuchoice>."
+
+#: C/evince.xml:270(para)
+msgid "To view the first page in the document, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr "Dokumentuaren lehen orria ikusteko, aukeratu <menuchoice><guimenu>Joan</guimenu><guimenuitem>Lehen orria</guimenuitem></menuchoice>."
+
+#: C/evince.xml:274(para)
+msgid "To view the last page in the document, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr "Dokumentuaren azken orria ikusteko, aukeratu <menuchoice><guimenu>Joan</guimenu><guimenuitem>Azken orria</guimenuitem></menuchoice>."
+
+#: C/evince.xml:278(para)
+msgid "To view a particular page, enter the page number or page label in the text box on the toolbar, then press <keycap>Return</keycap>."
+msgstr "Orri jakin bat ikusteko, idatzi tresna-barrako testu-koadroan orri-zenbakia edo orri-etiketa, eta sakatu <keycap>Sartu</keycap>."
+
+#: C/evince.xml:285(title)
+msgid "To Scroll a Page"
+msgstr "Orri bat korritzea"
+
+#: C/evince.xml:286(para)
+msgid "To display the page contents that are not currently displayed in the display area, use the following methods:"
+msgstr "Bistaratze-arean ikusten ez den edukia bistaratzeko, aukera hauek daude:"
+
+#: C/evince.xml:289(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Erabili teklatuko gezi-teklak edo zuriune-tekla."
+
+#: C/evince.xml:292(para)
+msgid "Drag the display area by clicking with the middle mouse button somewhere in the document and then moving the mouse. For example, to scroll down the page, drag the display area upwards in the window."
+msgstr "Egin klik saguaren erdiko botoiarekin dokumentuan (edonon), eta sagua mugitzean bistaratze-area arrastatzen da. Adibidez, orrian behera korritzeko, arrastatu gorantz bistaratze-area."
+
+#: C/evince.xml:295(para)
+msgid "Use the scrollbars on the window."
+msgstr "Erabili leihoko korritze-barrak."
+
+#: C/evince.xml:302(title)
+msgid "To Change the Page Size"
+msgstr "Orriaren tamaina aldatzea"
+
+#: C/evince.xml:303(para)
+msgid "You can use the following methods to resize a page in the <application>Evince Document Viewer</application> display area:"
+msgstr "<application>Evince dokumentu-arakatzailea</application>ren bistaratze-areako orrien tamaina aldatzeko aukera hauek daude:"
+
+#: C/evince.xml:308(para)
+msgid "To increase the page size, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr "Orriaren tamaina handitzeko, aukeratu <menuchoice><guimenu>Ikusi</guimenu><guimenuitem>Handiagotu zooma</guimenuitem></menuchoice>."
+
+#: C/evince.xml:313(para)
+msgid "To decrease the page size, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr "Orriaren tamaina txikiagotzeko, aukeratu <menuchoice><guimenu>Ikusi</guimenu><guimenuitem>Txikiagotu zooma</guimenuitem></menuchoice>."
+
+#: C/evince.xml:318(para)
+msgid "To resize a page to have the same width as the <application>Evince Document Viewer</application> display area, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr "Orri baten tamaina aldatzeko, <application>Evince dokumentu-ikustailea</application>ren bistaratze-arearen zabalera bera izan dezan, aukeratu <menuchoice><guimenu>Ikusi</guimenu><guimenuitem>Doitu orriaren zabalera</guimenuitem></menuchoice>."
+
+#: C/evince.xml:323(para)
+msgid "To resize a page to fit within the <application>Evince Document Viewer</application> display area, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr "Orri baten tamaina aldatzeko, <application>Evince dokumentu-ikustailea</application>ren bistaratze-arean kabitu dadin, aukeratu <menuchoice><guimenu>Ikusi</guimenu><guimenuitem>Egokiena</guimenuitem></menuchoice>."
+
+#: C/evince.xml:328(para)
+msgid "To resize the <application>Evince Document Viewer</application> window to have the same width and height as the screen, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></menuchoice>. To resize the <application>Evince Document Viewer</application> window to the original size, click on the <guibutton>Exit Full Screen</guibutton> button."
+msgstr "<application>Evince dokumentu-ikustailea</application>ren leihoaren tamaina aldatzeko, pantailaren zabalera eta altuera bera izan ditzan, aukeratu <menuchoice><guimenu>Ikusi</guimenu><guimenuitem>Pantaila osoan</guimenuitem></menuchoice>. <application>Evince dokumentu-ikustailea</application>ren leihoaren tamaina aldatzeko, jatorrizko tamaina izan dezan, egin klik <guibutton>Irten pantaila osotik</guibutton> botoian."
+
+#: C/evince.xml:336(title)
+msgid "To View Pages or Document Structure"
+msgstr "Orriak edo dokumentuen egitura ikustea"
+
+#: C/evince.xml:337(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "Laster-markak edo orriak ikusteko, jarraitu urrats hauei:"
+
+#: C/evince.xml:341(para)
+msgid "Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr "Aukeratu <menuchoice><guimenu>Ikusi</guimenu><guimenuitem>Alboko-barra</guimenuitem></menuchoice> edo sakatu <keycap>F9</keycap>."
+
+#: C/evince.xml:346(para)
+msgid "Use the drop-down list in the side-pane header to select whether to display document structure or pages in the side pane."
+msgstr "Alboko panelean dokumentuen egitura ala orriak bistaratu behar diren hautatzeko, erabili alboko panelaren goiburuko goitibeherako zerrenda."
+
+#: C/evince.xml:351(para)
+msgid "Use the side-pane scrollbars to display the required item or page in the side pane."
+msgstr "Nahi den elementua edo orria alboko panelean bistaratzeko, erabili alboko paneleko korritze-barrak."
+
+#: C/evince.xml:356(para)
+msgid "Click on an entry to navigate to that location in the document. Click on a page to navigate to that page in the document."
+msgstr "Egin klik sarrera batean, eta dokumentuko kokaleku horretara joaten da. Egin klik orri batean, eta dokumentuko orri horretara joaten da."
+
+#: C/evince.xml:362(title)
+msgid "To View the Properties of a Document"
+msgstr "Dokumentuaren propietateak ikustea"
+
+#: C/evince.xml:363(para)
+msgid "To view the properties of a document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr "Dokumentu baten propietateak ikusteko, aukeratu <menuchoice><guimenu>Fitxategia</guimenu><guimenuitem>Propietateak</guimenuitem></menuchoice>."
+
+#: C/evince.xml:369(para)
+msgid "The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr "Jar daitekeen informazio guztia bistaratzen da <guilabel>Propietateak</guilabel> elkarrizketa-koadroan."
+
+#: C/evince.xml:375(title)
+msgid "To Print a Document"
+msgstr "Dokumentu bat inprimatzea"
+
+#: C/evince.xml:376(para)
+msgid "To print a Document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr "Dokumentu bat inprimatzeko, aukeratu <menuchoice><guimenu>Fitxategia</guimenu><guimenuitem>Inprimatu</guimenuitem></menuchoice>."
+
+#: C/evince.xml:380(para)
+msgid "If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the author of the document has disabled the print option for this document. To enable the print option, you must enter the master password when you open the document. See <xref linkend=\"evince-password\"/> for more information about password-protected files."
+msgstr "Ezin baduzu <guimenuitem>Inprimatu</guimenuitem> menu-elementua aukeratu, inprimatzeko aukera desgaitu dio dokumentuaren egileak dokumentuari. Inprimatzeko aukera gaitzeko, pasahitz maisua idatzi behar da dokumentua irekitzean. Pasahitzen bidez babestutako dokumentuei buruz gehiago jakiteko, ikus <xref linkend=\"evince-password\"/>."
+
+#: C/evince.xml:384(para)
+msgid "The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr "<guilabel>Inprimatu</guilabel> elkarrizketa-koadroak fitxa hauek ditu:"
+
+#: C/evince.xml:390(link) C/evince.xml:406(title)
+msgid "Job"
+msgstr "Lana"
+
+#: C/evince.xml:395(link) C/evince.xml:428(title) C/evince.xml:430(guilabel)
+msgid "Printer"
+msgstr "Inprimagailua"
+
+#: C/evince.xml:400(link) C/evince.xml:522(title)
+msgid "Paper"
+msgstr "Papera"
+
+#: C/evince.xml:408(guilabel)
+msgid "Print range"
+msgstr "Inprimatze-area"
+
+#: C/evince.xml:410(para)
+msgid "Select one of the following options to determine how many pages to print:"
+msgstr "Hautatu aukera hauetako bat zenbat orri inprimatu nahi dituzun adierazteko:"
+
+#: C/evince.xml:413(guilabel)
+msgid "All"
+msgstr "Denak"
+
+#: C/evince.xml:414(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Hautatu aukera hau dokumentuaren orri guztiak inprimatzeko."
+
+#: C/evince.xml:417(guilabel)
+msgid "Pages From"
+msgstr "Orriak, hemendik:"
+
+#: C/evince.xml:418(para)
+msgid "Select this option to print the selected range of pages in the document. Use the spin boxes to specify the first page and last page of the range."
+msgstr "Hautatu aukera hau hautatutako orri-bitartea inprimatzeko. Erabili biratze-koadroak orri-bitartearen lehen eta azken orriak zehazteko."
+
+#: C/evince.xml:432(para)
+msgid "Use this drop-down list to select the printer to which you want to print the document."
+msgstr "Erabili goitibeherako zerrenda hau dokumentua zein inprimagailutan inprimatu nahi duzun hautatzeko."
+
+#: C/evince.xml:434(para)
+msgid "The <guilabel>Create a PDF document</guilabel> option is not supported in this version of <application>Evince Document Viewer</application>."
+msgstr "<application>Evince dokumentu-ikustailea</application>ren bertsio honetan ez da onartzen <guilabel>Sortu PDF dokumentua</guilabel> aukera."
+
+#: C/evince.xml:440(guilabel)
+msgid "Settings"
+msgstr "Ezarpenak"
+
+#: C/evince.xml:442(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "Erabili goitibeherako zerrenda hau inprimagailuaren ezarpenak hautatzeko."
+
+#: C/evince.xml:444(para)
+msgid "To configure the printer, click <guibutton>Configure</guibutton>. For example, you can enable or disable duplex printing, or schedule delayed printing, if this functionality is supported by the printer."
+msgstr "Inprimagailua konfiguratzeko, egin klik <guibutton>Konfiguratu</guibutton> botoian. Adibidez, aldebiko inprimaketa gaitu edo desgaitu daiteke, edo inprimaketa atzeratua antolatu, inprimagailuak funtzio horiek onartzen baditu."
+
+#: C/evince.xml:448(guilabel)
+msgid "Location"
+msgstr "Kokalekua"
+
+#: C/evince.xml:450(para)
+msgid "Use this drop-down list to select one of the following print destinations:"
+msgstr "Erabili goitibeherako zerrenda hau helburu hauetako bat hautatzeko:"
+
+#: C/evince.xml:455(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:457(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Dokumentua CUPS motako inprimagailu batean inprimatzen du."
+
+#: C/evince.xml:461(para)
+msgid "If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the only entry in this drop-down list."
+msgstr "Hautatutako inprimagailua CUPS motakoa bada, goitibeherako zerrendako sarrera bakarra <guilabel>CUPS</guilabel> izango da."
+
+#: C/evince.xml:468(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:470(para)
+msgid "Print the document to a printer."
+msgstr "Dokumentua inprimagailu batean inprimatzen du."
+
+#: C/evince.xml:476(guilabel)
+msgid "File"
+msgstr "Fitxategia"
+
+#: C/evince.xml:478(para)
+msgid "Print the document to a PostScript file."
+msgstr "Dokumentua PostScript fitxategi batean inprimatzen du."
+
+#: C/evince.xml:481(para)
+msgid "Click <guibutton>Save As</guibutton> to display a dialog where you specify the name and location of the PostScript file."
+msgstr "Egin klik <guibutton>Gorde honela</guibutton> botoian, eta PostScript fitxategiaren izena eta kokalekua zehazteko elkarrizketa-koadroa bistaratuko da."
+
+#: C/evince.xml:487(guilabel)
+msgid "Custom"
+msgstr "Pertsonalizatua"
+
+#: C/evince.xml:489(para)
+msgid "Use the specified command to print the document."
+msgstr "Dokumentua inprimatzeko erabili zehaztutako komandoa."
+
+#: C/evince.xml:492(para)
+msgid "Type the name of the command in the text box. Include all command-line arguments."
+msgstr "Idatzi komandoaren izena testu-koadroan, komando-lerroko argumentu guztiak barne."
+
+#: C/evince.xml:500(guilabel)
+msgid "State"
+msgstr "Egoera"
+
+#: C/evince.xml:502(para) C/evince.xml:508(para) C/evince.xml:514(para)
+msgid "This functionality is not supported in this version of <application>Evince Document Viewer</application>."
+msgstr "<application>Evince dokumentu-ikustailea</application>ren bertsio honetan ez da funtzionaltasun hori onartzen."
+
+#: C/evince.xml:506(guilabel)
+msgid "Type"
+msgstr "Mota"
+
+#: C/evince.xml:512(guilabel)
+msgid "Comment"
+msgstr "Iruzkina"
+
+#: C/evince.xml:524(guilabel)
+msgid "Paper size"
+msgstr "Paper-tamaina"
+
+#: C/evince.xml:526(para)
+msgid "Use this drop-down list to select the size of the paper to which you want to print the document."
+msgstr "Erabili goitibeherako zerrenda hau dokumentua zein paper-tamainatan inprimatu nahi duzun hautatzeko."
+
+#: C/evince.xml:529(guilabel)
+msgid "Width"
+msgstr "Zabalera"
+
+#: C/evince.xml:531(para)
+msgid "Use this spin box to specify the width of the paper. Use the adjacent drop-down list to change the measurement unit."
+msgstr "Erabili biratze-botoi hau paperaren zabalera zehazteko. Erabili ondoko goitibeherako zerrenda neurri-unitatea aldatzeko."
+
+#: C/evince.xml:534(guilabel)
+msgid "Height"
+msgstr "Altuera"
+
+#: C/evince.xml:536(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Erabili biratze-botoi hau paperaren altuera zehazteko."
+
+#: C/evince.xml:539(guilabel)
+msgid "Feed orientation"
+msgstr "Elikatzeko orientazioa"
+
+#: C/evince.xml:541(para)
+msgid "Use this drop-down list to select the orientation of the paper in the printer."
+msgstr "Erabili goitibeherako zerrenda hau inprimagailuan paperaren orientazioa hautatzeko."
+
+#: C/evince.xml:544(guilabel)
+msgid "Page orientation"
+msgstr "Paperaren orientazioa"
+
+#: C/evince.xml:546(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "Erabili goitibeherako zerrenda hau paperaren orientazioa hautatzeko."
+
+#: C/evince.xml:549(guilabel)
+msgid "Layout"
+msgstr "Diseinua"
+
+#: C/evince.xml:551(para)
+msgid "Use this drop-down list to select the page layout. A preview of each layout that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr "Erabili goitibeherako zerrenda hau paperaren diseinua hautatzeko. Hautatutako diseinu bakoitzaren aurrebista bistaratzen da <guilabel>Aurrebista</guilabel> arean."
+
+#: C/evince.xml:554(guilabel)
+msgid "Paper Tray"
+msgstr "Paper-erretilua"
+
+#: C/evince.xml:556(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Erabili goitibeherako zerrenda hau paper-erretilua hautatzeko."
+
+#: C/evince.xml:566(title)
+msgid "To Copy a Document"
+msgstr "Dokumentu bat kopiatzea"
+
+#: C/evince.xml:567(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Dokumentu bat kopiatzeko, jarraitu urrats hauei:"
+
+#: C/evince.xml:571(para)
+msgid "Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</guimenuitem></menuchoice>."
+msgstr "Aukeratu <menuchoice><guimenu>Fitxategia</guimenu><guimenuitem>Gorde kopia bat</guimenuitem></menuchoice>."
+
+#: C/evince.xml:576(para)
+msgid "Type the new filename in the <guilabel>Filename</guilabel> text box in the <guilabel>Save a Copy</guilabel> dialog."
+msgstr "Idatzi fitxategi-izen berria <guilabel>Gorde kopia bat</guilabel> elkarrizketa-koadroko <guilabel>Fitxategi-izena</guilabel> testu-koadroan."
+
+#: C/evince.xml:579(para)
+msgid "If necessary, specify the location of the copied document. By default, copies are saved in your home directory."
+msgstr "Zehaztu kopiatutako dokumentuaren kokalekua, behar izanez gero. Etxeko direktorioan gordetzen dira kopiak, lehenespenez."
+
+#: C/evince.xml:584(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Egin klik <guibutton>Gorde</guibutton> botoian."
+
+#: C/evince.xml:593(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Pasahitzez babestutako dokumentuekin lan egitea"
+
+#: C/evince.xml:594(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr "Pasahitz-maila hauek ditu egileak eskura, dokumentuak babesteko:"
+
+#: C/evince.xml:599(para)
+msgid "User password that allows others only to read the document."
+msgstr "Erabiltzailearen pasahitza, dokumentua irakurtzeko soilik."
+
+#: C/evince.xml:603(para)
+msgid "Master password that allows others to perform additional actions, such as print the document."
+msgstr "Pasahitz maisua, irakurtzeaz gain beste ekintza batzuk egiteko aukera ematen duena (adibidez, dokumentua inprimatzea)."
+
+#: C/evince.xml:607(para)
+msgid "When you try to open a password-protected document, <application>Evince Document Viewer</application> displays a security dialog. Type either the user password or the master password in the <guilabel>Enter document password</guilabel> text box, then click <guibutton>Open Document</guibutton>."
+msgstr "Pasahitzez babestutako dokumentu bat irekitzen saiatzean, segurtasunezko elkarrizketa-koadro bat irekitzen du <application>Evince dokumentu-ikustailea</application>k. Idatzi erabiltzailearen pasahitza edo pasahitz maisua <guilabel>Idatzi dokumentuaren pasahitza</guilabel> testu-koadroan, eta egin klik <guibutton>Ireki dokumentua</guibutton> botoian."
+
+#: C/evince.xml:614(title)
+msgid "To Close a Document"
+msgstr "Dokumentu bat ixtea"
+
+#: C/evince.xml:615(para)
+msgid "To close a document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr "Dokumentu bat ixteko, aukeratu <menuchoice><guimenu>Fitxategia</guimenu><guimenuitem>Itxi</guimenuitem></menuchoice>."
+
+#: C/evince.xml:617(para)
+msgid "If the window is the last <application>Evince Document Viewer</application> window open, the application exits."
+msgstr "<application>Evince dokumentu-ikustailea</application>n irekia dagoen azken leihoa bada leiho hori, aplikazioa itxi egiten da."
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr "Hizkuntza Politikarako Sailburuordetza <[email protected]>, 2008."
+
diff --git a/help/eu/figures/evince_start_window.png b/help/eu/figures/evince_start_window.png
new file mode 100644
index 00000000..24418b50
--- /dev/null
+++ b/help/eu/figures/evince_start_window.png
Binary files differ
diff --git a/help/evince.omf.in b/help/evince.omf.in
new file mode 100644
index 00000000..249856dc
--- /dev/null
+++ b/help/evince.omf.in
@@ -0,0 +1,11 @@
+<?xml version="1.0" standalone="no"?>
+<omf>
+ <resource>
+ <subject category="GNOME|Applications|Graphics"/>
+ <type>
+ user's guide
+ </type>
+ <relation seriesid="045b3722-5ea2-758e-3d7c-a1f8f92fa05f50"/>
+ <rights type="GNU FDL" license.version="1.1" holder="Nickolay V. Shmyrev"/>
+ </resource>
+</omf>
diff --git a/help/fi/fi.po b/help/fi/fi.po
new file mode 100644
index 00000000..c1d29774
--- /dev/null
+++ b/help/fi/fi.po
@@ -0,0 +1,1244 @@
+# Finnish translation of Evince manual.
+#
+# Copyright © Tommi Vainikainen, 2006.
+# Copyright © Flammie Pirinen, 2006. (merged from gucharmap translation)
+# Copyright © Timo Jyrinki, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince 0.5.2\n"
+"POT-Creation-Date: 2008-04-06 03:16+0100\n"
+"PO-Revision-Date: 2008-07-07 17:41+0300\n"
+"Last-Translator: Tommi Vainikainen <[email protected]>\n"
+"Language-Team: Finnish\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: C/legal.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Tätä asiakirjaa saa kopioida, jakaa edelleen ja/tai muokata Free Software "
+"Foundationin julkaiseman GNU Free Documentation Licensen (GFDL) version 1.1 "
+"tai valinnaisesti myöhemmän version mukaisesti, ilman vaatimuksia "
+"muuttamattomista osioista ja etu- tai takakansiteksteistä. Kopion GFDL:stä "
+"voi nähdä napsauttamalla <ulink type=\"help\" url=\"ghelp:fdl\">tätä "
+"linkkiä</ulink>, tai lukemalla ohjeen mukana toimitetun COPYING-DOCS-nimisen "
+"tiedoston."
+
+#: C/legal.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Tämä käyttöohje on osa Maten käyttöohjekokoelmaa ja levitetään GFDL-"
+"lisenssin alaisena. Jos haluat levittää tätä käyttöohjetta erillään "
+"kokoelmasta, voit tehdä sen liittämällä lisenssin kopion ohjeen mukaan, "
+"kuten lisenssin luku 6 sanelee."
+
+#: C/legal.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Monet tuotteiden ja palveluiden nimet ovat tuotemerkkejä. Maten "
+"dokumentointiprojektissa nämä nimet pyritään kirjoittamaan suuraakkosin tai "
+"isolla alkukirjaimella, sikäli kun projektin jäsenet tietävät kyseisistä "
+"tuotemerkeistä."
+
+#: C/legal.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"ASIAKIRJA TARJOTAAN SELLAISENAAN, ILMAN MINKÄÄNLAISTA KIRJATTUA TAI "
+"KONKLUDENTTISTA RAJATONTA TAKUUTA ASIAKIRJAN TAI SEN MUOKATUN VERSION "
+"VIRHEETTÖMYYDESTÄ, SOPIVUUDESTA KAUPALLISEEN KÄYTTÖÖN TAI TIETTYYN "
+"KÄYTTÖTARKOITUKSEEN TAI LOUKKAAMATTOMUUDESTA. TÄYSI VASTUU ASIAKIRJAN TAI "
+"SEN MUOKATUN VERSION LAADUSTA, TARKKUUDESTA JA TOIMIVUUDESTA ON KÄYTTÄJÄLLÄ. "
+"JOS ASIAKIRJA TAI SEN MUOKATTU VERSIO OSOITTAUTUU JOLLAKIN TAVALLA "
+"VIRHEELLISEKSI, KÄYTTÄJÄ (EI ALKUPERÄINEN KIRJOITTAJA TAI MUU TEKIJÄ) VASTAA "
+"PALVELUJEN, KORJAUSTEN TAI OIKAISUJEN KUSTANNUKSISTA. TÄMÄ "
+"VASTUUVAPAUSLAUSEKE ON EROTTAMATON OSA LISENSSIÄ. ASIAKIRJAN TAI SEN "
+"MUOKATTUJEN VERSIOIDEN KÄYTTÖ ON SALLITTUA VAIN TÄMÄN VASTUUVAPAUSLAUSEKKEEN "
+"NOJALLA; SEKÄ"
+
+#: C/legal.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"MISSÄÄN OLOSUHTEISSA TAI MINKÄÄN OIKEUSLAITOKSEN ALAISUUDESSA, NIIN "
+"OIKEUSLOUKKAUKSISSA (MUKAAN LUKIEN HUOLIMATTOMUUS), SOPIMUS TAI MUUTOIN, "
+"ASIAKIRJAN TAI SEN MUOKATUN VERSION TEKIJÄ, ALKUPERÄINEN KIRJOITTAJA, KUKAAN "
+"AVUSTAJISTA, KUKAAN LEVITTÄJÄ TAIKKA KUKAAN TARJOAJA EI OLE VASTUUSSA "
+"KENELLEKÄÄN SUORASTA, EPÄSUORASTA, ERITYISESTÄ, TAPATURMAISESTA TAI "
+"VÄLILLISESTÄ VAHINGOSTA SISÄLTÄEN RAJOITUKSETTA VAHINGOT LIIKEARVON "
+"MENETYKSESTÄ, TYÖN KESKEYTYMISESTÄ, TIETOKONEVIRHEESTÄ TAI -HÄIRIÖSTÄ TAIKKA "
+"MISTÄÄN MUUSTA VAHINGOSTA TAI MENETYKSESTÄ, JOKA ILMENEE TAI LIITTYY "
+"ASIAKIRJAN TAI SEN MUOKATUN VERSION KÄYTTÖÖN EDES SILLOIN KUN OSAPUOLTA ON "
+"OLLUT TIETOINEN TÄLLAISEN VAHINGON MAHDOLLISUUDESTA."
+
+#: C/legal.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"ASIAKIRJA SEKÄ MUOKATUT VERSIOT ASIAKIRJASTA TARJOTAAN GNU FREE "
+"DOCUMENTATION LICENSEN EHDOIN SEKÄ YMMÄRTÄEN ETTÄ: <placeholder-1/>"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:146(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Evince-asiakirjakatselimen käyttöohje"
+
+#: C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr ""
+"Evince-asiakirjakatselimella voi katsella mm. PDF- ja PostScript-muotoisia "
+"asiakirjoja"
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder) C/evince.xml:91(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder) C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername) C/evince.xml:67(orgname)
+#: C/evince.xml:92(para)
+msgid "MATE Documentation Project"
+msgstr "Maten dokumentointiprojekti"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "Maten dokumentointiryhmä"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Evince-asiakirjakatselimen käyttöohje v1.0"
+
+#: C/evince.xml:89(date)
+msgid "2005-04-06"
+msgstr "2005-04-06"
+
+#: C/evince.xml:97(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "Tämä käyttöohje kuvaa Evince-asiakirjakatselimen version 0.2"
+
+#: C/evince.xml:100(title)
+msgid "Feedback"
+msgstr "Palaute"
+
+#: C/evince.xml:101(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"Ilmoittaaksesi viasta tai tehdäksesi ehdotuksen Evince-asiakirjakatselimeen "
+"taikka tähän käyttöohjeeseen liittyen, seuraa ohjeita <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">Maten palautesivulla</ulink>."
+
+#: C/evince.xml:111(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:119(title)
+msgid "Introduction"
+msgstr "Johdanto"
+
+#: C/evince.xml:120(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+"<application>Evince-asiakirjakatselimella</application> voit katsoa "
+"asiakirjoja eri tiedostomuodoissa kuten Portable Document Format (PDF) ja "
+"PostScript. <application>Evince-asiakirjakatselin</application> noudattaa "
+"Freedesktop.org- ja Mate-standardeja ja sulautuu sen ansiosta luontevasti "
+"työpöytäympäristöön."
+
+#: C/evince.xml:127(title)
+msgid "Getting Started"
+msgstr "Aloittaminen"
+
+#: C/evince.xml:130(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Evince-asiakirjakatselimen käynnistäminen"
+
+#: C/evince.xml:131(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+"<application>Evince-asiakirjakatselin</application> käynnistyy kun avaat "
+"asiakirjan kuten PDF- tai PostScript-tiedoston."
+
+#: C/evince.xml:132(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+"Vaihtoehtoisesti voit käynnistää <application>Evince-asiakirjakatselimen</"
+"application> komentoriviltä komennolla: <command>evince</command>."
+
+#: C/evince.xml:137(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Kun käynnistät Evince-asiakirjakatselimen"
+
+#: C/evince.xml:138(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"Kun käynnistät <application>Evince-asiakirjakatselimen</application>, "
+"seuraava ikkuna ilmaantuu näkyviin."
+
+#: C/evince.xml:142(title)
+msgid "Evince Document Viewer Window"
+msgstr "Evince-asiakirjakatselimen ikkuna"
+
+#: C/evince.xml:149(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+"Näkymä Evince-asiakirjakatselimen pääikkunasta. Ikkuna sisältää "
+"otsikkopalkin, valikkopalkin, työkalupalkin sekä näyttöalueen. Valikkopalkki "
+"sisältää Tiedosto-, Muokkaa-, Näkymä-, Mene- ja Ohje-valikot."
+
+#: C/evince.xml:155(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+"<application>Evince-asiakirjakatselimen</application> ikkuna sisältää "
+"seuraavat osat:"
+
+#: C/evince.xml:159(term) C/evince.xml:207(para)
+msgid "Menubar"
+msgstr "Valikkopalkki"
+
+#: C/evince.xml:161(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+"Valikkopalkin valikot sisältävät kaikki komennot, joita tarvitset "
+"asiakirjojen kanssa työskennellessä <application>Evince-"
+"asiakirjakatselimella</application>."
+
+#: C/evince.xml:165(term)
+msgid "Toolbar"
+msgstr "Työkalupalkki"
+
+#: C/evince.xml:167(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr ""
+"Työkalupalkki sisältää tärkeimmät valikkopalkista löytyvistä komennoista."
+
+#: C/evince.xml:171(term)
+msgid "Display area"
+msgstr "Näyttöalue"
+
+#: C/evince.xml:173(para)
+msgid "The display area displays the document."
+msgstr "Asiakirja on näkyvissä näyttöalueella."
+
+#: C/evince.xml:187(para)
+msgid "UI Component"
+msgstr "Käyttöliittymäkomponentti"
+
+#: C/evince.xml:189(para)
+msgid "Action"
+msgstr "Toiminto"
+
+#: C/evince.xml:194(para)
+msgid "Window"
+msgstr "Ikkuna"
+
+#: C/evince.xml:198(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+"Vedä tiedosto <application>Evince-asiakirjakatselimen</application> ikkunaan "
+"toisesta sovelluksesta kuten tiedostonhallinnasta."
+
+#: C/evince.xml:201(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Kaksoisnapsauta tiedostonimeä tiedostonhallinnassa"
+
+#: C/evince.xml:208(para) C/evince.xml:235(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+"Valitse <menuchoice><guimenu>Tiedosto</guimenu><guimenuitem>Avaa</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:212(para)
+msgid "Shortcut keys"
+msgstr "Pikanäppäimet"
+
+#: C/evince.xml:213(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "Paina <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:178(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+msgstr ""
+"<application>Evince-asiakirjakatselimessa</application> voit suorittaa "
+"samoja toimintoja useilla tavoilla. Esimerkiksi voit avata asiakirjan "
+"seuraavilla tavoin: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep="
+"\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+
+#: C/evince.xml:219(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Tämä käyttöohje opastaa toiminnallisuuden valikkopalkista käsin."
+
+#: C/evince.xml:227(title)
+msgid "Usage"
+msgstr "Käyttö"
+
+#: C/evince.xml:231(title)
+msgid "To Open A Document"
+msgstr "Asiakirjan avaaminen"
+
+#: C/evince.xml:232(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Tiedosto avataan seuraavasti:"
+
+#: C/evince.xml:239(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want "
+"to open."
+msgstr ""
+"Valitse avattava tiedosto <guilabel>Avaa tiedosto</guilabel> -"
+"valintaikkunassa."
+
+#: C/evince.xml:244(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+"Napsauta <guibutton>Avaa</guibutton>. <application>Evince-asiakirjakatselin</"
+"application> näyttää asiakirjan nimen ikkunan otsikkopalkissa."
+
+#: C/evince.xml:249(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+"Avataksesi toisen asiakirjan valitse jälleen <menuchoice><guimenu>Tiedosto</"
+"guimenu><guimenuitem>Avaa</guimenuitem></menuchoice>. <application>Evince-"
+"asiakirjakatselin</application> avaa jokaisen tiedoston uuteen ikkunaan."
+
+#: C/evince.xml:252(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+"Mikäli yrität avata <application>Evince-asiakirjakatselimella</application> "
+"asiakirjan, jonka tiedostomuotoa ei tunnisteta, sovellus näyttää "
+"virheilmoituksen."
+
+#: C/evince.xml:258(title)
+msgid "To Navigate Through a Document"
+msgstr "Asiakirjan selaus"
+
+#: C/evince.xml:259(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Voit selata tiedoston läpi seuraavin tavoin:"
+
+#: C/evince.xml:262(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+"Katsoaksesi seuraavaa sivua, valitse <menuchoice><guimenu>Siirry</"
+"guimenu><guimenuitem>Seuraava sivu</guimenuitem></menuchoice>."
+
+#: C/evince.xml:266(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+"Katsoaksesi edellistä sivua, valitse <menuchoice><guimenu>Siirry</"
+"guimenu><guimenuitem>Edellinen sivu</guimenuitem></menuchoice>."
+
+#: C/evince.xml:270(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+"Katsoaksesi asiakirjan ensimmäistä sivua, valitse "
+"<menuchoice><guimenu>Siirry</guimenu><guimenuitem>Ensimmäinen sivu</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:274(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+"Katsoaksesi asiakirjan viimeistä sivua, valitse <menuchoice><guimenu>Siirry</"
+"guimenu><guimenuitem>Viimeinen sivu</guimenuitem></menuchoice>."
+
+#: C/evince.xml:278(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+"Katsoaksesi tiettyä sivua, syötä sivunumero taikka sivun nimi tekstikenttään "
+"työkalupalkissa ja paina <keycap>Return</keycap>."
+
+#: C/evince.xml:285(title)
+msgid "To Scroll a Page"
+msgstr "Sivun selaus"
+
+#: C/evince.xml:286(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+"Näyttääksesi sivun sisällöstä sen osan, joka ei juuri nyt näy "
+"näyttöalueessa, käytä seuraavia menetelmiä:"
+
+#: C/evince.xml:289(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Käytä nuolinäppäimiä tai välilyöntiä näppäimistöltä."
+
+#: C/evince.xml:292(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+msgstr ""
+"Vedä näyttöaluetta painamalla hiiren keskimmäinen nappula pohjaan ja "
+"siirtämällä hiirtä vastakkaiseen suuntaan selattavan suunnan kanssa. "
+"Esimerkiksi selataksesi alaspäin vedä näyttöaluetta ylöspäin ikkunassa."
+
+#: C/evince.xml:295(para)
+msgid "Use the scrollbars on the window."
+msgstr "Käytä ikkunan vierityspalkkeja."
+
+#: C/evince.xml:302(title)
+msgid "To Change the Page Size"
+msgstr "Sivukoon muuttaminen"
+
+#: C/evince.xml:303(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+"Voit käyttää seuraavia tapoja sivukoon muuttamiseksi <application>Evince-"
+"asiakirjakatselimen</application> näyttöalueessa:"
+
+#: C/evince.xml:308(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+"Sivukokoa kasvatetaan valitsemalla <menuchoice><guimenu>Näkymä</"
+"guimenu><guimenuitem>Lähennä</guimenuitem></menuchoice>."
+
+#: C/evince.xml:313(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+"Sivukokoa pienennetään valitsemalla <menuchoice><guimenu>Näkymä</"
+"guimenu><guimenuitem>Loitonna</guimenuitem></menuchoice>."
+
+#: C/evince.xml:318(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+"Sivun leveys muutetaan samaksi kuin <application>Evince-asiakirjakatselimen</"
+"application> näyttöalue valitsemalla <menuchoice><guimenu>Näkymä</"
+"guimenu><guimenuitem>Sovita sivun leveys</guimenuitem></menuchoice>."
+
+#: C/evince.xml:323(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+"Sivun koko sovitetaan <application>Evince-asiakirjakatselimen</application> "
+"näyttöalueeseen valitsemalla <menuchoice><guimenu>Näkymä</"
+"guimenu><guimenuitem>Paras sovitus</guimenuitem></menuchoice>."
+
+#: C/evince.xml:328(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+"Suurentaaksesi <application>Evince-asiakirjakatselimen</application> ikkunan "
+"kokoa ruudun leveyteen ja korkeuteen valitse <menuchoice><guimenu>Näkymä</"
+"guimenu><guimenuitem>Kokoruutu</guimenuitem></menuchoice>. Palauttaaksesi "
+"<application>Evince-asiakirjakatselimen</application> ikkunan alkuperäiseen "
+"kokoon, napsauta <guibutton>Lopeta kokoruutu</guibutton> -painiketta."
+
+#: C/evince.xml:336(title)
+msgid "To View Pages or Document Structure"
+msgstr "Sivujen ja asiakirjarakenteen katselu"
+
+#: C/evince.xml:337(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr ""
+"Katsellaksesi kirjanmerkkejä tai tiettyjä sivuja, tee seuraavat toimenpiteet:"
+
+#: C/evince.xml:341(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"Valitse <menuchoice><guimenu>Näkymä</guimenu><guimenuitem>Sivupaneeli</"
+"guimenuitem></menuchoice> tai paina <keycap>F9</keycap>."
+
+#: C/evince.xml:346(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+"Valitse sivupaneeliotsikon alasvetoluettelosta näytetäänkö asiakirjarakenne "
+"vaiko sivut sivupaneelissa."
+
+#: C/evince.xml:351(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+"Käytä sivupaneelin vierityspalkkia näyttääksesi tarvittavan kohdan tai sivun "
+"sivupaneelissa."
+
+#: C/evince.xml:356(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+"Napsauta haluamaasi kohtaa siirtyäksesi siihen. Napsuta sivua siirtyäksesi "
+"kyseiselle sivulle asiakirjassa."
+
+#: C/evince.xml:362(title)
+msgid "To View the Properties of a Document"
+msgstr "Asiakirjan ominaisuuksien katselu"
+
+#: C/evince.xml:363(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"Näyttääksesi asiakirjan ominaisuudet valitse <menuchoice><guimenu>Tiedosto</"
+"guimenu><guimenuitem>Ominaisuudet</guimenuitem></menuchoice>."
+
+#: C/evince.xml:369(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+"<guilabel>Ominaisuudet</guilabel>-ikkunassa näkyy kaikki saatavilla oleva "
+"tieto"
+
+#: C/evince.xml:375(title)
+msgid "To Print a Document"
+msgstr "Asiakirjan tulostaminen"
+
+#: C/evince.xml:376(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"Tulostaaksesi asiakirjan valitse <menuchoice><guimenu>Tiedosto</"
+"guimenu><guimenuitem>Tulosta</guimenuitem></menuchoice>."
+
+#: C/evince.xml:380(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+"Mikäli <guimenuitem>Tulosta</guimenuitem> ei ole valittavissa valikosta, "
+"asiakirjan tekijä on estänyt tämän asiakirjan tulostamisen. Asiakirja "
+"voidaan tulostaa, jos sitä avattaessa syötetään pääsalasanan. Katso "
+"kappaleesta <xref linkend=\"evince-password\"/> lisätietoa "
+"salasanasuojatuista tiedostoista."
+
+#: C/evince.xml:384(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr "<guilabel>Tulosta</guilabel>-valintaikkunassa on seuraavat välilehdet:"
+
+#: C/evince.xml:390(link) C/evince.xml:406(title)
+msgid "Job"
+msgstr "Työ"
+
+#: C/evince.xml:395(link) C/evince.xml:428(title) C/evince.xml:430(guilabel)
+msgid "Printer"
+msgstr "Tulostin"
+
+#: C/evince.xml:400(link) C/evince.xml:522(title)
+msgid "Paper"
+msgstr "Paperi"
+
+#: C/evince.xml:408(guilabel)
+msgid "Print range"
+msgstr "Tulostusalue"
+
+#: C/evince.xml:410(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+"Valitse yksi seuraavista vaihtoehdoista määrittämään kuinka monta sivua "
+"tulostetaan:"
+
+#: C/evince.xml:413(guilabel)
+msgid "All"
+msgstr "Kaikki"
+
+#: C/evince.xml:414(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Valitse tämä vaihtoehto kun haluat tulostaa kaikki asiakirjan sivut."
+
+#: C/evince.xml:417(guilabel)
+msgid "Pages From"
+msgstr "Sivuja mistä"
+
+#: C/evince.xml:418(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"Valitse tämä vaihtoehto tulostaaksesi valitun alueen asiakirjan sivuista. "
+"Määritä ensimmäinen ja viimeinen tulostettava sivu säätimillä."
+
+#: C/evince.xml:432(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr "Valitse alasvetoluettelosta käytettävä tulostin."
+
+#: C/evince.xml:434(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+"Tämä versio <application>Evince-asiakirjakatselimesta</application> ei tue "
+"vaihtoehtoa <guilabel>Luo PDF-asiakirja</guilabel>."
+
+#: C/evince.xml:440(guilabel)
+msgid "Settings"
+msgstr "Asetukset"
+
+#: C/evince.xml:442(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "Valitse alasvetoluettelosta tulostimen asetukset."
+
+#: C/evince.xml:444(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+"Muokataksesi tulostimen asetuksia napsauta <guibutton>Muokkaa</guibutton>. "
+"Voit esimerkiksi ottaa käyttöön tai poistaa käytöstä kaksipuoleisen "
+"tulostuksen taikka ajastaa tulostuksen mikäli tulostin tukee sitä."
+
+#: C/evince.xml:448(guilabel)
+msgid "Location"
+msgstr "Sijainti"
+
+#: C/evince.xml:450(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr "Valitse alasvetoluettelosta yksi seuraavista tulostuskohteista:"
+
+#: C/evince.xml:455(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:457(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Tulosta asiakirja CUPS-tulostimella."
+
+#: C/evince.xml:461(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+"Mikäli valittu tulostin on CUPS-tulostin, <guilabel>CUPS</guilabel> on ainoa "
+"vaihtoehto tässä alasvetoluettelossa."
+
+#: C/evince.xml:468(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:470(para)
+msgid "Print the document to a printer."
+msgstr "Tulosta asiakirja tulostimella."
+
+#: C/evince.xml:476(guilabel)
+msgid "File"
+msgstr "Tiedosto"
+
+#: C/evince.xml:478(para)
+msgid "Print the document to a PostScript file."
+msgstr "Tulosta asiakirja PostScript-tiedostoon."
+
+#: C/evince.xml:481(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+"Napsauta <guibutton>Tallenna nimellä</guibutton> määrittääksesi PostScript-"
+"tiedoston nimen ja sijainnin tiedostonvalintaikkunassa."
+
+#: C/evince.xml:487(guilabel)
+msgid "Custom"
+msgstr "Mukautettu"
+
+#: C/evince.xml:489(para)
+msgid "Use the specified command to print the document."
+msgstr "Käytä erillistä komentoa asiakirjan tulostamiseen."
+
+#: C/evince.xml:492(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr "Syötä komento ja käytettävät argumentit tekstikenttään."
+
+#: C/evince.xml:500(guilabel)
+msgid "State"
+msgstr "Tila"
+
+#: C/evince.xml:502(para) C/evince.xml:508(para) C/evince.xml:514(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+"Tämä versio <application>Evince-asiakirjakatselimesta</application> ei tue "
+"tätä toimintoa."
+
+#: C/evince.xml:506(guilabel)
+msgid "Type"
+msgstr "Tyyppi"
+
+#: C/evince.xml:512(guilabel)
+msgid "Comment"
+msgstr "Kommentti"
+
+#: C/evince.xml:524(guilabel)
+msgid "Paper size"
+msgstr "Paperikoko"
+
+#: C/evince.xml:526(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+"Valitse alasvetoluettelosta paperikoko, jolle haluat asiakirjan tulostaa."
+
+#: C/evince.xml:529(guilabel)
+msgid "Width"
+msgstr "Leveys"
+
+#: C/evince.xml:531(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+"Määritä paperin leveys tällä säätimellä. Valitse viereistä "
+"alasvetoluettelosta mittayksikkö."
+
+#: C/evince.xml:534(guilabel)
+msgid "Height"
+msgstr "Korkeus"
+
+#: C/evince.xml:536(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Määritä paperin korkeus tällä säätimellä."
+
+#: C/evince.xml:539(guilabel)
+msgid "Feed orientation"
+msgstr "Syöttösuunta"
+
+#: C/evince.xml:541(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr "Valitse alasvetoluettelosta paperin syöttösuunta tulostimessa."
+
+#: C/evince.xml:544(guilabel)
+msgid "Page orientation"
+msgstr "Sivun suunta"
+
+#: C/evince.xml:546(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "Valitse alasvetoluettelosta sivun suunta."
+
+#: C/evince.xml:549(guilabel)
+msgid "Layout"
+msgstr "Asemointi"
+
+#: C/evince.xml:551(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"Valitse alasvetoluettelosta sivun asemointi. Valittua asemointia voi "
+"tarkastella <guilabel>Esikatselu</guilabel>-ruudussa."
+
+#: C/evince.xml:554(guilabel)
+msgid "Paper Tray"
+msgstr "Paperilokero"
+
+#: C/evince.xml:556(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Valitse alasvetoluettelosta paperilokero"
+
+#: C/evince.xml:566(title)
+msgid "To Copy a Document"
+msgstr "Asiakirjan kopiointi"
+
+#: C/evince.xml:567(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Tiedosto kopioidaan seuraavasti:"
+
+#: C/evince.xml:571(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Valitse <menuchoice><guimenu>Tiedosto</guimenu><guimenuitem>Tallenna kopio</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:576(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+"Kirjoita uusi tiedostonimi <guilabel>Tiedostonimi</guilabel>-tekstikenttään "
+"<guilabel>Tallenna kopio</guilabel> -valintaikkunassa."
+
+#: C/evince.xml:579(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+"Määritä kopioidun asiakirjan sijainti mikäli se on tarpeen. Oletusarvoisesti "
+"kopiot tallennetaan kotihakemistoosi."
+
+#: C/evince.xml:584(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Napsauta <guibutton>Tallenna</guibutton>."
+
+#: C/evince.xml:593(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Työskentely salasanasuojatuilla asiakirjoilla"
+
+#: C/evince.xml:594(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr "Asiakirjan suojaamiseen voi käyttää seuraavia salasanatasoja:"
+
+#: C/evince.xml:599(para)
+msgid "User password that allows others only to read the document."
+msgstr "Käyttäjäsalasana sallii muiden ainoastaan lukea asiakirjaa."
+
+#: C/evince.xml:603(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+"Pääsalasana sallii muiden tehdä muita toimintoja kuten tulostaa asiakirjan."
+
+#: C/evince.xml:607(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+"Kun yrität avata salasanasuojatun asiakirjan, <application>Evince-"
+"asiakirjakatselin</application> näyttää turvakyselyn. Syötä joko käyttäjä- "
+"tai pääsalasana <guilabel>Syötä salasana</guilabel> -tekstikenttään ja "
+"napsauta <guibutton>Avaa asiakirja</guibutton>."
+
+#: C/evince.xml:614(title)
+msgid "To Close a Document"
+msgstr "Asiakirjan sulkeminen"
+
+#: C/evince.xml:615(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"Sulkeaksesi asiakirjan valitse <menuchoice><guimenu>Tiedosto</"
+"guimenu><guimenuitem>Sulje</guimenuitem</menuchoice>."
+
+#: C/evince.xml:617(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+"Mikäli ikkuna on viimeinen <application>Evince-asiakirjakatselimen</"
+"application> avoinna oleva ikkuna, sovellus lopetetaan."
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+"Timo Jyrinki <[email protected]>, 2008\n"
+"Tommi Vainikainen <[email protected]>, 2006\n"
+"Flammie Pirinen <[email protected]>, 2006"
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Evince-asiakirjakatselimen käyttöohje v1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "2008-04-05"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Pikanäppäimet"
+
+#: C/evince.xml:636(para)
+msgid ""
+"Below is a list of all shortcuts present in <application>Evince Document "
+"Viewer</application>:"
+msgstr ""
+"<application>Evince-asiakirjakatselimessa</application> käytettävissä "
+"olevat pikanäppäimet on lueteltu alla:"
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Pikanäppäin"
+
+#: C/evince.xml:651(keycap) C/evince.xml:655(keycap) C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap) C/evince.xml:667(keycap) C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap) C/evince.xml:682(keycap) C/evince.xml:701(keycap)
+#: C/evince.xml:747(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Asiakirjan avaaminen"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Asiakirjan kopiointi"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "Asiakirjan tulostaminen"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Ikkunan sulkeminen"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Kopioi valinta"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Valitse kaikki"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (kauttaviiva)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Etsi sanaa tai lausetta asiakirjasta"
+
+#: C/evince.xml:682(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:683(para)
+msgid "Find next"
+msgstr "Etsi seuraava"
+
+#: C/evince.xml:687(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus-merkki)"
+
+#: C/evince.xml:688(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:689(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:691(para)
+msgid "Zoom in"
+msgstr "Lähennä"
+
+#: C/evince.xml:695(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (miinus-merkki)"
+
+#: C/evince.xml:696(keycap)
+msgid "-"
+msgstr "-"
+
+#: C/evince.xml:698(para)
+msgid "Zoom out"
+msgstr "Loitonna"
+
+#: C/evince.xml:701(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:702(para)
+msgid "Reload the document"
+msgstr "Lataa asiakirja uudelleen"
+
+#: C/evince.xml:706(keycap) C/evince.xml:731(keycap)
+msgid "Page Up"
+msgstr "Page Up"
+
+#: C/evince.xml:707(para)
+msgid "Go to the previous page"
+msgstr "Mene edelliselle sivulle"
+
+#: C/evince.xml:710(keycap) C/evince.xml:735(keycap)
+msgid "Page Down"
+msgstr "Page Down"
+
+#: C/evince.xml:711(para)
+msgid "Go to the next page"
+msgstr "Mene seuraavalle sivulle"
+
+#: C/evince.xml:715(keycap) C/evince.xml:723(keycap)
+msgid "Space"
+msgstr "Välilyönti"
+
+#: C/evince.xml:716(keycap) C/evince.xml:723(keycap) C/evince.xml:725(keycap)
+#: C/evince.xml:731(keycap) C/evince.xml:735(keycap)
+msgid "Shift"
+msgstr "Vaihto"
+
+#: C/evince.xml:716(keycap) C/evince.xml:724(keycap)
+msgid "Backspace"
+msgstr "Askelpalautin"
+
+#: C/evince.xml:717(keycap) C/evince.xml:725(keycap)
+msgid "Return"
+msgstr "Rivinvaihto"
+
+#: C/evince.xml:719(para)
+msgid "Scroll forward"
+msgstr "Vieritä eteenpäin"
+
+#: C/evince.xml:727(para)
+msgid "Scroll backward"
+msgstr "Vieritä taaksepäin"
+
+#: C/evince.xml:732(para)
+msgid "Go a bunch of pages up"
+msgstr "Mene muutama sivu taaksepäin"
+
+#: C/evince.xml:736(para)
+msgid "Go a bunch of pages down"
+msgstr "Mene muutama sivu eteenpäin"
+
+#: C/evince.xml:739(keycap)
+msgid "Home"
+msgstr "Home"
+
+#: C/evince.xml:740(para)
+msgid "Go to the first page"
+msgstr "Mene ensimmäiselle sivulle"
+
+#: C/evince.xml:743(keycap)
+msgid "End"
+msgstr "End"
+
+#: C/evince.xml:744(para)
+msgid "Go to the last page"
+msgstr "Mene viimeiselle sivulle"
+
+#: C/evince.xml:747(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:748(para)
+msgid "Go to page by number or label"
+msgstr "Mene tietylle sivulle numeron tai tai nimen mukaan"
+
+#: C/evince.xml:751(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:752(para)
+msgid "Help"
+msgstr "Ohje"
+
+#: C/evince.xml:755(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:756(para)
+msgid "Run document as presentation"
+msgstr "Näytä asiakirja esityksenä"
+
+#: C/evince.xml:759(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:760(para)
+msgid "Show or hide the side pane"
+msgstr "Näytä tai piilota sivupaneeli"
+
+#: C/evince.xml:763(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:764(para)
+msgid "Toggle fullscreen mode"
+msgstr "Kokoruututila"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Evince-asiakirjakatselin"
+
+#~ msgid "To Open a File"
+#~ msgstr "Tiedoston avaaminen"
diff --git a/help/fi/figures/evince_start_window.png b/help/fi/figures/evince_start_window.png
new file mode 100644
index 00000000..ff457f43
--- /dev/null
+++ b/help/fi/figures/evince_start_window.png
Binary files differ
diff --git a/help/fr/figures/evince_start_window.png b/help/fr/figures/evince_start_window.png
new file mode 100644
index 00000000..5b3fb3a0
--- /dev/null
+++ b/help/fr/figures/evince_start_window.png
Binary files differ
diff --git a/help/fr/fr.po b/help/fr/fr.po
new file mode 100644
index 00000000..da6809e0
--- /dev/null
+++ b/help/fr/fr.po
@@ -0,0 +1,1297 @@
+# French translation of evince documentation.
+# Copyright (C) 2006-2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince
+# documentation package.
+#
+# Jonathan Ernst <[email protected]>, 2006-2007.
+# Claude Paroz <[email protected]>, 2006-2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince-doc\n"
+"POT-Creation-Date: 2010-02-18 18:03+0100\n"
+"PO-Revision-Date: 2008-04-05 20:47+0200\n"
+"Last-Translator: Claude Paroz <[email protected]>\n"
+"Language-Team: MATE French Team <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: C/legal.xml:2(para) C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Permission vous est donnée de copier, distribuer et/ou modifier ce document "
+"selon les termes de la Licence GNU Free Documentation License, Version 1.1 "
+"ou ultérieure publiée par la Free Software Foundation sans section "
+"inaltérable, sans texte de première page de couverture ni texte de dernière "
+"page de couverture. Vous trouverez un exemplaire de cette licence en suivant "
+"ce <ulink type=\"help\" url=\"ghelp:fdl\">lien</ulink> ou dans le fichier "
+"COPYING-DOCS fourni avec le présent manuel."
+
+#: C/legal.xml:12(para) C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Ce manuel fait partie de la collection de manuels MATE distribués selon les "
+"termes de la licence de documentation libre GNU. Si vous souhaitez "
+"distribuer ce manuel indépendamment de la collection, vous devez joindre un "
+"exemplaire de la licence au document, comme indiqué dans la section 6 de "
+"celle-ci."
+
+#: C/legal.xml:19(para) C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"La plupart des noms utilisés par les entreprises pour distinguer leurs "
+"produits et services sont des marques déposées. Lorsque ces noms "
+"apparaissent dans la documentation MATE et que les membres du projet de "
+"Documentation MATE sont informés de l'existence de ces marques déposées, "
+"soit ces noms entiers, soit leur première lettre est en majuscule."
+
+#: C/legal.xml:35(para) C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"LE PRÉSENT DOCUMENT EST FOURNI « TEL QUEL », SANS AUCUNE GARANTIE, EXPRESSE "
+"OU IMPLICITE, Y COMPRIS, ET SANS LIMITATION, LES GARANTIES DE BONNE QUALITÉ "
+"MARCHANDE OU D'APTITUDE À UN EMPLOI PARTICULIER OU AUTORISÉ DU DOCUMENT OU "
+"DE SA VERSION MODIFIÉE. L'UTILISATEUR ASSUME TOUT RISQUE RELATIF À LA "
+"QUALITÉ, À LA PERTINENCE ET À LA PERFORMANCE DU DOCUMENT OU DE SA VERSION DE "
+"MISE À JOUR. SI LE DOCUMENT OU SA VERSION MODIFIÉE S'AVÉRAIT DÉFECTUEUSE, "
+"L'UTILISATEUR (ET NON LE RÉDACTEUR INITIAL, L'AUTEUR, NI TOUT AUTRE "
+"PARTICIPANT) ENDOSSERA LES COÛTS DE TOUTE INTERVENTION, RÉPARATION OU "
+"CORRECTION NÉCESSAIRE. CETTE DÉNÉGATION DE RESPONSABILITÉ CONSTITUE UNE "
+"PARTIE ESSENTIELLE DE CETTE LICENCE. AUCUNE UTILISATION DE CE DOCUMENT OU DE "
+"SA VERSION MODIFIÉE N'EST AUTORISÉE AUX TERMES DU PRÉSENT ACCORD, EXCEPTÉ "
+"SOUS CETTE DÉNÉGATION DE RESPONSABILITÉ ;"
+
+#: C/legal.xml:55(para) C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"EN AUCUNE CIRCONSTANCE ET SOUS AUCUNE INTERPRÉTATION DE LA LOI, QU'IL "
+"S'AGISSE D'UN DÉLIT CIVIL (Y COMPRIS LA NÉGLIGENCE), CONTRACTUEL OU AUTRE, "
+"L'AUTEUR, LE RÉDACTEUR INITIAL, TOUT PARTICIPANT OU TOUT DISTRIBUTEUR DE CE "
+"DOCUMENT OU DE SA VERSION MODIFIÉE, OU TOUT FOURNISSEUR DE L'UNE DE CES "
+"PARTIES NE POURRA ÊTRE TENU RESPONSABLE À L'ÉGARD DE QUICONQUE POUR TOUT "
+"DOMMAGE DIRECT, INDIRECT, PARTICULIER, OU ACCIDENTEL DE TOUT TYPE Y COMPRIS, "
+"SANS LIMITATION, LES DOMMAGES LIÉS À LA PERTE DE CLIENTÈLE, À UN ARRÊT DE "
+"TRAVAIL, À UNE DÉFAILLANCE OU UN MAUVAIS FONCTIONNEMENT INFORMATIQUE, OU À "
+"TOUT AUTRE DOMMAGE OU PERTE LIÉE À L'UTILISATION DU DOCUMENT ET DE SES "
+"VERSIONS MODIFIÉES, MÊME SI LADITE PARTIE A ÉTÉ INFORMÉE DE L'ÉVENTUALITÉ DE "
+"TELS DOMMAGES."
+
+#: C/legal.xml:28(para) C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"LE PRÉSENT DOCUMENT ET SES VERSIONS MODIFIÉES SONT FOURNIS SELON LES TERMES "
+"DE LA LICENCE DE DOCUMENTATION LIBRE GNU SACHANT QUE : <placeholder-1/>"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:155(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Visionneur de documents Evince"
+
+#: C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr ""
+"Le visionneur de documents Evince vous permet d'afficher des documents dans "
+"divers formats comme les formats PDF et PostScript."
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder) C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder) C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername) C/evince.xml:67(orgname)
+#: C/evince.xml:93(para) C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "Projet de documentation MATE"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "L'équipe de documentation MATE"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Manuel du visionneur de documents Evince v1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "05/04/2008"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Manuel du visionneur de documents Evince V1.0"
+
+#: C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "06/04/2005"
+
+#: C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "Ce manuel documente la version 0.2 du visionneur de documents Evince"
+
+#: C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "Votre avis"
+
+#: C/evince.xml:110(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"Pour rapporter une anomalie ou émettre une suggestion concernant le "
+"visionneur de documents Evince ou ce manuel, procédez comme indiqué sur la "
+"<ulink url=\"ghelp:mate-feedback\" type=\"help\">page de réactions sur "
+"MATE</ulink>."
+
+#: C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Visionneur de documents Evince"
+
+#: C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "Introduction"
+
+#: C/evince.xml:129(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+"Le <application>visionneur de documents Evince</application> vous permet "
+"d'afficher des documents dans divers formats comme les formats PDF et "
+"PostScript. Le <application>visionneur de documents Evince</application> "
+"respecte les standards de Freedesktop.org et de MATE pour se fondre dans "
+"votre environnement de bureau."
+
+#: C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "Premiers pas"
+
+#: C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Démarrage du visionneur de documents Evince"
+
+#: C/evince.xml:140(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+"Le <application>visionneur de documents Evince</application> démarre à "
+"l'ouverture d'un document dans un format pris en charge comme le PDF ou le "
+"PostScript."
+
+#: C/evince.xml:141(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+"Vous pouvez également démarrer le <application>visionneur de documents "
+"Evince</application> depuis la ligne de commande avec la commande : "
+"<command>evince</command>."
+
+#: C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Au démarrage du visionneur de documents Evince"
+
+#: C/evince.xml:147(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"Lorsque vous démarrez le <application>visionneur de documents Evince</"
+"application>, la fenêtre suivante est affichée."
+
+#: C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Fenêtre du visionneur de document Evince"
+
+#: C/evince.xml:158(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+"Affiche la fenêtre principale du visionneur de document Evince. Elle "
+"contient une barre de titre, une barre de menus, une barre d'outils et une "
+"zone d'affichage. La barre de menus comprend les menus Fichier, Édition, "
+"Affichage, Aller à et Aide."
+
+#: C/evince.xml:164(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+"La fenêtre du <application>visionneur de documents Evince</application> "
+"contient les éléments suivants :"
+
+#: C/evince.xml:168(term) C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "Barre de menus"
+
+#: C/evince.xml:170(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+"Les menus de la barre de menus contiennent toutes les commandes nécessaires "
+"pour travailler avec les documents dans le <application>visionneur de "
+"documents Evince</application>."
+
+#: C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "Barre d'outils"
+
+#: C/evince.xml:176(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr ""
+"La barre d'outils contient un sous-ensemble des commandes accessibles depuis "
+"la barre de menus."
+
+#: C/evince.xml:180(term)
+msgid "Display area"
+msgstr "Zone d'affichage"
+
+#: C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "La zone dans laquelle le document est affiché."
+
+#: C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "Composant de l'interface utilisateur"
+
+#: C/evince.xml:198(para) C/evince.xml:646(para)
+msgid "Action"
+msgstr "Action"
+
+#: C/evince.xml:203(para)
+msgid "Window"
+msgstr "Fenêtre"
+
+#: C/evince.xml:207(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+"Glissez un fichier dans la fenêtre du <application>visionneur de documents "
+"Evince</application> à partir d'une autre application comme le gestionnaire "
+"de fichiers."
+
+#: C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Double-cliquez sur le nom du fichier dans le gestionnaire de fichiers."
+
+#: C/evince.xml:217(para) C/evince.xml:244(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+"Choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Ouvrir</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "Raccourcis clavier"
+
+#: C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr ""
+"Appuyez sur <keycombo><keycap>CTRL</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:187(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+msgstr ""
+"Dans le <application>visionneur de documents Evince</application>, vous "
+"pouvez effectuer une même opération de plusieurs manières. Par exemple, vous "
+"pouvez ouvrir un document au moyen des opérations suivantes : <informaltable "
+"frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname="
+"\"COLSPEC0\" colwidth=\"50*\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*"
+"\"/><placeholder-1/><placeholder-2/></tgroup></informaltable>"
+
+#: C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Ce manuel privilégie les opérations à partir de la barre de menus."
+
+#: C/evince.xml:236(title)
+msgid "Usage"
+msgstr "Utilisation"
+
+#: C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "Ouverture d'un document"
+
+#: C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Pour ouvrir un document, effectuez les opérations suivantes :"
+
+#: C/evince.xml:248(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want "
+"to open."
+msgstr ""
+"Dans la boîte de dialogue <guilabel>Ouvrir un document</guilabel>, "
+"sélectionnez le fichier que vous désirez ouvrir."
+
+#: C/evince.xml:253(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+"Cliquez sur <guibutton>Ouvrir</guibutton>. Le <application>visionneur de "
+"documents Evince</application> affiche le nom du document dans la barre de "
+"titre de la fenêtre."
+
+#: C/evince.xml:258(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+"Pour ouvrir un autre document, choisissez une nouvelle fois "
+"<menuchoice><guimenu>Fichier</guimenu><guimenuitem>Ouvrir</guimenuitem></"
+"menuchoice>. Le <application>visionneur de documents Evince</application> "
+"ouvre chaque fichier dans une nouvelle fenêtre."
+
+#: C/evince.xml:261(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+"Si vous essayez d'ouvrir un document dont le format n'est pas reconnu par le "
+"<application>visionneur de documents Evince</application>, l'application "
+"affichera un message d'erreur."
+
+#: C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "Navigation à l'intérieur d'un document"
+
+#: C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr ""
+"Vous pouvez naviguer à l'intérieur d'un document de la façon suivante :"
+
+#: C/evince.xml:271(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+"Pour afficher la page suivante, choisissez <menuchoice><guimenu>Aller à</"
+"guimenu><guimenuitem>Page suivante</guimenuitem></menuchoice>."
+
+#: C/evince.xml:275(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+"Pour afficher la page précédente, choisissez <menuchoice><guimenu>Aller à</"
+"guimenu><guimenuitem>Page précédente</guimenuitem></menuchoice>."
+
+#: C/evince.xml:279(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+"Pour afficher la première page du document, choisissez "
+"<menuchoice><guimenu>Aller à</guimenu><guimenuitem>Première page</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:283(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+"Pour afficher la dernière page du document, choisissez "
+"<menuchoice><guimenu>Aller à</guimenu><guimenuitem>Dernière page</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:287(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+"Pour afficher une page précise, tapez le numéro ou le nom de la page dans la "
+"zone de texte de la barre d'outils, puis appuyez sur <keycap>Entrée</keycap>."
+
+#: C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "Défilement d'une page"
+
+#: C/evince.xml:295(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+"Pour afficher du contenu qui n'est pas visible dans la zone d'affichage, "
+"utilisez les méthodes suivantes :"
+
+#: C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Utilisez les touches fléchées ou la barre d'espacement du clavier."
+
+#: C/evince.xml:301(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+msgstr ""
+"Faites glisser la zone d'affichage en cliquant avec le bouton du milieu de "
+"la souris sur le document, puis en déplaçant la souris. Par exemple, pour "
+"défiler la page vers le bas, glissez la zone d'affichage vers le haut de la "
+"fenêtre."
+
+#: C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "Utilisez les barres de défilement de la fenêtre."
+
+#: C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "Changement de la taille de la page"
+
+#: C/evince.xml:312(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+"Utilisez les méthodes suivantes pour changer la taille d'une page dans la "
+"zone d'affichage du <application>visionneur de documents Evince</"
+"application> :"
+
+#: C/evince.xml:317(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+"Pour augmenter la taille de la page, choisissez "
+"<menuchoice><guimenu>Affichage</guimenu><guimenuitem>Zoom avant</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:322(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+"Pour diminuer la taille de la page, choisissez "
+"<menuchoice><guimenu>Affichage</guimenu><guimenuitem>Zoom arrière</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:327(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+"Pour faire correspondre la largeur de la page avec la zone d'affichage du "
+"<application>visionneur de documents Evince</application>, choisissez "
+"<menuchoice><guimenu>Affichage</guimenu><guimenuitem>Ajuster à la largeur de "
+"la page</guimenuitem></menuchoice>."
+
+#: C/evince.xml:332(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+"Pour que la page entière apparaisse dans la zone d'affichage du "
+"<application>visionneur de documents Evince</application>, choisissez "
+"<menuchoice><guimenu>Affichage</guimenu><guimenuitem>Taille idéale</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:337(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+"Pour que la fenêtre du <application>visionneur de documents Evince</"
+"application> s'ajuste aux dimensions de l'écran, choisissez "
+"<menuchoice><guimenu>Affichage</guimenu><guimenuitem>Plein écran</"
+"guimenuitem></menuchoice>. Pour revenir au mode d'affichage précédent, "
+"cliquez sur le bouton <guibutton>Quitter le mode plein écran</guibutton>."
+
+#: C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr "Affichage des vignettes ou de la structure du document"
+
+#: C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr ""
+"Pour afficher les signets ou les vignettes de pages, procédez de la façon "
+"suivante :"
+
+#: C/evince.xml:350(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"Choisissez <menuchoice><guimenu>Affichage</guimenu><guimenuitem>Panneau "
+"latéral</guimenuitem></menuchoice> ou appuyez sur la touche <keycap>F9</"
+"keycap>."
+
+#: C/evince.xml:355(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+"Utilisez le menu déroulant dans l'en-tête du panneau latéral pour choisir "
+"d'afficher les vignettes ou la structure du document (index) dans le panneau "
+"latéral."
+
+#: C/evince.xml:360(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+"Utilisez la barre de défilement du panneau latéral pour afficher l'élément "
+"ou la page souhaitée dans le panneau latéral."
+
+#: C/evince.xml:365(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+"Cliquez sur un signet ou sur une vignette pour afficher l'emplacement "
+"correspondant du document dans la zone d'affichage."
+
+#: C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "Affichage des propriétés d'un document"
+
+#: C/evince.xml:372(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"Pour afficher les propriétés d'un document, choisissez "
+"<menuchoice><guimenu>Fichier</guimenu><guimenuitem>Propriétés</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:378(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+"La boîte de dialogue <guilabel>Propriétés</guilabel> affiche toutes les "
+"informations disponibles."
+
+#: C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "Impression d'un document"
+
+#: C/evince.xml:385(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"Pour imprimer un document, choisissez <menuchoice><guimenu>Fichier</"
+"guimenu><guimenuitem>Imprimer...</guimenuitem></menuchoice>."
+
+#: C/evince.xml:389(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+"Si l'élément de menu <guimenuitem>Imprimer...</guimenuitem> n'est pas actif, "
+"cela signifie que l'auteur du document a désactivé la possibilité d'imprimer "
+"ce document. Pour activer l'impression, vous devez saisir le mot de passe "
+"maître à l'ouverture du document. Voir <xref linkend=\"evince-password\"/> "
+"pour plus d'informations au sujet des fichiers protégés par mot de passe."
+
+#: C/evince.xml:393(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr ""
+"La boîte de dialogue <guilabel>Imprimer</guilabel> possède les onglets "
+"suivants :"
+
+#: C/evince.xml:399(link) C/evince.xml:415(title)
+msgid "Job"
+msgstr "Travail"
+
+#: C/evince.xml:404(link) C/evince.xml:437(title) C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr "Imprimante"
+
+#: C/evince.xml:409(link) C/evince.xml:531(title)
+msgid "Paper"
+msgstr "Papier"
+
+#: C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "Intervalle d'impression"
+
+#: C/evince.xml:419(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+"Sélectionnez une des options suivantes pour déterminer le nombre de pages à "
+"imprimer :"
+
+#: C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "Tout"
+
+#: C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Sélectionnez cette option pour imprimer toutes les pages du document."
+
+#: C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "Pages de"
+
+#: C/evince.xml:427(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"Sélectionnez cette option pour imprimer une partie des pages du document. "
+"Utilisez les zones de sélection numérique pour définir la première et la "
+"dernière page de l'intervalle."
+
+#: C/evince.xml:441(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr ""
+"Sélectionnez dans la liste l'imprimante à utiliser pour imprimer le document."
+
+#: C/evince.xml:443(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+"L'option <guilabel>Create a PDF document</guilabel> (Créer un document PDF) "
+"n'est pas prise en charge dans cette version du <application>visionneur de "
+"documents Evince</application>."
+
+#: C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "Réglages"
+
+#: C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr ""
+"Cette liste déroulante permet de sélectionner les paramètres d'impression."
+
+#: C/evince.xml:453(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+"Pour configurer l'imprimante, cliquez sur <guibutton>Configurer</guibutton>. "
+"Par exemple, vous pouvez activer ou désactiver l'impression recto-verso, ou "
+"spécifier l'heure d'une impression différée, pour autant que ces fonctions "
+"soient prises en charge par l'imprimante."
+
+#: C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "Emplacement"
+
+#: C/evince.xml:459(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr ""
+"Cette liste déroulante permet de sélectionner une des destinations "
+"d'impression suivantes :"
+
+#: C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Imprime le document en utilisant une imprimante CUPS."
+
+#: C/evince.xml:470(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+"Si l'imprimante sélectionnée est une imprimante CUPS, <guilabel>CUPS</"
+"guilabel> sera le seul contenu de la liste déroulante."
+
+#: C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "Imprime le document à l'aide d'une imprimante de manière classique."
+
+#: C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "Fichier"
+
+#: C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "Imprime le document dans un fichier PostScript."
+
+#: C/evince.xml:490(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+"Cliquez sur <guibutton>Enregistrer sous</guibutton> pour afficher une boîte "
+"de dialogue permettant de spécifier le nom et l'emplacement du fichier "
+"PostScript."
+
+#: C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "Personnalisé"
+
+#: C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "Utilise la commande spécifiée pour imprimer le document."
+
+#: C/evince.xml:501(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr ""
+"Entrez le nom de la commande dans le champ texte adjacent, sans oublier tous "
+"les arguments de la ligne de commande."
+
+#: C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "État"
+
+#: C/evince.xml:511(para) C/evince.xml:517(para) C/evince.xml:523(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+"Cette fonctionnalité n'est pas prise en charge dans cette version du "
+"<application>visionneur de documents Evince</application>."
+
+#: C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "Type"
+
+#: C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "Commentaire"
+
+#: C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "Taille du papier"
+
+#: C/evince.xml:535(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+"Cette liste déroulante permet de sélectionner le format de papier à utiliser "
+"pour imprimer le document."
+
+#: C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "Largeur"
+
+#: C/evince.xml:540(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+"Cette zone de sélection numérique vous permet de spécifier la largeur du "
+"papier. La liste déroulante adjacente vous offre la possibilité de modifier "
+"l'unité de mesure utilisée."
+
+#: C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "Hauteur"
+
+#: C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr ""
+"Cette zone de sélection numérique vous permet de spécifier la hauteur du "
+"papier."
+
+#: C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "Orientation du défilement"
+
+#: C/evince.xml:550(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr ""
+"Cette liste déroulante permet de sélectionner l'orientation du papier dans "
+"l'imprimante."
+
+#: C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr "Orientation de la page"
+
+#: C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr ""
+"Cette liste déroulante vous permet de sélectionner l'orientation du papier."
+
+#: C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr "Agencement"
+
+#: C/evince.xml:560(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"Cette liste déroulante permet de sélectionner la mise en page. Un aperçu de "
+"la mise en page sélectionnée s'affiche dans la zone <guilabel>Aperçu</"
+"guilabel>."
+
+#: C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr "Chargeur de papier"
+
+#: C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Cette liste déroulante permet de choisir le chargeur de papier."
+
+#: C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "Copie d'un document"
+
+#: C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Pour copier un fichier, procédez de la manière suivante :"
+
+#: C/evince.xml:580(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Choisissez <menuchoice><guimenu>Fichier</guimenu><guimenuitem>Enregistrer "
+"une copie...</guimenuitem></menuchoice>."
+
+#: C/evince.xml:585(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+"Saisissez le nouveau nom de fichier dans la zone de texte <guilabel>Nom</"
+"guilabel> de la boîte de dialogue <guilabel>Enregistrer une copie</guilabel>."
+
+#: C/evince.xml:588(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+"Si nécessaire, spécifiez l'emplacement du document copié. Par défaut, les "
+"copies sont enregistrées dans votre dossier personnel."
+
+#: C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Cliquez sur <guibutton>Enregistrer</guibutton>."
+
+#: C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Travailler avec des documents protégés par mot de passe"
+
+#: C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr ""
+"Un auteur peut utiliser les niveaux de protection suivants pour protéger un "
+"document :"
+
+#: C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr ""
+"Mot de passe utilisateur donnant uniquement le droit de lire le document."
+
+#: C/evince.xml:612(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+"Mot de passe maître donnant le droit d'effectuer des opérations "
+"supplémentaires, comme imprimer le document."
+
+#: C/evince.xml:616(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+"Lorsque vous essayez d'ouvrir un document protégé par mot de passe, le "
+"<application>visionneur de documents Evince</application> affiche une alerte "
+"de sécurité. Entrez le mot de passe maître ou le mot de passe utilisateur "
+"dans la zone de texte <guilabel>Saisissez le mot de passe du document</"
+"guilabel> de cette boîte de dialogue, puis cliquez sur <guibutton>Ouvrir "
+"document</guibutton>."
+
+#: C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "Fermeture d'un document"
+
+#: C/evince.xml:624(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"Pour fermer un document, choisissez <menuchoice><guimenu>Fichier</"
+"guimenu><guimenuitem>Fermer</guimenuitem></menuchoice>."
+
+#: C/evince.xml:626(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+"Si c'est la dernière fenêtre du <application>visionneur de documents Evince</"
+"application>, l'application se ferme."
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Raccourcis clavier"
+
+#: C/evince.xml:636(para)
+msgid ""
+"Below is a list of all shortcuts present in <application>Evince Document "
+"Viewer</application>:"
+msgstr ""
+"Vous trouverez ci-dessous une liste de tous les raccourcis clavier présents "
+"dans le <application>visionneur de documents Evince</application> :"
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Raccourci clavier"
+
+#: C/evince.xml:651(keycap) C/evince.xml:655(keycap) C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap) C/evince.xml:667(keycap) C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap) C/evince.xml:683(keycap) C/evince.xml:704(keycap)
+#: C/evince.xml:750(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Ouvre un document existant"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Enregistre une copie du document actuel"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "Imprime le document"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Ferme la fenêtre"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Copie la sélection"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Sélectionne tout"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (barre oblique)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Recherche un mot ou une phrase dans le document"
+
+#: C/evince.xml:683(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:684(keycap)
+msgid "F3"
+msgstr "F3"
+
+#: C/evince.xml:686(para)
+msgid "Find next"
+msgstr "Recherche l'occurrence suivante"
+
+#: C/evince.xml:690(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (signe plus)"
+
+#: C/evince.xml:691(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:692(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:694(para)
+msgid "Zoom in"
+msgstr "Effectue un zoom avant"
+
+#: C/evince.xml:698(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (signe moins)"
+
+#: C/evince.xml:699(keycap)
+msgid "-"
+msgstr "_"
+
+#: C/evince.xml:701(para)
+msgid "Zoom out"
+msgstr "Effectue un zoom arrière"
+
+#: C/evince.xml:704(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:705(para)
+msgid "Reload the document"
+msgstr "Recharge le document"
+
+#: C/evince.xml:709(keycap) C/evince.xml:734(keycap)
+msgid "Page Up"
+msgstr "Page haut"
+
+#: C/evince.xml:710(para)
+msgid "Go to the previous page"
+msgstr "Retourne à la page précédente"
+
+#: C/evince.xml:713(keycap) C/evince.xml:738(keycap)
+msgid "Page Down"
+msgstr "Pages bas"
+
+#: C/evince.xml:714(para)
+msgid "Go to the next page"
+msgstr "Va à la page suivante"
+
+#: C/evince.xml:718(keycap) C/evince.xml:726(keycap)
+msgid "Space"
+msgstr "Espace"
+
+#: C/evince.xml:719(keycap) C/evince.xml:726(keycap) C/evince.xml:728(keycap)
+#: C/evince.xml:734(keycap) C/evince.xml:738(keycap)
+msgid "Shift"
+msgstr "Maj"
+
+#: C/evince.xml:719(keycap) C/evince.xml:727(keycap)
+msgid "Backspace"
+msgstr "Retour arrière"
+
+#: C/evince.xml:720(keycap) C/evince.xml:728(keycap)
+msgid "Return"
+msgstr "Entrée"
+
+#: C/evince.xml:722(para)
+msgid "Scroll forward"
+msgstr "Défile vers le bas"
+
+#: C/evince.xml:730(para)
+msgid "Scroll backward"
+msgstr "Défile vers le haut"
+
+#: C/evince.xml:735(para)
+msgid "Go a bunch of pages up"
+msgstr "Recule de quelques pages"
+
+#: C/evince.xml:739(para)
+msgid "Go a bunch of pages down"
+msgstr "Avance de quelques pages"
+
+#: C/evince.xml:742(keycap)
+msgid "Home"
+msgstr "Origine"
+
+#: C/evince.xml:743(para)
+msgid "Go to the first page"
+msgstr "Va à la première page"
+
+#: C/evince.xml:746(keycap)
+msgid "End"
+msgstr "Fin"
+
+#: C/evince.xml:747(para)
+msgid "Go to the last page"
+msgstr "Va à la dernière page"
+
+#: C/evince.xml:750(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:751(para)
+msgid "Go to page by number or label"
+msgstr "Va à la page selon son numéro ou son étiquette"
+
+#: C/evince.xml:754(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:755(para)
+msgid "Help"
+msgstr "Aide"
+
+#: C/evince.xml:758(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:759(para)
+msgid "Run document as presentation"
+msgstr "Lance le document en mode présentation"
+
+#: C/evince.xml:762(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:763(para)
+msgid "Show or hide the side pane"
+msgstr "Affiche ou masque le panneau latéral"
+
+#: C/evince.xml:766(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:767(para)
+msgid "Toggle fullscreen mode"
+msgstr "Active ou quitte le mode plein écran"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+"Jonathan Ernst <[email protected]>, 2006, 2007.\n"
+"Claude Paroz <[email protected]>, 2006-2008."
diff --git a/help/it/figures/evince_start_window.png b/help/it/figures/evince_start_window.png
new file mode 100644
index 00000000..5ccae056
--- /dev/null
+++ b/help/it/figures/evince_start_window.png
Binary files differ
diff --git a/help/it/it.po b/help/it/it.po
new file mode 100644
index 00000000..f7f2818b
--- /dev/null
+++ b/help/it/it.po
@@ -0,0 +1,1285 @@
+# Italian translation for evince manual
+# Copyright (c) 2006 Free Software Foundation, inc.
+# This file is distributed under the same license as the evince manual.
+# Ubuntu Italian Team, 2006
+# Luca Ferretti <[email protected]>, 2006
+# Milo Casagrande <[email protected]>, 2007-2008
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince manual\n"
+"POT-Creation-Date: 2008-04-06 03:16+0100\n"
+"PO-Revision-Date: 2008-09-20 14:34+0200\n"
+"Last-Translator: Milo Casagrande <[email protected]>\n"
+"Language-Team: Italian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:155(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr "fatto"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Manuale di Visualizzatore documenti Evince"
+
+#: C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr ""
+"L'applicazione Visualizzatore documenti Evince consente di visualizzare vari "
+"formati di documenti come i PDF (Portable Document Format) e PostScript."
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder) C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder) C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername) C/evince.xml:67(orgname)
+#: C/evince.xml:93(para) C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "Progetto documentazione di MATE"
+
+#: C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Questo documento può essere copiato, distribuito e/o modificato solo in "
+"conformità con i termini della GNU Free Documentation License (GFDL) "
+"Versione 1.1 o delle versioni successive pubblicate dalla Free Software "
+"Foundation senza sezioni invariabili, frontespizi e testi di copertina. Una "
+"copia della GFDL è disponibile su questo <ulink type=\"help\" url=\"ghelp:fdl"
+"\">collegamento</ulink> o nel file COPYING-DOCS distribuito con questo "
+"manuale."
+
+#: C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Questo manuale fa parte di una raccolta di manuali MATE distribuita in "
+"conformità con la GFDL. Per poter distribuire questo manuale separatamente, "
+"è necessario inserirvi una copia della licenza, come descritto nella sezione "
+"6 della licenza."
+
+#: C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Molti dei nomi usati dalle aziende per distinguere i propri prodotti e "
+"servizi sono rivendicati come marchi. Quando questi nomi compaiono nella "
+"documentazione di MATE, e i partecipanti al MATE Documentation Project "
+"sono consapevoli del loro utilizzo, essi vengono scritti in lettere "
+"maiuscole o con l'iniziale maiuscola."
+
+#: C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"IL DOCUMENTO VIENE FORNITO SENZA GARANZIE DI ALCUN TIPO, ESPLICITE O "
+"IMPLICITE, INCLUSE, MA SENZA LIMITAZIONE, LE GARANZIE ATTESTANTI CHE IL "
+"DOCUMENTO O LE SUE VERSIONI MODIFICATE SIANO PRIVI DI DIFETTI, "
+"COMMERCIALIZZABILI, IDONEI A UN DETERMINATO SCOPO O CHE NON VIOLINO DIRITTI "
+"DI TERZI. SI DECLINA QUALUNQUE RESPONSABILITÀ RIGUARDO AI RISCHI INERENTI LA "
+"QUALITÀ, L'ACCURATEZZA E LE PRESTAZIONI DEL DOCUMENTO O DI UNA SUA VERSIONE "
+"MODIFICATA. QUALORA UN DOCUMENTO O UNA SUA VERSIONE MODIFICATA DOVESSERO "
+"PRESENTARE QUALUNQUE TIPO DI DIFETTO, IL COSTO DI EVENTUALI INTERVENTI DI "
+"ASSISTENZA, RIPARAZIONE O CORREZIONE SARÀ A CARICO DELL'UTENTE (NON DEL "
+"REDATTORE INIZIALE, DELL'AUTORE O DI ALTRI COLLABORATORI). QUESTA "
+"LIMITAZIONE DELLA GARANZIA COSTITUISCE PARTE ESSENZIALE DELLA LICENZA. L'USO "
+"DEL DOCUMENTO O DELLE SUE VERSIONI MODIFICATE È CONSENTITO SOLO ENTRO I "
+"TERMINI DI QUESTA LIMITAZIONE DELLA GARANZIA;"
+
+#: C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"IN NESSUNA CIRCOSTANZA E PER NESSUNA RAGIONE LEGALE, INCLUSI I PRINCIPI DI "
+"COLPA (INCLUSA LA NEGLIGENZA), ACCORDO CONTRATTUALE O ALTRO, SARÀ POSSIBILE "
+"CONSIDERARE L'AUTORE, IL REDATTORE INIZIALE, GLI ALTRI COLLABORATORI, "
+"QUALUNQUE DISTRIBUTORE DEL DOCUMENTO O DI UNA SUA VERSIONE MODIFICATA O "
+"QUALUNQUE FORNITORE DELLE PERSONE CITATE, RESPONSABILE NEI CONFRONTI DI "
+"QUALUNQUE PERSONA PER DANNI DIRETTI, INDIRETTI, SPECIALI, INCIDENTALI O "
+"CONSEGUENTI DI QUALUNQUE NATURA, INCLUSI, MA SENZA LIMITAZIONE, I DANNI PER "
+"PERDITA DI AVVIAMENTO, INTERRUZIONE DEL LAVORO, GUASTO O MALFUNZIONAMENTO "
+"DEL COMPUTER O QUALUNQUE ALTRO DANNO O PERDITA DERIVANTE O CORRELATA ALL'USO "
+"DEL DOCUMENTO O DI UNA SUA VERSIONE MODIFICATA, ANCHE QUALORA LE PERSONE "
+"CITATE FOSSERO STATE INFORMATE DELLA POSSIBILITÀ DI TALI DANNI."
+
+#: C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"QUESTO DOCUMENTO E LE SUE VERSIONI MODIFICATE VENGONO FORNITI IN BASE AI "
+"TERMINI DELLA GNU FREE DOCUMENTATION LICENSE, CON L'INTESA CHE:<placeholder-"
+"1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "MATE Documentation Team"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Manuale di Visualizzatore documenti Evince V1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "05/04/2005"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Manuale di Visualizzatore documenti Evince V1.0"
+
+#: C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "06/04/2005"
+
+#: C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr ""
+"Questo manuale descrive la versione 0.2 di Visualizzatore documenti Evince"
+
+#: C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "Commenti"
+
+#: C/evince.xml:110(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"Per segnalare un problema o inviare suggerimenti su Visualizzatore documenti "
+"Evince o su questo manuale, seguire le istruzioni presenti alla <ulink url="
+"\"ghelp:mate-feedback\" type=\"help\">pagina di commenti di MATE</ulink>."
+
+#: C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Visualizzatore documenti Evince"
+
+#: C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "Introduzione"
+
+#: C/evince.xml:129(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+"L'applicazione <application>Visualizzatore documenti Evince</application> "
+"consente di visualizzare documenti di vari formati come i file PDF (Portable "
+"Document Format) e i file PostScript. <application>Visualizzatore documenti "
+"Evince</application> segue gli standard di Freedesktop.org e di MATE per "
+"fornire l'integrazione con l'ambiente desktop."
+
+#: C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "Per iniziare"
+
+#: C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Avviare Visualizzatore documenti Evince"
+
+#: C/evince.xml:140(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+"<application>Visualizzatore documenti Evince</application> si avvia quando "
+"viene aperto un documento come un file PDF o PostScript."
+
+#: C/evince.xml:141(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+"In alternativa, è possibile avviare <application>Visualizzatore documenti "
+"Evince</application> dalla riga di comando con il comando: <command>evince</"
+"command>."
+
+#: C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Quando si avvia Visualizzatore documenti Evince"
+
+#: C/evince.xml:147(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"Quando si avvia <application>Visualizzatore documenti Evince</application>, "
+"viene visualizzata la seguente finestra."
+
+#: C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Finestra di Visualizzatore documenti Evince"
+
+#: C/evince.xml:158(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+"Mostra la finestra principale di Visualizzatore documenti Evince. Contiene "
+"la barra del titolo, la barra dei menù, la barra degli strumenti e l'area di "
+"visualizzazione. La barra dei menù contiene i menù File, Modifica, "
+"Visualizza, Vai e Aiuto."
+
+#: C/evince.xml:164(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+"La finestra di <application>Visualizzatore documenti Evince</application> "
+"contiene i seguenti elementi:"
+
+#: C/evince.xml:168(term) C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "Barra dei menù"
+
+#: C/evince.xml:170(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+"I menù nella barra dei menù contengono tutti i comandi necessari per "
+"lavorare con i documenti in <application>Visualizzatore documenti Evince</"
+"application>."
+
+#: C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "Barra degli strumenti"
+
+#: C/evince.xml:176(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr ""
+"La barra degli strumenti contiene un sottoinsieme dei comandi a cui è "
+"possibile accedere dalla barra dei menù."
+
+#: C/evince.xml:180(term)
+msgid "Display area"
+msgstr "Area di visualizzazione"
+
+#: C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "L'area di visualizzazione mostra il documento."
+
+#: C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "Componente interfaccia"
+
+#: C/evince.xml:198(para) C/evince.xml:646(para)
+msgid "Action"
+msgstr "Azione"
+
+#: C/evince.xml:203(para)
+msgid "Window"
+msgstr "Finestra"
+
+#: C/evince.xml:207(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+"Trascinare un file all'interno della finestra di <application>Visualizzatore "
+"documenti Evince</application> da un'altra applicazione come il file manager."
+
+#: C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Doppio-clic sul file all'interno del file manager."
+
+#: C/evince.xml:217(para) C/evince.xml:244(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+"Scegliere <menuchoice><guimenu>File</guimenu><guimenuitem>Apri</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "Tasti scorciatoia"
+
+#: C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "Premere <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:187(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+msgstr ""
+"Con <application>Visualizzatore documenti Evince</application> è possibile "
+"compiere la stessa azione in modi diversi. Ad esempio, è possibile aprire un "
+"documento nei seguenti modi: <informaltable frame=\"all\"><tgroup cols=\"2\" "
+"colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/"
+"><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/"
+"><placeholder-2/></tgroup></informaltable>"
+
+#: C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Questo manuale espone le funzionalità della barra dei menù."
+
+#: C/evince.xml:236(title)
+msgid "Usage"
+msgstr "Utilizzo"
+
+#: C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "Aprire un documento"
+
+#: C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Per aprire un file, procedere come segue:"
+
+#: C/evince.xml:248(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want "
+"to open."
+msgstr ""
+"Nella finestra di dialogo <guilabel>Apertura documento</guilabel> "
+"selezionare il file da aprire."
+
+#: C/evince.xml:253(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+"Fare clic su <guibutton>Apri</guibutton>. Il nome del documento viene "
+"mostrato nella barra del titolo della finestra di "
+"<application>Visualizzatore documenti Evince</application>."
+
+#: C/evince.xml:258(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+"Per aprire un altro documento, scegliere nuovamente "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Apri</guimenuitem></"
+"menuchoice>. Ciascun file viene aperto all'interno di una nuova finestra di "
+"<application>Visualizzatore documenti Evince</application>."
+
+#: C/evince.xml:261(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+"Se si cerca di aprire un documento con un formato non riconosciuto da "
+"<application>Visualizzatore documenti Evince</application>, viene "
+"visualizzato un messaggio di errore."
+
+#: C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "Spostarsi all'interno di un documento"
+
+#: C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr "È possibile spostarsi all'interno di un file nei seguenti modi:"
+
+#: C/evince.xml:271(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+"Per visualizzare la pagina successiva, scegliere <menuchoice><guimenu>Vai</"
+"guimenu><guimenuitem>Pagina successiva</guimenuitem></menuchoice>."
+
+#: C/evince.xml:275(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+"Per visualizzare la pagina precedente, scegliere <menuchoice><guimenu>Vai</"
+"guimenu><guimenuitem>Pagina precedente</guimenuitem></menuchoice>."
+
+#: C/evince.xml:279(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+"Per visualizzare la pagina iniziale del documento, scegliere "
+"<menuchoice><guimenu>Vai</guimenu><guimenuitem>Prima pagina</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:283(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+"Per visualizzare l'ultima pagina del documento, scegliere "
+"<menuchoice><guimenu>Vai</guimenu><guimenuitem>Ultima pagina</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:287(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+"Per visualizzare una particolare pagina, inserire il numero o l'etichetta "
+"della pagina nella casella di testo presente nella barra degli strumenti, "
+"quindi premere <keycap>Invio</keycap>."
+
+#: C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "Scorrere una pagina"
+
+#: C/evince.xml:295(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+"Per mostrare il contenuto di una pagina non ancora mostrato nell'area di "
+"visualizzazione, utilizzare i seguenti metodi:"
+
+#: C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Usare i tasti freccia o la barra spaziatrice sulla tastiera."
+
+#: C/evince.xml:301(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+msgstr ""
+"Trascinare l'area di visualizzazione facendo clic col pulsante centrale del "
+"mouse in una zona del documento e quindi muovere il mouse. Per esempio, per "
+"scorrere la pagina verso il basso, trascinare l'area di visualizzazione "
+"verso l'alto."
+
+#: C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "Usare le barre di scorrimento sulla finestra."
+
+#: C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "Cambiare la dimensione della pagina"
+
+#: C/evince.xml:312(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+"È possibile usare i seguenti metodi per ridimensionare una pagina nell'area "
+"di visualizzazione di <application>Visualizzatore documenti Evince</"
+"application>:"
+
+#: C/evince.xml:317(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+"Per incrementare la dimensione della pagina, scegliere "
+"<menuchoice><guimenu>Visualizza</guimenu><guimenuitem>Aumenta ingrandimento</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:322(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+"Per diminuire la dimensione della pagina, scegliere "
+"<menuchoice><guimenu>Visualizza</guimenu><guimenuitem>Riduci ingrandimento</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:327(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+"Per ridimensionare una pagina affinché abbia la stessa larghezza dell'area "
+"di visualizzazione di <application>Visualizzatore documenti Evince</"
+"application>, scegliere <menuchoice><guimenu>Visualizza</"
+"guimenu><guimenuitem>Adatta alla larghezza</guimenuitem></menuchoice>."
+
+#: C/evince.xml:332(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+"Per ridimensionare una pagina affinché sia interamente contenuta nell'area "
+"di visualizzazione di <application>Visualizzatore documenti Evince</"
+"application>, scegliere <menuchoice><guimenu>Visualizza</"
+"guimenu><guimenuitem>Adatta alla pagina</guimenuitem></menuchoice>."
+
+#: C/evince.xml:337(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+"Per ridimensionare la finestra di <application>Visualizzatore documenti "
+"Evince</application> affinché abbia le stesse dimensioni dello schermo, "
+"scegliere <menuchoice><guimenu>Visualizza</guimenu><guimenuitem>Schermo "
+"intero</guimenuitem></menuchoice>. Per riportare la finestra di "
+"<application>Visualizzatore documenti Evince</application> alle dimensioni "
+"originali, fare clic sul pulsante <guibutton>Finestra normale</guibutton>."
+
+#: C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr "Visualizzare le pagine o la struttura del documento"
+
+#: C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "Per visualizzare i segnalibri o le pagine, procedere come segue:"
+
+#: C/evince.xml:350(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"Scegliere <menuchoice><guimenu>Visualizza</guimenu><guimenuitem>Riquadro "
+"laterale</guimenuitem></menuchoice> o premere <keycap>F9</keycap>."
+
+#: C/evince.xml:355(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+"Utilizzare l'elenco a discesa presente nell'intestazione del riquadro "
+"laterale per selezionare se mostrare in esso la struttura del documento o le "
+"pagine."
+
+#: C/evince.xml:360(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+"Utilizzare le barre di scorrimento del riquadro laterale per visualizzare "
+"l'oggetto desiderato nel riquadro laterale."
+
+#: C/evince.xml:365(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+"Fare clic su una voce per spostarsi a quella posizione all'interno del "
+"documento. Fare clic su una pagina per spostarsi a quella pagina all'interno "
+"del documento."
+
+#: C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "Visualizzare le proprietà di un documento"
+
+#: C/evince.xml:372(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"Per visualizzare le proprietà di un documento, scegliere "
+"<menuchoice><guimenu>File</guimenu><guimenuitem>Proprietà</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:378(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+"La finestra di dialogo <guilabel>Proprietà</guilabel> mostra tutte le "
+"informazioni disponibili."
+
+#: C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "Stampare un documento"
+
+#: C/evince.xml:385(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"Per stampare un documento, scegliere <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Stampa</guimenuitem></menuchoice>."
+
+#: C/evince.xml:389(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+"Se non è possibile scegliere la voce di menù <guimenuitem>Stampa</"
+"guimenuitem>, l'autore del documento ha disabilitato il supporto per la "
+"stampa del documento. Per abilitare la stampa è necessario inserire la "
+"password principale all'apertura del documento. Per maggiori informazioni "
+"riguardo i file protetti da password, consultare <xref linkend=\"evince-"
+"password\"/>."
+
+#: C/evince.xml:393(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr ""
+"La finestra di dialogo <guilabel>Stampa</guilabel> contiene le seguenti "
+"schede:"
+
+#: C/evince.xml:399(link) C/evince.xml:415(title)
+msgid "Job"
+msgstr "Lavoro"
+
+#: C/evince.xml:404(link) C/evince.xml:437(title) C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr "Stampante"
+
+#: C/evince.xml:409(link) C/evince.xml:531(title)
+msgid "Paper"
+msgstr "Carta"
+
+#: C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "Intervallo di stampa"
+
+#: C/evince.xml:419(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+"Selezionare una delle seguenti opzioni per determinare quante pagine "
+"stampare:"
+
+#: C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "Tutte"
+
+#: C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Selezionare questa opzione per stampare tutte le pagine del documento."
+
+#: C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "Pagine da"
+
+#: C/evince.xml:427(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"Selezionare questa opzione per stampare l'intervallo di pagine selezionato. "
+"Usare i controlli di selezione per specificare la prima e l'ultima pagina "
+"dell'intervallo."
+
+#: C/evince.xml:441(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr ""
+"Usare questo elenco a discesa per selezionare la stampante con cui stampare "
+"il documento."
+
+#: C/evince.xml:443(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+"L'opzione <guilabel>Create a PDF document</guilabel> non è supportata in "
+"questa versione di <application>Visualizzatore documento Evince</"
+"application>."
+
+#: C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "Impostazioni"
+
+#: C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr ""
+"Usare questo elenco a discesa per selezionare le impostazioni della "
+"stampante."
+
+#: C/evince.xml:453(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+"Per configurare la stampante fare clic su <guibutton>Configura</guibutton>. "
+"Ad esempio, è possibile abilitare o disabilitare la stampa a doppia facciata "
+"o pianificare un ritardo di stampa, se questa funzionalità è supportata "
+"dalla stampante."
+
+#: C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "Posizione"
+
+#: C/evince.xml:459(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr ""
+"Utilizzare questo elenco a discesa per selezionare una delle seguenti "
+"destinazioni di stampa:"
+
+#: C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Stampa il documento su una stampante CUPS."
+
+#: C/evince.xml:470(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+"Se la stampante selezionata è una stampante CUPS, <guilabel>CUPS</guilabel> "
+"è la sola voce presente nell'elenco a discesa."
+
+#: C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "Stampa il documento su una stampante."
+
+#: C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "File"
+
+#: C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "Stampa il documento su un file PostScript."
+
+#: C/evince.xml:490(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+"Fare clic su <guibutton>Salva come</guibutton> per mostrare una finestra di "
+"dialogo in cui specificare il nome e la posizione del file PostScript."
+
+#: C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "Personalizzato"
+
+#: C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "Utilizzare il comando specificato per la stampa del documento."
+
+#: C/evince.xml:501(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr ""
+"Digitare il nome del comando nella casella di testo, inclusi tutti gli "
+"argomenti a riga di comando."
+
+#: C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "Stato"
+
+#: C/evince.xml:511(para) C/evince.xml:517(para) C/evince.xml:523(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+"Questa funzionalità non è supportata in questa versione di "
+"<application>Visualizzatore documenti Evince</application>."
+
+#: C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "Tipo"
+
+#: C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "Commento"
+
+#: C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "Dimensione carta"
+
+#: C/evince.xml:535(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+"Utilizzare questo elenco a discesa per selezionare la dimensione della carta "
+"su cui stampare il documento."
+
+#: C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "Larghezza"
+
+#: C/evince.xml:540(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+"Utilizzare questo controllo di selezione per specificare la larghezza della "
+"carta. Usare l'elenco a discesa adiacente per cambiare l'unità di misura."
+
+#: C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "Altezza"
+
+#: C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr ""
+"Utilizzare questo controllo di selezione per specificare l'altezza della "
+"carta."
+
+#: C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "Orientamento alimentazione"
+
+#: C/evince.xml:550(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr ""
+"Utilizzare questo elenco a discesa per selezionare l'orientamento della "
+"carta nella stampante."
+
+#: C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr "Orientamento pagina"
+
+#: C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr ""
+"Usare questo elenco a discesa per selezionare l'orientamento della pagina."
+
+#: C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr "Disposizione"
+
+#: C/evince.xml:560(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"Utilizzare questo elenco a discesa per selezionare la disposizione della "
+"pagina. Un'anteprima di ogni disposizione selezionata è mostrata nell'area "
+"<guilabel>Anteprima</guilabel>."
+
+#: C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr "Vassoio carta"
+
+#: C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr ""
+"Utilizzare questo elenco a discesa per selezionare il vassoio della carta."
+
+#: C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "Copiare un documento"
+
+#: C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Per copiare un file, procedere come segue:"
+
+#: C/evince.xml:580(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Scegliere <menuchoice><guimenu>File</guimenu><guimenuitem>Salva una copia</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:585(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+"Digitare il nuovo nome di file nella casella di testo <guilabel>Nome</"
+"guilabel> nella finestra di dialogo <guilabel>Salva una copia</guilabel>."
+
+#: C/evince.xml:588(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+"Se necessario, specificare la posizione per il documento copiato. In modo "
+"predefinito, le copie sono salvate nella cartella home."
+
+#: C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Fare clic su <guibutton>Salva</guibutton>."
+
+#: C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Lavorare con documenti protetti da password"
+
+#: C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr ""
+"Un autore può utilizzare i seguenti livelli di password per proteggere un "
+"documento:"
+
+#: C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr ""
+"Password utente che consente agli altri soltanto la lettura del documento."
+
+#: C/evince.xml:612(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+"Password principale che consente agli altri di eseguire ulteriori azioni, "
+"come la stampa del documento."
+
+#: C/evince.xml:616(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+"Quando si prova ad aprire un documento protetto da password, "
+"<application>Visualizzatore documenti Evince</application> mostra una "
+"finestra di dialogo di sicurezza. Digitare la password utente o quella "
+"principale nella casella di testo <guilabel>Inserire password documento</"
+"guilabel>, quindi fare clic su <guibutton>Apri documento</guibutton>."
+
+#: C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "Chiudere un documento"
+
+#: C/evince.xml:624(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"Per chiudere un documento, scegliere <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Chiudi</guimenuitem></menuchoice>."
+
+#: C/evince.xml:626(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+"Se la finestra di <application>Visualizzatore documenti Evince</application> "
+"è l'unica aperta, l'applicazione esce."
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Tasti scorciatoia"
+
+#: C/evince.xml:636(para)
+msgid ""
+"Below is a list of all shortcuts present in <application>Evince Document "
+"Viewer</application>:"
+msgstr "Di seguito viene presentato un elenco di tutte le scorciatoie presenti in <application>Visualizzatore documenti Evince</application>:"
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Scorciatoia"
+
+#: C/evince.xml:651(keycap) C/evince.xml:655(keycap) C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap) C/evince.xml:667(keycap) C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap) C/evince.xml:682(keycap) C/evince.xml:701(keycap)
+#: C/evince.xml:747(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Apre un documento esistente"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Salva una copia del documento corrente"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "Stampa il documento"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Chiude la finestra"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Copia la selezione"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Seleziona tutto"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (slash)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Trova una parola o una frase all'interno del documento"
+
+#: C/evince.xml:682(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:683(para)
+msgid "Find next"
+msgstr "Trova successivo"
+
+#: C/evince.xml:687(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr "<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (segno più)"
+
+#: C/evince.xml:688(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:689(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:691(para)
+msgid "Zoom in"
+msgstr "Aumenta ingrandimento"
+
+#: C/evince.xml:695(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr "<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (segno meno)"
+
+#: C/evince.xml:696(keycap)
+msgid "-"
+msgstr "-"
+
+#: C/evince.xml:698(para)
+msgid "Zoom out"
+msgstr "Riduce ingrandimento"
+
+#: C/evince.xml:701(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:702(para)
+msgid "Reload the document"
+msgstr "Ricarica il documento"
+
+#: C/evince.xml:706(keycap) C/evince.xml:731(keycap)
+msgid "Page Up"
+msgstr "PagSu"
+
+#: C/evince.xml:707(para)
+msgid "Go to the previous page"
+msgstr "Va alla pagina precedente"
+
+#: C/evince.xml:710(keycap) C/evince.xml:735(keycap)
+msgid "Page Down"
+msgstr "PagGiù"
+
+#: C/evince.xml:711(para)
+msgid "Go to the next page"
+msgstr "Va alla pagina successiva"
+
+#: C/evince.xml:715(keycap) C/evince.xml:723(keycap)
+msgid "Space"
+msgstr "Spazio"
+
+#: C/evince.xml:716(keycap) C/evince.xml:723(keycap) C/evince.xml:725(keycap)
+#: C/evince.xml:731(keycap) C/evince.xml:735(keycap)
+msgid "Shift"
+msgstr "Maiusc"
+
+#: C/evince.xml:716(keycap) C/evince.xml:724(keycap)
+msgid "Backspace"
+msgstr "Backspace"
+
+#: C/evince.xml:717(keycap) C/evince.xml:725(keycap)
+msgid "Return"
+msgstr "Invio"
+
+#: C/evince.xml:719(para)
+msgid "Scroll forward"
+msgstr "Scorre in avanti"
+
+#: C/evince.xml:727(para)
+msgid "Scroll backward"
+msgstr "Scorre indietro"
+
+#: C/evince.xml:732(para)
+msgid "Go a bunch of pages up"
+msgstr "Va un po' di pagine indietro"
+
+#: C/evince.xml:736(para)
+msgid "Go a bunch of pages down"
+msgstr "Va un po' di pagine in avanti"
+
+#: C/evince.xml:739(keycap)
+msgid "Home"
+msgstr "Home"
+
+#: C/evince.xml:740(para)
+msgid "Go to the first page"
+msgstr "Va alla prima pagina"
+
+#: C/evince.xml:743(keycap)
+msgid "End"
+msgstr "Fine"
+
+#: C/evince.xml:744(para)
+msgid "Go to the last page"
+msgstr "Va all'ultima pagina"
+
+#: C/evince.xml:747(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:748(para)
+msgid "Go to page by number or label"
+msgstr "Va alla pagina in base al numero o all'etichetta"
+
+#: C/evince.xml:751(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:752(para)
+msgid "Help"
+msgstr "Aiuto"
+
+#: C/evince.xml:755(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:756(para)
+msgid "Run document as presentation"
+msgstr "Avvia la presentazione"
+
+#: C/evince.xml:759(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:760(para)
+msgid "Show or hide the side pane"
+msgstr "Mostra o nasconde il riquadro laterale"
+
+#: C/evince.xml:763(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:764(para)
+msgid "Toggle fullscreen mode"
+msgstr "Commuta la modalità schermo intero"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+"Milo Casagrande <[email protected]>, 2008\n"
+"Gruppo traduzione Italiano di Ubuntu, <[email protected]>, 2006\n"
+"Luca Ferretti <[email protected]>, 2006"
diff --git a/help/ja/figures/evince_start_window.png b/help/ja/figures/evince_start_window.png
new file mode 100644
index 00000000..5bef7de4
--- /dev/null
+++ b/help/ja/figures/evince_start_window.png
Binary files differ
diff --git a/help/ja/ja.po b/help/ja/ja.po
new file mode 100644
index 00000000..92a5b2af
--- /dev/null
+++ b/help/ja/ja.po
@@ -0,0 +1,948 @@
+# Japanese help translation for evince.
+# Satoru SATOH <[email protected]>, 2007.
+#
+# TODO: 印刷の節などは実際の動作とは異なる説明となってしまっている。
+msgid ""
+msgstr ""
+"Project-Id-Version: evince/help trunk\n"
+"POT-Creation-Date: 2007-08-20 03:16+0100\n"
+"PO-Revision-Date: 2007-08-22 05:49+0900\n"
+"Last-Translator: Satoru SATOH <[email protected]>\n"
+"Language-Team: Japanese <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:146(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr "@@image: 'figures/evince_start_window.png'; "
+"md5=facb0196a444d6ffdc4fd53ea7ee632b"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Evince ドキュメントビューア マニュアル"
+
+#: C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr "Evince ドキュメントビューアで PDF や PostScript のような様々な"
+"フォーマットのドキュメントを見ることができます。"
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder) C/evince.xml:91(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder) C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "サンマイクロシステムズ"
+
+#: C/evince.xml:49(publishername) C/evince.xml:67(orgname)
+#: C/evince.xml:92(para)
+msgid "MATE Documentation Project"
+msgstr "MATE ドキュメントプロジェクト"
+
+# 参考訳: http://www.opensource.jp/fdl/fdl.ja.html
+#: C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr "この文書を、フリーソフトウェア財団発行の GNU フリー文書利用許諾契約書 (GFDL) "
+"のバージョン 1.1 かそれ以降が定める条件の下で複製、頒布、あるいは改変すること"
+"を許可します。変更不可部分、表カバーテキスト、裏カバーテキストは存在しませ"
+"ん。この利用許諾契約書 (GFDL) の複製は<ulink type=\"help\" url=\"ghelp:fdl\">"
+"このリンク</ulink> またはこのマニュアルと一緒に配布されているファイル "
+"COPYING-DOCS を参照して下さい。"
+
+#: C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr "このマニュアルは GFDL の下で配布される MATE マニュアルのコレクションの一部で"
+"す。コレクションと別にこのマニュアルを配布したい場合は、ライセンスの第六節に"
+"あるようにライセンスのコピーをマニュアルに加えれば配布できます。"
+
+#: C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr "製品やサービスを区別するために企業によって利用されている名称の多くは登録商標"
+"です。これらの名称が MATE ドキュメントで使われていて MATE ドキュメントプロ"
+"ジェクトのメンバーが商標と認識している場合、これらの名前を大文字あるいは語句"
+"の最初の文字を大文字で記述しています。"
+
+# 訳すべきか?
+#: C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+
+#: C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+
+#: C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr "ドキュメントおよび変更されているドキュメントは次の GNU フリー文書利用許諾契約"
+"書 (GFDL) の下で頒布されます: <placeholder-1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "MATE ドキュメントチーム"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Evince ドキュメントビューア マニュアル v1.0"
+
+#: C/evince.xml:89(date)
+msgid "2005-04-06"
+msgstr "2005-04-06"
+
+#: C/evince.xml:97(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "このマニュアルは Evince ドキュメントビューアの 0.2 について説明しています。"
+
+#: C/evince.xml:100(title)
+msgid "Feedback"
+msgstr "フィードバック"
+
+#: C/evince.xml:101(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr "Evince ドキュメントビューアまたはこのマニュアルの"
+"バグや提案を報告して頂く場合、"
+"<ulink url=\"ghelp:mate-feedback\" type=\"help\">MATE "
+"フィードバックページ</ulink> 内の指示に従って下さい。"
+
+#: C/evince.xml:108(primary)
+msgid "Evince Document Viewer"
+msgstr "Evince ドキュメントビューア"
+
+#: C/evince.xml:111(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:119(title)
+msgid "Introduction"
+msgstr "概要"
+
+#: C/evince.xml:120(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr "<application>Evince ドキュメントビューア</application> によって"
+"Portable Document Format (PDF) ファイルや PostScript ファイルのような"
+"様々な形式のドキュメントを見ることができます。"
+"<application>Evince ドキュメントビューア</application> はデスクトップ"
+"環境との統合を提供するために Freedesktop.org と MATE の標準に従っています。"
+
+#: C/evince.xml:127(title)
+msgid "Getting Started"
+msgstr "はじめに"
+
+#: C/evince.xml:130(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Evince ドキュメントビューアの起動"
+
+#: C/evince.xml:131(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr "PDF または PostScript ファイルのドキュメントを開くと "
+"<application>Evince ドキュメントビューア</application> が起動します。"
+
+#: C/evince.xml:132(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr "あるいは、コマンド <command>evince</command> をコマンド行で"
+"入力して <application>Evince ドキュメントビューア</application> を"
+"起動することもできます。"
+
+#: C/evince.xml:137(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Evince ドキュメントビューアのメインウィンドウ"
+
+#: C/evince.xml:138(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr "<application>Evince ドキュメントビューア</application> を"
+"起動すると、次のようなウィンドウが表示されます。"
+
+#: C/evince.xml:142(title)
+msgid "Evince Document Viewer Window"
+msgstr "Evince ドキュメントビューアのメインウィンドウ"
+
+#: C/evince.xml:149(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr "Evince ドキュメントビューアのメインウィンドウです。"
+"タイトルバーとメニューバー、ツールバーそして表示領域があります。"
+"メニューバーにはファイル、編集、表示、移動そしてヘルプメニューが"
+"含まれています。"
+
+#: C/evince.xml:155(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr "<application>Evince ドキュメントビューア</application> の"
+"ウィンドウには次の要素が含まれています:"
+
+#: C/evince.xml:159(term) C/evince.xml:207(para)
+msgid "Menubar"
+msgstr "メニューバー"
+
+#: C/evince.xml:161(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr "<application>Evince ドキュメントビューア</application> で"
+"ドキュメントについて作業するのに必要なすべてのコマンドのメニューが"
+"あります。"
+
+#: C/evince.xml:165(term)
+msgid "Toolbar"
+msgstr "ツールバー"
+
+#: C/evince.xml:167(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr "ツールバーにはメニューバーからアクセスできるコマンドのサブセットが"
+"含まれています。"
+
+#: C/evince.xml:171(term)
+msgid "Display area"
+msgstr "表示領域"
+
+#: C/evince.xml:173(para)
+msgid "The display area displays the document."
+msgstr "ドキュメントの内容を表示する領域です。"
+
+#: C/evince.xml:187(para)
+msgid "UI Component"
+msgstr "UI コンポーネント"
+
+#: C/evince.xml:189(para)
+msgid "Action"
+msgstr "アクション"
+
+#: C/evince.xml:194(para)
+msgid "Window"
+msgstr "ウィンドウ"
+
+#: C/evince.xml:198(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr "ファイルマネージャのような他のアプリケーションから "
+"<application>Evince ドキュメントビューア</application> の"
+"ウィンドウにファイルをドラッグ"
+
+#: C/evince.xml:201(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "ファイルマネージャ内でファイル名をダブルクリック"
+
+#: C/evince.xml:208(para) C/evince.xml:235(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr "<menuchoice><guimenu>ファイル</guimenu><guimenuitem>開く"
+"</guimenuitem></menuchoice> を選択"
+
+#: C/evince.xml:212(para)
+msgid "Shortcut keys"
+msgstr "ショートカット"
+
+#: C/evince.xml:213(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "<keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo> を押す"
+
+#: C/evince.xml:178(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+msgstr "<application>Evince ドキュメントビューア</application> では"
+"同じアクションをいくつかの方法で実行できます。例えばドキュメントを"
+"開くには次のようにします: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+
+# 唐突なので少し意訳
+#: C/evince.xml:219(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "メニューバーからこのマニュアルを開くこともできます。"
+
+#: C/evince.xml:227(title)
+msgid "Usage"
+msgstr "使い方"
+
+#: C/evince.xml:231(title)
+msgid "To Open A Document"
+msgstr "ドキュメントを開く"
+
+#: C/evince.xml:232(para)
+msgid "To open a document, perform the following steps:"
+msgstr "ドキュメントを開くには次のステップを実行します:"
+
+#: C/evince.xml:239(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want "
+"to open."
+msgstr "<guilabel>ドキュメントを開く</guilabel> ダイアログで"
+"開きたいファイルを選択します。"
+
+#: C/evince.xml:244(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr "<guibutton>開く</guibutton> をクリックします。"
+"<application>Evince ドキュメントビューア</application> の"
+"ウィンドウのタイトルバーにドキュメントの名前が表示されます。"
+
+#: C/evince.xml:249(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr "他のドキュメントを開くには再度 <menuchoice><guimenu>ファイル"
+"</guimenu><guimenuitem>開く</guimenuitem></menuchoice> を選択します。"
+"<application>Evince ドキュメントビューア</application> は"
+"新しいウィンドウでそれぞれのファイルを開きます。"
+
+#: C/evince.xml:252(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr "<application>Evince ドキュメントビューア</application> が"
+"認識しないファイル形式のドキュメントを開こうとすると"
+"エラーメッセージが表示されます。"
+
+#: C/evince.xml:258(title)
+msgid "To Navigate Through a Document"
+msgstr "ドキュメントをナビゲート"
+
+#: C/evince.xml:259(para)
+msgid "You can navigate through a file as follows:"
+msgstr "ファイルは次のようにしてナビゲートできます:"
+
+#: C/evince.xml:262(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr "次のページを見るには <menuchoice><guimenu>移動</guimenu>"
+"<guimenuitem>次のページ</guimenuitem></menuchoice> を選択します。"
+
+#: C/evince.xml:266(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr "前のページを見るには <menuchoice><guimenu>移動</guimenu>"
+"<guimenuitem>前のページ</guimenuitem></menuchoice> を選択します。"
+
+#: C/evince.xml:270(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr "最初のページを見るには <menuchoice><guimenu>移動</guimenu>"
+"<guimenuitem>先頭のページ</guimenuitem></menuchoice> を選択します。"
+
+#: C/evince.xml:274(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr "最後のページを見るには <menuchoice><guimenu>移動</guimenu>"
+"<guimenuitem>最後のページ</guimenuitem></menuchoice> を選択します。"
+
+#: C/evince.xml:278(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr "特定のページを見るにはツールバーのテキストボックスに"
+"ページ番号かページラベルを入力して、<keycap>Return</keycap> を押します。"
+
+#: C/evince.xml:285(title)
+msgid "To Scroll a Page"
+msgstr "ページのスクロール"
+
+#: C/evince.xml:286(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr "表示領域に現在表示されていないページの内容を表示するには"
+"次のようにします:"
+
+#: C/evince.xml:289(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "キーボードのカーソルキーかスペースキーを使います。"
+
+#: C/evince.xml:292(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+msgstr "ドキュメントのどこかをマウスの中央ボタンでクリックし、"
+"表示エリアをドラッグしてマウスを移動します。例えばページを下に"
+"スクロールするには表示領域をウィンドウの上の方にドラッグします。"
+
+#: C/evince.xml:295(para)
+msgid "Use the scrollbars on the window."
+msgstr "ウィンドウのスクロールバーを使います。"
+
+#: C/evince.xml:302(title)
+msgid "To Change the Page Size"
+msgstr "ページサイズの変更"
+
+#: C/evince.xml:303(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr "<application>Evince ドキュメントビューア</application> の"
+"表示領域の中のページの大きさを変更するには次のようにします:"
+
+#: C/evince.xml:308(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr "ページサイズを大きくするには <menuchoice><guimenu>表示</guimenu>"
+"<guimenuitem>拡大</guimenuitem></menuchoice> を選択します。"
+
+#: C/evince.xml:313(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr "ページサイズを小さくするには <menuchoice><guimenu>表示</guimenu>"
+"<guimenuitem>縮小</guimenuitem></menuchoice> を選択します。"
+
+#: C/evince.xml:318(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr "ページをリサイズして <application>Evince ドキュメントビューア"
+"</application> の表示領域と同じ幅にするには <menuchoice><guimenu>表示</guimenu>"
+"<guimenuitem>幅に合わせる</guimenuitem></menuchoice> を選択します。"
+
+#: C/evince.xml:323(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr "ページをリサイズして <application>Evince ドキュメントビューア"
+"</application> の表示領域の大きさにちょうど合うようにするには "
+"<menuchoice><guimenu>表示</guimenu><guimenuitem>全体に合わせる</guimenuitem>"
+"</menuchoice> を選択します。"
+
+#: C/evince.xml:328(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr "<application>Evince ドキュメントビューア</application> の"
+"ウィンドウをリサイズして画面と同じ幅と高さにするには "
+"<menuchoice><guimenu>表示</guimenu><guimenuitem>フルスクリーン表示"
+"</guimenuitem></menuchoice> を選択します。"
+"<application>Evince ドキュメントビューア</application> の"
+"ウィンドウをリサイズして元の大きさに戻すには <guibutton>フルスクリーンの"
+"解除</guibutton> ボタンをクリックします。"
+
+#: C/evince.xml:336(title)
+msgid "To View Pages or Document Structure"
+msgstr "ページまたはドキュメントの構造を表示"
+
+# Adobe Reader では 'bookmarks' は 'しおり' と訳されているようだ。
+#: C/evince.xml:337(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "しおりまたはページのサムネイルを表示するには次のステップを"
+"実行します:"
+
+#: C/evince.xml:341(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr "<menuchoice><guimenu>表示</guimenu><guimenuitem>サイドペイン"
+"</guimenuitem></menuchoice> または <keycap>F9</keycap> を押します。"
+
+#: C/evince.xml:346(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr "サイドペインのへッダのドロップダウンリストを使って、サイドペインに"
+"ドキュメントの構造とページのどちらを表示するか選択します。"
+
+#: C/evince.xml:351(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr "サイドペインのスクロールバーを使って、サイドペインに"
+"求めるアイテムまたはページを表示します。"
+
+#: C/evince.xml:356(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr "エントリをクリックするとドキュメントのその位置に移動できます。"
+"ページをクリックするとドキュメントのそのページに移動できます。"
+
+#: C/evince.xml:362(title)
+msgid "To View the Properties of a Document"
+msgstr "ドキュメントのプロパティを表示"
+
+#: C/evince.xml:363(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr "ドキュメントのプロパティを見るには <menuchoice><guimenu>"
+"ファイル</guimenu><guimenuitem>プロパティ</guimenuitem></menuchoice>"
+" を選択します。"
+
+#: C/evince.xml:369(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr "<guilabel>プロパティ</guilabel> ダイアログには利用できる"
+"すべての情報が表示されます。"
+
+#: C/evince.xml:375(title)
+msgid "To Print a Document"
+msgstr "ドキュメントの印刷"
+
+#: C/evince.xml:376(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr "ドキュメントを印刷するには <menuchoice><guimenu>ファイル</guimenu>"
+"<guimenuitem>印刷</guimenuitem></menuchoice> を選択します。"
+
+#: C/evince.xml:380(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr "<guimenuitem>印刷</guimenuitem> メニューアイテムを選択できない場合は"
+"そのドキュメントの作者は印刷オプションを無効にしています。印刷オプションを"
+"有効にするにはドキュメントを開く際にマスターパスワードを入力しなければ"
+"いけません。パスワードで保護されたファイルの詳細については "
+"<xref linkend=\"evince-password\"/> を参照して下さい。"
+
+#: C/evince.xml:384(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr "<guilabel>印刷</guilabel> ダイアログには次のタブセクションがあります:"
+
+#: C/evince.xml:390(link) C/evince.xml:406(title)
+msgid "Job"
+msgstr "ジョブ"
+
+#: C/evince.xml:395(link) C/evince.xml:428(title) C/evince.xml:430(guilabel)
+msgid "Printer"
+msgstr "プリンタ"
+
+#: C/evince.xml:400(link) C/evince.xml:522(title)
+msgid "Paper"
+msgstr "用紙"
+
+#: C/evince.xml:408(guilabel)
+msgid "Print range"
+msgstr "印刷範囲"
+
+#: C/evince.xml:410(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr "次のいずれかのオプションを選択して、出力するページ数を指定します。"
+
+#: C/evince.xml:413(guilabel)
+msgid "All"
+msgstr "全て"
+
+#: C/evince.xml:414(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "ドキュメントのすべてのページを印刷する場合はこのオプションを選択します。"
+
+#: C/evince.xml:417(guilabel)
+msgid "Pages From"
+msgstr "範囲"
+
+#: C/evince.xml:418(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr "ドキュメントの指定のページ範囲を印刷するにはこのオプションを選択します。"
+"ページの範囲の最初と最後をスピンボックスを使って指定します。"
+
+#: C/evince.xml:432(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr "ドキュメントを印刷するプリンタを選択するにはこのドロップダウンリストを"
+"使います。"
+
+#: C/evince.xml:434(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr "<guilabel>PDF ドキュメントの作成</guilabel> オプションは"
+"<application>Evince ドキュメントビューア</application> の"
+"このバージョンではサポートされていません。"
+
+#: C/evince.xml:440(guilabel)
+msgid "Settings"
+msgstr "設定"
+
+#: C/evince.xml:442(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "ドロップダウンリストから印刷設定を選択します。"
+
+#: C/evince.xml:444(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr "プリンタを設定するには <guibutton>設定</guibutton> をクリックします。"
+"プリンタが機能をサポートしていれば、例えば、両面印刷を有効または"
+"無効にしたり、後で印刷させたりできます。"
+
+#: C/evince.xml:448(guilabel)
+msgid "Location"
+msgstr "場所"
+
+#: C/evince.xml:450(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr "ドロップダウンリストから次の中のどれかの印刷先を選択します:"
+
+#: C/evince.xml:455(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:457(para)
+msgid "Print the document to a CUPS printer."
+msgstr "CUPS プリンタに印刷します。"
+
+#: C/evince.xml:461(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr "選択されたプリンタが CUPS プリンタである場合は <guilabel>CUPS"
+"</guilabel> だけがこのドロップダウンリストの唯一のエントリとなります。"
+
+#: C/evince.xml:468(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:470(para)
+msgid "Print the document to a printer."
+msgstr "ドキュメントを一つのプリンタで印刷します。"
+
+#: C/evince.xml:476(guilabel)
+msgid "File"
+msgstr "ファイル"
+
+#: C/evince.xml:478(para)
+msgid "Print the document to a PostScript file."
+msgstr "ドキュメントを PostScript ファイルに出力します。"
+
+#: C/evince.xml:481(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr "<guibutton>別名で保存</guibutton> をクリックして "
+"PostScript ファイルの名前と場所を指定するためのダイアログを"
+"表示させます。"
+
+#: C/evince.xml:487(guilabel)
+msgid "Custom"
+msgstr "カスタム"
+
+#: C/evince.xml:489(para)
+msgid "Use the specified command to print the document."
+msgstr "ドキュメントを印刷するために特定のコマンドを使用します。"
+
+#: C/evince.xml:492(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr "テキストボックスにコマンド名を入力します。"
+"すべてのコマンド行引数を含めます。"
+
+#: C/evince.xml:500(guilabel)
+msgid "State"
+msgstr "状態"
+
+#: C/evince.xml:502(para) C/evince.xml:508(para) C/evince.xml:514(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr "この機能はこのバージョンの "
+"<application>Evince ドキュメントビューア</application> では"
+"サポートされていません。"
+
+# ?
+#: C/evince.xml:506(guilabel)
+msgid "Type"
+msgstr "種類"
+
+#: C/evince.xml:512(guilabel)
+msgid "Comment"
+msgstr "コメント"
+
+#: C/evince.xml:524(guilabel)
+msgid "Paper size"
+msgstr "用紙サイズ"
+
+#: C/evince.xml:526(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr "ドキュメントを印刷する用紙のサイズを選択するには"
+"このドロップダウンリストを使います。"
+
+#: C/evince.xml:529(guilabel)
+msgid "Width"
+msgstr "幅"
+
+#: C/evince.xml:531(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr "用紙の幅を指定するにはこのスピンボックスを使います。"
+"サイズの単位を変更するには隣のドロップダウンリストを使います。"
+
+#: C/evince.xml:534(guilabel)
+msgid "Height"
+msgstr "高さ"
+
+#: C/evince.xml:536(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "用紙の高さを指定します。"
+
+#: C/evince.xml:539(guilabel)
+msgid "Feed orientation"
+msgstr "用紙の向き"
+
+#: C/evince.xml:541(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr "ドロップダウンリストからプリンタ内の用紙の向きを選択します。"
+
+#: C/evince.xml:544(guilabel)
+msgid "Page orientation"
+msgstr "ページの向き"
+
+#: C/evince.xml:546(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "ドロップダウンリストから用紙の向きを選択します。"
+
+#: C/evince.xml:549(guilabel)
+msgid "Layout"
+msgstr "レイアウト"
+
+#: C/evince.xml:551(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"ページレイアウトを選択するにはこのドロップダウンリストを使います。<guilabel>「プレ"
+"ビュー」</guilabel>領域には、選択した各レイアウトのプレビューが表示されます。"
+
+#: C/evince.xml:554(guilabel)
+msgid "Paper Tray"
+msgstr "用紙トレイ"
+
+#: C/evince.xml:556(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "用紙のトレイを選択するにはこのドロップダウンリストを使います。"
+
+#: C/evince.xml:566(title)
+msgid "To Copy a Document"
+msgstr "ドキュメントのコピー"
+
+#: C/evince.xml:567(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "ファイルをコピーするには次のステップを実行します:"
+
+#: C/evince.xml:571(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr "<menuchoice><guimenu>ファイル</guimenu><guimenuitem>"
+"別名で保存</guimenuitem></menuchoice> を選択します。"
+
+#: C/evince.xml:576(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr "<guilabel>別名で保存</guilabel> ダイアログの "
+"<guilabel>名前</guilabel> テキストボックスに新しいファイル名を"
+"入力します。"
+
+#: C/evince.xml:579(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr "必要ならコピーしたドキュメントの場所も指定します。デフォルトでは"
+"コピーはホームディレクトリに保存されます。"
+
+#: C/evince.xml:584(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "<guibutton>保存</guibutton> をクリックします。"
+
+#: C/evince.xml:593(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "パスワードで保護されたドキュメントを扱う"
+
+#: C/evince.xml:594(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr "ドキュメントの作成者はドキュメントを保護するのに次のパスワード"
+"レベルを使うことができます:"
+
+#: C/evince.xml:599(para)
+msgid "User password that allows others only to read the document."
+msgstr "他者にドキュメントの読み込みだけを許可するユーザーパスワード"
+
+#: C/evince.xml:603(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr "他者にドキュメントの印刷などの追加のアクションを許可するマスターパスワード"
+
+#: C/evince.xml:607(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr "パスワードで保護されたドキュメントを開こうとすると "
+"<application>Evince ドキュメントビューア</application> は"
+"セキュリティダイアログを表示します。ユーザーパスワードまたは"
+"マスターパスワードを <guilabel>パスワードの入力</guilabel> "
+"テキストボックスに入力し、<guibutton>ドキュメントを開く</guibutton> を"
+"クリックします。"
+
+#: C/evince.xml:614(title)
+msgid "To Close a Document"
+msgstr "ドキュメントを閉じる"
+
+#: C/evince.xml:615(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr "ドキュメントを閉じるには <menuchoice><guimenu>ファイル</guimenu>"
+"<guimenuitem>閉じる</guimenuitem></menuchoice> を選択します。"
+
+#: C/evince.xml:617(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr "ウィンドウが <application>Evince ドキュメントビューア</application> の"
+"最後の残りのウィンドウならアプリケーションは終了します。"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr "佐藤 暁 <[email protected]>\n"
+"日本 MATE ユーザー会 http://www.mate.gr.jp"
diff --git a/help/nl/figures/evince_start_window.png b/help/nl/figures/evince_start_window.png
new file mode 100644
index 00000000..5ba632f9
--- /dev/null
+++ b/help/nl/figures/evince_start_window.png
Binary files differ
diff --git a/help/nl/nl.po b/help/nl/nl.po
new file mode 100644
index 00000000..bbe2efde
--- /dev/null
+++ b/help/nl/nl.po
@@ -0,0 +1,929 @@
+# Nederlandse vertaling van Evince-documentatie
+#
+# Reinout van Schouwen <[email protected]>, 2006
+# Wouter Bolsterlee <[email protected]>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Evince \n"
+"POT-Creation-Date: 2006-10-20 17:42+0200\n"
+"PO-Revision-Date: 2006-10-20 17:51+0200 \n"
+"Last-Translator: Wouter Bolsterlee <[email protected]>\n"
+"Language-Team: Dutch <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:146(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Handleiding van Evince Documentviewer"
+
+#: C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr ""
+"De toepassing Evince Documentviewer stelt u in staat documenten in diverse "
+"formaten zoals Portable Document Format (PDF)en PostScript te bekijken."
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder) C/evince.xml:91(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder) C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername) C/evince.xml:67(orgname)
+#: C/evince.xml:92(para)
+msgid "MATE Documentation Project"
+msgstr "MATE Documentation Project"
+
+#: C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Toestemming wordt verleend tot het kopiëren, verspreiden en/of wijzigen van "
+"dit document onder de bepalingen van de GNU Vrije Documentatie Licentie, "
+"versie 1.1 of iedere latere versie uitgegeven door de Free Software "
+"Foundation; zonderInvariante Secties, zonder Omslagteksten voor de Voorkant "
+"en zonderOmslagteksten voor de Achterkant. Een kopie van de licentie is "
+"opgenomen via deze <ulink type=\"help\" url=\"ghelp:fdl\">referentie</ulink> "
+"of in het bestand COPYING-DOCS dat bijgesloten is bij deze handleiding."
+
+#: C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Deze handleiding is onderdeel van een verzameling MATE-handleidingen die "
+"gedistribueerd worden onder de GFDL. Als u deze handleiding los van de "
+"verzameling wilt distribueren, dan kunt u dit doen door een exemplaar van de "
+"licentie toe te voegen aan de handleiding, zoals omschreven in sectie 6 van "
+"de licentie."
+
+#: C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Vele van de namen die door bedrijven worden gebruikt om hun producten en "
+"diensten te onderscheiden zijn geclaimd als handelsmerken. Wanneer deze "
+"namen voorkomen in wat voor MATE-documentatie dan ook, en de leden van het "
+"MATE Documentation Project zijn van deze handelsmerken op de hoogte, dan "
+"zijn deze namen in hoofdletters of met een beginhoofdletter weergegeven."
+
+#: C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"DIT DOCUMENT WORDT “ALS ZODANIG” AANGEBODEN, ZONDER ENIGE VORM VAN GARANTIE, "
+"HETZIJ EXPLICIET HETZIJ IMPLICIET, MET INBEGRIP VAN, MAAR NIET BEPERKT TOT, "
+"GARANTIES DAT HET DOCUMENT OF EEN GEWIJZIGDE VERSIE VAN HET DOCUMENT VRIJ IS "
+"VAN FOUTEN, VERKOOPBAAR IS, GESCHIKT IS VOOR ENIG SPECIFIEK DOEL OF GEEN "
+"INBREUK MAAKT. HET GEHELE RISICO MET BETREKKING TOT DE KWALITEIT, "
+"ACCURAATHEID EN PRESTATIES VAN HET DOCUMENT OF EEN GEWIJZIGDE VERSIE VAN HET "
+"DOCUMENT LIGT BIJ U. ALS ENIG DOCUMENT OF GEWIJZIGDE VERSIE OP WELKE WIJZE "
+"DAN OOK FOUTIEF BLIJKT TE ZIJN, DAN NEEMT U (NIET DE OORSPRONKELIJKE "
+"SCHRIJVER, AUTEUR OF IEMAND ANDERS DIE BIJGEDRAGEN HEEFT) DE KOSTEN OP ZICH "
+"VAN AL HET VEREISTE ONDERH0UD, REPARATIE OF CORRECTIE. DEZE "
+"VRIJWARINGSVERKLARING VAN GARANTIE VORMT EEN ESSENTIEEL DEEL VAN DEZE "
+"LICENTIE. GEEN ENKEL GEBRUIK VAN ENIG DOCUMENT OF GEWIJZIGDE VERSIE VAN HET "
+"DOCUMENT IS HIERONDER TOEGESTAAN BEHALVE ONDER DEZE VERKLARING; EN "
+
+#: C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"ONDER GEEN ENKELE OMSTANDIGHEID EN ONDER GEEN ENKELE JURIDISCHE THEORIE, "
+"HETZIJ IN DELICT (WAARONDER NALATIGHEID), CONTRACT, OF OP ANDERE WIJZE, IS "
+"DE AUTEUR, OORSPRONKELIJKE SCHRIJVER, ENIGE PERSOON DIE HEEFT BIJGEDRAGEN, "
+"OF ENIGE DISTRIBUTEUR VAN HET DOCUMENT OF GEWIJZIGDE VERSIE VAN HET "
+"DOCUMENT, OF ENIGE TOELEVERANCIER VAN ZULKE PARTIJEN, AANSPRAKELIJK TE "
+"STELLEN NAAR ENIGE PERSOON VOOR WELKE DIRECTE-, INDIRECTE-, SPECIALE-, "
+"INCIDENTELE- OF GEVOLGSCHADE DAN OOK, MET INBEGRIP VAN, MAAR NIET BEPERKT "
+"TOT, SCHADE TEN GEVOLGDE VAN VERLIES VAN GOEDE WIL, ONDERBREKING VAN WERK, "
+"SLECHT FUNCTIONEREN OF FALEN VAN DE COMPUTER, OF WAT VOOR ANDERE SCHADE DAN "
+"OOK RESULTEREND UIT OF GERELATEERD MET HET GEBRUIK VAN HET DOCUMENT EN "
+"GEWIJZIGDE VERSIES VAN HET DOCUMENT, ZELFS ALS ZULK EEN PARTIJ OP DE HOOGTE "
+"WAS GEWEEST VAN DE MOGELIJKHEID TOT DERGELIJKE SCHADE."
+
+#: C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"HET DOCUMENT EN GEWIJZIGDE VERSIES VAN HET DOCUMENT WORDEN TER BESCHIKKING "
+"GESTELD ONDER DE VOORWAARDEN VAN DE GNU FREE DOCUMENTATION LICENSE MET DIEN "
+"VERSTANDE DAT: <placeholder-1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "MATE Documentation Team"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Handleiding van Evince Documentviewer versie 1.0"
+
+#: C/evince.xml:89(date)
+msgid "2005-04-06"
+msgstr "2005-04-06"
+
+#: C/evince.xml:97(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "Deze handleiding beschrijft versie 0.2 van de Evince documentviewer"
+
+#: C/evince.xml:100(title)
+msgid "Feedback"
+msgstr "Terugkoppeling"
+
+#: C/evince.xml:101(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"Om een fout te rapporteren of suggestie te doen met betrekking tot de Evince "
+"documentviewer of deze handleiding, volgt u de aanwijzingen op de <ulink url="
+"\"ghelp:mate-feedback\" type=\"help\">MATE terugkoppelingspagina</ulink>."
+
+#: C/evince.xml:108(primary)
+msgid "Evince Document Viewer"
+msgstr "Evince Documentviewer"
+
+#: C/evince.xml:111(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:119(title)
+msgid "Introduction"
+msgstr "Introductie"
+
+#: C/evince.xml:120(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+"De toepassing <application>Evince Documentviewer</application> "
+"stelt u in staat documenten in diverse formaten zoals Portable "
+"Document Format (PDF) en PostScript te bekijken. "
+"<application>Evince Documentviewer</application> volgt "
+"Freedesktop.org- en MATE-standaarden om integratie met de "
+"werkomgeving tot stand te brengen."
+
+#: C/evince.xml:127(title)
+msgid "Getting Started"
+msgstr "De eerste stappen"
+
+#: C/evince.xml:130(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Het starten van Evince Documentviewer"
+
+#: C/evince.xml:131(para)
+#, fuzzy
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+"Het venster <application>Evince Documentviewer</application> bevat de "
+"volgende elementen:"
+
+#: C/evince.xml:132(para)
+#, fuzzy
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+"Wannere u <application>Evince Documentviewer</application> start, wordt het "
+"volgende venster getoond."
+
+#: C/evince.xml:137(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Wanneer u Evince Documentviewer gestart heeft"
+
+#: C/evince.xml:138(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"Wannere u <application>Evince Documentviewer</application> start, wordt het "
+"volgende venster getoond."
+
+#: C/evince.xml:142(title)
+msgid "Evince Document Viewer Window"
+msgstr "Evince Documentviewer-venster"
+
+#: C/evince.xml:149(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+"Toont het hoofdvenster van Evince Documentviewer. Bevat een titelbalk, "
+"menubalk, werkbalk en weergavegedeelte. De menubalk bevat de menu's Bestand, "
+"Bewerken, Beeld, Ga naar en Hulp."
+
+#: C/evince.xml:155(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+"Het venster <application>Evince Documentviewer</application> bevat de "
+"volgende elementen:"
+
+#: C/evince.xml:159(term) C/evince.xml:207(para)
+msgid "Menubar"
+msgstr "Menubalk"
+
+#: C/evince.xml:161(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+
+#: C/evince.xml:165(term)
+msgid "Toolbar"
+msgstr "Werkbalk"
+
+#: C/evince.xml:167(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr ""
+
+#: C/evince.xml:171(term)
+msgid "Display area"
+msgstr "Weergavegedeelte"
+
+#: C/evince.xml:173(para)
+msgid "The display area displays the document."
+msgstr "Het weergavegedeelte geeft het document weer."
+
+#: C/evince.xml:187(para)
+msgid "UI Component"
+msgstr "UI-component"
+
+#: C/evince.xml:189(para)
+msgid "Action"
+msgstr "Actie"
+
+#: C/evince.xml:194(para)
+msgid "Window"
+msgstr "Venster"
+
+#: C/evince.xml:198(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+
+#: C/evince.xml:201(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Dubbelklik op de bestandsnaam in het bestandsbeheer"
+
+#: C/evince.xml:208(para) C/evince.xml:235(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+
+#: C/evince.xml:212(para)
+msgid "Shortcut keys"
+msgstr "Sneltoetsen"
+
+#: C/evince.xml:213(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "Druk op <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:178(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+msgstr ""
+
+#: C/evince.xml:219(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Deze handleiding documenteert de functionaliteit van de menubalk."
+
+#: C/evince.xml:227(title)
+msgid "Usage"
+msgstr "Gebruik"
+
+#: C/evince.xml:231(title)
+msgid "To Open a File"
+msgstr "Een bestand openen"
+
+#: C/evince.xml:232(para)
+msgid "To open a File, perform the following steps:"
+msgstr "Om een bestand te openen, neemt u de volgende stappen:"
+
+#: C/evince.xml:239(para)
+msgid ""
+"In the <guilabel>Load file</guilabel> dialog, select the file you want to "
+"open."
+msgstr ""
+
+#: C/evince.xml:244(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+
+#: C/evince.xml:249(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+
+#: C/evince.xml:252(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+
+#: C/evince.xml:258(title)
+msgid "To Navigate Through a Document"
+msgstr "Navigeren door een document"
+
+#: C/evince.xml:259(para)
+msgid "You can navigate through a file as follows:"
+msgstr "U kunt als volgt door een bestand navigeren:"
+
+#: C/evince.xml:262(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+
+#: C/evince.xml:266(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+
+#: C/evince.xml:270(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+
+#: C/evince.xml:274(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+
+#: C/evince.xml:278(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+
+#: C/evince.xml:285(title)
+msgid "To Scroll a Page"
+msgstr "Een pagina verschuiven"
+
+#: C/evince.xml:286(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+
+#: C/evince.xml:289(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Gebruik de pijltjestoetsen of spatiebalk op het toetsenbord."
+
+#: C/evince.xml:292(para)
+msgid ""
+"Drag the display area in the opposite direction to the direction in which "
+"you want to scroll. For example, to scroll down the page, drag the display "
+"area upwards in the window."
+msgstr ""
+
+#: C/evince.xml:295(para)
+msgid "Use the scrollbars on the window."
+msgstr "Gebruik de schuifbalken in het venster."
+
+#: C/evince.xml:302(title)
+msgid "To Change the Page Size"
+msgstr "Het veranderen van de paginagrootte"
+
+#: C/evince.xml:303(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+
+#: C/evince.xml:308(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+
+#: C/evince.xml:313(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+
+#: C/evince.xml:318(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+
+#: C/evince.xml:323(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+
+#: C/evince.xml:328(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+
+#: C/evince.xml:336(title)
+msgid "To View Pages or Document Structure"
+msgstr "Bekijken van pagina's of de documentstructuur"
+
+#: C/evince.xml:337(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "Om bladwijzers of pagina's te bekijken kunt u het volgende doen:"
+
+#: C/evince.xml:341(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"Kies <menuchoice><guimenu>Beeld</guimenu><guimenuitem>Zijbalk</guimenuitem></"
+"menuchoice> of druk op <keycap>F9</keycap>."
+
+#: C/evince.xml:346(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+"Gebruik het uitklapmenu in de zijbalk om een keuze te maken tussen de "
+"documentstructuur en de pagina's."
+
+#: C/evince.xml:351(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+"Gebruik de schuifbalken in de zijbalk om het gewenste gedeelte te tonen."
+
+#: C/evince.xml:356(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+"Klik op het juiste gedeelte van de zijbalk om naar gedeelte van het document "
+"te tonen. Door op een pagina te klikken komt u op die pagina terecht."
+
+#: C/evince.xml:362(title)
+msgid "To View the Properties of a Document"
+msgstr "Bekijken van eigenschappen van een document"
+
+#: C/evince.xml:363(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"Om de eigenschappen van een document te bekijken, kiest u "
+"<menuchoice><guimenu>Bestand</guimenu><guimenuitem>Eigenschappen</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:369(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+"Het <guilabel>Eigenschappen</guilabel>-venster toont alle beschikbare "
+"informatie."
+
+#: C/evince.xml:375(title)
+msgid "To Print a Document"
+msgstr "Een document afdrukken"
+
+#: C/evince.xml:376(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"Om een document af te drukken, kiest u <menuchoice><guimenu>Bestand</"
+"guimenu><guimenuitem>Afdrukken</guimenuitem></menuchoice>."
+
+#: C/evince.xml:380(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+
+#: C/evince.xml:384(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr ""
+"Het <guilabel>Afdrukken</guilabel>-venster bevat de onderstaande onderdelen:"
+
+#: C/evince.xml:390(link) C/evince.xml:406(title)
+msgid "Job"
+msgstr "Taak"
+
+#: C/evince.xml:395(link) C/evince.xml:428(title) C/evince.xml:430(guilabel)
+msgid "Printer"
+msgstr "Printer"
+
+#: C/evince.xml:400(link) C/evince.xml:522(title)
+msgid "Paper"
+msgstr "Papier"
+
+#: C/evince.xml:408(guilabel)
+msgid "Print range"
+msgstr "Afdrukbereik"
+
+#: C/evince.xml:410(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+"Kies een van de onderstaande opties om aan te geven hoeveel pagina's "
+"afgedrukt dienen te worden:"
+
+#: C/evince.xml:413(guilabel)
+msgid "All"
+msgstr "Alle"
+
+#: C/evince.xml:414(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Gebruik deze optie om alle pagina's af te drukken."
+
+#: C/evince.xml:417(guilabel)
+msgid "Pages From"
+msgstr "Pagina's vanaf"
+
+#: C/evince.xml:418(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"Gebruik deze optie om het geselecteerde gedeelte van de pagina's af te "
+"drukken. U kunt hierbij de eerste en de laatste pagina die afgedrukt dienen "
+"te worden opgeven."
+
+#: C/evince.xml:432(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr ""
+
+#: C/evince.xml:434(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+
+#: C/evince.xml:440(guilabel)
+msgid "Settings"
+msgstr "Instellingen"
+
+#: C/evince.xml:442(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr ""
+
+#: C/evince.xml:444(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+
+#: C/evince.xml:448(guilabel)
+msgid "Location"
+msgstr "Locatie"
+
+#: C/evince.xml:450(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr ""
+
+#: C/evince.xml:455(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:457(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Het document afdrukken naar een CUPS-printer."
+
+#: C/evince.xml:461(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+
+#: C/evince.xml:468(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:470(para)
+msgid "Print the document to a printer."
+msgstr "Het document naar een printer afdrukken."
+
+#: C/evince.xml:476(guilabel)
+msgid "File"
+msgstr "Bestand"
+
+#: C/evince.xml:478(para)
+msgid "Print the document to a PostScript file."
+msgstr "Het document naar een PostScript-bestand afdrukken."
+
+#: C/evince.xml:481(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+
+#: C/evince.xml:487(guilabel)
+msgid "Custom"
+msgstr "Aangepast"
+
+#: C/evince.xml:489(para)
+msgid "Use the specified command to print the document."
+msgstr ""
+
+#: C/evince.xml:492(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr ""
+
+#: C/evince.xml:500(guilabel)
+msgid "State"
+msgstr "Status"
+
+#: C/evince.xml:502(para) C/evince.xml:508(para) C/evince.xml:514(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+
+#: C/evince.xml:506(guilabel)
+msgid "Type"
+msgstr "Type"
+
+#: C/evince.xml:512(guilabel)
+msgid "Comment"
+msgstr "Opmerkingen"
+
+#: C/evince.xml:524(guilabel)
+msgid "Paper size"
+msgstr "Papiergrootte"
+
+#: C/evince.xml:526(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+
+#: C/evince.xml:529(guilabel)
+msgid "Width"
+msgstr "Breedte"
+
+#: C/evince.xml:531(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+
+#: C/evince.xml:534(guilabel)
+msgid "Height"
+msgstr "Hoogte"
+
+#: C/evince.xml:536(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Gebruik dit draaivakje om de hoogte van het papier aan te geven."
+
+#: C/evince.xml:539(guilabel)
+msgid "Feed orientation"
+msgstr "Invoeroriëntatie"
+
+#: C/evince.xml:541(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr ""
+
+#: C/evince.xml:544(guilabel)
+msgid "Page orientation"
+msgstr "Paginaoriëntatie"
+
+#: C/evince.xml:546(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr ""
+
+#: C/evince.xml:549(guilabel)
+msgid "Layout"
+msgstr "Layout"
+
+#: C/evince.xml:551(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+
+#: C/evince.xml:554(guilabel)
+msgid "Paper Tray"
+msgstr "Papiervak"
+
+#: C/evince.xml:556(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Gebruik deze uitklaplijst om het papiervak te selecteren."
+
+#: C/evince.xml:566(title)
+msgid "To Copy a Document"
+msgstr "Een document kopiëren"
+
+#: C/evince.xml:567(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Om een document te kopiëren neemt u de volgende stappen:"
+
+#: C/evince.xml:571(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+
+#: C/evince.xml:576(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+
+#: C/evince.xml:579(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+
+#: C/evince.xml:584(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Klik <guibutton>Opslaan</guibutton>."
+
+#: C/evince.xml:593(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Werken met wachtwoord-beschermde documenten"
+
+#: C/evince.xml:594(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr ""
+
+#: C/evince.xml:599(para)
+msgid "User password that allows others only to read the document."
+msgstr ""
+
+#: C/evince.xml:603(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+
+#: C/evince.xml:607(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+
+#: C/evince.xml:614(title)
+msgid "To Close a Document"
+msgstr "Een document sluiten"
+
+#: C/evince.xml:615(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"Om een document te sluiten, kies <menuchoice><guimenu>Bestand</"
+"guimenu><guimenuitem>Sluiten</guimenuitem></menuchoice>."
+
+#: C/evince.xml:617(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr "Reinout van Schouwen <[email protected]>"
+
+#~ msgid "User manual for the Evince Document Viewer."
+#~ msgstr "Gebruikershandleiding van de Evince Documentviewer."
+
+#~ msgid ""
+#~ "You can start <application>Evince Document Viewer</application> in the "
+#~ "following ways:"
+#~ msgstr ""
+#~ "U kunt <application>Evince Document Viewer</application> starten op de "
+#~ "volgende manieren:"
+
+#~ msgid "<guimenu>Applications</guimenu> menu"
+#~ msgstr "<guimenu>Toepassingen</guimenu>-menu"
+
+#~ msgid ""
+#~ "Choose <menuchoice><guisubmenu>Graphics</guisubmenu><guimenuitem>Evince "
+#~ "Document Viewer</guimenuitem></menuchoice>."
+#~ msgstr ""
+#~ "Kies <menuchoice><guisubmenu>Grafisch</guisubmenu><guimenuitem>Evince "
+#~ "Documentviewer</guimenuitem></menuchoice>."
+
+#~ msgid "Command line"
+#~ msgstr "Opdrachtregel"
+
+#~ msgid "Execute the following command: <command>evince</command>"
+#~ msgstr "Voer de volgende opdracht uit: <command>evince</command>"
diff --git a/help/oc/oc.po b/help/oc/oc.po
new file mode 100644
index 00000000..56cdea99
--- /dev/null
+++ b/help/oc/oc.po
@@ -0,0 +1,817 @@
+# Translation of oc.po to Occitan
+# occitan translation of evince documentation.
+# Copyright (C) 2006-2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince
+# documentation package.
+#
+# Yannig Marchegay (Kokoyaya) <[email protected]>, 2006-2008
+msgid ""
+msgstr ""
+"Project-Id-Version: oc\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-02-28 20:57+0100\n"
+"PO-Revision-Date: 2007-11-20 14:29+0100\n"
+"Last-Translator: Yannig Marchegay (Kokoyaya) <[email protected]>\n"
+"Language-Team: Occitan <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: ../C/evince.xml:146(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: ../C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr ""
+
+#: ../C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr ""
+
+#: ../C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: ../C/evince.xml:34(holder) ../C/evince.xml:91(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: ../C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: ../C/evince.xml:38(holder) ../C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: ../C/evince.xml:49(publishername) ../C/evince.xml:67(orgname)
+#: ../C/evince.xml:92(para)
+msgid "MATE Documentation Project"
+msgstr "Projècte de documentacion de MATE"
+
+#: ../C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+
+#: ../C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+
+#: ../C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+
+#: ../C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+
+#: ../C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+
+#: ../C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+
+#: ../C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: ../C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "Còla de documentacion de MATE"
+
+#: ../C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: ../C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: ../C/evince.xml:68(email)
+
+#: ../C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr ""
+
+#: ../C/evince.xml:89(date)
+msgid "2005-04-06"
+msgstr "06/04/2005"
+
+#: ../C/evince.xml:97(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr ""
+
+#: ../C/evince.xml:100(title)
+msgid "Feedback"
+msgstr ""
+
+#: ../C/evince.xml:101(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+
+#: ../C/evince.xml:108(primary)
+msgid "Evince Document Viewer"
+msgstr ""
+
+#: ../C/evince.xml:111(primary)
+msgid "evince"
+msgstr "evince"
+
+#: ../C/evince.xml:119(title)
+msgid "Introduction"
+msgstr "Introduccion"
+
+#: ../C/evince.xml:120(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+
+#: ../C/evince.xml:127(title)
+msgid "Getting Started"
+msgstr "Per començar"
+
+#: ../C/evince.xml:130(title)
+msgid "To Start Evince Document Viewer"
+msgstr ""
+
+#: ../C/evince.xml:131(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+
+#: ../C/evince.xml:132(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+
+#: ../C/evince.xml:137(title)
+msgid "When You Start Evince Document Viewer"
+msgstr ""
+
+#: ../C/evince.xml:138(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+
+#: ../C/evince.xml:142(title)
+msgid "Evince Document Viewer Window"
+msgstr ""
+
+#: ../C/evince.xml:149(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+
+#: ../C/evince.xml:155(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+
+#: ../C/evince.xml:159(term) ../C/evince.xml:207(para)
+msgid "Menubar"
+msgstr "Barra de menuts"
+
+#: ../C/evince.xml:161(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+
+#: ../C/evince.xml:165(term)
+msgid "Toolbar"
+msgstr "Barra d'espleches"
+
+#: ../C/evince.xml:167(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr ""
+
+#: ../C/evince.xml:171(term)
+msgid "Display area"
+msgstr ""
+
+#: ../C/evince.xml:173(para)
+msgid "The display area displays the document."
+msgstr ""
+
+#: ../C/evince.xml:187(para)
+msgid "UI Component"
+msgstr ""
+
+#: ../C/evince.xml:189(para)
+msgid "Action"
+msgstr "Accion"
+
+#: ../C/evince.xml:194(para)
+msgid "Window"
+msgstr "Fenèstra"
+
+#: ../C/evince.xml:198(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+
+#: ../C/evince.xml:201(para)
+msgid "Double-click on the file name in the file manager"
+msgstr ""
+
+#: ../C/evince.xml:208(para) ../C/evince.xml:235(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:212(para)
+msgid "Shortcut keys"
+msgstr ""
+
+#: ../C/evince.xml:213(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr ""
+
+#: ../C/evince.xml:178(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+msgstr ""
+
+#: ../C/evince.xml:219(para)
+msgid "This manual documents functionality from the menubar."
+msgstr ""
+
+#: ../C/evince.xml:227(title)
+msgid "Usage"
+msgstr "Utilizacion"
+
+#: ../C/evince.xml:231(title)
+msgid "To Open A Document"
+msgstr "Dobrir un document"
+
+#: ../C/evince.xml:232(para)
+msgid "To open a document, perform the following steps:"
+msgstr ""
+
+#: ../C/evince.xml:239(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want "
+"to open."
+msgstr ""
+
+#: ../C/evince.xml:244(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+
+#: ../C/evince.xml:249(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+
+#: ../C/evince.xml:252(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+
+#: ../C/evince.xml:258(title)
+msgid "To Navigate Through a Document"
+msgstr ""
+
+#: ../C/evince.xml:259(para)
+msgid "You can navigate through a file as follows:"
+msgstr ""
+
+#: ../C/evince.xml:262(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:266(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:270(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:274(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:278(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+
+#: ../C/evince.xml:285(title)
+msgid "To Scroll a Page"
+msgstr ""
+
+#: ../C/evince.xml:286(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+
+#: ../C/evince.xml:289(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr ""
+
+#: ../C/evince.xml:292(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+msgstr ""
+
+#: ../C/evince.xml:295(para)
+msgid "Use the scrollbars on the window."
+msgstr ""
+
+#: ../C/evince.xml:302(title)
+msgid "To Change the Page Size"
+msgstr ""
+
+#: ../C/evince.xml:303(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+
+#: ../C/evince.xml:308(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:313(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:318(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:323(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:328(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+
+#: ../C/evince.xml:336(title)
+msgid "To View Pages or Document Structure"
+msgstr ""
+
+#: ../C/evince.xml:337(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr ""
+
+#: ../C/evince.xml:341(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+
+#: ../C/evince.xml:346(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+
+#: ../C/evince.xml:351(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+
+#: ../C/evince.xml:356(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+
+#: ../C/evince.xml:362(title)
+msgid "To View the Properties of a Document"
+msgstr ""
+
+#: ../C/evince.xml:363(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:369(para)
+msgid "The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+
+#: ../C/evince.xml:375(title)
+msgid "To Print a Document"
+msgstr "Estampar un document"
+
+#: ../C/evince.xml:376(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:380(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+
+#: ../C/evince.xml:384(para)
+msgid "The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr ""
+
+#: ../C/evince.xml:390(link) ../C/evince.xml:406(title)
+msgid "Job"
+msgstr ""
+
+#: ../C/evince.xml:395(link) ../C/evince.xml:428(title)
+#: ../C/evince.xml:430(guilabel)
+msgid "Printer"
+msgstr "Estampaira"
+
+#: ../C/evince.xml:400(link) ../C/evince.xml:522(title)
+msgid "Paper"
+msgstr "Papièr"
+
+#: ../C/evince.xml:408(guilabel)
+msgid "Print range"
+msgstr "Airal d'estampatge"
+
+#: ../C/evince.xml:410(para)
+msgid "Select one of the following options to determine how many pages to print:"
+msgstr ""
+
+#: ../C/evince.xml:413(guilabel)
+msgid "All"
+msgstr "Totes"
+
+#: ../C/evince.xml:414(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr ""
+
+#: ../C/evince.xml:417(guilabel)
+msgid "Pages From"
+msgstr ""
+
+#: ../C/evince.xml:418(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+
+#: ../C/evince.xml:432(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr ""
+
+#: ../C/evince.xml:434(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+
+#: ../C/evince.xml:440(guilabel)
+msgid "Settings"
+msgstr "Paramètres"
+
+#: ../C/evince.xml:442(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr ""
+
+#: ../C/evince.xml:444(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+
+#: ../C/evince.xml:448(guilabel)
+msgid "Location"
+msgstr "Emplaçament"
+
+#: ../C/evince.xml:450(para)
+msgid "Use this drop-down list to select one of the following print destinations:"
+msgstr ""
+
+#: ../C/evince.xml:455(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: ../C/evince.xml:457(para)
+msgid "Print the document to a CUPS printer."
+msgstr ""
+
+#: ../C/evince.xml:461(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+
+#: ../C/evince.xml:468(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: ../C/evince.xml:470(para)
+msgid "Print the document to a printer."
+msgstr ""
+
+#: ../C/evince.xml:476(guilabel)
+msgid "File"
+msgstr "Fichièr"
+
+#: ../C/evince.xml:478(para)
+msgid "Print the document to a PostScript file."
+msgstr ""
+
+#: ../C/evince.xml:481(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+
+#: ../C/evince.xml:487(guilabel)
+msgid "Custom"
+msgstr "Personalisat"
+
+#: ../C/evince.xml:489(para)
+msgid "Use the specified command to print the document."
+msgstr ""
+
+#: ../C/evince.xml:492(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr ""
+
+#: ../C/evince.xml:500(guilabel)
+msgid "State"
+msgstr "Estat"
+
+#: ../C/evince.xml:502(para) ../C/evince.xml:508(para)
+#: ../C/evince.xml:514(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+
+#: ../C/evince.xml:506(guilabel)
+msgid "Type"
+msgstr "Tipe"
+
+#: ../C/evince.xml:512(guilabel)
+msgid "Comment"
+msgstr "Comentari"
+
+#: ../C/evince.xml:524(guilabel)
+msgid "Paper size"
+msgstr "Talha de papièr"
+
+#: ../C/evince.xml:526(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+
+#: ../C/evince.xml:529(guilabel)
+msgid "Width"
+msgstr "Largor"
+
+#: ../C/evince.xml:531(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+
+#: ../C/evince.xml:534(guilabel)
+msgid "Height"
+msgstr "Nautor"
+
+#: ../C/evince.xml:536(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr ""
+
+#: ../C/evince.xml:539(guilabel)
+msgid "Feed orientation"
+msgstr ""
+
+#: ../C/evince.xml:541(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr ""
+
+#: ../C/evince.xml:544(guilabel)
+msgid "Page orientation"
+msgstr ""
+
+#: ../C/evince.xml:546(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr ""
+
+#: ../C/evince.xml:549(guilabel)
+msgid "Layout"
+msgstr "Presentacion"
+
+#: ../C/evince.xml:551(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+
+#: ../C/evince.xml:554(guilabel)
+msgid "Paper Tray"
+msgstr ""
+
+#: ../C/evince.xml:556(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr ""
+
+#: ../C/evince.xml:566(title)
+msgid "To Copy a Document"
+msgstr ""
+
+#: ../C/evince.xml:567(para)
+msgid "To copy a file, perform the following steps:"
+msgstr ""
+
+#: ../C/evince.xml:571(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:576(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+
+#: ../C/evince.xml:579(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+
+#: ../C/evince.xml:584(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr ""
+
+#: ../C/evince.xml:593(title)
+msgid "To Work With Password-Protected Documents"
+msgstr ""
+
+#: ../C/evince.xml:594(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr ""
+
+#: ../C/evince.xml:599(para)
+msgid "User password that allows others only to read the document."
+msgstr ""
+
+#: ../C/evince.xml:603(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+
+#: ../C/evince.xml:607(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+
+#: ../C/evince.xml:614(title)
+msgid "To Close a Document"
+msgstr "Tampar un document"
+
+#: ../C/evince.xml:615(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:617(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: ../C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr "Yannig Marchegay (Kokoyaya) <[email protected]>"
+
diff --git a/help/pt_BR/pt_BR.po b/help/pt_BR/pt_BR.po
new file mode 100644
index 00000000..2be2ec72
--- /dev/null
+++ b/help/pt_BR/pt_BR.po
@@ -0,0 +1,1272 @@
+# Brazilian Portuguese translation of evince.
+# This file is distributed under the same license as the Evince package.
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# Hugo Dória <[email protected]>, 2007.
+# Pedro de Medeiros <[email protected]>, 2007.
+# Daniel S. Koda <[email protected]>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince 2.24\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-11-07 09:19+0100\n"
+"PO-Revision-Date: 2008-12-04 19:20-0300\n"
+"Last-Translator: Daniel S. Koda <[email protected]>\n"
+"Language-Team: Portuguese <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Poedit-Country: BRAZIL\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:155(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Manual do Visualizador de Documentos Evince"
+
+#: C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr ""
+"O Visualizador de Documentos Evince permite que você veja documentos de "
+"vários formatos como, por exemplo, arquivos PDF (Portable Document Format) e "
+"PostScript"
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder) C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder) C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername) C/evince.xml:67(orgname)
+#: C/evince.xml:93(para) C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "Projeto de Documentação do MATE"
+
+#: C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Permissão concedida para copiar, distribuir e/ou modificar este documento "
+"sob os termos da Licença de Documentação Livre GNU (GNU Free Documentation "
+"License), Versão 1.1 ou qualquer versão mais recente publicada pela Free "
+"Software Foundation; sem Seções Invariantes, Textos de Capa Frontal, e sem "
+"Textos de Contracapa. Você pode encontrar uma cópia da licença GFDL no link "
+"ou no arquivo COPYING-DOCS distribuído com este manual."
+
+#: C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Este manual é parte da coleção de manuais do MATE distribuídos sob a GFDL. "
+"Se você quiser distribuí-lo separadamente da coleção, você pode fazê-lo "
+"adicionando ao manual uma cópia da licença, como descrito na seção 6 da "
+"licença."
+
+#: C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Muitos dos nomes usados por empresas para distinguir seus produtos e "
+"serviços são reivindicados como marcas registradas. Onde esses nomes "
+"aparecem em qualquer documentação do MATE e os membros do Projeto de "
+"Documentação do MATE estiverem cientes dessas marcas registradas, os nomes "
+"aparecerão impressos em letras maiúsculas ou com iniciais em maiúsculas."
+
+#: C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"O DOCUMENTO É FORNECIDO NA BASE \"COMO ESTÁ\", SEM GARANTIAS DE QUALQUER "
+"TIPO, TANTO EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO LIMITADO A, GARANTIAS "
+"DE QUE O DOCUMENTO OU VERSÃO MODIFICADA DO DOCUMENTO SEJA COMERCIALIZÁVEL, "
+"LIVRE DE DEFEITOS, PRÓPRIO PARA UM PROPÓSITO ESPECÍFICO OU SEM INFRAÇÕES. "
+"TODO O RISCO A RESPEITO DA QUALIDADE, EXATIDÃO, E DESEMPENHO DO DOCUMENTO OU "
+"VERSÕES MODIFICADAS DO DOCUMENTO É DE SUA RESPONSABILIDADE. SE ALGUM "
+"DOCUMENTO OU VERSÃO MODIFICADA SE PROVAR DEFEITUOSO EM QUALQUER ASPECTO, "
+"VOCÊ (NÃO O ESCRITOR INICIAL, AUTOR OU QUALQUER CONTRIBUIDOR) ASSUME O CUSTO "
+"DE QUALQUER SERVIÇO NECESSÁRIO, REPARO OU CORREÇÃO. ESSA RENÚNCIA DE "
+"GARANTIAS CONSTITUI UMA PARTE ESSENCIAL DESTA LICENÇA. NENHUM USO DESTE "
+"DOCUMENTO OU VERSÃO MODIFICADA DESTE DOCUMENTO É AUTORIZADO SE NÃO FOR SOB "
+"ESSA RENÚNCIA; E"
+
+#: C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"SOB NENHUMA CIRCUNSTÂNCIA E SOB NENHUMA TEORIA LEGAL, TANTO EM DANO "
+"(INCLUINDO NEGLIGÊNCIA), CONTRATO, OU OUTROS, DEVEM O AUTOR, ESCRITOR "
+"INICIAL, QUALQUER CONTRIBUIDOR, OU QUALQUER DISTRIBUIDOR DO DOCUMENTO OU "
+"VERSÃO MODIFICADA DO DOCUMENTO, OU QUALQUER FORNECEDOR DE ALGUMA DESSAS "
+"PARTES, SER CONSIDERADOS RESPONSÁVEIS A QUALQUER PESSOA POR QUALQUER DANO, "
+"SEJA DIRETO, INDIRETO, ESPECIAL, ACIDENTAL OU CONSEQÜENCIAL DE QUALQUER "
+"INDIVÍDUO, INCLUINDO, MAS NÃO LIMITADO A, DANOS POR PERDA DE BOA VONTADE, "
+"TRABALHO PARADO, FALHA OU MAU FUNCIONAMENTO DO COMPUTADOR, OU QUALQUER E "
+"TODOS OS OUTROS DANOS OU PERDAS RESULTANTES OU RELACIONADOS AO USO DO "
+"DOCUMENTO E VERSÕES MODIFICADAS, MESMO QUE TAL PARTE TENHA SIDO INFORMADA DA "
+"POSSIBILIDADE DE TAIS DANOS."
+
+#: C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"O DOCUMENTO E VERSÕES MODIFICADAS DO DOCUMENTO SÃO FORNECIDOS SOB OS TERMOS "
+"DA GNU FREE DOCUMENTATION LICENSE COM O ENTENDIMENTO ADICIONAL DE QUE: "
+"<placeholder-1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "Time de Documentação do MATE"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Manual do Visualizador de Documentos Evince V1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "2008-04-05"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Manual do Visualizador de Documentos Evince V1.0"
+
+#: C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "2005-04-06"
+
+#: C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "Este manual descreve a versão 0.2 do Visualizador de Documentos Evince"
+
+#: C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "Feedback"
+
+#: C/evince.xml:110(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"Para relatar um erro ou dar uma sugestão a respeito do Visualizador de "
+"Documentos Evince ou deste manual, siga as instruções contidas na <ulink url="
+"\"ghelp:mate-feedback\" type=\"help\">Página de Feedback do MATE</ulink>."
+
+#: C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Visualizador de Documentos Evince"
+
+#: C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "Introdução"
+
+#: C/evince.xml:129(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+"O <application>Visualizador de Documentos Evince</application> permite que "
+"você veja documentos de vários formatos como, por exemplo, arquivos PDF "
+"(Portable Document Format) e PostScript. O <application>Visualizador de "
+"Documentos Evince</application> segue os padrões do MATE e Freedesktop.org "
+"para realizar a integração com o ambiente de trabalho."
+
+#: C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "Início"
+
+#: C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Para iniciar o Visualizador de Documentos Evince"
+
+#: C/evince.xml:140(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+"<application>O Visualizador de Documentos Evince</application> é iniciado "
+"quando você abre algum documento no formato PDF ou PostScript, por exemplo."
+
+#: C/evince.xml:141(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+"Outra maneira de iniciar o <application>Visualizador de Documentos Evince</"
+"application> é através da linha de comando, com o comando: <command>evince</"
+"command>."
+
+#: C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Ao iniciar o Visualizador de Documentos Evince"
+
+#: C/evince.xml:147(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"Quando você inicia o <application>Visualizador de Documentos Evince</"
+"application>, a seguinte janela é exibida:"
+
+#: C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Janela do Visualizador de Documentos Evince"
+
+#: C/evince.xml:158(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+"Mostra a janela principal do Visualizador de Documentos Evince. Contém "
+"barras de título, de menu, de ferramentas e área de exibição. A barra de "
+"menu contém os menus Arquivo, Editar, Ver, Ir e Ajuda."
+
+#: C/evince.xml:164(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+"A janela do <application>Visualizador de Documentos Evince</application> "
+"contém os seguintes elementos:"
+
+#: C/evince.xml:168(term) C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "Barra de menu"
+
+#: C/evince.xml:170(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+"Os menus da barra de menu contém todos os comandos que você precisa para "
+"trabalhar com documentos no <application>Visualizador de Documentos Evince</"
+"application>."
+
+#: C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "Barra de ferramentas"
+
+#: C/evince.xml:176(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr ""
+"A barra de ferramentas contém um subconjunto de comandos que você pode "
+"acessar a partir da barra de menu."
+
+#: C/evince.xml:180(term)
+msgid "Display area"
+msgstr "Área de exibição"
+
+#: C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "A área de exibição exibe o conteúdo do documento."
+
+#: C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "Componente da Interface"
+
+#: C/evince.xml:198(para) C/evince.xml:646(para)
+msgid "Action"
+msgstr "Ação"
+
+#: C/evince.xml:203(para)
+msgid "Window"
+msgstr "Janela"
+
+#: C/evince.xml:207(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+"Arraste um arquivo para a janela do <application>Visualizador de Documentos "
+"Evince</application> a partir de um outro aplicativo, como um gerenciador de "
+"arquivos, por exemplo."
+
+#: C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Dê um duplo clique no nome do arquivo no gerenciador de arquivos"
+
+#: C/evince.xml:217(para) C/evince.xml:244(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+"Escolha <menuchoice><guimenu>Arquivo</guimenu><guimenuitem>Abrir</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "Teclas de atalho"
+
+#: C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr ""
+"Pressione <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:187(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+msgstr ""
+"No <application>Visualizador de Documentos Evince</application> você pode "
+"realizar tarefas de diversas formas. Por exemplo, você pode abrir um "
+"documento das seguintes maneiras: <informaltable frame=\"all\"><tgroup cols="
+"\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*"
+"\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/"
+"><placeholder-2/></tgroup></informaltable>"
+
+#: C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Este manual documenta as funcionalidades da barra de menu."
+
+#: C/evince.xml:236(title)
+msgid "Usage"
+msgstr "Uso"
+
+#: C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "Para abrir um documento"
+
+#: C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Para abrir um documento, execute os seguintes passos:"
+
+#: C/evince.xml:248(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want "
+"to open."
+msgstr ""
+"Na caixa de diálogo <guilabel>Abrir documento</guilabel>, selecione o "
+"arquivo que você deseja abrir."
+
+#: C/evince.xml:253(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+"Clique em <guibutton>Abrir</guibutton>. O <application>Visualizador de "
+"Documentos Evince</application> exibe o nome do documento na barra de título "
+"da janela."
+
+#: C/evince.xml:258(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+"Para abrir um outro documento, escolha novamente "
+"<menuchoice><guimenu>Arquivo</guimenu><guimenuitem>Abrir</guimenuitem></"
+"menuchoice>. O <application>Visualizador de Documentos Evince</application> "
+"abre cada arquivo em uma nova janela."
+
+#: C/evince.xml:261(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+"Se você tentar abrir um documento no formato que o <application>Visualizador "
+"de Documentos Evince</application> não reconhece, uma mensagem de erro será "
+"exibida."
+
+#: C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "Para navegar por um documento"
+
+#: C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Você pode navegar por um arquivo da seguinte maneira:"
+
+#: C/evince.xml:271(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+"Para ver a próxima página, escolha <menuchoice><guimenu>Ir</"
+"guimenu><guimenuitem>Próxima página</guimenuitem></menuchoice>."
+
+#: C/evince.xml:275(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+"Para ver a página anterior, escolha <menuchoice><guimenu>Ir</"
+"guimenu><guimenuitem>Página anterior</guimenuitem></menuchoice>."
+
+#: C/evince.xml:279(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+"Para ver a primeira página do documento, escolha <menuchoice><guimenu>Ir</"
+"guimenu><guimenuitem>Primeira página</guimenuitem></menuchoice>."
+
+#: C/evince.xml:283(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+"Para ver a última página do documento, escolha <menuchoice><guimenu>Ir</"
+"guimenu><guimenuitem>Última página</guimenuitem></menuchoice>."
+
+#: C/evince.xml:287(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+"Para ver uma página específica digite o número da página na caixa de texto "
+"localizada na barra de ferramentas e pressione <keycap>Enter</keycap>."
+
+#: C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "Para rolar uma página"
+
+#: C/evince.xml:295(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+"Para ver o conteúdo da página que ainda não está sendo exibido na área de "
+"exibição, use os seguintes métodos:"
+
+#: C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Use as setas ou a barra de espaço no teclado."
+
+#: C/evince.xml:301(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+msgstr ""
+"Arraste a área de exibição clicando com o botão do meio do mouse em algum "
+"lugar do documento e então movendo o mouse. Por exemplo, para rolar a página "
+"para baixo, arraste a área de exibição para cima na janela."
+
+#: C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "Use a barra de rolagem na janela."
+
+#: C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "Para alterar o tamanho da página"
+
+#: C/evince.xml:312(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+"Você pode usar os seguintes métodos para redimensionar uma página na área de "
+"exibição do <application>Visualizador de Documentos Evince</application>:"
+
+#: C/evince.xml:317(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+"Para aumentar o tamanho da página, escolha <menuchoice><guimenu>Ver</"
+"guimenu><guimenuitem>Ampliar</guimenuitem></menuchoice>."
+
+#: C/evince.xml:322(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+"Para diminuir o tamanho da página, escolha <menuchoice><guimenu>Ver</"
+"guimenu><guimenuitem>Reduzir</guimenuitem></menuchoice>."
+
+#: C/evince.xml:327(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+"Para redimensionar a página para que ela tenha a mesma largura que a área de "
+"exibição do <application>Visualizador de Documentos Evince</application>, "
+"escolha <menuchoice><guimenu>Ver</guimenu><guimenuitem>Largura da página</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:332(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+"Para redimensionar a página para que ela se ajuste a área de exibição do "
+"<application>Visualizador de Documentos Evince</application>, escolha "
+"<menuchoice><guimenu>Ver</guimenu><guimenuitem>Melhor ajuste</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:337(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+"Para redimensionar a janela do <application>Visualizador de Documentos "
+"Evince</application> para que ela tenha a mesma largura e altura da tela, "
+"escolha <menuchoice><guimenu>Ver</guimenu><guimenuitem>Tela cheia</"
+"guimenuitem></menuchoice>. Para redimensionar a janela do "
+"<application>Evince Document Viewer</application> ao seu tamanho original, "
+"clique no botão <guibutton>Sair da tela cheia</guibutton>."
+
+#: C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr "Para ver páginas ou a estrutura do documento"
+
+#: C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "Para ver os marcadores ou as páginas, execute os seguintes passos:"
+
+#: C/evince.xml:350(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"Escolha <menuchoice><guimenu>Ver</guimenu><guimenuitem>Barra lateral</"
+"guimenuitem></menuchoice> ou pressione a tecla <keycap>F9</keycap>."
+
+#: C/evince.xml:355(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+"Use a lista suspensa no cabeçalho do painel lateral para selecionar se "
+"deseja exibir a estrutura do documento ou as páginas no painel lateral."
+
+#: C/evince.xml:360(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+"Use as barras de rolagem do painel lateral para exibir o item ou a página "
+"solicitada no painel lateral."
+
+#: C/evince.xml:365(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+"Clique em uma entrada para navegar até a localização solicitada no "
+"documento. Clique em uma página para navegar até ela no documento."
+
+#: C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "Para ver as propriedades de um documento"
+
+#: C/evince.xml:372(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"Para ver as propriedades de um documento, escolha "
+"<menuchoice><guimenu>Arquivo</guimenu><guimenuitem>Propriedades</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:378(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+"A caixa de diálogo <guilabel>Propriedades</guilabel> exibe todas as "
+"informações disponíveis"
+
+#: C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "Para imprimir um documento"
+
+#: C/evince.xml:385(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"Para imprimir um documento, escolha <menuchoice><guimenu>Arquivo</"
+"guimenu><guimenuitem>Imprimir</guimenuitem></menuchoice>."
+
+#: C/evince.xml:389(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+"Se você não pode escolher o item <guimenuitem>Imprimir</guimenuitem> no "
+"menu, então o autor do documento desabilitou esta opção de impressão para "
+"este documento. Para habilitar a opção de impressão, você deve digitar a "
+"senha mestra quando abrir o documento. Veja <xref linkend=\"evince-password"
+"\"/> para mais informações sobre arquivos protegidos por senha."
+
+#: C/evince.xml:393(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr ""
+"O diálogo <guilabel>Imprimir</guilabel> tem as seguintes seções em abas:"
+
+#: C/evince.xml:399(link) C/evince.xml:415(title)
+msgid "Job"
+msgstr "Trabalho"
+
+#: C/evince.xml:404(link) C/evince.xml:437(title) C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr "Impressora"
+
+#: C/evince.xml:409(link) C/evince.xml:531(title)
+msgid "Paper"
+msgstr "Papel"
+
+#: C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "Imprimir intervalo"
+
+#: C/evince.xml:419(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+"Selecione uma das opções a seguir para determinar quantas páginas serão "
+"impressas:"
+
+#: C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "Todas"
+
+#: C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Selecione esta opção para imprimir todas as páginas do documento."
+
+#: C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "Páginas de"
+
+#: C/evince.xml:427(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"Selecione esta opção para imprimir um intervalo de páginas no documento. Use "
+"os seletores numéricos para especificar a primeira e a última página do "
+"intervalo."
+
+#: C/evince.xml:441(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr ""
+"Use esta lista suspensa para selecionar a impressora com a qual deseja "
+"imprimir o documento."
+
+#: C/evince.xml:443(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+"A opção <guilabel>Criar um documento PDF</guilabel> não tem suporte nesta "
+"versão do <application>Visualizador de Documentos Evince</application>."
+
+#: C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "Configurações"
+
+#: C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr ""
+"Use esta lista suspensa para selecionar as configurações da impressora."
+
+#: C/evince.xml:453(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+"Para configurar a impressora, clique em <guibutton>Configurar</guibutton>. "
+"Por exemplo, você pode habilitar ou desabilitar a impressão duplex, se "
+"existir suporte para esta funcionalidade na impressora."
+
+#: C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "Localização"
+
+#: C/evince.xml:459(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr "Use esta lista para selecionar um dos seguintes destinos de impressão:"
+
+#: C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Imprimir o documento em uma impressora do CUPS."
+
+#: C/evince.xml:470(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+"Se a impressora selecionada é uma impressora do tipo CUPS, então "
+"<guilabel>CUPS</guilabel> será a única entrada na lista suspensa."
+
+#: C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "Imprimir o documento em uma impressora."
+
+#: C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "Arquivo"
+
+#: C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "Imprimir o documento em um arquivo PostScript."
+
+#: C/evince.xml:490(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+"Clique em <guibutton>Salvar como</guibutton> para exibir um diálogo onde "
+"você poderá especificar o nome e a localização do arquivo PostScript."
+
+#: C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "Personalizado"
+
+#: C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "Usar o comando especificado para imprimir o documento."
+
+#: C/evince.xml:501(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr ""
+"Digite o nome do comando na caixa de texto. Inclua todos os argumentos da "
+"linha de comando."
+
+#: C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "Estado"
+
+#: C/evince.xml:511(para) C/evince.xml:517(para) C/evince.xml:523(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+"Esta funcionalidade não tem suporte nesta versão do "
+"<application>Visualizador de Documentos Evince</application>."
+
+#: C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "Tipo"
+
+#: C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "Comentário"
+
+#: C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "Tamanho do papel"
+
+#: C/evince.xml:535(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+"Use esta lista para selecionar o tamanho do papel no qual deseja imprimir o "
+"documento."
+
+#: C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "Largura"
+
+#: C/evince.xml:540(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+"Use este seletor numérico para especificar a largura do papel. Use a lista "
+"suspensa adjacente para alterar a unidade de medida."
+
+#: C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "Altura"
+
+#: C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Use este seletor numérico para especificar a altura do papel."
+
+#: C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "Orientação da alimentação"
+
+#: C/evince.xml:550(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr ""
+"Use esta lista suspensa para selecionar a orientação do papel na impressora."
+
+#: C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr "Orientação da página"
+
+#: C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "Use esta lista suspensa para selecionar a orientação da página."
+
+#: C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr "Layout"
+
+#: C/evince.xml:560(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"Use esta lista suspensa para selecionar o layout da página. Uma visualização "
+"de cada layout que você escolheu é exibida na área <guilabel>Visualização</"
+"guilabel>."
+
+#: C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr "Bandeja do papel"
+
+#: C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Use esta lista suspensa para selecionar a bandeja de papel."
+
+#: C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "Para copiar um documento"
+
+#: C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Para copiar um arquivo, execute os seguintes passos:"
+
+#: C/evince.xml:580(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Escolha <menuchoice><guimenu>Arquivo</guimenu><guimenuitem>Salvar uma cópia</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:585(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+"Digite um novo nome de arquivo na caixa de texto <guilabel>Nome de arquivo</"
+"guilabel> no diálogo <guilabel>Salvar uma cópia</guilabel>."
+
+#: C/evince.xml:588(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+"Se necessário, especifique a localização do documento copiado. Por padrão, "
+"as cópias são salvas no seu diretório pessoal."
+
+#: C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Clique em <guibutton>Salvar</guibutton>."
+
+#: C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Para funcionar com documentos protegidos por senha"
+
+#: C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr ""
+"Um autor pode usar os seguintes níveis de senha para proteger um documento:"
+
+#: C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr ""
+"Senha do usuário que permite que as outras pessoas apenas possam ler o "
+"documento."
+
+#: C/evince.xml:612(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+"Senha mestra que permite que outras pessoas possam realizar tarefas "
+"adicionais como, por exemplo, imprimir o documento."
+
+#: C/evince.xml:616(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+"Quando você tenta abrir um documento que está protegido por senha, o "
+"<application>Visualizador de Documentos Evince</application> exibe um "
+"diálogo de segurança. Digite a senha de usuário ou a senha mestra na caixa "
+"de texto <guilabel>Digite a senha do documento</guilabel> e então clique em "
+"<guibutton>Abrir documento</guibutton>."
+
+#: C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "Para fechar um documento"
+
+#: C/evince.xml:624(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"Para fechar um documento, escolha <menuchoice><guimenu>Arquivo</"
+"guimenu><guimenuitem>Fechar</guimenuitem></menuchoice>."
+
+#: C/evince.xml:626(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+"Se a janela for a última aberta do <application>Visualizador de Documentos "
+"Evince</application>, o aplicativo fechará."
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Atalhos"
+
+#: C/evince.xml:636(para)
+msgid ""
+"Below is a list of all shortcuts present in <application>Evince Document "
+"Viewer</application>:"
+msgstr ""
+"Abaixo está uma lista de todos os atalhos presentes no "
+"<application>Visualizador de Documentos Evince</application>:"
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Atalho"
+
+#: C/evince.xml:651(keycap) C/evince.xml:655(keycap) C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap) C/evince.xml:667(keycap) C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap) C/evince.xml:682(keycap) C/evince.xml:701(keycap)
+#: C/evince.xml:747(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Abre um documento existente"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Salva uma cópia do documento atual"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "Imprime documento"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Fecha janela"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Copia seleção"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Seleciona tudo"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (barra)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Localiza uma palavra ou frase no documento"
+
+#: C/evince.xml:682(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:683(para)
+msgid "Find next"
+msgstr "Localiza próxima"
+
+#: C/evince.xml:687(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (sinal de mais)"
+
+#: C/evince.xml:688(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:689(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:691(para)
+msgid "Zoom in"
+msgstr "Amplia"
+
+#: C/evince.xml:695(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (sinal de menos)"
+
+#: C/evince.xml:696(keycap)
+msgid "-"
+msgstr "-"
+
+#: C/evince.xml:698(para)
+msgid "Zoom out"
+msgstr "Reduz"
+
+#: C/evince.xml:701(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:702(para)
+msgid "Reload the document"
+msgstr "Recarrega o documento"
+
+#: C/evince.xml:706(keycap) C/evince.xml:731(keycap)
+msgid "Page Up"
+msgstr "Page Up"
+
+#: C/evince.xml:707(para)
+msgid "Go to the previous page"
+msgstr "Vai para a página anterior"
+
+#: C/evince.xml:710(keycap) C/evince.xml:735(keycap)
+msgid "Page Down"
+msgstr "Page Down"
+
+#: C/evince.xml:711(para)
+msgid "Go to the next page"
+msgstr "Vai para a próxima página"
+
+#: C/evince.xml:715(keycap) C/evince.xml:723(keycap)
+msgid "Space"
+msgstr "Espaço"
+
+#: C/evince.xml:716(keycap) C/evince.xml:723(keycap) C/evince.xml:725(keycap)
+#: C/evince.xml:731(keycap) C/evince.xml:735(keycap)
+msgid "Shift"
+msgstr "Shift"
+
+#: C/evince.xml:716(keycap) C/evince.xml:724(keycap)
+msgid "Backspace"
+msgstr "Backspace"
+
+#: C/evince.xml:717(keycap) C/evince.xml:725(keycap)
+msgid "Return"
+msgstr "Enter"
+
+#: C/evince.xml:719(para)
+msgid "Scroll forward"
+msgstr "Rola para frente"
+
+#: C/evince.xml:727(para)
+msgid "Scroll backward"
+msgstr "Rola para trás"
+
+#: C/evince.xml:732(para)
+msgid "Go a bunch of pages up"
+msgstr "Vai para uma porção de páginas acima"
+
+#: C/evince.xml:736(para)
+msgid "Go a bunch of pages down"
+msgstr "Vai para uma porção de páginas abaixo"
+
+#: C/evince.xml:739(keycap)
+msgid "Home"
+msgstr "Home"
+
+#: C/evince.xml:740(para)
+msgid "Go to the first page"
+msgstr "Vai para a primeira página"
+
+#: C/evince.xml:743(keycap)
+msgid "End"
+msgstr "End"
+
+#: C/evince.xml:744(para)
+msgid "Go to the last page"
+msgstr "Vai para a última página"
+
+#: C/evince.xml:747(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:748(para)
+msgid "Go to page by number or label"
+msgstr "Vai para página por número ou rótulo"
+
+#: C/evince.xml:751(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:752(para)
+msgid "Help"
+msgstr "Ajuda"
+
+#: C/evince.xml:755(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:756(para)
+msgid "Run document as presentation"
+msgstr "Executar documento como apresentação"
+
+#: C/evince.xml:759(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:760(para)
+msgid "Show or hide the side pane"
+msgstr "Mostrar ou ocultar o painel lateral"
+
+#: C/evince.xml:763(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:764(para)
+msgid "Toggle fullscreen mode"
+msgstr "Alternar modo de tela cheia"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+"Hugo Dória <[email protected]>, 2007.\n"
+"Pedro de Medeiros <[email protected]>, 2007.\n"
+"Daniel S. Koda <[email protected]>, 2008."
diff --git a/help/reference/Makefile.am b/help/reference/Makefile.am
new file mode 100644
index 00000000..1cbc4308
--- /dev/null
+++ b/help/reference/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = libdocument libview shell
+-include $(top_srcdir)/git.mk
diff --git a/help/reference/libdocument/Makefile.am b/help/reference/libdocument/Makefile.am
new file mode 100644
index 00000000..54d57919
--- /dev/null
+++ b/help/reference/libdocument/Makefile.am
@@ -0,0 +1,132 @@
+# We require automake 1.10 for $(abs_builddir)
+AUTOMAKE_OPTIONS = 1.10
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE = libevdocument
+
+# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
+DOC_MODULE_VERSION = $(EV_API_VERSION)
+
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.xml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR = ../../../libdocument
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS =
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS =
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS = --sgml-mode --output-format=xml --name-space=ev
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS =
+
+# Extra options to supply to gtkdoc-mkhtml
+# Add the builddir to the HTML path so that version.xml is found
+MKHTML_OPTIONS = --path="$(abs_builddir)"
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS = \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/glib \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gio \
+ --extra-dir=$(GTK_PREFIX)/share/gtk-doc/html/gdk \
+ --extra-dir=$(GTK_PREFIX)/share/gtk-doc/html/gdk-pixbuf \
+ --extra-dir=$(GTK_PREFIX)/share/gtk-doc/html/gtk
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB = \
+ $(top_srcdir)/libdocument/*.h \
+ $(top_builddir)/libdocument/*.h
+
+CFILE_GLOB = \
+ $(top_srcdir)/libdocument/*.c
+
+# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
+# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
+# EXTRA_HFILES = $(top_builddir)/evdocument/ev-version.h
+EXTRA_HFILES =
+
+# Header files to ignore when scanning. Use base file name, no paths
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES = \
+ config.h \
+ ev-debug.h \
+ ev-module.h
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES =
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files = \
+ version.xml
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files =
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+GTKDOC_CFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/libdocument \
+ -DEVINCEDATADIR=\"$(pkgdatadir)\" \
+ -DMATEDATADIR=\"$(datadir)\" \
+ -DEVINCE_UIDIR=\"$(pkgdatadir)\" \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DEV_BACKENDSDIR=\"$(backenddir)\" \
+ -DEVINCE_COMPILATION \
+ $(AM_CFLAGS) \
+ $(LIBDOCUMENT_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+GTKDOC_LIBS = \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(LIBDOCUMENT_LIBS)
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+EXTRA_DIST += \
+ version.xml.in
+
+# Files not to distribute
+# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
+# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
+#DISTCLEANFILES +=
+
+# Comment this out if you want your docs-status tested during 'make check'
+if ENABLE_GTK_DOC
+#TESTS_ENVIRONMENT = cd $(srcsrc) &&
+#TESTS = $(GTKDOC_CHECK)
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/help/reference/libdocument/libevdocument-docs.xml b/help/reference/libdocument/libevdocument-docs.xml
new file mode 100644
index 00000000..8071e930
--- /dev/null
+++ b/help/reference/libdocument/libevdocument-docs.xml
@@ -0,0 +1,191 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+[
+ <!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
+ <!ENTITY version SYSTEM "version.xml">
+]>
+<book id="evince-document">
+ <!--
+ Copyright © 2009, 2010 Christian Persch
+
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU General Public License, Version 2
+ as published by the Free Software Foundation; or (at your option) any
+ later version.
+
+ A copy of the license is included in the COPYING file.
+ -->
+ <bookinfo>
+ <title>Evince Document Library Reference Manual</title>
+ <releaseinfo>
+ For Evince version &version;.
+ The latest version of this documentation can be found on-line at the
+ <ulink role="online-location" url="http://library.mate.org/devel/libevdocument/index.html">MATE Library</ulink>.
+ </releaseinfo>
+
+ <copyright>
+ <year>2007</year>
+ <year>2008</year>
+ <year>2009</year>
+ <holder>Nickolay V. Shmyrev</holder>
+ </copyright>
+
+ <copyright>
+ <year>2008</year>
+ <year>2009</year>
+ <year>2010</year>
+ <holder>Carlos Garcia Campos</holder>
+ </copyright>
+
+ <copyright>
+ <year>2009</year>
+ <year>2010</year>
+ <holder>Christian Persch</holder>
+ </copyright>
+
+ <legalnotice>
+ <para>
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the <citetitle>GNU General Public Licence</citetitle>
+ published by the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ You may obtain a copy of the <citetitle>GNU General Public Licence</citetitle>
+ from the Free Software Foundation at
+ <ulink type="http" url="http://www.gnu.org/licences/">GNU Licences web site</ulink>
+ or by writing to:
+
+ <address>
+ The Free Software Foundation, Inc.,
+ <street>51 Franklin St</street> – Fifth Floor,
+ <city>Boston</city>, <state>MA</state> <postcode>02110-1301</postcode>,
+ <country>USA</country>
+ </address>
+ </para>
+ </legalnotice>
+ </bookinfo>
+
+ <part id="document-interfaces">
+ <title>Document Interfaces</title>
+ <partintro>
+ <para>
+ Provides support for writing Evince backends.
+ </para>
+ </partintro>
+
+ <xi:include href="xml/ev-async-renderer.xml"/>
+ <xi:include href="xml/ev-document.xml"/>
+ <xi:include href="xml/ev-document-annotations.xml"/>
+ <xi:include href="xml/ev-document-attachments.xml"/>
+ <xi:include href="xml/ev-document-find.xml"/>
+ <xi:include href="xml/ev-document-fonts.xml"/>
+ <xi:include href="xml/ev-document-forms.xml"/>
+ <xi:include href="xml/ev-document-images.xml"/>
+ <xi:include href="xml/ev-document-info.xml"/>
+ <xi:include href="xml/ev-document-layers.xml"/>
+ <xi:include href="xml/ev-document-links.xml"/>
+ <xi:include href="xml/ev-document-misc.xml"/>
+ <xi:include href="xml/ev-document-print.xml"/>
+ <xi:include href="xml/ev-document-security.xml"/>
+ <xi:include href="xml/ev-document-thumbnails.xml"/>
+ <xi:include href="xml/ev-document-transition.xml"/>
+ <xi:include href="xml/ev-selection.xml"/>
+ <xi:include href="xml/ev-file-exporter.xml"/>
+ </part>
+
+ <part id="document-data">
+ <title>Document Data</title>
+ <partintro>
+ <para>
+ Helper objects related to documents like attachments, links and
+ images, etc.
+ </para>
+ </partintro>
+
+ <xi:include href="xml/ev-annotation.xml"/>
+ <xi:include href="xml/ev-attachment.xml"/>
+ <xi:include href="xml/ev-form-field.xml"/>
+ <xi:include href="xml/ev-image.xml"/>
+ <xi:include href="xml/ev-layer.xml"/>
+ <xi:include href="xml/ev-link-action.xml"/>
+ <xi:include href="xml/ev-link-dest.xml"/>
+ <xi:include href="xml/ev-link.xml"/>
+ <xi:include href="xml/ev-mapping.xml"/>
+ <xi:include href="xml/ev-page.xml"/>
+ <xi:include href="xml/ev-render-context.xml"/>
+ <xi:include href="xml/ev-transition-effect.xml"/>
+ </part>
+
+ <part id="document-helpers">
+ <title>Helper Functions</title>
+ <partintro>
+ <para>
+ Helper functions common for backend implementations, and for libevdocument library users.
+ </para>
+ </partintro>
+
+ <xi:include href="xml/ev-init.xml"/>
+ <xi:include href="xml/ev-version.xml"/>
+ <xi:include href="xml/ev-file-helpers.xml"/>
+ <xi:include href="xml/ev-document-factory.xml"/>
+ <xi:include href="xml/ev-backends-manager.xml"/>
+ </part>
+
+ <chapter id="object-tree">
+ <title>Object Hierarchy</title>
+ <xi:include href="xml/tree_index.sgml"/>
+ </chapter>
+ <index id="api-index-full">
+ <title>API Index</title>
+ <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
+ </index>
+ <!--
+ <index id="api-index-deprecated" role="deprecated">
+ <title>Index of deprecated symbols</title>
+ <xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
+ </index>
+ -->
+ <!--
+ <index id="api-index-2-30" role="2.30">
+ <title>Index of new symbols in 2.30</title>
+ <xi:include href="xml/api-index-2.30.xml"><xi:fallback /></xi:include>
+ </index>
+ -->
+
+ <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+
+ <appendix id="licence">
+ <title>Licence</title>
+
+ <para>
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the <citetitle>GNU General Public
+ Licence</citetitle> as published by the Free Software Foundation; either
+ version 2 of the Licence, or (at your option) any later version.
+ </para>
+
+ <para>
+ 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
+ <citetitle>GNU General Public Licence</citetitle> for
+ more details.
+ </para>
+
+ <para>
+ You may obtain a copy of the <citetitle>GNU General Public Licence</citetitle>
+ from the Free Software Foundation at
+ <ulink type="http" url="http://www.gnu.org/licences/">GNU Licences web site</ulink>
+ or by writing to:
+
+ <address>
+ The Free Software Foundation, Inc.,
+ <street>51 Franklin St</street> – Fifth Floor,
+ <city>Boston</city>, <state>MA</state> <postcode>02110-1301</postcode>,
+ <country>USA</country>
+ </address>
+ </para>
+ </appendix>
+
+</book>
diff --git a/help/reference/libdocument/libevdocument-overrides.txt b/help/reference/libdocument/libevdocument-overrides.txt
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/help/reference/libdocument/libevdocument-overrides.txt
diff --git a/help/reference/libdocument/libevdocument-sections.txt b/help/reference/libdocument/libevdocument-sections.txt
new file mode 100644
index 00000000..88d3db2e
--- /dev/null
+++ b/help/reference/libdocument/libevdocument-sections.txt
@@ -0,0 +1,781 @@
+<SECTION>
+<FILE>ev-layer</FILE>
+<TITLE>EvLayer</TITLE>
+EvLayer
+EvLayerClass
+EvLayerPrivate
+ev_layer_new
+ev_layer_get_id
+ev_layer_is_parent
+ev_layer_get_rb_group
+<SUBSECTION Standard>
+EV_LAYER
+EV_IS_LAYER
+EV_TYPE_LAYER
+ev_layer_get_type
+EV_LAYER_CLASS
+EV_IS_LAYER_CLASS
+EV_LAYER_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-thumbnails</FILE>
+<TITLE>EvDocumentThumbnails</TITLE>
+EV_DOCUMENT_THUMBNAILS_IFACE
+EV_IS_DOCUMENT_THUMBNAILS_IFACE
+EvDocumentThumbnails
+EvDocumentThumbnailsIface
+ev_document_thumbnails_get_thumbnail
+ev_document_thumbnails_get_dimensions
+<SUBSECTION Standard>
+EV_DOCUMENT_THUMBNAILS
+EV_IS_DOCUMENT_THUMBNAILS
+EV_TYPE_DOCUMENT_THUMBNAILS
+ev_document_thumbnails_get_type
+EV_DOCUMENT_THUMBNAILS_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-file-exporter</FILE>
+<TITLE>EvFileExporter</TITLE>
+EvFileExporterFormat
+EvFileExporterCapabilities
+EvFileExporterContext
+EV_FILE_EXPORTER_IFACE
+EV_IS_FILE_EXPORTER_IFACE
+EvFileExporter
+EvFileExporterIface
+ev_file_exporter_begin
+ev_file_exporter_begin_page
+ev_file_exporter_do_page
+ev_file_exporter_end_page
+ev_file_exporter_end
+ev_file_exporter_get_capabilities
+<SUBSECTION Standard>
+ev_file_exporter_format_get_type
+EV_TYPE_FILE_EXPORTER_FORMAT
+ev_file_exporter_capabilities_get_type
+EV_TYPE_FILE_EXPORTER_CAPABILITIES
+EV_FILE_EXPORTER
+EV_IS_FILE_EXPORTER
+EV_TYPE_FILE_EXPORTER
+ev_file_exporter_get_type
+EV_FILE_EXPORTER_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-forms</FILE>
+<TITLE>EvDocumentForms</TITLE>
+EV_DOCUMENT_FORMS_IFACE
+EV_IS_DOCUMENT_FORMS_IFACE
+EvDocumentForms
+EvDocumentFormsIface
+ev_document_forms_get_form_fields
+ev_document_forms_form_field_text_get_text
+ev_document_forms_form_field_text_set_text
+ev_document_forms_form_field_button_get_state
+ev_document_forms_form_field_button_set_state
+ev_document_forms_form_field_choice_get_item
+ev_document_forms_form_field_choice_get_n_items
+ev_document_forms_form_field_choice_is_item_selected
+ev_document_forms_form_field_choice_select_item
+ev_document_forms_form_field_choice_toggle_item
+ev_document_forms_form_field_choice_unselect_all
+ev_document_forms_form_field_choice_set_text
+ev_document_forms_form_field_choice_get_text
+<SUBSECTION Standard>
+ev_form_field_text_type_get_type
+EV_TYPE_FORM_FIELD_TEXT_TYPE
+ev_form_field_button_type_get_type
+EV_TYPE_FORM_FIELD_BUTTON_TYPE
+ev_form_field_choice_type_get_type
+EV_TYPE_FORM_FIELD_CHOICE_TYPE
+EV_DOCUMENT_FORMS
+EV_IS_DOCUMENT_FORMS
+EV_TYPE_DOCUMENT_FORMS
+ev_document_forms_get_type
+EV_DOCUMENT_FORMS_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-print</FILE>
+<TITLE>EvDocumentPrint</TITLE>
+EV_DOCUMENT_PRINT_IFACE
+EV_IS_DOCUMENT_PRINT_IFACE
+EvDocumentPrint
+EvDocumentPrintIface
+ev_document_print_print_page
+<SUBSECTION Standard>
+EV_DOCUMENT_PRINT
+EV_IS_DOCUMENT_PRINT
+EV_TYPE_DOCUMENT_PRINT
+ev_document_print_get_type
+EV_DOCUMENT_PRINT_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-image</FILE>
+<TITLE>EvImage</TITLE>
+EvImage
+EvImageClass
+EvImagePrivate
+ev_image_new
+ev_image_new_from_pixbuf
+ev_image_get_id
+ev_image_get_page
+ev_image_get_pixbuf
+ev_image_save_tmp
+ev_image_get_tmp_uri
+<SUBSECTION Standard>
+EV_IMAGE
+EV_IS_IMAGE
+EV_TYPE_IMAGE
+ev_image_get_type
+EV_IMAGE_CLASS
+EV_IS_IMAGE_CLASS
+EV_IMAGE_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-link</FILE>
+EvLink
+EvLinkClass
+EvLinkPrivate
+ev_link_new
+ev_link_get_title
+ev_link_get_action
+ev_link_get_page
+<SUBSECTION Standard>
+ev_link_action_type_get_type
+EV_TYPE_LINK_ACTION_TYPE
+ev_link_dest_type_get_type
+EV_TYPE_LINK_DEST_TYPE
+EV_LINK
+EV_IS_LINK
+EV_TYPE_LINK
+ev_link_get_type
+EV_LINK_CLASS
+EV_IS_LINK_CLASS
+EV_LINK_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-layers</FILE>
+<TITLE>EvDocumentLayers</TITLE>
+EV_DOCUMENT_LAYERS_IFACE
+EV_IS_DOCUMENT_LAYERS_IFACE
+EvDocumentLayers
+EvDocumentLayersIface
+ev_document_layers_has_layers
+ev_document_layers_get_layers
+ev_document_layers_show_layer
+ev_document_layers_hide_layer
+ev_document_layers_layer_is_visible
+<SUBSECTION Standard>
+EV_DOCUMENT_LAYERS
+EV_IS_DOCUMENT_LAYERS
+EV_TYPE_DOCUMENT_LAYERS
+ev_document_layers_get_type
+EV_DOCUMENT_LAYERS_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-links</FILE>
+<TITLE>EvDocumentLinks</TITLE>
+EV_DOCUMENT_LINKS_IFACE
+EV_IS_DOCUMENT_LINKS_IFACE
+EvDocumentLinks
+EvDocumentLinksIface
+ev_document_links_has_document_links
+ev_document_links_get_links_model
+ev_document_links_get_links
+ev_document_links_find_link_dest
+ev_document_links_get_dest_page
+ev_document_links_get_dest_page_label
+<SUBSECTION Standard>
+EV_DOCUMENT_LINKS
+EV_IS_DOCUMENT_LINKS
+EV_TYPE_DOCUMENT_LINKS
+ev_document_links_get_type
+EV_DOCUMENT_LINKS_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-attachment</FILE>
+<TITLE>EvAttachment</TITLE>
+EvAttachment
+EvAttachmentClass
+EvAttachmentPrivate
+EV_ATTACHMENT_ERROR
+ev_attachment_error_quark
+ev_attachment_new
+ev_attachment_get_name
+ev_attachment_get_description
+ev_attachment_get_modification_date
+ev_attachment_get_creation_date
+ev_attachment_get_mime_type
+ev_attachment_save
+ev_attachment_open
+<SUBSECTION Standard>
+EV_ATTACHMENT
+EV_IS_ATTACHMENT
+EV_TYPE_ATTACHMENT
+ev_attachment_get_type
+EV_ATTACHMENT_CLASS
+EV_IS_ATTACHMENT_CLASS
+EV_ATTACHMENT_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-page</FILE>
+<TITLE>EvPage</TITLE>
+EvPage
+EvPageClass
+EvBackendPage
+EvBackendPageDestroyFunc
+ev_page_new
+<SUBSECTION Standard>
+EV_PAGE
+EV_IS_PAGE
+EV_TYPE_PAGE
+ev_page_get_type
+EV_PAGE_CLASS
+EV_IS_PAGE_CLASS
+EV_PAGE_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-render-context</FILE>
+<TITLE>EvRenderContext</TITLE>
+EvRenderContext
+EvRenderContextClass
+ev_render_context_new
+ev_render_context_set_page
+ev_render_context_set_rotation
+ev_render_context_set_scale
+<SUBSECTION Standard>
+EV_RENDER_CONTEXT
+EV_IS_RENDER_CONTEXT
+EV_TYPE_RENDER_CONTEXT
+ev_render_context_get_type
+EV_RENDER_CONTEXT_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-form-field</FILE>
+<TITLE>EvFormField</TITLE>
+EvFormField
+EvFormFieldClass
+EvFormFieldText
+EvFormFieldTextClass
+EvFormFieldButton
+EvFormFieldButtonClass
+EvFormFieldChoice
+EvFormFieldChoiceClass
+EvFormFieldSignature
+EvFormFieldSignatureClass
+EvFormFieldTextType
+EvFormFieldButtonType
+EvFormFieldChoiceType
+ev_form_field_text_new
+ev_form_field_button_new
+ev_form_field_choice_new
+ev_form_field_signature_new
+<SUBSECTION Standard>
+EV_FORM_FIELD
+EV_IS_FORM_FIELD
+EV_TYPE_FORM_FIELD
+ev_form_field_get_type
+EV_FORM_FIELD_CLASS
+EV_IS_FORM_FIELD_CLASS
+EV_FORM_FIELD_GET_CLASS
+EV_TYPE_FORM_FIELD_TEXT
+ev_form_field_text_get_type
+EV_FORM_FIELD_TEXT
+EV_FORM_FIELD_TEXT_CLASS
+EV_IS_FORM_FIELD_TEXT
+EV_IS_FORM_FIELD_TEXT_CLASS
+EV_FORM_FIELD_TEXT_GET_CLASS
+EV_TYPE_FORM_FIELD_BUTTON
+ev_form_field_button_get_type
+EV_FORM_FIELD_BUTTON
+EV_FORM_FIELD_BUTTON_CLASS
+EV_IS_FORM_FIELD_BUTTON
+EV_IS_FORM_FIELD_BUTTON_CLASS
+EV_FORM_FIELD_BUTTON_GET_CLASS
+EV_TYPE_FORM_FIELD_CHOICE
+ev_form_field_choice_get_type
+EV_FORM_FIELD_CHOICE
+EV_FORM_FIELD_CHOICE_CLASS
+EV_IS_FORM_FIELD_CHOICE
+EV_IS_FORM_FIELD_CHOICE_CLASS
+EV_FORM_FIELD_CHOICE_GET_CLASS
+EV_TYPE_FORM_FIELD_SIGNATURE
+ev_form_field_signature_get_type
+EV_FORM_FIELD_SIGNATURE
+EV_FORM_FIELD_SIGNATURE_CLASS
+EV_IS_FORM_FIELD_SIGNATURE
+EV_IS_FORM_FIELD_SIGNATURE_CLASS
+EV_FORM_FIELD_SIGNATURE_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-find</FILE>
+<TITLE>EvDocumentFind</TITLE>
+EV_DOCUMENT_FIND_IFACE
+EV_IS_DOCUMENT_FIND_IFACE
+EvDocumentFind
+EvDocumentFindIface
+ev_document_find_find_text
+<SUBSECTION Standard>
+EV_DOCUMENT_FIND
+EV_IS_DOCUMENT_FIND
+EV_TYPE_DOCUMENT_FIND
+ev_document_find_get_type
+EV_DOCUMENT_FIND_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-document</FILE>
+<TITLE>EvDocument</TITLE>
+EvDocument
+EvDocumentClass
+EvDocumentPrivate
+EV_DOCUMENT_ERROR
+EV_DOC_MUTEX_LOCK
+EV_DOC_MUTEX_UNLOCK
+EvDocumentError
+EvPoint
+EvRectangle
+EvDocumentBackendInfo
+ev_document_error_quark
+ev_document_get_doc_mutex
+ev_document_doc_mutex_lock
+ev_document_doc_mutex_unlock
+ev_document_doc_mutex_trylock
+ev_document_get_fc_mutex
+ev_document_fc_mutex_lock
+ev_document_fc_mutex_unlock
+ev_document_fc_mutex_trylock
+ev_document_get_info
+ev_document_get_backend_info
+ev_document_load
+ev_document_save
+ev_document_get_n_pages
+ev_document_get_page
+ev_document_get_page_size
+ev_document_get_page_label
+ev_document_render
+ev_document_get_uri
+ev_document_get_title
+ev_document_is_page_size_uniform
+ev_document_get_max_page_size
+ev_document_check_dimensions
+ev_document_get_max_label_len
+ev_document_has_text_page_labels
+ev_document_find_page_by_label
+ev_rect_cmp
+EV_TYPE_RECTANGLE
+ev_rectangle_get_type
+ev_rectangle_new
+ev_rectangle_copy
+ev_rectangle_free
+EV_BACKEND_IMPLEMENT_INTERFACE
+EV_BACKEND_REGISTER_WITH_CODE
+EV_BACKEND_REGISTER
+EV_DEFINE_BOXED_TYPE
+EV_DEFINE_INTERFACE
+<SUBSECTION Standard>
+EV_DOCUMENT
+EV_IS_DOCUMENT
+EV_TYPE_DOCUMENT
+ev_document_get_type
+EV_DOCUMENT_CLASS
+EV_IS_DOCUMENT_CLASS
+EV_DOCUMENT_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-link-dest</FILE>
+EvLinkDest
+EvLinkDestClass
+EvLinkDestPrivate
+EvLinkDestType
+ev_link_dest_get_dest_type
+ev_link_dest_get_page
+ev_link_dest_get_top
+ev_link_dest_get_left
+ev_link_dest_get_bottom
+ev_link_dest_get_right
+ev_link_dest_get_zoom
+ev_link_dest_get_named_dest
+ev_link_dest_get_page_label
+ev_link_dest_new_page
+ev_link_dest_new_xyz
+ev_link_dest_new_fit
+ev_link_dest_new_fith
+ev_link_dest_new_fitv
+ev_link_dest_new_fitr
+ev_link_dest_new_named
+ev_link_dest_new_page_label
+<SUBSECTION Standard>
+EV_LINK_DEST
+EV_IS_LINK_DEST
+EV_TYPE_LINK_DEST
+ev_link_dest_get_type
+EV_LINK_DEST_CLASS
+EV_IS_LINK_DEST_CLASS
+EV_LINK_DEST_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-link-action</FILE>
+EvLinkAction
+EvLinkActionClass
+EvLinkActionPrivate
+EvLinkActionType
+ev_link_action_get_action_type
+ev_link_action_get_dest
+ev_link_action_get_uri
+ev_link_action_get_filename
+ev_link_action_get_params
+ev_link_action_get_name
+ev_link_action_new_dest
+ev_link_action_new_remote
+ev_link_action_new_external_uri
+ev_link_action_new_launch
+ev_link_action_new_named
+<SUBSECTION Standard>
+EV_LINK_ACTION
+EV_IS_LINK_ACTION
+EV_TYPE_LINK_ACTION
+ev_link_action_get_type
+EV_LINK_ACTION_CLASS
+EV_IS_LINK_ACTION_CLASS
+EV_LINK_ACTION_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-images</FILE>
+<TITLE>EvDocumentImages</TITLE>
+EV_DOCUMENT_IMAGES_IFACE
+EV_IS_DOCUMENT_IMAGES_IFACE
+EvDocumentImages
+EvDocumentImagesIface
+ev_document_images_get_image_mapping
+ev_document_images_get_image
+<SUBSECTION Standard>
+EV_DOCUMENT_IMAGES
+EV_IS_DOCUMENT_IMAGES
+EV_TYPE_DOCUMENT_IMAGES
+ev_document_images_get_type
+EV_DOCUMENT_IMAGES_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-async-renderer</FILE>
+<TITLE>EvAsyncRenderer</TITLE>
+EV_ASYNC_RENDERER_IFACE
+EV_IS_ASYNC_RENDERER_IFACE
+EvAsyncRenderer
+EvAsyncRendererIface
+ev_async_renderer_render_pixbuf
+<SUBSECTION Standard>
+EV_ASYNC_RENDERER
+EV_IS_ASYNC_RENDERER
+EV_TYPE_ASYNC_RENDERER
+ev_async_renderer_get_type
+EV_ASYNC_RENDERER_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-selection</FILE>
+<TITLE>EvSelection</TITLE>
+EV_SELECTION_IFACE
+EV_IS_SELECTION_IFACE
+EvSelectionStyle
+EvSelection
+EvSelectionIface
+ev_selection_render_selection
+ev_selection_get_selected_text
+ev_selection_get_selection_map
+ev_selection_get_selection_region
+<SUBSECTION Standard>
+ev_selection_style_get_type
+EV_TYPE_SELECTION_STYLE
+EV_SELECTION
+EV_IS_SELECTION
+EV_TYPE_SELECTION
+ev_selection_get_type
+EV_SELECTION_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-attachments</FILE>
+<TITLE>EvDocumentAttachments</TITLE>
+EV_DOCUMENT_ATTACHMENTS_IFACE
+EV_IS_DOCUMENT_ATTACHMENTS_IFACE
+EvDocumentAttachments
+EvDocumentAttachmentsIface
+ev_document_attachments_has_attachments
+ev_document_attachments_get_attachments
+<SUBSECTION Standard>
+EV_DOCUMENT_ATTACHMENTS
+EV_IS_DOCUMENT_ATTACHMENTS
+EV_TYPE_DOCUMENT_ATTACHMENTS
+ev_document_attachments_get_type
+EV_DOCUMENT_ATTACHMENTS_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-security</FILE>
+<TITLE>EvDocumentSecurity</TITLE>
+EV_DOCUMENT_SECURITY_IFACE
+EV_IS_DOCUMENT_SECURITY_IFACE
+EvDocumentSecurity
+EvDocumentSecurityIface
+ev_document_security_has_document_security
+ev_document_security_set_password
+<SUBSECTION Standard>
+EV_DOCUMENT_SECURITY
+EV_IS_DOCUMENT_SECURITY
+EV_TYPE_DOCUMENT_SECURITY
+ev_document_security_get_type
+EV_DOCUMENT_SECURITY_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-annotation</FILE>
+<TITLE>EvAnnotation</TITLE>
+EvAnnotation
+EvAnnotationClass
+EvAnnotationMarkup
+EvAnnotationMarkupIface
+EvAnnotationText
+EvAnnotationTextClass
+EvAnnotationAttachment
+EvAnnotationAttachmentClass
+ev_annotation_markup_get_label
+ev_annotation_markup_set_label
+ev_annotation_markup_get_opacity
+ev_annotation_markup_set_opacity
+ev_annotation_markup_has_popup
+ev_annotation_markup_get_rectangle
+ev_annotation_markup_get_is_open
+ev_annotation_markup_set_is_open
+ev_annotation_text_new
+ev_annotation_attachment_new
+<SUBSECTION Standard>
+EV_ANNOTATION
+EV_IS_ANNOTATION
+EV_TYPE_ANNOTATION
+ev_annotation_get_type
+EV_ANNOTATION_CLASS
+EV_IS_ANNOTATION_CLASS
+EV_ANNOTATION_GET_CLASS
+EV_TYPE_ANNOTATION_MARKUP
+ev_annotation_markup_get_type
+EV_ANNOTATION_MARKUP
+EV_ANNOTATION_MARKUP_IFACE
+EV_IS_ANNOTATION_MARKUP
+EV_IS_ANNOTATION_MARKUP_IFACE
+EV_ANNOTATION_MARKUP_GET_IFACE
+EV_TYPE_ANNOTATION_TEXT
+ev_annotation_text_get_type
+EV_ANNOTATION_TEXT
+EV_ANNOTATION_TEXT_CLASS
+EV_IS_ANNOTATION_TEXT
+EV_IS_ANNOTATION_TEXT_CLASS
+EV_ANNOTATION_TEXT_GET_CLASS
+EV_TYPE_ANNOTATION_ATTACHMENT
+ev_annotation_attachment_get_type
+EV_ANNOTATION_ATTACHMENT
+EV_ANNOTATION_ATTACHMENT_CLASS
+EV_IS_ANNOTATION_ATTACHMENT
+EV_IS_ANNOTATION_ATTACHMENT_CLASS
+EV_ANNOTATION_ATTACHMENT_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-transition</FILE>
+<TITLE>EvDocumentTransition</TITLE>
+EV_DOCUMENT_TRANSITION_IFACE
+EV_IS_DOCUMENT_TRANSITION_IFACE
+EvDocumentTransition
+EvDocumentTransitionIface
+ev_document_transition_get_page_duration
+ev_document_transition_get_effect
+<SUBSECTION Standard>
+EV_DOCUMENT_TRANSITION
+EV_IS_DOCUMENT_TRANSITION
+EV_TYPE_DOCUMENT_TRANSITION
+ev_document_transition_get_type
+EV_DOCUMENT_TRANSITION_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-transition-effect</FILE>
+EvTransitionEffectType
+EvTransitionEffectAlignment
+EvTransitionEffectDirection
+EvTransitionEffect
+EvTransitionEffectClass
+ev_transition_effect_new
+<SUBSECTION Standard>
+ev_transition_effect_type_get_type
+EV_TYPE_TRANSITION_EFFECT_TYPE
+ev_transition_effect_alignment_get_type
+EV_TYPE_TRANSITION_EFFECT_ALIGNMENT
+ev_transition_effect_direction_get_type
+EV_TYPE_TRANSITION_EFFECT_DIRECTION
+EV_TRANSITION_EFFECT
+EV_IS_TRANSITION_EFFECT
+EV_TYPE_TRANSITION_EFFECT
+ev_transition_effect_get_type
+EV_TRANSITION_EFFECT_CLASS
+EV_IS_TRANSITION_EFFECT_CLASS
+EV_TRANSITION_EFFECT_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-annotations</FILE>
+<TITLE>EvDocumentAnnotations</TITLE>
+EV_DOCUMENT_ANNOTATIONS_IFACE
+EV_IS_DOCUMENT_ANNOTATIONS_IFACE
+EvDocumentAnnotations
+EvDocumentAnnotationsIface
+ev_document_annotations_get_annotations
+ev_document_annotations_annotation_set_contents
+<SUBSECTION Standard>
+EV_DOCUMENT_ANNOTATIONS
+EV_IS_DOCUMENT_ANNOTATIONS
+EV_TYPE_DOCUMENT_ANNOTATIONS
+ev_document_annotations_get_type
+EV_DOCUMENT_ANNOTATIONS_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-fonts</FILE>
+<TITLE>EvDocumentFonts</TITLE>
+EV_DOCUMENT_FONTS_IFACE
+EV_IS_DOCUMENT_FONTS_IFACE
+EvDocumentFonts
+EvDocumentFontsIface
+ev_document_fonts_scan
+ev_document_fonts_get_progress
+ev_document_fonts_fill_model
+<SUBSECTION Standard>
+EV_DOCUMENT_FONTS
+EV_IS_DOCUMENT_FONTS
+EV_TYPE_DOCUMENT_FONTS
+ev_document_fonts_get_type
+EV_DOCUMENT_FONTS_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-factory</FILE>
+ev_document_factory_get_document
+ev_document_factory_add_filters
+</SECTION>
+
+<SECTION>
+<FILE>ev-init</FILE>
+ev_init
+ev_shutdown
+</SECTION>
+
+<SECTION>
+<FILE>ev-mapping</FILE>
+EvMapping
+ev_mapping_list_find
+ev_mapping_list_find_custom
+ev_mapping_list_get_data
+ev_mapping_list_free
+</SECTION>
+
+<SECTION>
+<FILE>ev-backends-manager</FILE>
+EvTypeInfo
+ev_backends_manager_get_document
+ev_backends_manager_get_document_module_name
+ev_backends_manager_get_document_type_info
+ev_backends_manager_get_all_types_info
+</SECTION>
+
+<SECTION>
+<FILE>ev-file-helpers</FILE>
+EvCompressionType
+ev_mkstemp
+ev_mkstemp_file
+ev_mkdtemp
+ev_tmp_filename_unlink
+ev_tmp_file_unlink
+ev_tmp_uri_unlink
+ev_xfer_uri_simple
+ev_file_get_mime_type
+ev_file_uncompress
+ev_file_compress
+<SUBSECTION Standard>
+ev_compression_type_get_type
+EV_TYPE_COMPRESSION_TYPE
+</SECTION>
+
+<SECTION>
+<FILE>ev-version</FILE>
+<TITLE>Version checks</TITLE>
+EV_MAJOR_VERSION
+EV_MINOR_VERSION
+EV_MICRO_VERSION
+EV_CHECK_VERSION
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-misc</FILE>
+<TITLE>EvDocumentMisc</TITLE>
+ev_document_misc_get_thumbnail_frame
+ev_document_misc_get_page_border_size
+ev_document_misc_paint_one_page
+ev_document_misc_surface_from_pixbuf
+ev_document_misc_pixbuf_from_surface
+ev_document_misc_surface_rotate_and_scale
+ev_document_misc_invert_surface
+ev_document_misc_invert_pixbuf
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-info</FILE>
+<TITLE>EvDocumentInfo</TITLE>
+EvDocumentInfo
+EvDocumentLicense
+EvDocumentLayout
+EvDocumentMode
+EvDocumentUIHints
+PERMISSIONS_FULL
+EvDocumentPermissions
+EvDocumentInfoFields
+ev_document_info_copy
+ev_document_info_free
+ev_document_license_new
+ev_document_license_copy
+ev_document_license_free
+ev_document_license_get_text
+ev_document_license_get_uri
+ev_document_license_get_web_statement
+ev_document_error_get_type
+<SUBSECTION Standard>
+EV_TYPE_DOCUMENT_INFO
+ev_document_info_get_type
+EV_TYPE_DOCUMENT_LICENSE
+ev_document_license_get_type
+EV_TYPE_DOCUMENT_ERROR
+ev_document_layout_get_type
+EV_TYPE_DOCUMENT_LAYOUT
+ev_document_mode_get_type
+EV_TYPE_DOCUMENT_MODE
+ev_document_ui_hints_get_type
+EV_TYPE_DOCUMENT_UI_HINTS
+ev_document_permissions_get_type
+EV_TYPE_DOCUMENT_PERMISSIONS
+ev_document_info_fields_get_type
+EV_TYPE_DOCUMENT_INFO_FIELDS
+</SECTION>
diff --git a/help/reference/libdocument/libevdocument.types b/help/reference/libdocument/libevdocument.types
new file mode 100644
index 00000000..78d30202
--- /dev/null
+++ b/help/reference/libdocument/libevdocument.types
@@ -0,0 +1,55 @@
+ev_annotation_attachment_get_type
+ev_annotation_get_type
+ev_annotation_markup_get_type
+ev_annotation_text_get_type
+ev_async_renderer_get_type
+ev_attachment_get_type
+ev_compression_type_get_type
+ev_document_annotations_get_type
+ev_document_attachments_get_type
+ev_document_error_get_type
+ev_document_find_get_type
+ev_document_fonts_get_type
+ev_document_forms_get_type
+ev_document_get_type
+ev_document_images_get_type
+ev_document_info_fields_get_type
+ev_document_info_get_type
+ev_document_layers_get_type
+ev_document_layout_get_type
+ev_document_license_get_type
+ev_document_links_get_type
+ev_document_mode_get_type
+ev_document_permissions_get_type
+ev_document_print_get_type
+ev_document_security_get_type
+ev_document_thumbnails_get_type
+ev_document_transition_get_type
+ev_document_ui_hints_get_type
+ev_file_exporter_capabilities_get_type
+ev_file_exporter_format_get_type
+ev_file_exporter_get_type
+ev_form_field_button_get_type
+ev_form_field_button_type_get_type
+ev_form_field_choice_get_type
+ev_form_field_choice_type_get_type
+ev_form_field_get_type
+ev_form_field_signature_get_type
+ev_form_field_text_get_type
+ev_form_field_text_type_get_type
+ev_image_get_type
+ev_layer_get_type
+ev_link_action_get_type
+ev_link_action_type_get_type
+ev_link_dest_get_type
+ev_link_dest_type_get_type
+ev_link_get_type
+ev_page_get_type
+ev_rectangle_get_type
+ev_render_context_get_type
+ev_selection_get_type
+ev_selection_style_get_type
+ev_transition_effect_alignment_get_type
+ev_transition_effect_direction_get_type
+ev_transition_effect_get_type
+ev_transition_effect_type_get_type
diff --git a/help/reference/libdocument/version.xml.in b/help/reference/libdocument/version.xml.in
new file mode 100644
index 00000000..27323dad
--- /dev/null
+++ b/help/reference/libdocument/version.xml.in
@@ -0,0 +1 @@
+@VERSION@ \ No newline at end of file
diff --git a/help/reference/libview/Makefile.am b/help/reference/libview/Makefile.am
new file mode 100644
index 00000000..d00a8be1
--- /dev/null
+++ b/help/reference/libview/Makefile.am
@@ -0,0 +1,139 @@
+# We require automake 1.10 for $(abs_builddir)
+AUTOMAKE_OPTIONS = 1.10
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE = libevview
+
+# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
+DOC_MODULE_VERSION = $(EV_API_VERSION)
+
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.xml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# viewing the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR = ../../../libview
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS =
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS =
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS = --sgml-mode --output-format=xml --name-space=ev
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+MKTMPL_OPTIONS =
+
+# Extra options to supply to gtkdoc-mkhtml
+# Add the builddir to the HTML path so that version.xml is found
+MKHTML_OPTIONS = --path="$(abs_builddir)"
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS = \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/glib \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gio \
+ --extra-dir=$(GTK_PREFIX)/share/gtk-doc/html/gdk \
+ --extra-dir=$(GTK_PREFIX)/share/gtk-doc/html/gdk-pixbuf \
+ --extra-dir=$(GTK_PREFIX)/share/gtk-doc/html/gtk
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB = \
+ $(top_srcdir)/libview/*.h \
+ $(top_builddir)/libview/*.h
+
+CFILE_GLOB = \
+ $(top_srcdir)/libview/*.c
+
+# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
+# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
+# EXTRA_HFILES = $(top_builddir)/evview/ev-version.h
+EXTRA_HFILES =
+
+# Header files to ignore when scanning. Use base file name, no paths
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES = \
+ config.h \
+ ev-pixbuf-cache.h \
+ ev-timeline.h \
+ ev-transition-animation.h \
+ ev-view-accessible.h \
+ ev-view-marshal.h \
+ ev-view-private.h
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES =
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files = \
+ version.xml
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files =
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+GTKDOC_CFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/libview \
+ -I$(top_srcdir)/libdocument \
+ -I$(top_builddir)/libdocument \
+ -DEVINCEDATADIR=\"$(pkgdatadir)\" \
+ -DMATEDATADIR=\"$(datadir)\" \
+ -DEVINCE_UIDIR=\"$(pkgdatadir)\" \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DEV_BACKENDSDIR=\"$(backenddir)\" \
+ -DEVINCE_COMPILATION \
+ $(AM_CFLAGS) \
+ $(LIBVIEW_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+GTKDOC_LIBS = \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(top_builddir)/libview/libevview.la \
+ $(LIBDOCUMENT_LIBS)
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+EXTRA_DIST += \
+ version.xml.in
+
+# Files not to distribute
+# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
+# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
+#DISTCLEANFILES +=
+
+# Comment this out if you want your docs-status tested during 'make check'
+if ENABLE_GTK_DOC
+#TESTS_ENVIRONMENT = cd $(srcsrc) &&
+#TESTS = $(GTKDOC_CHECK)
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/help/reference/libview/libevview-docs.xml b/help/reference/libview/libevview-docs.xml
new file mode 100644
index 00000000..8bed6139
--- /dev/null
+++ b/help/reference/libview/libevview-docs.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+[
+ <!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
+ <!ENTITY version SYSTEM "version.xml">
+]>
+<book id="evince-view">
+ <!--
+ Copyright © 2009, 2010 Christian Persch
+
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU General Public License, Version 2
+ as published by the Free Software Foundation; or (at your option) any
+ later version.
+
+ A copy of the license is included in the COPYING file.
+ -->
+ <bookinfo>
+ <title>Evince View Library Reference Manual</title>
+ <releaseinfo>
+ For Evince version &version;.
+ The latest version of this documentation can be found on-line at the
+ <ulink role="online-location" url="http://library.mate.org/devel/libevview/index.html">MATE Library</ulink>.
+ </releaseinfo>
+
+ <copyright>
+ <year>2007</year>
+ <year>2008</year>
+ <year>2009</year>
+ <holder>Nickolay V. Shmyrev</holder>
+ </copyright>
+
+ <copyright>
+ <year>2008</year>
+ <year>2009</year>
+ <year>2010</year>
+ <holder>Carlos Garcia Campos</holder>
+ </copyright>
+
+ <copyright>
+ <year>2009</year>
+ <year>2010</year>
+ <holder>Christian Persch</holder>
+ </copyright>
+
+ <legalnotice>
+ <para>
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the <citetitle>GNU General Public Licence</citetitle>
+ published by the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ You may obtain a copy of the <citetitle>GNU General Public Licence</citetitle>
+ from the Free Software Foundation at
+ <ulink type="http" url="http://www.gnu.org/licences/">GNU Licences web site</ulink>
+ or by writing to:
+
+ <address>
+ The Free Software Foundation, Inc.,
+ <street>51 Franklin St</street> – Fifth Floor,
+ <city>Boston</city>, <state>MA</state> <postcode>02110-1301</postcode>,
+ <country>USA</country>
+ </address>
+ </para>
+ </legalnotice>
+ </bookinfo>
+
+ <part id="view-view">
+ <title>Evince View</title>
+ <partintro>
+ <para>
+ </para>
+ </partintro>
+
+ <xi:include href="xml/ev-annotation-window.xml"/>
+ <xi:include href="xml/ev-view.xml"/>
+ <xi:include href="xml/ev-page-cache.xml"/>
+ <xi:include href="xml/ev-print-operation.xml"/>
+ <xi:include href="xml/ev-view-presentation.xml"/>
+ <xi:include href="xml/ev-jobs.xml"/>
+ <xi:include href="xml/ev-document-model.xml"/>
+ <xi:include href="xml/ev-stock-icons.xml"/>
+ <xi:include href="xml/ev-view-type-builtins.xml"/>
+ <xi:include href="xml/ev-job-scheduler.xml"/>
+ <xi:include href="xml/ev-view-cursor.xml"/>
+ </part>
+
+ <chapter id="object-tree">
+ <title>Object Hierarchy</title>
+ <xi:include href="xml/tree_index.sgml"/>
+ </chapter>
+ <index id="api-index-full">
+ <title>API Index</title>
+ <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
+ </index>
+ <!--
+ <index id="api-index-deprecated" role="deprecated">
+ <title>Index of deprecated symbols</title>
+ <xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
+ </index>
+ -->
+ <!--
+ <index id="api-index-2-30" role="2.30">
+ <title>Index of new symbols in 2.30</title>
+ <xi:include href="xml/api-index-2.30.xml"><xi:fallback /></xi:include>
+ </index>
+ -->
+
+ <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+
+ <appendix id="licence">
+ <title>Licence</title>
+
+ <para>
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the <citetitle>GNU General Public
+ Licence</citetitle> as published by the Free Software Foundation; either
+ version 2 of the Licence, or (at your option) any later version.
+ </para>
+
+ <para>
+ 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
+ <citetitle>GNU General Public Licence</citetitle> for
+ more details.
+ </para>
+
+ <para>
+ You may obtain a copy of the <citetitle>GNU General Public Licence</citetitle>
+ from the Free Software Foundation at
+ <ulink type="http" url="http://www.gnu.org/licences/">GNU Licences web site</ulink>
+ or by writing to:
+
+ <address>
+ The Free Software Foundation, Inc.,
+ <street>51 Franklin St</street> – Fifth Floor,
+ <city>Boston</city>, <state>MA</state> <postcode>02110-1301</postcode>,
+ <country>USA</country>
+ </address>
+ </para>
+ </appendix>
+
+</book>
diff --git a/help/reference/libview/libevview-overrides.txt b/help/reference/libview/libevview-overrides.txt
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/help/reference/libview/libevview-overrides.txt
diff --git a/help/reference/libview/libevview-sections.txt b/help/reference/libview/libevview-sections.txt
new file mode 100644
index 00000000..fe50b2eb
--- /dev/null
+++ b/help/reference/libview/libevview-sections.txt
@@ -0,0 +1,338 @@
+<SECTION>
+<FILE>ev-annotation-window</FILE>
+EvAnnotationWindow
+EvAnnotationWindowClass
+ev_annotation_window_new
+ev_annotation_window_get_annotation
+ev_annotation_window_set_annotation
+ev_annotation_window_is_open
+ev_annotation_window_get_rectangle
+ev_annotation_window_set_rectangle
+ev_annotation_window_grab_focus
+ev_annotation_window_ungrab_focus
+<SUBSECTION Standard>
+EV_ANNOTATION_WINDOW
+EV_IS_ANNOTATION_WINDOW
+EV_TYPE_ANNOTATION_WINDOW
+ev_annotation_window_get_type
+EV_ANNOTATION_WINDOW_CLASS
+EV_IS_ANNOTATION_WINDOW_CLASS
+EV_ANNOTATION_WINDOW_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-view</FILE>
+EvView
+EvViewClass
+EvViewSelectionMode
+ev_view_new
+ev_view_set_model
+ev_view_set_loading
+ev_view_reload
+ev_view_copy
+ev_view_copy_link_address
+ev_view_select_all
+ev_view_get_has_selection
+ev_view_set_presentation
+ev_view_get_presentation
+ev_view_can_zoom_in
+ev_view_zoom_in
+ev_view_can_zoom_out
+ev_view_zoom_out
+ev_view_find_next
+ev_view_find_previous
+ev_view_find_search_changed
+ev_view_find_set_highlight_search
+ev_view_find_changed
+ev_view_find_cancel
+ev_view_hide_cursor
+ev_view_show_cursor
+ev_view_scroll
+ev_view_handle_link
+ev_view_next_page
+ev_view_previous_page
+ev_view_autoscroll_start
+ev_view_autoscroll_stop
+<SUBSECTION Standard>
+EV_VIEW
+EV_IS_VIEW
+EV_TYPE_VIEW
+ev_view_get_type
+</SECTION>
+
+<SECTION>
+<FILE>ev-page-cache</FILE>
+EvPageCache
+EvPageCacheClass
+ev_page_cache_new
+ev_page_cache_set_page_range
+ev_page_cache_get_flags
+ev_page_cache_set_flags
+ev_page_cache_get_link_mapping
+ev_page_cache_get_image_mapping
+ev_page_cache_get_form_field_mapping
+ev_page_cache_get_annot_mapping
+ev_page_cache_get_text_mapping
+<SUBSECTION Standard>
+EV_PAGE_CACHE
+EV_IS_PAGE_CACHE
+EV_TYPE_PAGE_CACHE
+ev_page_cache_get_type
+</SECTION>
+
+<SECTION>
+<FILE>ev-print-operation</FILE>
+EvPrintOperation
+EvPrintOperationClass
+ev_print_operation_exists_for_document
+ev_print_operation_new
+ev_print_operation_set_current_page
+ev_print_operation_set_print_settings
+ev_print_operation_get_print_settings
+ev_print_operation_set_default_page_setup
+ev_print_operation_get_default_page_setup
+ev_print_operation_set_job_name
+ev_print_operation_get_job_name
+ev_print_operation_run
+ev_print_operation_cancel
+ev_print_operation_get_error
+ev_print_operation_set_embed_page_setup
+ev_print_operation_get_embed_page_setup
+ev_print_operation_get_status
+ev_print_operation_get_progress
+<SUBSECTION Standard>
+EV_PRINT_OPERATION
+EV_IS_PRINT_OPERATION
+EV_TYPE_PRINT_OPERATION
+ev_print_operation_get_type
+EV_PRINT_OPERATION_CLASS
+EV_PRINT_OPERATION_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-view-presentation</FILE>
+EvViewPresentation
+EvViewPresentationClass
+ev_view_presentation_new
+ev_view_presentation_get_current_page
+<SUBSECTION Standard>
+EV_VIEW_PRESENTATION
+EV_IS_VIEW_PRESENTATION
+EV_TYPE_VIEW_PRESENTATION
+ev_view_presentation_get_type
+</SECTION>
+
+<SECTION>
+<FILE>ev-jobs</FILE>
+<TITLE>EvJob</TITLE>
+EvJob
+EvJobClass
+EvJobRender
+EvJobRenderClass
+EvJobPageData
+EvJobPageDataClass
+EvJobThumbnail
+EvJobThumbnailClass
+EvJobLinks
+EvJobLinksClass
+EvJobAttachments
+EvJobAttachmentsClass
+EvJobFonts
+EvJobFontsClass
+EvJobLoad
+EvJobLoadClass
+EvJobSave
+EvJobSaveClass
+EvJobFind
+EvJobFindClass
+EvJobLayers
+EvJobLayersClass
+EvJobExport
+EvJobExportClass
+EvJobPrint
+EvJobPrintClass
+EvJobRunMode
+EvJobPageDataFlags
+ev_job_run
+ev_job_cancel
+ev_job_failed
+ev_job_failed_from_error
+ev_job_succeeded
+ev_job_is_finished
+ev_job_is_failed
+ev_job_get_run_mode
+ev_job_set_run_mode
+ev_job_links_new
+ev_job_attachments_new
+ev_job_export_new
+ev_job_export_set_page
+ev_job_render_new
+ev_job_render_set_selection_info
+ev_job_page_data_new
+ev_job_thumbnail_new
+ev_job_fonts_new
+ev_job_load_new
+ev_job_load_set_uri
+ev_job_load_set_password
+ev_job_save_new
+ev_job_find_new
+ev_job_find_get_n_results
+ev_job_find_get_progress
+ev_job_find_has_results
+ev_job_find_get_results
+ev_job_layers_new
+ev_job_print_new
+ev_job_print_set_page
+ev_job_print_set_cairo
+<SUBSECTION Standard>
+ev_job_run_mode_get_type
+EV_TYPE_JOB_RUN_MODE
+ev_job_page_data_flags_get_type
+EV_TYPE_JOB_PAGE_DATA_FLAGS
+ev_job_priority_get_type
+EV_TYPE_JOB_PRIORITY
+EV_JOB
+EV_IS_JOB
+EV_TYPE_JOB
+ev_job_get_type
+EV_JOB_CLASS
+EV_JOB_GET_CLASS
+EV_TYPE_JOB_LINKS
+ev_job_links_get_type
+EV_JOB_LINKS
+EV_JOB_LINKS_CLASS
+EV_IS_JOB_LINKS
+EV_TYPE_JOB_ATTACHMENTS
+ev_job_attachments_get_type
+EV_JOB_ATTACHMENTS
+EV_JOB_ATTACHMENTS_CLASS
+EV_IS_JOB_ATTACHMENTS
+EV_TYPE_JOB_RENDER
+ev_job_render_get_type
+EV_JOB_RENDER
+EV_JOB_RENDER_CLASS
+EV_IS_JOB_RENDER
+EV_TYPE_JOB_PAGE_DATA
+ev_job_page_data_get_type
+EV_JOB_PAGE_DATA
+EV_JOB_PAGE_DATA_CLASS
+EV_IS_JOB_PAGE_DATA
+EV_TYPE_JOB_THUMBNAIL
+ev_job_thumbnail_get_type
+EV_JOB_THUMBNAIL
+EV_JOB_THUMBNAIL_CLASS
+EV_IS_JOB_THUMBNAIL
+EV_TYPE_JOB_FONTS
+ev_job_fonts_get_type
+EV_JOB_FONTS
+EV_JOB_FONTS_CLASS
+EV_IS_JOB_FONTS
+EV_TYPE_JOB_LOAD
+ev_job_load_get_type
+EV_JOB_LOAD
+EV_JOB_LOAD_CLASS
+EV_IS_JOB_LOAD
+EV_TYPE_JOB_SAVE
+ev_job_save_get_type
+EV_JOB_SAVE
+EV_JOB_SAVE_CLASS
+EV_IS_JOB_SAVE
+EV_TYPE_JOB_FIND
+ev_job_find_get_type
+EV_JOB_FIND
+EV_JOB_FIND_CLASS
+EV_IS_JOB_FIND
+EV_TYPE_JOB_LAYERS
+ev_job_layers_get_type
+EV_JOB_LAYERS
+EV_JOB_LAYERS_CLASS
+EV_IS_JOB_LAYERS
+EV_TYPE_JOB_EXPORT
+ev_job_export_get_type
+EV_JOB_EXPORT
+EV_JOB_EXPORT_CLASS
+EV_IS_JOB_EXPORT
+EV_TYPE_JOB_PRINT
+ev_job_print_get_type
+EV_JOB_PRINT
+EV_JOB_PRINT_CLASS
+EV_IS_JOB_PRINT
+</SECTION>
+
+<SECTION>
+<FILE>ev-document-model</FILE>
+EvSizingMode
+EvDocumentModel
+EvDocumentModelClass
+ev_document_model_new
+ev_document_model_new_with_document
+ev_document_model_set_document
+ev_document_model_get_document
+ev_document_model_set_page
+ev_document_model_set_page_by_label
+ev_document_model_get_page
+ev_document_model_set_scale
+ev_document_model_get_scale
+ev_document_model_set_max_scale
+ev_document_model_get_max_scale
+ev_document_model_set_min_scale
+ev_document_model_get_min_scale
+ev_document_model_set_sizing_mode
+ev_document_model_get_sizing_mode
+ev_document_model_set_rotation
+ev_document_model_get_rotation
+ev_document_model_set_inverted_colors
+ev_document_model_get_inverted_colors
+ev_document_model_set_continuous
+ev_document_model_get_continuous
+ev_document_model_set_dual_page
+ev_document_model_get_dual_page
+ev_document_model_set_fullscreen
+ev_document_model_get_fullscreen
+<SUBSECTION Standard>
+ev_sizing_mode_get_type
+EV_TYPE_SIZING_MODE
+EV_DOCUMENT_MODEL
+EV_IS_DOCUMENT_MODEL
+EV_TYPE_DOCUMENT_MODEL
+ev_document_model_get_type
+</SECTION>
+
+<SECTION>
+<FILE>ev-stock-icons</FILE>
+EV_STOCK_ZOOM
+EV_STOCK_ZOOM_PAGE
+EV_STOCK_ZOOM_WIDTH
+EV_STOCK_VIEW_DUAL
+EV_STOCK_VIEW_CONTINUOUS
+EV_STOCK_ROTATE_LEFT
+EV_STOCK_ROTATE_RIGHT
+EV_STOCK_RUN_PRESENTATION
+EV_STOCK_VISIBLE
+EV_STOCK_RESIZE_SE
+EV_STOCK_RESIZE_SW
+EV_STOCK_CLOSE
+EV_STOCK_INVERTED_COLORS
+ev_stock_icons_init
+ev_stock_icons_shutdown
+ev_stock_icons_set_screen
+</SECTION>
+
+<SECTION>
+<FILE>ev-view-type-builtins</FILE>
+ev_view_selection_mode_get_type
+EV_TYPE_VIEW_SELECTION_MODE
+</SECTION>
+
+<SECTION>
+<FILE>ev-job-scheduler</FILE>
+EvJobPriority
+ev_job_scheduler_push_job
+ev_job_scheduler_update_job
+</SECTION>
+
+<SECTION>
+<FILE>ev-view-cursor</FILE>
+EvViewCursor
+ev_view_cursor_new
+</SECTION>
diff --git a/help/reference/libview/libevview.types b/help/reference/libview/libevview.types
new file mode 100644
index 00000000..668b715a
--- /dev/null
+++ b/help/reference/libview/libevview.types
@@ -0,0 +1,29 @@
+#include <evince-view.h>
+#include "ev-annotation-window.h"
+#include "ev-page-cache.h"
+#include "ev-view-presentation.h"
+
+ev_annotation_window_get_type
+ev_document_model_get_type
+ev_job_attachments_get_type
+ev_job_export_get_type
+ev_job_find_get_type
+ev_job_fonts_get_type
+ev_job_get_type
+ev_job_layers_get_type
+ev_job_links_get_type
+ev_job_load_get_type
+ev_job_page_data_flags_get_type
+ev_job_page_data_get_type
+ev_job_print_get_type
+ev_job_priority_get_type
+ev_job_render_get_type
+ev_job_run_mode_get_type
+ev_job_save_get_type
+ev_job_thumbnail_get_type
+ev_page_cache_get_type
+ev_print_operation_get_type
+ev_sizing_mode_get_type
+ev_view_get_type
+ev_view_presentation_get_type
+ev_view_selection_mode_get_type
diff --git a/help/reference/libview/version.xml.in b/help/reference/libview/version.xml.in
new file mode 100644
index 00000000..27323dad
--- /dev/null
+++ b/help/reference/libview/version.xml.in
@@ -0,0 +1 @@
+@VERSION@ \ No newline at end of file
diff --git a/help/reference/shell/Makefile.am b/help/reference/shell/Makefile.am
new file mode 100644
index 00000000..628b1a30
--- /dev/null
+++ b/help/reference/shell/Makefile.am
@@ -0,0 +1,150 @@
+# We require automake 1.10 for $(abs_builddir)
+AUTOMAKE_OPTIONS = 1.10
+
+# This is a blank Makefile.am for using gtk-doc.
+# Copy this to your project's API docs directory and modify the variables to
+# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
+# of using the various options.
+
+# The name of the module, e.g. 'glib'.
+DOC_MODULE = evince
+
+# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
+# DOC_MODULE_VERSION = $(EV_API_VERSION)
+
+# The top-level SGML file. You can change this if you want to.
+DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.xml
+
+# The directory containing the source code. Relative to $(srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# evinceing the functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk
+DOC_SOURCE_DIR = $(top_srcdir)/shell
+
+# Extra options to pass to gtkdoc-scangobj. Not normally needed.
+SCANGOBJ_OPTIONS =
+
+# Extra options to supply to gtkdoc-scan.
+# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
+SCAN_OPTIONS =
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS = --sgml-mode --output-format=xml --name-space=ev
+
+# Extra options to supply to gtkdoc-mktmpl
+# e.g. MKTMPL_OPTIONS=--only-section-tmpl
+# MKTMPL_OPTIONS =
+
+# Extra options to supply to gtkdoc-mkhtml
+# Add the builddir to the HTML path so that version.xml is found
+MKHTML_OPTIONS = --path="$(abs_builddir)"
+
+# Extra options to supply to gtkdoc-fixref. Not normally needed.
+# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
+FIXXREF_OPTIONS = \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/glib \
+ --extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html/gio \
+ --extra-dir=$(GTK_PREFIX)/share/gtk-doc/html/gdk \
+ --extra-dir=$(GTK_PREFIX)/share/gtk-doc/html/gdk-pixbuf \
+ --extra-dir=$(GTK_PREFIX)/share/gtk-doc/html/gtk
+
+# Used for dependencies. The docs will be rebuilt if any of these change.
+# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
+# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
+HFILE_GLOB = $(top_srcdir)/shell/*.h
+CFILE_GLOB = $(top_srcdir)/shell/*.c
+
+# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
+# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
+# EXTRA_HFILES = $(top_builddir)/evince/ev-version.h
+EXTRA_HFILES =
+
+# Header files to ignore when scanning. Use base file name, no paths
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES = \
+ config.h \
+ ev-marshal.h
+
+# Images to copy into HTML directory.
+# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
+HTML_IMAGES =
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
+content_files = \
+ version.xml
+
+# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
+# These files must be listed here *and* in content_files
+# e.g. expand_content_files=running.sgml
+expand_content_files =
+
+# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
+# Only needed if you are using gtkdoc-scangobj to dynamically query widget
+# signals and properties.
+# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
+# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
+GTKDOC_CFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/shell \
+ -I$(top_builddir)/shell \
+ -I$(top_srcdir)/cut-n-paste/zoom-control/ \
+ -I$(top_srcdir)/cut-n-paste/toolbar-editor/ \
+ -I$(top_srcdir)/cut-n-paste/totem-screensaver/ \
+ -I$(top_srcdir)/libdocument \
+ -I$(top_builddir)/libdocument \
+ -I$(top_srcdir)/libview \
+ -I$(top_srcdir)/libmisc \
+ -I$(top_builddir)/libview \
+ -I$(top_srcdir)/properties \
+ -DEVINCEDATADIR=\"$(pkgdatadir)\" \
+ -DMATEDATADIR=\"$(datadir)\" \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DMATEICONDIR=\""$(datadir)/pixmaps"\" \
+ -DEVINCE_COMPILATION \
+ $(SHELL_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED) \
+ $(GTK_PRINT_CFLAGS)
+
+FILTER_OUT = \
+ $(top_builddir)/shell/main.o \
+ $(top_builddir)/shell/evinced-ev-daemon.o \
+ $(top_builddir)/shell/ev-convert-metadata.o
+
+GTKDOC_LIBS = \
+ $(top_builddir)/cut-n-paste/zoom-control/libephyzoom.la \
+ $(top_builddir)/cut-n-paste/toolbar-editor/libtoolbareditor.la \
+ $(top_builddir)/cut-n-paste/totem-screensaver/libtotemscrsaver.la \
+ $(top_builddir)/cut-n-paste/gimpcellrenderertoggle/libgimpcellrenderertoggle.la \
+ $(top_builddir)/cut-n-paste/smclient/libsmclient.la \
+ $(top_builddir)/properties/libevproperties.la \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(top_builddir)/libview/libevview.la \
+ $(top_builddir)/libmisc/libevmisc.la \
+ $(SHELL_LIBS) \
+ $(GTK_PRINT_LIBS) \
+ $(filter-out $(FILTER_OUT),$(wildcard $(top_builddir)/shell/*.o))
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+EXTRA_DIST += \
+ version.xml.in
+
+# Files not to distribute
+# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
+# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
+#DISTCLEANFILES +=
+
+# Comment this out if you want your docs-status tested during 'make check'
+if ENABLE_GTK_DOC
+#TESTS_ENVIRONMENT = cd $(srcsrc) &&
+#TESTS = $(GTKDOC_CHECK)
+endif
+
+-include $(top_srcdir)/git.mk
diff --git a/help/reference/shell/evince-docs.xml b/help/reference/shell/evince-docs.xml
new file mode 100644
index 00000000..a08acf76
--- /dev/null
+++ b/help/reference/shell/evince-docs.xml
@@ -0,0 +1,163 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+[
+ <!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
+ <!ENTITY version SYSTEM "version.xml">
+]>
+<book id="evince">
+ <!--
+ Copyright © 2009, 2010 Christian Persch
+
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU General Public License, Version 2
+ as published by the Free Software Foundation; or (at your option) any
+ later version.
+
+ A copy of the license is included in the COPYING file.
+ -->
+ <bookinfo>
+ <title>Evince Programmer's Reference Manual</title>
+ <releaseinfo>
+ For Evince version &version;.
+ The latest version of this documentation can be found on-line at the
+ <ulink role="online-location" url="http://library.mate.org/devel/evince/index.html">MATE Library</ulink>.
+ </releaseinfo>
+
+ <copyright>
+ <year>2007</year>
+ <year>2008</year>
+ <year>2009</year>
+ <holder>Nickolay V. Shmyrev</holder>
+ </copyright>
+
+ <copyright>
+ <year>2008</year>
+ <year>2009</year>
+ <year>2010</year>
+ <holder>Carlos Garcia Campos</holder>
+ </copyright>
+
+ <copyright>
+ <year>2009</year>
+ <year>2010</year>
+ <holder>Christian Persch</holder>
+ </copyright>
+
+ <legalnotice>
+ <para>
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the <citetitle>GNU General Public Licence</citetitle>
+ published by the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ You may obtain a copy of the <citetitle>GNU General Public Licence</citetitle>
+ from the Free Software Foundation at
+ <ulink type="http" url="http://www.gnu.org/licences/">GNU Licences web site</ulink>
+ or by writing to:
+
+ <address>
+ The Free Software Foundation, Inc.,
+ <street>51 Franklin St</street> – Fifth Floor,
+ <city>Boston</city>, <state>MA</state> <postcode>02110-1301</postcode>,
+ <country>USA</country>
+ </address>
+ </para>
+ </legalnotice>
+ </bookinfo>
+
+ <part id="evince-frontend">
+ <title>Frontend</title>
+ <partintro>
+ <para>
+ Evince frontend.
+ </para>
+ </partintro>
+
+ <xi:include href="xml/ev-sidebar-attachments.xml"/>
+ <xi:include href="xml/ev-properties-dialog.xml"/>
+ <xi:include href="xml/ev-properties-fonts.xml"/>
+ <xi:include href="xml/ev-sidebar-page.xml"/>
+ <xi:include href="xml/ev-open-recent-action.xml"/>
+ <xi:include href="xml/ev-application.xml"/>
+ <xi:include href="xml/ev-sidebar-thumbnails.xml"/>
+ <xi:include href="xml/ev-sidebar-links.xml"/>
+ <xi:include href="xml/ev-sidebar.xml"/>
+ <xi:include href="xml/ev-properties-license.xml"/>
+ <xi:include href="xml/ev-message-area.xml"/>
+ <xi:include href="xml/ev-progress-message-area.xml"/>
+ <xi:include href="xml/ev-metadata.xml"/>
+ <xi:include href="xml/ev-window.xml"/>
+ <xi:include href="xml/ev-history.xml"/>
+ <xi:include href="xml/ev-sidebar-layers.xml"/>
+ <xi:include href="xml/ev-password-view.xml"/>
+ <xi:include href="xml/eggfindbar.xml"/>
+ <xi:include href="xml/ev-media-player-keys.xml"/>
+ <xi:include href="xml/ev-navigation-action.xml"/>
+ <xi:include href="xml/ev-file-monitor.xml"/>
+ <xi:include href="xml/ev-page-action.xml"/>
+ <xi:include href="xml/ev-window-title.xml"/>
+ <xi:include href="xml/ev-navigation-action-widget.xml"/>
+ <xi:include href="xml/ev-application-service.xml"/>
+ <xi:include href="xml/ev-keyring.xml"/>
+ <xi:include href="xml/ev-utils.xml"/>
+ <xi:include href="xml/ev-page-action-widget.xml"/>
+ </part>
+
+ <chapter id="object-tree">
+ <title>Object Hierarchy</title>
+ <xi:include href="xml/tree_index.sgml"/>
+ </chapter>
+ <index id="api-index-full">
+ <title>API Index</title>
+ <xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
+ </index>
+ <!--
+ <index id="api-index-deprecated" role="deprecated">
+ <title>Index of deprecated symbols</title>
+ <xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
+ </index>
+ -->
+ <!--
+ <index id="api-index-2-30" role="2.30">
+ <title>Index of new symbols in 2.30</title>
+ <xi:include href="xml/api-index-2.30.xml"><xi:fallback /></xi:include>
+ </index>
+ -->
+
+ <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+
+ <appendix id="licence">
+ <title>Licence</title>
+
+ <para>
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the <citetitle>GNU General Public
+ Licence</citetitle> as published by the Free Software Foundation; either
+ version 2 of the Licence, or (at your option) any later version.
+ </para>
+
+ <para>
+ 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
+ <citetitle>GNU General Public Licence</citetitle> for
+ more details.
+ </para>
+
+ <para>
+ You may obtain a copy of the <citetitle>GNU General Public Licence</citetitle>
+ from the Free Software Foundation at
+ <ulink type="http" url="http://www.gnu.org/licences/">GNU Licences web site</ulink>
+ or by writing to:
+
+ <address>
+ The Free Software Foundation, Inc.,
+ <street>51 Franklin St</street> – Fifth Floor,
+ <city>Boston</city>, <state>MA</state> <postcode>02110-1301</postcode>,
+ <country>USA</country>
+ </address>
+ </para>
+ </appendix>
+
+</book>
diff --git a/help/reference/shell/evince-overrides.txt b/help/reference/shell/evince-overrides.txt
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/help/reference/shell/evince-overrides.txt
diff --git a/help/reference/shell/evince-sections.txt b/help/reference/shell/evince-sections.txt
new file mode 100644
index 00000000..a775f7e2
--- /dev/null
+++ b/help/reference/shell/evince-sections.txt
@@ -0,0 +1,472 @@
+<SECTION>
+<FILE>ev-sidebar-attachments</FILE>
+<TITLE>EvSidebarAttachments</TITLE>
+EvSidebarAttachments
+EvSidebarAttachmentsClass
+EvSidebarAttachmentsPrivate
+ev_sidebar_attachments_new
+<SUBSECTION Standard>
+EV_SIDEBAR_ATTACHMENTS
+EV_IS_SIDEBAR_ATTACHMENTS
+EV_TYPE_SIDEBAR_ATTACHMENTS
+ev_sidebar_attachments_get_type
+EV_SIDEBAR_ATTACHMENTS_CLASS
+EV_IS_SIDEBAR_ATTACHMENTS_CLASS
+EV_SIDEBAR_ATTACHMENTS_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-properties-dialog</FILE>
+EvPropertiesDialog
+EvPropertiesDialogClass
+EvPropertiesDialogPrivate
+ev_properties_dialog_new
+ev_properties_dialog_set_document
+<SUBSECTION Standard>
+EV_PROPERTIES_DIALOG
+EV_IS_PROPERTIES_DIALOG
+EV_TYPE_PROPERTIES_DIALOG
+ev_properties_dialog_get_type
+EV_PROPERTIES_DIALOG_CLASS
+EV_IS_PROPERTIES_DIALOG_CLASS
+EV_PROPERTIES_DIALOG_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-properties-fonts</FILE>
+EvPropertiesFonts
+EvPropertiesFontsClass
+EvPropertiesFontsPrivate
+EV_TYPE_PROPERTIES_FONTS
+EV_PROPERTIES_FONTS
+EV_PROPERTIES_FONTS_CLASS
+EV_PROPERTIES_FONTS_GET_CLASS
+ev_properties_fonts_new
+ev_properties_fonts_set_document
+<SUBSECTION Standard>
+EV_IS_PROPERTIES
+ev_properties_fonts_get_type
+EV_IS_PROPERTIES_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-sidebar-page</FILE>
+<TITLE>EvSidebarPage</TITLE>
+EV_SIDEBAR_PAGE_IFACE
+EV_IS_SIDEBAR_PAGE_IFACE
+EvSidebarPage
+EvSidebarPageIface
+ev_sidebar_page_support_document
+ev_sidebar_page_set_model
+ev_sidebar_page_get_label
+<SUBSECTION Standard>
+EV_SIDEBAR_PAGE
+EV_IS_SIDEBAR_PAGE
+EV_TYPE_SIDEBAR_PAGE
+ev_sidebar_page_get_type
+EV_SIDEBAR_PAGE_GET_IFACE
+</SECTION>
+
+<SECTION>
+<FILE>ev-open-recent-action</FILE>
+<TITLE>EvOpenRecentAction</TITLE>
+EvOpenRecentAction
+EvOpenRecentActionClass
+<SUBSECTION Standard>
+EV_OPEN_RECENT_ACTION
+EV_IS_OPEN_RECENT_ACTION
+EV_TYPE_OPEN_RECENT_ACTION
+ev_open_recent_action_get_type
+EV_OPEN_RECENT_ACTION_CLASS
+EV_IS_OPEN_RECENT_ACTION_CLASS
+EV_OPEN_RECENT_ACTION_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-application</FILE>
+EvApplication
+EvApplicationClass
+EV_APP
+ev_application_get_instance
+ev_application_shutdown
+ev_application_load_session
+ev_application_open_window
+ev_application_open_uri_at_dest
+ev_application_open_uri_list
+ev_application_has_window
+ev_application_get_uri
+ev_application_get_media_keys
+ev_application_set_filechooser_uri
+ev_application_get_filechooser_uri
+ev_application_screensaver_enable
+ev_application_screensaver_disable
+ev_application_get_dot_dir
+ev_application_get_data_dir
+<SUBSECTION Standard>
+EV_APPLICATION
+EV_IS_APPLICATION
+EV_TYPE_APPLICATION
+ev_application_get_type
+EV_APPLICATION_CLASS
+EV_IS_APPLICATION_CLASS
+EV_APPLICATION_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-sidebar-thumbnails</FILE>
+<TITLE>EvSidebarThumbnails</TITLE>
+EvSidebarThumbnails
+EvSidebarThumbnailsClass
+EvSidebarThumbnailsPrivate
+ev_sidebar_thumbnails_new
+<SUBSECTION Standard>
+EV_SIDEBAR_THUMBNAILS
+EV_IS_SIDEBAR_THUMBNAILS
+EV_TYPE_SIDEBAR_THUMBNAILS
+ev_sidebar_thumbnails_get_type
+EV_SIDEBAR_THUMBNAILS_CLASS
+EV_IS_SIDEBAR_THUMBNAILS_CLASS
+EV_SIDEBAR_THUMBNAILS_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-sidebar-links</FILE>
+<TITLE>EvSidebarLinks</TITLE>
+EvSidebarLinks
+EvSidebarLinksClass
+EvSidebarLinksPrivate
+ev_sidebar_links_new
+<SUBSECTION Standard>
+EV_SIDEBAR_LINKS
+EV_IS_SIDEBAR_LINKS
+EV_TYPE_SIDEBAR_LINKS
+ev_sidebar_links_get_type
+EV_SIDEBAR_LINKS_CLASS
+EV_IS_SIDEBAR_LINKS_CLASS
+EV_SIDEBAR_LINKS_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-sidebar</FILE>
+<TITLE>EvSidebar</TITLE>
+EvSidebar
+EvSidebarClass
+EvSidebarPrivate
+ev_sidebar_new
+ev_sidebar_add_page
+ev_sidebar_set_page
+ev_sidebar_set_model
+<SUBSECTION Standard>
+EV_SIDEBAR
+EV_IS_SIDEBAR
+EV_TYPE_SIDEBAR
+ev_sidebar_get_type
+EV_SIDEBAR_CLASS
+EV_IS_SIDEBAR_CLASS
+EV_SIDEBAR_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-properties-license</FILE>
+EvPropertiesLicense
+EvPropertiesLicenseClass
+EvPropertiesLicensePrivate
+ev_properties_license_new
+ev_properties_license_set_license
+<SUBSECTION Standard>
+EV_PROPERTIES_LICENSE
+EV_IS_PROPERTIES_LICENSE
+EV_TYPE_PROPERTIES_LICENSE
+ev_properties_license_get_type
+EV_PROPERTIES_LICENSE_CLASS
+EV_IS_PROPERTIES_LICENSE_CLASS
+EV_PROPERTIES_LICENSE_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-message-area</FILE>
+<TITLE>EvMessageArea</TITLE>
+EvMessageArea
+EvMessageAreaClass
+EvMessageAreaPrivate
+ev_message_area_new
+ev_message_area_set_image
+ev_message_area_set_image_from_stock
+ev_message_area_set_text
+ev_message_area_set_secondary_text
+<SUBSECTION Standard>
+EV_MESSAGE_AREA
+EV_IS_MESSAGE_AREA
+EV_TYPE_MESSAGE_AREA
+ev_message_area_get_type
+EV_MESSAGE_AREA_CLASS
+EV_IS_MESSAGE_AREA_CLASS
+EV_MESSAGE_AREA_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-progress-message-area</FILE>
+<TITLE>EvProgressMessageArea</TITLE>
+EvProgressMessageArea
+EvProgressMessageAreaClass
+EvProgressMessageAreaPrivate
+ev_progress_message_area_new
+ev_progress_message_area_set_status
+ev_progress_message_area_set_fraction
+<SUBSECTION Standard>
+EV_PROGRESS_MESSAGE_AREA
+EV_IS_PROGRESS_MESSAGE_AREA
+EV_TYPE_PROGRESS_MESSAGE_AREA
+ev_progress_message_area_get_type
+EV_PROGRESS_MESSAGE_AREA_CLASS
+EV_IS_PROGRESS_MESSAGE_AREA_CLASS
+EV_PROGRESS_MESSAGE_AREA_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-metadata</FILE>
+EvMetadata
+EvMetadataClass
+ev_metadata_new
+ev_metadata_get_string
+ev_metadata_set_string
+ev_metadata_get_int
+ev_metadata_set_int
+ev_metadata_get_double
+ev_metadata_set_double
+ev_metadata_get_boolean
+ev_metadata_set_boolean
+ev_is_metadata_supported_for_file
+<SUBSECTION Standard>
+EV_METADATA
+EV_IS_METADATA
+EV_TYPE_METADATA
+ev_metadata_get_type
+EV_METADATA_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-window</FILE>
+<TITLE>EvWindow</TITLE>
+EvWindowRunMode
+EvPrintRange
+EvPrintPageSet
+EvWindow
+EvWindowClass
+EvWindowPrivate
+ev_window_new
+ev_window_get_uri
+ev_window_open_uri
+ev_window_open_document
+ev_window_is_empty
+ev_window_print_range
+<SUBSECTION Standard>
+EV_WINDOW
+EV_IS_WINDOW
+EV_TYPE_WINDOW
+ev_window_get_type
+EV_WINDOW_CLASS
+EV_IS_WINDOW_CLASS
+EV_WINDOW_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-history</FILE>
+<TITLE>EvHistory</TITLE>
+EvHistory
+EvHistoryPrivate
+EvHistoryClass
+ev_history_new
+ev_history_add_link
+ev_history_get_link_nth
+ev_history_get_n_links
+<SUBSECTION Standard>
+EV_HISTORY
+EV_IS_HISTORY
+EV_TYPE_HISTORY
+ev_history_get_type
+EV_HISTORY_CLASS
+EV_IS_HISTORY_CLASS
+EV_HISTORY_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-sidebar-layers</FILE>
+<TITLE>EvSidebarLayers</TITLE>
+EvSidebarLayers
+EvSidebarLayersClass
+EvSidebarLayersPrivate
+ev_sidebar_layers_new
+<SUBSECTION Standard>
+EV_SIDEBAR_LAYERS
+EV_IS_SIDEBAR_LAYERS
+EV_TYPE_SIDEBAR_LAYERS
+ev_sidebar_layers_get_type
+EV_SIDEBAR_LAYERS_CLASS
+EV_IS_SIDEBAR_LAYERS_CLASS
+EV_SIDEBAR_LAYERS_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-password-view</FILE>
+<TITLE>EvPasswordView</TITLE>
+EvPasswordView
+EvPasswordViewClass
+EvPasswordViewPrivate
+ev_password_view_new
+ev_password_view_set_uri
+ev_password_view_ask_password
+ev_password_view_get_password
+ev_password_view_get_password_save_flags
+<SUBSECTION Standard>
+EV_PASSWORD_VIEW
+EV_IS_PASSWORD_VIEW
+EV_TYPE_PASSWORD_VIEW
+ev_password_view_get_type
+</SECTION>
+
+<SECTION>
+<FILE>eggfindbar</FILE>
+<TITLE>EggFindBar</TITLE>
+EggFindBar
+EggFindBarClass
+EggFindBarPrivate
+egg_find_bar_new
+egg_find_bar_set_search_string
+egg_find_bar_get_search_string
+egg_find_bar_set_case_sensitive
+egg_find_bar_get_case_sensitive
+egg_find_bar_get_all_matches_color
+egg_find_bar_get_current_match_color
+egg_find_bar_set_status_text
+<SUBSECTION Standard>
+EGG_FIND_BAR
+EGG_IS_FIND_BAR
+EGG_TYPE_FIND_BAR
+egg_find_bar_get_type
+EGG_FIND_BAR_CLASS
+EGG_IS_FIND_BAR_CLASS
+EGG_FIND_BAR_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-media-player-keys</FILE>
+EvMediaPlayerKeys
+EvMediaPlayerKeysClass
+ev_media_player_keys_new
+ev_media_player_keys_focused
+<SUBSECTION Standard>
+EV_MEDIA_PLAYER_KEYS
+EV_IS_MEDIA_PLAYER_KEYS
+EV_TYPE_MEDIA_PLAYER_KEYS
+ev_media_player_keys_get_type
+EV_MEDIA_PLAYER_KEYS_CLASS
+EV_IS_MEDIA_PLAYER_KEYS_CLASS
+EV_MEDIA_PLAYER_KEYS_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-navigation-action</FILE>
+<TITLE>EvNavigationAction</TITLE>
+EvNavigationAction
+EvNavigationActionPrivate
+EvNavigationActionClass
+ev_navigation_action_set_history
+<SUBSECTION Standard>
+EV_NAVIGATION_ACTION
+EV_IS_NAVIGATION_ACTION
+EV_TYPE_NAVIGATION_ACTION
+ev_navigation_action_get_type
+EV_NAVIGATION_ACTION_CLASS
+EV_IS_NAVIGATION_ACTION_CLASS
+EV_NAVIGATION_ACTION_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-file-monitor</FILE>
+<TITLE>EvFileMonitor</TITLE>
+EvFileMonitor
+EvFileMonitorClass
+EvFileMonitorPrivate
+ev_file_monitor_new
+<SUBSECTION Standard>
+EV_FILE_MONITOR
+EV_IS_FILE_MONITOR
+EV_TYPE_FILE_MONITOR
+ev_file_monitor_get_type
+EV_FILE_MONITOR_CLASS
+EV_IS_FILE_MONITOR_CLASS
+EV_FILE_MONITOR_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-page-action</FILE>
+<TITLE>EvPageAction</TITLE>
+EvPageAction
+EvPageActionPrivate
+EvPageActionClass
+ev_page_action_set_model
+ev_page_action_set_links_model
+ev_page_action_grab_focus
+<SUBSECTION Standard>
+EV_PAGE_ACTION
+EV_IS_PAGE_ACTION
+EV_TYPE_PAGE_ACTION
+ev_page_action_get_type
+EV_PAGE_ACTION_CLASS
+EV_IS_PAGE_ACTION_CLASS
+EV_PAGE_ACTION_GET_CLASS
+</SECTION>
+
+<SECTION>
+<FILE>ev-window-title</FILE>
+EvWindowTitle
+EvWindowTitleType
+ev_window_title_new
+ev_window_title_set_type
+ev_window_title_set_document
+ev_window_title_set_uri
+ev_window_title_free
+</SECTION>
+
+<SECTION>
+<FILE>ev-navigation-action-widget</FILE>
+<TITLE>EvNavigationActionWidget</TITLE>
+EV_TYPE_NAVIGATION_ACTION_WIDGET
+EV_NAVIGATION_ACTION_WIDGET
+EvNavigationActionWidget
+EvNavigationActionWidgetClass
+ev_navigation_action_widget_get_type
+ev_navigation_action_widget_set_menu
+</SECTION>
+
+<SECTION>
+<FILE>ev-keyring</FILE>
+ev_keyring_is_available
+ev_keyring_lookup_password
+ev_keyring_save_password
+</SECTION>
+
+<SECTION>
+<FILE>ev-utils</FILE>
+ev_pixbuf_add_shadow
+ev_print_region_contents
+ev_gui_menu_position_tree_selection
+get_num_monitors
+get_screen_dpi
+file_chooser_dialog_add_writable_pixbuf_formats
+get_gdk_pixbuf_format_by_extension
+</SECTION>
+
+<SECTION>
+<FILE>ev-page-action-widget</FILE>
+<TITLE>EvPageActionWidget</TITLE>
+EV_TYPE_PAGE_ACTION_WIDGET
+EV_PAGE_ACTION_WIDGET
+EvPageActionWidget
+EvPageActionWidgetClass
+ev_page_action_widget_get_type
+ev_page_action_widget_update_links_model
+ev_page_action_widget_set_model
+ev_page_action_widget_grab_focus
+</SECTION>
diff --git a/help/reference/shell/evince.types b/help/reference/shell/evince.types
new file mode 100644
index 00000000..dea7db50
--- /dev/null
+++ b/help/reference/shell/evince.types
@@ -0,0 +1,24 @@
+egg_find_bar_get_type
+ev_application_get_type
+ev_file_monitor_get_type
+ev_history_get_type
+ev_media_player_keys_get_type
+ev_message_area_get_type
+ev_metadata_get_type
+ev_navigation_action_get_type
+ev_navigation_action_widget_get_type
+ev_open_recent_action_get_type
+ev_page_action_get_type
+ev_page_action_widget_get_type
+ev_password_view_get_type
+ev_progress_message_area_get_type
+ev_properties_dialog_get_type
+ev_properties_fonts_get_type
+ev_properties_license_get_type
+ev_sidebar_attachments_get_type
+ev_sidebar_get_type
+ev_sidebar_layers_get_type
+ev_sidebar_links_get_type
+ev_sidebar_page_get_type
+ev_sidebar_thumbnails_get_type
+ev_window_get_type
diff --git a/help/reference/shell/version.xml.in b/help/reference/shell/version.xml.in
new file mode 100644
index 00000000..27323dad
--- /dev/null
+++ b/help/reference/shell/version.xml.in
@@ -0,0 +1 @@
+@VERSION@ \ No newline at end of file
diff --git a/help/ru/ru.po b/help/ru/ru.po
new file mode 100644
index 00000000..ce24a89c
--- /dev/null
+++ b/help/ru/ru.po
@@ -0,0 +1,1238 @@
+# Russian translation for Evince documentation.
+#
+# Copyright 2008, Free Software Foundation Inc.
+
+
+msgid ""
+msgstr ""
+"Project-Id-Version: evince 0.2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-04-06 03:16+0100\n"
+"PO-Revision-Date: 2008-07-20 01:14+0400\n"
+"Last-Translator: Nickolay V. Shmyrev <[email protected]>\n"
+"Language-Team: Russian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:155(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Руководство по приложению просмотра документов Evince"
+
+#: C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr ""
+"Приложение для просмотра документов Evince позволяет просматривать документы "
+"различных форматов, таких как файлы в формате PDF и PostScript"
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder) C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Николай В. Шмырёв"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder) C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername) C/evince.xml:67(orgname)
+#: C/evince.xml:93(para) C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "Проект документирования MATE"
+
+#: C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Следующим разрешается копировать, распространять и модифицировать этот документ при "
+"условии соблюдения GNU Free Documentation License (GFDL), версии 1.1 или "
+"любой более поздней опубликованной ассоциацией свободного программного "
+"обеспечения версией без неизменяемых частей, без текстов на обложках. Вы "
+"можете найти копию лицензии по этой <ulink type=\"help\" url=\"ghelp:fdl"
+"\">ссылке</ulink> или в файле COPYING-DOCS, распространяемом с этим "
+"документом."
+
+#: C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Этот документ является частью документации MATE распространяемой под "
+"лицензией GFDL. Если вы хотите распространять этот документ отдельно от "
+"общей документации, вы должны приложить копию лицензии к документу, как "
+"написано в части 6 лицензии."
+
+#: C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Некоторые имена и марки используются компаниями для обозначения их продуктов "
+"и услуг и являются торговыми марками. Эти марки присутствуют в документации "
+"и члены проекта документирования MATE знают об этом. Имена выделяются "
+"заглавными буквами или начальной заглавной буквой."
+
+#: C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"ДОКУМЕНТ РАСПРОСТРАНЯЕТСЯ \"КАК ЕСТЬ\", БЕЗ ВСЯКИХ ГАРАНТИЙ, ПРИДУМАННЫХ ИЛИ "
+"УНАСЛЕДОВАННЫХ, БЕЗ ОГРАНИЧЕНИЙ, ГАРАНТИЙ ТОГО, ЧТО ДОКУМЕНТ ИЛИ "
+"МОДИФИЦИРОВАННАЯ ВЕРСИЯ ДОКУМЕНТА СВОБОДНА ОТ ДЕФЕКТОВ, ТОЛЬКО ДЛЯ "
+"СПЕЦИАЛЬНОГО ИСПОЛЬЗОВАНИЯ, НЕ ЗАКЛЮЧАЩЕГО В СЕБЕ РИСКИ КАЧЕСТВА, "
+"АККУРАТНОСТИ ИЛИ СООТВЕТСТВИЯ ДОКУМЕНТА ИЛИ ИЗМЕНЁННЫХ ВЕРСИЙ ДОКУМЕНТА "
+"ВАШИМ ТРЕБОВАНИЯМ. ЕСЛИ ДОКУМЕНТ ИЛИ МОДИФИЦИРОВАННАЯ ВЕРСИЯ ДОКУМЕНТА ИМЕЕТ "
+"НЕДОСТАТКИ, ВЫ (А НЕ АВТОР ДОКУМЕНТА ИЛИ ЕГО ПОМОЩНИКИ) ДОЛЖНЫ САМИ ПРИЛОЖИТЬ "
+"УСИЛИЯ К ЕГО ДОРАБОТКЕ, КОРРЕКЦИИ ИЛИ ВОССТАНОВЛЕНИЮ. ЭТО ПРЕДУПРЕЖДЕНИЕ "
+"СОСТАВЛЯЕТ СУЩЕСТВЕННУЮ ЧАСТЬ ЛИЦЕНЗИИ. ДОКУМЕНТ НЕ ДОЛЖЕН ИСПОЛЬЗОВАТЬСЯ "
+"БЕЗ ДАННОГО ПРЕДУПРЕЖДЕНИЯ И"
+
+#: C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ И НИ ПРИ КАКОМ ЗАКОННОМ СПОСОБЕ, НИ ПО КАКОМУ "
+"СОГЛАШЕНИЮ ИЛИ ДРУГОЙ ПРИЧИНЕ, АВТОР, СОЗДАТЕЛЬ ИЛИ ПОМОЩНИКИ НЕ НЕСУТ "
+"ОТВЕТСТВЕННОСТЬ ЗА ПРЯМОЕ, КОСВЕННОЕ, СПЕЦИАЛЬНОЕ, СЛУЧАЙНОЕ ИЛИ "
+"ПРЕДНАМЕРЕННОЕ ПОВРЕЖДЕНИЕ ЛЮБОГО СВОЙСТВА, ВКЛЮЧАЯ БЕЗ ОГРАНИЧЕНИЯ ПОТЕРЮ "
+"РЕПУТАЦИИ, РАБОТОСПОСОБНОСТИ, КОМПЬЮТЕРНЫЕ СБОИ ИЛИ НЕПРАВИЛЬНОЕ "
+"ВЗАИМОДЕЙСТВИЕ, ВМЕСТЕ ИЛИ ПО ОТДЕЛЬНОСТИ. НИКАКИЕ ПОВРЕЖДЕНИЯ И ПОТЕРИ НЕ "
+"МОГУТ БЫТЬ ВОЗЛОЖЕНЫ НА АВТОРА ДОКУМЕНТА ИЛИ МОДИФИЦИРОВАННОЙ ВЕРСИИ "
+"ДОКУМЕНТА, ДАЖЕ ЕСЛИ СТОРОНА БЫЛА ПРОИНФОРМИРОВАНА О ВОЗМОЖНОСТИ ТАКИХ "
+"ПОВРЕЖДЕНИЙ."
+
+#: C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"ДОКУМЕНТ И ИЗМЕНЁННЫЕ ВЕРСИИ ДОКУМЕНТА ПРЕДСТАВЛЯЮТСЯ ПОЛЬЗОВАТЕЛЮ ПОД "
+"ЛИЦЕНЗИЕЙ GNU FREE DOCUMENTATION LICENSE С УВЕДОМЛЕНИЕМ О ТОМ, ЧТО "
+"<placeholder-1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "Команда документирования MATE"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Николай В."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Шмырёв"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Документация по приложению просмотра документов Evince версия 1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "2008-04-05"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Документация по приложению просмотра документов Evince версия 1.0"
+
+#: C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "2005-04-06"
+
+#: C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr ""
+"Эта документация описывает приложение просмотра документов Evince версии 0.2"
+
+#: C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "Обратная связь"
+
+#: C/evince.xml:110(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"Для того чтобы сообщить о проблеме или сделать предложение для приложения "
+"Evince или по этому документу, следуйте инструкцим по <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">Обратной связи MATE</ulink>."
+
+#: C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Просмотр документво Evince"
+
+#: C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "Введение"
+
+#: C/evince.xml:129(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+"Приложение <application>Evince</application> позволяет вам просматривать "
+"документы различных форматов, таких как файлы Portable Document Format (PDF) "
+"и Postscript. Приложение <application>Evince</application> следует "
+"стандартам MATE и Freedesktop.org и предлагает пользователю полную "
+"интеграцию в рабочую среду."
+
+#: C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "Начало работы"
+
+#: C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Запуск приложения просмотра документов Evince"
+
+#: C/evince.xml:140(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+"Приложение <application>Evince</application> запускается, когда вы "
+"открываете документы формата PDF или PostScript."
+
+#: C/evince.xml:141(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+"Также можно запустить приложение <application>Evince</application> из "
+"командной строки, выполнив команду <command>evince</command>."
+
+#: C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "После запуска приложения просмотра документов Evince"
+
+#: C/evince.xml:147(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"Когда вы запустите <application>Приложение Evince</application>, появится "
+"следующее окно."
+
+#: C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Главное окно приложения просмотра документов"
+
+#: C/evince.xml:158(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+"Показывает главное окно приложения просмотра документов Evince. В этом окне "
+"есть заголовок, панель инструментов, рабочая область, меню. Меню содержит "
+"подпункты Файл, Правка, Вид, Переход и Справка."
+
+#: C/evince.xml:164(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+"Окно приложения <application>Evince</application> содержит следующие "
+"элементы:"
+
+#: C/evince.xml:168(term) C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "Меню"
+
+#: C/evince.xml:170(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+"Меню содержит все действия, которые вы можете производить над докуметом в "
+"приложении просмотра документов <application>Evince</application>"
+
+#: C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "Панель инструментов"
+
+#: C/evince.xml:176(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr ""
+"Панель инструментов содержит наиболее часто употребляемые действия из меню."
+
+#: C/evince.xml:180(term)
+msgid "Display area"
+msgstr "Рабочая область"
+
+#: C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "Рабочая область отображает содержимое документа."
+
+#: C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "Графический компонент"
+
+#: C/evince.xml:198(para) C/evince.xml:646(para)
+msgid "Action"
+msgstr "Действие"
+
+#: C/evince.xml:203(para)
+msgid "Window"
+msgstr "Окно"
+
+#: C/evince.xml:207(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+"Перенесите файл в окно приложения <application>Evince</application> из "
+"другого приложения, такого как файловый менеджер."
+
+#: C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Двойной щелчёк на имени файла в менеджере файлов"
+
+#: C/evince.xml:217(para) C/evince.xml:244(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+"Выберите <menuchoice><guimenu>Файл</guimenu><guimenuitem>Открыть</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "Быстрые клавиши"
+
+#: C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "Нажмите <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:187(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+msgstr ""
+"В приложении <application>Evince</application>, вы можете производить "
+"действия несколькими способами. Например, можно открыть документ следующим "
+"образом: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+
+#: C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Это руководство описывает функциональность, доступную из меню"
+
+#: C/evince.xml:236(title)
+msgid "Usage"
+msgstr "Использование"
+
+#: C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "Открытие"
+
+#: C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Для того, чтобы открыть документ, выполните следующие шаги:"
+
+#: C/evince.xml:248(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want "
+"to open."
+msgstr "В диалоге <guilabel>Открыть файл</guilabel> выберите нужный файл."
+
+#: C/evince.xml:253(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+"Нажмите <guibutton>Открыть</guibutton>. Приложение <application>Evince</"
+"application> покажет имя документа в титульной строке окна."
+
+#: C/evince.xml:258(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+"Для того, чтобы открыть другой документ используйте "
+"<menuchoice><guimenu>Файл</guimenu><guimenuitem>Открыть</guimenuitem></"
+"menuchoice> снова. Приложение <application>Evince</application> создает "
+"новое окно для каждого нового файла."
+
+#: C/evince.xml:261(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+"Если вы попытаетесь открыть документ, формат которого приложение "
+"<application>Evince</application> не распознаёт, появится диалог, извещающий "
+"об ошибке."
+
+#: C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "Перемещения"
+
+#: C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Вы можете перемещаться по документу следующими способами:"
+
+#: C/evince.xml:271(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+"Для перехода к следующей странице, выберите в меню "
+"<menuchoice><guimenu>Переход</guimenu><guimenuitem>Следующая</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:275(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+"Для перехода к предыдущей странице, выберите в меню "
+"<menuchoice><guimenu>Переход</guimenu><guimenuitem>Предыдущая</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:279(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+"Для перехода к первой странице, выберите в меню "
+"<menuchoice><guimenu>Переход</guimenu><guimenuitem>Начало</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:283(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+"Для перехода к последней странице, выберите в меню "
+"<menuchoice><guimenu>Переход</guimenu><guimenuitem>Конец</guimenuitem></"
+"menuchoice>."
+
+#: C/evince.xml:287(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+"Для перехода к заданной странице, введите её номер или метку в текстовом "
+"поле на панели инструменов и нажмите <keycap>Ввод</keycap>."
+
+#: C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "Прокрутка страниц"
+
+#: C/evince.xml:295(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+"Для отображения скрытого содержимого страницы, используйте следующие "
+"действия:"
+
+#: C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Прокручивайте окно с помощью стрелок или пробела на клавиатуре."
+
+#: C/evince.xml:301(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+msgstr ""
+"Захватите документ средней кнопкой мыши и перетащите в противоположном желаемому "
+"направлении. Например, чтобы прокрутить документ вниз, перетащите рабочую "
+"область к верху окна."
+
+#: C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "Используйте элементы прокрутки окна."
+
+#: C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "Изменение размера страницы"
+
+#: C/evince.xml:312(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr "Для изменения размера страницы сделайте следующее:"
+
+#: C/evince.xml:317(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+"Для увеличения размера страницы, выберите <menuchoice><guimenu>Вид</"
+"guimenu><guimenuitem>Увеличить</guimenuitem></menuchoice>."
+
+#: C/evince.xml:322(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+"Для уменьшения размера страницы, выберите <menuchoice><guimenu>Вид</"
+"guimenu><guimenuitem>Уменьшить</guimenuitem></menuchoice>."
+
+#: C/evince.xml:327(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+"Для того, чтобы сделать ширину страницы равной ширине окна приложения "
+"<application>Evince</application>, выберите <menuchoice><guimenu>Вид</"
+"guimenu><guimenuitem>По ширине</guimenuitem></menuchoice>."
+
+#: C/evince.xml:332(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+"Для того, чтобы уместить страницу в окне приложения <application>Evince</"
+"application>, выберите <menuchoice><guimenu>Вид</"
+"guimenu><guimenuitem>Уместить в окне</guimenuitem></menuchoice>."
+
+#: C/evince.xml:337(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+"Чтобы развернуть окно приложения <application>Evince</application> на весь "
+"экран, выберите <menuchoice><guimenu>Вид</guimenu><guimenuitem>Во весь "
+"экран</guimenuitem></menuchoice>. Чтобы вернуться к начальному состоянию, "
+"нажмите на кнопку <guibutton>Выйти из полноэкранного режима</guibutton>."
+
+#: C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr "Просмотр страниц или структуры"
+
+#: C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr ""
+"Для просмотра страниц или структуры документа произведите следующие действия:"
+
+#: C/evince.xml:350(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"Выберите <menuchoice><guimenu>Вид</guimenu><guimenuitem>Боковая панель</"
+"guimenuitem></menuchoice> или нажмите <keycap>F9</keycap>."
+
+#: C/evince.xml:355(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+"Используйте выпадающий список для выбора нужного элемента - структуры "
+"документа или страниц на боковой панели."
+
+#: C/evince.xml:360(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+"Используйте полосы прокрутки на боковой панели для отображения требуемой "
+"ссылки или страницы."
+
+#: C/evince.xml:365(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+"Щёлкните мышью на элементе чтобы отобразить его в основной области. Нажмите "
+"на страницу чтобы показать её."
+
+#: C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "Свойства"
+
+#: C/evince.xml:372(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"Для просмотра свойств документа, выберите <menuchoice><guimenu>Файл</"
+"guimenu><guimenuitem>Свойства</guimenuitem></menuchoice>."
+
+#: C/evince.xml:378(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+"Диалог <guilabel>Свойства</guilabel> показывает всю доступную информацию"
+
+#: C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "Печать"
+
+#: C/evince.xml:385(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"Для печати документа выберите <menuchoice><guimenu>Файл</"
+"guimenu><guimenuitem>Печать</guimenuitem></menuchoice>."
+
+#: C/evince.xml:389(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+"Если вы не можете выбрать <guimenuitem>Печать</guimenuitem> в меню, значит "
+"автор документа запретил его печать. Чтобы получить возможность напечатать "
+"документ, вы должны ввести главный пароль при открытии документа. Смотрите "
+"часть <xref linkend=\"evince-password\"/> где описана работа с защищёнными "
+"файлами."
+
+#: C/evince.xml:393(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr "Диалог <guilabel>Печать</guilabel> имеет следующие вкладки:"
+
+#: C/evince.xml:399(link) C/evince.xml:415(title)
+msgid "Job"
+msgstr "Задание"
+
+#: C/evince.xml:404(link) C/evince.xml:437(title) C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr "Принтер"
+
+#: C/evince.xml:409(link) C/evince.xml:531(title)
+msgid "Paper"
+msgstr "Бумага"
+
+#: C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "Промежуток страниц"
+
+#: C/evince.xml:419(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+"Выберите одну из следующих возможностей для задания количества печатаемых "
+"страниц:"
+
+#: C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "Все"
+
+#: C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Выберите эту возможно для печати всех страниц документа"
+
+#: C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "Страницы от"
+
+#: C/evince.xml:427(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"Выберите этот вариант для печати заданного промежутка страниц. Используйте "
+"поля ввода чисел для задания первой и последней страницы промежутка."
+
+#: C/evince.xml:441(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr "Используйте этот выпадающий список для выбора нужного принтера."
+
+#: C/evince.xml:443(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+"Функция <guilabel>Создать документ PDF</guilabel> не поддерживается в этой "
+"версии приложения <application>Evince</application>."
+
+#: C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "Настройки"
+
+#: C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "Используйте этот выпадающий список для изменения настроек принтера."
+
+#: C/evince.xml:453(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+"Для настройки принтера, нажмите <guibutton>Настроить</guibutton>. Например, "
+"можно выключать или выключать дуплексный режим, планировать печать по "
+"расписанию, если эта функциональность поддерживается принтером."
+
+#: C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "Положение"
+
+#: C/evince.xml:459(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr "Используйте выпадающий список для выбора одного из принтеров:"
+
+#: C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Печатать документ используя систему печати CUPS."
+
+#: C/evince.xml:470(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+"Если выбранный принтер работает через систему CUPS, единственной меткой в "
+"поле будет <guilabel>CUPS</guilabel>."
+
+#: C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "Отправить документ прямо на принтер."
+
+#: C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "Файл"
+
+#: C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "Печатать документ в файл PostScript."
+
+#: C/evince.xml:490(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+"Нажмите <guibutton>Сохранить как</guibutton> и введите путь к создаваемому "
+"файлу в появившемся диалоге."
+
+#: C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "Другое"
+
+#: C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "Задать команду для печати документа."
+
+#: C/evince.xml:501(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr "Задайте команду в поле ввода. Не забудьте про аргументы."
+
+#: C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "Состояние"
+
+#: C/evince.xml:511(para) C/evince.xml:517(para) C/evince.xml:523(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+"Эта функция не поддерживается в этой версии <application>Evince</"
+"application>."
+
+#: C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "Тип"
+
+#: C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "Комментарий"
+
+#: C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "Размер бумаги"
+
+#: C/evince.xml:535(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+"Используйте выпадающий список для выбора размера бумаги для печати документа."
+
+#: C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "Ширина"
+
+#: C/evince.xml:540(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+"Используйте поле ввода чисел для задания ширины бумаги. Используйте "
+"дополнительный выпадающий список для задания единиц измерения."
+
+#: C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "Высота"
+
+#: C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Используйте поле ввода чисел для задания высоты бумаги."
+
+#: C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "Ориентация подачи"
+
+#: C/evince.xml:550(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr ""
+"Используйте выпадающий список для задания ориентации бумаги в принтере."
+
+#: C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr "Ориентация страниц"
+
+#: C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "Используйте выпадающий список для задания ориентации страниц."
+
+#: C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr "Расположение"
+
+#: C/evince.xml:560(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"Используейте выпадающий список для выбора расположения страниц. "
+"Предварительно результат показывается в области <guilabel>Образец</guilabel>."
+
+#: C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr "Поток печати"
+
+#: C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Используйте выпадающий список чтобы выбрать поток печати."
+
+#: C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "Создание копии"
+
+#: C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Для создания копии документа, выполните следующее:"
+
+#: C/evince.xml:580(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Выберите <menuchoice><guimenu>Файл</guimenu><guimenuitem>Сохранить копию</"
+"guimenuitem></menuchoice>."
+
+#: C/evince.xml:585(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+"Введите новое имя файла в поле ввода <guilabel>Имя</guilabel> в диалоге "
+"<guilabel>Сохранить копию</guilabel> dialog."
+
+#: C/evince.xml:588(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+"Если необходимо, задайте расположение нового документа. По умолчанию, копии "
+"сохраняются в домашний каталог пользователя."
+
+#: C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Нажмите <guibutton>Сохранить</guibutton>"
+
+#: C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Работа с защищёнными документами"
+
+#: C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr ""
+"Автор может использовать следующие уровни доступа для защиты документа:"
+
+#: C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr "Пароль пользователя который позволяет другим читать этот документ."
+
+#: C/evince.xml:612(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+"Главный пароль который позволяет другим производить дополнительные действия, "
+"например, печатать документ."
+
+#: C/evince.xml:616(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+"Когда вы пытаетесь открыть документ, защищённый паролем, "
+"<application>Evince</application> представит диалог. Введите пароль "
+"пользователя или главный пароль в поле ввода пароля, потом нажмите на кнопку "
+"<guibutton>ОК</guibutton>."
+
+#: C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "Завершение работы"
+
+#: C/evince.xml:624(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"Для того, чтобы закрыть документ, выберите <menuchoice><guimenu>Файл</"
+"guimenu><guimenuitem>Закрыть</guimenuitem></menuchoice>."
+
+#: C/evince.xml:626(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+"Если закрыто последнее окно приложения <application>Evince</application>, "
+"приложение завершит работу."
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Быстрые клавиши"
+
+#: C/evince.xml:636(para)
+msgid ""
+"Below is a list of all shortcuts present in <application>Evince Document "
+"Viewer</application>:"
+msgstr ""
+"Ниже перечислены клавиатурные комбинации <application>Evince</"
+"application>."
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Клавиатурные комбинации"
+
+#: C/evince.xml:651(keycap) C/evince.xml:655(keycap) C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap) C/evince.xml:667(keycap) C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap) C/evince.xml:682(keycap) C/evince.xml:701(keycap)
+#: C/evince.xml:747(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Открыть документ"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Сохранить копию текущего документа"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "Напечатать документ"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Закрыть окно"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Скопировать выделение"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Выделить всё"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (слеш)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Найти слово или фразу в документе"
+
+#: C/evince.xml:682(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:683(para)
+msgid "Find next"
+msgstr "Найти следующее вхождение слова"
+
+#: C/evince.xml:687(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr "<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (знак плюс)"
+
+#: C/evince.xml:688(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:689(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:691(para)
+msgid "Zoom in"
+msgstr "Увеличить масштаб"
+
+#: C/evince.xml:695(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr "<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo>. (знак минус)"
+
+#: C/evince.xml:696(keycap)
+msgid "-"
+msgstr "-"
+
+#: C/evince.xml:698(para)
+msgid "Zoom out"
+msgstr "Уменьшить масштаб"
+
+#: C/evince.xml:701(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:702(para)
+msgid "Reload the document"
+msgstr "Перечитать документ"
+
+#: C/evince.xml:706(keycap) C/evince.xml:731(keycap)
+msgid "Page Up"
+msgstr "Page Up"
+
+#: C/evince.xml:707(para)
+msgid "Go to the previous page"
+msgstr "Перейти к предыдущей странице"
+
+#: C/evince.xml:710(keycap) C/evince.xml:735(keycap)
+msgid "Page Down"
+msgstr "Page Down"
+
+#: C/evince.xml:711(para)
+msgid "Go to the next page"
+msgstr "Перейти к следующей странице"
+
+#: C/evince.xml:715(keycap) C/evince.xml:723(keycap)
+msgid "Space"
+msgstr "Пробел"
+
+#: C/evince.xml:716(keycap) C/evince.xml:723(keycap) C/evince.xml:725(keycap)
+#: C/evince.xml:731(keycap) C/evince.xml:735(keycap)
+msgid "Shift"
+msgstr "Shift"
+
+#: C/evince.xml:716(keycap) C/evince.xml:724(keycap)
+msgid "Backspace"
+msgstr "Backspace"
+
+#: C/evince.xml:717(keycap) C/evince.xml:725(keycap)
+msgid "Return"
+msgstr "Return"
+
+#: C/evince.xml:719(para)
+msgid "Scroll forward"
+msgstr "Прокрутить вперёд"
+
+#: C/evince.xml:727(para)
+msgid "Scroll backward"
+msgstr "Прокрутить назад"
+
+#: C/evince.xml:732(para)
+msgid "Go a bunch of pages up"
+msgstr "Перейти на несколько страниц вверх"
+
+#: C/evince.xml:736(para)
+msgid "Go a bunch of pages down"
+msgstr "Перейти на несколько страниц вниз"
+
+#: C/evince.xml:739(keycap)
+msgid "Home"
+msgstr "Home"
+
+#: C/evince.xml:740(para)
+msgid "Go to the first page"
+msgstr "Перейти к первой странице"
+
+#: C/evince.xml:743(keycap)
+msgid "End"
+msgstr "End"
+
+#: C/evince.xml:744(para)
+msgid "Go to the last page"
+msgstr "Перейти к последней странице"
+
+#: C/evince.xml:747(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:748(para)
+msgid "Go to page by number or label"
+msgstr "Перейти к странице по номеру или по метке"
+
+#: C/evince.xml:751(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:752(para)
+msgid "Help"
+msgstr "Показать справку"
+
+#: C/evince.xml:755(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:756(para)
+msgid "Run document as presentation"
+msgstr "Перейти в режим презентации"
+
+#: C/evince.xml:759(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:760(para)
+msgid "Show or hide the side pane"
+msgstr "Показать или скрыть боковую панель"
+
+#: C/evince.xml:763(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:764(para)
+msgid "Toggle fullscreen mode"
+msgstr "Перейти в полноэкранный режим"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+"Николай В. Шмырёв, 2006\n"
+"Тимур Р. Салихов, 2008"
diff --git a/help/sl/sl.po b/help/sl/sl.po
new file mode 100644
index 00000000..28c3701c
--- /dev/null
+++ b/help/sl/sl.po
@@ -0,0 +1,906 @@
+# Slovenian translation for evince-help.
+# This file is distributed under the same license as the evince-help package.
+# Andrej Žnidaršič <[email protected]>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: Evince documentation\n"
+"POT-Creation-Date: 2010-04-25 16:28+0000\n"
+"PO-Revision-Date: \n"
+"Last-Translator: Andrej Žnidaršič <[email protected]>\n"
+"Language-Team: Slovenian MATE Translation Team <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
+"X-Poedit-Language: Slovenian\n"
+"X-Poedit-Country: SLOVENIA\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:155(None)
+msgid "@@image: 'figures/evince_start_window.png'; md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Priročnik Evince pregledovalnika dokumentov"
+
+#: C/evince.xml:27(para)
+msgid "The Evince Document Viewer application enables you to view documents of various formats like Portable Document Format (PDF) files and PostScript files"
+msgstr "Evince pregledovalnik dokumentov vam omogoča ogled dokumentov različnih vrst kot sta datoteki Prenosljiva vrsta dokumenta (PDF) in datoteke PostScript "
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder)
+#: C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder)
+#: C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername)
+#: C/evince.xml:67(orgname)
+#: C/evince.xml:93(para)
+#: C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "Projekt dokumentacije MATE"
+
+#: C/evince.xml:2(para)
+msgid "Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or in the file COPYING-DOCS distributed with this manual."
+msgstr "Dano je dovoljenje za kopiranje, distribuiranje in/ali spreminjanje tega dokumenta pod pogoji GNU Free Documentation License (GFDL) različice 1.1 ali katerekoli kasnejše različice, ki jo je objavila Free Software Foundation brez stalnih odsekov, besedila naslovnice in zadnje strani. Kopijo GFDL lahko najdete na tej <ulink type=\"help\" url=\"ghelp:fdl\">povezavi</ulink> ali v datoteki COPYING-DOCS distribuirani s tem priročnikom."
+
+#: C/evince.xml:12(para)
+msgid "This manual is part of a collection of MATE manuals distributed under the GFDL. If you want to distribute this manual separately from the collection, you can do so by adding a copy of the license to the manual, as described in section 6 of the license."
+msgstr "Ta priročnik je del zbirke priročnikov MATE distribuiranih pod GFDL. V primeru da želite ta priročnik distribuirati ločeno od zbirke, lahko to storite z dodajanjem kopije licence priročnika, kot je opisano v odseku 6 licence."
+
+#: C/evince.xml:19(para)
+msgid "Many of the names used by companies to distinguish their products and services are claimed as trademarks. Where those names appear in any MATE documentation, and the members of the MATE Documentation Project are made aware of those trademarks, then the names are in capital letters or initial capital letters."
+msgstr "Veliko imen podjetja uporabljajo za ločevanje njihovih produktov in storitev, zato si jih lastijo kot blagovne znamke. Kjer se ta mena pojavijo v katerikoli dokumentaciji MATE in člani dokumentacijskega projekta MATE vedo za njih, so imena v velikih črkah ali pa se začnejo z velikimi črkami."
+
+#: C/evince.xml:35(para)
+msgid "DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+
+#: C/evince.xml:55(para)
+msgid "UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+
+#: C/evince.xml:28(para)
+msgid "DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: <placeholder-1/>"
+msgstr "DOKUMENT IN SPREMENJENE RAZLIČICE DOKUMENTA SO ZAGOTOVLJENE POD POGOJI GNU FREE DOCUMENTATION LICENCE Z NADALJNJIM RAZUMEVANJEM DA: <placeholder-1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "Dokumentacijska ekipa MATE"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Priročnik Evince pregledovalnika dokumentov r 1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "05.04.2008"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Priročnik Evince pregledovalnika dokumentov r 1.0"
+
+#: C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "06.04.2005"
+
+#: C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "Ta priročnik opisuje Evince pregledovalnik dokumentov različico 0.2"
+
+#: C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "Odziv"
+
+#: C/evince.xml:110(para)
+msgid "To report a bug or make a suggestion regarding the Evince Document Viewer application or this manual, follow the directions in the <ulink url=\"ghelp:mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr "Za poročilo hrošča ali predloga glede Evince pregledovalnika dokumentov ali tega priročnika sledite smernicam na <ulink url=\"ghelp:mate-feedback\" type=\"help\">Strani odziva MATE </ulink>."
+
+#: C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Evince pregledovalnik dokumentov"
+
+#: C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "Uvod"
+
+#: C/evince.xml:129(para)
+msgid "The <application>Evince Document Viewer</application> application enables you to view documents of various formats like Portable Document Format (PDF) files and PostScript files. <application>Evince Document Viewer</application> follows Freedesktop.org and MATE standards to provide integration with Desktop Environment."
+msgstr "Program <application>Evince pregledovalnik dokumentov</application> vam omogoča ogled dokumentov različnih vrst kot so datoteke Prenosljiva vrsta dokumenta (PDF) in PostScript. <application>Evince pregledovalnik dokumentov</application> sledi Freedestop.org in MATE standardom za vključitev v namizno okolje."
+
+#: C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "Kako začeti"
+
+#: C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Za zagon Evince pregledovalnika dokumentov"
+
+#: C/evince.xml:140(para)
+msgid "<application>Evince Document Viewer</application> starts when you open a document such as a PDF or PostScript file."
+msgstr "<application>Evince pregledovalnik dokumentov</application> se zažene, ko odprete dokument kot je datoteka PDF ali PostScript."
+
+#: C/evince.xml:141(para)
+msgid "Alternatively, you can start <application>Evince Document Viewer</application> from the command line, with the command: <command>evince</command>."
+msgstr "Dodatno lahko <application>Evince pregledovalnik dokumentov</application> zaženete v ukazni vrstici z ukazom: <command>evince</command>."
+
+#: C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Ko zaženete Evince pregledovalnik dokumentov"
+
+#: C/evince.xml:147(para)
+msgid "When you start <application>Evince Document Viewer</application>, the following window is displayed."
+msgstr "Ob zagonu <application>Evince pregledovalnika dokumentov</application> je prikazano naslednje okno."
+
+#: C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Okno Evince pregledovalnika dokumentov "
+
+#: C/evince.xml:158(phrase)
+msgid "Shows Evince Document Viewer main window. Contains titlebar, menubar, toolbar and display area. Menubar contains File, Edit, View, Go and Help menus."
+msgstr "Pokaže glavno okno Evince pregledovalnika dokumentov. Vsebuje naslovno vrstico, menijsko vrstico, orodno vrstico in področje prikaza. Menijska vrstica vsebuje menije Datoteka, Uredi, Pogled in Pomoč."
+
+#: C/evince.xml:164(para)
+msgid "The <application>Evince Document Viewer</application> window contains the following elements:"
+msgstr "Okno <application>Evince pregledovalnika dokumentov</application> vsebuje naslednje predmete:"
+
+#: C/evince.xml:168(term)
+#: C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "Menijska vrstica"
+
+#: C/evince.xml:170(para)
+msgid "The menus on the menubar contain all of the commands that you need to work with documents in <application>Evince Document Viewer</application>."
+msgstr "Meniji v menijski vrstici vsebujejo vse ukaze, ki jih potrebujete za delo z dokumenti v <application>Evince pregledovalniku dokumentov</application>."
+
+#: C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "Orodna vrstica"
+
+#: C/evince.xml:176(para)
+msgid "The toolbar contains a subset of the commands that you can access from the menubar."
+msgstr "Orodna vrstica vsebuje podniz ukazov dostopnih iz menijske vrstice."
+
+#: C/evince.xml:180(term)
+msgid "Display area"
+msgstr "Področje prikaza"
+
+#: C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "Področje prikaza prikaže dokument."
+
+#: C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "Sestavni del UV"
+
+#: C/evince.xml:198(para)
+#: C/evince.xml:646(para)
+msgid "Action"
+msgstr "Dejanje"
+
+#: C/evince.xml:203(para)
+msgid "Window"
+msgstr "Okno"
+
+#: C/evince.xml:207(para)
+msgid "Drag a file into the <application>Evince Document Viewer</application> window from another application such as a file manager."
+msgstr "Povlecite datoteko v okno <application>Evince pregledovalnika dokumentov</application> iz drugega programa kot je upravljalnik datotek."
+
+#: C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Dvokliknite na ime datoteke v upravljalniku datotek"
+
+#: C/evince.xml:217(para)
+#: C/evince.xml:244(para)
+msgid "Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></menuchoice>."
+msgstr "Izberite <menuchoice><guimenu>Datoteka</guimenu><guimenuitem>Odpri</guimenuitem></menuchoice>."
+
+#: C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "Tipkovne bližnjice"
+
+#: C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "Pritisnite <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:187(para)
+msgid "In <application>Evince Document Viewer</application>, you can perform the same action in several ways. For example, you can open a document in the following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></tgroup></informaltable>"
+msgstr "V <application>Evince pregledovalniku dokumentov</application> lahko isto dejanje izvedete na več načinov. Dokument lahko na primer odprete na naslednje načine: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></tgroup></informaltable>"
+
+#: C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Ta priročnik opisuje zmožnosti iz menijske vrstice."
+
+#: C/evince.xml:236(title)
+msgid "Usage"
+msgstr "Uporaba"
+
+#: C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "Za odpiranje dokumenta"
+
+#: C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Za odpiranje dokumenta izvedite naslednje korake:"
+
+#: C/evince.xml:248(para)
+msgid "In the <guilabel>Open Document</guilabel> dialog, select the file you want to open."
+msgstr "V pogovornemu oknu <guilabel>Odpri dokument</guilabel> izberite datoteko, ki jo želite odpreti."
+
+#: C/evince.xml:253(para)
+msgid "Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</application> displays the name of the document in the titlebar of the window."
+msgstr "Kliknite <guibutton>Odpri</guibutton>. <application>Evince pregledovalnik dokumentov</application> prikaže ime dokumenta v naslovni vrstici okna."
+
+#: C/evince.xml:258(para)
+msgid "To open another document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. <application>Evince Document Viewer</application> opens each file in a new window."
+msgstr "Za odprtje drugega dokumenta ponovno izberite <menuchoice><guimenu>Datoteka</guimenu><guimenuitem>Odpri</guimenuitem></menuchoice>. <application>Evince pregledovalnik dokumentov</application> odpre vsako datoteko v svojemu oknu."
+
+#: C/evince.xml:261(para)
+msgid "If you try to open a document with format that <application>Evince Document Viewer</application> does not recognize, the application displays an error message."
+msgstr "V primeru da pokusite odpreti vrsto dokumenta, ki ga <application>Evince pregledovalnik dokumentov</application> ne prepozna, program prikaže sporočilo o napaki. "
+
+#: C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "Za krmarjenje skozi dokument"
+
+# najprej sem imel kot sledi, amapk se mi zdi resnično pregrdo ...
+#: C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Skozi datoteko lahko krmarite na naslednje načine:"
+
+#: C/evince.xml:271(para)
+msgid "To view the next page, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr "Za ogled naslednje strani izberite <menuchoice><guimenu>Pojdi</guimenu><guimenuitem>Naslednja stran</guimenuitem></menuchoice>."
+
+#: C/evince.xml:275(para)
+msgid "To view the previous page, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr "Za ogled predhodne strani izberite <menuchoice><guimenu>Pojdi</guimenu><guimenuitem>Predhodna stran</guimenuitem></menuchoice>."
+
+#: C/evince.xml:279(para)
+msgid "To view the first page in the document, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr "Za ogled prve strani v dokumentu izberite <menuchoice><guimenu>Pojdi</guimenu><guimenuitem>Prva stran</guimenuitem></menuchoice>."
+
+#: C/evince.xml:283(para)
+msgid "To view the last page in the document, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr "Za ogled zadnje strani v dokumentu izberite <menuchoice><guimenu>Pojdi</guimenu><guimenuitem>Zadnja stran</guimenuitem></menuchoice>."
+
+#: C/evince.xml:287(para)
+msgid "To view a particular page, enter the page number or page label in the text box on the toolbar, then press <keycap>Return</keycap>."
+msgstr "Za ogled določene strani vnesite številko ali oznako strani v besedilno polje v orodni vrstici in pritisnite <keycap>Povratno tipko</keycap>."
+
+#: C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "Za drsanje strani"
+
+#: C/evince.xml:295(para)
+msgid "To display the page contents that are not currently displayed in the display area, use the following methods:"
+msgstr "Za prikaz vsebine strani, ki trenutno ni prikazana v področju prikaza, uporabite naslednje načine:"
+
+#: C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Uporabite smerne tipke ali preslednico na tipkovnici."
+
+#: C/evince.xml:301(para)
+msgid "Drag the display area by clicking with the middle mouse button somewhere in the document and then moving the mouse. For example, to scroll down the page, drag the display area upwards in the window."
+msgstr "Povlecite področje prikaza s klikom srednjega miškinega gumba nekje v dokumentu in premikom miške. Na primer za drsanje navzdol po strani, povlecite področje prikaza navzgor v oknu."
+
+#: C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "Uporabite drsnike v oknu."
+
+#: C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "Za spremembo velikosti strani"
+
+#: C/evince.xml:312(para)
+msgid "You can use the following methods to resize a page in the <application>Evince Document Viewer</application> display area:"
+msgstr "Za spremembo velikosti strani v področju prikaza <application>Evince pregledovalnika dokumentov</application> lahko uporabite naslednje načine:"
+
+#: C/evince.xml:317(para)
+msgid "To increase the page size, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr "Za povečanje velikosti strani izberite <menuchoice><guimenu>Pogled</guimenu><guimenuitem>Približaj</guimenuitem></menuchoice>."
+
+#: C/evince.xml:322(para)
+msgid "To decrease the page size, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr "Za zmanjšanje velikosti strani izberite <menuchoice><guimenu>Pogled</guimenu><guimenuitem>Oddalji</guimenuitem></menuchoice>."
+
+#: C/evince.xml:327(para)
+msgid "To resize a page to have the same width as the <application>Evince Document Viewer</application> display area, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr "Za spremembo širine strani na širino področja prikaza <application>Evince pregledovalnika dokumentov</application> izberite <menuchoice><guimenu>Pogled</guimenu><guimenuitem>Prilagojeno širini strani</guimenuitem></menuchoice>."
+
+#: C/evince.xml:332(para)
+msgid "To resize a page to fit within the <application>Evince Document Viewer</application> display area, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr "Za spremembo velikosti strani v področju prikaza <application>Evince pregledovalnika dokumentov</application> izberite <menuchoice><guimenu>Pogled</guimenu><guimenuitem>Prilagojeno zaslonu</guimenuitem></menuchoice>."
+
+#: C/evince.xml:337(para)
+msgid "To resize the <application>Evince Document Viewer</application> window to have the same width and height as the screen, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></menuchoice>. To resize the <application>Evince Document Viewer</application> window to the original size, click on the <guibutton>Exit Full Screen</guibutton> button."
+msgstr "Za spremembo velikosti okna <application>Evince pregledovalnika dokumentov</application> na enako širino in višino kot zaslon izberite <menuchoice><guimenu>Pogled</guimenu><guimenuitem>Celozaslonski način</guimenuitem></menuchoice>. Za spremembo velikosti okna <application>Evince pregledovalnika dokumentov</application> nazaj na izvorno velikost kliknite na gumb <guibutton>Zapusti celozaslonski način</guibutton>."
+
+#: C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr "Za ogled strani ali zgradbe dokumenta"
+
+#: C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "Za ogled zaznamkov ali strani izvedite naslednje korake:"
+
+#: C/evince.xml:350(para)
+msgid "Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr "Izberite <menuchoice><guimenu>Pogled</guimenu><guimenuitem>Stranska vrstica</guimenuitem></menuchoice> ali pritisnite <keycap>F9</keycap>."
+
+#: C/evince.xml:355(para)
+msgid "Use the drop-down list in the side-pane header to select whether to display document structure or pages in the side pane."
+msgstr "Za izbiro ali naj bo v stranskemu pladnju prikazana zgradba dokumenta ali strani uporabite spustni seznam."
+
+#: C/evince.xml:360(para)
+msgid "Use the side-pane scrollbars to display the required item or page in the side pane."
+msgstr "Za prikaz predmeta ali strani v stranskemu pladnju uporabite drsnike stranskega pladnja."
+
+#: C/evince.xml:365(para)
+msgid "Click on an entry to navigate to that location in the document. Click on a page to navigate to that page in the document."
+msgstr "Kliknite na vnos za krmarjenje na to mesto v dokumentu. Kliknite na stran za krmarjenje na to stran v dokumentu."
+
+#: C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "Za ogled lastnosti dokumenta"
+
+#: C/evince.xml:372(para)
+msgid "To view the properties of a document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr "Za ogled lastnosti dokumenta izberite <menuchoice><guimenu>Datoteka</guimenu><guimenuitem>Lastnosti</guimenuitem></menuchoice>."
+
+#: C/evince.xml:378(para)
+msgid "The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr "Pogovorno okno <guilabel>Lastnosti</guilabel> prikaže vse podrobnosti na voljo"
+
+#: C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "Za tiskanje dokumetna"
+
+#: C/evince.xml:385(para)
+msgid "To print a Document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr "Za tiskanje dokumenta izberite <menuchoice><guimenu>Datoteka</guimenu><guimenuitem>Natisni</guimenuitem></menuchoice>."
+
+#: C/evince.xml:389(para)
+msgid "If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the author of the document has disabled the print option for this document. To enable the print option, you must enter the master password when you open the document. See <xref linkend=\"evince-password\"/> for more information about password-protected files."
+msgstr "V primeru da ne morete izbrati predmeta menija <guimenuitem>Natisni</guimenuitem> je avtor dokumenta za ta dokument onemogočil možnost tiska. Za omogočitev možnosti tiskanja morate pri odpiranju dokumenta vnesti glavno geslo. Oglejte si <xref linkend=\"evince-password\"/> za več podrobnosti o z geslom zaščitenih datotekah."
+
+#: C/evince.xml:393(para)
+msgid "The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr "Pogovorno okno <guilabel>Natisni</guilabel> vsebuje naslednje zavihke:"
+
+#: C/evince.xml:399(link)
+#: C/evince.xml:415(title)
+msgid "Job"
+msgstr "Delo"
+
+#: C/evince.xml:404(link)
+#: C/evince.xml:437(title)
+#: C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr "Tiskalnik"
+
+#: C/evince.xml:409(link)
+#: C/evince.xml:531(title)
+msgid "Paper"
+msgstr "Papir"
+
+#: C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "Obseg tiskanja"
+
+#: C/evince.xml:419(para)
+msgid "Select one of the following options to determine how many pages to print:"
+msgstr "Izberite eno od naslednjih možnost za določitev koliko strani naj bo natisnjenih:"
+
+#: C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "Vse"
+
+#: C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Izberite to možnost za tisk vseh strani v dokumentu."
+
+#: C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "Strani od"
+
+#: C/evince.xml:427(para)
+msgid "Select this option to print the selected range of pages in the document. Use the spin boxes to specify the first page and last page of the range."
+msgstr "Izberite to možnost za tiskanje izbranega obsega strani v dokumentu. Uporabite vrtilna polja za navedbo prve in zadnje strani obsega."
+
+#: C/evince.xml:441(para)
+msgid "Use this drop-down list to select the printer to which you want to print the document."
+msgstr "Uporabite ta spustni seznam za izbiro tiskalnika s katerim želite natisniti dokument."
+
+#: C/evince.xml:443(para)
+msgid "The <guilabel>Create a PDF document</guilabel> option is not supported in this version of <application>Evince Document Viewer</application>."
+msgstr "Možnost <guilabel>Ustvari dokument PDF</guilabel> v tej različici <application>Evince pregledovalnika dokumentov</application> ni podprta."
+
+#: C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "Nastavitve"
+
+#: C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "Uporabite ta spustni seznam za izbiro nastavitev tiskalnika."
+
+#: C/evince.xml:453(para)
+msgid "To configure the printer, click <guibutton>Configure</guibutton>. For example, you can enable or disable duplex printing, or schedule delayed printing, if this functionality is supported by the printer."
+msgstr "Za nastavitev tiskalnika, kliknite <guibutton>Nastavi</guibutton>. Omogočite ali onemogočite lahko dvostransko tiskanje ali razporedite zamaknjeno tiskanje, če tiskalnik podpira to zmožnost."
+
+#: C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "Mesto"
+
+#: C/evince.xml:459(para)
+msgid "Use this drop-down list to select one of the following print destinations:"
+msgstr "Uporabite za spustni seznam za izbiro enega od naslednjih ciljev tiskanja:"
+
+#: C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Natisne dokument s tiskalnikom CUPS."
+
+#: C/evince.xml:470(para)
+msgid "If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the only entry in this drop-down list."
+msgstr "V primeru da je izbrani tiskalnik tiskalnik CUPS, je <guilabel>CUPS</guilabel> edini vnos v spustnemu seznamu."
+
+#: C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "Natisne dokument na tiskalniku."
+
+#: C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "Datoteka"
+
+#: C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "Natisne dokument v datoteko PostScript."
+
+#: C/evince.xml:490(para)
+msgid "Click <guibutton>Save As</guibutton> to display a dialog where you specify the name and location of the PostScript file."
+msgstr "Kliknite <guibutton>Shrani kot</guibutton> za prikaz pogovornega okna, kjer navedete ime in mesto datoteke PostScript."
+
+#: C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "Po meri"
+
+#: C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "Za tiskanje dokumenta uporabi navedeni ukaz."
+
+#: C/evince.xml:501(para)
+msgid "Type the name of the command in the text box. Include all command-line arguments."
+msgstr "Vpišite ime ukaza v besedilno polje. Vključuje vse argumente ukazne vrstice."
+
+#: C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "Stanje"
+
+#: C/evince.xml:511(para)
+#: C/evince.xml:517(para)
+#: C/evince.xml:523(para)
+msgid "This functionality is not supported in this version of <application>Evince Document Viewer</application>."
+msgstr "Ta zmožnost v tej različici <application>Evince pregledovalnika dokumentov</application> ni podprta."
+
+#: C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "Vrsta"
+
+#: C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "Opomba"
+
+#: C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "Velikost papirja"
+
+#: C/evince.xml:535(para)
+msgid "Use this drop-down list to select the size of the paper to which you want to print the document."
+msgstr "Uporabite ta spustni seznam za izbiro velikosti papirja na katerega želite natisnite dokument."
+
+#: C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "Širina"
+
+#: C/evince.xml:540(para)
+msgid "Use this spin box to specify the width of the paper. Use the adjacent drop-down list to change the measurement unit."
+msgstr "Uporabite to vrtilno polje za navedbo širine papirja. Uporabite sosednji spustni seznam za spremembo merske enote."
+
+#: C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "Višina"
+
+#: C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Uporabite to vrtilno polje za navedbo višine papirja."
+
+#: C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "Usmerjenost vira"
+
+#: C/evince.xml:550(para)
+msgid "Use this drop-down list to select the orientation of the paper in the printer."
+msgstr "Uporabite ta spustni seznam za izbiro usmerjenosti papirja v tiskalniku."
+
+#: C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr "Usmerjenost strani"
+
+#: C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "Uporabite ta spustni seznam za izbiro usmerjenosti strani."
+
+#: C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr "Postavitev"
+
+#: C/evince.xml:560(para)
+msgid "Use this drop-down list to select the page layout. A preview of each layout that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr "Uporabite ta spustni seznam za izbiro postavitve strani. Predogled vsake postavitve, ki jo izberete, je prikazan v področju <guilabel>Predogled</guilabel>."
+
+#: C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr "Predal s papirjem"
+
+#: C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Uporabite ta spustni seznam za izbiro predala s papirjem."
+
+#: C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "Za kopiranje dokumenta"
+
+#: C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Za kopiranje datoteko izvedite naslednje korake:"
+
+#: C/evince.xml:580(para)
+msgid "Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</guimenuitem></menuchoice>."
+msgstr "Izberite <menuchoice><guimenu>Datoteka</guimenu><guimenuitem>Shrani kopijo</guimenuitem></menuchoice>."
+
+#: C/evince.xml:585(para)
+msgid "Type the new filename in the <guilabel>Filename</guilabel> text box in the <guilabel>Save a Copy</guilabel> dialog."
+msgstr "V polje <guilabel>Ime datoteke</guilabel> v pogovornemu oknu <guilabel>Shrani kopijo</guilabel> vpišite novo ime datoteke."
+
+#: C/evince.xml:588(para)
+msgid "If necessary, specify the location of the copied document. By default, copies are saved in your home directory."
+msgstr "Navedite mesto kopiranega dokumenta. Privzeto so kopije shranjene v domači mapi."
+
+#: C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Kliknite <guibutton>Shrani</guibutton>."
+
+#: C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Delo z dokumenti zaščitenimi z geslom"
+
+#: C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr "Avtor lahko uporabi naslednje ravni gesla za zaščito dokumenta:"
+
+#: C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr "Uporabniško geslo, ki drugim dovoljuje le branje dokumenta."
+
+#: C/evince.xml:612(para)
+msgid "Master password that allows others to perform additional actions, such as print the document."
+msgstr "Glavno geslo, ki drugim omogoča izvajanje dodatnih dejanj kot je tiskanje dokumenta."
+
+#: C/evince.xml:616(para)
+msgid "When you try to open a password-protected document, <application>Evince Document Viewer</application> displays a security dialog. Type either the user password or the master password in the <guilabel>Enter document password</guilabel> text box, then click <guibutton>Open Document</guibutton>."
+msgstr "Ko poskusite odpreti z geslom zaščiten dokument, <application>Evince pregledovalnik dokumentov</application> prikaže pogovorno okno varnosti. V polje <guilabel>Vnesite geslo dokumenta</guilabel> vpišite uporabniško geslo ali glavno geslo in nato kliknite <guibutton>Odpri dokument</application>. "
+
+#: C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "Za zaprtje dokumenta"
+
+#: C/evince.xml:624(para)
+msgid "To close a document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr "Za zaprtje dokumenta izberite <menuchoice><guimenu>Datoteka</guimenu><guimenuitem>Zapri</guimenuitem></menuchoice>."
+
+#: C/evince.xml:626(para)
+msgid "If the window is the last <application>Evince Document Viewer</application> window open, the application exits."
+msgstr "V primeru da je okno zadnje odprto okno <application>Evince pregledovalnika dokumentov</application> se program zapre."
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Bližnjice"
+
+#: C/evince.xml:636(para)
+msgid "Below is a list of all shortcuts present in <application>Evince Document Viewer</application>:"
+msgstr "Spodaj je seznam vseh bližnjic prisotnih v <application>Evince pregledovalniku dokumentov</application>:"
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Bližnjica"
+
+#: C/evince.xml:651(keycap)
+#: C/evince.xml:655(keycap)
+#: C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap)
+#: C/evince.xml:667(keycap)
+#: C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap)
+#: C/evince.xml:683(keycap)
+#: C/evince.xml:704(keycap)
+#: C/evince.xml:750(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Odpri obstoječi dokument"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Shrani kopijo trenutnega dokumenta"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "Natisni dokument"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Zapri okno"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Kopiraj izbor"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Izberi vse"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (poševnica)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Poišči besedo ali reklo v dokumentu"
+
+#: C/evince.xml:683(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:684(keycap)
+msgid "F3"
+msgstr "F3"
+
+#: C/evince.xml:686(para)
+msgid "Find next"
+msgstr "Poišči naslednje"
+
+#: C/evince.xml:690(para)
+msgid "<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr "<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (znak plus)"
+
+#: C/evince.xml:691(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:692(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:694(para)
+msgid "Zoom in"
+msgstr "Približaj"
+
+#: C/evince.xml:698(para)
+msgid "<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr "<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (znak minus)"
+
+#: C/evince.xml:699(keycap)
+msgid "-"
+msgstr "-"
+
+#: C/evince.xml:701(para)
+msgid "Zoom out"
+msgstr "Oddalji"
+
+#: C/evince.xml:704(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:705(para)
+msgid "Reload the document"
+msgstr "Ponovno naloži dokument"
+
+#: C/evince.xml:709(keycap)
+#: C/evince.xml:734(keycap)
+msgid "Page Up"
+msgstr "Page Up"
+
+#: C/evince.xml:710(para)
+msgid "Go to the previous page"
+msgstr "Pojdi na predhodno stran"
+
+#: C/evince.xml:713(keycap)
+#: C/evince.xml:738(keycap)
+msgid "Page Down"
+msgstr "Page Down"
+
+#: C/evince.xml:714(para)
+msgid "Go to the next page"
+msgstr "Pojdi na naslednjo stran"
+
+#: C/evince.xml:718(keycap)
+#: C/evince.xml:726(keycap)
+msgid "Space"
+msgstr "Preslednica"
+
+#: C/evince.xml:719(keycap)
+#: C/evince.xml:726(keycap)
+#: C/evince.xml:728(keycap)
+#: C/evince.xml:734(keycap)
+#: C/evince.xml:738(keycap)
+msgid "Shift"
+msgstr "Dvigalka"
+
+#: C/evince.xml:719(keycap)
+#: C/evince.xml:727(keycap)
+msgid "Backspace"
+msgstr "Povratna tipka"
+
+#: C/evince.xml:720(keycap)
+#: C/evince.xml:728(keycap)
+msgid "Return"
+msgstr "Vnosna tipka"
+
+#: C/evince.xml:722(para)
+msgid "Scroll forward"
+msgstr "Drsaj naprej"
+
+#: C/evince.xml:730(para)
+msgid "Scroll backward"
+msgstr "Drsaj nazaj"
+
+#: C/evince.xml:735(para)
+msgid "Go a bunch of pages up"
+msgstr "Pojdi sveženj strani navzgor"
+
+#: C/evince.xml:739(para)
+msgid "Go a bunch of pages down"
+msgstr "Pojdi sveženj strani navzdol"
+
+#: C/evince.xml:742(keycap)
+msgid "Home"
+msgstr "Domov"
+
+#: C/evince.xml:743(para)
+msgid "Go to the first page"
+msgstr "Pojdi na prvo stran"
+
+#: C/evince.xml:746(keycap)
+msgid "End"
+msgstr "Konec"
+
+#: C/evince.xml:747(para)
+msgid "Go to the last page"
+msgstr "Pojdi na zadnjo stran"
+
+#: C/evince.xml:750(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:751(para)
+msgid "Go to page by number or label"
+msgstr "Pojdi na stran po številki ali oznaki"
+
+#: C/evince.xml:754(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:755(para)
+msgid "Help"
+msgstr "Pomoč"
+
+#: C/evince.xml:758(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:759(para)
+msgid "Run document as presentation"
+msgstr "Zaženi dokument kot predstavitev"
+
+#: C/evince.xml:762(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:763(para)
+msgid "Show or hide the side pane"
+msgstr "Prikaži ali skrij stranski pladenj"
+
+#: C/evince.xml:766(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:767(para)
+msgid "Toggle fullscreen mode"
+msgstr "Preklopi celozaslonski način"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr "Andrej Žnidaršič <[email protected]>, 2010"
+
diff --git a/help/sr/sr.po b/help/sr/sr.po
new file mode 100644
index 00000000..7c9ccbfc
--- /dev/null
+++ b/help/sr/sr.po
@@ -0,0 +1,1626 @@
+# Serbian translation of caja
+# Courtesy of Prevod.org team (http://prevod.org/) -- 2005.
+#
+# This file is distributed under the same license as the caja package.
+#
+# Maintainer: Данило Шеган <[email protected]>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-08-24 21:37-0400\n"
+"PO-Revision-Date: 2005-07-24 06:42+0200\n"
+"Last-Translator: Данило Шеган <[email protected]>\n"
+"Language-Team: Serbian (sr) <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: ../C/evince.xml:158(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+
+#: ../C/evince.xml:25(title) ../C/evince.xml:85(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Упутство за прегледач докумената Evince 1.0"
+
+#: ../C/evince.xml:27(para)
+msgid "User manual for the Evince Document Viewer."
+msgstr "Упутство за кориснике прегледача докумената Evince."
+
+#: ../C/evince.xml:30(year)
+msgid "2005"
+msgstr "2005"
+
+#: ../C/evince.xml:31(holder) ../C/evince.xml:88(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Николај В. Шмирев"
+
+#: ../C/evince.xml:34(year)
+msgid "2004"
+msgstr "2004"
+
+#: ../C/evince.xml:35(holder) ../C/evince.xml:58(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: ../C/evince.xml:46(publishername) ../C/evince.xml:64(orgname)
+#: ../C/evince.xml:89(para)
+msgid "MATE Documentation Project"
+msgstr "Подухват документовања Гнома"
+
+#: ../C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Дозвољено умножавање, ширење(растурање), вршење(уношење) измена у овај "
+"документ под условима Гну-ове Слободне Документационе Дозволе (ГСДД), "
+"верзије 1.1 или било које накнадне верзије без инваријантних одељака, текста "
+"на насловној и последњој страни, а коју је објавила Задужбина Слободног "
+"Софтвера. Примерак ГСДД-е може се пронаћи на овој <ulink type=\"help\" url="
+"\"ghelp:fdl\">адреси</ulink> или у датотеци COPYING-DOCS која је приложена"
+"(може се пронаћи) уз ово упутство."
+
+#: ../C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Ово упутство представља део збирке Гномових упутстава која се раздељују под "
+"условима ГСДД-е. Уколико намеравате да даље проследите ово упутство одвојено "
+"од збирке, то можете учинити уз прилагање примерка дозволе уз упутство, као "
+"што је описано у одељку 6 дозволе."
+
+#: ../C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Многи називи које компаније користе у циљу препознатљивости својих производа "
+"и услуга представљају робне марке. Када(уколико) се такви називи појављују"
+"(спомињу) у било којем Гном документу, а чланови Гномовог документационог "
+"пројекта имају сазнања о томе, тада су називи исписани великим словима или "
+"са великим почетним словима."
+
+#: ../C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"ЈЕ ДОКУМЕНТ ДОСТУПАН СА СВИМ СВОЈИМ ДОБРИМ И ЛОШИМ СТРАНАМА БЕЗ БИЛО КАКВОГ "
+"ЈАМСТВА, БИЛО ОНО ИЗРЕЧЕНО ИЛИ НЕ, УКЉУЧУЈУЧИ БЕЗ ОГРАНИЧЕЊА, ЈАМСТВО ДА ЈЕ "
+"ОВАЈ ДОКУМЕНТ ИЛИ ЊЕГОВА ИЗМЕЊЕНА ВЕРЗИЈА БЕЗ НЕДОСТАТАКА, СПРЕМАН ЗА "
+"ТРЖИШТЕ, СВРСИСХОДАН И НЕ НАРУШАВА ЗАКОНСКЕ НОРМЕ. ЦЕЛОКУПАН РИЗИК КОЈИ СЕ "
+"ОДНОСИ НА КВАЛИТЕТ, ТАЧНОСТ И ДОМЕТ(УЧИНАК) ДОКУМЕНТА ИЛИ ЊЕГОВЕ ИЗМЕЊЕНЕ "
+"ВЕРЗИЈЕ СНОСИ КОРИСНИК. УКОЛИКО СЕ У БИЛО КОЈЕМ ДОКУМЕНТУ ИЛИ ЊЕГОВОЈ "
+"ИЗМЕЊЕНОЈ ВЕРЗИЈИ ПОЈАВИ НЕДОСТАТАК(ГРЕШКА) БИЛО КОЈЕ ВРСТЕ, КОРИСНИК (А НЕ "
+"АУТОР ИЗВОРНЕ ВЕРЗИЈЕ, БИЛО КОЈИ ДРУГИ АУТОР ИЛИ САРАДНИК) СНОСИ СВЕ "
+"ТРОШКОВЕ НЕОПХОДНОГ СЕРВИСИРАЊА, ПОПРАВКЕ ИЛИ ИСПРАВКЕ. ОВО ОГРАНИЧЕЊЕ "
+"ЈАМСТВА ПРЕДСТАВЉА САСТАВНИ ДЕО ОВЕ ДОЗВОЛЕ. УПОТРЕБА БИЛО КОЈЕГ ДОКУМЕНТА "
+"ИЛИ ЊЕГОВЕ ИЗМЕЊЕНЕ ВЕРЗИЈЕ НИЈЕ ДОЗВОЉЕНА ОСИМ ПОД УСЛОВИМА ОВОГ ОГРАНИЧЕЊА "
+"ЈАМСТВА."
+
+#: ../C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"НИ ПОД КАКВИМ ОКОЛНОСТИМА ИЛИ ЗАКОНУ, БИЛО ЗБОГ КРШЕЊА (ИЛИ НЕМАРА) УГОВОРА, "
+"ИЛИ НА БИЛО КОЈИ ДРУГИ НАЧИН, АУТОР (ПРВОБИТНЕ ВЕРЗИЈЕ), САРАДНИК ИЛИ "
+"ИСПОРУЧИВАЛАЦ ДОКУМЕНТА ИЛИ ЊЕГОВЕ ИЗМЕЊЕНЕ ВЕРЗИЈЕ, НИТИ ДОБАВЉАЧ БИЛО КОЈЕ "
+"ОД НАВЕДЕНИХ СТРАНА НЕћЕ СНОСИТИ МАТЕРИЈАЛНУ ОДГОВОРНОСТ ЗА НАСТАЛА "
+"ДИРЕКТНА, ИНДИРЕКТНА, ПОСЕБНА, СЛУЧАЈНА ИЛИ ТИМЕ НАСТАЛА ОШТЕЋЕЊА БИЛО КОЈЕ "
+"ВРСТЕ УКЉУЧУЈУЋИ, БЕЗ ОГРАНИЧЕЊА, ШТЕТУ НАНЕСЕНУ УГЛЕДУ ФИРМЕ, ПРЕСТАНКУ "
+"ПРОИЗВОДЊЕ, ОТКАЗИВАЊЕ РАДА РАЧУНАРА ИЛИ КВАРА КАО И ЗА СВЕ ОСТАЛЕ ШТЕТЕ ИЛИ "
+"ГУБИТКЕ НАСТАЛЕ УСЛЕД КОРИШЋЕЊА ДОКУМЕНТА И ЊЕГОВИХ ИЗМЕЊЕНИХ ВЕРЗИЈА ЧАК И "
+"АКО ЈЕ ОШТЕЋЕНА СТРАНА БИЛА ОБАВЕШТЕНА О МОГУЋНОСТИ НАСТАНКА ТЕ ШТЕТЕ."
+
+# ова порука ће се мало изменити када се допуни xml2po бољом дефиницијом за ознаке у Докбук документима:
+# појавиће се само један <placeholder-1/> уместо читавог <orderedlist>
+#: ../C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"ОВАЈ ДОКУМЕНТ И ЊЕГОВЕ ИЗМЕЊЕНЕ ВЕРЗИЈЕ СУ ДОСТУПНЕ ПОД УСЛОВИМА ГНУ-ОВЕ "
+"СЛОБОДНЕ ДОКУМЕНТАЦИОНЕ ДОЗВОЛЕ УЗ ДОДАТНУ САГЛАСНОСТ ДА: <placeholder-1/>"
+
+#: ../C/evince.xml:56(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: ../C/evince.xml:57(surname)
+msgid "MATE Documentation Team"
+msgstr "Тим за документовање Гнома"
+
+#: ../C/evince.xml:61(firstname)
+msgid "Nickolay V."
+msgstr "Николај В."
+
+#: ../C/evince.xml:62(surname)
+msgid "Shmyrev"
+msgstr "Шмирев"
+
+#: ../C/evince.xml:65(email)
+
+#: ../C/evince.xml:86(date)
+msgid "2005-04-06"
+msgstr "2005-04-06"
+
+#: ../C/evince.xml:94(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "Ово упутство описује издање 0.2 прегледача докумената Evince"
+
+#: ../C/evince.xml:97(title)
+msgid "Feedback"
+msgstr "Сарадња"
+
+#: ../C/evince.xml:98(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"Да пријавите грешку или учините предлог у вези прегледача докумената Evince "
+"или овог упутства, пратите упутства са <ulink url=\"ghelp:mate-feedback\" "
+"type=\"help\">стране за учествовање у Гному</ulink>."
+
+#: ../C/evince.xml:105(primary)
+msgid "Evince Document Viewer"
+msgstr "Прегледач докумената Evince"
+
+#: ../C/evince.xml:108(primary)
+msgid "evince"
+msgstr "evince"
+
+#: ../C/evince.xml:116(title)
+msgid "Introduction"
+msgstr "Увод"
+
+#: ../C/evince.xml:117(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+
+#: ../C/evince.xml:124(title)
+msgid "Getting Started"
+msgstr "Како почети"
+
+#: ../C/evince.xml:127(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Да покренете прегледач докумената Evince"
+
+#: ../C/evince.xml:128(para)
+msgid ""
+"You can start <application>Evince Document Viewer</application> in the "
+"following ways:"
+msgstr ""
+
+#: ../C/evince.xml:132(term)
+msgid "<guimenu>Applications</guimenu> menu"
+msgstr "Мени <guimenu>Програми</guimenu>"
+
+#: ../C/evince.xml:134(para)
+msgid ""
+"Choose <menuchoice><guisubmenu>Graphics</guisubmenu><guimenuitem>Evince "
+"Document Viewer</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:139(term)
+msgid "Command line"
+msgstr "Наредба"
+
+#: ../C/evince.xml:141(para)
+msgid "Execute the following command: <command>evince</command>"
+msgstr ""
+
+#: ../C/evince.xml:149(title)
+msgid "When You Start Evince Document Viewer"
+msgstr ""
+
+#: ../C/evince.xml:150(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+
+#: ../C/evince.xml:154(title)
+msgid "Evince Document Viewer Window"
+msgstr ""
+
+#: ../C/evince.xml:161(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+
+#: ../C/evince.xml:167(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+
+#: ../C/evince.xml:171(term) ../C/evince.xml:219(para)
+msgid "Menubar"
+msgstr ""
+
+#: ../C/evince.xml:173(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+
+#: ../C/evince.xml:177(term)
+msgid "Toolbar"
+msgstr "Линија са алатима"
+
+#: ../C/evince.xml:179(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr ""
+
+#: ../C/evince.xml:183(term)
+msgid "Display area"
+msgstr ""
+
+#: ../C/evince.xml:185(para)
+msgid "The display area displays the document."
+msgstr ""
+
+#: ../C/evince.xml:199(para)
+msgid "UI Component"
+msgstr ""
+
+#: ../C/evince.xml:201(para)
+msgid "Action"
+msgstr "Акција"
+
+#: ../C/evince.xml:206(para)
+msgid "Window"
+msgstr "Прозор"
+
+#: ../C/evince.xml:210(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+
+#: ../C/evince.xml:213(para)
+msgid "Double-click on the file name in the file manager"
+msgstr ""
+
+#: ../C/evince.xml:220(para) ../C/evince.xml:247(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:224(para)
+msgid "Shortcut keys"
+msgstr ""
+
+#: ../C/evince.xml:225(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr ""
+
+#: ../C/evince.xml:190(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><thead><row valign=\"top\"><entry "
+"colname=\"COLSPEC0\"><placeholder-1/></entry><entry colname=\"COLSPEC1\" "
+"align=\"left\"><placeholder-2/></entry></row></thead><tbody><row valign=\"top"
+"\"><placeholder-3/><entry><placeholder-4/></entry></row><row valign=\"top"
+"\"><placeholder-5/><entry><placeholder-6/></entry></row><row valign=\"top"
+"\"><placeholder-7/><placeholder-8/></row></tbody></tgroup></informaltable>"
+msgstr ""
+
+#: ../C/evince.xml:231(para)
+msgid "This manual documents functionality from the menubar."
+msgstr ""
+
+#: ../C/evince.xml:239(title)
+msgid "Usage"
+msgstr ""
+
+#: ../C/evince.xml:243(title)
+msgid "To Open a File"
+msgstr ""
+
+#: ../C/evince.xml:244(para)
+msgid "To open a File, perform the following steps:"
+msgstr ""
+
+#: ../C/evince.xml:251(para)
+msgid ""
+"In the <guilabel>Load file</guilabel> dialog, select the file you want to "
+"open."
+msgstr ""
+
+#: ../C/evince.xml:256(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+
+#: ../C/evince.xml:261(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+
+#: ../C/evince.xml:264(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+
+#: ../C/evince.xml:270(title)
+msgid "To Navigate Through a Document"
+msgstr ""
+
+#: ../C/evince.xml:271(para)
+msgid "You can navigate through a file as follows:"
+msgstr ""
+
+#: ../C/evince.xml:274(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:278(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:282(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:286(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:290(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+
+#: ../C/evince.xml:297(title)
+msgid "To Scroll a Page"
+msgstr ""
+
+#: ../C/evince.xml:298(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+
+#: ../C/evince.xml:301(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr ""
+
+#: ../C/evince.xml:304(para)
+msgid ""
+"Drag the display area in the opposite direction to the direction in which "
+"you want to scroll. For example, to scroll down the page, drag the display "
+"area upwards in the window."
+msgstr ""
+
+#: ../C/evince.xml:307(para)
+msgid "Use the scrollbars on the window."
+msgstr ""
+
+#: ../C/evince.xml:314(title)
+msgid "To Change the Page Size"
+msgstr ""
+
+#: ../C/evince.xml:315(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+
+#: ../C/evince.xml:320(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:325(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:330(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:335(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:340(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+
+#: ../C/evince.xml:348(title)
+msgid "To View Pages or Document Structore"
+msgstr ""
+
+#: ../C/evince.xml:349(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr ""
+
+#: ../C/evince.xml:353(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+
+#: ../C/evince.xml:358(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+
+#: ../C/evince.xml:363(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+
+#: ../C/evince.xml:368(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+
+#: ../C/evince.xml:374(title)
+msgid "To View the Properties of a Document"
+msgstr ""
+
+#: ../C/evince.xml:375(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:381(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+
+#: ../C/evince.xml:387(title)
+msgid "To Print a Document"
+msgstr ""
+
+#: ../C/evince.xml:388(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:392(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+
+#: ../C/evince.xml:396(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr ""
+
+#: ../C/evince.xml:402(link) ../C/evince.xml:418(title)
+msgid "Job"
+msgstr "Посао"
+
+#: ../C/evince.xml:407(link) ../C/evince.xml:440(title)
+#: ../C/evince.xml:442(guilabel)
+msgid "Printer"
+msgstr "Штампач"
+
+#: ../C/evince.xml:412(link) ../C/evince.xml:534(title)
+msgid "Paper"
+msgstr "Папир"
+
+#: ../C/evince.xml:420(guilabel)
+msgid "Print range"
+msgstr ""
+
+#: ../C/evince.xml:422(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+
+#: ../C/evince.xml:425(guilabel)
+msgid "All"
+msgstr "Све"
+
+#: ../C/evince.xml:426(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr ""
+
+#: ../C/evince.xml:429(guilabel)
+msgid "Pages From"
+msgstr ""
+
+#: ../C/evince.xml:430(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+
+#: ../C/evince.xml:444(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr ""
+
+#: ../C/evince.xml:446(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+
+#: ../C/evince.xml:452(guilabel)
+msgid "Settings"
+msgstr "Подешавања"
+
+#: ../C/evince.xml:454(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr ""
+
+#: ../C/evince.xml:456(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+
+#: ../C/evince.xml:460(guilabel)
+msgid "Location"
+msgstr "Место"
+
+#: ../C/evince.xml:462(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr ""
+
+#: ../C/evince.xml:467(guilabel)
+msgid "CUPS"
+msgstr ""
+
+#: ../C/evince.xml:469(para)
+msgid "Print the document to a CUPS printer."
+msgstr ""
+
+#: ../C/evince.xml:473(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+
+# bug: is this a command name, or what?
+#: ../C/evince.xml:480(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: ../C/evince.xml:482(para)
+msgid "Print the document to a printer."
+msgstr ""
+
+#: ../C/evince.xml:488(guilabel)
+msgid "File"
+msgstr "Датотека"
+
+#: ../C/evince.xml:490(para)
+msgid "Print the document to a PostScript file."
+msgstr ""
+
+#: ../C/evince.xml:493(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+
+#: ../C/evince.xml:499(guilabel)
+msgid "Custom"
+msgstr "Произвољно"
+
+#: ../C/evince.xml:501(para)
+msgid "Use the specified command to print the document."
+msgstr ""
+
+#: ../C/evince.xml:504(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr ""
+
+#: ../C/evince.xml:512(guilabel)
+msgid "State"
+msgstr "Стање"
+
+#: ../C/evince.xml:514(para) ../C/evince.xml:520(para)
+#: ../C/evince.xml:526(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+
+#: ../C/evince.xml:518(guilabel)
+msgid "Type"
+msgstr "Тип"
+
+#: ../C/evince.xml:524(guilabel)
+msgid "Comment"
+msgstr "Примедба"
+
+#: ../C/evince.xml:536(guilabel)
+msgid "Paper size"
+msgstr ""
+
+#: ../C/evince.xml:538(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+
+#: ../C/evince.xml:541(guilabel)
+msgid "Width"
+msgstr "Ширина"
+
+#: ../C/evince.xml:543(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+
+#: ../C/evince.xml:546(guilabel)
+msgid "Height"
+msgstr "Висина"
+
+#: ../C/evince.xml:548(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr ""
+
+#: ../C/evince.xml:551(guilabel)
+msgid "Feed orientation"
+msgstr ""
+
+#: ../C/evince.xml:553(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr ""
+
+#: ../C/evince.xml:556(guilabel)
+msgid "Page orientation"
+msgstr ""
+
+#: ../C/evince.xml:558(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr ""
+
+#: ../C/evince.xml:561(guilabel)
+msgid "Layout"
+msgstr "Изглед"
+
+#: ../C/evince.xml:563(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+
+#: ../C/evince.xml:566(guilabel)
+msgid "Paper Tray"
+msgstr ""
+
+#: ../C/evince.xml:568(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr ""
+
+#: ../C/evince.xml:578(title)
+msgid "To Copy a Document"
+msgstr ""
+
+#: ../C/evince.xml:579(para)
+msgid "To copy a file, perform the following steps:"
+msgstr ""
+
+#: ../C/evince.xml:583(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:588(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+
+#: ../C/evince.xml:591(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+
+#: ../C/evince.xml:596(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr ""
+
+#: ../C/evince.xml:605(title)
+msgid "To Work With Password-Protected Documents"
+msgstr ""
+
+#: ../C/evince.xml:606(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr ""
+
+#: ../C/evince.xml:611(para)
+msgid "User password that allows others only to read the document."
+msgstr ""
+
+#: ../C/evince.xml:615(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+
+#: ../C/evince.xml:619(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+
+#: ../C/evince.xml:626(title)
+msgid "To Close a Document"
+msgstr ""
+
+#: ../C/evince.xml:627(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:629(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+
+#: ../C/evince.xml:632(para)
+msgid ""
+"To quit <application>Evince Document Viewer</application> at any time, no "
+"matter how many windows are open, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Quit</guimenuitem></menuchoice>."
+msgstr ""
+
+#: ../C/evince.xml:634(para)
+msgid ""
+"When you quit, <application>Evince Document Viewer</application> closes all "
+"documents opened in the current session."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: ../C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+"Данило Шеган <[email protected]>\n"
+"\n"
+"Prevod.org — превод на српски језик."
+
+#~ msgid "_Remove Toolbar"
+#~ msgstr "_Уклони алатке"
+
+#~ msgid "Separator"
+#~ msgstr "Раздвајач"
+
+#~ msgid "Best Fit"
+#~ msgstr "Најбоље уклапање"
+
+#~ msgid "Fit Page Width"
+#~ msgstr "Уклопи према ширини странице"
+
+#~ msgid "50%"
+#~ msgstr "50%"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "100%"
+#~ msgstr "100%"
+
+#~ msgid "125%"
+#~ msgstr "125%"
+
+#~ msgid "150%"
+#~ msgstr "150%"
+
+#~ msgid "175%"
+#~ msgstr "175%"
+
+#~ msgid "200%"
+#~ msgstr "200%"
+
+#~ msgid "300%"
+#~ msgstr "300%"
+
+#~ msgid "400%"
+#~ msgstr "400%"
+
+#~ msgid "Document Viewer"
+#~ msgstr "Прегледач документа"
+
+#~ msgid "View multipage documents"
+#~ msgstr "Прегледај вишестраничне документе"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "_Password:"
+#~ msgstr "_Лозинка:"
+
+#~ msgid "<b>Author:</b>"
+#~ msgstr "<b>Аутор:</b>"
+
+#~ msgid "<b>Created:</b>"
+#~ msgstr "<b>Направљен:</b> "
+
+#~ msgid "<b>Creator:</b>"
+#~ msgstr "<b>Творац:</b>"
+
+#~ msgid "<b>Format:</b>"
+#~ msgstr "<b>Облик:</b>"
+
+#~ msgid "<b>Keywords:</b>"
+#~ msgstr "<b>Кључне речи:</b>"
+
+#~ msgid "<b>Modified:</b>"
+#~ msgstr "<b>Мењан:</b>"
+
+#~ msgid "<b>Number of Pages:</b>"
+#~ msgstr "<b>Број страна:</b>"
+
+#~ msgid "<b>Optimized:</b>"
+#~ msgstr "<b>Оптимизовано:</b>"
+
+#~ msgid "<b>Producer:</b>"
+#~ msgstr "<b>Произвођач:</b>"
+
+#~ msgid "<b>Security:</b>"
+#~ msgstr "<b>Безбедност:</b>"
+
+#~ msgid "<b>Subject:</b>"
+#~ msgstr "<b>Тема:</b> "
+
+#~ msgid "<b>Title:</b>"
+#~ msgstr "<b>Наслов:</b>"
+
+#~ msgid "Default sidebar size"
+#~ msgstr "Подразумевана величина бочне траке"
+
+#~ msgid "Show sidebar by default"
+#~ msgstr "Уобичајено прикажи бочну траку"
+
+#~ msgid "Show statusbar by default"
+#~ msgstr "Уобичајено прикажи линију са стањем"
+
+#~ msgid "Show toolbar by default"
+#~ msgstr "Уобичајено прикажи траку са алатом"
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. The "
+#~ "default size sets the sidebar's width in pixels based from the side of "
+#~ "the window. Any integer will be accepted. The sidebar will never shrink "
+#~ "smaller than the size of the text required to display Thumbnails or "
+#~ "Index. Large values will cause the sidebar to take up as much of the page "
+#~ "display area as possible relative to the window's size."
+#~ msgstr ""
+#~ "Бочна трака је бочна ставка која садржи индекс и списак сличица страна. "
+#~ "Подразумевана величина поставља ширину бочне траке у тачкама у односу на "
+#~ "страну прозора. Прихвата се било који цео број, а бочна трака се никад "
+#~ "неће смањити испод величине неопходне за приказ сличица или индекса. "
+#~ "Велике вредности ће учинити да бочна трака заузме што је могуће више "
+#~ "простора за приказ странице у односу на величину прозора."
+
+# bug: dot missing
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. Two "
+#~ "boolean options, true makes sidebar visible by default while false makes "
+#~ "sidebar not visible by default"
+#~ msgstr ""
+#~ "Бочна трака је бочна ставка која садржи индекс и списак сличица страна. "
+#~ "Две истинитосне вредности, постављено чини бочну траку подразумевано "
+#~ "приказаном док искључење подразумевано сакрива бочну траку."
+
+# bug: dot missing
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. Two "
+#~ "boolean options, true makes sidebar visible by default while false makes "
+#~ "sidebar not visible by default."
+#~ msgstr ""
+#~ "Бочна трака је бочна ставка која садржи индекс и списак сличица страна. "
+#~ "Две истинитосне вредности, постављање подразумевано приказује бочну траку "
+#~ "док искључење подразумевано сакрива бочну траку."
+
+#~ msgid ""
+#~ "Statusbar is the standard bottom bar that display additional information "
+#~ "about links and other actions. Two boolean options, true makes the "
+#~ "statusbar visible by default while false makes sidebar not visible by "
+#~ "default."
+#~ msgstr ""
+#~ "Линија са стањем је уобичајена трака у дну која приказује додатне податке "
+#~ "о везама и другим акцијама. Две истинитосне вредности, постављање "
+#~ "подразумевано приказује линију са стањем док искључење подразумевано "
+#~ "сакрива линију са стањем."
+
+#~ msgid ""
+#~ "Toolbar is the top bar that contains navigation and zoom controls. Two "
+#~ "boolean options, true makes toolbar visible by default while false makes "
+#~ "toolbar not visible by default."
+#~ msgstr ""
+#~ "Трака са алатом је уобичајена трака у врху која садржи елементе за "
+#~ "навигацију и увећање. Две истинитосне вредности, постављање подразумевано "
+#~ "приказује траку са алатом док искључење подразумевано сакрива траку са "
+#~ "алатом."
+
+#~ msgid "File not available"
+#~ msgstr "Датотека није доступна"
+
+#~ msgid "DVI document has incorrect format"
+#~ msgstr "DVI документ је неисправног облика"
+
+#~ msgid "Yes"
+#~ msgstr "Да"
+
+#~ msgid "No"
+#~ msgstr "Не"
+
+#~ msgid "No name"
+#~ msgstr "Без имена"
+
+#~ msgid "Document"
+#~ msgstr "Документ"
+
+#~ msgid "None"
+#~ msgstr "Ништа"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "Писмо"
+
+#~ msgid "Tabloid"
+#~ msgstr "Таблоид"
+
+#~ msgid "Ledger"
+#~ msgstr "Праг"
+
+#~ msgid "Legal"
+#~ msgstr "Правно"
+
+#~ msgid "Statement"
+#~ msgstr "Изјава"
+
+#~ msgid "Executive"
+#~ msgstr "Извршни"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Фолија"
+
+#~ msgid "Quarto"
+#~ msgstr "Кварто"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "No document loaded."
+#~ msgstr "Документ није учитан."
+
+#~ msgid "Broken pipe."
+#~ msgstr "Прекинута веза."
+
+#~ msgid "Interpreter failed."
+#~ msgstr "Грешка при обради."
+
+#~ msgid "Error while decompressing file %s:\n"
+#~ msgstr "Грешка при отпакивању датотеке %s:\n"
+
+#~ msgid "Cannot open file %s.\n"
+#~ msgstr "Не могу да отворим датотеку %s.\n"
+
+#~ msgid "File is not readable."
+#~ msgstr "Датотеке није читљива."
+
+#~ msgid "Document loaded."
+#~ msgstr "Документ учитан."
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "Угњеждени ПостСкрипт"
+
+#~ msgid "PostScript"
+#~ msgstr "ПостСкрипт"
+
+#~ msgid "Search string"
+#~ msgstr "Тражи ниску"
+
+# bug: since when do the strings have names?
+#~ msgid "The name of the string to be found"
+#~ msgstr "Име ниске коју тражити"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Зависно од величине слова"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "Постављено за претрагу која зависи од величине слова"
+
+#~ msgid "Highlight color"
+#~ msgstr "Боја истицања"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Боја истицања за сва поклапања"
+
+#~ msgid "Current color"
+#~ msgstr "Текућа боја"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Боја истицања за текуће поклапање"
+
+#~ msgid "F_ind:"
+#~ msgstr "Н_ађи:"
+
+#~ msgid "_Previous"
+#~ msgstr "_Претходни"
+
+#~ msgid "_Next"
+#~ msgstr "_Следећи"
+
+#~ msgid "C_ase Sensitive"
+#~ msgstr "З_ависно од величине слова"
+
+#~ msgid "Unknown MIME Type"
+#~ msgstr "Непозната МИМЕ врста"
+
+#~ msgid "Unhandled MIME type: '%s'"
+#~ msgstr "Неприхваћена МИМЕ врста: „%s“"
+
+#~ msgid "All Documents"
+#~ msgstr "Сви документи"
+
+#~ msgid "PostScript Documents"
+#~ msgstr "Постскрипт документи"
+
+#~ msgid "PDF Documents"
+#~ msgstr "PDF документи"
+
+#~ msgid "Images"
+#~ msgstr "Слике"
+
+#~ msgid "DVI Documents"
+#~ msgstr "DVI документи"
+
+#~ msgid "Djvu Documents"
+#~ msgstr "Djvu документи"
+
+#~ msgid "All Files"
+#~ msgstr "Све датотеке"
+
+#~ msgid "(%d of %d)"
+#~ msgstr "(%d од %d)"
+
+#~ msgid "of %d"
+#~ msgstr " од %d"
+
+#~ msgid "Unable to find glade file"
+#~ msgstr "Не могу да нађем Глејд датотеку"
+
+#~ msgid ""
+#~ "The glade file, %s, cannot be found. Please check that your installation "
+#~ "is complete."
+#~ msgstr ""
+#~ "Не могу да нађем Глејд датотеку „%s“. Проверите да ли је ваша инсталација "
+#~ "потпуна."
+
+#~ msgid "Password required"
+#~ msgstr "Лозинка је обавезна"
+
+#~ msgid ""
+#~ "The document <i>%s</i> is locked and requires a password before it can be "
+#~ "opened."
+#~ msgstr ""
+#~ "Документ <i>%s</i> је закључан и неопходна је лозинка пре него што се "
+#~ "може отворити."
+
+#~ msgid "Incorrect password"
+#~ msgstr "Неисправна лозинка"
+
+#~ msgid ""
+#~ "This document is locked and can only be read by entering the correct "
+#~ "password."
+#~ msgstr ""
+#~ "Овај документ је закључан и може се прочитати једино уз унос исправне "
+#~ "лозинке."
+
+#~ msgid "_Unlock Document"
+#~ msgstr "_Откључај документ"
+
+#~ msgid "Properties"
+#~ msgstr "Особине"
+
+#~ msgid "General"
+#~ msgstr "Опште"
+
+#~ msgid "Fonts"
+#~ msgstr "Фонтови"
+
+#~ msgid "Name"
+#~ msgstr "Име"
+
+#~ msgid "Gathering font information... %3d%%"
+#~ msgstr "Скупљам податке о фонтовима... %3d%%"
+
+#~ msgid "Loading..."
+#~ msgstr "Учитавање..."
+
+#~ msgid "Print..."
+#~ msgstr "Штампање..."
+
+#~ msgid "Index"
+#~ msgstr "Попис"
+
+#~ msgid "Thumbnails"
+#~ msgstr "Мали прикази"
+
+#~ msgid "Go to page %s"
+#~ msgstr "Иди на страну %s"
+
+#~ msgid "%d found on this page"
+#~ msgid_plural "%d found on this page"
+#~ msgstr[0] "%d погодак на овој страници"
+#~ msgstr[1] "%d поготка на овој страници"
+#~ msgstr[2] "%d погодака на овој страници"
+
+#~ msgid "Not found"
+#~ msgstr "Није нађено"
+
+#~ msgid "%3d%% remaining to search"
+#~ msgstr "Преостало да претражи %3d%%"
+
+#~ msgid "Unable to open document"
+#~ msgstr "Не могу да отворим документ"
+
+#~ msgid "Document Viewer - Password Required"
+#~ msgstr "Прегледач докумената — лозинка је обавезна"
+
+#~ msgid "%s - Password Required"
+#~ msgstr "%s — лозинка је обавезна"
+
+#~ msgid "Loading document. Please wait"
+#~ msgstr "Учитавам документ. Сачекајте"
+
+#~ msgid "Open document"
+#~ msgstr "Отвори документ"
+
+#~ msgid "The file could not be saved as \"%s\"."
+#~ msgstr "Датотека се не може сачувати као „%s“."
+
+#~ msgid "Save a Copy"
+#~ msgstr "Сачувај умножак"
+
+#~ msgid "Print"
+#~ msgstr "Штампај"
+
+#~ msgid "Pages"
+#~ msgstr "Странице"
+
+#~ msgid "Printing is not supported on this printer."
+#~ msgstr "Штампање није подржано за овај штампач."
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the \"%s\" driver. This "
+#~ "program requires a PostScript printer driver."
+#~ msgstr ""
+#~ "Покушали сте да штампате користећи „%s“ драјвер. Овај програм захтева "
+#~ "ПостСкрипт драјвер за штампач."
+
+#~ msgid "The \"Find\" feature will not work with this document"
+#~ msgstr "Могућност претраживања неће радити за овај документ"
+
+#~ msgid "Searching for text is only supported for PDF documents."
+#~ msgstr "Тражење текста је подржано само за PDF документе."
+
+#~ msgid "Leave Fullscreen"
+#~ msgstr "Не преко целог екрана"
+
+#~ msgid "Toolbar editor"
+#~ msgstr "Уређивање алатки"
+
+#~ msgid ""
+#~ "PostScript and PDF File Viewer.\n"
+#~ "Using poppler %s (%s)"
+#~ msgstr ""
+#~ "Прегледач ПостСкрипт и PDF датотека.\n"
+#~ "Користи poppler %s (%s)"
+
+#~ msgid ""
+#~ "Evince is free software; you can redistribute it and/or modify\n"
+#~ "it under the terms of the GNU General Public License as published by\n"
+#~ "the Free Software Foundation; either version 2 of the License, or\n"
+#~ "(at your option) any later version.\n"
+#~ msgstr ""
+#~ "Evince је слободан софтвер; можете га расподељивати и/или га мењати\n"
+#~ "под условима ГНУ Опште Јавне Лиценце (GNU GPL) како је објављује \n"
+#~ "Задужбина за Слободни Софтвер (FSF); било верзије 2 те Лиценце, било\n"
+#~ "(по вашем нахођењу) било које новије верзије.\n"
+
+#~ msgid ""
+#~ "Evince is distributed in the hope that it will be useful,\n"
+#~ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+#~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+#~ "GNU General Public License for more details.\n"
+#~ msgstr ""
+#~ "Evince се расподељује у нади да ће бити од користи, али БЕЗ\n"
+#~ "ИКАКВИХ ГАРАНЦИЈА; чак и без подразумеване гаранције \n"
+#~ "КОРИСНОСТИ или ПРИЛАГОЂЕНОСТИ ОДРЕЂЕНОЈ НАМЕНИ. Видите ГНУ \n"
+#~ "Општу Јавну Лиценцу за више детаља.\n"
+
+#~ msgid ""
+#~ "You should have received a copy of the GNU General Public License\n"
+#~ "along with Evince; if not, write to the Free Software Foundation, Inc.,\n"
+#~ "59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+#~ msgstr ""
+#~ "Требали сте да примите примерак ГНУ Опште Јавне Лиценце уз Evince; ако\n"
+#~ "нисте, пишите Задужбини за Слободни Софтвер (Free Software Foundation, "
+#~ "Inc.), \n"
+#~ "59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#~ msgid "Evince"
+#~ msgstr "Evince"
+
+#~ msgid "© 1996-2005 The Evince authors"
+#~ msgstr "Сва права задржана © 1996–2005 Аутори Evince-а"
+
+#~ msgid "_File"
+#~ msgstr "_Датотека"
+
+#~ msgid "_Edit"
+#~ msgstr "_Уређивање"
+
+#~ msgid "_View"
+#~ msgstr "П_реглед"
+
+#~ msgid "_Go"
+#~ msgstr "_Иди"
+
+#~ msgid "_Help"
+#~ msgstr "_Помоћ"
+
+#~ msgid "Open an existing document"
+#~ msgstr "Отвори постојећи документ"
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Сачувај умножак..."
+
+#~ msgid "Save the current document with a new filename"
+#~ msgstr "Сачувај текући документ под новим именом"
+
+#~ msgid "Print this document"
+#~ msgstr "Одштампај овај документ"
+
+#~ msgid "View the properties of this document"
+#~ msgstr "Прегледај особине овог документа"
+
+#~ msgid "Close this window"
+#~ msgstr "Затвори овај прозор"
+
+#~ msgid "Copy text from the document"
+#~ msgstr "Умножи текст из документа"
+
+#~ msgid "Select _All"
+#~ msgstr "Изабери _све"
+
+#~ msgid "Select the entire page"
+#~ msgstr "Изабери целу страницу"
+
+#~ msgid "Find a word or phrase in the document"
+#~ msgstr "Нађи реч или израз у документу"
+
+#~ msgid "Find Ne_xt"
+#~ msgstr "Пронађи _следеће"
+
+#~ msgid "Find next occurrence of the word or phrase"
+#~ msgstr "Пронађи следећу појаву речи или израза"
+
+#~ msgid "T_oolbar"
+#~ msgstr "_Алатке"
+
+#~ msgid "Customize the toolbar"
+#~ msgstr "Прилагоди траку са алатом"
+
+#~ msgid "Rotate _Left"
+#~ msgstr "Ротирај _лево"
+
+#~ msgid "Rotate the document to the left"
+#~ msgstr "Ротирај документ налево"
+
+#~ msgid "Rotate _Right"
+#~ msgstr "Ротирај _десно"
+
+#~ msgid "Rotate the document to the right"
+#~ msgstr "Ротирај документ надесно"
+
+#~ msgid "Enlarge the document"
+#~ msgstr "Увећај документ"
+
+#~ msgid "Shrink the document"
+#~ msgstr "Умањи документ"
+
+#~ msgid "_Reload"
+#~ msgstr "_Освежи"
+
+#~ msgid "Reload the document"
+#~ msgstr "Изнова учитај документ"
+
+#~ msgid "_Previous Page"
+#~ msgstr "_Претходна страна"
+
+#~ msgid "Go to the previous page"
+#~ msgstr "Иди на претходну страницу"
+
+#~ msgid "_Next Page"
+#~ msgstr "_Следећа страна"
+
+#~ msgid "Go to the next page"
+#~ msgstr "Иди на следећу страницу"
+
+#~ msgid "_First Page"
+#~ msgstr "_Прва страна"
+
+#~ msgid "Go to the first page"
+#~ msgstr "Иди на прву страницу"
+
+#~ msgid "_Last Page"
+#~ msgstr "_Последња страна"
+
+#~ msgid "Go to the last page"
+#~ msgstr "Иди на последњу страницу"
+
+#~ msgid "_Contents"
+#~ msgstr "_Садржај"
+
+#~ msgid "Display help for the viewer application"
+#~ msgstr "Прикажи помоћ за програм прегледача"
+
+#~ msgid "_About"
+#~ msgstr "_О програму"
+
+#~ msgid "Display credits for the document viewer creators"
+#~ msgstr "Прикажи заслуге твораца прегледача докумената"
+
+#~ msgid "Leave fullscreen mode"
+#~ msgstr "Не преко целог екрана"
+
+#~ msgid "Scroll one page forward"
+#~ msgstr "Клизај једну страну унапред"
+
+#~ msgid "Scroll one page backward"
+#~ msgstr "Клизај једну страну уназад"
+
+#~ msgid "Focus the page selector"
+#~ msgstr "Фокусирај избирач странице"
+
+#~ msgid "Go ten pages backward"
+#~ msgstr "Иди 10 страна уназад"
+
+#~ msgid "Go ten pages forward"
+#~ msgstr "Иди 10 страна унапред"
+
+#~ msgid "_Toolbar"
+#~ msgstr "Ала_тке"
+
+#~ msgid "Show or hide the toolbar"
+#~ msgstr "Прикажи или сакриј траку са алатом"
+
+#~ msgid "_Statusbar"
+#~ msgstr "Линија са _стањем"
+
+#~ msgid "Show or hide the statusbar"
+#~ msgstr "Прикажи или сакриј линију са стањем"
+
+#~ msgid "Side _pane"
+#~ msgstr "Бочна _површ"
+
+#~ msgid "Show or hide the side pane"
+#~ msgstr "Прикажи или сакриј бочну површ"
+
+#~ msgid "_Continuous"
+#~ msgstr "_Непрекидно"
+
+#~ msgid "Show the entire document"
+#~ msgstr "Прикажи читав документ"
+
+#~ msgid "_Dual"
+#~ msgstr "По _две"
+
+#~ msgid "Show two pages at once"
+#~ msgstr "Прикажи све странице одједном"
+
+#~ msgid "_Fullscreen"
+#~ msgstr "_Цео екран"
+
+#~ msgid "Expand the window to fill the screen"
+#~ msgstr "Рашири прозор да попуни цео екран"
+
+#~ msgid "_Presentation"
+#~ msgstr "_Презентације"
+
+#~ msgid "Run document as a presentation"
+#~ msgstr "Пусти документ као презентацију"
+
+#~ msgid "_Best Fit"
+#~ msgstr "Нај_боље уклапање"
+
+#~ msgid "Make the current document fill the window"
+#~ msgstr "Нека текући документ попуни прозор"
+
+#~ msgid "Fit Page _Width"
+#~ msgstr "Уклопи према _ширини"
+
+#~ msgid "Make the current document fill the window width"
+#~ msgstr "Нека текући документ попуни ширину прозора"
+
+#~ msgid "Page"
+#~ msgstr "Страница"
+
+#~ msgid "Select Page"
+#~ msgstr "Изабери страницу"
+
+#~ msgid "Zoom"
+#~ msgstr "Увећај"
+
+#~ msgid "Adjust the zoom level"
+#~ msgstr "Прилагоди ниво увећања"
+
+#~ msgid "Previous"
+#~ msgstr "Претходна"
+
+#~ msgid "Next"
+#~ msgstr "Следећа"
+
+#~ msgid "Zoom In"
+#~ msgstr "Увећај"
+
+#~ msgid "Zoom Out"
+#~ msgstr "Умањи"
+
+#~ msgid "Fit Width"
+#~ msgstr "Уклопи ширину"
+
+#~ msgid "The page of the document to display."
+#~ msgstr "Страна документа за приказ."
+
+#~ msgid "PAGE"
+#~ msgstr "СТРАНА"
+
+#~ msgid ""
+#~ "Boolean options available, true enables thumbnailing and false disables "
+#~ "the creation of new thumbnails"
+#~ msgstr ""
+#~ "Доступне истинитосне вредности, постављање укључује приказ сличица за "
+#~ "стране, а искључивање зауставља прављење нових сличица"
+
+#~ msgid "Enable thumbnailing of PDF Documents"
+#~ msgstr "Укључи прављење сличица за PDF документе"
+
+#~ msgid "Thumbnail command for PDF Documents"
+#~ msgstr "Наредба за прављење сличица за PDF документе"
+
+#~ msgid ""
+#~ "Valid command plus arguments for the PDF Document thumbnailer. See "
+#~ "caja thumbnailer documentation for more information."
+#~ msgstr ""
+#~ "Исправна наредба уз аргументе за прављење сличица за PDF документе. "
+#~ "Погледајте документацију за сличице из Наутилуса за више података."
diff --git a/help/sv/figures/evince_start_window.png b/help/sv/figures/evince_start_window.png
new file mode 100644
index 00000000..7f386a72
--- /dev/null
+++ b/help/sv/figures/evince_start_window.png
Binary files differ
diff --git a/help/sv/sv.po b/help/sv/sv.po
new file mode 100644
index 00000000..65da10d9
--- /dev/null
+++ b/help/sv/sv.po
@@ -0,0 +1,900 @@
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince doc\n"
+"POT-Creation-Date: 2009-04-30 12:12+0000\n"
+"PO-Revision-Date: 2009-08-23 23:07+0100\n"
+"Last-Translator: Daniel Nylander <[email protected]>\n"
+"Language-Team: Swedish <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:155(None)
+msgid "@@image: 'figures/evince_start_window.png'; md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr "@@image: 'figures/evince_start_window.png'; md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Handbok för Dokumentvisaren Evince"
+
+#: C/evince.xml:27(para)
+msgid "The Evince Document Viewer application enables you to view documents of various formats like Portable Document Format (PDF) files and PostScript files"
+msgstr "Dokumentvisaren Evince låter dig visa dokument av olika format såsom Portable Document Format-filer (PDF) och PostScript-filer"
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder)
+#: C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder)
+#: C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername)
+#: C/evince.xml:67(orgname)
+#: C/evince.xml:93(para)
+#: C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "Dokumentationsprojekt för MATE"
+
+#: C/evince.xml:2(para)
+msgid "Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or in the file COPYING-DOCS distributed with this manual."
+msgstr "Tillstånd att kopiera, distribuera och/eller modifiera detta dokument ges under villkoren i GNU Free Documentation License (GFDL), version 1.1 eller senare, utgivet av Free Software Foundation utan standardavsnitt och omslagstexter. En kopia av GFDL finns att hämta på denna <ulink type=\"help\" url=\"ghelp:fdl\">länk</ulink> eller i filen COPYING-DOCS som medföljer denna handbok."
+
+#: C/evince.xml:12(para)
+msgid "This manual is part of a collection of MATE manuals distributed under the GFDL. If you want to distribute this manual separately from the collection, you can do so by adding a copy of the license to the manual, as described in section 6 of the license."
+msgstr "Denna handbok utgör en av flera MATE-handböcker som distribueras under villkoren i GFDL. Om du vill distribuera denna handbok separat från övriga handböcker kan du göra detta genom att lägga till en kopia av licensavtalet i handboken enligt instruktionerna i avsnitt 6 i licensavtalet."
+
+#: C/evince.xml:19(para)
+msgid "Many of the names used by companies to distinguish their products and services are claimed as trademarks. Where those names appear in any MATE documentation, and the members of the MATE Documentation Project are made aware of those trademarks, then the names are in capital letters or initial capital letters."
+msgstr "Flera namn på produkter och tjänster är registrerade varumärken. I de fall dessa namn förekommer i MATE-dokumentation - och medlemmarna i MATE-dokumentationsprojektet är medvetna om dessa varumärken - är de skrivna med versaler eller med inledande versal."
+
+#: C/evince.xml:35(para)
+msgid "DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr "DOKUMENTET TILLHANDAHÅLLS I \"BEFINTLIGT SKICK\" UTAN NÅGRA SOM HELST GARANTIER, VARE SIG UTTRYCKLIGA ELLER UNDERFÖRSTÅDDA, INKLUSIVE, MEN INTE BEGRÄNSAT TILL, GARANTIER ATT DOKUMENTET ELLER EN MODIFIERAD VERSION AV DOKUMENTET INTE INNEHÅLLER NÅGRA FELAKTIGHETER, ÄR LÄMPLIGT FÖR ETT VISST ÄNDAMÅL ELLER INTE STRIDER MOT LAG. HELA RISKEN VAD GÄLLER KVALITET, EXAKTHET OCH UTFÖRANDE AV DOKUMENTET OCH MODIFIERADE VERSIONER AV DOKUMENTET LIGGER HELT OCH HÅLLET PÅ ANVÄNDAREN. OM ETT DOKUMENT ELLER EN MODIFIERAD VERSION AV ETT DOKUMENT SKULLE VISA SIG INNEHÅLLA FELAKTIGHETER I NÅGOT HÄNSEENDE ÄR DET DU (INTE DEN URSPRUNGLIGA SKRIBENTEN, FÖRFATTAREN ELLER NÅGON ANNAN MEDARBETARE) SOM FÅR STÅ FÖR ALLA EVENTUELLA KOSTNADER FÖR SERVICE, REPARATIONER ELLER KORRIGERINGAR. DENNA GARANTIFRISKRIVNING UTGÖR EN VÄSENTLIG DEL AV DETTA LICENSAVTAL. DETTA INNEBÄR ATT ALL ANVÄNDNING AV ETT DOKUMENT ELLER EN MODIFIERAD VERSION AV ETT DOKUMENT BEVILJAS ENDAST UNDER DENNA ANSVARSFRISKRIVNING;"
+
+#: C/evince.xml:55(para)
+msgid "UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES."
+msgstr "UNDER INGA OMSTÄNDIGHETER ELLER INOM RAMEN FÖR NÅGON LAGSTIFTNING, OAVSETT OM DET GÄLLER KRÄNKNING (INKLUSIVE VÅRDSLÖSHET), KONTRAKT ELLER DYLIKT, SKA FÖRFATTAREN, DEN URSPRUNGLIGA SKRIBENTEN ELLER ANNAN MEDARBETARE ELLER ÅTERFÖRSÄLJARE AV DOKUMENTET ELLER AV EN MODIFIERAD VERSION AV DOKUMENTET ELLER NÅGON LEVERANTÖR TILL NÅGON AV NÄMNDA PARTER STÄLLAS ANSVARIG GENTEMOT NÅGON FÖR NÅGRA DIREKTA, INDIREKTA, SÄRSKILDA ELLER OFÖRUTSEDDA SKADOR ELLER FÖLJDSKADOR AV NÅGOT SLAG, INKLUSIVE, MEN INTE BEGRÄNSAT TILL, SKADOR BETRÄFFANDE FÖRLORAD GOODWILL, HINDER I ARBETET, DATORHAVERI ELLER NÅGRA ANDRA TÄNKBARA SKADOR ELLER FÖRLUSTER SOM KAN UPPKOMMA PÅ GRUND AV ELLER RELATERAT TILL ANVÄNDNINGEN AV DOKUMENTET ELLER MODIFIERADE VERSIONER AV DOKUMENTET, ÄVEN OM PART SKA HA BLIVIT INFORMERAD OM MÖJLIGHETEN TILL SÅDANA SKADOR."
+
+#: C/evince.xml:28(para)
+msgid "DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: <placeholder-1/>"
+msgstr "DOKUMENTET OCH MODIFIERADE VERSIONER AV DOKUMENTET TILLHANDAHÅLLS UNDER VILLKOREN I GNU FREE DOCUMENTATION LICENSE ENDAST UNDER FÖLJANDE FÖRUTSÄTTNINGAR: <placeholder-1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Suns"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "MATE-dokumentationsteam"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Handbok för Dokumentvisaren Evince v1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "2008-04-05"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Handbok för Dokumentvisaren Evince v1.0"
+
+#: C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "2005-04-06"
+
+#: C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "Den här handboken beskriver version 0.2 av Dokumentvisaren Evince"
+
+#: C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "Återkoppling"
+
+#: C/evince.xml:110(para)
+msgid "To report a bug or make a suggestion regarding the Evince Document Viewer application or this manual, follow the directions in the <ulink url=\"ghelp:mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr "För att rapportera ett fel eller komma med ett förslag angående Dokumentvisaren Evince eller denna handbok, följ instruktionerna på <ulink url=\"ghelp:mate-feedback\" type=\"help\">MATE:s återkopplingssida</ulink>."
+
+#: C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Dokumentvisaren Evince"
+
+#: C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "Introduktion"
+
+#: C/evince.xml:129(para)
+msgid "The <application>Evince Document Viewer</application> application enables you to view documents of various formats like Portable Document Format (PDF) files and PostScript files. <application>Evince Document Viewer</application> follows Freedesktop.org and MATE standards to provide integration with Desktop Environment."
+msgstr "Programmet <application>Dokumentvisaren Evince</application> låter dig visa dokument av olika format, såsom Portable Document Format-filer (PDF) och PostScript-filer. <application>Dokumentvisaren Evince</application> följer standarderna från Freedesktop.org och MATE för att tillhandahålla integration med skrivbordsmiljön."
+
+#: C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "Komma igång"
+
+#: C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Starta Dokumentvisaren Evince"
+
+#: C/evince.xml:140(para)
+msgid "<application>Evince Document Viewer</application> starts when you open a document such as a PDF or PostScript file."
+msgstr "<application>Dokumentvisaren Evince</application> startar när du öppnar ett dokument såsom en PDF- eller PostScript-fil."
+
+#: C/evince.xml:141(para)
+msgid "Alternatively, you can start <application>Evince Document Viewer</application> from the command line, with the command: <command>evince</command>."
+msgstr "Alternativt kan du starta <application>Dokumentvisaren Evince</application> från kommandoraden, med kommandot: <command>evince</command>."
+
+#: C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "När du startar Dokumentvisaren Evince"
+
+#: C/evince.xml:147(para)
+msgid "When you start <application>Evince Document Viewer</application>, the following window is displayed."
+msgstr "När du startar <application>Dokumentvisaren Evince</application> kommer följande fönster att visas."
+
+#: C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Dokumentvisaren Evince-fönstret"
+
+#: C/evince.xml:158(phrase)
+msgid "Shows Evince Document Viewer main window. Contains titlebar, menubar, toolbar and display area. Menubar contains File, Edit, View, Go and Help menus."
+msgstr "Visar huvudfönstret i Dokumentvisaren Evince. Innehåller titelrad, menyrad, verktygsrad och visningsruta. Menyraden innehåller menyerna Arkiv, Redigera, Visa, Gå och Hjälp."
+
+#: C/evince.xml:164(para)
+msgid "The <application>Evince Document Viewer</application> window contains the following elements:"
+msgstr "Fönstret i <application>Dokumentvisaren Evince</application> innehåller följande element:"
+
+#: C/evince.xml:168(term)
+#: C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "Menyrad"
+
+#: C/evince.xml:170(para)
+msgid "The menus on the menubar contain all of the commands that you need to work with documents in <application>Evince Document Viewer</application>."
+msgstr "Menyerna på menyraden innehåller alla kommandon som du behöver för att arbeta med dokument i <application>Dokumentvisaren Evince</application>."
+
+#: C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "Verktygsrad"
+
+#: C/evince.xml:176(para)
+msgid "The toolbar contains a subset of the commands that you can access from the menubar."
+msgstr "Verktygsraden innehåller en mindre uppsättning kommandon som du kan komma åt från menyraden."
+
+#: C/evince.xml:180(term)
+msgid "Display area"
+msgstr "Visningsrutan"
+
+#: C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "Visningsrutan visar dokumentet."
+
+#: C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "Komponent"
+
+#: C/evince.xml:198(para)
+#: C/evince.xml:646(para)
+msgid "Action"
+msgstr "Åtgärd"
+
+#: C/evince.xml:203(para)
+msgid "Window"
+msgstr "Fönster"
+
+#: C/evince.xml:207(para)
+msgid "Drag a file into the <application>Evince Document Viewer</application> window from another application such as a file manager."
+msgstr "Dra en fil till fönstret för <application>Dokumentvisaren Evince</application> från ett annat program, såsom en filhanterare."
+
+#: C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Dubbelklicka på filnamnet i filhanteraren"
+
+#: C/evince.xml:217(para)
+#: C/evince.xml:244(para)
+msgid "Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></menuchoice>."
+msgstr "Välj <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Öppna</guimenuitem></menuchoice>."
+
+#: C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "Snabbtangenter"
+
+#: C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "Tryck på <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:187(para)
+msgid "In <application>Evince Document Viewer</application>, you can perform the same action in several ways. For example, you can open a document in the following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></tgroup></informaltable>"
+msgstr "I <application>Dokumentvisaren Evince</application>, kan du genomföra samma åtgärd på flera olika sätt. Till exempel kan du öppna ett dokument på följande sätt: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></tgroup></informaltable>"
+
+#: C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Den här handboken dokumenterar funktionaliteten på menyraden."
+
+#: C/evince.xml:236(title)
+msgid "Usage"
+msgstr "Användning"
+
+#: C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "Öppna ett dokument"
+
+#: C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Genomför följande steg för att öppna ett dokument:"
+
+#: C/evince.xml:248(para)
+msgid "In the <guilabel>Open Document</guilabel> dialog, select the file you want to open."
+msgstr "I dialogrutan <guilabel>Öppna dokument</guilabel>, välj filen som du vill öppna."
+
+#: C/evince.xml:253(para)
+msgid "Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</application> displays the name of the document in the titlebar of the window."
+msgstr "Klicka på <guibutton>Öppna</guibutton>. <application>Dokumentvisaren Evince</application> visar namnet på dokumentet i titelraden på fönstret."
+
+#: C/evince.xml:258(para)
+msgid "To open another document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. <application>Evince Document Viewer</application> opens each file in a new window."
+msgstr "För att öppna ett annat dokument, välj <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Öppna</guimenuitem></menuchoice> igen. <application>Dokumentvisaren Evince</application> öppnar varje fil i ett nytt fönster."
+
+#: C/evince.xml:261(para)
+msgid "If you try to open a document with format that <application>Evince Document Viewer</application> does not recognize, the application displays an error message."
+msgstr "Om du försöker att öppna ett dokument med ett format som <application>Dokumentvisaren Evince</application> inte känner till, kommer programmet att visa ett felmeddelande."
+
+#: C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "Navigera genom ett dokument"
+
+#: C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Du kan navigera genom en fil på följande sätt:"
+
+#: C/evince.xml:271(para)
+msgid "To view the next page, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr "För att visa nästa sida, välj <menuchoice><guimenu>Gå</guimenu><guimenuitem>Nästa sida</guimenuitem></menuchoice>."
+
+#: C/evince.xml:275(para)
+msgid "To view the previous page, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr "För att visa föregående sida, välj <menuchoice><guimenu>Gå</guimenu><guimenuitem>Föregående sida</guimenuitem></menuchoice>."
+
+#: C/evince.xml:279(para)
+msgid "To view the first page in the document, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr "För att visa första sida i dokumentet, välj <menuchoice><guimenu>Gå</guimenu><guimenuitem>Första sidan</guimenuitem></menuchoice>."
+
+#: C/evince.xml:283(para)
+msgid "To view the last page in the document, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr "För att visa sista sidan i dokumentet, välj <menuchoice><guimenu>Gå</guimenu><guimenuitem>Sista sidan</guimenuitem></menuchoice>."
+
+#: C/evince.xml:287(para)
+msgid "To view a particular page, enter the page number or page label in the text box on the toolbar, then press <keycap>Return</keycap>."
+msgstr "För att visa en specifik sida, ange sidans nummer eller sidetikett i textrutan på verktygsraden, tryck sedan på <keycap>Return</keycap>."
+
+#: C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "Rulla en sida"
+
+#: C/evince.xml:295(para)
+msgid "To display the page contents that are not currently displayed in the display area, use the following methods:"
+msgstr "Använd följande metoder för att visa sidinnehållet som för närvarande inte visas i visningsrutan:"
+
+#: C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Använd piltangenterna eller blankstegstangenten på tangentbordet."
+
+#: C/evince.xml:301(para)
+msgid "Drag the display area by clicking with the middle mouse button somewhere in the document and then moving the mouse. For example, to scroll down the page, drag the display area upwards in the window."
+msgstr "Dra visningsrutan genom att klicka med mittenknappen på musen någonstans i dokumentet och flytta sedan musen. Till exempel, för att rulla nedåt i sidan, dra visningsrutan uppåt i fönstret."
+
+#: C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "Använd rullisterna i fönstret."
+
+#: C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "Ändra sidstorleken"
+
+#: C/evince.xml:312(para)
+msgid "You can use the following methods to resize a page in the <application>Evince Document Viewer</application> display area:"
+msgstr "Du kan använda följande metoder för att förstora eller förminska en sida i visningsrutan i <application>Dokumentvisaren Evince</application>:"
+
+#: C/evince.xml:317(para)
+msgid "To increase the page size, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr "För att öka sidstorleken, välj <menuchoice><guimenu>Visa</guimenu><guimenuitem>Zooma in</guimenuitem></menuchoice>."
+
+#: C/evince.xml:322(para)
+msgid "To decrease the page size, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr "För att minska sidstorleken, välj <menuchoice><guimenu>Visa</guimenu><guimenuitem>Zooma ut</guimenuitem></menuchoice>."
+
+#: C/evince.xml:327(para)
+msgid "To resize a page to have the same width as the <application>Evince Document Viewer</application> display area, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr "För att förstora eller förminska en sida till samma bredd som visningsrutan i <application>Dokumentvisaren Evince</application>, välj <menuchoice><guimenu>Visa</guimenu><guimenuitem>Anpassa till sidbredd</guimenuitem></menuchoice>."
+
+#: C/evince.xml:332(para)
+msgid "To resize a page to fit within the <application>Evince Document Viewer</application> display area, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr "För att förstora eller förminska en sida för att passa in i visningsrutan i <application>Dokumentvisaren Evince</application>, välj <menuchoice><guimenu>Visa</guimenu><guimenuitem>Bästa anpassning</guimenuitem></menuchoice>."
+
+#: C/evince.xml:337(para)
+msgid "To resize the <application>Evince Document Viewer</application> window to have the same width and height as the screen, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></menuchoice>. To resize the <application>Evince Document Viewer</application> window to the original size, click on the <guibutton>Exit Full Screen</guibutton> button."
+msgstr "För att förstora fönstret i <application>Dokumentvisaren Evince</application> till att ha samma bredd och höjd som skärmen, välj <menuchoice><guimenu>Visa</guimenu><guimenuitem>Helskärm</guimenuitem></menuchoice>. För att förstora eller förminska fönstret i <application>Dokumentvisaren Evince</application> till att ha ursprunglig storlek, klicka på knappen <guibutton>Lämna helskärmsläget</guibutton>."
+
+#: C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr "Visa sidor eller dokumentstruktur"
+
+#: C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "Genomför följande steg för att visa bokmärken eller sidor:"
+
+#: C/evince.xml:350(para)
+msgid "Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr "Välj <menuchoice><guimenu>Visa</guimenu><guimenuitem>Sidopanel</guimenuitem></menuchoice> eller tryck på <keycap>F9</keycap>."
+
+#: C/evince.xml:355(para)
+msgid "Use the drop-down list in the side-pane header to select whether to display document structure or pages in the side pane."
+msgstr "Använd rullgardinslistan i sidopanels huvud för att välja huruvida dokumentstruktur eller sidor i sidopanelen ska visas."
+
+#: C/evince.xml:360(para)
+msgid "Use the side-pane scrollbars to display the required item or page in the side pane."
+msgstr "Använd sidopanelens rullister för att visa det begärda objektet eller sidan i sidopanelen."
+
+#: C/evince.xml:365(para)
+msgid "Click on an entry to navigate to that location in the document. Click on a page to navigate to that page in the document."
+msgstr "Klicka på ett objekt för att navigera till den platsen i dokumentet. Klicka på en sida för att navigera till den sidan i dokumentet."
+
+#: C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "Visa egenskaperna för ett dokument"
+
+#: C/evince.xml:372(para)
+msgid "To view the properties of a document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr "För att visa egenskaperna för ett dokument, välj <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Egenskaper</guimenuitem></menuchoice>."
+
+#: C/evince.xml:378(para)
+msgid "The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr "Dialogrutan <guilabel>Egenskaper</guilabel> visar all information som finns tillgänglig"
+
+#: C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "Skriv ut ett dokument"
+
+#: C/evince.xml:385(para)
+msgid "To print a Document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr "För att skriva ut ett dokument, välj <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Skriv ut</guimenuitem></menuchoice>."
+
+#: C/evince.xml:389(para)
+msgid "If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the author of the document has disabled the print option for this document. To enable the print option, you must enter the master password when you open the document. See <xref linkend=\"evince-password\"/> for more information about password-protected files."
+msgstr "Om du inte kan välja menyobjektet <guimenuitem>Skriv ut</guimenuitem>, kan författaren av dokumentet inaktiverat utskriftsalternativet för det här dokumentet. För att aktivera utskriftsalternativet måste du mata in huvudlösenordet när du öppnar dokumentet. Se <xref linkend=\"evince-password\"/> för mer information om lösenordsskyddade filer."
+
+#: C/evince.xml:393(para)
+msgid "The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr "Dialogrutan <guilabel>Skriv ut</guilabel> har följande flikade sektioner:"
+
+#: C/evince.xml:399(link)
+#: C/evince.xml:415(title)
+msgid "Job"
+msgstr "Jobb"
+
+#: C/evince.xml:404(link)
+#: C/evince.xml:437(title)
+#: C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr "Skrivare"
+
+#: C/evince.xml:409(link)
+#: C/evince.xml:531(title)
+msgid "Paper"
+msgstr "Papper"
+
+#: C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "Utskriftsintervall"
+
+#: C/evince.xml:419(para)
+msgid "Select one of the following options to determine how many pages to print:"
+msgstr "Välj ett av följande alternativ för att bestämma hur många sidor som ska skrivas ut:"
+
+#: C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "Alla"
+
+#: C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Välj det här alternativet för att skriva ut alla sidorna i dokumentet."
+
+#: C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "Sidor från"
+
+#: C/evince.xml:427(para)
+msgid "Select this option to print the selected range of pages in the document. Use the spin boxes to specify the first page and last page of the range."
+msgstr "Välj det här alternativet för att skriva ut det valda intervallet av sidor i dokumentet. Använd väljaren för att ange första och sista sidan i intervallet."
+
+#: C/evince.xml:441(para)
+msgid "Use this drop-down list to select the printer to which you want to print the document."
+msgstr "Använd den här rullgardinslistan för att välja skrivaren till vilken du vill skriva ut dokumentet."
+
+#: C/evince.xml:443(para)
+msgid "The <guilabel>Create a PDF document</guilabel> option is not supported in this version of <application>Evince Document Viewer</application>."
+msgstr "Alternativet <guilabel>Skapa ett PDF-dokument</guilabel> stöds inte av den här versionen av <application>Dokumentvisaren Evince</application>."
+
+#: C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "Inställningar"
+
+#: C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "Använd den här rullgardinslistan för att välja skrivarinställningar."
+
+#: C/evince.xml:453(para)
+msgid "To configure the printer, click <guibutton>Configure</guibutton>. For example, you can enable or disable duplex printing, or schedule delayed printing, if this functionality is supported by the printer."
+msgstr "För att konfigurera skrivaren, klicka på <guibutton>Konfigurera</guibutton>. Till exempel kan du aktivera eller inaktivera dubbelsidig utskrift, eller schemalägga utskriften, om funktionaliteten stöds av skrivaren."
+
+#: C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "Plats"
+
+#: C/evince.xml:459(para)
+msgid "Use this drop-down list to select one of the following print destinations:"
+msgstr "Använd den här rullgardinslistan för att välja ett av följande utskriftsmål:"
+
+#: C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Skriv ut dokumentet på en CUPS-skrivare."
+
+#: C/evince.xml:470(para)
+msgid "If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the only entry in this drop-down list."
+msgstr "Om den valda skrivaren är en CUPS-skrivare, är <guilabel>CUPS</guilabel> det enda objektet i den här rullgardinslistan."
+
+#: C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "Skriv ut dokumentet på en skrivare."
+
+#: C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "Fil"
+
+#: C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "Skriv ut dokumentet till en PostScript-fil."
+
+#: C/evince.xml:490(para)
+msgid "Click <guibutton>Save As</guibutton> to display a dialog where you specify the name and location of the PostScript file."
+msgstr "Klicka på <guibutton>Spara som</guibutton> för att visa en dialogruta där du anger namnet och platsen för PostScript-filen."
+
+#: C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "Anpassad"
+
+#: C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "Använd det angivna kommandot för att skriva ut dokumentet."
+
+#: C/evince.xml:501(para)
+msgid "Type the name of the command in the text box. Include all command-line arguments."
+msgstr "Skriv in namnet på kommandot i textrutan. Inkludera alla kommandoradsargument."
+
+#: C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "Tillstånd"
+
+#: C/evince.xml:511(para)
+#: C/evince.xml:517(para)
+#: C/evince.xml:523(para)
+msgid "This functionality is not supported in this version of <application>Evince Document Viewer</application>."
+msgstr "Den här funktionaliteten stöds inte i den här versionen av <application>Dokumentvisaren Evince</application>."
+
+#: C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "Typ"
+
+#: C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "Kommentar"
+
+#: C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "Pappersstorlek"
+
+#: C/evince.xml:535(para)
+msgid "Use this drop-down list to select the size of the paper to which you want to print the document."
+msgstr "Använd den här rullgardinslistan för att välja storleken på pappret till vilket du vill skriva ut dokumentet."
+
+#: C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "Bredd"
+
+#: C/evince.xml:540(para)
+msgid "Use this spin box to specify the width of the paper. Use the adjacent drop-down list to change the measurement unit."
+msgstr "Använd den här väljaren för att ange bredden på pappret. Använd den närliggande rullgardinslistan för att ändra mätenheten."
+
+#: C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "Höjd"
+
+#: C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Använd den här väljaren för att ange höjden på pappret."
+
+#: C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "Matningsorientering"
+
+#: C/evince.xml:550(para)
+msgid "Use this drop-down list to select the orientation of the paper in the printer."
+msgstr "Använd den här rullgardinslistan för att välja orienteringen på pappret i skrivaren."
+
+#: C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr "Sidorientering"
+
+#: C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "Använd den här rullgardinslistan för att välja sidorienteringen."
+
+#: C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr "Layout"
+
+#: C/evince.xml:560(para)
+msgid "Use this drop-down list to select the page layout. A preview of each layout that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr "Använd den här rullgardinslistan för att välja sidlayouten. En förhandsvisning av varje layout som du väljer visas i rutan <guilabel>Förhandsgranskning</guilabel>."
+
+#: C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr "Utskriftsfack"
+
+#: C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Använd den här rullgardinslistan för att välja utskriftsfacket."
+
+#: C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "Kopiera ett dokument"
+
+#: C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Genomför följande steg för att kopiera en fil:"
+
+#: C/evince.xml:580(para)
+msgid "Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</guimenuitem></menuchoice>."
+msgstr "Välj <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Spara en kopia</guimenuitem></menuchoice>."
+
+#: C/evince.xml:585(para)
+msgid "Type the new filename in the <guilabel>Filename</guilabel> text box in the <guilabel>Save a Copy</guilabel> dialog."
+msgstr "Ange filnamnet i textrutan <guilabel>Filnamn</guilabel> i dialogrutan <guilabel>Spara en kopia</guilabel>."
+
+#: C/evince.xml:588(para)
+msgid "If necessary, specify the location of the copied document. By default, copies are saved in your home directory."
+msgstr "Om det behövs, ange platsen för dokumentkopian. Som standard sparas kopior i din hemkatalog."
+
+#: C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Klicka på <guibutton>Spara</guibutton>."
+
+#: C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Arbeta med lösenordsskyddade dokument"
+
+#: C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr "En författare kan använda följande lösenordsnivåer för att skydda ett dokument."
+
+#: C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr "Användarlösenord som endast låter andra läsa dokumentet."
+
+#: C/evince.xml:612(para)
+msgid "Master password that allows others to perform additional actions, such as print the document."
+msgstr "Huvudlösenord som låter andra genomföra ytterligare åtgärder, såsom att skriva ut dokumentet."
+
+#: C/evince.xml:616(para)
+msgid "When you try to open a password-protected document, <application>Evince Document Viewer</application> displays a security dialog. Type either the user password or the master password in the <guilabel>Enter document password</guilabel> text box, then click <guibutton>Open Document</guibutton>."
+msgstr "När du försöker att öppna ett lösenordsskyddat dokument, kommer <application>Dokumentvisaren Evince</application> att visa en säkerhetsdialogruta. Ange antingen användarlösenordet eller huvudlösenordet i textrutan <guilabel>Ange lösenord för dokumentet</guilabel>, klicka sedan på <guibutton>Öppna dokument</guibutton>."
+
+#: C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "Stänga ett dokument"
+
+#: C/evince.xml:624(para)
+msgid "To close a document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr "För att stänga ett dokument, välj <menuchoice><guimenu>Arkiv</guimenu><guimenuitem>Stäng</guimenuitem></menuchoice>."
+
+#: C/evince.xml:626(para)
+msgid "If the window is the last <application>Evince Document Viewer</application> window open, the application exits."
+msgstr "Om fönstret är det sista öppnade fönstret av <application>Dokumentvisaren Evince</application>, kommer programmet att avslutas."
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Snabbtangenter"
+
+#: C/evince.xml:636(para)
+msgid "Below is a list of all shortcuts present in <application>Evince Document Viewer</application>:"
+msgstr "Nedan är en lista över alla snabbtangenter som finns i <application>Dokumentvisaren Evince</application>:"
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Snabbtangent"
+
+#: C/evince.xml:651(keycap)
+#: C/evince.xml:655(keycap)
+#: C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap)
+#: C/evince.xml:667(keycap)
+#: C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap)
+#: C/evince.xml:683(keycap)
+#: C/evince.xml:704(keycap)
+#: C/evince.xml:750(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Öppna ett befintligt dokument"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Spara en kopia av aktuellt dokument"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "Skriv ut dokument"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Stäng fönster"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Kopiera markering"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Markera allt"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (snedstreck)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Sök efter ett ord eller fras i dokumentet"
+
+#: C/evince.xml:683(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:684(keycap)
+#| msgid "F"
+msgid "F3"
+msgstr "F3"
+
+#: C/evince.xml:686(para)
+msgid "Find next"
+msgstr "Sök nästa"
+
+#: C/evince.xml:690(para)
+msgid "<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr "<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plustecken)"
+
+#: C/evince.xml:691(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:692(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:694(para)
+msgid "Zoom in"
+msgstr "Zooma in"
+
+#: C/evince.xml:698(para)
+msgid "<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr "<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minustecken)"
+
+#: C/evince.xml:699(keycap)
+msgid "-"
+msgstr "-"
+
+#: C/evince.xml:701(para)
+msgid "Zoom out"
+msgstr "Zooma ut"
+
+#: C/evince.xml:704(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:705(para)
+msgid "Reload the document"
+msgstr "Läs om dokumentet"
+
+#: C/evince.xml:709(keycap)
+#: C/evince.xml:734(keycap)
+msgid "Page Up"
+msgstr "Page Up"
+
+#: C/evince.xml:710(para)
+msgid "Go to the previous page"
+msgstr "Gå föregående sida"
+
+#: C/evince.xml:713(keycap)
+#: C/evince.xml:738(keycap)
+msgid "Page Down"
+msgstr "Page Down"
+
+#: C/evince.xml:714(para)
+msgid "Go to the next page"
+msgstr "Gå till nästa sida"
+
+#: C/evince.xml:718(keycap)
+#: C/evince.xml:726(keycap)
+msgid "Space"
+msgstr "Blanksteg"
+
+#: C/evince.xml:719(keycap)
+#: C/evince.xml:726(keycap)
+#: C/evince.xml:728(keycap)
+#: C/evince.xml:734(keycap)
+#: C/evince.xml:738(keycap)
+msgid "Shift"
+msgstr "Skift"
+
+#: C/evince.xml:719(keycap)
+#: C/evince.xml:727(keycap)
+msgid "Backspace"
+msgstr "Backsteg"
+
+#: C/evince.xml:720(keycap)
+#: C/evince.xml:728(keycap)
+msgid "Return"
+msgstr "Return"
+
+#: C/evince.xml:722(para)
+msgid "Scroll forward"
+msgstr "Rulla framåt"
+
+#: C/evince.xml:730(para)
+msgid "Scroll backward"
+msgstr "Rulla bakåt"
+
+#: C/evince.xml:735(para)
+msgid "Go a bunch of pages up"
+msgstr "Gå ett antal sidor upp"
+
+#: C/evince.xml:739(para)
+msgid "Go a bunch of pages down"
+msgstr "Gå ett antal sidor ned"
+
+#: C/evince.xml:742(keycap)
+msgid "Home"
+msgstr "Home"
+
+#: C/evince.xml:743(para)
+msgid "Go to the first page"
+msgstr "Gå till första sidan"
+
+#: C/evince.xml:746(keycap)
+msgid "End"
+msgstr "End"
+
+#: C/evince.xml:747(para)
+msgid "Go to the last page"
+msgstr "Gå till sista sidan"
+
+#: C/evince.xml:750(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:751(para)
+msgid "Go to page by number or label"
+msgstr "Gå till sida efter siffra eller etikett"
+
+#: C/evince.xml:754(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:755(para)
+msgid "Help"
+msgstr "Hjälp"
+
+#: C/evince.xml:758(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:759(para)
+msgid "Run document as presentation"
+msgstr "Kör dokumentet som presentation"
+
+#: C/evince.xml:762(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:763(para)
+msgid "Show or hide the side pane"
+msgstr "Visa eller dölj sidopanelen"
+
+#: C/evince.xml:766(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:767(para)
+msgid "Toggle fullscreen mode"
+msgstr "Växla helskärmsläge"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr "Daniel Nylander <[email protected]>, 2006, 2008, 2009"
+
diff --git a/help/uk/figures/evince_start_window.png b/help/uk/figures/evince_start_window.png
new file mode 100644
index 00000000..bd210bef
--- /dev/null
+++ b/help/uk/figures/evince_start_window.png
Binary files differ
diff --git a/help/uk/uk.po b/help/uk/uk.po
new file mode 100644
index 00000000..0348aa39
--- /dev/null
+++ b/help/uk/uk.po
@@ -0,0 +1,998 @@
+# Ukrainian translation to evince.
+# Copyright (C) Free Software Foundation, 2005
+# This file is distributed under the same license as the epiphany package.
+# Maxim Dziumanenko <[email protected]>, 2005-2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince manual\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-08-14 07:47+0400\n"
+"PO-Revision-Date: 2007-03-11 21:19+0300\n"
+"Last-Translator: Maxim Dziumanenko <[email protected]>\n"
+"Language-Team: Ukrainian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: ../C/evince.xml:146(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: ../C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Довідка з переглядача документів Evince"
+
+#: ../C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr ""
+"Програма <application>Переглядач документів Evince</application> дозволяє "
+"переглядати документи різних форматів, наприклад файлів Portable Document "
+"Format (PDF) чи PostScript."
+
+#: ../C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: ../C/evince.xml:34(holder) ../C/evince.xml:91(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: ../C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: ../C/evince.xml:38(holder) ../C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: ../C/evince.xml:49(publishername) ../C/evince.xml:67(orgname)
+#: ../C/evince.xml:92(para)
+msgid "MATE Documentation Project"
+msgstr "Проект документування MATE"
+
+#: ../C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Дозволяється копіювати, розповсюджувати та/або змінювати цей документ на "
+"умовах ліцензії GNU Free Documentation License (GFDL), версії 1.1 або будь-"
+"якої старшої версії, що опублікована Free Software Foundation без "
+"інваріантних розділів, тексту титульної сторінки, та тексту фінальної "
+"сторінки. Копію GFDL можна знайти <ulink type=\"help\" url=\"ghelp:fdl\">за "
+"адресою</ulink> або у файлі COPYING-DOCS, що постачається з цією довідкою."
+
+#: ../C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"Ця довідка є частиною збірки документації з MATE, що постачається на умовах "
+"ліцензії GFDL. Якщо ви бажаєте розповсюджувати цю довідку окремо від збірки, "
+"можете це зробити додавши до довідки копію ліцензії, як описано у пункті 6 "
+"ліцензії."
+
+#: ../C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"Більшість назв, що використовуються компаніями для розповсюдження їх "
+"продуктів та послуг є торговими марками. Якщо такі назви зустрічаються у "
+"документації з MATE та учасникам проекту документування MATE відомо, що "
+"вони є торговими марками, тоді ці назви пишуться великими літерами або "
+"починаються з великої літери."
+
+#: ../C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"ДОКУМЕНТ НАДАЄТЬСЯ \"ЯК Є\", БЕЗ БУДЬ-ЯКИХ ГАРАНТІЇ, ЯВНИХ ЧИ НЕЯВНИХ, "
+"ВКЛЮЧАЮЧИ, АЛЕ НЕ ОБМЕЖУЮЧИСЬ, ГАРАНТІЙ ЩО ЦЕЙ ДОКУМЕНТ ЧИ ЗМІНЕНА ВЕРСІЯ "
+"ДОКУМЕНТА ВІЛЬНІ ВІД ДЕФЕКТІВ, ПРИДАТНІ ДО ПРОДАЖУ, ВІДПОВІДАЮТЬ ПЕВНІЙ МЕТІ "
+"АБО НЕ ПОРУШУЮТЬ ЧИЇСЬ ПРАВА. ВЕСЬ РИЗИК ЗА ЯКІСТЬ, ТОЧНІСТЬ, ТА ЧИННІСТЬ "
+"ЦЬОГО ДОКУМЕНТУ АБО ЙОГО ЗМІНЕНИХ ВЕРСІЙ ЛЕЖИТЬ НА ВАС. ЯКЩО БУДЬ-ЯКИЙ "
+"ДОКУМЕНТ ЧИ ЗМІНЕНА ВЕРСІЯ БУДУТЬ ВИЗНАНІ ДЕФЕКТНИМИ У БУДЬ-ЯКОМУ "
+"ВІДНОШЕННІ, ВИ (НЕ ПОЧАТКОВИЙ УКЛАДАЧ, АВТОР АБО БУДЬ-ЯКИЙ СПІВАВТОР) БЕРЕТЕ "
+"НА СЕБЕ ВИТРАТИ ЗА БУДЬ-ЯКЕ НЕОБХІДНЕ ОБСЛУГОВУВАННЯ, РЕМОНТ ЧИ ВИПРАВЛЕННЯ. "
+"ЦЯ ВІДМОВА ВІД ГАРАНТІЙ СКЛАДАЄ ВАЖЛИВУ ЧАСТИНУ ЦІЄЇ ЛІЦЕНЗІЇ. НЕ "
+"ДОПУСКАЄТЬСЯ ВИКОРИСТАННЯ ЦЬОГО ДОКУМЕНТУ АБО ЙОГО ЗМІНЕНОЇ ВЕРСІЇ БЕЗ "
+"ПРИЙНЯТТЯ ЦІЄЇ ВІДМОВИ; ТА"
+
+#: ../C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"НІ ЗА ЯКИХ ОБСТАВИН ТА ЗА БУДЬ-ЯКОГО ЗАКОНОДАВСТВА, ЧИ ТО ГРОМАДЯНСЬКОЇ "
+"ВІДПОВІДАЛЬНОСТІ (ВКЛЮЧАЮЧИ ХАЛАТНІСТЬ), ДОГОВОРУ, ЧИ ЧОГОСЬ ІНШОГО, АВТОР, "
+"ПОЧАТКОВИЙ УКЛАДАЧ, БУДЬ-ЯКИЙ СПІВАВТОР, АБО ДИСТРИБ'ЮТОР ДОКУМЕНТУ ЧИ "
+"ЗМІНЕНОЇ ВЕРСІЇ ДОКУМЕНТУ, АБО БУДЬ-ЯКИЙ ПОСТАЧАЛЬНИК БУДЬ-ЯКОЇ З ЦИХ "
+"СТОРІН, НЕ НЕСЕ ВІДПОВІДАЛЬНІСТЬ ПЕРЕД БУДЬ-ЯКОЮ ОСОБОЮ ЗА БУДЬ-ЯКІ ПРЯМІ, "
+"НЕПРЯМІ, ОСОБЛИВІ, ВИПАДКОВІ, АБО ІСТОТНІ ЗБИТКИ БУДЬ-ЯКОГО ХАРАКТЕРУ "
+"ВКЛЮЧАЮЧИ, АЛЕ НЕ ОБМЕЖУЮЧИСЬ, ЗБИТКАМИ ВІД ВТРАТИ ПРЕСТИЖУ, ЗУПИНКИ РОБОТИ, "
+"ЗБОЇВ АБО НЕСПРАВНОСТЕЙ КОМП'ЮТЕРА, АБО БУДЬ-ЯКІ ІНШІ ЗБИТКИ АБО ВТРАТИ ЩО "
+"ВИНИКЛИ БЕЗВІДНОСНО АБО ВНАСЛІДОК ВИКОРИСТАННЯ ЦЬОГО ДОКУМЕНТУ ТА ЗМІНЕНИХ "
+"ВЕРСІЙ ЦЬОГО ДОКУМЕНТУ, НАВІТЬ ЯКЩО ЦІ СТОРОНИ, МОЖЛИВО, БУЛИ ПРОІНФОРМОВАНІ "
+"ПРО МОЖЛИВІСТЬ ТАКИХ ЗБИТКІВ."
+
+#: ../C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"ДОКУМЕНТ ТА ЗМІНЕНІ ВЕРСІЇ ЦЬОГО ДОКУМЕНТУ ПОСТАЧАЮТЬСЯ НА УМОВАХ ВІЛЬНОЇ "
+"ЛІЦЕНЗІЇ ДЛЯ ДОКУМЕНТАЦІЇ GNU З ПОДАЛЬШИМ РОЗУМІННЯМ ЩО: <placeholder-1/>"
+
+#: ../C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: ../C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "Команда документування MATE"
+
+#: ../C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Николай В."
+
+#: ../C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Шмирьов"
+
+#: ../C/evince.xml:68(email)
+
+#: ../C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Довідка з переглядача документів Evince версії 1.0"
+
+#: ../C/evince.xml:89(date)
+msgid "2005-04-06"
+msgstr "2005-04-06"
+
+#: ../C/evince.xml:97(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "У цьому довіднику описується Переглядач документів Evince версії 0.2."
+
+#: ../C/evince.xml:100(title)
+msgid "Feedback"
+msgstr "Зворотний зв'язок"
+
+#: ../C/evince.xml:101(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"Щоб сповістити про помилку або внести пропозицію відносно програми "
+"Переглядач документів Evince або цієї довідки, дотримуйтесь інструкцій на "
+"сторінці <ulink url=\"ghelp:mate-feedback\" type=\"help\">Зворотний зв'язок "
+"з MATE</ulink>."
+
+#: ../C/evince.xml:108(primary)
+msgid "Evince Document Viewer"
+msgstr "Програма перегляду документів Evince"
+
+#: ../C/evince.xml:111(primary)
+msgid "evince"
+msgstr "evince"
+
+#: ../C/evince.xml:119(title)
+msgid "Introduction"
+msgstr "Вступ"
+
+#: ../C/evince.xml:120(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+"Програма <application>Переглядач документів Evince</application> дозволяє "
+"переглядати документи різних форматів, наприклад файлів Portable Document "
+"Format (PDF) чи PostScript. У забезпеченні інтеграції з робочим середовищем "
+"<application>Переглядач документів Evince</application> відповідає "
+"стандартам Freedesktop.org та MATE."
+
+#: ../C/evince.xml:127(title)
+msgid "Getting Started"
+msgstr "Початок роботи"
+
+#: ../C/evince.xml:130(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Запуск програми Evince"
+
+#: ../C/evince.xml:131(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+"При відкриванні документу типів PDF чи PostScript відкривається вікно "
+"програми <application>Evince</application>:"
+
+#: ../C/evince.xml:132(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+"<application>Evince</application> також можна запустити з командного рядка."
+
+#: ../C/evince.xml:137(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Після першого запуску програми Evince"
+
+#: ../C/evince.xml:138(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"Після запуску програми <application>Переглядач документів Evince</"
+"application> відкриється наступне вікно."
+
+#: ../C/evince.xml:142(title)
+msgid "Evince Document Viewer Window"
+msgstr "Вікно програми перегляду документів Evince."
+
+#: ../C/evince.xml:149(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+"Показано головне вікно програми Переглядач документів Evince. Вікно містить "
+"заголовок, панель меню, панель інструментів та область відображення. Меню "
+"містить пункти Файл, Правка, Вигляд, Перейти та Довідка."
+
+#: ../C/evince.xml:155(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr ""
+"Вікно програми <application>Переглядач документів Evince</application> "
+"містить наступні елементи:"
+
+#: ../C/evince.xml:159(term) ../C/evince.xml:207(para)
+msgid "Menubar"
+msgstr "Панель меню"
+
+#: ../C/evince.xml:161(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+"Меню містить усі необхідні для роботи з документами команди у програмі "
+"<application>Evince</application>."
+
+#: ../C/evince.xml:165(term)
+msgid "Toolbar"
+msgstr "Панель меню"
+
+#: ../C/evince.xml:167(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr "Панель меню містить піднабір доступних у меню команд."
+
+#: ../C/evince.xml:171(term)
+msgid "Display area"
+msgstr "Область відображення"
+
+#: ../C/evince.xml:173(para)
+msgid "The display area displays the document."
+msgstr "Область відображення показує вміст документу."
+
+#: ../C/evince.xml:187(para)
+msgid "UI Component"
+msgstr "Графічний компонент"
+
+#: ../C/evince.xml:189(para)
+msgid "Action"
+msgstr "Дія"
+
+#: ../C/evince.xml:194(para)
+msgid "Window"
+msgstr "Вікно"
+
+#: ../C/evince.xml:198(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+"Перетягніть файл у вікно програми <application>Evince</application> з іншої "
+"програми, наприклад, менеджера файлів."
+
+#: ../C/evince.xml:201(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Двічі клацніть на назві файлу у файловому менеджері"
+
+#: ../C/evince.xml:208(para) ../C/evince.xml:235(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+"Виберіть <menuchoice><guimenu>Файл</guimenu><guimenuitem>Відкрити</"
+"guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:212(para)
+msgid "Shortcut keys"
+msgstr "Комбінації клавіш"
+
+#: ../C/evince.xml:213(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr ""
+"Натисніть <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: ../C/evince.xml:178(para)
+#, fuzzy
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><thead><row valign=\"top\"><entry "
+"colname=\"COLSPEC0\"><placeholder-1/></entry><entry colname=\"COLSPEC1\" "
+"align=\"left\"><placeholder-2/></entry></row></thead><tbody><row valign=\"top"
+"\"><placeholder-3/><entry><placeholder-4/></entry></row><row valign=\"top"
+"\"><placeholder-5/><entry><placeholder-6/></entry></row><row valign=\"top"
+"\"><placeholder-7/><placeholder-8/></row></tbody></tgroup></informaltable>"
+msgstr ""
+"У програмі <application>Evince</application> одні й ті самі дії можна "
+"виконувати кількома способами. Наприклад, документ можна відкрити наступним "
+"чином: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep="
+"\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname="
+"\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></tgroup></"
+"informaltable>"
+
+#: ../C/evince.xml:219(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "У цьому документі описуються дії з використанням меню."
+
+#: ../C/evince.xml:227(title)
+msgid "Usage"
+msgstr "Використання"
+
+#: ../C/evince.xml:231(title)
+msgid "To Open A Document"
+msgstr "Відкривання документу"
+
+#: ../C/evince.xml:232(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Щоб відкрити документ виконайте наступні кроки:"
+
+#: ../C/evince.xml:239(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want "
+"to open."
+msgstr ""
+"У діалоговому вікні <guilabel>Відкрити документ</guilabel> виберіть "
+"потрібний файл."
+
+#: ../C/evince.xml:244(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+"Натисніть <guibutton>Відкрити</guibutton>. <application>Evince</application> "
+"відобразить назву документу у заголовку вікна."
+
+#: ../C/evince.xml:249(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+"Щоб відкрити інший документ знову виберіть <menuchoice><guimenu>Файл</"
+"guimenu><guimenuitem>Відкрити</guimenuitem></menuchoice>. "
+"<application>Evince</application> відкриває кожен файл у новому вікні."
+
+#: ../C/evince.xml:252(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+"Якщо ви відкриваєте документ у невідомому програмі форматі, відобразиться "
+"повідомлення про помилку."
+
+#: ../C/evince.xml:258(title)
+msgid "To Navigate Through a Document"
+msgstr "Навігація по документу"
+
+#: ../C/evince.xml:259(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Переміщуватись по документу можна наступним чином:"
+
+#: ../C/evince.xml:262(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+"Щоб перейти до наступної сторінки, виберіть <menuchoice><guimenu>Перейти</"
+"guimenu><guimenuitem>Вперед</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:266(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+"Щоб перейти до попередньої сторінки виберіть <menuchoice><guimenu>Перейти</"
+"guimenu><guimenuitem>Назад</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:270(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+"Щоб перейти до першої сторінки виберіть <menuchoice><guimenu>Перейти</"
+"guimenu><guimenuitem>Початок</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:274(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+"Щоб перейти до останньої сторінки виберіть <menuchoice><guimenu>Перейти</"
+"guimenu><guimenuitem>Кінець</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:278(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+"Щоб перейти до певної сторінки введіть її номер або позначку у текстовому "
+"полі на панелі інструментів та натисніть <keycap>Enter</keycap>."
+
+#: ../C/evince.xml:285(title)
+msgid "To Scroll a Page"
+msgstr "Прокрутка сторінки"
+
+#: ../C/evince.xml:286(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr ""
+"Переглянути вміст сторінки, який не умістився у області відображення, можна "
+"таким чином:"
+
+#: ../C/evince.xml:289(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Скористайтесь клавішами зі стрілками."
+
+#: ../C/evince.xml:292(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+msgstr ""
+"Перетягніть область відображення у напрямку протилежному до напрямку куди ви "
+"хочете прокрутити сторінку. Наприклад, щоб прокрутити сторінку вниз, "
+"перетягніть область відображення вікна вгору."
+
+#: ../C/evince.xml:295(para)
+msgid "Use the scrollbars on the window."
+msgstr "Скористайтесь смугами прокрутки вікна."
+
+#: ../C/evince.xml:302(title)
+msgid "To Change the Page Size"
+msgstr "Зміна розміру сторінки"
+
+#: ../C/evince.xml:303(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+"Змінити розмір сторінки у вікні програми <application>Evince</application> "
+"можна так:"
+
+#: ../C/evince.xml:308(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+"Для збільшення сторінки виберіть <menuchoice><guimenu>Вигляд</"
+"guimenu><guimenuitem>Збільшити</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:313(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+"Для зменшення сторінки виберіть <menuchoice><guimenu>Вигляд</"
+"guimenu><guimenuitem>Зменшити</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:318(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+"Щоб змінити розмір сторінки так, щоб її ширина дорівнювала ширині області "
+"відображення програми виберіть <menuchoice><guimenu>Вигляд</"
+"guimenu><guimenuitem>По ширині сторінки</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:323(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+"Щоб змінити розмір сторінки так, щоб її розмір дорівнював області "
+"відображення програми виберіть <menuchoice><guimenu>Вигляд</"
+"guimenu><guimenuitem>По ширині сторінки</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:328(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+"Щоб змінити розмір вінка програми <application>Evince</application> до "
+"розмірів екрану виберіть <menuchoice><guimenu>Вигляд</"
+"guimenu><guimenuitem>На повний екран</guimenuitem></menuchoice>. Для "
+"відновлення початкового розміру вікна програми <application>Evince</"
+"application> натисніть кнопку <guibutton>Вийти з повноекранного режиму</"
+"guibutton>."
+
+#: ../C/evince.xml:336(title)
+msgid "To View Pages or Document Structure"
+msgstr "Перегляд сторінок чи структури документу"
+
+#: ../C/evince.xml:337(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "Для перегляду закладок чи сторінок виконайте наступні дії:"
+
+#: ../C/evince.xml:341(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"Виберіть <menuchoice><guimenu>Вигляд</guimenu><guimenuitem>Бічна панель</"
+"guimenuitem></menuchoice> або натисніть <keycap>F9</keycap>."
+
+#: ../C/evince.xml:346(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr ""
+"Використовуючи розкривний список у заголовку бічної панелі вкажіть чи "
+"відображати у бічній панелі структуру документа, або ж сторінки."
+
+#: ../C/evince.xml:351(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr ""
+"Користуйтесь смугою прокрутки бічної панелі для відображення потрібного "
+"пункту або сторінки."
+
+#: ../C/evince.xml:356(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr ""
+"Клацніть на елементі для переходу у відповідне місце документа. Натисніть на "
+"сторінці для переходу до цієї сторінки документу."
+
+#: ../C/evince.xml:362(title)
+msgid "To View the Properties of a Document"
+msgstr "Перегляд властивостей документа"
+
+#: ../C/evince.xml:363(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"Щоб переглянути властивості документа виберіть <menuchoice><guimenu>Файл</"
+"guimenu><guimenuitem>Властивості</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:369(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr ""
+"Уся наявна інформація відобразиться у діалоговому вікні "
+"<guilabel>Властивості</guilabel>"
+
+#: ../C/evince.xml:375(title)
+msgid "To Print a Document"
+msgstr "Друк документу"
+
+#: ../C/evince.xml:376(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"Щоб надрукувати документ виберіть <menuchoice><guimenu>Файл</"
+"guimenu><guimenuitem>Друк</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:380(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+"Якщо ви не можете вибрати пункт меню <guimenuitem>Друк</guimenuitem>, автор "
+"документа заборонив друк цього документу. Щоб надрукувати документ треба "
+"ввести пароль до відкритого документу. Докладніше про захищені паролем файли "
+"дивіться у <xref linkend=\"evince-password\"/>."
+
+#: ../C/evince.xml:384(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr "Діалогове вікно <guilabel>Друк</guilabel> має наступні вкладки:"
+
+#: ../C/evince.xml:390(link) ../C/evince.xml:406(title)
+msgid "Job"
+msgstr "Завдання"
+
+#: ../C/evince.xml:395(link) ../C/evince.xml:428(title)
+#: ../C/evince.xml:430(guilabel)
+msgid "Printer"
+msgstr "Принтер"
+
+#: ../C/evince.xml:400(link) ../C/evince.xml:522(title)
+msgid "Paper"
+msgstr "Папір"
+
+#: ../C/evince.xml:408(guilabel)
+msgid "Print range"
+msgstr "Друкувати сторінки"
+
+#: ../C/evince.xml:410(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr ""
+"Для визначення кількості сторінок для друку виберіть один з наступних "
+"параметрів:"
+
+#: ../C/evince.xml:413(guilabel)
+msgid "All"
+msgstr "Всі"
+
+#: ../C/evince.xml:414(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Відмітьте цей параметр для друкування усіх сторінок документа."
+
+#: ../C/evince.xml:417(guilabel)
+msgid "Pages From"
+msgstr "Поточну"
+
+#: ../C/evince.xml:418(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"Відмітьте цей параметр для друкування діапазону сторінок документа. "
+"Користуючись полем зі стрілками вкажіть першу та останню сторінки діапазону."
+
+#: ../C/evince.xml:432(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr ""
+"Використовуючи розкривний список виберіть принтер, на який треба надрукувати "
+"документ."
+
+#: ../C/evince.xml:434(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+"Параметр <guilabel>Створити документ PDF</guilabel> не підтримується у цій "
+"версії програми."
+
+#: ../C/evince.xml:440(guilabel)
+msgid "Settings"
+msgstr "Параметри"
+
+#: ../C/evince.xml:442(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "Використовуючи розкривний список виберіть параметри принтера."
+
+#: ../C/evince.xml:444(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+"Для налаштовування принтера натисніть <guibutton>Налаштувати</guibutton>. "
+"Наприклад, можна увімкнути або вимкнути дуплексний друк, або відкласти друк "
+"до певного часу, якщо ця функціональність підтримується принтером."
+
+#: ../C/evince.xml:448(guilabel)
+msgid "Location"
+msgstr "Розташування"
+
+#: ../C/evince.xml:450(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr ""
+"Використовуючи розкривний список виберіть одну з наступних цілей для друку:"
+
+#: ../C/evince.xml:455(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: ../C/evince.xml:457(para)
+msgid "Print the document to a CUPS printer."
+msgstr "Друкувати документ на принтер CUPS."
+
+#: ../C/evince.xml:461(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+"Якщо виділений принтер є принтером CUPS, тоді у цьому розкривному списку є "
+"єдиний елемент - <guilabel>CUPS</guilabel>."
+
+#: ../C/evince.xml:468(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: ../C/evince.xml:470(para)
+msgid "Print the document to a printer."
+msgstr "Друкувати документ на принтер."
+
+#: ../C/evince.xml:476(guilabel)
+msgid "File"
+msgstr "Файл"
+
+#: ../C/evince.xml:478(para)
+msgid "Print the document to a PostScript file."
+msgstr "Друкувати документ у файл PostScript."
+
+#: ../C/evince.xml:481(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+"Натисніть <guibutton>Зберегти як</guibutton> щоб відкрити діалогове вікно,"
+"якому вказується назва та розташування файлу PostScript."
+
+#: ../C/evince.xml:487(guilabel)
+msgid "Custom"
+msgstr "Інший"
+
+#: ../C/evince.xml:489(para)
+msgid "Use the specified command to print the document."
+msgstr "Для друку на принтер використовується вказана команда."
+
+#: ../C/evince.xml:492(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr "Введіть у текстовому полі назву команди та її аргументи."
+
+#: ../C/evince.xml:500(guilabel)
+msgid "State"
+msgstr "Стан"
+
+#: ../C/evince.xml:502(para) ../C/evince.xml:508(para)
+#: ../C/evince.xml:514(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr ""
+"Ця функціональність не підтримується цією версією програми "
+"<application>Evince</application>."
+
+#: ../C/evince.xml:506(guilabel)
+msgid "Type"
+msgstr "Тип"
+
+#: ../C/evince.xml:512(guilabel)
+msgid "Comment"
+msgstr "Коментар"
+
+#: ../C/evince.xml:524(guilabel)
+msgid "Paper size"
+msgstr "Розмір аркуша"
+
+#: ../C/evince.xml:526(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr ""
+"У цьому розкривному списку можна вибрати розмір аркушів, на які ви "
+"збираєтесь друкувати документ."
+
+#: ../C/evince.xml:529(guilabel)
+msgid "Width"
+msgstr "Ширина"
+
+#: ../C/evince.xml:531(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr ""
+"У цьому полі з прокруткою визначається ширина сторінки. Одиниці виміру можна "
+"змінити у розташованому ліворуч розкривному списку."
+
+#: ../C/evince.xml:534(guilabel)
+msgid "Height"
+msgstr "Висота"
+
+#: ../C/evince.xml:536(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "У цьому полі з прокруткою визначається висота сторінки."
+
+#: ../C/evince.xml:539(guilabel)
+msgid "Feed orientation"
+msgstr "Орієнтація подачі"
+
+#: ../C/evince.xml:541(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr "У цьому розкривному списку виберіть орієнтацію паперу у принтері."
+
+#: ../C/evince.xml:544(guilabel)
+msgid "Page orientation"
+msgstr "Орієнтація аркуша"
+
+#: ../C/evince.xml:546(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "У цьому розкривному списку виберіть орієнтацію сторінки."
+
+#: ../C/evince.xml:549(guilabel)
+msgid "Layout"
+msgstr "Схема розташування"
+
+#: ../C/evince.xml:551(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"У цьому розкривному списку виберіть схему розташування сторінки. Попередній "
+"вигляд компонування сторінки відображається у полі <guilabel>Попередній "
+"перегляд</guilabel>."
+
+#: ../C/evince.xml:554(guilabel)
+msgid "Paper Tray"
+msgstr "Лоток"
+
+#: ../C/evince.xml:556(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "У цьому розкривному списку вкажіть лоток з папером."
+
+#: ../C/evince.xml:566(title)
+msgid "To Copy a Document"
+msgstr "Копіювання документу"
+
+#: ../C/evince.xml:567(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Для копіювання файлу виконайте наступні кроки:"
+
+#: ../C/evince.xml:571(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"Виберіть <menuchoice><guimenu>Файл</guimenu><guimenuitem>Зберегти копію</"
+"guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:576(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+"Введіть назву нового файлу у текстовому полі <guilabel>Назва</guilabel> "
+"діалогового вікна <guilabel>Зберегти копію</guilabel>."
+
+#: ../C/evince.xml:579(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr ""
+"При потребі, вкажіть розташування копії документа. Типово копія зберігається "
+"у вашому домашньому каталозі."
+
+#: ../C/evince.xml:584(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Натисніть <guibutton>Зберегти</guibutton>."
+
+#: ../C/evince.xml:593(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Робота із захищеними паролем документами"
+
+#: ../C/evince.xml:594(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr ""
+"Автор може використовувати для захисту документа наступні рівні паролів:"
+
+#: ../C/evince.xml:599(para)
+msgid "User password that allows others only to read the document."
+msgstr "Пароль, що дозволяє читати документ."
+
+#: ../C/evince.xml:603(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr ""
+"Головний пароль, що дозволяє виконувати додаткові дії, наприклад друк "
+"документа."
+
+#: ../C/evince.xml:607(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+"Коли ви намагаєтесь відкрити захищений паролем документ, "
+"<application>Evince</application> відображає вікно безпеки. Введіть у "
+"текстовому полі або пароль, або головний пароль, потім натисніть "
+"<guibutton>Відкрити документ</guibutton>."
+
+#: ../C/evince.xml:614(title)
+msgid "To Close a Document"
+msgstr "Закривання документа"
+
+#: ../C/evince.xml:615(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"Щоб закрити документ, виберіть <menuchoice><guimenu>Файл</"
+"guimenu><guimenuitem>Закрити</guimenuitem></menuchoice>."
+
+#: ../C/evince.xml:617(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+"Якщо це вікно - останнє відкрите вікно програми <application>Evince</"
+"application>, програма завершується."
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: ../C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr "Максим Дзюманенко <[email protected]>"
diff --git a/help/vi/vi.po b/help/vi/vi.po
new file mode 100644
index 00000000..825f5ac3
--- /dev/null
+++ b/help/vi/vi.po
@@ -0,0 +1,898 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: evince master\n"
+"POT-Creation-Date: 2009-06-12 20:11+0000\n"
+"PO-Revision-Date: 2009-06-21 13:19+1000\n"
+"Last-Translator: Nguyễn Đình Trung <[email protected]>\n"
+"Language-Team: Vietnamese <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:155(None)
+msgid "@@image: 'figures/evince_start_window.png'; md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr "@@image: 'figures/evince_start_window.png'; md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Hướng dẫn sử dụng bộ xem tài liệu Evince"
+
+#: C/evince.xml:27(para)
+msgid "The Evince Document Viewer application enables you to view documents of various formats like Portable Document Format (PDF) files and PostScript files"
+msgstr "Bộ xem tài liệu Evince giúp bạn xem nhiều định dạng tài liệu như Portable Document Format (PDF) và PostScript"
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder)
+#: C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder)
+#: C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername)
+#: C/evince.xml:67(orgname)
+#: C/evince.xml:93(para)
+#: C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "Dự án Tài liệu MATE"
+
+#: C/evince.xml:2(para)
+msgid "Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or in the file COPYING-DOCS distributed with this manual."
+msgstr "Được phép sao chép, phân phối và/hoặc thay đổi tài liệu này theo những điều khoản của Giấy phép Tài liệu Tự do GNU (GNU Free Documentation License - GFDL), phiên bản 1.1 hoặc về sau, được công bố bởi Free Software Foundation không kèm Invariant Sections, không Front-Cover Texts và không Back-Cover Texts. Bạn có thể lấy một bản sao của GFDL tại <ulink type=\"help\" url=\"ghelp:fdl\">liên kết này</ulink> hoặc trong tập tin COPYING-DOCS phân phối kèm với tài liệu này."
+
+#: C/evince.xml:12(para)
+msgid "This manual is part of a collection of MATE manuals distributed under the GFDL. If you want to distribute this manual separately from the collection, you can do so by adding a copy of the license to the manual, as described in section 6 of the license."
+msgstr "Tài liệu này là một phần của bộ tài liệu MATE, phân phối với GFDL. Nếu bạn muốn phân phối chỉ riêng tài liệu này, bạn có thể làm thế bằng cách thêm một bản sao giấy phép vào tài liệu, theo mô tả ở phần 6 của giấy phép."
+
+#: C/evince.xml:19(para)
+msgid "Many of the names used by companies to distinguish their products and services are claimed as trademarks. Where those names appear in any MATE documentation, and the members of the MATE Documentation Project are made aware of those trademarks, then the names are in capital letters or initial capital letters."
+msgstr "Nhiều tên được dùng bởi công ty để phân biệt sản phẩm và dịch vụ của họ là nhãn hiệu thương mại. Những nơi xuất hiện những tên này trong tài liệu, và dự án tài liệu MATE biết, sẽ được viết hoa hoặc chữ đầu viết hoa."
+
+#: C/evince.xml:35(para)
+msgid "DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+
+#: C/evince.xml:55(para)
+msgid "UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+
+#: C/evince.xml:28(para)
+msgid "DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: <placeholder-1/>"
+msgstr ""
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "Đội tài liệu MATE"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Hướng dẫn sử dụng Bộ xem tài liệu Evince V1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "2008-04-05"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Hướng dẫn sử dụng Bộ xem tài liệu Evince V1.0"
+
+#: C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "2005-04-06"
+
+#: C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "Tài liệu này mô tả Bộ xem tài liệu Evince phiên bản 0.2"
+
+#: C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "Phản hồi"
+
+#: C/evince.xml:110(para)
+msgid "To report a bug or make a suggestion regarding the Evince Document Viewer application or this manual, follow the directions in the <ulink url=\"ghelp:mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr "Để thông báo lỗi hoặc có đề nghị liên quan đến ứng dụng Evince hoặc tài liệu này, vui lòng làm theo hướng dẫn trong <ulink url=\"ghelp:mate-feedback\" type=\"help\">Trang phản hồi MATE</ulink>."
+
+#: C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Bộ xem tài liệu Evince"
+
+#: C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "Giới thiệu"
+
+#: C/evince.xml:129(para)
+msgid "The <application>Evince Document Viewer</application> application enables you to view documents of various formats like Portable Document Format (PDF) files and PostScript files. <application>Evince Document Viewer</application> follows Freedesktop.org and MATE standards to provide integration with Desktop Environment."
+msgstr "<application>Bộ xem tài liệu Evince</application> giúp bạn xem nhiều định dạng tài liệu như Portable Document Format (PDF) và PostScript. <application>Evince</application> được tích hợp với môi trường làm việc theo tiêu chuẩn mà Freedesktop.org và dự án MATE đề xuất."
+
+#: C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "Tìm hiểu Evince"
+
+#: C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "Để khởi động Bộ xem tài liệu Evince"
+
+#: C/evince.xml:140(para)
+msgid "<application>Evince Document Viewer</application> starts when you open a document such as a PDF or PostScript file."
+msgstr "<application>Bộ xem tài liệu Evince</application> sẽ tự động chạy mỗi khi bạn mở một tài liệu dạng PDF hoặc PostScript."
+
+#: C/evince.xml:141(para)
+msgid "Alternatively, you can start <application>Evince Document Viewer</application> from the command line, with the command: <command>evince</command>."
+msgstr "Tuy nhiên, bạn có thể mở <application>Evince</application> bằng nhiều cách khác, như gõ lệnh: <command>evince</command>."
+
+#: C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "Khi khởi động Evince"
+
+#: C/evince.xml:147(para)
+msgid "When you start <application>Evince Document Viewer</application>, the following window is displayed."
+msgstr "Khi chạy <application>Bộ xem tài liệu Evince</application>, cửa sổ sau sẽ hiện lên."
+
+#: C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Cửa sổ Evince"
+
+#: C/evince.xml:158(phrase)
+msgid "Shows Evince Document Viewer main window. Contains titlebar, menubar, toolbar and display area. Menubar contains File, Edit, View, Go and Help menus."
+msgstr "Cửa sổ chính của Evince. Các thành phần: thanh tiêu đề, thanh trình đơn, thanh công cụ và vùng hiển thị. Thanh trình đơn bao gồm các mục Tập tin, Hiệu chỉnh, Xem, Di chuyển và Trợ giúp."
+
+#: C/evince.xml:164(para)
+msgid "The <application>Evince Document Viewer</application> window contains the following elements:"
+msgstr "Cửa sổ chương trình <application>Evince</application> bao gồm các thành phần sau đây:"
+
+#: C/evince.xml:168(term)
+#: C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "Thanh trình đơn"
+
+#: C/evince.xml:170(para)
+msgid "The menus on the menubar contain all of the commands that you need to work with documents in <application>Evince Document Viewer</application>."
+msgstr "Thanh trình đơn chứa tất cả các lệnh để bạn sử dụng khi làm việc với các tài liệu trong <application>Bộ xem tài liệu Evince</application>."
+
+#: C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "Thanh công cụ"
+
+#: C/evince.xml:176(para)
+msgid "The toolbar contains a subset of the commands that you can access from the menubar."
+msgstr "Thanh công cụ chứa các nút lệnh cho phép bạn truy cập nhanh chóng vào các lệnh trên thanh trình đơn."
+
+#: C/evince.xml:180(term)
+msgid "Display area"
+msgstr "Vùng hiển thị"
+
+#: C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "Vùng hiển thị được dùng để trình bày nội dung tài liệu."
+
+#: C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "Các thành phần của giao diện người dùng"
+
+#: C/evince.xml:198(para)
+#: C/evince.xml:646(para)
+msgid "Action"
+msgstr "Hành động"
+
+#: C/evince.xml:203(para)
+msgid "Window"
+msgstr "Cửa sổ"
+
+#: C/evince.xml:207(para)
+msgid "Drag a file into the <application>Evince Document Viewer</application> window from another application such as a file manager."
+msgstr "Kéo một tập tin từ một ứng dụng khác, như bộ Quản lý tập tin chẳng hạn, vào trong cửa sổ <application>Bộ xem tài liệu Evince</application>."
+
+#: C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "Bấm đúp chuột trái lên tên tập tin trong Bộ quản lý tập tin"
+
+#: C/evince.xml:217(para)
+#: C/evince.xml:244(para)
+msgid "Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></menuchoice>."
+msgstr "Chọn <menuchoice><guimenu>Tập tin</guimenu><guimenuitem>Mở</guimenuitem></menuchoice>."
+
+#: C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "Các phím tắt"
+
+#: C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "Nhấn tổ hợp phím <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+
+#: C/evince.xml:187(para)
+msgid "In <application>Evince Document Viewer</application>, you can perform the same action in several ways. For example, you can open a document in the following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></tgroup></informaltable>"
+msgstr "Trong <application>Evince</application>, bạn có thể thực hiện một hành động theo nhiều cách khác nhau. Ví dụ, bạn có thể mở một tài liệu bằng một trong các cách sau: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></tgroup></informaltable>"
+
+#: C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "Bạn có thể mở tài liệu hướng dẫn này từ thanh trình đơn."
+
+#: C/evince.xml:236(title)
+msgid "Usage"
+msgstr "Cách dùng"
+
+#: C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "Để mở một tài liệu"
+
+#: C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "Để mở một tài liệu, hãy thực hiện các bước sau:"
+
+#: C/evince.xml:248(para)
+msgid "In the <guilabel>Open Document</guilabel> dialog, select the file you want to open."
+msgstr "Trong hộp thoại <guilabel>Mở tài liệu</guilabel>, chọn tập tin bạn cần mở."
+
+#: C/evince.xml:253(para)
+msgid "Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</application> displays the name of the document in the titlebar of the window."
+msgstr "Nhấn nút <guibutton>Mở</guibutton>. <application>Evince</application> sẽ hiển thị tên tập tin được mở trong phần thanh tiêu đề của cửa sổ chương trình."
+
+#: C/evince.xml:258(para)
+msgid "To open another document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. <application>Evince Document Viewer</application> opens each file in a new window."
+msgstr "Để mở một tài liệu khác, hãy chọn <menuchoice><guimenu>Tập tin</guimenu><guimenuitem>Mở</guimenuitem></menuchoice> thêm lần nữa. <application>Bộ xem tài liệu Evince</application> sẽ mở mỗi tập tin trong một cửa sổ riêng biệt."
+
+#: C/evince.xml:261(para)
+msgid "If you try to open a document with format that <application>Evince Document Viewer</application> does not recognize, the application displays an error message."
+msgstr "Nếu <application>Evince</application> không nhận dạng được định dạng của tài liệu bạn chọn để xem, chương trình sẽ phát một thông báo lỗi. "
+
+#: C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "Để di chuyển trong tài liệu"
+
+#: C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr "Bạn có thể di chuyển đến vị trí bất kỳ trong tài liệu bằng cách sau:"
+
+#: C/evince.xml:271(para)
+msgid "To view the next page, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr "Để xem trang kế tiếp, chọn <menuchoice><guimenu>Di chuyển</guimenu><guimenuitem>Trang sau</guimenuitem></menuchoice>."
+
+#: C/evince.xml:275(para)
+msgid "To view the previous page, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr "Để xem trang trước, chọn <menuchoice><guimenu>Di chuyển</guimenu><guimenuitem>Trang trước</guimenuitem></menuchoice>."
+
+#: C/evince.xml:279(para)
+msgid "To view the first page in the document, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr "Để xem trang đầu tiên, chọn <menuchoice><guimenu>Di chuyển</guimenu><guimenuitem>Trang đầu</guimenuitem></menuchoice>."
+
+#: C/evince.xml:283(para)
+msgid "To view the last page in the document, choose <menuchoice><guimenu>Go</guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr "Để xem trang cuối cùng, chọn <menuchoice><guimenu>Di chuyển</guimenu><guimenuitem>Trang cuối</guimenuitem></menuchoice>."
+
+#: C/evince.xml:287(para)
+msgid "To view a particular page, enter the page number or page label in the text box on the toolbar, then press <keycap>Return</keycap>."
+msgstr "Để xem một trang bất kỳ, hãy nhập số trang hoặc nhãn của trang vào ô văn bản ở trên thanh công cụ, rồi nhấn <keycap>Return</keycap>."
+
+#: C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "Để cuộn trang"
+
+#: C/evince.xml:295(para)
+msgid "To display the page contents that are not currently displayed in the display area, use the following methods:"
+msgstr "Để xem nội dung chưa được trình bày trong vùng hiển thị, hãy dùng các cách sau:"
+
+#: C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "Nhấn các phím mũi tên hoặc phím cách trên bàn phím."
+
+#: C/evince.xml:301(para)
+msgid "Drag the display area by clicking with the middle mouse button somewhere in the document and then moving the mouse. For example, to scroll down the page, drag the display area upwards in the window."
+msgstr "Dịch chuyển vùng hiển thị bằng cách nhấn chuột giữa vào trong tài liệu, rồi di chuyển vị trí con chuột. Ví dụ, để cuộn trang xuống phía dưới, hãy dùng chuột kéo dịch vùng hiển thị lên phía trên. "
+
+#: C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "Dùng các thanh cuộn của cửa sổ."
+
+#: C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "Để thay đổi kích cỡ trang"
+
+#: C/evince.xml:312(para)
+msgid "You can use the following methods to resize a page in the <application>Evince Document Viewer</application> display area:"
+msgstr "Bạn có thể sử dụng các cách sau để thay đổi kích thước trang tài liệu trong vùng hiển thị của <application>Evince</application>:"
+
+#: C/evince.xml:317(para)
+msgid "To increase the page size, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr "Để tăng kích cỡ trang, chọn <menuchoice><guimenu>Xem</guimenu><guimenuitem>Phóng to</guimenuitem></menuchoice>."
+
+#: C/evince.xml:322(para)
+msgid "To decrease the page size, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr "Để giảm kích cỡ trang, chọn <menuchoice><guimenu>Xem</guimenu><guimenuitem>Thu nhỏ</guimenuitem></menuchoice>."
+
+#: C/evince.xml:327(para)
+msgid "To resize a page to have the same width as the <application>Evince Document Viewer</application> display area, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr "Để đặt kích cỡ trang đúng bằng chiều rộng của vùng hiển thị trong cửa sổ <application>Evince</application>, chọn <menuchoice><guimenu>Xem</guimenu><guimenuitem>Vừa độ rộng trang</guimenuitem></menuchoice>."
+
+#: C/evince.xml:332(para)
+msgid "To resize a page to fit within the <application>Evince Document Viewer</application> display area, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr "Để đặt kích cỡ trang sao cho toàn bộ trang vừa khít trong vùng hiển thị của <application>Evince</application>, chọn <menuchoice><guimenu>Xem</guimenu><guimenuitem>Vừa khít</guimenuitem></menuchoice>."
+
+#: C/evince.xml:337(para)
+msgid "To resize the <application>Evince Document Viewer</application> window to have the same width and height as the screen, choose <menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></menuchoice>. To resize the <application>Evince Document Viewer</application> window to the original size, click on the <guibutton>Exit Full Screen</guibutton> button."
+msgstr "Để phóng to cửa sổ <application>Evince</application> ra toàn màn hình, chọn <menuchoice><guimenu>Xem</guimenu><guimenuitem>Toàn màn hình</guimenuitem></menuchoice>. Để thu cửa sổ <application>Evince</application> về kích thước cũ, nhấn vào nút <guibutton>Bỏ chế độ toàn màn hình</guibutton>."
+
+#: C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr "Để xem các trang hoặc cấu trúc của tài liệu"
+
+#: C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "Để xem các đánh dấu hoặc các trang, hãy thực hiện các bước sau:"
+
+#: C/evince.xml:350(para)
+msgid "Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr "Chọn <menuchoice><guimenu>Xem</guimenu><guimenuitem>Khung lề</guimenuitem></menuchoice> hoặc nhấn <keycap>F9</keycap>."
+
+#: C/evince.xml:355(para)
+msgid "Use the drop-down list in the side-pane header to select whether to display document structure or pages in the side pane."
+msgstr "Dùng danh sách thả xuống ở phần đầu khung lề để chọn chế độ hiển thị cấu trúc tài liệu, hoặc xem thử nội dung trang."
+
+#: C/evince.xml:360(para)
+msgid "Use the side-pane scrollbars to display the required item or page in the side pane."
+msgstr "Dùng thanh cuộn ở bên phải khung lề để tìm mục hoặc trang tài liệu mình cần."
+
+#: C/evince.xml:365(para)
+msgid "Click on an entry to navigate to that location in the document. Click on a page to navigate to that page in the document."
+msgstr "Nhấn vào một mục để di chuyển tới vị trí tương ứng trong tài liệu. Nhấn vào một trang để hiển thị nội dung của trang trong vùng hiển thị."
+
+#: C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "Để xem thuộc tính tài liệu"
+
+#: C/evince.xml:372(para)
+msgid "To view the properties of a document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr "Để xem thuộc tính của một tài liệu, hãy chọn <menuchoice><guimenu>Tập tin</guimenu><guimenuitem>Thông tin</guimenuitem></menuchoice>."
+
+#: C/evince.xml:378(para)
+msgid "The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr "Hộp thoại <guilabel>Thông tin</guilabel> xuất hiện, hiển thị các thông tin đi kèm tài liệu"
+
+#: C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "Để in tài liệu"
+
+#: C/evince.xml:385(para)
+msgid "To print a Document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr "Để in một tài liệu, chọn <menuchoice><guimenu>Tập tin</guimenu><guimenuitem>In</guimenuitem></menuchoice>."
+
+#: C/evince.xml:389(para)
+msgid "If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the author of the document has disabled the print option for this document. To enable the print option, you must enter the master password when you open the document. See <xref linkend=\"evince-password\"/> for more information about password-protected files."
+msgstr "Trong một số trường hợp, nếu tác giả khi tạo tài liệu đã đặt chế độ cấm không cho in tài liệu, bạn sẽ không chọn được lệnh <guimenuitem>In</guimenuitem>. Lúc này, bạn phải nhập mật khẩu phù hợp thì chương trình mới có thể in tài liệu này. Xin xem <xref linkend=\"evince-password\"/> để biết thêm thông tin về cách xử lý các tập tin được mã hóa bằng mật khẩu."
+
+#: C/evince.xml:393(para)
+msgid "The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr "Hộp thoại <guilabel>In</guilabel> có các phần sau:"
+
+#: C/evince.xml:399(link)
+#: C/evince.xml:415(title)
+msgid "Job"
+msgstr ""
+
+#: C/evince.xml:404(link)
+#: C/evince.xml:437(title)
+#: C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr ""
+
+#: C/evince.xml:409(link)
+#: C/evince.xml:531(title)
+msgid "Paper"
+msgstr ""
+
+#: C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "Phạm vi in"
+
+#: C/evince.xml:419(para)
+msgid "Select one of the following options to determine how many pages to print:"
+msgstr "Chọn một trong các tùy chọn ở dưới để đặt phạm vi in:"
+
+#: C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "Tất cả"
+
+#: C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "Chọn mục này để in tất cả các trang của tài liệu."
+
+#: C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "Từ trang"
+
+#: C/evince.xml:427(para)
+msgid "Select this option to print the selected range of pages in the document. Use the spin boxes to specify the first page and last page of the range."
+msgstr "Chọn mục này để in một vài trang nhất định của tài liệu. Dùng các ô xoay để chọn trang đầu và trang cuối của phạm vi cần in ra."
+
+#: C/evince.xml:441(para)
+msgid "Use this drop-down list to select the printer to which you want to print the document."
+msgstr "Dùng ô danh sách thả xuống này để chọn máy in mà bạn muốn dùng để in tài liệu này."
+
+#: C/evince.xml:443(para)
+msgid "The <guilabel>Create a PDF document</guilabel> option is not supported in this version of <application>Evince Document Viewer</application>."
+msgstr "Tùy chọn <guilabel>Tạo tài liệu PDF</guilabel> chưa được hỗ trợ trong phiên bản <application>Evince</application> hiện thời."
+
+#: C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "Thiết lập"
+
+#: C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "Dùng danh sách thả xuống này để thiết lập máy in."
+
+#: C/evince.xml:453(para)
+msgid "To configure the printer, click <guibutton>Configure</guibutton>. For example, you can enable or disable duplex printing, or schedule delayed printing, if this functionality is supported by the printer."
+msgstr "Để cấu hình máy in, nhấn vào nút <guibutton>Thiết lập</guibutton>. Ví dụ, bạn có thể bật hoặc tắt chức năng in song công, hoặc đặt thời gian trễ thực hiện việc in, nếu máy in của mình có tính năng này."
+
+#: C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "Vị trí"
+
+#: C/evince.xml:459(para)
+msgid "Use this drop-down list to select one of the following print destinations:"
+msgstr "Dùng ô danh sách thả xuống này để chọn một trong các đích in:"
+
+#: C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "In tài liệu ra máy in CUPS."
+
+#: C/evince.xml:470(para)
+msgid "If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the only entry in this drop-down list."
+msgstr "Nếu máy in được chọn là một máy in CUPS, <guilabel>CUPS</guilabel> là mục duy nhất có trong danh sách chọn."
+
+#: C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "In tài liệu ra máy in."
+
+#: C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "File"
+
+#: C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "In tài liệu ra một tập tin PostScript."
+
+#: C/evince.xml:490(para)
+msgid "Click <guibutton>Save As</guibutton> to display a dialog where you specify the name and location of the PostScript file."
+msgstr "Nhấn nút <guibutton>Lưu thành</guibutton> để hiển thị hộp thoại chọn tên và vị trí của tập tin PostScript sẽ xuất ra."
+
+#: C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "Tùy chọn"
+
+#: C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "Tự nhập một lệnh riêng để in tài liệu."
+
+#: C/evince.xml:501(para)
+msgid "Type the name of the command in the text box. Include all command-line arguments."
+msgstr "Gõ tên lệnh và các tham số của lệnh vào ô văn bản."
+
+#: C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "Trạng thái"
+
+#: C/evince.xml:511(para)
+#: C/evince.xml:517(para)
+#: C/evince.xml:523(para)
+msgid "This functionality is not supported in this version of <application>Evince Document Viewer</application>."
+msgstr "Tính năng này chưa được hỗ trợ trong phiên bản <application>Evince</application> hiện thời."
+
+#: C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "Loại"
+
+#: C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "Ghi chú"
+
+#: C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "Kích thước trang"
+
+#: C/evince.xml:535(para)
+msgid "Use this drop-down list to select the size of the paper to which you want to print the document."
+msgstr "Dùng danh sách thả xuống này để chọn kích thước trang giấy muốn dùng khi in tài liệu ra."
+
+#: C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "Chiều rộng"
+
+#: C/evince.xml:540(para)
+msgid "Use this spin box to specify the width of the paper. Use the adjacent drop-down list to change the measurement unit."
+msgstr "Dùng hộp xoay này để chọn chiều rộng của tờ giấy. Chọn đơn vị đo trong ô kế bên."
+
+#: C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "Chiều cao"
+
+#: C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "Dùng hộp xoay này để chọn chiều cao của tờ giấy. Chọn đơn vị đo trong ô kế bên."
+
+#: C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "Hướng trang in ra"
+
+#: C/evince.xml:550(para)
+msgid "Use this drop-down list to select the orientation of the paper in the printer."
+msgstr "Dùng danh sách thả xuống này để chọn hướng giấy cho máy in."
+
+#: C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr ""
+
+#: C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "Dùng danh sách thả xuống này để chọn hướng giấy."
+
+#: C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr ""
+
+#: C/evince.xml:560(para)
+msgid "Use this drop-down list to select the page layout. A preview of each layout that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr "Dùng danh sách thả xuống này để chọn bố cục giấy. Có thể xem thử bố cục được chọn trong vùng <guilabel>Xem thử</guilabel>."
+
+#: C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr ""
+
+#: C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "Dùng danh sách thả xuống này để chọn khay giấy."
+
+#: C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "Để sao chép tài liệu"
+
+#: C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "Để sao chép tài liệu, hãy thực hiện các bước sau:"
+
+#: C/evince.xml:580(para)
+msgid "Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</guimenuitem></menuchoice>."
+msgstr "Chọn <menuchoice><guimenu>Tập tin</guimenu><guimenuitem>Lưu một bản sao</guimenuitem></menuchoice>."
+
+#: C/evince.xml:585(para)
+msgid "Type the new filename in the <guilabel>Filename</guilabel> text box in the <guilabel>Save a Copy</guilabel> dialog."
+msgstr "Gõ tên tập tin mới vào trong ô <guilabel>Tên tập tin</guilabel> của hộp thoại <guilabel>Lưu một bản sao</guilabel>."
+
+#: C/evince.xml:588(para)
+msgid "If necessary, specify the location of the copied document. By default, copies are saved in your home directory."
+msgstr "Nếu cần, chọn thư mục muốn dùng để lưu bản sao. Mặc định là thư mục chính của bạn."
+
+#: C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "Nhấn nút <guibutton>Lưu</guibutton>."
+
+#: C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "Làm việc với các tài liệu được bảo vệ bằng mật khẩu"
+
+#: C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr "Bằng mật khẩu, tác giả có thể đặt các mức bảo vệ sau đối với tài liệu:"
+
+#: C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr "Mật khẩu người dùng, chỉ cho phép người khác đọc tài liệu."
+
+#: C/evince.xml:612(para)
+msgid "Master password that allows others to perform additional actions, such as print the document."
+msgstr "Mật khẩu người chủ, cho phép người khác thực hiện các hành động khác, ví dụ như in tài liệu chả hạn."
+
+#: C/evince.xml:616(para)
+msgid "When you try to open a password-protected document, <application>Evince Document Viewer</application> displays a security dialog. Type either the user password or the master password in the <guilabel>Enter document password</guilabel> text box, then click <guibutton>Open Document</guibutton>."
+msgstr "Khi bạn mở một tài liệu được bảo vệ bằng mật khẩu, <application>Evince</application> sẽ hiển thị một hộp thoại bảo mật. Tại đây, hãy nhập mật khẩu người dùng hoặc mật khẩu chủ vào ô <guilabel>Nhập mật khẩu</guilabel>, sau đó nhấn <guibutton>Mở tài liệu</guibutton>."
+
+#: C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "Để đóng tài liệu"
+
+#: C/evince.xml:624(para)
+msgid "To close a document, choose <menuchoice><guimenu>File</guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr "Để đóng tài liệu, chọn <menuchoice><guimenu>Tập tin</guimenu><guimenuitem>Đóng</guimenuitem></menuchoice>."
+
+#: C/evince.xml:626(para)
+msgid "If the window is the last <application>Evince Document Viewer</application> window open, the application exits."
+msgstr "Nếu cửa sổ hiện thời là cửa sổ <application>Evince</application> cuối cùng đang mở, thao tác này sẽ kết thúc hoạt động của chương trình."
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "Phím tắt"
+
+#: C/evince.xml:636(para)
+msgid "Below is a list of all shortcuts present in <application>Evince Document Viewer</application>:"
+msgstr "Bảng dưới đây liệt kê tất cả các phím tắt được sử dụng trong <application>Bộ xem tài liệu Evince</application>:"
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "Phím tắt"
+
+#: C/evince.xml:651(keycap)
+#: C/evince.xml:655(keycap)
+#: C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap)
+#: C/evince.xml:667(keycap)
+#: C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap)
+#: C/evince.xml:683(keycap)
+#: C/evince.xml:704(keycap)
+#: C/evince.xml:750(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "Mở một tài liệu khác"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "Lưu một bản sao của tài liệu hiện thời"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "In tài liệu"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "Đóng cửa sổ"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "Chép vùng chọn"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "Chọn tất cả"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (xuộc)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "Tìm một từ hoặc cụm từ trong tài liệu"
+
+#: C/evince.xml:683(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:684(keycap)
+msgid "F3"
+msgstr "F3"
+
+#: C/evince.xml:686(para)
+msgid "Find next"
+msgstr "Tìm tiếp"
+
+#: C/evince.xml:690(para)
+msgid "<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr "<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (dấu cộng)"
+
+#: C/evince.xml:691(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:692(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:694(para)
+msgid "Zoom in"
+msgstr "Phóng to"
+
+#: C/evince.xml:698(para)
+msgid "<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr "<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (dấu trừ)"
+
+#: C/evince.xml:699(keycap)
+msgid "-"
+msgstr "-"
+
+#: C/evince.xml:701(para)
+msgid "Zoom out"
+msgstr "Thu nhỏ"
+
+#: C/evince.xml:704(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:705(para)
+msgid "Reload the document"
+msgstr "Nạp lại nội dung tài liệu"
+
+#: C/evince.xml:709(keycap)
+#: C/evince.xml:734(keycap)
+msgid "Page Up"
+msgstr "Page Up"
+
+#: C/evince.xml:710(para)
+msgid "Go to the previous page"
+msgstr "Chuyển đến trang trước"
+
+#: C/evince.xml:713(keycap)
+#: C/evince.xml:738(keycap)
+msgid "Page Down"
+msgstr "Page Down"
+
+#: C/evince.xml:714(para)
+msgid "Go to the next page"
+msgstr "Chuyển đến trang kế tiếp"
+
+#: C/evince.xml:718(keycap)
+#: C/evince.xml:726(keycap)
+msgid "Space"
+msgstr "Phím cách"
+
+#: C/evince.xml:719(keycap)
+#: C/evince.xml:726(keycap)
+#: C/evince.xml:728(keycap)
+#: C/evince.xml:734(keycap)
+#: C/evince.xml:738(keycap)
+msgid "Shift"
+msgstr "Shift"
+
+#: C/evince.xml:719(keycap)
+#: C/evince.xml:727(keycap)
+msgid "Backspace"
+msgstr "Backspace"
+
+#: C/evince.xml:720(keycap)
+#: C/evince.xml:728(keycap)
+msgid "Return"
+msgstr "Return"
+
+#: C/evince.xml:722(para)
+msgid "Scroll forward"
+msgstr "Cuộn xuống dưới"
+
+#: C/evince.xml:730(para)
+msgid "Scroll backward"
+msgstr "Cuộn lên trên"
+
+#: C/evince.xml:735(para)
+msgid "Go a bunch of pages up"
+msgstr "Di chuyển xuống dưới nhiều trang"
+
+#: C/evince.xml:739(para)
+msgid "Go a bunch of pages down"
+msgstr "Di chuyển lên trên nhiều trang"
+
+#: C/evince.xml:742(keycap)
+msgid "Home"
+msgstr "Home"
+
+#: C/evince.xml:743(para)
+msgid "Go to the first page"
+msgstr "Chuyển đến trang đầu"
+
+#: C/evince.xml:746(keycap)
+msgid "End"
+msgstr "End"
+
+#: C/evince.xml:747(para)
+msgid "Go to the last page"
+msgstr "Chuyển đến trang cuối"
+
+#: C/evince.xml:750(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:751(para)
+msgid "Go to page by number or label"
+msgstr "Chuyển đến trang bằng nhãn hoặc số trang tương ứng"
+
+#: C/evince.xml:754(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:755(para)
+msgid "Help"
+msgstr "Xem trợ giúp"
+
+#: C/evince.xml:758(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:759(para)
+msgid "Run document as presentation"
+msgstr "Xem tài liệu dưới dạng trình diễn"
+
+#: C/evince.xml:762(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:763(para)
+msgid "Show or hide the side pane"
+msgstr "Ẩn hoặc hiện khung lề"
+
+#: C/evince.xml:766(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:767(para)
+msgid "Toggle fullscreen mode"
+msgstr "Bật/tắt chế độ toàn màn hình"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr "Nguyễn Đình Trung <[email protected]>, 2009"
+
diff --git a/help/zh_CN/zh_CN.po b/help/zh_CN/zh_CN.po
new file mode 100644
index 00000000..be4b9ff9
--- /dev/null
+++ b/help/zh_CN/zh_CN.po
@@ -0,0 +1,1183 @@
+# Chinese (China) help translation for evince.
+# Copyright (C) 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince package.
+# Zhang Chen <[email protected]>, 2008.
+# 朱涛 <[email protected]>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince master\n"
+"POT-Creation-Date: 2010-07-03 09:08+0000\n"
+"PO-Revision-Date: 2010-07-11 21:52+0800\n"
+"Last-Translator: 朱涛 <[email protected]>\n"
+"Language-Team: Chinese i18n <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: C/evince.xml:155(None)
+msgid ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+msgstr ""
+"@@image: 'figures/evince_start_window.png'; "
+"md5=7f4da5e33bcac35738a268d93d497d47"
+
+#: C/evince.xml:25(title)
+msgid "Evince Document Viewer Manual"
+msgstr "Evince 文档查看器手册"
+
+#: C/evince.xml:27(para)
+msgid ""
+"The Evince Document Viewer application enables you to view documents of "
+"various formats like Portable Document Format (PDF) files and PostScript "
+"files"
+msgstr "Evince 文档查看器可查阅多种不同格式(如 PDF 和 PostScript 等)的文档。"
+
+#: C/evince.xml:33(year)
+msgid "2005"
+msgstr "2005"
+
+#: C/evince.xml:34(holder) C/evince.xml:100(para)
+msgid "Nickolay V. Shmyrev"
+msgstr "Nickolay V. Shmyrev"
+
+#: C/evince.xml:37(year)
+msgid "2004"
+msgstr "2004"
+
+#: C/evince.xml:38(holder) C/evince.xml:61(orgname)
+msgid "Sun Microsystems"
+msgstr "Sun Microsystems"
+
+#: C/evince.xml:49(publishername) C/evince.xml:67(orgname)
+#: C/evince.xml:93(para) C/evince.xml:101(para)
+msgid "MATE Documentation Project"
+msgstr "MATE 文档项目"
+
+#: C/evince.xml:2(para)
+msgid ""
+"Permission is granted to copy, distribute and/or modify this document under "
+"the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any "
+"later version published by the Free Software Foundation with no Invariant "
+"Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy "
+"of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or "
+"in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"对于本文档的复制、分发和/或修改必须遵循自由软件基金会 (Free Software "
+"Foundation) 发布的 GNU 自由文档许可证 (GFDL) 版本 1.1 或更高版本,该许可证没"
+"有固定的部分、没有封面和背页文本。您可以在此<ulink type=\"help\" url=\"ghelp:"
+"fdl\">链接</ulink>上或在随本手册一起分发的 COPYING-DOCS 文件中找到 GFDL 的副"
+"本。"
+
+#: C/evince.xml:12(para)
+msgid ""
+"This manual is part of a collection of MATE manuals distributed under the "
+"GFDL. If you want to distribute this manual separately from the collection, "
+"you can do so by adding a copy of the license to the manual, as described in "
+"section 6 of the license."
+msgstr ""
+"本手册是在 GFDL 许可之下分发的 MATE 手册集合的一部分。如果想要单独分发此手"
+"册,可以在手册中添加该许可证的一份副本然后分发,如该许可证的第 6 部分所述。"
+
+#: C/evince.xml:19(para)
+msgid ""
+"Many of the names used by companies to distinguish their products and "
+"services are claimed as trademarks. Where those names appear in any MATE "
+"documentation, and the members of the MATE Documentation Project are made "
+"aware of those trademarks, then the names are in capital letters or initial "
+"capital letters."
+msgstr ""
+"各个公司使用的许多用于区别它们产品和服务的名称都声明为商标。在所有的 MATE 文"
+"档以及 MATE 文档项目的成员中,这些名称都是以全大写字母或首字母大写显示,从而"
+"表明它们是商标。"
+
+#: C/evince.xml:35(para)
+msgid ""
+"DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, "
+"EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT "
+"THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS "
+"MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE "
+"RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR "
+"MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR "
+"MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL "
+"WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY "
+"SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN "
+"ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
+"OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"文档按“原样”提供,不提供任何明示或暗示的保证,包括但不限于:文档或文档的修改"
+"版本没有适销性方面的缺陷、适合特定目的的适用性,以及没有侵权行为。您将自行承"
+"担本文档以及文档修改版本的质量、准确性以及性能方面的风险。如果任何文档或文档"
+"修改版本存在缺陷,您(而不是最初的编写者、作者或撰写人)将承担所有必需的服"
+"务、维修或更正的费用。此免责声明是本许可证的重要组成部分。如果不接受此免责声"
+"明,那么您就没有权利使用任何文档或文档的修改版本;并且"
+
+#: C/evince.xml:55(para)
+msgid ""
+"UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING "
+"NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY "
+"CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE "
+"DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON "
+"FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF "
+"ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, "
+"WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES "
+"OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED "
+"VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE "
+"POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"无论在任何情况以及在任何法律理论下,本文档或文档修改版本的作者、最初的编写"
+"者、任何撰写人或任何分发者,或者任意这些方的任何提供者都不对任何人由于使用本"
+"文档或文档修改版本引起或带来的任何直接的、间接的、特殊的、偶然的或继发的损失"
+"承担任何民事(包括疏忽)、合同或其它方面的责任,这些损失包括但不限于信誉损"
+"失、工作停止、计算机失败或故障,或任何以及所有其它损失或由此引发的或与之相关"
+"的损失,即使这些方已被告知存在出现此类损失的可能性时也是如此。"
+
+#: C/evince.xml:28(para)
+msgid ""
+"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
+"OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: "
+"<placeholder-1/>"
+msgstr ""
+"本文档以及文档的修改版本都是在遵循 GNU 自由文档许可证的条款下提供,这表示具有"
+"以下含义:<placeholder-1/>"
+
+#: C/evince.xml:59(firstname)
+msgid "Sun"
+msgstr "Sun"
+
+#: C/evince.xml:60(surname)
+msgid "MATE Documentation Team"
+msgstr "MATE 文档小组"
+
+#: C/evince.xml:64(firstname)
+msgid "Nickolay V."
+msgstr "Nickolay V."
+
+#: C/evince.xml:65(surname)
+msgid "Shmyrev"
+msgstr "Shmyrev"
+
+#: C/evince.xml:68(email)
+
+#: C/evince.xml:88(revnumber)
+msgid "Evince Document Viewer Manual V1.1"
+msgstr "Evince 文档查看器手册 V1.1"
+
+#: C/evince.xml:89(date)
+msgid "2008-04-05"
+msgstr "2008年4月5日"
+
+#: C/evince.xml:91(para)
+msgid "Niels Giesen"
+msgstr "Niels Giesen"
+
+#: C/evince.xml:92(para)
+msgid "Claude Paroz"
+msgstr "Claude Paroz"
+
+#: C/evince.xml:97(revnumber)
+msgid "Evince Document Viewer Manual V1.0"
+msgstr "Evince 文档查看器手册 V1.0"
+
+#: C/evince.xml:98(date)
+msgid "2005-04-06"
+msgstr "2005年4月6日"
+
+#: C/evince.xml:106(releaseinfo)
+msgid "This manual describes version 0.2 of Evince Document Viewer"
+msgstr "此手册描述的是0.2版的 Evince 文档查看器。"
+
+#: C/evince.xml:109(title)
+msgid "Feedback"
+msgstr "反馈"
+
+#: C/evince.xml:110(para)
+msgid ""
+"To report a bug or make a suggestion regarding the Evince Document Viewer "
+"application or this manual, follow the directions in the <ulink url=\"ghelp:"
+"mate-feedback\" type=\"help\">MATE Feedback Page</ulink>."
+msgstr ""
+"欲报告 bug 或提出针对 Evince 文档查看器的程序或手册的建议,请参照 <ulink url="
+"\"ghelp:mate-feedback\" type=\"help\">MATE 反馈页</ulink>的指示。"
+
+#: C/evince.xml:117(primary)
+msgid "Evince Document Viewer"
+msgstr "Evince 文档查看器"
+
+#: C/evince.xml:120(primary)
+msgid "evince"
+msgstr "evince"
+
+#: C/evince.xml:128(title)
+msgid "Introduction"
+msgstr "简介"
+
+#: C/evince.xml:129(para)
+msgid ""
+"The <application>Evince Document Viewer</application> application enables "
+"you to view documents of various formats like Portable Document Format (PDF) "
+"files and PostScript files. <application>Evince Document Viewer</"
+"application> follows Freedesktop.org and MATE standards to provide "
+"integration with Desktop Environment."
+msgstr ""
+"<application>Evince 文档查看器</application>可查阅多种不同格式(如 PDF 和 "
+"PostScript 等)的文档。 <application>Evince 文档查看器</application>遵循 "
+"Freedesktop.org 与 MATE 标准,以同“桌面环境”整合。"
+
+#: C/evince.xml:136(title)
+msgid "Getting Started"
+msgstr "新手上路"
+
+#: C/evince.xml:139(title)
+msgid "To Start Evince Document Viewer"
+msgstr "启动 Evince 文档查看器 "
+
+#: C/evince.xml:140(para)
+msgid ""
+"<application>Evince Document Viewer</application> starts when you open a "
+"document such as a PDF or PostScript file."
+msgstr ""
+"<application>Evince 文档查看器</application>会在您打开一个如 PDF 或 "
+"PostScript 文件之类的文档时启动。"
+
+#: C/evince.xml:141(para)
+msgid ""
+"Alternatively, you can start <application>Evince Document Viewer</"
+"application> from the command line, with the command: <command>evince</"
+"command>."
+msgstr ""
+"或者,您可以从命令行里,用命令 <command>evince</command> 启动 "
+"<application>Evince 文档查看器</application>。"
+
+#: C/evince.xml:146(title)
+msgid "When You Start Evince Document Viewer"
+msgstr "当您启动 Evince 文档查看器时"
+
+#: C/evince.xml:147(para)
+msgid ""
+"When you start <application>Evince Document Viewer</application>, the "
+"following window is displayed."
+msgstr ""
+"当您启动 <application>Evince 文档查看器</application>时,会显示以下窗口。"
+
+#: C/evince.xml:151(title)
+msgid "Evince Document Viewer Window"
+msgstr "Evince 文档查看器窗口"
+
+#: C/evince.xml:158(phrase)
+msgid ""
+"Shows Evince Document Viewer main window. Contains titlebar, menubar, "
+"toolbar and display area. Menubar contains File, Edit, View, Go and Help "
+"menus."
+msgstr ""
+"此图展示了 Evince 文档查看器窗口。包括标题栏,菜单栏,工具栏和显示区域。菜单"
+"栏包括文件,编辑,查看,转到和帮助等菜单。"
+
+#: C/evince.xml:164(para)
+msgid ""
+"The <application>Evince Document Viewer</application> window contains the "
+"following elements:"
+msgstr "Evince 文档查看器窗口包括以下要素:"
+
+#: C/evince.xml:168(term) C/evince.xml:216(para)
+msgid "Menubar"
+msgstr "菜单栏"
+
+#: C/evince.xml:170(para)
+msgid ""
+"The menus on the menubar contain all of the commands that you need to work "
+"with documents in <application>Evince Document Viewer</application>."
+msgstr ""
+"菜单栏里的菜单包含了所有您在 <application>Evince 文档查看器</application>里查"
+"阅文档时所需的所有命令。"
+
+#: C/evince.xml:174(term)
+msgid "Toolbar"
+msgstr "工具栏"
+
+#: C/evince.xml:176(para)
+msgid ""
+"The toolbar contains a subset of the commands that you can access from the "
+"menubar."
+msgstr "工具栏包含了可从菜单栏里访问的全部命令的一个子集。"
+
+#: C/evince.xml:180(term)
+msgid "Display area"
+msgstr "显示区域"
+
+#: C/evince.xml:182(para)
+msgid "The display area displays the document."
+msgstr "显示区域负责显示文档。"
+
+#: C/evince.xml:196(para)
+msgid "UI Component"
+msgstr "UI 组件"
+
+#: C/evince.xml:198(para) C/evince.xml:646(para)
+msgid "Action"
+msgstr "动作"
+
+#: C/evince.xml:203(para)
+msgid "Window"
+msgstr "窗口"
+
+#: C/evince.xml:207(para)
+msgid ""
+"Drag a file into the <application>Evince Document Viewer</application> "
+"window from another application such as a file manager."
+msgstr ""
+"将文件从另一个程序,如文件管理器,拖动至 <application>Evince 文档查看器</"
+"application>窗口。"
+
+#: C/evince.xml:210(para)
+msgid "Double-click on the file name in the file manager"
+msgstr "在文件管理器中双击文件名"
+
+#: C/evince.xml:217(para) C/evince.xml:244(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Open</guimenuitem></"
+"menuchoice>."
+msgstr ""
+"选择 <menuchoice><guimenu>文件</guimenu><guimenuitem>打开</guimenuitem></"
+"menuchoice>"
+
+#: C/evince.xml:221(para)
+msgid "Shortcut keys"
+msgstr "快捷键"
+
+#: C/evince.xml:222(para)
+msgid "Press <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>."
+msgstr "按 <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo>。"
+
+#: C/evince.xml:187(para)
+msgid ""
+"In <application>Evince Document Viewer</application>, you can perform the "
+"same action in several ways. For example, you can open a document in the "
+"following ways: <informaltable frame=\"all\"><tgroup cols=\"2\" colsep=\"1\" "
+"rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth=\"50*\"/><colspec "
+"colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/><placeholder-2/></"
+"tgroup></informaltable>"
+msgstr ""
+"在 <application>Evince 文档查看器</application>中,您可以用几种方式做出相同动"
+"作。例如,您可以用下列方式打开一个文档:<informaltable frame=\"all\"><tgroup "
+"cols=\"2\" colsep=\"1\" rowsep=\"1\"><colspec colname=\"COLSPEC0\" colwidth="
+"\"50*\"/><colspec colname=\"COLSPEC1\" colwidth=\"50*\"/><placeholder-1/"
+"><placeholder-2/></tgroup></informaltable>"
+
+#: C/evince.xml:228(para)
+msgid "This manual documents functionality from the menubar."
+msgstr "此手册记录了菜单栏的功能。"
+
+#: C/evince.xml:236(title)
+msgid "Usage"
+msgstr "使用"
+
+#: C/evince.xml:240(title)
+msgid "To Open A Document"
+msgstr "打开一个文档"
+
+#: C/evince.xml:241(para)
+msgid "To open a document, perform the following steps:"
+msgstr "欲打开一个文档,执行下列步骤:"
+
+#: C/evince.xml:248(para)
+msgid ""
+"In the <guilabel>Open Document</guilabel> dialog, select the file you want "
+"to open."
+msgstr "在 <guilabel>打开文档</guilabel> 对话框里,选择您想要打开的文件。"
+
+#: C/evince.xml:253(para)
+msgid ""
+"Click <guibutton>Open</guibutton>. <application>Evince Document Viewer</"
+"application> displays the name of the document in the titlebar of the window."
+msgstr ""
+"单击<guibutton>打开</guibutton>。<application>Evince 文档查看器</application>"
+"在窗口的标题栏上显示出文档的名字"
+
+#: C/evince.xml:258(para)
+msgid ""
+"To open another document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Open</guimenuitem></menuchoice> again. "
+"<application>Evince Document Viewer</application> opens each file in a new "
+"window."
+msgstr ""
+"欲打开另一文档,再次选择<menuchoice><guimenu>文件</guimenu><guimenuitem>打开"
+"</guimenuitem></menuchoice>。<application>Evince 文档查看器</application>会逐"
+"一在新窗口中打开每个文件。"
+
+#: C/evince.xml:261(para)
+msgid ""
+"If you try to open a document with format that <application>Evince Document "
+"Viewer</application> does not recognize, the application displays an error "
+"message."
+msgstr ""
+"若您试图打开一个 <application>Evince 文档查看器</application>无法识别格式的文"
+"件,本程序会显示一条错误消息。"
+
+#: C/evince.xml:267(title)
+msgid "To Navigate Through a Document"
+msgstr "浏览文档"
+
+#: C/evince.xml:268(para)
+msgid "You can navigate through a file as follows:"
+msgstr "您可以下列方式浏览文件:"
+
+#: C/evince.xml:271(para)
+msgid ""
+"To view the next page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Next Page</guimenuitem></menuchoice>."
+msgstr ""
+"欲查看下一页,选择<menuchoice><guimenu>转到</guimenu><guimenuitem>下一页</"
+"guimenuitem></menuchoice>。"
+
+#: C/evince.xml:275(para)
+msgid ""
+"To view the previous page, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Previous Page</guimenuitem></menuchoice>."
+msgstr ""
+"欲查看上一页,选择<menuchoice><guimenu>转到</guimenu><guimenuitem>上一页</"
+"guimenuitem></menuchoice>。"
+
+#: C/evince.xml:279(para)
+msgid ""
+"To view the first page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>First Page</guimenuitem></menuchoice>."
+msgstr ""
+"欲查看第一页,选择<menuchoice><guimenu>转到</guimenu><guimenuitem>第一页</"
+"guimenuitem></menuchoice>。"
+
+#: C/evince.xml:283(para)
+msgid ""
+"To view the last page in the document, choose <menuchoice><guimenu>Go</"
+"guimenu><guimenuitem>Last Page</guimenuitem></menuchoice>."
+msgstr ""
+"欲查看最后一页,选择<menuchoice><guimenu>转到</guimenu><guimenuitem>最后一页"
+"</guimenuitem></menuchoice>。"
+
+#: C/evince.xml:287(para)
+msgid ""
+"To view a particular page, enter the page number or page label in the text "
+"box on the toolbar, then press <keycap>Return</keycap>."
+msgstr ""
+"欲查看某页,在工具栏的文本框内键入页码或页标签,按<keycap>Return</keycap>"
+
+#: C/evince.xml:294(title)
+msgid "To Scroll a Page"
+msgstr "卷动页面"
+
+#: C/evince.xml:295(para)
+msgid ""
+"To display the page contents that are not currently displayed in the display "
+"area, use the following methods:"
+msgstr "显示当前显示区域里没有显示的页面内容,可用下列方法:"
+
+#: C/evince.xml:298(para)
+msgid "Use the arrow keys or space key on the keyboard."
+msgstr "用键盘的方向键或空格键。"
+
+#: C/evince.xml:301(para)
+msgid ""
+"Drag the display area by clicking with the middle mouse button somewhere in "
+"the document and then moving the mouse. For example, to scroll down the "
+"page, drag the display area upwards in the window."
+msgstr ""
+"在文档中某处按下鼠标中键然后移动鼠标,可以拖动显示区域。例如,要向下卷动页"
+"面,可在窗口中向上拖动显示区域。"
+
+#: C/evince.xml:304(para)
+msgid "Use the scrollbars on the window."
+msgstr "使用窗口滚动条"
+
+#: C/evince.xml:311(title)
+msgid "To Change the Page Size"
+msgstr "改变页面大小"
+
+#: C/evince.xml:312(para)
+msgid ""
+"You can use the following methods to resize a page in the "
+"<application>Evince Document Viewer</application> display area:"
+msgstr ""
+"您可用下列方法改变 <application>Evince 文档查看器</application>显示区域的大"
+"小:"
+
+#: C/evince.xml:317(para)
+msgid ""
+"To increase the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom In</guimenuitem></menuchoice>."
+msgstr ""
+"欲增大页面尺寸,选择<menuchoice><guimenu>查看</guimenu><guimenuitem>放大</"
+"guimenuitem></menuchoice>。"
+
+#: C/evince.xml:322(para)
+msgid ""
+"To decrease the page size, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Zoom Out</guimenuitem></menuchoice>."
+msgstr ""
+"欲减小页面尺寸,选择<menuchoice><guimenu>查看</guimenu><guimenuitem>缩小</"
+"guimenuitem></menuchoice>。"
+
+#: C/evince.xml:327(para)
+msgid ""
+"To resize a page to have the same width as the <application>Evince Document "
+"Viewer</application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Fit page width</guimenuitem></menuchoice>."
+msgstr ""
+"欲将页面宽度设为 <application>Evince 文档查看器</application>显示区域的相同宽"
+"度,选择<menuchoice><guimenu>查看</guimenu><guimenuitem>适合宽度</"
+"guimenuitem></menuchoice>。"
+
+#: C/evince.xml:332(para)
+msgid ""
+"To resize a page to fit within the <application>Evince Document Viewer</"
+"application> display area, choose <menuchoice><guimenu>View</"
+"guimenu><guimenuitem>Best Fit</guimenuitem></menuchoice>."
+msgstr ""
+"欲将页面大小设为与 <application>Evince 文档查看器</application>显示区域一致,"
+"选择<menuchoice><guimenu>查看</guimenu><guimenuitem>最适合</guimenuitem></"
+"menuchoice>。"
+
+#: C/evince.xml:337(para)
+msgid ""
+"To resize the <application>Evince Document Viewer</application> window to "
+"have the same width and height as the screen, choose "
+"<menuchoice><guimenu>View</guimenu><guimenuitem>Full Screen</guimenuitem></"
+"menuchoice>. To resize the <application>Evince Document Viewer</application> "
+"window to the original size, click on the <guibutton>Exit Full Screen</"
+"guibutton> button."
+msgstr ""
+"欲将 <application>Evince 文档查看器</application>窗口大小设为屏幕高度和宽度,"
+"选择<menuchoice><guimenu>查看</guimenu><guimenuitem>全屏幕</guimenuitem></"
+"menuchoice>。欲将 <application>Evince 文档查看器</application>窗口大小恢复到"
+"原始大小,单击<guibutton>离开全屏</guibutton>按钮。"
+
+#: C/evince.xml:345(title)
+msgid "To View Pages or Document Structure"
+msgstr "查看页面或文档结构"
+
+#: C/evince.xml:346(para)
+msgid "To view bookmarks or pages, perform the following steps:"
+msgstr "查看书签或页面,执行下列步骤:"
+
+#: C/evince.xml:350(para)
+msgid ""
+"Choose <menuchoice><guimenu>View</guimenu><guimenuitem>Sidebar</"
+"guimenuitem></menuchoice> or press <keycap>F9</keycap>."
+msgstr ""
+"选择<menuchoice><guimenu>查看</guimenu><guimenuitem>侧边栏</guimenuitem></"
+"menuchoice>或 <keycap>F9</keycap>。"
+
+#: C/evince.xml:355(para)
+msgid ""
+"Use the drop-down list in the side-pane header to select whether to display "
+"document structure or pages in the side pane."
+msgstr "用此侧边栏标题的下拉列表选择是否于侧边栏显示文档结构或页面缩略图。"
+
+#: C/evince.xml:360(para)
+msgid ""
+"Use the side-pane scrollbars to display the required item or page in the "
+"side pane."
+msgstr "用侧边栏卷动条显示所需要的项目或页面。"
+
+#: C/evince.xml:365(para)
+msgid ""
+"Click on an entry to navigate to that location in the document. Click on a "
+"page to navigate to that page in the document."
+msgstr "单击一个条目可以跳至文档中的相应位置。单击一页可以跳至文档中的相应页。"
+
+#: C/evince.xml:371(title)
+msgid "To View the Properties of a Document"
+msgstr "查看文档属性"
+
+#: C/evince.xml:372(para)
+msgid ""
+"To view the properties of a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Properties</guimenuitem></menuchoice>."
+msgstr ""
+"欲查看文档属性,选择<menuchoice><guimenu>文件</guimenu><guimenuitem>属性</"
+"guimenuitem></menuchoice>。"
+
+#: C/evince.xml:378(para)
+msgid ""
+"The <guilabel>Properties</guilabel> dialog displays all information available"
+msgstr "<guilabel>属性</guilabel>对话框显示所有的可用信息"
+
+#: C/evince.xml:384(title)
+msgid "To Print a Document"
+msgstr "打印文档"
+
+#: C/evince.xml:385(para)
+msgid ""
+"To print a Document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Print</guimenuitem></menuchoice>."
+msgstr ""
+"欲打印文档,选择<menuchoice><guimenu>文件</guimenu><guimenuitem>打印</"
+"guimenuitem></menuchoice>。"
+
+#: C/evince.xml:389(para)
+msgid ""
+"If you cannot choose the <guimenuitem>Print</guimenuitem> menu item, the "
+"author of the document has disabled the print option for this document. To "
+"enable the print option, you must enter the master password when you open "
+"the document. See <xref linkend=\"evince-password\"/> for more information "
+"about password-protected files."
+msgstr ""
+"若您无法选择<guimenuitem>打印</guimenuitem>菜单项,说明此文档作者已禁止打印此"
+"文档。要启用打印的功能,您打开文档时必须键入主密码。参见<xref linkend="
+"\"evince-password\"/>以了解更多关于受秘密保护文件的信息。"
+
+#: C/evince.xml:393(para)
+msgid ""
+"The <guilabel>Print</guilabel> dialog has the following tabbed sections:"
+msgstr "<guilabel>打印</guilabel>对话框有下列分页标签:"
+
+#: C/evince.xml:399(link) C/evince.xml:415(title)
+msgid "Job"
+msgstr "任务"
+
+#: C/evince.xml:404(link) C/evince.xml:437(title) C/evince.xml:439(guilabel)
+msgid "Printer"
+msgstr "打印机"
+
+#: C/evince.xml:409(link) C/evince.xml:531(title)
+msgid "Paper"
+msgstr "纸张"
+
+#: C/evince.xml:417(guilabel)
+msgid "Print range"
+msgstr "范围"
+
+#: C/evince.xml:419(para)
+msgid ""
+"Select one of the following options to determine how many pages to print:"
+msgstr "选择下列选项中的一个可决定打印的页数:"
+
+#: C/evince.xml:422(guilabel)
+msgid "All"
+msgstr "全部"
+
+#: C/evince.xml:423(para)
+msgid "Select this option to print all of the pages in the document."
+msgstr "选择此项以打印文档中的全部页面。"
+
+#: C/evince.xml:426(guilabel)
+msgid "Pages From"
+msgstr "范围"
+
+#: C/evince.xml:427(para)
+msgid ""
+"Select this option to print the selected range of pages in the document. Use "
+"the spin boxes to specify the first page and last page of the range."
+msgstr ""
+"选择此项以打印文档中选中的页码范围。用微调框指定第一页和最后一页的范围。"
+
+#: C/evince.xml:441(para)
+msgid ""
+"Use this drop-down list to select the printer to which you want to print the "
+"document."
+msgstr "用此下拉列表选择用以打印文档的打印机。"
+
+#: C/evince.xml:443(para)
+msgid ""
+"The <guilabel>Create a PDF document</guilabel> option is not supported in "
+"this version of <application>Evince Document Viewer</application>."
+msgstr ""
+"<guilabel>创建PDF文档</guilabel>选项在此版本 <application>Evince 文档查看器</"
+"application>中尚未支持。"
+
+#: C/evince.xml:449(guilabel)
+msgid "Settings"
+msgstr "设置"
+
+#: C/evince.xml:451(para)
+msgid "Use this drop-down list to select the printer settings."
+msgstr "用此下拉列表选择打印机设置。"
+
+#: C/evince.xml:453(para)
+msgid ""
+"To configure the printer, click <guibutton>Configure</guibutton>. For "
+"example, you can enable or disable duplex printing, or schedule delayed "
+"printing, if this functionality is supported by the printer."
+msgstr ""
+"欲配置打印机,单击<guibutton>配置</guibutton>。例如,您可在打印机支持相应功能"
+"的情况下启用或禁止双面打印,或设定打印时间。"
+
+#: C/evince.xml:457(guilabel)
+msgid "Location"
+msgstr "位置"
+
+#: C/evince.xml:459(para)
+msgid ""
+"Use this drop-down list to select one of the following print destinations:"
+msgstr "用此下拉列表选择下列打印目标:"
+
+#: C/evince.xml:464(guilabel)
+msgid "CUPS"
+msgstr "CUPS"
+
+#: C/evince.xml:466(para)
+msgid "Print the document to a CUPS printer."
+msgstr "将文档打印到一台 CUPS 打印机。"
+
+#: C/evince.xml:470(para)
+msgid ""
+"If the selected printer is a CUPS printer, <guilabel>CUPS</guilabel> is the "
+"only entry in this drop-down list."
+msgstr ""
+"如果选中的打印机是一台 CUPS 打印机,<guilabel>CUPS</guilabel> 是此下拉列表的"
+"唯一条目。"
+
+#: C/evince.xml:477(guilabel)
+msgid "lpr"
+msgstr "lpr"
+
+#: C/evince.xml:479(para)
+msgid "Print the document to a printer."
+msgstr "将文档打印到一台打印机。"
+
+#: C/evince.xml:485(guilabel)
+msgid "File"
+msgstr "文件"
+
+#: C/evince.xml:487(para)
+msgid "Print the document to a PostScript file."
+msgstr "打印文档为一个 PostScript 文件。"
+
+#: C/evince.xml:490(para)
+msgid ""
+"Click <guibutton>Save As</guibutton> to display a dialog where you specify "
+"the name and location of the PostScript file."
+msgstr ""
+"单击<guibutton>另存为</guibutton>,会显示一个指定 PostScript 文件的名称和位置"
+"对话框。"
+
+#: C/evince.xml:496(guilabel)
+msgid "Custom"
+msgstr "自定义"
+
+#: C/evince.xml:498(para)
+msgid "Use the specified command to print the document."
+msgstr "使用特别的指令来打印文件。"
+
+#: C/evince.xml:501(para)
+msgid ""
+"Type the name of the command in the text box. Include all command-line "
+"arguments."
+msgstr "在文本框中输入命令的名字。包括全部命令行参数。"
+
+#: C/evince.xml:509(guilabel)
+msgid "State"
+msgstr "状态"
+
+#: C/evince.xml:511(para) C/evince.xml:517(para) C/evince.xml:523(para)
+msgid ""
+"This functionality is not supported in this version of <application>Evince "
+"Document Viewer</application>."
+msgstr "此版本 <application>Evince 文档查看器</application>不支持此项功能。"
+
+#: C/evince.xml:515(guilabel)
+msgid "Type"
+msgstr "类型"
+
+#: C/evince.xml:521(guilabel)
+msgid "Comment"
+msgstr "备注"
+
+#: C/evince.xml:533(guilabel)
+msgid "Paper size"
+msgstr "纸张大小"
+
+#: C/evince.xml:535(para)
+msgid ""
+"Use this drop-down list to select the size of the paper to which you want to "
+"print the document."
+msgstr "用此下拉列表选择您欲打印文档用的纸张大小。"
+
+#: C/evince.xml:538(guilabel)
+msgid "Width"
+msgstr "宽度"
+
+#: C/evince.xml:540(para)
+msgid ""
+"Use this spin box to specify the width of the paper. Use the adjacent drop-"
+"down list to change the measurement unit."
+msgstr "用此微调框指定纸张宽度。用旁边的下拉列表修改度量单位。"
+
+#: C/evince.xml:543(guilabel)
+msgid "Height"
+msgstr "高度"
+
+#: C/evince.xml:545(para)
+msgid "Use this spin box to specify the height of the paper."
+msgstr "用此微调框指定纸张高度。"
+
+#: C/evince.xml:548(guilabel)
+msgid "Feed orientation"
+msgstr "纸张方向"
+
+#: C/evince.xml:550(para)
+msgid ""
+"Use this drop-down list to select the orientation of the paper in the "
+"printer."
+msgstr "用下拉列表选择打印机中的纸张方向。"
+
+#: C/evince.xml:553(guilabel)
+msgid "Page orientation"
+msgstr "页面方向"
+
+#: C/evince.xml:555(para)
+msgid "Use this drop-down list to select the page orientation."
+msgstr "用此下拉列表选择页面方向。"
+
+#: C/evince.xml:558(guilabel)
+msgid "Layout"
+msgstr "布局"
+
+#: C/evince.xml:560(para)
+msgid ""
+"Use this drop-down list to select the page layout. A preview of each layout "
+"that you select is displayed in the <guilabel>Preview</guilabel> area."
+msgstr ""
+"用此下拉列表选择页面布局。您选择的布局的预览会在<guilabel>预览</guilabel>区域"
+"显示出来。"
+
+#: C/evince.xml:563(guilabel)
+msgid "Paper Tray"
+msgstr "纸张来源"
+
+#: C/evince.xml:565(para)
+msgid "Use this drop-down list to select the paper tray."
+msgstr "用此下拉列表选择纸张来源。"
+
+#: C/evince.xml:575(title)
+msgid "To Copy a Document"
+msgstr "复制文档"
+
+#: C/evince.xml:576(para)
+msgid "To copy a file, perform the following steps:"
+msgstr "欲复制一个文件,执行下列步骤:"
+
+#: C/evince.xml:580(para)
+msgid ""
+"Choose <menuchoice><guimenu>File</guimenu><guimenuitem>Save a Copy</"
+"guimenuitem></menuchoice>."
+msgstr ""
+"选择<menuchoice><guimenu>文件</guimenu><guimenuitem>保存副本</guimenuitem></"
+"menuchoice>。"
+
+#: C/evince.xml:585(para)
+msgid ""
+"Type the new filename in the <guilabel>Filename</guilabel> text box in the "
+"<guilabel>Save a Copy</guilabel> dialog."
+msgstr ""
+"在<guilabel>保存副本</guilabel>对话框的<guilabel>名称</guilabel>文本框里输入"
+"文件名。"
+
+#: C/evince.xml:588(para)
+msgid ""
+"If necessary, specify the location of the copied document. By default, "
+"copies are saved in your home directory."
+msgstr "如有必要,指定副本文档的位置。默认的副本保存在您的 home 目录。"
+
+#: C/evince.xml:593(para)
+msgid "Click <guibutton>Save</guibutton>."
+msgstr "单击<guibutton>保存</guibutton>。"
+
+#: C/evince.xml:602(title)
+msgid "To Work With Password-Protected Documents"
+msgstr "密码保护的文档操作"
+
+#: C/evince.xml:603(para)
+msgid "An author can use the following password levels to protect a document:"
+msgstr "文档的作者可以使用以下密码等级来保护文档:"
+
+#: C/evince.xml:608(para)
+msgid "User password that allows others only to read the document."
+msgstr "令他人只能阅读文档的用户密码。"
+
+#: C/evince.xml:612(para)
+msgid ""
+"Master password that allows others to perform additional actions, such as "
+"print the document."
+msgstr "令他人可以执行如打印文档等附加动作的主密码。"
+
+#: C/evince.xml:616(para)
+msgid ""
+"When you try to open a password-protected document, <application>Evince "
+"Document Viewer</application> displays a security dialog. Type either the "
+"user password or the master password in the <guilabel>Enter document "
+"password</guilabel> text box, then click <guibutton>Open Document</"
+"guibutton>."
+msgstr ""
+"对您试图打开一个有密码保护的文档时,<application>Evince 文档查看器</"
+"application>会显示一个安全对话框。在<guilabel>输入文档密码</guilabel>文本框中"
+"键入用户密码或主密码,然后点击<guibutton>打开文档</guibutton>."
+
+#: C/evince.xml:623(title)
+msgid "To Close a Document"
+msgstr "关闭文档"
+
+#: C/evince.xml:624(para)
+msgid ""
+"To close a document, choose <menuchoice><guimenu>File</"
+"guimenu><guimenuitem>Close</guimenuitem></menuchoice>."
+msgstr ""
+"欲关闭一个文档,选择<menuchoice><guimenu>文件</guimenu><guimenuitem>关闭</"
+"guimenuitem></menuchoice>。"
+
+#: C/evince.xml:626(para)
+msgid ""
+"If the window is the last <application>Evince Document Viewer</application> "
+"window open, the application exits."
+msgstr ""
+"若当前窗口是最后一个打开的 <application>Evince 文档查看器</application>窗口,"
+"本程序会退出。"
+
+#: C/evince.xml:635(title)
+msgid "Shortcuts"
+msgstr "快捷键"
+
+#: C/evince.xml:636(para)
+msgid ""
+"Below is a list of all shortcuts present in <application>Evince Document "
+"Viewer</application>:"
+msgstr "下列是 <application>Evince 文档查看器</application> 中的所有快捷键列表:"
+
+#: C/evince.xml:644(para)
+msgid "Shortcut"
+msgstr "快捷键"
+
+#: C/evince.xml:651(keycap) C/evince.xml:655(keycap) C/evince.xml:659(keycap)
+#: C/evince.xml:663(keycap) C/evince.xml:667(keycap) C/evince.xml:671(keycap)
+#: C/evince.xml:676(keycap) C/evince.xml:683(keycap) C/evince.xml:704(keycap)
+#: C/evince.xml:750(keycap)
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: C/evince.xml:651(keycap)
+msgid "O"
+msgstr "O"
+
+#: C/evince.xml:652(para)
+msgid "Open an existing document"
+msgstr "打开一个已存在的文档"
+
+#: C/evince.xml:655(keycap)
+msgid "S"
+msgstr "S"
+
+#: C/evince.xml:656(para)
+msgid "Save a copy of the current document"
+msgstr "将当前文档储存为一个新的拷贝"
+
+#: C/evince.xml:659(keycap)
+msgid "P"
+msgstr "P"
+
+#: C/evince.xml:660(para)
+msgid "Print document"
+msgstr "打印文档"
+
+#: C/evince.xml:663(keycap)
+msgid "W"
+msgstr "W"
+
+#: C/evince.xml:664(para)
+msgid "Close window"
+msgstr "关闭窗口"
+
+#: C/evince.xml:667(keycap)
+msgid "C"
+msgstr "C"
+
+#: C/evince.xml:668(para)
+msgid "Copy selection"
+msgstr "复制选中的区域"
+
+#: C/evince.xml:671(keycap)
+msgid "A"
+msgstr "A"
+
+#: C/evince.xml:672(para)
+msgid "Select All"
+msgstr "选中全部区域"
+
+#: C/evince.xml:676(keycap)
+msgid "F"
+msgstr "F"
+
+#: C/evince.xml:677(para)
+msgid "<keycap>/</keycap> (slash)"
+msgstr "<keycap>/</keycap> (斜线)"
+
+#: C/evince.xml:679(para)
+msgid "Find a word or phrase in the document"
+msgstr "在文档中查找单词或短语"
+
+#: C/evince.xml:683(keycap)
+msgid "G"
+msgstr "G"
+
+#: C/evince.xml:684(keycap)
+msgid "F3"
+msgstr "F3"
+
+#: C/evince.xml:686(para)
+msgid "Find next"
+msgstr "查找下一个"
+
+#: C/evince.xml:690(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo> (plus sign)"
+msgstr ""
+"按 <keycombo><keycap>Ctrl</keycap><keycap>+</keycap></keycombo>(加号)。"
+
+#: C/evince.xml:691(keycap)
+msgid "+"
+msgstr "+"
+
+#: C/evince.xml:692(keycap)
+msgid "="
+msgstr "="
+
+#: C/evince.xml:694(para)
+msgid "Zoom in"
+msgstr "放大"
+
+#: C/evince.xml:698(para)
+msgid ""
+"<keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo> (minus sign)"
+msgstr ""
+"按 <keycombo><keycap>Ctrl</keycap><keycap>-</keycap></keycombo>(减号)。"
+
+#: C/evince.xml:699(keycap)
+msgid "-"
+msgstr "-"
+
+#: C/evince.xml:701(para)
+msgid "Zoom out"
+msgstr "缩小"
+
+#: C/evince.xml:704(keycap)
+msgid "R"
+msgstr "R"
+
+#: C/evince.xml:705(para)
+msgid "Reload the document"
+msgstr "重新载入文档"
+
+#: C/evince.xml:709(keycap) C/evince.xml:734(keycap)
+msgid "Page Up"
+msgstr "Page Up"
+
+#: C/evince.xml:710(para)
+msgid "Go to the previous page"
+msgstr "跳转至上一页"
+
+#: C/evince.xml:713(keycap) C/evince.xml:738(keycap)
+msgid "Page Down"
+msgstr "Page Down"
+
+#: C/evince.xml:714(para)
+msgid "Go to the next page"
+msgstr "跳转至下一页"
+
+#: C/evince.xml:718(keycap) C/evince.xml:726(keycap)
+msgid "Space"
+msgstr "Space"
+
+#: C/evince.xml:719(keycap) C/evince.xml:726(keycap) C/evince.xml:728(keycap)
+#: C/evince.xml:734(keycap) C/evince.xml:738(keycap)
+msgid "Shift"
+msgstr "Shift"
+
+#: C/evince.xml:719(keycap) C/evince.xml:727(keycap)
+msgid "Backspace"
+msgstr "Backspace"
+
+#: C/evince.xml:720(keycap) C/evince.xml:728(keycap)
+msgid "Return"
+msgstr "Return"
+
+#: C/evince.xml:722(para)
+msgid "Scroll forward"
+msgstr "向前滚动"
+
+#: C/evince.xml:730(para)
+msgid "Scroll backward"
+msgstr "向后滚动"
+
+#: C/evince.xml:735(para)
+msgid "Go a bunch of pages up"
+msgstr "往前翻几页"
+
+#: C/evince.xml:739(para)
+msgid "Go a bunch of pages down"
+msgstr "往后翻几页"
+
+#: C/evince.xml:742(keycap)
+msgid "Home"
+msgstr "Home"
+
+#: C/evince.xml:743(para)
+msgid "Go to the first page"
+msgstr "跳转至第一页"
+
+#: C/evince.xml:746(keycap)
+msgid "End"
+msgstr "End"
+
+#: C/evince.xml:747(para)
+msgid "Go to the last page"
+msgstr "跳转至最后一页"
+
+#: C/evince.xml:750(keycap)
+msgid "L"
+msgstr "L"
+
+#: C/evince.xml:751(para)
+msgid "Go to page by number or label"
+msgstr "根据页码或书签跳转至某页"
+
+#: C/evince.xml:754(keycap)
+msgid "F1"
+msgstr "F1"
+
+#: C/evince.xml:755(para)
+msgid "Help"
+msgstr "帮助"
+
+#: C/evince.xml:758(keycap)
+msgid "F5"
+msgstr "F5"
+
+#: C/evince.xml:759(para)
+msgid "Run document as presentation"
+msgstr "以幻灯片模式播放文档"
+
+#: C/evince.xml:762(keycap)
+msgid "F9"
+msgstr "F9"
+
+#: C/evince.xml:763(para)
+msgid "Show or hide the side pane"
+msgstr "显示或隐藏面板"
+
+#: C/evince.xml:766(keycap)
+msgid "F11"
+msgstr "F11"
+
+#: C/evince.xml:767(para)
+msgid "Toggle fullscreen mode"
+msgstr "进入全屏模式"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
+#: C/evince.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+"Zhang Chen <[email protected]>, 2008\n"
+"Tao Zhu <[email protected]>, 2010"
diff --git a/libdocument/Makefile.am b/libdocument/Makefile.am
new file mode 100644
index 00000000..90fd1127
--- /dev/null
+++ b/libdocument/Makefile.am
@@ -0,0 +1,193 @@
+lib_LTLIBRARIES = libevdocument.la
+
+NOINST_H_FILES = \
+ ev-debug.h \
+ ev-module.h
+
+INST_H_SRC_FILES = \
+ ev-annotation.h \
+ ev-async-renderer.h \
+ ev-attachment.h \
+ ev-backends-manager.h \
+ ev-document-factory.h \
+ ev-document-annotations.h \
+ ev-document-attachments.h \
+ ev-document-find.h \
+ ev-document-fonts.h \
+ ev-document-forms.h \
+ ev-document.h \
+ ev-document-images.h \
+ ev-document-info.h \
+ ev-document-layers.h \
+ ev-document-links.h \
+ ev-document-misc.h \
+ ev-document-print.h \
+ ev-document-security.h \
+ ev-document-thumbnails.h \
+ ev-document-transition.h \
+ ev-document-text.h \
+ ev-file-exporter.h \
+ ev-file-helpers.h \
+ ev-form-field.h \
+ ev-image.h \
+ ev-init.h \
+ ev-layer.h \
+ ev-link-action.h \
+ ev-link-dest.h \
+ ev-link.h \
+ ev-mapping-list.h \
+ ev-page.h \
+ ev-render-context.h \
+ ev-selection.h \
+ ev-transition-effect.h \
+ ev-version.h
+
+INST_H_FILES = \
+ $(INST_H_SRC_FILES) \
+ ev-document-type-builtins.h
+
+headerdir = $(includedir)/evince/$(EV_API_VERSION)/libdocument
+header_DATA = $(INST_H_FILES)
+
+libevdocument_la_SOURCES= \
+ ev-annotation.c \
+ ev-async-renderer.c \
+ ev-attachment.c \
+ ev-backends-manager.c \
+ ev-layer.c \
+ ev-link.c \
+ ev-link-action.c \
+ ev-link-dest.c \
+ ev-image.c \
+ ev-init.c \
+ ev-document.c \
+ ev-document-annotations.c \
+ ev-document-attachments.c \
+ ev-document-factory.c \
+ ev-document-thumbnails.c \
+ ev-document-fonts.c \
+ ev-document-layers.c \
+ ev-document-links.c \
+ ev-document-images.c \
+ ev-document-print.c \
+ ev-document-security.c \
+ ev-document-find.c \
+ ev-document-transition.c \
+ ev-document-forms.c \
+ ev-document-type-builtins.c \
+ ev-document-text.c \
+ ev-form-field.c \
+ ev-debug.c \
+ ev-file-exporter.c \
+ ev-file-helpers.c \
+ ev-mapping-list.c \
+ ev-module.c \
+ ev-page.c \
+ ev-render-context.c \
+ ev-selection.c \
+ ev-transition-effect.c \
+ ev-document-misc.c \
+ $(NOINST_H_FILES) \
+ $(INST_H_FILES)
+
+libevdocument_la_CPPFLAGS = \
+ -DG_LOG_DOMAIN=\"EvinceDocument\" \
+ -DEVINCE_UIDIR=\"$(pkgdatadir)\" \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DEV_BACKENDSDIR=\"$(backenddir)\" \
+ -DEV_BACKENDSBINARYVERSION=\"$(backend_binary_version)\" \
+ -DEVINCE_COMPILATION \
+ $(AM_CPPFLAGS)
+
+libevdocument_la_CFLAGS = \
+ $(LIBDOCUMENT_CFLAGS) \
+ -I$(top_srcdir)/cut-n-paste/synctex \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED) \
+ $(AM_CFLAGS)
+
+libevdocument_la_LDFLAGS = \
+ -version-info $(EV_DOCUMENT_LT_VERSION_INFO) \
+ -no-undefined \
+ -export-symbols-regex "^ev_*" \
+ $(AM_LDFLAGS)
+
+libevdocument_la_LIBADD = \
+ $(LIBDOCUMENT_LIBS) \
+ $(top_builddir)/cut-n-paste/synctex/libsynctex.la
+
+
+BUILT_SOURCES = \
+ ev-document-type-builtins.c \
+ ev-document-type-builtins.h
+
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ stamp-ev-document-type-builtins.h \
+ stamp-ev-document-type-builtins.c
+
+ev-document-type-builtins.h: stamp-ev-document-type-builtins.h
+ @true
+stamp-ev-document-type-builtins.h: ev-document-type-builtins.h.template $(INST_H_SRC_FILES)
+ $(AM_V_GEN)$(GLIB_MKENUMS) --template $< $(filter-out $<,$^) > xgen-etbh \
+ && (cmp -s xgen-etbh ev-document-type-builtins.h || cp xgen-etbh ev-document-type-builtins.h ) \
+ && rm -f xgen-etbh \
+ && echo timestamp > $(@F)
+
+ev-document-type-builtins.c: stamp-ev-document-type-builtins.c
+ @true
+stamp-ev-document-type-builtins.c: ev-document-type-builtins.c.template $(INST_H_SRC_FILES)
+ $(AM_V_GEN)$(GLIB_MKENUMS) --template $< $(filter-out $<,$^) > xgen-etbc \
+ && (cmp -s xgen-etbc ev-document-type-builtins.c || cp xgen-etbc ev-document-type-builtins.c ) \
+ && rm -f xgen-etbc \
+ && echo timestamp > $(@F)
+
+EXTRA_DIST = \
+ ev-document-type-builtins.c.template \
+ ev-document-type-builtins.h.template
+
+# GObject Introspection
+
+if ENABLE_INTROSPECTION
+
+EvinceDocument-$(EV_API_VERSION).gir: libevdocument.la Makefile $(INST_H_FILES) $(filter %.c,$(libevdocument_la_SOURCES))
+ $(AM_V_GEN) PKG_CONFIG_PATH=$(top_builddir):$$PKG_CONFIG_PATH \
+ $(G_IR_SCANNER) -v --namespace EvinceDocument \
+ --strip-prefix=Ev \
+ --nsversion=$(EV_API_VERSION) \
+ --include=GLib-2.0 \
+ --include=Gio-2.0 \
+ --include=Gdk-2.0 \
+ --include=GdkPixbuf-2.0 \
+ --include=Gtk-2.0 \
+ --library=evdocument \
+ --libtool="$(SAVED_LIBTOOL)" \
+ --output $@ \
+ --pkg evince-document-$(EV_API_VERSION) \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ -I$(srcdir) \
+ -I$(builddir) \
+ -DEVINCE_COMPILATION \
+ $(filter %.h,$^) \
+ $(filter %.c,$^)
+
+girdir = $(GIRDIR)
+gir_DATA = EvinceDocument-$(EV_API_VERSION).gir
+
+typelibsdir = $(GIRTYPELIBDIR)
+typelibs_DATA = EvinceDocument-$(EV_API_VERSION).typelib
+
+EXTRA_DIST += $(gir_DATA)
+CLEANFILES += $(gir_DATA) $(typelibs_DATA)
+
+%.typelib: %.gir
+ $(AM_V_GEN) LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}. $(G_IR_COMPILER) \
+ --includedir=$(srcdir) \
+ --includedir=. \
+ $(G_IR_COMPILER_OPTS) \
+ $< -o $@
+
+endif # ENABLE_INTROSPECTION
+
+-include $(top_srcdir)/git.mk
diff --git a/libdocument/ev-annotation.c b/libdocument/ev-annotation.c
new file mode 100644
index 00000000..2d45c4a2
--- /dev/null
+++ b/libdocument/ev-annotation.c
@@ -0,0 +1,1002 @@
+/* ev-annotation.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2007 Iñigo Martinez <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include "ev-annotation.h"
+#include "ev-document-misc.h"
+#include "ev-document-type-builtins.h"
+
+struct _EvAnnotation {
+ GObject parent;
+
+ EvAnnotationType type;
+ EvPage *page;
+
+ gchar *contents;
+ gchar *name;
+ gchar *modified;
+ GdkColor color;
+
+};
+
+struct _EvAnnotationClass {
+ GObjectClass parent_class;
+};
+
+struct _EvAnnotationMarkupInterface {
+ GTypeInterface base_iface;
+};
+
+struct _EvAnnotationText {
+ EvAnnotation parent;
+
+ gboolean is_open : 1;
+ EvAnnotationTextIcon icon;
+};
+
+struct _EvAnnotationTextClass {
+ EvAnnotationClass parent_class;
+};
+
+struct _EvAnnotationAttachment {
+ EvAnnotation parent;
+
+ EvAttachment *attachment;
+};
+
+struct _EvAnnotationAttachmentClass {
+ EvAnnotationClass parent_class;
+};
+
+static void ev_annotation_markup_default_init (EvAnnotationMarkupInterface *iface);
+static void ev_annotation_text_markup_iface_init (EvAnnotationMarkupInterface *iface);
+static void ev_annotation_attachment_markup_iface_init (EvAnnotationMarkupInterface *iface);
+
+/* EvAnnotation */
+enum {
+ PROP_ANNOT_0,
+ PROP_ANNOT_PAGE,
+ PROP_ANNOT_CONTENTS,
+ PROP_ANNOT_NAME,
+ PROP_ANNOT_MODIFIED,
+ PROP_ANNOT_COLOR
+};
+
+/* EvAnnotationMarkup */
+enum {
+ PROP_MARKUP_0,
+ PROP_MARKUP_LABEL,
+ PROP_MARKUP_OPACITY,
+ PROP_MARKUP_HAS_POPUP,
+ PROP_MARKUP_RECTANGLE,
+ PROP_MARKUP_POPUP_IS_OPEN
+};
+
+/* EvAnnotationText */
+enum {
+ PROP_TEXT_ICON = PROP_MARKUP_POPUP_IS_OPEN + 1,
+ PROP_TEXT_IS_OPEN
+};
+
+/* EvAnnotationAttachment */
+enum {
+ PROP_ATTACHMENT_ATTACHMENT = PROP_MARKUP_POPUP_IS_OPEN + 1
+};
+
+G_DEFINE_ABSTRACT_TYPE (EvAnnotation, ev_annotation, G_TYPE_OBJECT)
+G_DEFINE_INTERFACE (EvAnnotationMarkup, ev_annotation_markup, EV_TYPE_ANNOTATION)
+G_DEFINE_TYPE_WITH_CODE (EvAnnotationText, ev_annotation_text, EV_TYPE_ANNOTATION,
+ {
+ G_IMPLEMENT_INTERFACE (EV_TYPE_ANNOTATION_MARKUP,
+ ev_annotation_text_markup_iface_init);
+ });
+G_DEFINE_TYPE_WITH_CODE (EvAnnotationAttachment, ev_annotation_attachment, EV_TYPE_ANNOTATION,
+ {
+ G_IMPLEMENT_INTERFACE (EV_TYPE_ANNOTATION_MARKUP,
+ ev_annotation_attachment_markup_iface_init);
+ });
+
+/* EvAnnotation */
+static void
+ev_annotation_finalize (GObject *object)
+{
+ EvAnnotation *annot = EV_ANNOTATION (object);
+
+ if (annot->page) {
+ g_object_unref (annot->page);
+ annot->page = NULL;
+ }
+
+ if (annot->contents) {
+ g_free (annot->contents);
+ annot->contents = NULL;
+ }
+
+ if (annot->name) {
+ g_free (annot->name);
+ annot->name = NULL;
+ }
+
+ if (annot->modified) {
+ g_free (annot->modified);
+ annot->modified = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_annotation_parent_class)->finalize (object);
+}
+
+static void
+ev_annotation_init (EvAnnotation *annot)
+{
+ annot->type = EV_ANNOTATION_TYPE_UNKNOWN;
+}
+
+static void
+ev_annotation_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvAnnotation *annot = EV_ANNOTATION (object);
+
+ switch (prop_id) {
+ case PROP_ANNOT_PAGE:
+ annot->page = g_value_dup_object (value);
+ break;
+ case PROP_ANNOT_CONTENTS:
+ ev_annotation_set_contents (annot, g_value_get_string (value));
+ break;
+ case PROP_ANNOT_NAME:
+ ev_annotation_set_name (annot, g_value_get_string (value));
+ break;
+ case PROP_ANNOT_MODIFIED:
+ ev_annotation_set_modified (annot, g_value_get_string (value));
+ break;
+ case PROP_ANNOT_COLOR:
+ ev_annotation_set_color (annot, g_value_get_pointer (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_annotation_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvAnnotation *annot = EV_ANNOTATION (object);
+
+ switch (prop_id) {
+ case PROP_ANNOT_CONTENTS:
+ g_value_set_string (value, ev_annotation_get_contents (annot));
+ break;
+ case PROP_ANNOT_NAME:
+ g_value_set_string (value, ev_annotation_get_name (annot));
+ break;
+ case PROP_ANNOT_MODIFIED:
+ g_value_set_string (value, ev_annotation_get_modified (annot));
+ break;
+ case PROP_ANNOT_COLOR:
+ g_value_set_pointer (value, &annot->color);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_annotation_class_init (EvAnnotationClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+
+ g_object_class->finalize = ev_annotation_finalize;
+ g_object_class->set_property = ev_annotation_set_property;
+ g_object_class->get_property = ev_annotation_get_property;
+
+ g_object_class_install_property (g_object_class,
+ PROP_ANNOT_PAGE,
+ g_param_spec_object ("page",
+ "Page",
+ "The page wehere the annotation is",
+ EV_TYPE_PAGE,
+ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_ANNOT_CONTENTS,
+ g_param_spec_string ("contents",
+ "Contents",
+ "The annotation contents",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ PROP_ANNOT_NAME,
+ g_param_spec_string ("name",
+ "Name",
+ "The annotation unique name",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ PROP_ANNOT_MODIFIED,
+ g_param_spec_string ("modified",
+ "Modified",
+ "Last modified date as string",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ PROP_ANNOT_COLOR,
+ g_param_spec_pointer ("color",
+ "Color",
+ "The annotation color",
+ G_PARAM_READWRITE));
+}
+
+EvAnnotationType
+ev_annotation_get_annotation_type (EvAnnotation *annot)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION (annot), 0);
+
+ return annot->type;
+}
+
+EvPage *
+ev_annotation_get_page (EvAnnotation *annot)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION (annot), NULL);
+
+ return annot->page;
+}
+
+guint
+ev_annotation_get_page_index (EvAnnotation *annot)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION (annot), 0);
+
+ return annot->page->index;
+}
+
+gboolean
+ev_annotation_equal (EvAnnotation *annot,
+ EvAnnotation *other)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION (annot), FALSE);
+ g_return_val_if_fail (EV_IS_ANNOTATION (other), FALSE);
+
+ return (annot == other || g_strcmp0 (annot->name, other->name) == 0);
+}
+
+const gchar *
+ev_annotation_get_contents (EvAnnotation *annot)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION (annot), NULL);
+
+ return annot->contents;
+}
+
+gboolean
+ev_annotation_set_contents (EvAnnotation *annot,
+ const gchar *contents)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION (annot), FALSE);
+
+ if (g_strcmp0 (annot->contents, contents) == 0)
+ return FALSE;
+
+ if (annot->contents)
+ g_free (annot->contents);
+ annot->contents = contents ? g_strdup (contents) : NULL;
+
+ g_object_notify (G_OBJECT (annot), "contents");
+
+ return TRUE;
+}
+
+const gchar *
+ev_annotation_get_name (EvAnnotation *annot)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION (annot), NULL);
+
+ return annot->name;
+}
+
+gboolean
+ev_annotation_set_name (EvAnnotation *annot,
+ const gchar *name)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION (annot), FALSE);
+
+ if (g_strcmp0 (annot->name, name) == 0)
+ return FALSE;
+
+ if (annot->name)
+ g_free (annot->name);
+ annot->name = name ? g_strdup (name) : NULL;
+
+ g_object_notify (G_OBJECT (annot), "name");
+
+ return TRUE;
+}
+
+const gchar *
+ev_annotation_get_modified (EvAnnotation *annot)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION (annot), NULL);
+
+ return annot->modified;
+}
+
+gboolean
+ev_annotation_set_modified (EvAnnotation *annot,
+ const gchar *modified)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION (annot), FALSE);
+
+ if (g_strcmp0 (annot->modified, modified) == 0)
+ return FALSE;
+
+ if (annot->modified)
+ g_free (annot->modified);
+ annot->modified = modified ? g_strdup (modified) : NULL;
+
+ g_object_notify (G_OBJECT (annot), "modified");
+
+ return TRUE;
+}
+
+gboolean
+ev_annotation_set_modified_from_time (EvAnnotation *annot,
+ GTime utime)
+{
+ gchar *modified;
+
+ g_return_val_if_fail (EV_IS_ANNOTATION (annot), FALSE);
+
+ modified = ev_document_misc_format_date (utime);
+
+ if (g_strcmp0 (annot->modified, modified) == 0) {
+ g_free (modified);
+ return FALSE;
+ }
+
+ if (annot->modified)
+ g_free (annot->modified);
+ annot->modified = modified;
+
+ g_object_notify (G_OBJECT (annot), "modified");
+
+ return TRUE;
+}
+
+void
+ev_annotation_get_color (EvAnnotation *annot,
+ GdkColor *color)
+{
+ g_return_if_fail (EV_IS_ANNOTATION (annot));
+
+ if (color)
+ *color = annot->color;
+}
+
+gboolean
+ev_annotation_set_color (EvAnnotation *annot,
+ const GdkColor *color)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION (annot), FALSE);
+
+ if (annot->color.red == color->red &&
+ annot->color.green == color->green &&
+ annot->color.blue == color->blue)
+ return FALSE;
+
+ if (color)
+ annot->color = *color;
+
+ g_object_notify (G_OBJECT (annot), "color");
+
+ return TRUE;
+}
+
+/* EvAnnotationMarkup */
+typedef struct {
+ gchar *label;
+ gdouble opacity;
+ gboolean has_popup;
+ gboolean popup_is_open;
+ EvRectangle rectangle;
+} EvAnnotationMarkupProps;
+
+static void
+ev_annotation_markup_default_init (EvAnnotationMarkupInterface *iface)
+{
+ static gboolean initialized = FALSE;
+
+ if (!initialized) {
+ g_object_interface_install_property (iface,
+ g_param_spec_string ("label",
+ "Label",
+ "Label of the markup annotation",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_interface_install_property (iface,
+ g_param_spec_double ("opacity",
+ "Opacity",
+ "Opacity of the markup annotation",
+ 0,
+ G_MAXDOUBLE,
+ 1.,
+ G_PARAM_READWRITE));
+ g_object_interface_install_property (iface,
+ g_param_spec_boolean ("has_popup",
+ "Has popup",
+ "Whether the markup annotation has "
+ "a popup window associated",
+ TRUE,
+ G_PARAM_READWRITE));
+ g_object_interface_install_property (iface,
+ g_param_spec_boxed ("rectangle",
+ "Rectangle",
+ "The Rectangle of the popup associated "
+ "to the markup annotation",
+ EV_TYPE_RECTANGLE,
+ G_PARAM_READWRITE));
+ g_object_interface_install_property (iface,
+ g_param_spec_boolean ("popup_is_open",
+ "PopupIsOpen",
+ "Whether the popup associated to "
+ "the markup annotation is open",
+ FALSE,
+ G_PARAM_READWRITE));
+ initialized = TRUE;
+ }
+}
+
+static void
+ev_annotation_markup_props_free (EvAnnotationMarkupProps *props)
+{
+ g_free (props->label);
+ g_slice_free (EvAnnotationMarkupProps, props);
+}
+
+static EvAnnotationMarkupProps *
+ev_annotation_markup_get_properties (EvAnnotationMarkup *markup)
+{
+ EvAnnotationMarkupProps *props;
+ static GQuark props_key = 0;
+
+ if (!props_key)
+ props_key = g_quark_from_static_string ("ev-annotation-markup-props");
+
+ props = g_object_get_qdata (G_OBJECT (markup), props_key);
+ if (!props) {
+ props = g_slice_new0 (EvAnnotationMarkupProps);
+ g_object_set_qdata_full (G_OBJECT (markup),
+ props_key, props,
+ (GDestroyNotify) ev_annotation_markup_props_free);
+ }
+
+ return props;
+}
+
+static void
+ev_annotation_markup_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvAnnotationMarkup *markup = EV_ANNOTATION_MARKUP (object);
+
+ switch (prop_id) {
+ case PROP_MARKUP_LABEL:
+ ev_annotation_markup_set_label (markup, g_value_get_string (value));
+ break;
+ case PROP_MARKUP_OPACITY:
+ ev_annotation_markup_set_opacity (markup, g_value_get_double (value));
+ break;
+ case PROP_MARKUP_HAS_POPUP:
+ ev_annotation_markup_set_has_popup (markup, g_value_get_boolean (value));
+ break;
+ case PROP_MARKUP_RECTANGLE:
+ ev_annotation_markup_set_rectangle (markup, g_value_get_boxed (value));
+ break;
+ case PROP_MARKUP_POPUP_IS_OPEN:
+ ev_annotation_markup_set_popup_is_open (markup, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_annotation_markup_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvAnnotationMarkupProps *props;
+
+ props = ev_annotation_markup_get_properties (EV_ANNOTATION_MARKUP (object));
+
+ switch (prop_id) {
+ case PROP_MARKUP_LABEL:
+ g_value_set_string (value, props->label);
+ break;
+ case PROP_MARKUP_OPACITY:
+ g_value_set_double (value, props->opacity);
+ break;
+ case PROP_MARKUP_HAS_POPUP:
+ g_value_set_boolean (value, props->has_popup);
+ break;
+ case PROP_MARKUP_RECTANGLE:
+ g_value_set_boxed (value, &props->rectangle);
+ break;
+ case PROP_MARKUP_POPUP_IS_OPEN:
+ g_value_set_boolean (value, props->popup_is_open);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_annotation_markup_class_install_properties (GObjectClass *klass)
+{
+ klass->set_property = ev_annotation_markup_set_property;
+ klass->get_property = ev_annotation_markup_get_property;
+
+ g_object_class_override_property (klass, PROP_MARKUP_LABEL, "label");
+ g_object_class_override_property (klass, PROP_MARKUP_OPACITY, "opacity");
+ g_object_class_override_property (klass, PROP_MARKUP_HAS_POPUP, "has_popup");
+ g_object_class_override_property (klass, PROP_MARKUP_RECTANGLE, "rectangle");
+ g_object_class_override_property (klass, PROP_MARKUP_POPUP_IS_OPEN, "popup_is_open");
+}
+
+const gchar *
+ev_annotation_markup_get_label (EvAnnotationMarkup *markup)
+{
+ EvAnnotationMarkupProps *props;
+
+ g_return_val_if_fail (EV_IS_ANNOTATION_MARKUP (markup), NULL);
+
+ props = ev_annotation_markup_get_properties (markup);
+ return props->label;
+}
+
+gboolean
+ev_annotation_markup_set_label (EvAnnotationMarkup *markup,
+ const gchar *label)
+{
+ EvAnnotationMarkupProps *props;
+
+ g_return_val_if_fail (EV_IS_ANNOTATION_MARKUP (markup), FALSE);
+ g_return_val_if_fail (label != NULL, FALSE);
+
+ props = ev_annotation_markup_get_properties (markup);
+ if (g_strcmp0 (props->label, label) == 0)
+ return FALSE;
+
+ if (props->label)
+ g_free (props->label);
+ props->label = g_strdup (label);
+
+ g_object_notify (G_OBJECT (markup), "label");
+
+ return TRUE;
+}
+
+gdouble
+ev_annotation_markup_get_opacity (EvAnnotationMarkup *markup)
+{
+ EvAnnotationMarkupProps *props;
+
+ g_return_val_if_fail (EV_IS_ANNOTATION_MARKUP (markup), 1.0);
+
+ props = ev_annotation_markup_get_properties (markup);
+ return props->opacity;
+}
+
+gboolean
+ev_annotation_markup_set_opacity (EvAnnotationMarkup *markup,
+ gdouble opacity)
+{
+ EvAnnotationMarkupProps *props;
+
+ g_return_val_if_fail (EV_IS_ANNOTATION_MARKUP (markup), FALSE);
+
+ props = ev_annotation_markup_get_properties (markup);
+ if (props->opacity == opacity)
+ return FALSE;
+
+ props->opacity = opacity;
+
+ g_object_notify (G_OBJECT (markup), "opacity");
+
+ return TRUE;
+}
+
+gboolean
+ev_annotation_markup_has_popup (EvAnnotationMarkup *markup)
+{
+ EvAnnotationMarkupProps *props;
+
+ g_return_val_if_fail (EV_IS_ANNOTATION_MARKUP (markup), FALSE);
+
+ props = ev_annotation_markup_get_properties (markup);
+ return props->has_popup;
+}
+
+gboolean
+ev_annotation_markup_set_has_popup (EvAnnotationMarkup *markup,
+ gboolean has_popup)
+{
+ EvAnnotationMarkupProps *props;
+
+ g_return_val_if_fail (EV_IS_ANNOTATION_MARKUP (markup), FALSE);
+
+ props = ev_annotation_markup_get_properties (markup);
+ if (props->has_popup == has_popup)
+ return FALSE;
+
+ props->has_popup = has_popup;
+
+ g_object_notify (G_OBJECT (markup), "has-popup");
+
+ return TRUE;
+}
+
+void
+ev_annotation_markup_get_rectangle (EvAnnotationMarkup *markup,
+ EvRectangle *ev_rect)
+{
+ EvAnnotationMarkupProps *props;
+
+ g_return_if_fail (EV_IS_ANNOTATION_MARKUP (markup));
+ g_return_if_fail (ev_rect != NULL);
+
+ props = ev_annotation_markup_get_properties (markup);
+ *ev_rect = props->rectangle;
+}
+
+gboolean
+ev_annotation_markup_set_rectangle (EvAnnotationMarkup *markup,
+ const EvRectangle *ev_rect)
+{
+ EvAnnotationMarkupProps *props;
+
+ g_return_val_if_fail (EV_IS_ANNOTATION_MARKUP (markup), FALSE);
+ g_return_val_if_fail (ev_rect != NULL, FALSE);
+
+ props = ev_annotation_markup_get_properties (markup);
+ if (props->rectangle.x1 == ev_rect->x1 &&
+ props->rectangle.y1 == ev_rect->y1 &&
+ props->rectangle.x2 == ev_rect->x2 &&
+ props->rectangle.y2 == ev_rect->y2)
+ return FALSE;
+
+ props->rectangle = *ev_rect;
+
+ g_object_notify (G_OBJECT (markup), "rectangle");
+
+ return TRUE;
+}
+
+gboolean
+ev_annotation_markup_get_popup_is_open (EvAnnotationMarkup *markup)
+{
+ EvAnnotationMarkupProps *props;
+
+ g_return_val_if_fail (EV_IS_ANNOTATION_MARKUP (markup), FALSE);
+
+ props = ev_annotation_markup_get_properties (markup);
+ return props->popup_is_open;
+}
+
+gboolean
+ev_annotation_markup_set_popup_is_open (EvAnnotationMarkup *markup,
+ gboolean is_open)
+{
+ EvAnnotationMarkupProps *props;
+
+ g_return_val_if_fail (EV_IS_ANNOTATION_MARKUP (markup), FALSE);
+
+ props = ev_annotation_markup_get_properties (markup);
+ if (props->popup_is_open == is_open)
+ return FALSE;
+
+ props->popup_is_open = is_open;
+
+ g_object_notify (G_OBJECT (markup), "popup_is_open");
+
+ return TRUE;
+}
+
+/* EvAnnotationText */
+static void
+ev_annotation_text_init (EvAnnotationText *annot)
+{
+ EV_ANNOTATION (annot)->type = EV_ANNOTATION_TYPE_TEXT;
+}
+
+static void
+ev_annotation_text_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvAnnotationText *annot = EV_ANNOTATION_TEXT (object);
+
+ if (prop_id < PROP_ATTACHMENT_ATTACHMENT) {
+ ev_annotation_markup_set_property (object, prop_id, value, pspec);
+ return;
+ }
+
+ switch (prop_id) {
+ case PROP_TEXT_ICON:
+ ev_annotation_text_set_icon (annot, g_value_get_enum (value));
+ break;
+ case PROP_TEXT_IS_OPEN:
+ ev_annotation_text_set_is_open (annot, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_annotation_text_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvAnnotationText *annot = EV_ANNOTATION_TEXT (object);
+
+ if (prop_id < PROP_ATTACHMENT_ATTACHMENT) {
+ ev_annotation_markup_get_property (object, prop_id, value, pspec);
+ return;
+ }
+
+ switch (prop_id) {
+ case PROP_TEXT_ICON:
+ g_value_set_enum (value, annot->icon);
+ break;
+ case PROP_TEXT_IS_OPEN:
+ g_value_set_boolean (value, annot->is_open);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_annotation_text_class_init (EvAnnotationTextClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+
+ ev_annotation_markup_class_install_properties (g_object_class);
+
+ g_object_class->set_property = ev_annotation_text_set_property;
+ g_object_class->get_property = ev_annotation_text_get_property;
+
+ g_object_class_install_property (g_object_class,
+ PROP_TEXT_ICON,
+ g_param_spec_enum ("icon",
+ "Icon",
+ "The icon fo the text annotation",
+ EV_TYPE_ANNOTATION_TEXT_ICON,
+ EV_ANNOTATION_TEXT_ICON_NOTE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ PROP_TEXT_IS_OPEN,
+ g_param_spec_boolean ("is_open",
+ "IsOpen",
+ "Whether text annot is initially open",
+ FALSE,
+ G_PARAM_READWRITE));
+}
+
+static void
+ev_annotation_text_markup_iface_init (EvAnnotationMarkupInterface *iface)
+{
+}
+
+EvAnnotation *
+ev_annotation_text_new (EvPage *page)
+{
+ return EV_ANNOTATION (g_object_new (EV_TYPE_ANNOTATION_TEXT,
+ "page", page,
+ NULL));
+}
+
+EvAnnotationTextIcon
+ev_annotation_text_get_icon (EvAnnotationText *text)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION_TEXT (text), 0);
+
+ return text->icon;
+}
+
+gboolean
+ev_annotation_text_set_icon (EvAnnotationText *text,
+ EvAnnotationTextIcon icon)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION_TEXT (text), FALSE);
+
+ if (text->icon == icon)
+ return FALSE;
+
+ text->icon = icon;
+
+ g_object_notify (G_OBJECT (text), "icon");
+
+ return TRUE;
+}
+
+gboolean
+ev_annotation_text_get_is_open (EvAnnotationText *text)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION_TEXT (text), FALSE);
+
+ return text->is_open;
+}
+
+gboolean
+ev_annotation_text_set_is_open (EvAnnotationText *text,
+ gboolean is_open)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION_TEXT (text), FALSE);
+
+ if (text->is_open == is_open)
+ return FALSE;
+
+ text->is_open = is_open;
+
+ g_object_notify (G_OBJECT (text), "is_open");
+
+ return TRUE;
+}
+
+/* EvAnnotationAttachment */
+static void
+ev_annotation_attachment_finalize (GObject *object)
+{
+ EvAnnotationAttachment *annot = EV_ANNOTATION_ATTACHMENT (object);
+
+ if (annot->attachment) {
+ g_object_unref (annot->attachment);
+ annot->attachment = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_annotation_attachment_parent_class)->finalize (object);
+}
+
+static void
+ev_annotation_attachment_init (EvAnnotationAttachment *annot)
+{
+ EV_ANNOTATION (annot)->type = EV_ANNOTATION_TYPE_ATTACHMENT;
+}
+
+static void
+ev_annotation_attachment_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvAnnotationAttachment *annot = EV_ANNOTATION_ATTACHMENT (object);
+
+ if (prop_id < PROP_ATTACHMENT_ATTACHMENT) {
+ ev_annotation_markup_set_property (object, prop_id, value, pspec);
+ return;
+ }
+
+ switch (prop_id) {
+ case PROP_ATTACHMENT_ATTACHMENT:
+ ev_annotation_attachment_set_attachment (annot, g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_annotation_attachment_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvAnnotationAttachment *annot = EV_ANNOTATION_ATTACHMENT (object);
+
+ if (prop_id < PROP_ATTACHMENT_ATTACHMENT) {
+ ev_annotation_markup_get_property (object, prop_id, value, pspec);
+ return;
+ }
+
+ switch (prop_id) {
+ case PROP_ATTACHMENT_ATTACHMENT:
+ g_value_set_object (value, annot->attachment);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_annotation_attachment_class_init (EvAnnotationAttachmentClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+
+ ev_annotation_markup_class_install_properties (g_object_class);
+
+ g_object_class->set_property = ev_annotation_attachment_set_property;
+ g_object_class->get_property = ev_annotation_attachment_get_property;
+ g_object_class->finalize = ev_annotation_attachment_finalize;
+
+ g_object_class_install_property (g_object_class,
+ PROP_ATTACHMENT_ATTACHMENT,
+ g_param_spec_object ("attachment",
+ "Attachment",
+ "The attachment of the annotation",
+ EV_TYPE_ATTACHMENT,
+ G_PARAM_CONSTRUCT |
+ G_PARAM_READWRITE));
+}
+
+static void
+ev_annotation_attachment_markup_iface_init (EvAnnotationMarkupInterface *iface)
+{
+}
+
+EvAnnotation *
+ev_annotation_attachment_new (EvPage *page,
+ EvAttachment *attachment)
+{
+ g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), NULL);
+
+ return EV_ANNOTATION (g_object_new (EV_TYPE_ANNOTATION_ATTACHMENT,
+ "page", page,
+ "attachment", attachment,
+ NULL));
+}
+
+EvAttachment *
+ev_annotation_attachment_get_attachment (EvAnnotationAttachment *annot)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION_ATTACHMENT (annot), NULL);
+
+ return annot->attachment;
+}
+
+gboolean
+ev_annotation_attachment_set_attachment (EvAnnotationAttachment *annot,
+ EvAttachment *attachment)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION_ATTACHMENT (annot), FALSE);
+
+ if (annot->attachment == attachment)
+ return FALSE;
+
+ if (annot->attachment)
+ g_object_unref (annot->attachment);
+ annot->attachment = attachment ? g_object_ref (attachment) : NULL;
+
+ g_object_notify (G_OBJECT (annot), "attachment");
+
+ return TRUE;
+}
diff --git a/libdocument/ev-annotation.h b/libdocument/ev-annotation.h
new file mode 100644
index 00000000..1d5fca3f
--- /dev/null
+++ b/libdocument/ev-annotation.h
@@ -0,0 +1,161 @@
+/* ev-annotation.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2007 Iñigo Martinez <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_ANNOTATION_H
+#define EV_ANNOTATION_H
+
+#include <glib-object.h>
+
+#include "ev-document.h"
+#include "ev-attachment.h"
+
+G_BEGIN_DECLS
+
+/* EvAnnotation */
+#define EV_TYPE_ANNOTATION (ev_annotation_get_type())
+#define EV_ANNOTATION(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_ANNOTATION, EvAnnotation))
+#define EV_ANNOTATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_ANNOTATION, EvAnnotationClass))
+#define EV_IS_ANNOTATION(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_ANNOTATION))
+#define EV_IS_ANNOTATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_ANNOTATION))
+#define EV_ANNOTATION_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_ANNOTATION, EvAnnotationClass))
+
+/* EvAnnotationMarkup */
+#define EV_TYPE_ANNOTATION_MARKUP (ev_annotation_markup_get_type ())
+#define EV_ANNOTATION_MARKUP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_ANNOTATION_MARKUP, EvAnnotationMarkup))
+#define EV_ANNOTATION_MARKUP_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_ANNOTATION_MARKUP, EvAnnotationMarkupInterface))
+#define EV_IS_ANNOTATION_MARKUP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_ANNOTATION_MARKUP))
+#define EV_IS_ANNOTATION_MARKUP_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_ANNOTATION_MARKUP))
+#define EV_ANNOTATION_MARKUP_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_ANNOTATION_MARKUP, EvAnnotationMarkupInterface))
+
+/* EvAnnotationText */
+#define EV_TYPE_ANNOTATION_TEXT (ev_annotation_text_get_type())
+#define EV_ANNOTATION_TEXT(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_ANNOTATION_TEXT, EvAnnotationText))
+#define EV_ANNOTATION_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_ANNOTATION_TEXT, EvAnnotationTextClass))
+#define EV_IS_ANNOTATION_TEXT(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_ANNOTATION_TEXT))
+#define EV_IS_ANNOTATION_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_ANNOTATION_TEXT))
+#define EV_ANNOTATION_TEXT_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_ANNOTATION_TEXT, EvAnnotationTextClass))
+
+/* EvAnnotationText */
+#define EV_TYPE_ANNOTATION_ATTACHMENT (ev_annotation_attachment_get_type())
+#define EV_ANNOTATION_ATTACHMENT(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_ANNOTATION_ATTACHMENT, EvAnnotationAttachment))
+#define EV_ANNOTATION_ATTACHMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_ANNOTATION_ATTACHMENT, EvAnnotationAttachmentClass))
+#define EV_IS_ANNOTATION_ATTACHMENT(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_ANNOTATION_ATTACHMENT))
+#define EV_IS_ANNOTATION_ATTACHMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_ANNOTATION_ATTACHMENT))
+#define EV_ANNOTATION_ATTACHMENT_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_ANNOTATION_ATTACHMENT, EvAnnotationAttachmentClass))
+
+typedef struct _EvAnnotation EvAnnotation;
+typedef struct _EvAnnotationClass EvAnnotationClass;
+
+typedef struct _EvAnnotationMarkup EvAnnotationMarkup;
+typedef struct _EvAnnotationMarkupInterface EvAnnotationMarkupInterface;
+
+typedef struct _EvAnnotationText EvAnnotationText;
+typedef struct _EvAnnotationTextClass EvAnnotationTextClass;
+
+typedef struct _EvAnnotationAttachment EvAnnotationAttachment;
+typedef struct _EvAnnotationAttachmentClass EvAnnotationAttachmentClass;
+
+typedef enum {
+ EV_ANNOTATION_TYPE_UNKNOWN,
+ EV_ANNOTATION_TYPE_TEXT,
+ EV_ANNOTATION_TYPE_ATTACHMENT
+} EvAnnotationType;
+
+typedef enum {
+ EV_ANNOTATION_TEXT_ICON_NOTE,
+ EV_ANNOTATION_TEXT_ICON_COMMENT,
+ EV_ANNOTATION_TEXT_ICON_KEY,
+ EV_ANNOTATION_TEXT_ICON_HELP,
+ EV_ANNOTATION_TEXT_ICON_NEW_PARAGRAPH,
+ EV_ANNOTATION_TEXT_ICON_PARAGRAPH,
+ EV_ANNOTATION_TEXT_ICON_INSERT,
+ EV_ANNOTATION_TEXT_ICON_CROSS,
+ EV_ANNOTATION_TEXT_ICON_CIRCLE,
+ EV_ANNOTATION_TEXT_ICON_UNKNOWN
+} EvAnnotationTextIcon;
+
+/* EvAnnotation */
+GType ev_annotation_get_type (void) G_GNUC_CONST;
+EvAnnotationType ev_annotation_get_annotation_type (EvAnnotation *annot);
+EvPage *ev_annotation_get_page (EvAnnotation *annot);
+guint ev_annotation_get_page_index (EvAnnotation *annot);
+gboolean ev_annotation_equal (EvAnnotation *annot,
+ EvAnnotation *other);
+const gchar *ev_annotation_get_contents (EvAnnotation *annot);
+gboolean ev_annotation_set_contents (EvAnnotation *annot,
+ const gchar *contents);
+const gchar *ev_annotation_get_name (EvAnnotation *annot);
+gboolean ev_annotation_set_name (EvAnnotation *annot,
+ const gchar *name);
+const gchar *ev_annotation_get_modified (EvAnnotation *annot);
+gboolean ev_annotation_set_modified (EvAnnotation *annot,
+ const gchar *modified);
+gboolean ev_annotation_set_modified_from_time (EvAnnotation *annot,
+ GTime utime);
+void ev_annotation_get_color (EvAnnotation *annot,
+ GdkColor *color);
+gboolean ev_annotation_set_color (EvAnnotation *annot,
+ const GdkColor *color);
+
+/* EvAnnotationMarkup */
+GType ev_annotation_markup_get_type (void) G_GNUC_CONST;
+const gchar *ev_annotation_markup_get_label (EvAnnotationMarkup *markup);
+gboolean ev_annotation_markup_set_label (EvAnnotationMarkup *markup,
+ const gchar *label);
+gdouble ev_annotation_markup_get_opacity (EvAnnotationMarkup *markup);
+gboolean ev_annotation_markup_set_opacity (EvAnnotationMarkup *markup,
+ gdouble opacity);
+gboolean ev_annotation_markup_has_popup (EvAnnotationMarkup *markup);
+gboolean ev_annotation_markup_set_has_popup (EvAnnotationMarkup *markup,
+ gboolean has_popup);
+void ev_annotation_markup_get_rectangle (EvAnnotationMarkup *markup,
+ EvRectangle *ev_rect);
+gboolean ev_annotation_markup_set_rectangle (EvAnnotationMarkup *markup,
+ const EvRectangle *ev_rect);
+gboolean ev_annotation_markup_get_popup_is_open (EvAnnotationMarkup *markup);
+gboolean ev_annotation_markup_set_popup_is_open (EvAnnotationMarkup *markup,
+ gboolean is_open);
+
+/* EvAnnotationText */
+GType ev_annotation_text_get_type (void) G_GNUC_CONST;
+EvAnnotation *ev_annotation_text_new (EvPage *page);
+EvAnnotationTextIcon ev_annotation_text_get_icon (EvAnnotationText *text);
+gboolean ev_annotation_text_set_icon (EvAnnotationText *text,
+ EvAnnotationTextIcon icon);
+gboolean ev_annotation_text_get_is_open (EvAnnotationText *text);
+gboolean ev_annotation_text_set_is_open (EvAnnotationText *text,
+ gboolean is_open);
+
+/* EvAnnotationAttachment */
+GType ev_annotation_attachment_get_type (void) G_GNUC_CONST;
+EvAnnotation *ev_annotation_attachment_new (EvPage *page,
+ EvAttachment *attachment);
+EvAttachment *ev_annotation_attachment_get_attachment (EvAnnotationAttachment *annot);
+gboolean ev_annotation_attachment_set_attachment (EvAnnotationAttachment *annot,
+ EvAttachment *attachment);
+
+G_END_DECLS
+
+#endif /* EV_ANNOTATION_H */
diff --git a/libdocument/ev-async-renderer.c b/libdocument/ev-async-renderer.c
new file mode 100644
index 00000000..3b8d7b73
--- /dev/null
+++ b/libdocument/ev-async-renderer.c
@@ -0,0 +1,65 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2004 Marco Pesenti Gritti
+ *
+ * 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, 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 "config.h"
+
+#include "ev-async-renderer.h"
+#include "ev-document.h"
+
+enum
+{
+ RENDER_FINISHED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_INTERFACE (EvAsyncRenderer, ev_async_renderer, 0)
+
+static void
+ev_async_renderer_default_init (EvAsyncRendererInterface *klass)
+{
+ static gboolean initialized = FALSE;
+
+ if (!initialized) {
+ signals[RENDER_FINISHED] =
+ g_signal_new ("render_finished",
+ EV_TYPE_ASYNC_RENDERER,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvAsyncRendererInterface, render_finished),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE,
+ 1,
+ GDK_TYPE_PIXBUF);
+ initialized = TRUE;
+ }
+}
+
+void
+ev_async_renderer_render_pixbuf (EvAsyncRenderer *async_renderer,
+ int page,
+ double scale,
+ int rotation)
+{
+ EvAsyncRendererInterface *iface = EV_ASYNC_RENDERER_GET_IFACE (async_renderer);
+
+ iface->render_pixbuf (async_renderer, page, scale, rotation);
+}
diff --git a/libdocument/ev-async-renderer.h b/libdocument/ev-async-renderer.h
new file mode 100644
index 00000000..4ce3caa7
--- /dev/null
+++ b/libdocument/ev-async-renderer.h
@@ -0,0 +1,65 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2000-2003 Marco Pesenti Gritti
+ *
+ * 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, 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.
+ *
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_ASYNC_RENDERER_H
+#define EV_ASYNC_RENDERER_H
+
+#include <glib-object.h>
+#include <glib.h>
+#include <gdk/gdk.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_ASYNC_RENDERER (ev_async_renderer_get_type ())
+#define EV_ASYNC_RENDERER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_ASYNC_RENDERER, EvAsyncRenderer))
+#define EV_ASYNC_RENDERER_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_ASYNC_RENDERER, EvAsyncRendererInterface))
+#define EV_IS_ASYNC_RENDERER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_ASYNC_RENDERER))
+#define EV_IS_ASYNC_RENDERER_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_ASYNC_RENDERER))
+#define EV_ASYNC_RENDERER_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_ASYNC_RENDERER, EvAsyncRendererInterface))
+
+typedef struct _EvAsyncRenderer EvAsyncRenderer;
+typedef struct _EvAsyncRendererInterface EvAsyncRendererInterface;
+
+struct _EvAsyncRendererInterface
+{
+ GTypeInterface base_iface;
+
+ void (* render_finished) (EvAsyncRenderer *renderer,
+ GdkPixbuf *pixbuf);
+
+ void (* render_pixbuf) (EvAsyncRenderer *renderer,
+ int page,
+ double scale,
+ int rotation);
+};
+
+GType ev_async_renderer_get_type (void);
+void ev_async_renderer_render_pixbuf (EvAsyncRenderer *renderer,
+ int page,
+ double scale,
+ int rotation);
+
+G_END_DECLS
+
+#endif
diff --git a/libdocument/ev-attachment.c b/libdocument/ev-attachment.c
new file mode 100644
index 00000000..7f41771e
--- /dev/null
+++ b/libdocument/ev-attachment.c
@@ -0,0 +1,439 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+#include <glib/gi18n-lib.h>
+#include <glib/gstdio.h>
+#include <gtk/gtk.h>
+#include "ev-file-helpers.h"
+#include "ev-attachment.h"
+
+enum
+{
+ PROP_0,
+ PROP_NAME,
+ PROP_DESCRIPTION,
+ PROP_MTIME,
+ PROP_CTIME,
+ PROP_SIZE,
+ PROP_DATA
+};
+
+struct _EvAttachmentPrivate {
+ gchar *name;
+ gchar *description;
+ GTime mtime;
+ GTime ctime;
+ gsize size;
+ gchar *data;
+ gchar *mime_type;
+
+ GAppInfo *app;
+ GFile *tmp_file;
+};
+
+#define EV_ATTACHMENT_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_ATTACHMENT, EvAttachmentPrivate))
+
+G_DEFINE_TYPE (EvAttachment, ev_attachment, G_TYPE_OBJECT)
+
+GQuark
+ev_attachment_error_quark (void)
+{
+ static GQuark error_quark = 0;
+
+ if (error_quark == 0)
+ error_quark =
+ g_quark_from_static_string ("ev-attachment-error-quark");
+
+ return error_quark;
+}
+
+static void
+ev_attachment_finalize (GObject *object)
+{
+ EvAttachment *attachment = EV_ATTACHMENT (object);
+
+ if (attachment->priv->name) {
+ g_free (attachment->priv->name);
+ attachment->priv->name = NULL;
+ }
+
+ if (attachment->priv->description) {
+ g_free (attachment->priv->description);
+ attachment->priv->description = NULL;
+ }
+
+ if (attachment->priv->data) {
+ g_free (attachment->priv->data);
+ attachment->priv->data = NULL;
+ }
+
+ if (attachment->priv->mime_type) {
+ g_free (attachment->priv->mime_type);
+ attachment->priv->mime_type = NULL;
+ }
+
+ if (attachment->priv->app) {
+ g_object_unref (attachment->priv->app);
+ attachment->priv->app = NULL;
+ }
+
+ if (attachment->priv->tmp_file) {
+ ev_tmp_file_unlink (attachment->priv->tmp_file);
+ g_object_unref (attachment->priv->tmp_file);
+ attachment->priv->tmp_file = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_attachment_parent_class)->finalize (object);
+}
+
+static void
+ev_attachment_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *param_spec)
+{
+ EvAttachment *attachment = EV_ATTACHMENT (object);
+
+ switch (prop_id) {
+ case PROP_NAME:
+ attachment->priv->name = g_value_dup_string (value);
+ break;
+ case PROP_DESCRIPTION:
+ attachment->priv->description = g_value_dup_string (value);
+ break;
+ case PROP_MTIME:
+ attachment->priv->mtime = g_value_get_ulong (value);
+ break;
+ case PROP_CTIME:
+ attachment->priv->ctime = g_value_get_ulong (value);
+ break;
+ case PROP_SIZE:
+ attachment->priv->size = g_value_get_uint (value);
+ break;
+ case PROP_DATA:
+ attachment->priv->data = g_value_get_pointer (value);
+ attachment->priv->mime_type = g_content_type_guess (attachment->priv->name,
+ (guchar *) attachment->priv->data,
+ attachment->priv->size,
+ NULL);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+ prop_id,
+ param_spec);
+ break;
+ }
+}
+
+static void
+ev_attachment_class_init (EvAttachmentClass *klass)
+{
+ GObjectClass *g_object_class;
+
+ g_object_class = G_OBJECT_CLASS (klass);
+
+ g_object_class->set_property = ev_attachment_set_property;
+
+ g_type_class_add_private (g_object_class, sizeof (EvAttachmentPrivate));
+
+ /* Properties */
+ g_object_class_install_property (g_object_class,
+ PROP_NAME,
+ g_param_spec_string ("name",
+ "Name",
+ "The attachment name",
+ NULL,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_DESCRIPTION,
+ g_param_spec_string ("description",
+ "Description",
+ "The attachment description",
+ NULL,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_MTIME,
+ g_param_spec_ulong ("mtime",
+ "ModifiedTime",
+ "The attachment modification date",
+ 0, G_MAXULONG, 0,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_CTIME,
+ g_param_spec_ulong ("ctime",
+ "CreationTime",
+ "The attachment creation date",
+ 0, G_MAXULONG, 0,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_SIZE,
+ g_param_spec_uint ("size",
+ "Size",
+ "The attachment size",
+ 0, G_MAXUINT, 0,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_DATA,
+ g_param_spec_pointer ("data",
+ "Data",
+ "The attachment data",
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class->finalize = ev_attachment_finalize;
+}
+
+static void
+ev_attachment_init (EvAttachment *attachment)
+{
+ attachment->priv = EV_ATTACHMENT_GET_PRIVATE (attachment);
+
+ attachment->priv->name = NULL;
+ attachment->priv->description = NULL;
+ attachment->priv->data = NULL;
+ attachment->priv->mime_type = NULL;
+
+ attachment->priv->tmp_file = NULL;
+}
+
+EvAttachment *
+ev_attachment_new (const gchar *name,
+ const gchar *description,
+ GTime mtime,
+ GTime ctime,
+ gsize size,
+ gpointer data)
+{
+ EvAttachment *attachment;
+
+ attachment = g_object_new (EV_TYPE_ATTACHMENT,
+ "name", name,
+ "description", description,
+ "mtime", mtime,
+ "ctime", ctime,
+ "size", size,
+ "data", data,
+ NULL);
+
+ return attachment;
+}
+
+const gchar *
+ev_attachment_get_name (EvAttachment *attachment)
+{
+ g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), NULL);
+
+ return attachment->priv->name;
+}
+
+const gchar *
+ev_attachment_get_description (EvAttachment *attachment)
+{
+ g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), NULL);
+
+ return attachment->priv->description;
+}
+
+GTime
+ev_attachment_get_modification_date (EvAttachment *attachment)
+{
+ g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), 0);
+
+ return attachment->priv->mtime;
+}
+
+GTime
+ev_attachment_get_creation_date (EvAttachment *attachment)
+{
+ g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), 0);
+
+ return attachment->priv->ctime;
+}
+
+const gchar *
+ev_attachment_get_mime_type (EvAttachment *attachment)
+{
+ g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), NULL);
+
+ return attachment->priv->mime_type;
+}
+
+gboolean
+ev_attachment_save (EvAttachment *attachment,
+ GFile *file,
+ GError **error)
+{
+ GFileOutputStream *output_stream;
+ GError *ioerror = NULL;
+ gssize written_bytes;
+
+ g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), FALSE);
+ g_return_val_if_fail (G_IS_FILE (file), FALSE);
+
+ output_stream = g_file_replace (file, NULL, FALSE, 0, NULL, &ioerror);
+ if (output_stream == NULL) {
+ char *uri;
+
+ uri = g_file_get_uri (file);
+ g_set_error (error,
+ EV_ATTACHMENT_ERROR,
+ ioerror->code,
+ _("Couldn't save attachment “%s”: %s"),
+ uri,
+ ioerror->message);
+
+ g_error_free (ioerror);
+ g_free (uri);
+
+ return FALSE;
+ }
+
+ written_bytes = g_output_stream_write (G_OUTPUT_STREAM (output_stream),
+ attachment->priv->data,
+ attachment->priv->size,
+ NULL, &ioerror);
+ if (written_bytes == -1) {
+ char *uri;
+
+ uri = g_file_get_uri (file);
+ g_set_error (error,
+ EV_ATTACHMENT_ERROR,
+ ioerror->code,
+ _("Couldn't save attachment “%s”: %s"),
+ uri,
+ ioerror->message);
+
+ g_output_stream_close (G_OUTPUT_STREAM (output_stream), NULL, NULL);
+ g_error_free (ioerror);
+ g_free (uri);
+
+ return FALSE;
+ }
+
+ g_output_stream_close (G_OUTPUT_STREAM (output_stream), NULL, NULL);
+
+ return TRUE;
+
+}
+
+static gboolean
+ev_attachment_launch_app (EvAttachment *attachment,
+ GdkScreen *screen,
+ guint32 timestamp,
+ GError **error)
+{
+ gboolean result;
+ GList *files = NULL;
+ GAppLaunchContext *context = NULL;
+ GError *ioerror = NULL;
+
+ g_assert (G_IS_FILE (attachment->priv->tmp_file));
+ g_assert (G_IS_APP_INFO (attachment->priv->app));
+
+ files = g_list_prepend (files, attachment->priv->tmp_file);
+
+ context = G_APP_LAUNCH_CONTEXT (gdk_app_launch_context_new ());
+ gdk_app_launch_context_set_screen (GDK_APP_LAUNCH_CONTEXT (context), screen);
+ gdk_app_launch_context_set_timestamp (GDK_APP_LAUNCH_CONTEXT (context), timestamp);
+
+ result = g_app_info_launch (attachment->priv->app, files,
+ context, &ioerror);
+
+ if (context)
+ g_object_unref (context);
+
+ if (!result) {
+ g_set_error (error,
+ EV_ATTACHMENT_ERROR,
+ (gint) result,
+ _("Couldn't open attachment “%s”: %s"),
+ attachment->priv->name,
+ ioerror->message);
+
+ g_list_free (files);
+ g_error_free (ioerror);
+
+ return FALSE;
+ }
+
+ g_list_free (files);
+
+ return TRUE;
+}
+
+gboolean
+ev_attachment_open (EvAttachment *attachment,
+ GdkScreen *screen,
+ guint32 timestamp,
+ GError **error)
+{
+ GAppInfo *app_info;
+ gboolean retval = FALSE;
+
+ g_return_val_if_fail (EV_IS_ATTACHMENT (attachment), FALSE);
+
+ if (!attachment->priv->app) {
+ app_info = g_app_info_get_default_for_type (attachment->priv->mime_type, FALSE);
+ attachment->priv->app = app_info;
+ }
+
+ if (!attachment->priv->app) {
+ g_set_error (error,
+ EV_ATTACHMENT_ERROR,
+ 0,
+ _("Couldn't open attachment “%s”"),
+ attachment->priv->name);
+
+ return FALSE;
+ }
+
+ if (attachment->priv->tmp_file) {
+ retval = ev_attachment_launch_app (attachment, screen,
+ timestamp, error);
+ } else {
+ char *template;
+ GFile *file;
+
+ /* FIXMEchpe: convert to filename encoding first! */
+ template = g_strdup_printf ("%s.XXXXXX", ev_attachment_get_name (attachment));
+ file = ev_mkstemp_file (template, error);
+ g_free (template);
+
+ if (file != NULL && ev_attachment_save (attachment, file, error)) {
+ if (attachment->priv->tmp_file)
+ g_object_unref (attachment->priv->tmp_file);
+ attachment->priv->tmp_file = g_object_ref (file);
+
+ retval = ev_attachment_launch_app (attachment, screen,
+ timestamp, error);
+ }
+
+ g_object_unref (file);
+ }
+
+ return retval;
+}
+
diff --git a/libdocument/ev-attachment.h b/libdocument/ev-attachment.h
new file mode 100644
index 00000000..79ec1a8b
--- /dev/null
+++ b/libdocument/ev-attachment.h
@@ -0,0 +1,79 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef __EV_ATTACHMENT_H__
+#define __EV_ATTACHMENT_H__
+
+#include <glib-object.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvAttachment EvAttachment;
+typedef struct _EvAttachmentClass EvAttachmentClass;
+typedef struct _EvAttachmentPrivate EvAttachmentPrivate;
+
+#define EV_TYPE_ATTACHMENT (ev_attachment_get_type())
+#define EV_ATTACHMENT(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_ATTACHMENT, EvAttachment))
+#define EV_ATTACHMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_ATTACHMENT, EvAttachmentClass))
+#define EV_IS_ATTACHMENT(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_ATTACHMENT))
+#define EV_IS_ATTACHMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_ATTACHMENT))
+#define EV_ATTACHMENT_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_ATTACHMENT, EvAttachmentClass))
+
+#define EV_ATTACHMENT_ERROR (ev_attachment_error_quark ())
+
+struct _EvAttachment {
+ GObject base_instance;
+
+ EvAttachmentPrivate *priv;
+};
+
+struct _EvAttachmentClass {
+ GObjectClass base_class;
+};
+
+GType ev_attachment_get_type (void) G_GNUC_CONST;
+GQuark ev_attachment_error_quark (void) G_GNUC_CONST;
+EvAttachment *ev_attachment_new (const gchar *name,
+ const gchar *description,
+ GTime mtime,
+ GTime ctime,
+ gsize size,
+ gpointer data);
+
+const gchar *ev_attachment_get_name (EvAttachment *attachment);
+const gchar *ev_attachment_get_description (EvAttachment *attachment);
+GTime ev_attachment_get_modification_date (EvAttachment *attachment);
+GTime ev_attachment_get_creation_date (EvAttachment *attachment);
+const gchar *ev_attachment_get_mime_type (EvAttachment *attachment);
+gboolean ev_attachment_save (EvAttachment *attachment,
+ GFile *file,
+ GError **error);
+gboolean ev_attachment_open (EvAttachment *attachment,
+ GdkScreen *screen,
+ guint32 timestamp,
+ GError **error);
+
+G_END_DECLS
+
+#endif /* __EV_ATTACHMENT_H__ */
diff --git a/libdocument/ev-backends-manager.c b/libdocument/ev-backends-manager.c
new file mode 100644
index 00000000..f0b1d902
--- /dev/null
+++ b/libdocument/ev-backends-manager.c
@@ -0,0 +1,333 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include <glib/gstdio.h>
+
+#include "ev-module.h"
+#include "ev-backends-manager.h"
+
+static GList *ev_backends_list = NULL;
+
+typedef struct _EvBackendInfo EvBackendInfo;
+struct _EvBackendInfo {
+ gchar *module_name;
+ GTypeModule *module;
+ gboolean resident;
+
+ GType type_id;
+
+ gchar *type_desc;
+ gchar **mime_types;
+};
+
+#define EV_BACKENDS_GROUP "Evince Backend"
+#define EV_BACKENDS_EXTENSION ".evince-backend"
+
+static gchar *backendsdir = NULL;
+
+static const gchar *
+backends_dir (void)
+{
+ if (!backendsdir) {
+#ifdef G_OS_WIN32
+ gchar *dir;
+
+ dir = g_win32_get_package_installation_directory_of_module (NULL);
+ backendsdir = g_build_filename (dir, "lib", "evince",
+ EV_BACKENDSBINARYVERSION,
+ "backends", NULL);
+ g_free (dir);
+#else
+ backendsdir = g_strdup (EV_BACKENDSDIR);
+#endif
+ }
+
+ return backendsdir;
+}
+
+static void
+ev_backend_info_free (EvBackendInfo *info)
+{
+ g_free (info->module_name);
+ g_free (info->type_desc);
+ g_strfreev (info->mime_types);
+ g_free (info);
+}
+
+static EvBackendInfo *
+ev_backends_manager_load_backend (const gchar *file)
+{
+ EvBackendInfo *info;
+ GKeyFile *backend_file = NULL;
+ GError *error = NULL;
+
+ backend_file = g_key_file_new ();
+ if (!g_key_file_load_from_file (backend_file, file, G_KEY_FILE_NONE, &error)) {
+ g_warning ("Error opening backend file %s: %s",
+ file, error->message);
+ g_error_free (error);
+ g_key_file_free (backend_file);
+
+ return NULL;
+ }
+
+ info = g_new0 (EvBackendInfo, 1);
+ info->module_name = g_key_file_get_string (backend_file, EV_BACKENDS_GROUP,
+ "Module", NULL);
+ if (!info->module_name) {
+ g_warning ("Bad evince backend file %s: Could not find 'Module'",
+ file);
+ ev_backend_info_free (info);
+ g_key_file_free (backend_file);
+
+ return NULL;
+ }
+
+ info->resident = g_key_file_get_boolean (backend_file, EV_BACKENDS_GROUP,
+ "Resident", NULL);
+
+ info->type_desc = g_key_file_get_locale_string (backend_file, EV_BACKENDS_GROUP,
+ "TypeDescription", NULL, NULL);
+ if (!info->type_desc) {
+ g_warning ("Bad evince backend file %s: Could not find 'TypeDescription'",
+ file);
+ ev_backend_info_free (info);
+ g_key_file_free (backend_file);
+
+ return NULL;
+ }
+
+ info->mime_types = g_key_file_get_string_list (backend_file, EV_BACKENDS_GROUP,
+ "MimeType", NULL, NULL);
+ if (!info->mime_types) {
+ g_warning ("Bad evince backend file %s: Could not find 'MimeType'",
+ file);
+ ev_backend_info_free (info);
+ g_key_file_free (backend_file);
+
+ return NULL;
+ }
+
+ g_key_file_free (backend_file);
+
+ return info;
+}
+
+static gboolean
+ev_backends_manager_load (void)
+{
+ GDir *dir;
+ const gchar *dirent;
+ GError *error = NULL;
+
+ dir = g_dir_open (backends_dir(), 0, &error);
+ if (!dir) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+
+ return FALSE;
+ }
+
+ while ((dirent = g_dir_read_name (dir))) {
+ EvBackendInfo *info;
+ gchar *file;
+
+ if (!g_str_has_suffix (dirent, EV_BACKENDS_EXTENSION))
+ continue;
+
+ file = g_build_filename (backends_dir(), dirent, NULL);
+ info = ev_backends_manager_load_backend (file);
+ g_free (file);
+
+ if (!info)
+ continue;
+
+ ev_backends_list = g_list_prepend (ev_backends_list, info);
+ }
+
+ g_dir_close (dir);
+
+ return ev_backends_list != NULL;
+}
+
+/*
+ * _ev_backends_manager_init:
+ *
+ * Initializes the evince backends manager.
+ *
+ * Returns: %TRUE if there were any backends found; %FALSE otherwise
+ */
+gboolean
+_ev_backends_manager_init (void)
+{
+ if (ev_backends_list)
+ return TRUE;
+
+ return ev_backends_manager_load ();
+}
+
+/*
+ * _ev_backends_manager_shutdown:
+ *
+ * Shuts the evince backends manager down.
+ */
+void
+_ev_backends_manager_shutdown (void)
+{
+ g_list_foreach (ev_backends_list, (GFunc)ev_backend_info_free, NULL);
+ g_list_free (ev_backends_list);
+ ev_backends_list = NULL;
+
+ g_free (backendsdir);
+}
+
+static EvBackendInfo *
+ev_backends_manager_get_backend_info (const gchar *mime_type)
+{
+ GList *l;
+
+ for (l = ev_backends_list; l; l = g_list_next (l)) {
+ EvBackendInfo *info;
+ gint i = 0;
+ const char *mime;
+
+ info = (EvBackendInfo *)l->data;
+
+ while ((mime = info->mime_types[i++])) {
+ if (g_ascii_strcasecmp (mime, mime_type) == 0)
+ return info;
+ }
+ }
+
+ return NULL;
+}
+
+EvDocument *
+ev_backends_manager_get_document (const gchar *mime_type)
+{
+ EvDocument *document;
+ EvBackendInfo *info;
+
+ info = ev_backends_manager_get_backend_info (mime_type);
+ if (!info)
+ return NULL;
+
+ if (!info->module) {
+ gchar *path;
+
+ path = g_module_build_path (backends_dir(), info->module_name);
+ info->module = G_TYPE_MODULE (ev_module_new (path, info->resident));
+ g_free (path);
+ }
+
+ if (!g_type_module_use (info->module)) {
+ g_warning ("Cannot load backend '%s' since file '%s' cannot be read.",
+ info->module_name,
+ ev_module_get_path (EV_MODULE (info->module)));
+ g_object_unref (G_OBJECT (info->module));
+ info->module = NULL;
+
+ return NULL;
+ }
+
+ document = EV_DOCUMENT (ev_module_new_object (EV_MODULE (info->module)));
+ g_type_module_unuse (info->module);
+
+ return document;
+}
+
+static EvBackendInfo *
+get_document_backend_info (EvDocument *document)
+{
+ GList *l;
+
+ for (l = ev_backends_list; l; l = g_list_next (l)) {
+ EvBackendInfo *info;
+ GType type_id;
+
+ info = (EvBackendInfo *)l->data;
+
+ if (!info->module)
+ continue;
+
+ type_id = ev_module_get_object_type (EV_MODULE (info->module));
+
+ if (G_TYPE_CHECK_INSTANCE_TYPE (document, type_id)) {
+ return info;
+ }
+ }
+
+ return NULL;
+}
+
+const gchar *
+ev_backends_manager_get_document_module_name (EvDocument *document)
+{
+ EvBackendInfo *info;
+
+ info = get_document_backend_info (document);
+ return info ? info->module_name : NULL;
+}
+
+static EvTypeInfo *
+ev_type_info_new (const gchar *desc, const gchar **mime_types)
+{
+ EvTypeInfo *info;
+
+ info = g_new (EvTypeInfo, 1);
+
+ info->desc = desc;
+ info->mime_types = mime_types;
+
+ return info;
+}
+
+EvTypeInfo *
+ev_backends_manager_get_document_type_info (EvDocument *document)
+{
+ EvBackendInfo *info;
+
+ info = get_document_backend_info (document);
+ return info ?
+ ev_type_info_new (info->type_desc,
+ (const gchar **)info->mime_types)
+ : NULL;
+}
+
+GList *
+ev_backends_manager_get_all_types_info (void)
+{
+ GList *l;
+ GList *retval = NULL;
+
+ for (l = ev_backends_list; l; l = g_list_next (l)) {
+ EvBackendInfo *info;
+ EvTypeInfo *type_info;
+
+ info = (EvBackendInfo *)l->data;
+
+ type_info = ev_type_info_new (info->type_desc,
+ (const gchar **)info->mime_types);
+ retval = g_list_prepend (retval, type_info);
+ }
+
+ return retval;
+}
diff --git a/libdocument/ev-backends-manager.h b/libdocument/ev-backends-manager.h
new file mode 100644
index 00000000..b2d7d245
--- /dev/null
+++ b/libdocument/ev-backends-manager.h
@@ -0,0 +1,48 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_BACKENDS_MANAGER
+#define EV_BACKENDS_MANAGER
+
+#include <glib.h>
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvTypeInfo {
+ const gchar *desc;
+ const gchar **mime_types;
+} EvTypeInfo;
+
+gboolean _ev_backends_manager_init (void);
+void _ev_backends_manager_shutdown (void);
+
+EvDocument *ev_backends_manager_get_document (const gchar *mime_type);
+const gchar *ev_backends_manager_get_document_module_name (EvDocument *document);
+EvTypeInfo *ev_backends_manager_get_document_type_info (EvDocument *document);
+GList *ev_backends_manager_get_all_types_info (void);
+
+G_END_DECLS
+
+#endif /* EV_BACKENDS_MANAGER */
diff --git a/libdocument/ev-debug.c b/libdocument/ev-debug.c
new file mode 100644
index 00000000..4750c9d3
--- /dev/null
+++ b/libdocument/ev-debug.c
@@ -0,0 +1,177 @@
+/*
+ * ev-debug.c
+ * This file is part of Evince
+ *
+ * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
+ * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
+ * Copyright (C) 2002 - 2005 Paolo Maggi
+ *
+ * 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.
+ */
+
+/*
+ * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
+ * list of people on the gedit Team.
+ * See the ChangeLog files for a list of changes.
+ *
+ * $Id: gedit-debug.c 4809 2006-04-08 14:46:31Z pborelli $
+ */
+
+/* Modified by Evince Team */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+
+#include "ev-debug.h"
+
+#ifdef EV_ENABLE_DEBUG
+static EvDebugSection ev_debug = EV_NO_DEBUG;
+static EvProfileSection ev_profile = EV_NO_PROFILE;
+
+static GHashTable *timers = NULL;
+
+static void
+debug_init ()
+{
+ if (g_getenv ("EV_DEBUG") != NULL) {
+ /* enable all debugging */
+ ev_debug = ~EV_NO_DEBUG;
+ return;
+ }
+
+ if (g_getenv ("EV_DEBUG_JOBS") != NULL)
+ ev_debug |= EV_DEBUG_JOBS;
+}
+
+static void
+profile_init ()
+{
+ if (g_getenv ("EV_PROFILE") != NULL) {
+ /* enable all profiling */
+ ev_profile = ~EV_NO_PROFILE;
+ } else {
+ if (g_getenv ("EV_PROFILE_JOBS") != NULL)
+ ev_profile |= EV_PROFILE_JOBS;
+ }
+
+ if (ev_profile) {
+ timers = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ (GDestroyNotify) g_free,
+ (GDestroyNotify) g_timer_destroy);
+ }
+}
+
+void
+_ev_debug_init ()
+{
+ debug_init ();
+ profile_init ();
+}
+
+void
+_ev_debug_shutdown ()
+{
+ if (timers) {
+ g_hash_table_destroy (timers);
+ timers = NULL;
+ }
+}
+
+void
+ev_debug_message (EvDebugSection section,
+ const gchar *file,
+ gint line,
+ const gchar *function,
+ const gchar *format, ...)
+{
+ if (G_UNLIKELY (ev_debug & section)) {
+ gchar *msg = NULL;
+
+ if (format) {
+ va_list args;
+
+ va_start (args, format);
+ msg = g_strdup_vprintf (format, args);
+ va_end (args);
+ }
+
+ g_print ("%s:%d (%s) %s\n", file, line, function, msg ? msg : "");
+
+ fflush (stdout);
+
+ g_free (msg);
+ }
+}
+
+void
+ev_profiler_start (EvProfileSection section,
+ const gchar *format, ...)
+{
+ if (G_UNLIKELY (ev_profile & section)) {
+ GTimer *timer;
+ gchar *name;
+ va_list args;
+
+ if (!format)
+ return;
+
+ va_start (args, format);
+ name = g_strdup_vprintf (format, args);
+ va_end (args);
+
+ timer = g_hash_table_lookup (timers, name);
+ if (!timer) {
+ timer = g_timer_new ();
+ g_hash_table_insert (timers, g_strdup (name), timer);
+ } else {
+ g_timer_start (timer);
+ }
+ }
+}
+
+void
+ev_profiler_stop (EvProfileSection section,
+ const gchar *format, ...)
+{
+ if (G_UNLIKELY (ev_profile & section)) {
+ GTimer *timer;
+ gchar *name;
+ va_list args;
+ gdouble seconds;
+
+ if (!format)
+ return;
+
+ va_start (args, format);
+ name = g_strdup_vprintf (format, args);
+ va_end (args);
+
+ timer = g_hash_table_lookup (timers, name);
+ if (!timer)
+ return;
+
+ g_timer_stop (timer);
+ seconds = g_timer_elapsed (timer, NULL);
+ g_print ("[ %s ] %f s elapsed\n", name, seconds);
+ fflush (stdout);
+ }
+}
+
+#endif /* EV_ENABLE_DEBUG */
diff --git a/libdocument/ev-debug.h b/libdocument/ev-debug.h
new file mode 100644
index 00000000..cf252431
--- /dev/null
+++ b/libdocument/ev-debug.h
@@ -0,0 +1,106 @@
+/*
+ * ev-debug.h
+ * This file is part of Evince
+ *
+ * Copyright (C) 1998, 1999 Alex Roberts, Evan Lawrence
+ * Copyright (C) 2000, 2001 Chema Celorio, Paolo Maggi
+ * Copyright (C) 2002 - 2005 Paolo Maggi
+ *
+ * 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.
+ */
+
+/*
+ * Modified by the gedit Team, 1998-2005. See the AUTHORS file for a
+ * list of people on the gedit Team.
+ * See the ChangeLog files for a list of changes.
+ *
+ * $Id: gedit-debug.h 4809 2006-04-08 14:46:31Z pborelli $
+ */
+
+/* Modified by Evince Team */
+
+#if !defined (EVINCE_COMPILATION)
+#error "This is a private header."
+#endif
+
+#ifndef __EV_DEBUG_H__
+#define __EV_DEBUG_H__
+
+#include <glib-object.h>
+
+#define EV_GET_TYPE_NAME(instance) g_type_name_from_instance ((gpointer)instance)
+
+#ifndef EV_ENABLE_DEBUG
+
+#define _ev_debug_init()
+#define _ev_debug_shutdown()
+#if defined(G_HAVE_GNUC_VARARGS)
+#define ev_debug_message(section, format, args...) G_STMT_START { } G_STMT_END
+#define ev_profiler_start(format, args...) G_STMT_START { } G_STMT_END
+#define ev_profiler_stop(format, args...) G_STMT_START { } G_STMT_END
+#elif defined(G_HAVE_ISO_VARARGS)
+#define ev_debug_message(...) G_STMT_START { } G_STMT_END
+#define ev_profiler_start(...) G_STMT_START { } G_STMT_END
+#define ev_profiler_stop(...) G_STMT_START { } G_STMT_END
+#else /* no varargs macros */
+static void ev_debug_message(EvDebugSection section, const gchar *file, gint line, const gchar *function, const gchar *format, ...) {}
+static void ev_profiler_start(EvProfileSection section, const gchar *format, ...) {}
+static void ev_profiler_stop(EvProfileSection section, const gchar *format, ...) {}
+#endif
+
+#else /* ENABLE_DEBUG */
+
+G_BEGIN_DECLS
+
+/*
+ * Set an environmental var of the same name to turn on
+ * debugging output. Setting EV_DEBUG will turn on all
+ * sections.
+ */
+typedef enum {
+ EV_NO_DEBUG = 0,
+ EV_DEBUG_JOBS = 1 << 0
+} EvDebugSection;
+
+#define DEBUG_JOBS EV_DEBUG_JOBS, __FILE__, __LINE__, G_STRFUNC
+
+/*
+ * Set an environmental var of the same name to turn on
+ * profiling. Setting EV_PROFILE will turn on all
+ * sections.
+ */
+typedef enum {
+ EV_NO_PROFILE = 0,
+ EV_PROFILE_JOBS = 1 << 0
+} EvProfileSection;
+
+void _ev_debug_init (void);
+void _ev_debug_shutdown (void);
+
+void ev_debug_message (EvDebugSection section,
+ const gchar *file,
+ gint line,
+ const gchar *function,
+ const gchar *format, ...) G_GNUC_PRINTF(5, 6);
+void ev_profiler_start (EvProfileSection section,
+ const gchar *format, ...) G_GNUC_PRINTF(2, 3);
+void ev_profiler_stop (EvProfileSection section,
+ const gchar *format, ...) G_GNUC_PRINTF(2, 3);
+
+G_END_DECLS
+
+#endif /* EV_ENABLE_DEBUG */
+#endif /* __EV_DEBUG_H__ */
diff --git a/libdocument/ev-document-annotations.c b/libdocument/ev-document-annotations.c
new file mode 100644
index 00000000..f153f3eb
--- /dev/null
+++ b/libdocument/ev-document-annotations.c
@@ -0,0 +1,75 @@
+/* ev-document-annotations.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2007 Iñigo Martinez <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "ev-document-annotations.h"
+
+G_DEFINE_INTERFACE (EvDocumentAnnotations, ev_document_annotations, 0)
+
+static void
+ev_document_annotations_default_init (EvDocumentAnnotationsInterface *klass)
+{
+}
+
+EvMappingList *
+ev_document_annotations_get_annotations (EvDocumentAnnotations *document_annots,
+ EvPage *page)
+{
+ EvDocumentAnnotationsInterface *iface = EV_DOCUMENT_ANNOTATIONS_GET_IFACE (document_annots);
+
+ return iface->get_annotations (document_annots, page);
+}
+
+gboolean
+ev_document_annotations_document_is_modified (EvDocumentAnnotations *document_annots)
+{
+ EvDocumentAnnotationsInterface *iface = EV_DOCUMENT_ANNOTATIONS_GET_IFACE (document_annots);
+
+ return (iface->document_is_modified) ? iface->document_is_modified (document_annots) : FALSE;
+}
+
+void
+ev_document_annotations_save_annotation (EvDocumentAnnotations *document_annots,
+ EvAnnotation *annot,
+ EvAnnotationsSaveMask mask)
+{
+ EvDocumentAnnotationsInterface *iface = EV_DOCUMENT_ANNOTATIONS_GET_IFACE (document_annots);
+
+ iface->save_annotation (document_annots, annot, mask);
+}
+
+void
+ev_document_annotations_add_annotation (EvDocumentAnnotations *document_annots,
+ EvAnnotation *annot,
+ EvRectangle *rect)
+{
+ EvDocumentAnnotationsInterface *iface = EV_DOCUMENT_ANNOTATIONS_GET_IFACE (document_annots);
+
+ if (iface->add_annotation)
+ iface->add_annotation (document_annots, annot, rect);
+}
+
+gboolean
+ev_document_annotations_can_add_annotation (EvDocumentAnnotations *document_annots)
+{
+ EvDocumentAnnotationsInterface *iface = EV_DOCUMENT_ANNOTATIONS_GET_IFACE (document_annots);
+
+ return iface->add_annotation != NULL;
+}
diff --git a/libdocument/ev-document-annotations.h b/libdocument/ev-document-annotations.h
new file mode 100644
index 00000000..55f7c0c1
--- /dev/null
+++ b/libdocument/ev-document-annotations.h
@@ -0,0 +1,99 @@
+/* ev-document-annotations.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Iñigo Martinez <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_ANNOTATIONS_H
+#define EV_DOCUMENT_ANNOTATIONS_H
+
+#include <glib-object.h>
+
+#include "ev-document.h"
+#include "ev-annotation.h"
+#include "ev-mapping-list.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_DOCUMENT_ANNOTATIONS (ev_document_annotations_get_type ())
+#define EV_DOCUMENT_ANNOTATIONS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT_ANNOTATIONS, EvDocumentAnnotations))
+#define EV_DOCUMENT_ANNOTATIONS_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT_ANNOTATIONS, EvDocumentAnnotationsInterface))
+#define EV_IS_DOCUMENT_ANNOTATIONS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT_ANNOTATIONS))
+#define EV_IS_DOCUMENT_ANNOTATIONS_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT_ANNOTATIONS))
+#define EV_DOCUMENT_ANNOTATIONS_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT_ANNOTATIONS, EvDocumentAnnotationsInterface))
+
+typedef enum {
+ EV_ANNOTATIONS_SAVE_NONE = 0,
+ EV_ANNOTATIONS_SAVE_CONTENTS = 1 << 0,
+ EV_ANNOTATIONS_SAVE_COLOR = 1 << 1,
+
+ /* Markup Annotations */
+ EV_ANNOTATIONS_SAVE_LABEL = 1 << 2,
+ EV_ANNOTATIONS_SAVE_OPACITY = 1 << 3,
+ EV_ANNOTATIONS_SAVE_POPUP_RECT = 1 << 4,
+ EV_ANNOTATIONS_SAVE_POPUP_IS_OPEN = 1 << 5,
+
+ /* Text Annotations */
+ EV_ANNOTATIONS_SAVE_TEXT_IS_OPEN = 1 << 6,
+ EV_ANNOTATIONS_SAVE_TEXT_ICON = 1 << 7,
+
+ /* Attachment Annotations */
+ EV_ANNOTATIONS_SAVE_ATTACHMENT = 1 << 8,
+
+ /* Save all */
+ EV_ANNOTATIONS_SAVE_ALL = (1 << 9) - 1
+} EvAnnotationsSaveMask;
+
+typedef struct _EvDocumentAnnotations EvDocumentAnnotations;
+typedef struct _EvDocumentAnnotationsInterface EvDocumentAnnotationsInterface;
+
+struct _EvDocumentAnnotationsInterface
+{
+ GTypeInterface base_iface;
+
+ /* Methods */
+ EvMappingList *(* get_annotations) (EvDocumentAnnotations *document_annots,
+ EvPage *page);
+ gboolean (* document_is_modified) (EvDocumentAnnotations *document_annots);
+ void (* add_annotation) (EvDocumentAnnotations *document_annots,
+ EvAnnotation *annot,
+ EvRectangle *rect);
+ void (* save_annotation) (EvDocumentAnnotations *document_annots,
+ EvAnnotation *annot,
+ EvAnnotationsSaveMask mask);
+};
+
+GType ev_document_annotations_get_type (void) G_GNUC_CONST;
+EvMappingList *ev_document_annotations_get_annotations (EvDocumentAnnotations *document_annots,
+ EvPage *page);
+gboolean ev_document_annotations_document_is_modified (EvDocumentAnnotations *document_annots);
+void ev_document_annotations_add_annotation (EvDocumentAnnotations *document_annots,
+ EvAnnotation *annot,
+ EvRectangle *rect);
+void ev_document_annotations_save_annotation (EvDocumentAnnotations *document_annots,
+ EvAnnotation *annot,
+ EvAnnotationsSaveMask mask);
+gboolean ev_document_annotations_can_add_annotation (EvDocumentAnnotations *document_annots);
+
+G_END_DECLS
+
+#endif /* EV_DOCUMENT_ANNOTATIONS_H */
+
diff --git a/libdocument/ev-document-attachments.c b/libdocument/ev-document-attachments.c
new file mode 100644
index 00000000..bb3cb2ae
--- /dev/null
+++ b/libdocument/ev-document-attachments.c
@@ -0,0 +1,49 @@
+/* ev-document-attachments.c
+ * this file is part of evince, a mate document_links viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include "ev-document-attachments.h"
+#include "ev-document.h"
+
+G_DEFINE_INTERFACE (EvDocumentAttachments, ev_document_attachments, 0)
+
+static void
+ev_document_attachments_default_init (EvDocumentAttachmentsInterface *klass)
+{
+}
+
+gboolean
+ev_document_attachments_has_attachments (EvDocumentAttachments *document_attachments)
+{
+ EvDocumentAttachmentsInterface *iface = EV_DOCUMENT_ATTACHMENTS_GET_IFACE (document_attachments);
+
+ return iface->has_attachments (document_attachments);
+}
+
+GList *
+ev_document_attachments_get_attachments (EvDocumentAttachments *document_attachments)
+{
+ EvDocumentAttachmentsInterface *iface = EV_DOCUMENT_ATTACHMENTS_GET_IFACE (document_attachments);
+
+ return iface->get_attachments (document_attachments);
+}
+
+
diff --git a/libdocument/ev-document-attachments.h b/libdocument/ev-document-attachments.h
new file mode 100644
index 00000000..4b491495
--- /dev/null
+++ b/libdocument/ev-document-attachments.h
@@ -0,0 +1,59 @@
+/* ev-document-attachments.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_ATTACHMENTS_H
+#define EV_DOCUMENT_ATTACHMENTS_H
+
+#include <glib-object.h>
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_DOCUMENT_ATTACHMENTS (ev_document_attachments_get_type ())
+#define EV_DOCUMENT_ATTACHMENTS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT_ATTACHMENTS, EvDocumentAttachments))
+#define EV_DOCUMENT_ATTACHMENTS_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT_ATTACHMENTS, EvDocumentAttachmentsInterface))
+#define EV_IS_DOCUMENT_ATTACHMENTS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT_ATTACHMENTS))
+#define EV_IS_DOCUMENT_ATTACHMENTS_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT_ATTACHMENTS))
+#define EV_DOCUMENT_ATTACHMENTS_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT_ATTACHMENTS, EvDocumentAttachmentsInterface))
+
+typedef struct _EvDocumentAttachments EvDocumentAttachments;
+typedef struct _EvDocumentAttachmentsInterface EvDocumentAttachmentsInterface;
+
+struct _EvDocumentAttachmentsInterface
+{
+ GTypeInterface base_iface;
+
+ /* Methods */
+ gboolean (* has_attachments) (EvDocumentAttachments *document_attachments);
+ GList *(* get_attachments) (EvDocumentAttachments *document_attachments);
+};
+
+GType ev_document_attachments_get_type (void) G_GNUC_CONST;
+
+gboolean ev_document_attachments_has_attachments (EvDocumentAttachments *document_attachments);
+GList *ev_document_attachments_get_attachments (EvDocumentAttachments *document_attachments);
+
+G_END_DECLS
+
+#endif /* EV_DOCUMENT_ATTACHMENTS_H */
diff --git a/libdocument/ev-document-factory.c b/libdocument/ev-document-factory.c
new file mode 100644
index 00000000..0ace5ec8
--- /dev/null
+++ b/libdocument/ev-document-factory.c
@@ -0,0 +1,397 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2005, Red Hat, Inc.
+ *
+ * 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, 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.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <gio/gio.h>
+#include <glib/gstdio.h>
+#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
+
+#include "ev-backends-manager.h"
+#include "ev-document-factory.h"
+#include "ev-file-helpers.h"
+
+#ifdef ENABLE_PIXBUF
+static GList*
+gdk_pixbuf_mime_type_list ()
+{
+ GSList *formats, *list;
+ GList *result = NULL;
+
+ formats = gdk_pixbuf_get_formats ();
+ for (list = formats; list != NULL; list = list->next) {
+ GdkPixbufFormat *format = list->data;
+ gchar **mime_types;
+
+ if (gdk_pixbuf_format_is_disabled (format))
+ continue;
+
+ mime_types = gdk_pixbuf_format_get_mime_types (format);
+ result = g_list_prepend (result, mime_types);
+ }
+ g_slist_free (formats);
+
+ return result;
+}
+
+/* Would be nice to have this in gdk-pixbuf */
+static gboolean
+mime_type_supported_by_gdk_pixbuf (const gchar *mime_type)
+{
+ GList *mime_types;
+ GList *list;
+ gboolean retval = FALSE;
+
+ mime_types = gdk_pixbuf_mime_type_list ();
+ for (list = mime_types; list; list = list->next) {
+ gchar **mtypes = (gchar **)list->data;
+ const gchar *mtype;
+ gint i = 0;
+
+ while ((mtype = mtypes[i++])) {
+ if (strcmp (mtype, mime_type) == 0) {
+ retval = TRUE;
+ break;
+ }
+ }
+ }
+
+ g_list_foreach (mime_types, (GFunc)g_strfreev, NULL);
+ g_list_free (mime_types);
+
+ return retval;
+}
+#endif /* ENABLE_PIXBUF */
+
+static EvCompressionType
+get_compression_from_mime_type (const gchar *mime_type)
+{
+ gchar type[3];
+ gchar *p;
+
+ if (!(p = g_strrstr (mime_type, "/")))
+ return EV_COMPRESSION_NONE;
+
+ if (sscanf (++p, "x-%2s%*s", type) == 1) {
+ if (g_ascii_strcasecmp (type, "gz") == 0)
+ return EV_COMPRESSION_GZIP;
+ else if (g_ascii_strcasecmp (type, "bz") == 0)
+ return EV_COMPRESSION_BZIP2;
+ }
+
+ return EV_COMPRESSION_NONE;
+}
+
+
+/*
+ * get_document_from_uri:
+ * @uri: the document URI
+ * @fast: whether to use fast MIME type detection
+ * @compression: a location to store the document's compression type
+ * @error: a #GError location to store an error, or %NULL
+ *
+ * Creates a #EvDocument instance for the document at @uri, using either
+ * fast or slow MIME type detection. If a document could be created,
+ * @compression is filled in with the document's compression type.
+ * On error, %NULL is returned and @error filled in.
+ *
+ * Returns: a new #EvDocument instance, or %NULL on error with @error filled in
+ */
+static EvDocument *
+get_document_from_uri (const char *uri,
+ gboolean fast,
+ EvCompressionType *compression,
+ GError **error)
+{
+ EvDocument *document = NULL;
+ gchar *mime_type = NULL;
+ GError *err = NULL;
+
+ *compression = EV_COMPRESSION_NONE;
+
+ mime_type = ev_file_get_mime_type (uri, fast, &err);
+
+ if (mime_type == NULL) {
+ g_free (mime_type);
+
+ if (err == NULL) {
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("Unknown MIME Type"));
+ } else {
+ g_propagate_error (error, err);
+ }
+
+ return NULL;
+ }
+
+ document = ev_backends_manager_get_document (mime_type);
+
+#ifdef ENABLE_PIXBUF
+ if (!document && mime_type_supported_by_gdk_pixbuf (mime_type))
+ document = ev_backends_manager_get_document ("image/*");
+#endif /* ENABLE_PIXBUF */
+
+ if (document == NULL) {
+ gchar *content_type, *mime_desc = NULL;
+
+ content_type = g_content_type_from_mime_type (mime_type);
+ if (content_type)
+ mime_desc = g_content_type_get_description (content_type);
+
+ g_set_error (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("File type %s (%s) is not supported"),
+ mime_desc ? mime_desc : "-", mime_type);
+ g_free (mime_desc);
+ g_free (content_type);
+ g_free (mime_type);
+
+ return NULL;
+ }
+
+ *compression = get_compression_from_mime_type (mime_type);
+
+ g_free (mime_type);
+
+ return document;
+}
+
+static void
+free_uncompressed_uri (gchar *uri_unc)
+{
+ if (!uri_unc)
+ return;
+
+ ev_tmp_uri_unlink (uri_unc);
+ g_free (uri_unc);
+}
+
+/**
+ * ev_document_factory_get_document:
+ * @uri: an URI
+ * @error: a #GError location to store an error, or %NULL
+ *
+ * Creates a #EvDocument for the document at @uri; or, if no backend handling
+ * the document's type is found, or an error occurred on opening the document,
+ * returns %NULL and fills in @error.
+ * If the document is encrypted, it is returned but also @error is set to
+ * %EV_DOCUMENT_ERROR_ENCRYPTED.
+ *
+ * Returns: a new #EvDocument, or %NULL.
+ */
+EvDocument *
+ev_document_factory_get_document (const char *uri, GError **error)
+{
+ EvDocument *document;
+ int result;
+ EvCompressionType compression;
+ gchar *uri_unc = NULL;
+ GError *err = NULL;
+
+ g_return_val_if_fail (uri != NULL, NULL);
+
+ document = get_document_from_uri (uri, TRUE, &compression, &err);
+ g_assert (document != NULL || err != NULL);
+
+ if (document != NULL) {
+ uri_unc = ev_file_uncompress (uri, compression, &err);
+ if (uri_unc) {
+ g_object_set_data_full (G_OBJECT (document),
+ "uri-uncompressed",
+ uri_unc,
+ (GDestroyNotify) free_uncompressed_uri);
+ } else if (err != NULL) {
+ /* Error uncompressing file */
+ g_object_unref (document);
+ g_propagate_error (error, err);
+ return NULL;
+ }
+
+ result = ev_document_load (document, uri_unc ? uri_unc : uri, &err);
+
+ if (result == FALSE || err) {
+ if (err &&
+ g_error_matches (err, EV_DOCUMENT_ERROR, EV_DOCUMENT_ERROR_ENCRYPTED)) {
+ g_propagate_error (error, err);
+ return document;
+ }
+ /* else fall through to slow mime code section below */
+ } else {
+ return document;
+ }
+
+ g_object_unref (document);
+ document = NULL;
+ }
+
+ /* Try again with slow mime detection */
+ g_clear_error (&err);
+ uri_unc = NULL;
+
+ document = get_document_from_uri (uri, FALSE, &compression, &err);
+ if (document == NULL) {
+ g_assert (err != NULL);
+ g_propagate_error (error, err);
+ return NULL;
+ }
+
+ uri_unc = ev_file_uncompress (uri, compression, &err);
+ if (uri_unc) {
+ g_object_set_data_full (G_OBJECT (document),
+ "uri-uncompressed",
+ uri_unc,
+ (GDestroyNotify) free_uncompressed_uri);
+ } else if (err != NULL) {
+ /* Error uncompressing file */
+ g_propagate_error (error, err);
+
+ g_object_unref (document);
+ return NULL;
+ }
+
+ result = ev_document_load (document, uri_unc ? uri_unc : uri, &err);
+ if (result == FALSE) {
+ if (err == NULL) {
+ /* FIXME: this really should not happen; the backend should
+ * always return a meaningful error.
+ */
+ g_set_error_literal (&err,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ _("Unknown MIME Type"));
+ } else if (g_error_matches (err, EV_DOCUMENT_ERROR, EV_DOCUMENT_ERROR_ENCRYPTED)) {
+ g_propagate_error (error, err);
+ return document;
+ }
+
+ g_object_unref (document);
+ document = NULL;
+
+ g_propagate_error (error, err);
+ }
+
+ return document;
+}
+
+static void
+file_filter_add_mime_types (EvTypeInfo *info, GtkFileFilter *filter)
+{
+ const gchar *mime_type;
+ gint i = 0;
+
+#ifdef ENABLE_PIXBUF
+ if (g_ascii_strcasecmp (info->mime_types[0], "image/*") == 0) {
+ GList *pixbuf_types, *l;
+
+ pixbuf_types = gdk_pixbuf_mime_type_list ();
+ for (l = pixbuf_types; l; l = g_list_next (l)) {
+ gchar **mime_types = (gchar **)l->data;
+ gint j = 0;
+
+ while ((mime_type = mime_types[j++]))
+ gtk_file_filter_add_mime_type (filter, mime_type);
+
+ g_strfreev (mime_types);
+ }
+ g_list_free (pixbuf_types);
+
+ return;
+ }
+#endif /* ENABLE_PIXBUF */
+
+ while ((mime_type = info->mime_types[i++]))
+ gtk_file_filter_add_mime_type (filter, mime_type);
+}
+
+/**
+ * ev_document_factory_add_filters:
+ * @chooser: a #GtkFileChooser
+ * @document: a #EvDocument, or %NULL
+ *
+ * Adds some file filters to @chooser.
+
+ * Always add a "All documents" format.
+ *
+ * If @document is not %NULL, adds a #GtkFileFilter for @document's MIME type.
+ *
+ * If @document is %NULL, adds a #GtkFileFilter for each document type that evince
+ * can handle.
+ */
+void
+ev_document_factory_add_filters (GtkWidget *chooser, EvDocument *document)
+{
+ GList *all_types;
+ GtkFileFilter *filter;
+ GtkFileFilter *default_filter;
+ GtkFileFilter *document_filter;
+
+ g_return_if_fail (GTK_IS_FILE_CHOOSER (chooser));
+ g_return_if_fail (document == NULL || EV_IS_DOCUMENT (document));
+
+ all_types = ev_backends_manager_get_all_types_info ();
+
+ default_filter = document_filter = filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, _("All Documents"));
+ g_list_foreach (all_types, (GFunc)file_filter_add_mime_types, filter);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+ if (document) {
+ EvTypeInfo *info;
+
+ info = ev_backends_manager_get_document_type_info (document);
+ default_filter = filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, info->desc);
+ file_filter_add_mime_types (info, filter);
+ g_free (info);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+ } else {
+ GList *l;
+
+ for (l = all_types; l; l = g_list_next (l)){
+ EvTypeInfo *info;
+
+ info = (EvTypeInfo *)l->data;
+
+ default_filter = filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, info->desc);
+ file_filter_add_mime_types (info, filter);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+ }
+ }
+
+ g_list_foreach (all_types, (GFunc)g_free, NULL);
+ g_list_free (all_types);
+
+ filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, _("All Files"));
+ gtk_file_filter_add_pattern (filter, "*");
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (chooser), filter);
+
+ gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (chooser),
+ document == NULL ? document_filter : default_filter);
+}
diff --git a/libdocument/ev-document-factory.h b/libdocument/ev-document-factory.h
new file mode 100644
index 00000000..501eb2f3
--- /dev/null
+++ b/libdocument/ev-document-factory.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2005, Red Hat, Inc.
+ *
+ * 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, 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.
+ *
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_FACTORY_H
+#define EV_DOCUMENT_FACTORY_H
+
+#include <gtk/gtk.h>
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+EvDocument* ev_document_factory_get_document (const char *uri, GError **error);
+void ev_document_factory_add_filters (GtkWidget *chooser, EvDocument *document);
+
+G_END_DECLS
+
+#endif
diff --git a/libdocument/ev-document-find.c b/libdocument/ev-document-find.c
new file mode 100644
index 00000000..0b5fac01
--- /dev/null
+++ b/libdocument/ev-document-find.c
@@ -0,0 +1,42 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * 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, 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 "config.h"
+
+#include "ev-document-find.h"
+
+G_DEFINE_INTERFACE (EvDocumentFind, ev_document_find, 0)
+
+static void
+ev_document_find_default_init (EvDocumentFindInterface *klass)
+{
+}
+
+GList *
+ev_document_find_find_text (EvDocumentFind *document_find,
+ EvPage *page,
+ const gchar *text,
+ gboolean case_sensitive)
+{
+ EvDocumentFindInterface *iface = EV_DOCUMENT_FIND_GET_IFACE (document_find);
+
+ return iface->find_text (document_find, page, text, case_sensitive);
+}
+
diff --git a/libdocument/ev-document-find.h b/libdocument/ev-document-find.h
new file mode 100644
index 00000000..dcc3438e
--- /dev/null
+++ b/libdocument/ev-document-find.h
@@ -0,0 +1,65 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_FIND_H
+#define EV_DOCUMENT_FIND_H
+
+#include <glib-object.h>
+#include <glib.h>
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_DOCUMENT_FIND (ev_document_find_get_type ())
+#define EV_DOCUMENT_FIND(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT_FIND, EvDocumentFind))
+#define EV_DOCUMENT_FIND_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT_FIND, EvDocumentFindInterface))
+#define EV_IS_DOCUMENT_FIND(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT_FIND))
+#define EV_IS_DOCUMENT_FIND_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT_FIND))
+#define EV_DOCUMENT_FIND_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT_FIND, EvDocumentFindInterface))
+
+typedef struct _EvDocumentFind EvDocumentFind;
+typedef struct _EvDocumentFindInterface EvDocumentFindInterface;
+
+struct _EvDocumentFindInterface
+{
+ GTypeInterface base_iface;
+
+ /* Methods */
+ GList *(* find_text) (EvDocumentFind *document_find,
+ EvPage *page,
+ const gchar *text,
+ gboolean case_sensitive);
+};
+
+GType ev_document_find_get_type (void) G_GNUC_CONST;
+GList *ev_document_find_find_text (EvDocumentFind *document_find,
+ EvPage *page,
+ const gchar *text,
+ gboolean case_sensitive);
+
+G_END_DECLS
+
+#endif /* EV_DOCUMENT_FIND_H */
diff --git a/libdocument/ev-document-fonts.c b/libdocument/ev-document-fonts.c
new file mode 100644
index 00000000..ca019055
--- /dev/null
+++ b/libdocument/ev-document-fonts.c
@@ -0,0 +1,59 @@
+/* ev-document-fonts.h
+ * this file is part of evince, a mate document_fonts viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * Author:
+ * Marco Pesenti Gritti <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include "ev-document-fonts.h"
+
+G_DEFINE_INTERFACE (EvDocumentFonts, ev_document_fonts, 0)
+
+static void
+ev_document_fonts_default_init (EvDocumentFontsInterface *klass)
+{
+}
+
+double
+ev_document_fonts_get_progress (EvDocumentFonts *document_fonts)
+{
+ EvDocumentFontsInterface *iface = EV_DOCUMENT_FONTS_GET_IFACE (document_fonts);
+
+ return iface->get_progress (document_fonts);
+}
+
+gboolean
+ev_document_fonts_scan (EvDocumentFonts *document_fonts,
+ int n_pages)
+{
+ EvDocumentFontsInterface *iface = EV_DOCUMENT_FONTS_GET_IFACE (document_fonts);
+
+ return iface->scan (document_fonts, n_pages);
+}
+
+void
+ev_document_fonts_fill_model (EvDocumentFonts *document_fonts,
+ GtkTreeModel *model)
+{
+ EvDocumentFontsInterface *iface = EV_DOCUMENT_FONTS_GET_IFACE (document_fonts);
+
+ iface->fill_model (document_fonts, model);
+}
diff --git a/libdocument/ev-document-fonts.h b/libdocument/ev-document-fonts.h
new file mode 100644
index 00000000..81401c00
--- /dev/null
+++ b/libdocument/ev-document-fonts.h
@@ -0,0 +1,78 @@
+/* ev-document-fonts.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * Author:
+ * Marco Pesenti Gritti <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_FONTS_H
+#define EV_DOCUMENT_FONTS_H
+
+#include <glib-object.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include "ev-document.h"
+#include "ev-link.h"
+
+G_BEGIN_DECLS
+
+
+#define EV_TYPE_DOCUMENT_FONTS (ev_document_fonts_get_type ())
+#define EV_DOCUMENT_FONTS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT_FONTS, EvDocumentFonts))
+#define EV_DOCUMENT_FONTS_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT_FONTS, EvDocumentFontsInterface))
+#define EV_IS_DOCUMENT_FONTS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT_FONTS))
+#define EV_IS_DOCUMENT_FONTS_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT_FONTS))
+#define EV_DOCUMENT_FONTS_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT_FONTS, EvDocumentFontsInterface))
+
+typedef struct _EvDocumentFonts EvDocumentFonts;
+typedef struct _EvDocumentFontsInterface EvDocumentFontsInterface;
+
+enum {
+ EV_DOCUMENT_FONTS_COLUMN_NAME,
+ EV_DOCUMENT_FONTS_COLUMN_DETAILS,
+ EV_DOCUMENT_FONTS_COLUMN_NUM_COLUMNS
+};
+
+struct _EvDocumentFontsInterface
+{
+ GTypeInterface base_iface;
+
+ /* Methods */
+ gboolean (* scan) (EvDocumentFonts *document_fonts,
+ int n_pages);
+ double (* get_progress) (EvDocumentFonts *document_fonts);
+ void (* fill_model) (EvDocumentFonts *document_fonts,
+ GtkTreeModel *model);
+};
+
+GType ev_document_fonts_get_type (void);
+gboolean ev_document_fonts_scan (EvDocumentFonts *document_fonts,
+ int n_pages);
+double ev_document_fonts_get_progress (EvDocumentFonts *document_fonts);
+void ev_document_fonts_fill_model (EvDocumentFonts *document_fonts,
+ GtkTreeModel *model);
+
+G_END_DECLS
+
+#endif
diff --git a/libdocument/ev-document-forms.c b/libdocument/ev-document-forms.c
new file mode 100644
index 00000000..809cefb1
--- /dev/null
+++ b/libdocument/ev-document-forms.c
@@ -0,0 +1,161 @@
+/* ev-document-forms.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+#include "ev-document-forms.h"
+
+G_DEFINE_INTERFACE (EvDocumentForms, ev_document_forms, 0)
+
+static void
+ev_document_forms_default_init (EvDocumentFormsInterface *klass)
+{
+}
+
+EvMappingList *
+ev_document_forms_get_form_fields (EvDocumentForms *document_forms,
+ EvPage *page)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ return iface->get_form_fields (document_forms, page);
+}
+
+gboolean
+ev_document_forms_document_is_modified (EvDocumentForms *document_forms)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ return (iface->document_is_modified) ? iface->document_is_modified (document_forms) : FALSE;
+}
+
+gchar *
+ev_document_forms_form_field_text_get_text (EvDocumentForms *document_forms,
+ EvFormField *field)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ return iface->form_field_text_get_text (document_forms, field);
+}
+
+void
+ev_document_forms_form_field_text_set_text (EvDocumentForms *document_forms,
+ EvFormField *field,
+ const gchar *text)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ iface->form_field_text_set_text (document_forms, field, text);
+}
+
+gboolean
+ev_document_forms_form_field_button_get_state (EvDocumentForms *document_forms,
+ EvFormField *field)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ return iface->form_field_button_get_state (document_forms, field);
+}
+
+void
+ev_document_forms_form_field_button_set_state (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gboolean state)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ iface->form_field_button_set_state (document_forms, field, state);
+}
+
+gchar *
+ev_document_forms_form_field_choice_get_item (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gint index)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ return iface->form_field_choice_get_item (document_forms, field, index);
+}
+
+gint
+ev_document_forms_form_field_choice_get_n_items (EvDocumentForms *document_forms,
+ EvFormField *field)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ return iface->form_field_choice_get_n_items (document_forms, field);
+}
+
+gboolean
+ev_document_forms_form_field_choice_is_item_selected (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gint index)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ return iface->form_field_choice_is_item_selected (document_forms, field, index);
+}
+
+void
+ev_document_forms_form_field_choice_select_item (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gint index)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ iface->form_field_choice_select_item (document_forms, field, index);
+}
+
+void
+ev_document_forms_form_field_choice_toggle_item (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gint index)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ iface->form_field_choice_toggle_item (document_forms, field, index);
+}
+
+void
+ev_document_forms_form_field_choice_unselect_all (EvDocumentForms *document_forms,
+ EvFormField *field)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ iface->form_field_choice_unselect_all (document_forms, field);
+}
+
+void
+ev_document_forms_form_field_choice_set_text (EvDocumentForms *document_forms,
+ EvFormField *field,
+ const gchar *text)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ iface->form_field_choice_set_text (document_forms, field, text);
+}
+
+gchar *
+ev_document_forms_form_field_choice_get_text (EvDocumentForms *document_forms,
+ EvFormField *field)
+{
+ EvDocumentFormsInterface *iface = EV_DOCUMENT_FORMS_GET_IFACE (document_forms);
+
+ return iface->form_field_choice_get_text (document_forms, field);
+}
diff --git a/libdocument/ev-document-forms.h b/libdocument/ev-document-forms.h
new file mode 100644
index 00000000..c47ff3f4
--- /dev/null
+++ b/libdocument/ev-document-forms.h
@@ -0,0 +1,128 @@
+/* ev-document-forms.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_FORMS_H
+#define EV_DOCUMENT_FORMS_H
+
+#include <glib-object.h>
+
+#include "ev-document.h"
+#include "ev-form-field.h"
+#include "ev-mapping-list.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_DOCUMENT_FORMS (ev_document_forms_get_type ())
+#define EV_DOCUMENT_FORMS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT_FORMS, EvDocumentForms))
+#define EV_DOCUMENT_FORMS_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT_FORMS, EvDocumentFormsInterface))
+#define EV_IS_DOCUMENT_FORMS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT_FORMS))
+#define EV_IS_DOCUMENT_FORMS_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT_FORMS))
+#define EV_DOCUMENT_FORMS_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT_FORMS, EvDocumentFormsInterface))
+
+typedef struct _EvDocumentForms EvDocumentForms;
+typedef struct _EvDocumentFormsInterface EvDocumentFormsInterface;
+
+struct _EvDocumentFormsInterface
+{
+ GTypeInterface base_iface;
+
+ /* Methods */
+ EvMappingList *(* get_form_fields) (EvDocumentForms *document_forms,
+ EvPage *page);
+ gboolean (* document_is_modified) (EvDocumentForms *document_forms);
+ gchar *(* form_field_text_get_text) (EvDocumentForms *document_forms,
+ EvFormField *field);
+ void (* form_field_text_set_text) (EvDocumentForms *document_forms,
+ EvFormField *field,
+ const gchar *text);
+ gboolean (* form_field_button_get_state) (EvDocumentForms *document_forms,
+ EvFormField *field);
+ void (* form_field_button_set_state) (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gboolean state);
+ gchar *(* form_field_choice_get_item) (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gint index);
+ gint (* form_field_choice_get_n_items) (EvDocumentForms *document_forms,
+ EvFormField *field);
+ gboolean (* form_field_choice_is_item_selected) (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gint index);
+ void (* form_field_choice_select_item) (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gint index);
+ void (* form_field_choice_toggle_item) (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gint index);
+ void (* form_field_choice_unselect_all) (EvDocumentForms *document_forms,
+ EvFormField *field);
+ void (* form_field_choice_set_text) (EvDocumentForms *document_forms,
+ EvFormField *field,
+ const gchar *text);
+ gchar *(* form_field_choice_get_text) (EvDocumentForms *document_forms,
+ EvFormField *field);
+};
+
+GType ev_document_forms_get_type (void) G_GNUC_CONST;
+EvMappingList *ev_document_forms_get_form_fields (EvDocumentForms *document_forms,
+ EvPage *page);
+gboolean ev_document_forms_document_is_modified (EvDocumentForms *document_forms);
+
+gchar *ev_document_forms_form_field_text_get_text (EvDocumentForms *document_forms,
+ EvFormField *field);
+void ev_document_forms_form_field_text_set_text (EvDocumentForms *document_forms,
+ EvFormField *field,
+ const gchar *text);
+
+gboolean ev_document_forms_form_field_button_get_state (EvDocumentForms *document_forms,
+ EvFormField *field);
+void ev_document_forms_form_field_button_set_state (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gboolean state);
+
+gchar *ev_document_forms_form_field_choice_get_item (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gint index);
+gint ev_document_forms_form_field_choice_get_n_items (EvDocumentForms *document_forms,
+ EvFormField *field);
+gboolean ev_document_forms_form_field_choice_is_item_selected (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gint index);
+void ev_document_forms_form_field_choice_select_item (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gint index);
+void ev_document_forms_form_field_choice_toggle_item (EvDocumentForms *document_forms,
+ EvFormField *field,
+ gint index);
+void ev_document_forms_form_field_choice_unselect_all (EvDocumentForms *document_forms,
+ EvFormField *field);
+void ev_document_forms_form_field_choice_set_text (EvDocumentForms *document_forms,
+ EvFormField *field,
+ const gchar *text);
+gchar *ev_document_forms_form_field_choice_get_text (EvDocumentForms *document_forms,
+ EvFormField *field);
+
+G_END_DECLS
+
+#endif /* EV_DOCUMENT_FORMS_H */
diff --git a/libdocument/ev-document-images.c b/libdocument/ev-document-images.c
new file mode 100644
index 00000000..09bf5dae
--- /dev/null
+++ b/libdocument/ev-document-images.c
@@ -0,0 +1,47 @@
+/* ev-document-images.c
+ * this file is part of evince, a mate document_links viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+#include "ev-document-images.h"
+
+G_DEFINE_INTERFACE (EvDocumentImages, ev_document_images, 0)
+
+static void
+ev_document_images_default_init (EvDocumentImagesInterface *klass)
+{
+}
+
+EvMappingList *
+ev_document_images_get_image_mapping (EvDocumentImages *document_images,
+ EvPage *page)
+{
+ EvDocumentImagesInterface *iface = EV_DOCUMENT_IMAGES_GET_IFACE (document_images);
+
+ return iface->get_image_mapping (document_images, page);
+}
+
+GdkPixbuf *
+ev_document_images_get_image (EvDocumentImages *document_images,
+ EvImage *image)
+{
+ EvDocumentImagesInterface *iface = EV_DOCUMENT_IMAGES_GET_IFACE (document_images);
+
+ return iface->get_image (document_images, image);
+}
diff --git a/libdocument/ev-document-images.h b/libdocument/ev-document-images.h
new file mode 100644
index 00000000..18fac92a
--- /dev/null
+++ b/libdocument/ev-document-images.h
@@ -0,0 +1,65 @@
+/* ev-document-images.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_IMAGES_H
+#define EV_DOCUMENT_IMAGES_H
+
+#include <glib-object.h>
+#include <glib.h>
+
+#include "ev-document.h"
+#include "ev-image.h"
+#include "ev-mapping-list.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_DOCUMENT_IMAGES (ev_document_images_get_type ())
+#define EV_DOCUMENT_IMAGES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT_IMAGES, EvDocumentImages))
+#define EV_DOCUMENT_IMAGES_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT_IMAGES, EvDocumentImagesInterface))
+#define EV_IS_DOCUMENT_IMAGES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT_IMAGES))
+#define EV_IS_DOCUMENT_IMAGES_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT_IMAGES))
+#define EV_DOCUMENT_IMAGES_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT_IMAGES, EvDocumentImagesInterface))
+
+typedef struct _EvDocumentImages EvDocumentImages;
+typedef struct _EvDocumentImagesInterface EvDocumentImagesInterface;
+
+struct _EvDocumentImagesInterface {
+ GTypeInterface base_iface;
+
+ /* Methods */
+ EvMappingList *(* get_image_mapping) (EvDocumentImages *document_images,
+ EvPage *page);
+ GdkPixbuf *(* get_image) (EvDocumentImages *document_images,
+ EvImage *image);
+};
+
+GType ev_document_images_get_type (void) G_GNUC_CONST;
+EvMappingList *ev_document_images_get_image_mapping (EvDocumentImages *document_images,
+ EvPage *page);
+GdkPixbuf *ev_document_images_get_image (EvDocumentImages *document_images,
+ EvImage *image);
+
+G_END_DECLS
+
+#endif /* EV_DOCUMENT_IMAGES_H */
diff --git a/libdocument/ev-document-info.h b/libdocument/ev-document-info.h
new file mode 100644
index 00000000..0f55d212
--- /dev/null
+++ b/libdocument/ev-document-info.h
@@ -0,0 +1,154 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2000-2003 Marco Pesenti Gritti
+ *
+ * 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, 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.
+ *
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_INFO_H
+#define EV_DOCUMENT_INFO_H
+
+#include <glib-object.h>
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvDocumentInfo EvDocumentInfo;
+typedef struct _EvDocumentLicense EvDocumentLicense;
+
+#define EV_TYPE_DOCUMENT_INFO (ev_document_info_get_type())
+
+typedef enum
+{
+ EV_DOCUMENT_LAYOUT_SINGLE_PAGE,
+ EV_DOCUMENT_LAYOUT_ONE_COLUMN,
+ EV_DOCUMENT_LAYOUT_TWO_COLUMN_LEFT,
+ EV_DOCUMENT_LAYOUT_TWO_COLUMN_RIGHT,
+ EV_DOCUMENT_LAYOUT_TWO_PAGE_LEFT,
+ EV_DOCUMENT_LAYOUT_TWO_PAGE_RIGHT
+} EvDocumentLayout;
+
+typedef enum
+{
+ EV_DOCUMENT_MODE_NONE,
+ EV_DOCUMENT_MODE_USE_OC,
+ EV_DOCUMENT_MODE_USE_THUMBS,
+ EV_DOCUMENT_MODE_FULL_SCREEN,
+ EV_DOCUMENT_MODE_USE_ATTACHMENTS,
+ EV_DOCUMENT_MODE_PRESENTATION = EV_DOCUMENT_MODE_FULL_SCREEN /* Will these be different? */
+} EvDocumentMode;
+
+typedef enum
+{
+ EV_DOCUMENT_UI_HINT_HIDE_TOOLBAR = 1 << 0,
+ EV_DOCUMENT_UI_HINT_HIDE_MENUBAR = 1 << 1,
+ EV_DOCUMENT_UI_HINT_HIDE_WINDOWUI = 1 << 2,
+ EV_DOCUMENT_UI_HINT_FIT_WINDOW = 1 << 3,
+ EV_DOCUMENT_UI_HINT_CENTER_WINDOW = 1 << 4,
+ EV_DOCUMENT_UI_HINT_DISPLAY_DOC_TITLE = 1 << 5,
+ EV_DOCUMENT_UI_HINT_DIRECTION_RTL = 1 << 6
+} EvDocumentUIHints;
+
+/* This define is needed because glib-mkenums chokes with multiple lines */
+#define PERMISSIONS_FULL (EV_DOCUMENT_PERMISSIONS_OK_TO_PRINT \
+ | EV_DOCUMENT_PERMISSIONS_OK_TO_MODIFY \
+ | EV_DOCUMENT_PERMISSIONS_OK_TO_COPY \
+ | EV_DOCUMENT_PERMISSIONS_OK_TO_ADD_NOTES)
+
+typedef enum
+{
+ EV_DOCUMENT_PERMISSIONS_OK_TO_PRINT = 1 << 0,
+ EV_DOCUMENT_PERMISSIONS_OK_TO_MODIFY = 1 << 1,
+ EV_DOCUMENT_PERMISSIONS_OK_TO_COPY = 1 << 2,
+ EV_DOCUMENT_PERMISSIONS_OK_TO_ADD_NOTES = 1 << 3,
+ EV_DOCUMENT_PERMISSIONS_FULL = PERMISSIONS_FULL
+} EvDocumentPermissions;
+
+typedef enum
+{
+ EV_DOCUMENT_INFO_TITLE = 1 << 0,
+ EV_DOCUMENT_INFO_FORMAT = 1 << 1,
+ EV_DOCUMENT_INFO_AUTHOR = 1 << 2,
+ EV_DOCUMENT_INFO_SUBJECT = 1 << 3,
+ EV_DOCUMENT_INFO_KEYWORDS = 1 << 4,
+ EV_DOCUMENT_INFO_LAYOUT = 1 << 5,
+ EV_DOCUMENT_INFO_CREATOR = 1 << 6,
+ EV_DOCUMENT_INFO_PRODUCER = 1 << 7,
+ EV_DOCUMENT_INFO_CREATION_DATE = 1 << 8,
+ EV_DOCUMENT_INFO_MOD_DATE = 1 << 9,
+ EV_DOCUMENT_INFO_LINEARIZED = 1 << 10,
+ EV_DOCUMENT_INFO_START_MODE = 1 << 11,
+ EV_DOCUMENT_INFO_UI_HINTS = 1 << 12,
+ EV_DOCUMENT_INFO_PERMISSIONS = 1 << 13,
+ EV_DOCUMENT_INFO_N_PAGES = 1 << 14,
+ EV_DOCUMENT_INFO_SECURITY = 1 << 15,
+ EV_DOCUMENT_INFO_PAPER_SIZE = 1 << 16,
+ EV_DOCUMENT_INFO_LICENSE = 1 << 17,
+
+} EvDocumentInfoFields;
+
+struct _EvDocumentInfo
+{
+ char *title;
+ char *format; /* eg, "pdf-1.5" */
+ char *author;
+ char *subject;
+ char *keywords;
+ char *creator;
+ char *producer;
+ char *linearized;
+ char *security;
+ GTime creation_date;
+ GTime modified_date;
+ EvDocumentLayout layout;
+ EvDocumentMode mode;
+ guint ui_hints;
+ guint permissions;
+ int n_pages;
+ double paper_height;
+ double paper_width;
+ EvDocumentLicense *license;
+
+ /* Mask of all the valid fields */
+ guint fields_mask;
+};
+
+GType ev_document_info_get_type (void) G_GNUC_CONST;
+EvDocumentInfo *ev_document_info_copy (EvDocumentInfo *info);
+void ev_document_info_free (EvDocumentInfo *info);
+
+/* EvDocumentLicense */
+#define EV_TYPE_DOCUMENT_LICENSE (ev_document_license_get_type())
+struct _EvDocumentLicense {
+ gchar *text;
+ gchar *uri;
+ gchar *web_statement;
+};
+GType ev_document_license_get_type (void) G_GNUC_CONST;
+EvDocumentLicense *ev_document_license_new (void);
+EvDocumentLicense *ev_document_license_copy (EvDocumentLicense *license);
+void ev_document_license_free (EvDocumentLicense *license);
+const gchar *ev_document_license_get_text (EvDocumentLicense *license);
+const gchar *ev_document_license_get_uri (EvDocumentLicense *license);
+const gchar *ev_document_license_get_web_statement (EvDocumentLicense *license);
+
+G_END_DECLS
+
+#endif /* EV_DOCUMENT_INFO_H */
diff --git a/libdocument/ev-document-layers.c b/libdocument/ev-document-layers.c
new file mode 100644
index 00000000..17684881
--- /dev/null
+++ b/libdocument/ev-document-layers.c
@@ -0,0 +1,74 @@
+/* ev-document-layers.c
+ * this file is part of evince, a mate document_links viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include "ev-document-layers.h"
+#include "ev-document.h"
+
+G_DEFINE_INTERFACE (EvDocumentLayers, ev_document_layers, 0)
+
+static void
+ev_document_layers_default_init (EvDocumentLayersInterface *klass)
+{
+}
+
+gboolean
+ev_document_layers_has_layers (EvDocumentLayers *document_layers)
+{
+ EvDocumentLayersInterface *iface = EV_DOCUMENT_LAYERS_GET_IFACE (document_layers);
+
+ return iface->has_layers (document_layers);
+}
+
+GtkTreeModel *
+ev_document_layers_get_layers (EvDocumentLayers *document_layers)
+{
+ EvDocumentLayersInterface *iface = EV_DOCUMENT_LAYERS_GET_IFACE (document_layers);
+
+ return iface->get_layers (document_layers);
+}
+
+void
+ev_document_layers_show_layer (EvDocumentLayers *document_layers,
+ EvLayer *layer)
+{
+ EvDocumentLayersInterface *iface = EV_DOCUMENT_LAYERS_GET_IFACE (document_layers);
+
+ iface->show_layer (document_layers, layer);
+}
+
+void
+ev_document_layers_hide_layer (EvDocumentLayers *document_layers,
+ EvLayer *layer)
+{
+ EvDocumentLayersInterface *iface = EV_DOCUMENT_LAYERS_GET_IFACE (document_layers);
+
+ iface->hide_layer (document_layers, layer);
+}
+
+gboolean
+ev_document_layers_layer_is_visible (EvDocumentLayers *document_layers,
+ EvLayer *layer)
+{
+ EvDocumentLayersInterface *iface = EV_DOCUMENT_LAYERS_GET_IFACE (document_layers);
+
+ return iface->layer_is_visible (document_layers, layer);
+}
diff --git a/libdocument/ev-document-layers.h b/libdocument/ev-document-layers.h
new file mode 100644
index 00000000..395a6130
--- /dev/null
+++ b/libdocument/ev-document-layers.h
@@ -0,0 +1,85 @@
+/* ev-document-layers.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_LAYERS_H
+#define EV_DOCUMENT_LAYERS_H
+
+#include <glib-object.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include "ev-layer.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_DOCUMENT_LAYERS (ev_document_layers_get_type ())
+#define EV_DOCUMENT_LAYERS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT_LAYERS, EvDocumentLayers))
+#define EV_DOCUMENT_LAYERS_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT_LAYERS, EvDocumentLayersInterface))
+#define EV_IS_DOCUMENT_LAYERS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT_LAYERS))
+#define EV_IS_DOCUMENT_LAYERS_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT_LAYERS))
+#define EV_DOCUMENT_LAYERS_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT_LAYERS, EvDocumentLayersInterface))
+
+typedef struct _EvDocumentLayers EvDocumentLayers;
+typedef struct _EvDocumentLayersInterface EvDocumentLayersInterface;
+
+enum {
+ EV_DOCUMENT_LAYERS_COLUMN_TITLE,
+ EV_DOCUMENT_LAYERS_COLUMN_LAYER,
+ EV_DOCUMENT_LAYERS_COLUMN_VISIBLE,
+ EV_DOCUMENT_LAYERS_COLUMN_ENABLED,
+ EV_DOCUMENT_LAYERS_COLUMN_SHOWTOGGLE,
+ EV_DOCUMENT_LAYERS_COLUMN_RBGROUP,
+ EV_DOCUMENT_LAYERS_N_COLUMNS
+};
+
+struct _EvDocumentLayersInterface
+{
+ GTypeInterface base_iface;
+
+ /* Methods */
+ gboolean (* has_layers) (EvDocumentLayers *document_layers);
+ GtkTreeModel *(* get_layers) (EvDocumentLayers *document_layers);
+
+ void (* show_layer) (EvDocumentLayers *document_layers,
+ EvLayer *layer);
+ void (* hide_layer) (EvDocumentLayers *document_layers,
+ EvLayer *layer);
+ gboolean (* layer_is_visible) (EvDocumentLayers *document_layers,
+ EvLayer *layer);
+};
+
+GType ev_document_layers_get_type (void) G_GNUC_CONST;
+
+gboolean ev_document_layers_has_layers (EvDocumentLayers *document_layers);
+GtkTreeModel *ev_document_layers_get_layers (EvDocumentLayers *document_layers);
+void ev_document_layers_show_layer (EvDocumentLayers *document_layers,
+ EvLayer *layer);
+void ev_document_layers_hide_layer (EvDocumentLayers *document_layers,
+ EvLayer *layer);
+gboolean ev_document_layers_layer_is_visible (EvDocumentLayers *document_layers,
+ EvLayer *layer);
+
+G_END_DECLS
+
+#endif /* EV_DOCUMENT_LAYERS_H */
diff --git a/libdocument/ev-document-links.c b/libdocument/ev-document-links.c
new file mode 100644
index 00000000..19a2b7e1
--- /dev/null
+++ b/libdocument/ev-document-links.c
@@ -0,0 +1,129 @@
+/* ev-document-links.h
+ * this file is part of evince, a mate document_links viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * Author:
+ * Jonathan Blandford <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include "ev-document-links.h"
+
+G_DEFINE_INTERFACE (EvDocumentLinks, ev_document_links, 0)
+
+static void
+ev_document_links_default_init (EvDocumentLinksInterface *klass)
+{
+}
+
+gboolean
+ev_document_links_has_document_links (EvDocumentLinks *document_links)
+{
+ EvDocumentLinksInterface *iface = EV_DOCUMENT_LINKS_GET_IFACE (document_links);
+ gboolean retval;
+
+ retval = iface->has_document_links (document_links);
+
+ return retval;
+}
+
+GtkTreeModel *
+ev_document_links_get_links_model (EvDocumentLinks *document_links)
+{
+ EvDocumentLinksInterface *iface = EV_DOCUMENT_LINKS_GET_IFACE (document_links);
+ GtkTreeModel *retval;
+
+ retval = iface->get_links_model (document_links);
+
+ return retval;
+}
+
+EvMappingList *
+ev_document_links_get_links (EvDocumentLinks *document_links,
+ EvPage *page)
+{
+ EvDocumentLinksInterface *iface = EV_DOCUMENT_LINKS_GET_IFACE (document_links);
+
+ return iface->get_links (document_links, page);
+}
+
+EvLinkDest *
+ev_document_links_find_link_dest (EvDocumentLinks *document_links,
+ const gchar *link_name)
+{
+ EvDocumentLinksInterface *iface = EV_DOCUMENT_LINKS_GET_IFACE (document_links);
+ EvLinkDest *retval;
+
+ ev_document_doc_mutex_lock ();
+ retval = iface->find_link_dest (document_links, link_name);
+ ev_document_doc_mutex_unlock ();
+
+ return retval;
+}
+
+/* Helper functions */
+gint
+ev_document_links_get_dest_page (EvDocumentLinks *document_links,
+ EvLinkDest *dest)
+{
+ gint page = -1;
+
+ switch (ev_link_dest_get_dest_type (dest)) {
+ case EV_LINK_DEST_TYPE_NAMED: {
+ EvLinkDest *dest2;
+
+ dest2 = ev_document_links_find_link_dest (document_links,
+ ev_link_dest_get_named_dest (dest));
+ if (dest2) {
+ page = ev_link_dest_get_page (dest2);
+ g_object_unref (dest2);
+ }
+ }
+ break;
+ case EV_LINK_DEST_TYPE_PAGE_LABEL:
+ ev_document_find_page_by_label (EV_DOCUMENT (document_links),
+ ev_link_dest_get_page_label (dest),
+ &page);
+ break;
+ default:
+ page = ev_link_dest_get_page (dest);
+ }
+
+ return page;
+}
+
+gchar *
+ev_document_links_get_dest_page_label (EvDocumentLinks *document_links,
+ EvLinkDest *dest)
+{
+ gchar *label = NULL;
+
+ if (ev_link_dest_get_dest_type (dest) == EV_LINK_DEST_TYPE_PAGE_LABEL) {
+ label = g_strdup (ev_link_dest_get_page_label (dest));
+ } else {
+ gint page;
+
+ page = ev_document_links_get_dest_page (document_links, dest);
+ if (page != -1)
+ label = ev_document_get_page_label (EV_DOCUMENT (document_links),
+ page);
+ }
+
+ return label;
+}
diff --git a/libdocument/ev-document-links.h b/libdocument/ev-document-links.h
new file mode 100644
index 00000000..3e28bfd6
--- /dev/null
+++ b/libdocument/ev-document-links.h
@@ -0,0 +1,87 @@
+/* ev-document-links.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * Author:
+ * Jonathan Blandford <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_LINKS_H
+#define EV_DOCUMENT_LINKS_H
+
+#include <glib-object.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include "ev-document.h"
+#include "ev-link.h"
+#include "ev-mapping-list.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_DOCUMENT_LINKS (ev_document_links_get_type ())
+#define EV_DOCUMENT_LINKS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT_LINKS, EvDocumentLinks))
+#define EV_DOCUMENT_LINKS_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT_LINKS, EvDocumentLinksInterface))
+#define EV_IS_DOCUMENT_LINKS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT_LINKS))
+#define EV_IS_DOCUMENT_LINKS_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT_LINKS))
+#define EV_DOCUMENT_LINKS_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT_LINKS, EvDocumentLinksInterface))
+
+typedef struct _EvDocumentLinks EvDocumentLinks;
+typedef struct _EvDocumentLinksInterface EvDocumentLinksInterface;
+
+enum {
+ EV_DOCUMENT_LINKS_COLUMN_MARKUP,
+ EV_DOCUMENT_LINKS_COLUMN_LINK,
+ EV_DOCUMENT_LINKS_COLUMN_EXPAND,
+ EV_DOCUMENT_LINKS_COLUMN_PAGE_LABEL,
+ EV_DOCUMENT_LINKS_COLUMN_NUM_COLUMNS
+};
+
+struct _EvDocumentLinksInterface
+{
+ GTypeInterface base_iface;
+
+ /* Methods */
+ gboolean (* has_document_links) (EvDocumentLinks *document_links);
+ GtkTreeModel *(* get_links_model) (EvDocumentLinks *document_links);
+ EvMappingList *(* get_links) (EvDocumentLinks *document_links,
+ EvPage *page);
+ EvLinkDest *(* find_link_dest) (EvDocumentLinks *document_links,
+ const gchar *link_name);
+};
+
+GType ev_document_links_get_type (void) G_GNUC_CONST;
+gboolean ev_document_links_has_document_links (EvDocumentLinks *document_links);
+GtkTreeModel *ev_document_links_get_links_model (EvDocumentLinks *document_links);
+
+EvMappingList *ev_document_links_get_links (EvDocumentLinks *document_links,
+ EvPage *page);
+EvLinkDest *ev_document_links_find_link_dest (EvDocumentLinks *document_links,
+ const gchar *link_name);
+gint ev_document_links_get_dest_page (EvDocumentLinks *document_links,
+ EvLinkDest *dest);
+gchar *ev_document_links_get_dest_page_label (EvDocumentLinks *document_links,
+ EvLinkDest *dest);
+
+G_END_DECLS
+
+#endif
diff --git a/libdocument/ev-document-misc.c b/libdocument/ev-document-misc.c
new file mode 100644
index 00000000..d597127f
--- /dev/null
+++ b/libdocument/ev-document-misc.c
@@ -0,0 +1,400 @@
+/*
+ * Copyright (C) 2009 Juanjo Marín <[email protected]>
+ * Copyright (c) 2007 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2000-2003 Marco Pesenti Gritti
+ *
+ * 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, 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 <config.h>
+
+#include <string.h>
+#include <math.h>
+
+#include <gtk/gtk.h>
+
+#include "ev-document-misc.h"
+
+/* Returns a new GdkPixbuf that is suitable for placing in the thumbnail view.
+ * It is four pixels wider and taller than the source. If source_pixbuf is not
+ * NULL, then it will fill the return pixbuf with the contents of
+ * source_pixbuf.
+ */
+static GdkPixbuf *
+create_thumbnail_frame (int width,
+ int height,
+ GdkPixbuf *source_pixbuf,
+ gboolean fill_bg)
+{
+ GdkPixbuf *retval;
+ guchar *data;
+ gint rowstride;
+ int i;
+ int width_r, height_r;
+
+ if (source_pixbuf)
+ g_return_val_if_fail (GDK_IS_PIXBUF (source_pixbuf), NULL);
+
+ if (source_pixbuf) {
+ width_r = gdk_pixbuf_get_width (source_pixbuf);
+ height_r = gdk_pixbuf_get_height (source_pixbuf);
+ } else {
+ width_r = width;
+ height_r = height;
+ }
+
+ /* make sure no one is passing us garbage */
+ g_assert (width_r >= 0 && height_r >= 0);
+
+ retval = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
+ TRUE, 8,
+ width_r + 4,
+ height_r + 4);
+
+ /* make it black and fill in the middle */
+ data = gdk_pixbuf_get_pixels (retval);
+ rowstride = gdk_pixbuf_get_rowstride (retval);
+
+ gdk_pixbuf_fill (retval, 0x000000ff);
+ if (fill_bg) {
+ for (i = 1; i < height_r + 1; i++)
+ memset (data + (rowstride * i) + 4, 0xffffffff, width_r * 4);
+ }
+
+ /* copy the source pixbuf */
+ if (source_pixbuf)
+ gdk_pixbuf_copy_area (source_pixbuf, 0, 0,
+ width_r,
+ height_r,
+ retval,
+ 1, 1);
+ /* Add the corner */
+ data [(width_r + 2) * 4 + 3] = 0;
+ data [(width_r + 3) * 4 + 3] = 0;
+ data [(width_r + 2) * 4 + (rowstride * 1) + 3] = 0;
+ data [(width_r + 3) * 4 + (rowstride * 1) + 3] = 0;
+
+ data [(height_r + 2) * rowstride + 3] = 0;
+ data [(height_r + 3) * rowstride + 3] = 0;
+ data [(height_r + 2) * rowstride + 4 + 3] = 0;
+ data [(height_r + 3) * rowstride + 4 + 3] = 0;
+
+ return retval;
+}
+
+GdkPixbuf *
+ev_document_misc_get_thumbnail_frame (int width,
+ int height,
+ GdkPixbuf *source_pixbuf)
+{
+ return create_thumbnail_frame (width, height, source_pixbuf, TRUE);
+}
+
+GdkPixbuf *
+ev_document_misc_get_loading_thumbnail (int width,
+ int height,
+ gboolean inverted_colors)
+{
+ return create_thumbnail_frame (width, height, NULL, !inverted_colors);
+}
+
+void
+ev_document_misc_get_page_border_size (gint page_width,
+ gint page_height,
+ GtkBorder *border)
+{
+ g_assert (border);
+
+ border->left = 1;
+ border->top = 1;
+ if (page_width < 100) {
+ border->right = 2;
+ border->bottom = 2;
+ } else if (page_width < 500) {
+ border->right = 3;
+ border->bottom = 3;
+ } else {
+ border->right = 4;
+ border->bottom = 4;
+ }
+}
+
+
+void
+ev_document_misc_paint_one_page (cairo_t *cr,
+ GtkWidget *widget,
+ GdkRectangle *area,
+ GtkBorder *border,
+ gboolean highlight,
+ gboolean inverted_colors)
+{
+ GtkStyle *style = gtk_widget_get_style (widget);
+ GtkStateType state = gtk_widget_get_state (widget);
+
+ gdk_cairo_set_source_color (cr, highlight ? &style->text[state] : &style->dark[state]);
+ gdk_cairo_rectangle (cr, area);
+ cairo_fill (cr);
+
+ if (inverted_colors)
+ cairo_set_source_rgb (cr, 0, 0, 0);
+ else
+ cairo_set_source_rgb (cr, 1, 1, 1);
+ cairo_rectangle (cr,
+ area->x + border->left,
+ area->y + border->top,
+ area->width - (border->left + border->right),
+ area->height - (border->top + border->bottom));
+ cairo_fill (cr);
+
+ gdk_cairo_set_source_color (cr, &style->mid[state]);
+ cairo_rectangle (cr,
+ area->x,
+ area->y + area->height - (border->bottom - border->top),
+ border->bottom - border->top,
+ border->bottom - border->top);
+ cairo_fill (cr);
+
+ cairo_rectangle (cr,
+ area->x + area->width - (border->right - border->left),
+ area->y,
+ border->right - border->left,
+ border->right - border->left);
+ cairo_fill (cr);
+}
+
+cairo_surface_t *
+ev_document_misc_surface_from_pixbuf (GdkPixbuf *pixbuf)
+{
+ cairo_surface_t *surface;
+ cairo_t *cr;
+
+ surface = cairo_image_surface_create (gdk_pixbuf_get_has_alpha (pixbuf) ?
+ CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24,
+ gdk_pixbuf_get_width (pixbuf),
+ gdk_pixbuf_get_height (pixbuf));
+ cr = cairo_create (surface);
+ gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
+ cairo_paint (cr);
+ cairo_destroy (cr);
+
+ return surface;
+}
+
+GdkPixbuf *
+ev_document_misc_pixbuf_from_surface (cairo_surface_t *surface)
+{
+ GdkPixbuf *pixbuf;
+ cairo_surface_t *image;
+ cairo_t *cr;
+ gboolean has_alpha;
+ gint width, height;
+ cairo_format_t surface_format;
+ gint pixbuf_n_channels;
+ gint pixbuf_rowstride;
+ guchar *pixbuf_pixels;
+ gint x, y;
+
+ width = cairo_image_surface_get_width (surface);
+ height = cairo_image_surface_get_height (surface);
+
+ surface_format = cairo_image_surface_get_format (surface);
+ has_alpha = (surface_format == CAIRO_FORMAT_ARGB32);
+
+ pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
+ TRUE, 8,
+ width, height);
+ pixbuf_n_channels = gdk_pixbuf_get_n_channels (pixbuf);
+ pixbuf_rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+ pixbuf_pixels = gdk_pixbuf_get_pixels (pixbuf);
+
+ image = cairo_image_surface_create_for_data (pixbuf_pixels,
+ surface_format,
+ width, height,
+ pixbuf_rowstride);
+ cr = cairo_create (image);
+ cairo_set_source_surface (cr, surface, 0, 0);
+
+ if (has_alpha)
+ cairo_mask_surface (cr, surface, 0, 0);
+ else
+ cairo_paint (cr);
+
+ cairo_destroy (cr);
+ cairo_surface_destroy (image);
+
+ for (y = 0; y < height; y++) {
+ guchar *p = pixbuf_pixels + y * pixbuf_rowstride;
+
+ for (x = 0; x < width; x++) {
+ guchar tmp;
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ tmp = p[0];
+ p[0] = p[2];
+ p[2] = tmp;
+ p[3] = (has_alpha) ? p[3] : 0xff;
+#else
+ tmp = p[0];
+ p[0] = p[1];
+ p[1] = p[2];
+ p[2] = p[3];
+ p[3] = (has_alpha) ? tmp : 0xff;
+#endif
+ p += pixbuf_n_channels;
+ }
+ }
+
+ return pixbuf;
+}
+
+cairo_surface_t *
+ev_document_misc_surface_rotate_and_scale (cairo_surface_t *surface,
+ gint dest_width,
+ gint dest_height,
+ gint dest_rotation)
+{
+ cairo_surface_t *new_surface;
+ cairo_t *cr;
+ gint width, height;
+ gint new_width = dest_width;
+ gint new_height = dest_height;
+
+ width = cairo_image_surface_get_width (surface);
+ height = cairo_image_surface_get_height (surface);
+
+ if (dest_width == width &&
+ dest_height == height &&
+ dest_rotation == 0) {
+ return cairo_surface_reference (surface);
+ }
+
+ if (dest_rotation == 90 || dest_rotation == 270) {
+ new_width = dest_height;
+ new_height = dest_width;
+ }
+
+ new_surface = cairo_surface_create_similar (surface,
+ cairo_surface_get_content (surface),
+ new_width, new_height);
+
+ cr = cairo_create (new_surface);
+ switch (dest_rotation) {
+ case 90:
+ cairo_translate (cr, new_width, 0);
+ break;
+ case 180:
+ cairo_translate (cr, new_width, new_height);
+ break;
+ case 270:
+ cairo_translate (cr, 0, new_height);
+ break;
+ default:
+ cairo_translate (cr, 0, 0);
+ }
+
+ if (dest_width != width || dest_height != height) {
+ cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_BILINEAR);
+ cairo_scale (cr,
+ (gdouble)dest_width / width,
+ (gdouble)dest_height / height);
+ }
+
+ cairo_rotate (cr, dest_rotation * G_PI / 180.0);
+ cairo_set_source_surface (cr, surface, 0, 0);
+ cairo_paint (cr);
+ cairo_destroy (cr);
+
+ return new_surface;
+}
+
+void
+ev_document_misc_invert_surface (cairo_surface_t *surface) {
+ cairo_t *cr;
+
+ cr = cairo_create (surface);
+
+ /* white + DIFFERENCE -> invert */
+ cairo_set_operator (cr, CAIRO_OPERATOR_DIFFERENCE);
+ cairo_set_source_rgb (cr, 1., 1., 1.);
+ cairo_paint(cr);
+ cairo_destroy (cr);
+}
+
+void
+ev_document_misc_invert_pixbuf (GdkPixbuf *pixbuf)
+{
+ guchar *data, *p;
+ guint width, height, x, y, rowstride, n_channels;
+
+ n_channels = gdk_pixbuf_get_n_channels (pixbuf);
+ g_assert (gdk_pixbuf_get_colorspace (pixbuf) == GDK_COLORSPACE_RGB);
+ g_assert (gdk_pixbuf_get_bits_per_sample (pixbuf) == 8);
+
+ /* First grab a pointer to the raw pixel data. */
+ data = gdk_pixbuf_get_pixels (pixbuf);
+
+ /* Find the number of bytes per row (could be padded). */
+ rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+
+ width = gdk_pixbuf_get_width (pixbuf);
+ height = gdk_pixbuf_get_height (pixbuf);
+ for (x = 0; x < width; x++) {
+ for (y = 0; y < height; y++) {
+ /* Calculate pixel's offset into the data array. */
+ p = data + x * n_channels + y * rowstride;
+ /* Change the RGB values*/
+ p[0] = 255 - p[0];
+ p[1] = 255 - p[1];
+ p[2] = 255 - p[2];
+ }
+ }
+}
+
+gdouble
+ev_document_misc_get_screen_dpi (GdkScreen *screen)
+{
+ gdouble dp, di;
+
+ /*diagonal in pixels*/
+ dp = hypot (gdk_screen_get_width (screen), gdk_screen_get_height (screen));
+
+ /*diagonal in inches*/
+ di = hypot (gdk_screen_get_width_mm(screen), gdk_screen_get_height_mm (screen)) / 25.4;
+
+ return (dp / di);
+}
+
+/* Returns a locale specific date and time representation */
+gchar *
+ev_document_misc_format_date (GTime utime)
+{
+ time_t time = (time_t) utime;
+ char s[256];
+ const char fmt_hack[] = "%c";
+ size_t len;
+#ifdef HAVE_LOCALTIME_R
+ struct tm t;
+ if (time == 0 || !localtime_r (&time, &t)) return NULL;
+ len = strftime (s, sizeof (s), fmt_hack, &t);
+#else
+ struct tm *t;
+ if (time == 0 || !(t = localtime (&time)) ) return NULL;
+ len = strftime (s, sizeof (s), fmt_hack, t);
+#endif
+
+ if (len == 0 || s[0] == '\0') return NULL;
+
+ return g_locale_to_utf8 (s, -1, NULL, NULL, NULL);
+}
diff --git a/libdocument/ev-document-misc.h b/libdocument/ev-document-misc.h
new file mode 100644
index 00000000..dfce2e2e
--- /dev/null
+++ b/libdocument/ev-document-misc.h
@@ -0,0 +1,67 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2000-2003 Marco Pesenti Gritti
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_MISC_H
+#define EV_DOCUMENT_MISC_H
+
+#include <cairo.h>
+
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+GdkPixbuf *ev_document_misc_get_thumbnail_frame (int width,
+ int height,
+ GdkPixbuf *source_pixbuf);
+GdkPixbuf *ev_document_misc_get_loading_thumbnail (int width,
+ int height,
+ gboolean inverted_colors);
+void ev_document_misc_get_page_border_size (gint page_width,
+ gint page_height,
+ GtkBorder *border);
+void ev_document_misc_paint_one_page (cairo_t *cr,
+ GtkWidget *widget,
+ GdkRectangle *area,
+ GtkBorder *border,
+ gboolean highlight,
+ gboolean inverted_colors);
+
+cairo_surface_t *ev_document_misc_surface_from_pixbuf (GdkPixbuf *pixbuf);
+GdkPixbuf *ev_document_misc_pixbuf_from_surface (cairo_surface_t *surface);
+cairo_surface_t *ev_document_misc_surface_rotate_and_scale (cairo_surface_t *surface,
+ gint dest_width,
+ gint dest_height,
+ gint dest_rotation);
+void ev_document_misc_invert_surface (cairo_surface_t *surface);
+void ev_document_misc_invert_pixbuf (GdkPixbuf *pixbuf);
+
+gdouble ev_document_misc_get_screen_dpi (GdkScreen *screen);
+
+gchar *ev_document_misc_format_date (GTime utime);
+
+G_END_DECLS
+
+#endif /* EV_DOCUMENT_MISC_H */
diff --git a/libdocument/ev-document-print.c b/libdocument/ev-document-print.c
new file mode 100644
index 00000000..185121c5
--- /dev/null
+++ b/libdocument/ev-document-print.c
@@ -0,0 +1,41 @@
+/* ev-document-print.c
+ * this file is part of evince, a mate document_links viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include "ev-document.h"
+#include "ev-document-print.h"
+
+G_DEFINE_INTERFACE (EvDocumentPrint, ev_document_print, 0)
+
+static void
+ev_document_print_default_init (EvDocumentPrintInterface *klass)
+{
+}
+
+void
+ev_document_print_print_page (EvDocumentPrint *document_print,
+ EvPage *page,
+ cairo_t *cr)
+{
+ EvDocumentPrintInterface *iface = EV_DOCUMENT_PRINT_GET_IFACE (document_print);
+
+ iface->print_page (document_print, page, cr);
+}
diff --git a/libdocument/ev-document-print.h b/libdocument/ev-document-print.h
new file mode 100644
index 00000000..319f557c
--- /dev/null
+++ b/libdocument/ev-document-print.h
@@ -0,0 +1,59 @@
+/* ev-document-print.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 EV_DOCUMENT_PRINT_H
+#define EV_DOCUMENT_PRINT_H
+
+#include <glib-object.h>
+#include <cairo.h>
+
+#include "ev-page.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_DOCUMENT_PRINT (ev_document_print_get_type ())
+#define EV_DOCUMENT_PRINT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT_PRINT, EvDocumentPrint))
+#define EV_DOCUMENT_PRINT_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT_PRINT, EvDocumentPrintInterface))
+#define EV_IS_DOCUMENT_PRINT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT_PRINT))
+#define EV_IS_DOCUMENT_PRINT_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT_PRINT))
+#define EV_DOCUMENT_PRINT_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT_PRINT, EvDocumentPrintInterface))
+
+typedef struct _EvDocumentPrint EvDocumentPrint;
+typedef struct _EvDocumentPrintInterface EvDocumentPrintInterface;
+
+struct _EvDocumentPrintInterface
+{
+ GTypeInterface base_iface;
+
+ /* Methods */
+ void (* print_page) (EvDocumentPrint *document_print,
+ EvPage *page,
+ cairo_t *cr);
+};
+
+GType ev_document_print_get_type (void) G_GNUC_CONST;
+
+void ev_document_print_print_page (EvDocumentPrint *document_print,
+ EvPage *page,
+ cairo_t *cr);
+
+G_END_DECLS
+
+#endif /* EV_DOCUMENT_PRINT_H */
diff --git a/libdocument/ev-document-security.c b/libdocument/ev-document-security.c
new file mode 100644
index 00000000..0b8f552e
--- /dev/null
+++ b/libdocument/ev-document-security.c
@@ -0,0 +1,48 @@
+/* ev-document-links.h
+ * this file is part of evince, a mate document_links viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * Author:
+ * Jonathan Blandford <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include "ev-document-security.h"
+
+G_DEFINE_INTERFACE (EvDocumentSecurity, ev_document_security, 0)
+
+static void
+ev_document_security_default_init (EvDocumentSecurityInterface *klass)
+{
+}
+
+gboolean
+ev_document_security_has_document_security (EvDocumentSecurity *document_security)
+{
+ EvDocumentSecurityInterface *iface = EV_DOCUMENT_SECURITY_GET_IFACE (document_security);
+ return iface->has_document_security (document_security);
+}
+
+void
+ev_document_security_set_password (EvDocumentSecurity *document_security,
+ const char *password)
+{
+ EvDocumentSecurityInterface *iface = EV_DOCUMENT_SECURITY_GET_IFACE (document_security);
+ iface->set_password (document_security, password);
+}
diff --git a/libdocument/ev-document-security.h b/libdocument/ev-document-security.h
new file mode 100644
index 00000000..c64dc64b
--- /dev/null
+++ b/libdocument/ev-document-security.h
@@ -0,0 +1,67 @@
+/* ev-document-security.h
+ * this file is part of evince, a mate pdf viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc.
+ *
+ * Author:
+ * Jonathan Blandford <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_SECURITY_H
+#define EV_DOCUMENT_SECURITY_H
+
+#include <glib-object.h>
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+
+#define EV_TYPE_DOCUMENT_SECURITY (ev_document_security_get_type ())
+#define EV_DOCUMENT_SECURITY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT_SECURITY, EvDocumentSecurity))
+#define EV_DOCUMENT_SECURITY_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT_SECURITY, EvDocumentSecurityInterface))
+#define EV_IS_DOCUMENT_SECURITY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT_SECURITY))
+#define EV_IS_DOCUMENT_SECURITY_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT_SECURITY))
+#define EV_DOCUMENT_SECURITY_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT_SECURITY, EvDocumentSecurityInterface))
+
+typedef struct _EvDocumentSecurity EvDocumentSecurity;
+typedef struct _EvDocumentSecurityInterface EvDocumentSecurityInterface;
+
+struct _EvDocumentSecurityInterface
+{
+ GTypeInterface base_iface;
+
+ /* Methods */
+ gboolean (* has_document_security) (EvDocumentSecurity *document_security);
+ void (* set_password) (EvDocumentSecurity *document_security,
+ const char *password);
+};
+
+GType ev_document_security_get_type (void);
+gboolean ev_document_security_has_document_security (EvDocumentSecurity *document_security);
+void ev_document_security_set_password (EvDocumentSecurity *document_security,
+ const char *password);
+
+G_END_DECLS
+
+#endif
diff --git a/libdocument/ev-document-text.c b/libdocument/ev-document-text.c
new file mode 100644
index 00000000..56c1a563
--- /dev/null
+++ b/libdocument/ev-document-text.c
@@ -0,0 +1,70 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2010 Yaco Sistemas, Daniel Garcia <[email protected]>
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#include "config.h"
+
+#include "ev-document-text.h"
+
+G_DEFINE_INTERFACE (EvDocumentText, ev_document_text, 0)
+
+static void
+ev_document_text_default_init (EvDocumentTextInterface *klass)
+{
+}
+
+gchar *
+ev_document_text_get_text (EvDocumentText *document_text,
+ EvPage *page)
+{
+ EvDocumentTextInterface *iface = EV_DOCUMENT_TEXT_GET_IFACE (document_text);
+
+ if (!iface->get_text)
+ return NULL;
+
+ return iface->get_text (document_text, page);
+}
+
+
+gboolean
+ev_document_text_get_text_layout (EvDocumentText *document_text,
+ EvPage *page,
+ EvRectangle **areas,
+ guint *n_areas)
+{
+ EvDocumentTextInterface *iface = EV_DOCUMENT_TEXT_GET_IFACE (document_text);
+
+ if (!iface->get_text_layout)
+ return FALSE;
+
+ return iface->get_text_layout (document_text, page, areas, n_areas);
+}
+
+cairo_region_t *
+ev_document_text_get_text_mapping (EvDocumentText *document_text,
+ EvPage *page)
+{
+ EvDocumentTextInterface *iface = EV_DOCUMENT_TEXT_GET_IFACE (document_text);
+
+ if (!iface->get_text_mapping)
+ return NULL;
+
+ return iface->get_text_mapping (document_text, page);
+}
diff --git a/libdocument/ev-document-text.h b/libdocument/ev-document-text.h
new file mode 100644
index 00000000..abf1cc76
--- /dev/null
+++ b/libdocument/ev-document-text.h
@@ -0,0 +1,75 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2010 Yaco Sistemas, Daniel Garcia <[email protected]>
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_TEXT_H
+#define EV_DOCUMENT_TEXT_H
+
+#include <glib-object.h>
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_DOCUMENT_TEXT (ev_document_text_get_type ())
+#define EV_DOCUMENT_TEXT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT_TEXT, EvDocumentText))
+#define EV_DOCUMENT_TEXT_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT_TEXT, EvDocumentTextInterface))
+#define EV_IS_DOCUMENT_TEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT_TEXT))
+#define EV_IS_DOCUMENT_TEXT_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT_TEXT))
+#define EV_DOCUMENT_TEXT_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT_TEXT, EvDocumentTextInterface))
+
+typedef struct _EvDocumentText EvDocumentText;
+typedef struct _EvDocumentTextInterface EvDocumentTextInterface;
+
+struct _EvDocumentTextInterface
+{
+ GTypeInterface base_iface;
+
+ /* Methods */
+ cairo_region_t *(* get_text_mapping) (EvDocumentText *document_text,
+ EvPage *page);
+ gchar *(* get_text) (EvDocumentText *document_text,
+ EvPage *page);
+ gboolean (* get_text_layout) (EvDocumentText *document_text,
+ EvPage *page,
+ EvRectangle **areas,
+ guint *n_areas);
+};
+
+GType ev_document_text_get_type (void) G_GNUC_CONST;
+
+gchar *ev_document_text_get_text (EvDocumentText *document_text,
+ EvPage *page);
+gboolean ev_document_text_get_text_layout (EvDocumentText *document_text,
+ EvPage *page,
+ EvRectangle **areas,
+ guint *n_areas);
+cairo_region_t *ev_document_text_get_text_mapping (EvDocumentText *document_text,
+ EvPage *page);
+
+G_END_DECLS
+
+#endif /* EV_DOCUMENT_TEXT_H */
diff --git a/libdocument/ev-document-thumbnails.c b/libdocument/ev-document-thumbnails.c
new file mode 100644
index 00000000..9482e09e
--- /dev/null
+++ b/libdocument/ev-document-thumbnails.c
@@ -0,0 +1,63 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2004 Anders Carlsson <[email protected]>
+ *
+ * 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, 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 <config.h>
+#include "ev-document-thumbnails.h"
+#include "ev-document.h"
+
+G_DEFINE_INTERFACE (EvDocumentThumbnails, ev_document_thumbnails, 0)
+
+static void
+ev_document_thumbnails_default_init (EvDocumentThumbnailsInterface *klass)
+{
+}
+
+GdkPixbuf *
+ev_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gboolean border)
+{
+ EvDocumentThumbnailsInterface *iface;
+
+ g_return_val_if_fail (EV_IS_DOCUMENT_THUMBNAILS (document), NULL);
+ g_return_val_if_fail (EV_IS_RENDER_CONTEXT (rc), NULL);
+
+ iface = EV_DOCUMENT_THUMBNAILS_GET_IFACE (document);
+
+ return iface->get_thumbnail (document, rc, border);
+}
+
+void
+ev_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gint *width,
+ gint *height)
+{
+ EvDocumentThumbnailsInterface *iface;
+
+ g_return_if_fail (EV_IS_DOCUMENT_THUMBNAILS (document));
+ g_return_if_fail (EV_IS_RENDER_CONTEXT (rc));
+ g_return_if_fail (width != NULL);
+ g_return_if_fail (height != NULL);
+
+ iface = EV_DOCUMENT_THUMBNAILS_GET_IFACE (document);
+ iface->get_dimensions (document, rc, width, height);
+}
+
diff --git a/libdocument/ev-document-thumbnails.h b/libdocument/ev-document-thumbnails.h
new file mode 100644
index 00000000..bf663eed
--- /dev/null
+++ b/libdocument/ev-document-thumbnails.h
@@ -0,0 +1,69 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2004 Anders Carlsson
+ *
+ * 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, 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.
+ *
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_THUMBNAILS_H
+#define EV_DOCUMENT_THUMBNAILS_H
+
+#include <gdk-pixbuf/gdk-pixbuf.h>
+
+#include "ev-render-context.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_DOCUMENT_THUMBNAILS (ev_document_thumbnails_get_type ())
+#define EV_DOCUMENT_THUMBNAILS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT_THUMBNAILS, EvDocumentThumbnails))
+#define EV_DOCUMENT_THUMBNAILS_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT_THUMBNAILS, EvDocumentThumbnailsInterface))
+#define EV_IS_DOCUMENT_THUMBNAILS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT_THUMBNAILS))
+#define EV_IS_DOCUMENT_THUMBNAILS_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT_THUMBNAILS))
+#define EV_DOCUMENT_THUMBNAILS_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT_THUMBNAILS, EvDocumentThumbnailsInterface))
+
+typedef struct _EvDocumentThumbnails EvDocumentThumbnails;
+typedef struct _EvDocumentThumbnailsInterface EvDocumentThumbnailsInterface;
+
+struct _EvDocumentThumbnailsInterface {
+ GTypeInterface base_iface;
+
+ /* Methods */
+ GdkPixbuf * (* get_thumbnail) (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gboolean border);
+ void (* get_dimensions) (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gint *width,
+ gint *height);
+};
+
+GType ev_document_thumbnails_get_type (void) G_GNUC_CONST;
+
+GdkPixbuf *ev_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gboolean border);
+void ev_document_thumbnails_get_dimensions (EvDocumentThumbnails *document,
+ EvRenderContext *rc,
+ gint *width,
+ gint *height);
+
+G_END_DECLS
+
+#endif /* EV_DOCUMENT_THUMBNAILS_H */
diff --git a/libdocument/ev-document-transition.c b/libdocument/ev-document-transition.c
new file mode 100644
index 00000000..d8345f2c
--- /dev/null
+++ b/libdocument/ev-document-transition.c
@@ -0,0 +1,57 @@
+/* ev-document-transition.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+#include "ev-document-transition.h"
+
+G_DEFINE_INTERFACE (EvDocumentTransition, ev_document_transition, 0)
+
+static void
+ev_document_transition_default_init (EvDocumentTransitionInterface *klass)
+{
+}
+
+gdouble
+ev_document_transition_get_page_duration (EvDocumentTransition *document_trans,
+ gint page)
+{
+ EvDocumentTransitionInterface *iface = EV_DOCUMENT_TRANSITION_GET_IFACE (document_trans);
+
+ if (iface->get_page_duration)
+ return iface->get_page_duration (document_trans, page);
+
+ return -1;
+}
+
+EvTransitionEffect *
+ev_document_transition_get_effect (EvDocumentTransition *document_trans,
+ gint page)
+{
+ EvDocumentTransitionInterface *iface = EV_DOCUMENT_TRANSITION_GET_IFACE (document_trans);
+ EvTransitionEffect *effect = NULL;
+
+ if (iface->get_effect)
+ effect = iface->get_effect (document_trans, page);
+
+ if (!effect)
+ return ev_transition_effect_new (EV_TRANSITION_EFFECT_REPLACE, NULL);
+
+ return effect;
+}
diff --git a/libdocument/ev-document-transition.h b/libdocument/ev-document-transition.h
new file mode 100644
index 00000000..d7d3f1fd
--- /dev/null
+++ b/libdocument/ev-document-transition.h
@@ -0,0 +1,64 @@
+/* ev-document-transition.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_TRANSITION_H
+#define EV_DOCUMENT_TRANSITION_H
+
+#include <glib-object.h>
+
+#include "ev-document.h"
+#include "ev-transition-effect.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_DOCUMENT_TRANSITION (ev_document_transition_get_type ())
+#define EV_DOCUMENT_TRANSITION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT_TRANSITION, EvDocumentTransition))
+#define EV_DOCUMENT_TRANSITION_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT_TRANSITION, EvDocumentTransitionInterface))
+#define EV_IS_DOCUMENT_TRANSITION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT_TRANSITION))
+#define EV_IS_DOCUMENT_TRANSITION_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT_TRANSITION))
+#define EV_DOCUMENT_TRANSITION_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT_TRANSITION, EvDocumentTransitionInterface))
+
+typedef struct _EvDocumentTransition EvDocumentTransition;
+typedef struct _EvDocumentTransitionInterface EvDocumentTransitionInterface;
+
+struct _EvDocumentTransitionInterface
+{
+ GTypeInterface base_iface;
+
+ /* Methods */
+ gdouble (* get_page_duration) (EvDocumentTransition *document_trans,
+ gint page);
+ EvTransitionEffect * (* get_effect) (EvDocumentTransition *document_trans,
+ gint page);
+};
+
+GType ev_document_transition_get_type (void) G_GNUC_CONST;
+gdouble ev_document_transition_get_page_duration (EvDocumentTransition *document_trans,
+ gint page);
+EvTransitionEffect * ev_document_transition_get_effect (EvDocumentTransition *document_trans,
+ gint page);
+
+G_END_DECLS
+
+#endif /* EV_DOCUMENT_TRANSITION_H */
diff --git a/libdocument/ev-document-type-builtins.c.template b/libdocument/ev-document-type-builtins.c.template
new file mode 100644
index 00000000..c355aff5
--- /dev/null
+++ b/libdocument/ev-document-type-builtins.c.template
@@ -0,0 +1,44 @@
+/*** BEGIN file-header ***/
+#include <config.h>
+
+#include "ev-document-type-builtins.h"
+
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+/* enumerations from "@filename@" */
+#include "@filename@"
+/*** END file-production ***/
+
+
+/*** BEGIN value-header ***/
+GType
+@enum_name@_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile)) {
+ static const G@Type@Value values[] = {
+/*** END value-header ***/
+
+/*** BEGIN value-production ***/
+ { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
+/*** END value-production ***/
+
+/*** BEGIN value-tail ***/
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id = \
+ g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
+
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+
+/*** END value-tail ***/
+
+/*** BEGIN file-tail ***/
+
+/*** END file-tail ***/
diff --git a/libdocument/ev-document-type-builtins.h.template b/libdocument/ev-document-type-builtins.h.template
new file mode 100644
index 00000000..4b70c87c
--- /dev/null
+++ b/libdocument/ev-document-type-builtins.h.template
@@ -0,0 +1,29 @@
+/*** BEGIN file-header ***/
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_TYPE_BUILTINS_H
+#define EV_DOCUMENT_TYPE_BUILTINS_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name@_get_type (void) G_GNUC_CONST;
+#define EV_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
+/*** END value-header ***/
+
+/*** BEGIN file-tail ***/
+G_END_DECLS
+
+#endif /* !EV_DOCUMENT_TYPE_BUILTINS_H */
+/*** END file-tail ***/
diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c
new file mode 100644
index 00000000..70349dcb
--- /dev/null
+++ b/libdocument/ev-document.c
@@ -0,0 +1,867 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2009 Carlos Garcia Campos
+ * Copyright (C) 2004 Marco Pesenti Gritti
+ *
+ * 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, 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 "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "ev-document.h"
+#include "synctex_parser.h"
+
+#define EV_DOCUMENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EV_TYPE_DOCUMENT, EvDocumentPrivate))
+
+typedef struct _EvPageSize
+{
+ gdouble width;
+ gdouble height;
+} EvPageSize;
+
+struct _EvDocumentPrivate
+{
+ gchar *uri;
+
+ gint n_pages;
+
+ gboolean uniform;
+ gdouble uniform_width;
+ gdouble uniform_height;
+
+ gdouble max_width;
+ gdouble max_height;
+ gdouble min_width;
+ gdouble min_height;
+ gint max_label;
+
+ gchar **page_labels;
+ EvPageSize *page_sizes;
+ EvDocumentInfo *info;
+
+ synctex_scanner_t synctex_scanner;
+};
+
+static gint _ev_document_get_n_pages (EvDocument *document);
+static void _ev_document_get_page_size (EvDocument *document,
+ EvPage *page,
+ double *width,
+ double *height);
+static gchar *_ev_document_get_page_label (EvDocument *document,
+ EvPage *page);
+static EvDocumentInfo *_ev_document_get_info (EvDocument *document);
+static gboolean _ev_document_support_synctex (EvDocument *document);
+
+GMutex *ev_doc_mutex = NULL;
+GMutex *ev_fc_mutex = NULL;
+
+G_DEFINE_ABSTRACT_TYPE (EvDocument, ev_document, G_TYPE_OBJECT)
+
+GQuark
+ev_document_error_quark (void)
+{
+ static GQuark q = 0;
+ if (q == 0)
+ q = g_quark_from_static_string ("ev-document-error-quark");
+
+ return q;
+}
+
+static EvPage *
+ev_document_impl_get_page (EvDocument *document,
+ gint index)
+{
+ return ev_page_new (index);
+}
+
+static EvDocumentInfo *
+ev_document_impl_get_info (EvDocument *document)
+{
+ return g_new0 (EvDocumentInfo, 1);
+}
+
+static void
+ev_document_finalize (GObject *object)
+{
+ EvDocument *document = EV_DOCUMENT (object);
+
+ if (document->priv->uri) {
+ g_free (document->priv->uri);
+ document->priv->uri = NULL;
+ }
+
+ if (document->priv->page_sizes) {
+ g_free (document->priv->page_sizes);
+ document->priv->page_sizes = NULL;
+ }
+
+ if (document->priv->page_labels) {
+ gint i;
+
+ for (i = 0; i < document->priv->n_pages; i++) {
+ g_free (document->priv->page_labels[i]);
+ }
+ g_free (document->priv->page_labels);
+ document->priv->page_labels = NULL;
+ }
+
+ if (document->priv->info) {
+ ev_document_info_free (document->priv->info);
+ document->priv->info = NULL;
+ }
+
+ if (document->priv->synctex_scanner) {
+ synctex_scanner_free (document->priv->synctex_scanner);
+ document->priv->synctex_scanner = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_document_parent_class)->finalize (object);
+}
+
+static void
+ev_document_init (EvDocument *document)
+{
+ document->priv = EV_DOCUMENT_GET_PRIVATE (document);
+
+ /* Assume all pages are the same size until proven otherwise */
+ document->priv->uniform = TRUE;
+}
+
+static void
+ev_document_class_init (EvDocumentClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (g_object_class, sizeof (EvDocumentPrivate));
+
+ klass->get_page = ev_document_impl_get_page;
+ klass->get_info = ev_document_impl_get_info;
+ klass->get_backend_info = NULL;
+
+ g_object_class->finalize = ev_document_finalize;
+}
+
+GMutex *
+ev_document_get_doc_mutex (void)
+{
+ if (ev_doc_mutex == NULL) {
+ ev_doc_mutex = g_mutex_new ();
+ }
+ return ev_doc_mutex;
+}
+
+void
+ev_document_doc_mutex_lock (void)
+{
+ g_mutex_lock (ev_document_get_doc_mutex ());
+}
+
+void
+ev_document_doc_mutex_unlock (void)
+{
+ g_mutex_unlock (ev_document_get_doc_mutex ());
+}
+
+gboolean
+ev_document_doc_mutex_trylock (void)
+{
+ return g_mutex_trylock (ev_document_get_doc_mutex ());
+}
+
+GMutex *
+ev_document_get_fc_mutex (void)
+{
+ if (ev_fc_mutex == NULL) {
+ ev_fc_mutex = g_mutex_new ();
+ }
+ return ev_fc_mutex;
+}
+
+void
+ev_document_fc_mutex_lock (void)
+{
+ g_mutex_lock (ev_document_get_fc_mutex ());
+}
+
+void
+ev_document_fc_mutex_unlock (void)
+{
+ g_mutex_unlock (ev_document_get_fc_mutex ());
+}
+
+gboolean
+ev_document_fc_mutex_trylock (void)
+{
+ return g_mutex_trylock (ev_document_get_fc_mutex ());
+}
+
+/**
+ * ev_document_load:
+ * @document: a #EvDocument
+ * @uri: the document's URI
+ * @error: a #GError location to store an error, or %NULL
+ *
+ * Loads @document from @uri.
+ *
+ * On failure, %FALSE is returned and @error is filled in.
+ * If the document is encrypted, EV_DEFINE_ERROR_ENCRYPTED is returned.
+ * If the backend cannot load the specific document, EV_DOCUMENT_ERROR_INVALID
+ * is returned. Other errors are possible too, depending on the backend
+ * used to load the document and the URI, e.g. #GIOError, #GFileError, and
+ * #GConvertError.
+ *
+ * Returns: %TRUE on success, or %FALSE on failure.
+ */
+gboolean
+ev_document_load (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document);
+ gboolean retval;
+ GError *err = NULL;
+
+ retval = klass->load (document, uri, &err);
+ if (!retval) {
+ if (err) {
+ g_propagate_error (error, err);
+ } else {
+ g_warning ("%s::EvDocument::load returned FALSE but did not fill in @error; fix the backend!\n",
+ G_OBJECT_TYPE_NAME (document));
+
+ /* So upper layers don't crash */
+ g_set_error_literal (error,
+ EV_DOCUMENT_ERROR,
+ EV_DOCUMENT_ERROR_INVALID,
+ "Internal error in backend");
+ }
+ } else {
+ gint i;
+ EvDocumentPrivate *priv = document->priv;
+
+ /* Cache some info about the document to avoid
+ * going to the backends since it requires locks
+ */
+ priv->uri = g_strdup (uri);
+ priv->n_pages = _ev_document_get_n_pages (document);
+
+ for (i = 0; i < priv->n_pages; i++) {
+ EvPage *page = ev_document_get_page (document, i);
+ gdouble page_width = 0;
+ gdouble page_height = 0;
+ EvPageSize *page_size;
+ gchar *page_label;
+
+ _ev_document_get_page_size (document, page, &page_width, &page_height);
+
+ if (i == 0) {
+ priv->uniform_width = page_width;
+ priv->uniform_height = page_height;
+ priv->max_width = priv->uniform_width;
+ priv->max_height = priv->uniform_height;
+ priv->min_width = priv->uniform_width;
+ priv->min_height = priv->uniform_height;
+ } else if (priv->uniform &&
+ (priv->uniform_width != page_width ||
+ priv->uniform_height != page_height)) {
+ /* It's a different page size. Backfill the array. */
+ int j;
+
+ priv->page_sizes = g_new0 (EvPageSize, priv->n_pages);
+
+ for (j = 0; j < i; j++) {
+ page_size = &(priv->page_sizes[j]);
+ page_size->width = priv->uniform_width;
+ page_size->height = priv->uniform_height;
+ }
+ priv->uniform = FALSE;
+ }
+ if (!priv->uniform) {
+ page_size = &(priv->page_sizes[i]);
+
+ page_size->width = page_width;
+ page_size->height = page_height;
+
+ if (page_width > priv->max_width)
+ priv->max_width = page_width;
+ if (page_width < priv->min_width)
+ priv->min_width = page_width;
+
+ if (page_height > priv->max_height)
+ priv->max_height = page_height;
+ if (page_height < priv->min_height)
+ priv->min_height = page_height;
+ }
+
+ page_label = _ev_document_get_page_label (document, page);
+ if (page_label) {
+ if (!priv->page_labels)
+ priv->page_labels = g_new0 (gchar *, priv->n_pages);
+
+ priv->page_labels[i] = page_label;
+ priv->max_label = MAX (priv->max_label,
+ g_utf8_strlen (page_label, 256));
+ }
+
+ g_object_unref (page);
+ }
+
+ priv->info = _ev_document_get_info (document);
+ if (_ev_document_support_synctex (document)) {
+ gchar *filename;
+
+ filename = g_filename_from_uri (uri, NULL, NULL);
+ if (filename != NULL) {
+ priv->synctex_scanner =
+ synctex_scanner_new_with_output_file (filename, NULL, 1);
+ g_free (filename);
+ }
+ }
+ }
+
+ return retval;
+}
+
+/**
+ * ev_document_save:
+ * @document:
+ * @uri: the target URI
+ * @error: a #GError location to store an error, or %NULL
+ *
+ * Saves @document to @uri.
+ *
+ * Returns: %TRUE on success, or %FALSE on error with @error filled in
+ */
+gboolean
+ev_document_save (EvDocument *document,
+ const char *uri,
+ GError **error)
+{
+ EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document);
+
+ return klass->save (document, uri, error);
+}
+
+EvPage *
+ev_document_get_page (EvDocument *document,
+ gint index)
+{
+ EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document);
+
+ return klass->get_page (document, index);
+}
+
+static gboolean
+_ev_document_support_synctex (EvDocument *document)
+{
+ EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document);
+
+ return klass->support_synctex ? klass->support_synctex (document) : FALSE;
+}
+
+gboolean
+ev_document_has_synctex (EvDocument *document)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE);
+
+ return document->priv->synctex_scanner != NULL;
+}
+
+/**
+ * ev_document_synctex_backward_search:
+ * @document:
+ * @page: the target page
+ * @x:
+ * @y:
+ *
+ * Peforms a Synctex backward search to obtain the TeX input file, line and
+ * (possibly) column corresponding to the position (@x,@y) (in 72dpi
+ * coordinates) in the @page of @document.
+ *
+ * Returns: A pointer to the EvSourceLink structure that holds the result. @NULL if synctex
+ * is not enabled for the document or no result is found.
+ * The EvSourceLink pointer should be freed with g_free after it is used.
+ */
+EvSourceLink *
+ev_document_synctex_backward_search (EvDocument *document,
+ gint page_index,
+ gfloat x,
+ gfloat y)
+{
+ EvSourceLink *result = NULL;
+ synctex_scanner_t scanner;
+
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+
+ scanner = document->priv->synctex_scanner;
+ if (!scanner)
+ return NULL;
+
+ if (synctex_edit_query (scanner, page_index + 1, x, y) > 0) {
+ synctex_node_t node;
+
+ /* We assume that a backward search returns either zero or one result_node */
+ node = synctex_next_result (scanner);
+ if (node != NULL) {
+ result = g_new (EvSourceLink, 1);
+ result->filename = synctex_scanner_get_name (scanner,
+ synctex_node_tag (node));
+ result->line = synctex_node_line (node);
+ result->col = synctex_node_column (node);
+ }
+ }
+
+ return result;
+}
+
+/**
+ * ev_document_synctex_forward_search:
+ * @document:
+ * @source_link:
+ *
+ * Peforms a Synctex forward search to obtain the area in the document
+ * corresponding to the position @line and @column number in the source Tex file
+ *
+ * Returns: An EvMapping with the page number and area corresponfing to
+ * the given line in the source file. It must be free with g_free when done
+ */
+EvMapping *
+ev_document_synctex_forward_search (EvDocument *document,
+ EvSourceLink *link)
+{
+ EvMapping *result = NULL;
+ synctex_scanner_t scanner;
+
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+
+ scanner = document->priv->synctex_scanner;
+ if (!scanner)
+ return NULL;
+
+ if (synctex_display_query (scanner, link->filename, link->line, link->col) > 0) {
+ synctex_node_t node;
+ gint page;
+
+ if ((node = synctex_next_result (scanner))) {
+ result = g_new (EvMapping, 1);
+
+ page = synctex_node_page (node) - 1;
+ result->data = GINT_TO_POINTER (page);
+
+ result->area.x1 = synctex_node_box_visible_h (node);
+ result->area.y1 = synctex_node_box_visible_v (node) -
+ synctex_node_box_visible_height (node);
+ result->area.x2 = synctex_node_box_visible_width (node) + result->area.x1;
+ result->area.y2 = synctex_node_box_visible_depth (node) +
+ synctex_node_box_visible_height (node) + result->area.y1;
+ }
+ }
+
+ return result;
+}
+
+static gint
+_ev_document_get_n_pages (EvDocument *document)
+{
+ EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document);
+
+ return klass->get_n_pages (document);
+}
+
+gint
+ev_document_get_n_pages (EvDocument *document)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), 0);
+
+ return document->priv->n_pages;
+}
+
+static void
+_ev_document_get_page_size (EvDocument *document,
+ EvPage *page,
+ double *width,
+ double *height)
+{
+ EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document);
+
+ klass->get_page_size (document, page, width, height);
+}
+
+void
+ev_document_get_page_size (EvDocument *document,
+ gint page_index,
+ double *width,
+ double *height)
+{
+ g_return_if_fail (EV_IS_DOCUMENT (document));
+ g_return_if_fail (page_index >= 0 || page_index < document->priv->n_pages);
+
+ if (width)
+ *width = document->priv->uniform ?
+ document->priv->uniform_width :
+ document->priv->page_sizes[page_index].width;
+ if (height)
+ *height = document->priv->uniform ?
+ document->priv->uniform_height :
+ document->priv->page_sizes[page_index].height;
+}
+
+static gchar *
+_ev_document_get_page_label (EvDocument *document,
+ EvPage *page)
+{
+ EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document);
+
+ return klass->get_page_label ?
+ klass->get_page_label (document, page) : NULL;
+}
+
+gchar *
+ev_document_get_page_label (EvDocument *document,
+ gint page_index)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+ g_return_val_if_fail (page_index >= 0 || page_index < document->priv->n_pages, NULL);
+
+ return (document->priv->page_labels && document->priv->page_labels[page_index]) ?
+ g_strdup (document->priv->page_labels[page_index]) :
+ g_strdup_printf ("%d", page_index + 1);
+}
+
+static EvDocumentInfo *
+_ev_document_get_info (EvDocument *document)
+{
+ EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document);
+
+ return klass->get_info (document);
+}
+
+EvDocumentInfo *
+ev_document_get_info (EvDocument *document)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+
+ return document->priv->info;
+}
+
+gboolean
+ev_document_get_backend_info (EvDocument *document, EvDocumentBackendInfo *info)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE);
+
+ EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document);
+ if (klass->get_backend_info == NULL)
+ return FALSE;
+
+ return klass->get_backend_info (document, info);
+}
+
+cairo_surface_t *
+ev_document_render (EvDocument *document,
+ EvRenderContext *rc)
+{
+ EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document);
+
+ return klass->render (document, rc);
+}
+
+const gchar *
+ev_document_get_uri (EvDocument *document)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+
+ return document->priv->uri;
+}
+
+const gchar *
+ev_document_get_title (EvDocument *document)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+
+ return (document->priv->info->fields_mask & EV_DOCUMENT_INFO_TITLE) ?
+ document->priv->info->title : NULL;
+}
+
+gboolean
+ev_document_is_page_size_uniform (EvDocument *document)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), TRUE);
+
+ return document->priv->uniform;
+}
+
+void
+ev_document_get_max_page_size (EvDocument *document,
+ gdouble *width,
+ gdouble *height)
+{
+ g_return_if_fail (EV_IS_DOCUMENT (document));
+
+ if (width)
+ *width = document->priv->max_width;
+ if (height)
+ *height = document->priv->max_height;
+}
+
+void
+ev_document_get_min_page_size (EvDocument *document,
+ gdouble *width,
+ gdouble *height)
+{
+ g_return_if_fail (EV_IS_DOCUMENT (document));
+
+ if (width)
+ *width = document->priv->min_width;
+ if (height)
+ *height = document->priv->min_height;
+}
+
+gboolean
+ev_document_check_dimensions (EvDocument *document)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE);
+
+ return (document->priv->max_width > 0 && document->priv->max_height > 0);
+}
+
+gint
+ev_document_get_max_label_len (EvDocument *document)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), -1);
+
+ return document->priv->max_label;
+}
+
+gboolean
+ev_document_has_text_page_labels (EvDocument *document)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE);
+
+ return document->priv->page_labels != NULL;
+}
+
+gboolean
+ev_document_find_page_by_label (EvDocument *document,
+ const gchar *page_label,
+ gint *page_index)
+{
+ gint i, page;
+ glong value;
+ gchar *endptr = NULL;
+ EvDocumentPrivate *priv = document->priv;
+
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE);
+ g_return_val_if_fail (page_label != NULL, FALSE);
+ g_return_val_if_fail (page_index != NULL, FALSE);
+
+ /* First, look for a literal label match */
+ for (i = 0; priv->page_labels && i < priv->n_pages; i ++) {
+ if (priv->page_labels[i] != NULL &&
+ ! strcmp (page_label, priv->page_labels[i])) {
+ *page_index = i;
+ return TRUE;
+ }
+ }
+
+ /* Second, look for a match with case insensitively */
+ for (i = 0; priv->page_labels && i < priv->n_pages; i++) {
+ if (priv->page_labels[i] != NULL &&
+ ! strcasecmp (page_label, priv->page_labels[i])) {
+ *page_index = i;
+ return TRUE;
+ }
+ }
+
+ /* Next, parse the label, and see if the number fits */
+ value = strtol (page_label, &endptr, 10);
+ if (endptr[0] == '\0') {
+ /* Page number is an integer */
+ page = MIN (G_MAXINT, value);
+
+ /* convert from a page label to a page offset */
+ page --;
+ if (page >= 0 && page < priv->n_pages) {
+ *page_index = page;
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+/* EvDocumentInfo */
+EV_DEFINE_BOXED_TYPE (EvDocumentInfo, ev_document_info, ev_document_info_copy, ev_document_info_free)
+
+EvDocumentInfo *
+ev_document_info_copy (EvDocumentInfo *info)
+{
+ EvDocumentInfo *copy;
+
+ g_return_val_if_fail (info != NULL, NULL);
+
+ copy = g_new0 (EvDocumentInfo, 1);
+ copy->title = g_strdup (info->title);
+ copy->format = g_strdup (info->format);
+ copy->author = g_strdup (info->author);
+ copy->subject = g_strdup (info->subject);
+ copy->keywords = g_strdup (info->keywords);
+ copy->security = g_strdup (info->security);
+ copy->creator = g_strdup (info->creator);
+ copy->producer = g_strdup (info->producer);
+ copy->linearized = g_strdup (info->linearized);
+
+ copy->creation_date = info->creation_date;
+ copy->modified_date = info->modified_date;
+ copy->layout = info->layout;
+ copy->mode = info->mode;
+ copy->ui_hints = info->ui_hints;
+ copy->permissions = info->permissions;
+ copy->n_pages = info->n_pages;
+ copy->license = ev_document_license_copy (info->license);
+
+ copy->fields_mask = info->fields_mask;
+
+ return copy;
+}
+
+void
+ev_document_info_free (EvDocumentInfo *info)
+{
+ if (info == NULL)
+ return;
+
+ g_free (info->title);
+ g_free (info->format);
+ g_free (info->author);
+ g_free (info->subject);
+ g_free (info->keywords);
+ g_free (info->creator);
+ g_free (info->producer);
+ g_free (info->linearized);
+ g_free (info->security);
+ ev_document_license_free (info->license);
+
+ g_free (info);
+}
+
+/* EvDocumentLicense */
+EV_DEFINE_BOXED_TYPE (EvDocumentLicense, ev_document_license, ev_document_license_copy, ev_document_license_free)
+
+EvDocumentLicense *
+ev_document_license_new (void)
+{
+ return g_new0 (EvDocumentLicense, 1);
+}
+
+EvDocumentLicense *
+ev_document_license_copy (EvDocumentLicense *license)
+{
+ EvDocumentLicense *new_license;
+
+ if (!license)
+ return NULL;
+
+ new_license = ev_document_license_new ();
+
+ if (license->text)
+ new_license->text = g_strdup (license->text);
+ if (license->uri)
+ new_license->uri = g_strdup (license->uri);
+ if (license->web_statement)
+ new_license->web_statement = g_strdup (license->web_statement);
+
+ return new_license;
+}
+
+void
+ev_document_license_free (EvDocumentLicense *license)
+{
+ if (!license)
+ return;
+
+ g_free (license->text);
+ g_free (license->uri);
+ g_free (license->web_statement);
+
+ g_free (license);
+}
+
+const gchar *
+ev_document_license_get_text (EvDocumentLicense *license)
+{
+ return license->text;
+}
+
+const gchar *
+ev_document_license_get_uri (EvDocumentLicense *license)
+{
+ return license->uri;
+}
+
+const gchar *
+ev_document_license_get_web_statement (EvDocumentLicense *license)
+{
+ return license->web_statement;
+}
+
+/* EvRectangle */
+EV_DEFINE_BOXED_TYPE (EvRectangle, ev_rectangle, ev_rectangle_copy, ev_rectangle_free)
+
+EvRectangle *
+ev_rectangle_new (void)
+{
+ return g_new0 (EvRectangle, 1);
+}
+
+EvRectangle *
+ev_rectangle_copy (EvRectangle *rectangle)
+{
+ EvRectangle *new_rectangle;
+
+ g_return_val_if_fail (rectangle != NULL, NULL);
+
+ new_rectangle = g_new (EvRectangle, 1);
+ *new_rectangle = *rectangle;
+
+ return new_rectangle;
+}
+
+void
+ev_rectangle_free (EvRectangle *rectangle)
+{
+ g_free (rectangle);
+}
+
+/* Compares two rects. returns 0 if they're equal */
+#define EPSILON 0.0000001
+
+gint
+ev_rect_cmp (EvRectangle *a,
+ EvRectangle *b)
+{
+ if (a == b)
+ return 0;
+ if (a == NULL || b == NULL)
+ return 1;
+
+ return ! ((ABS (a->x1 - b->x1) < EPSILON) &&
+ (ABS (a->y1 - b->y1) < EPSILON) &&
+ (ABS (a->x2 - b->x2) < EPSILON) &&
+ (ABS (a->y2 - b->y2) < EPSILON));
+}
diff --git a/libdocument/ev-document.h b/libdocument/ev-document.h
new file mode 100644
index 00000000..a3fe0727
--- /dev/null
+++ b/libdocument/ev-document.h
@@ -0,0 +1,303 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2009 Carlos Garcia Campos
+ * Copyright (C) 2000-2003 Marco Pesenti Gritti
+ *
+ * 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, 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.
+ *
+ * $Id$
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_DOCUMENT_H
+#define EV_DOCUMENT_H
+
+#include <glib-object.h>
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <cairo.h>
+
+#include "ev-document-info.h"
+#include "ev-page.h"
+#include "ev-render-context.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_DOCUMENT (ev_document_get_type ())
+#define EV_DOCUMENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT, EvDocument))
+#define EV_DOCUMENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT, EvDocumentClass))
+#define EV_IS_DOCUMENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT))
+#define EV_IS_DOCUMENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT))
+#define EV_DOCUMENT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), EV_TYPE_DOCUMENT, EvDocumentClass))
+
+typedef struct _EvDocument EvDocument;
+typedef struct _EvDocumentClass EvDocumentClass;
+typedef struct _EvDocumentPrivate EvDocumentPrivate;
+
+#define EV_DOCUMENT_ERROR ev_document_error_quark ()
+#define EV_DOC_MUTEX_LOCK (ev_document_doc_mutex_lock ())
+#define EV_DOC_MUTEX_UNLOCK (ev_document_doc_mutex_unlock ())
+
+typedef enum
+{
+ EV_DOCUMENT_ERROR_INVALID,
+ EV_DOCUMENT_ERROR_ENCRYPTED
+} EvDocumentError;
+
+typedef struct {
+ double x;
+ double y;
+} EvPoint;
+
+typedef struct _EvRectangle EvRectangle;
+typedef struct _EvMapping EvMapping;
+
+typedef struct _EvDocumentBackendInfo EvDocumentBackendInfo;
+struct _EvDocumentBackendInfo
+{
+ const gchar *name;
+ const gchar *version;
+};
+
+typedef struct {
+ const gchar *filename;
+ gint line;
+ gint col;
+} EvSourceLink;
+
+struct _EvDocument
+{
+ GObject base;
+
+ EvDocumentPrivate *priv;
+};
+
+struct _EvDocumentClass
+{
+ GObjectClass base_class;
+
+ /* Virtual Methods */
+ gboolean (* load) (EvDocument *document,
+ const char *uri,
+ GError **error);
+ gboolean (* save) (EvDocument *document,
+ const char *uri,
+ GError **error);
+ gint (* get_n_pages) (EvDocument *document);
+ EvPage * (* get_page) (EvDocument *document,
+ gint index);
+ void (* get_page_size) (EvDocument *document,
+ EvPage *page,
+ double *width,
+ double *height);
+ gchar * (* get_page_label) (EvDocument *document,
+ EvPage *page);
+ cairo_surface_t * (* render) (EvDocument *document,
+ EvRenderContext *rc);
+ EvDocumentInfo * (* get_info) (EvDocument *document);
+ gboolean (* get_backend_info)(EvDocument *document,
+ EvDocumentBackendInfo *info);
+ gboolean (* support_synctex) (EvDocument *document);
+};
+
+GType ev_document_get_type (void) G_GNUC_CONST;
+GQuark ev_document_error_quark (void);
+
+/* Document mutex */
+GMutex *ev_document_get_doc_mutex (void);
+void ev_document_doc_mutex_lock (void);
+void ev_document_doc_mutex_unlock (void);
+gboolean ev_document_doc_mutex_trylock (void);
+
+/* FontConfig mutex */
+GMutex *ev_document_get_fc_mutex (void);
+void ev_document_fc_mutex_lock (void);
+void ev_document_fc_mutex_unlock (void);
+gboolean ev_document_fc_mutex_trylock (void);
+
+EvDocumentInfo *ev_document_get_info (EvDocument *document);
+gboolean ev_document_get_backend_info (EvDocument *document,
+ EvDocumentBackendInfo *info);
+gboolean ev_document_load (EvDocument *document,
+ const char *uri,
+ GError **error);
+gboolean ev_document_save (EvDocument *document,
+ const char *uri,
+ GError **error);
+gint ev_document_get_n_pages (EvDocument *document);
+EvPage *ev_document_get_page (EvDocument *document,
+ gint index);
+void ev_document_get_page_size (EvDocument *document,
+ gint page_index,
+ double *width,
+ double *height);
+gchar *ev_document_get_page_label (EvDocument *document,
+ gint page_index);
+cairo_surface_t *ev_document_render (EvDocument *document,
+ EvRenderContext *rc);
+const gchar *ev_document_get_uri (EvDocument *document);
+const gchar *ev_document_get_title (EvDocument *document);
+gboolean ev_document_is_page_size_uniform (EvDocument *document);
+void ev_document_get_max_page_size (EvDocument *document,
+ gdouble *width,
+ gdouble *height);
+void ev_document_get_min_page_size (EvDocument *document,
+ gdouble *width,
+ gdouble *height);
+gboolean ev_document_check_dimensions (EvDocument *document);
+gint ev_document_get_max_label_len (EvDocument *document);
+gboolean ev_document_has_text_page_labels (EvDocument *document);
+gboolean ev_document_find_page_by_label (EvDocument *document,
+ const gchar *page_label,
+ gint *page_index);
+gboolean ev_document_has_synctex (EvDocument *document);
+
+EvSourceLink *ev_document_synctex_backward_search
+ (EvDocument *document,
+ gint page_index,
+ gfloat x,
+ gfloat y);
+
+EvMapping *ev_document_synctex_forward_search
+ (EvDocument *document,
+ EvSourceLink *source_link);
+
+gint ev_rect_cmp (EvRectangle *a,
+ EvRectangle *b);
+
+#define EV_TYPE_RECTANGLE (ev_rectangle_get_type ())
+struct _EvRectangle
+{
+ gdouble x1;
+ gdouble y1;
+ gdouble x2;
+ gdouble y2;
+};
+
+GType ev_rectangle_get_type (void) G_GNUC_CONST;
+EvRectangle *ev_rectangle_new (void);
+EvRectangle *ev_rectangle_copy (EvRectangle *ev_rect);
+void ev_rectangle_free (EvRectangle *ev_rect);
+
+struct _EvMapping {
+ EvRectangle area;
+ gpointer data;
+};
+
+/* convenience macro to ease interface addition in the CODE
+ * section of EV_BACKEND_REGISTER_WITH_CODE (this macro relies on
+ * the g_define_type_id present within EV_BACKEND_REGISTER_WITH_CODE()).
+ * usage example:
+ * EV_BACKEND_REGISTER_WITH_CODE (PdfDocument, pdf_document,
+ * EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
+ * pdf_document_document_thumbnails_iface_init));
+ */
+#define EV_BACKEND_IMPLEMENT_INTERFACE(TYPE_IFACE, iface_init) { \
+ const GInterfaceInfo g_implement_interface_info = { \
+ (GInterfaceInitFunc) iface_init, NULL, NULL \
+ }; \
+ g_type_module_add_interface (module, \
+ g_define_type_id, \
+ TYPE_IFACE, \
+ &g_implement_interface_info); \
+}
+
+/*
+ * Utility macro used to register backends
+ *
+ * use: EV_BACKEND_REGISTER_WITH_CODE(BackendName, backend_name, CODE)
+ */
+#define EV_BACKEND_REGISTER_WITH_CODE(BackendName, backend_name, CODE) \
+ \
+static GType g_define_type_id = 0; \
+ \
+GType \
+backend_name##_get_type (void) \
+{ \
+ return g_define_type_id; \
+} \
+ \
+static void backend_name##_init (BackendName *self); \
+static void backend_name##_class_init (BackendName##Class *klass); \
+static gpointer backend_name##_parent_class = NULL; \
+static void backend_name##_class_intern_init (gpointer klass) \
+{ \
+ backend_name##_parent_class = g_type_class_peek_parent (klass); \
+ backend_name##_class_init ((BackendName##Class *) klass); \
+} \
+ \
+G_MODULE_EXPORT GType \
+register_evince_backend (GTypeModule *module) \
+{ \
+ const GTypeInfo our_info = { \
+ sizeof (BackendName##Class), \
+ NULL, /* base_init */ \
+ NULL, /* base_finalize */ \
+ (GClassInitFunc) backend_name##_class_intern_init, \
+ NULL, \
+ NULL, /* class_data */ \
+ sizeof (BackendName), \
+ 0, /* n_preallocs */ \
+ (GInstanceInitFunc) backend_name##_init \
+ }; \
+ \
+ /* Initialise the i18n stuff */ \
+ bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR); \
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); \
+ \
+ g_define_type_id = g_type_module_register_type (module, \
+ EV_TYPE_DOCUMENT, \
+ #BackendName, \
+ &our_info, \
+ (GTypeFlags)0); \
+ \
+ CODE \
+ \
+ return g_define_type_id; \
+}
+
+/*
+ * Utility macro used to register backend
+ *
+ * use: EV_BACKEND_REGISTER(BackendName, backend_name)
+ */
+#define EV_BACKEND_REGISTER(BackendName, backend_name) \
+ EV_BACKEND_REGISTER_WITH_CODE(BackendName, backend_name, ;)
+
+/*
+ * A convenience macro for boxed type implementations, which defines a
+ * type_name_get_type() function registering the boxed type.
+ */
+#define EV_DEFINE_BOXED_TYPE(TypeName, type_name, copy_func, free_func) \
+GType \
+type_name##_get_type (void) \
+{ \
+ static volatile gsize g_define_type_id__volatile = 0; \
+ if (g_once_init_enter (&g_define_type_id__volatile)) { \
+ GType g_define_type_id = \
+ g_boxed_type_register_static (g_intern_static_string (#TypeName), \
+ (GBoxedCopyFunc) copy_func, \
+ (GBoxedFreeFunc) free_func); \
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
+ } \
+ return g_define_type_id__volatile; \
+}
+
+G_END_DECLS
+
+#endif /* EV_DOCUMENT_H */
diff --git a/libdocument/ev-file-exporter.c b/libdocument/ev-file-exporter.c
new file mode 100644
index 00000000..c6ca7e12
--- /dev/null
+++ b/libdocument/ev-file-exporter.c
@@ -0,0 +1,84 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Martin Kretzschmar
+ *
+ * Author:
+ * Martin Kretzschmar <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+#include "ev-file-exporter.h"
+#include "ev-document.h"
+
+G_DEFINE_INTERFACE (EvFileExporter, ev_file_exporter, 0)
+
+static void
+ev_file_exporter_default_init (EvFileExporterInterface *klass)
+{
+}
+
+void
+ev_file_exporter_begin (EvFileExporter *exporter,
+ EvFileExporterContext *fc)
+{
+ EvFileExporterInterface *iface = EV_FILE_EXPORTER_GET_IFACE (exporter);
+
+ iface->begin (exporter, fc);
+}
+
+void
+ev_file_exporter_begin_page (EvFileExporter *exporter)
+{
+ EvFileExporterInterface *iface = EV_FILE_EXPORTER_GET_IFACE (exporter);
+
+ if (iface->begin_page)
+ iface->begin_page (exporter);
+}
+
+void
+ev_file_exporter_do_page (EvFileExporter *exporter,
+ EvRenderContext *rc)
+{
+ EvFileExporterInterface *iface = EV_FILE_EXPORTER_GET_IFACE (exporter);
+
+ iface->do_page (exporter, rc);
+}
+
+void
+ev_file_exporter_end_page (EvFileExporter *exporter)
+{
+ EvFileExporterInterface *iface = EV_FILE_EXPORTER_GET_IFACE (exporter);
+
+ if (iface->end_page)
+ iface->end_page (exporter);
+}
+
+void
+ev_file_exporter_end (EvFileExporter *exporter)
+{
+ EvFileExporterInterface *iface = EV_FILE_EXPORTER_GET_IFACE (exporter);
+
+ iface->end (exporter);
+}
+
+EvFileExporterCapabilities
+ev_file_exporter_get_capabilities (EvFileExporter *exporter)
+{
+ EvFileExporterInterface *iface = EV_FILE_EXPORTER_GET_IFACE (exporter);
+
+ return iface->get_capabilities (exporter);
+}
diff --git a/libdocument/ev-file-exporter.h b/libdocument/ev-file-exporter.h
new file mode 100644
index 00000000..b1434e4d
--- /dev/null
+++ b/libdocument/ev-file-exporter.h
@@ -0,0 +1,101 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Martin Kretzschmar
+ *
+ * Author:
+ * Martin Kretzschmar <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_FILE_EXPORTER_H
+#define EV_FILE_EXPORTER_H
+
+#include <glib-object.h>
+
+#include "ev-render-context.h"
+
+G_BEGIN_DECLS
+
+typedef enum {
+ EV_FILE_FORMAT_UNKNOWN,
+ EV_FILE_FORMAT_PS,
+ EV_FILE_FORMAT_PDF
+} EvFileExporterFormat;
+
+typedef enum {
+ EV_FILE_EXPORTER_CAN_PAGE_SET = 1 << 0,
+ EV_FILE_EXPORTER_CAN_COPIES = 1 << 1,
+ EV_FILE_EXPORTER_CAN_COLLATE = 1 << 2,
+ EV_FILE_EXPORTER_CAN_REVERSE = 1 << 3,
+ EV_FILE_EXPORTER_CAN_SCALE = 1 << 4,
+ EV_FILE_EXPORTER_CAN_GENERATE_PDF = 1 << 5,
+ EV_FILE_EXPORTER_CAN_GENERATE_PS = 1 << 6,
+ EV_FILE_EXPORTER_CAN_PREVIEW = 1 << 7,
+ EV_FILE_EXPORTER_CAN_NUMBER_UP = 1 << 8
+} EvFileExporterCapabilities;
+
+typedef struct {
+ EvFileExporterFormat format;
+ const gchar *filename;
+ gint first_page;
+ gint last_page;
+ gdouble paper_width;
+ gdouble paper_height;
+ gboolean duplex;
+ gint pages_per_sheet;
+} EvFileExporterContext;
+
+#define EV_TYPE_FILE_EXPORTER (ev_file_exporter_get_type ())
+#define EV_FILE_EXPORTER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_FILE_EXPORTER, EvFileExporter))
+#define EV_FILE_EXPORTER_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_FILE_EXPORTER, EvFileExporterInterface))
+#define EV_IS_FILE_EXPORTER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_FILE_EXPORTER))
+#define EV_IS_FILE_EXPORTER_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_FILE_EXPORTER))
+#define EV_FILE_EXPORTER_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_FILE_EXPORTER, EvFileExporterInterface))
+
+typedef struct _EvFileExporter EvFileExporter;
+typedef struct _EvFileExporterInterface EvFileExporterInterface;
+
+struct _EvFileExporterInterface {
+ GTypeInterface base_iface;
+
+ /* Methods */
+ void (* begin) (EvFileExporter *exporter,
+ EvFileExporterContext *fc);
+ void (* begin_page) (EvFileExporter *exporter);
+ void (* do_page) (EvFileExporter *exporter,
+ EvRenderContext *rc);
+ void (* end_page) (EvFileExporter *exporter);
+ void (* end) (EvFileExporter *exporter);
+ EvFileExporterCapabilities (* get_capabilities) (EvFileExporter *exporter);
+};
+
+GType ev_file_exporter_get_type (void) G_GNUC_CONST;
+void ev_file_exporter_begin (EvFileExporter *exporter,
+ EvFileExporterContext *fc);
+void ev_file_exporter_begin_page (EvFileExporter *exporter);
+void ev_file_exporter_do_page (EvFileExporter *exporter,
+ EvRenderContext *rc);
+void ev_file_exporter_end_page (EvFileExporter *exporter);
+void ev_file_exporter_end (EvFileExporter *exporter);
+EvFileExporterCapabilities ev_file_exporter_get_capabilities (EvFileExporter *exporter);
+
+G_END_DECLS
+
+#endif
diff --git a/libdocument/ev-file-helpers.c b/libdocument/ev-file-helpers.c
new file mode 100644
index 00000000..b6ecb244
--- /dev/null
+++ b/libdocument/ev-file-helpers.c
@@ -0,0 +1,683 @@
+/*
+ * Copyright (C) 2002 Jorn Baayen
+ * Copyright © 2009 Christian Persch
+ *
+ * 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, 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 <config.h>
+
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <glib/gi18n-lib.h>
+
+#include "ev-file-helpers.h"
+
+static gchar *tmp_dir = NULL;
+
+/*
+ * ev_dir_ensure_exists:
+ * @dir: the directory name
+ * @mode: permissions to use when creating the directory
+ * @error: a location to store a #GError
+ *
+ * Create @dir recursively with permissions @mode.
+ *
+ * Returns: %TRUE on success, or %FALSE on error with @error filled in
+ */
+static gboolean
+_ev_dir_ensure_exists (const gchar *dir,
+ int mode,
+ GError **error)
+{
+ int errsv;
+ char *display_name;
+
+ g_return_val_if_fail (dir != NULL, FALSE);
+
+ errno = 0;
+ if (g_mkdir_with_parents (dir, mode) == 0)
+ return TRUE;
+
+ errsv = errno;
+ if (errsv == EEXIST && g_file_test (dir, G_FILE_TEST_IS_DIR))
+ return TRUE;
+
+ display_name = g_filename_display_name (dir);
+ g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ "Failed to create directory '%s': %s",
+ display_name, g_strerror (errsv));
+ g_free (display_name);
+
+ return FALSE;
+}
+
+/*
+ * _ev_tmp_dir:
+ * @error: a location to store a #GError
+ *
+ * Returns the tmp directory.
+ *
+ * Returns: the tmp directory, or %NULL with @error filled in if the
+ * directory could not be created
+ */
+static const char *
+_ev_tmp_dir (GError **error)
+{
+
+ if (tmp_dir == NULL) {
+ gchar *dirname, *prgname;
+
+ prgname = g_get_prgname ();
+ dirname = g_strdup_printf ("%s-%u", prgname ? prgname : "unknown", getpid ());
+ tmp_dir = g_build_filename (g_get_tmp_dir (), dirname, NULL);
+ g_free (dirname);
+ }
+
+ if (!_ev_dir_ensure_exists (tmp_dir, 0700, error))
+ return NULL;
+
+ return tmp_dir;
+}
+
+void
+_ev_file_helpers_init (void)
+{
+}
+
+void
+_ev_file_helpers_shutdown (void)
+{
+ if (tmp_dir != NULL)
+ g_rmdir (tmp_dir);
+
+ g_free (tmp_dir);
+ tmp_dir = NULL;
+}
+
+/**
+ * ev_mkstemp:
+ * @template: a template string; must contain 'XXXXXX', but not necessarily as a suffix
+ * @file_name: a location to store the filename of the temp file
+ * @error: a location to store a #GError
+ *
+ * Creates a temp file in the evince temp directory.
+ *
+ * Returns: a file descriptor to the newly created temp file name, or %-1
+ * on error with @error filled in
+ */
+int
+ev_mkstemp (const char *template,
+ char **file_name,
+ GError **error)
+{
+ const char *tmp;
+ char *name;
+ int fd;
+
+ if ((tmp = _ev_tmp_dir (error)) == NULL)
+ return -1;
+
+ name = g_build_filename (tmp, template, NULL);
+ fd = g_mkstemp (name);
+
+ if (fd == -1) {
+ int errsv = errno;
+
+ g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ _("Failed to create a temporary file: %s"),
+ g_strerror (errsv));
+
+ g_free (name);
+ return -1;
+ }
+
+ if (file_name)
+ *file_name = name;
+
+ return fd;
+}
+
+static void
+close_fd_cb (gpointer fdptr)
+{
+ int fd = GPOINTER_TO_INT (fdptr);
+
+ close (fd);
+}
+
+/**
+ * ev_mkstemp_file:
+ * @template: a template string; must contain 'XXXXXX', but not necessarily as a suffix
+ * @error: a location to store a #GError
+ *
+ * Creates a temp #GFile in the evince temp directory. See ev_mkstemp() for more information.
+ *
+ * Returns: a newly allocated #GFile for the newly created temp file name, or %NULL
+ * on error with @error filled in
+ */
+GFile *
+ev_mkstemp_file (const char *template,
+ GError **error)
+{
+ char *file_name;
+ int fd;
+ GFile *file;
+
+ fd = ev_mkstemp (template, &file_name, error);
+ if (fd == -1)
+ return NULL;
+
+ file = g_file_new_for_path (file_name);
+ g_free (file_name);
+
+ g_object_set_data_full (G_OBJECT (file), "ev-mkstemp-fd",
+ GINT_TO_POINTER (fd), (GDestroyNotify) close_fd_cb);
+
+ return file;
+}
+
+/**
+ * This function is copied from
+ * http://bugzilla.mate.org/show_bug.cgi?id=524831
+ * and renamed from g_mkdtemp to _ev_g_mkdtemp.
+ *
+ * If/when this function gets added to glib, it can be removed from
+ * evince' sources.
+ *
+ *
+ * g_mkdtemp:
+ * @tmpl: template directory name
+ *
+ * Creates a temporary directory. See the mkdtemp() documentation
+ * on most UNIX-like systems.
+ *
+ * The parameter is a string that should follow the rules for
+ * mkdtemp() templates, i.e. contain the string "XXXXXX". g_mkdtemp()
+ * is slightly more flexible than mkdtemp() in that the sequence does
+ * not have to occur at the very end of the template. The X string
+ * will be modified to form the name of a directory that didn't
+ * already exist. The string should be in the GLib file name
+ * encoding. Most importantly, on Windows it should be in UTF-8.
+ *
+ * Return value: If a temporary directory was successfully created,
+ * @tmpl will be returned with the XXXXXX string modified in such a
+ * way as to make the path unique. In case of errors, %NULL is
+ * returned.
+ */
+static gchar *
+_ev_g_mkdtemp (gchar *tmpl)
+{
+ static const char letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+ static const int NLETTERS = sizeof (letters) - 1;
+ static int counter = 0;
+ char *XXXXXX;
+ GTimeVal tv;
+ glong value;
+ int count;
+
+ /* find the last occurrence of "XXXXXX" */
+ XXXXXX = g_strrstr (tmpl, "XXXXXX");
+
+ if (!XXXXXX || strncmp (XXXXXX, "XXXXXX", 6))
+ {
+ errno = EINVAL;
+ return NULL;
+ }
+
+ /* Get some more or less random data. */
+ g_get_current_time (&tv);
+ value = (tv.tv_usec ^ tv.tv_sec) + counter++;
+
+ for (count = 0; count < 100; value += 7777, ++count)
+ {
+ glong v = value;
+
+ /* Fill in the random bits. */
+ XXXXXX[0] = letters[v % NLETTERS];
+ v /= NLETTERS;
+ XXXXXX[1] = letters[v % NLETTERS];
+ v /= NLETTERS;
+ XXXXXX[2] = letters[v % NLETTERS];
+ v /= NLETTERS;
+ XXXXXX[3] = letters[v % NLETTERS];
+ v /= NLETTERS;
+ XXXXXX[4] = letters[v % NLETTERS];
+ v /= NLETTERS;
+ XXXXXX[5] = letters[v % NLETTERS];
+
+ /* tmpl is in UTF-8 on Windows, thus use g_mkdir() */
+ if (g_mkdir (tmpl, 0700) == 0)
+ return tmpl;
+
+ if (errno != EEXIST)
+ /* Any other error will apply also to other names we might
+ * try, and there are 2^32 or so of them, so give up now.
+ */
+ return NULL;
+ }
+
+ /* We got out of the loop because we ran out of combinations to try. */
+ errno = EEXIST;
+ return NULL;
+}
+
+/**
+ * ev_mkdtemp:
+ * @template: a template string; must end in 'XXXXXX'
+ * @error: a location to store a #GError
+ *
+ * Creates a temp directory in the evince temp directory.
+ *
+ * Returns: a newly allocated string with the temp directory name, or %NULL
+ * on error with @error filled in
+ */
+gchar *
+ev_mkdtemp (const char *template,
+ GError **error)
+{
+ const char *tmp;
+ char *name;
+
+ if ((tmp = _ev_tmp_dir (error)) == NULL)
+ return NULL;
+
+ name = g_build_filename (tmp, template, NULL);
+ if (_ev_g_mkdtemp (name) == NULL) {
+ int errsv = errno;
+
+ g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv),
+ _("Failed to create a temporary directory: %s"),
+ g_strerror (errsv));
+
+ g_free (name);
+ return NULL;
+ }
+
+ return name;
+}
+
+/* Remove a local temp file created by evince */
+void
+ev_tmp_filename_unlink (const gchar *filename)
+{
+ if (!filename)
+ return;
+
+ if (!tmp_dir)
+ return;
+
+ if (g_str_has_prefix (filename, tmp_dir)) {
+ g_unlink (filename);
+ }
+}
+
+void
+ev_tmp_file_unlink (GFile *file)
+{
+ gboolean res;
+ GError *error = NULL;
+
+ if (!file)
+ return;
+
+ res = g_file_delete (file, NULL, &error);
+ if (!res) {
+ char *uri;
+
+ uri = g_file_get_uri (file);
+ g_warning ("Unable to delete temp file %s: %s\n", uri, error->message);
+ g_free (uri);
+ g_error_free (error);
+ }
+}
+
+void
+ev_tmp_uri_unlink (const gchar *uri)
+{
+ GFile *file;
+
+ if (!uri)
+ return;
+
+ file = g_file_new_for_uri (uri);
+ if (!g_file_is_native (file)) {
+ g_warning ("Attempting to delete non native uri: %s\n", uri);
+ g_object_unref (file);
+ return;
+ }
+
+ ev_tmp_file_unlink (file);
+ g_object_unref (file);
+}
+
+gboolean
+ev_file_is_temp (GFile *file)
+{
+ gchar *path;
+ gboolean retval;
+
+ if (!g_file_is_native (file))
+ return FALSE;
+
+ path = g_file_get_path (file);
+ if (!path)
+ return FALSE;
+
+ retval = g_str_has_prefix (path, g_get_tmp_dir ());
+ g_free (path);
+
+ return retval;
+}
+
+/**
+ * ev_xfer_uri_simple:
+ * @from: the source URI
+ * @to: the target URI
+ * @error: a #GError location to store an error, or %NULL
+ *
+ * Performs a g_file_copy() from @from to @to.
+ *
+ * Returns: %TRUE on success, or %FALSE on error with @error filled in
+ */
+gboolean
+ev_xfer_uri_simple (const char *from,
+ const char *to,
+ GError **error)
+{
+ GFile *source_file;
+ GFile *target_file;
+ gboolean result;
+
+ if (!from)
+ return TRUE;
+
+ g_return_val_if_fail (to != NULL, TRUE);
+
+ source_file = g_file_new_for_uri (from);
+ target_file = g_file_new_for_uri (to);
+
+ result = g_file_copy (source_file, target_file,
+ G_FILE_COPY_TARGET_DEFAULT_PERMS |
+ G_FILE_COPY_OVERWRITE,
+ NULL, NULL, NULL, error);
+
+ g_object_unref (target_file);
+ g_object_unref (source_file);
+
+ return result;
+}
+
+static gchar *
+get_mime_type_from_uri (const gchar *uri, GError **error)
+{
+ GFile *file;
+ GFileInfo *file_info;
+ const gchar *content_type;
+ gchar *mime_type = NULL;
+
+ file = g_file_new_for_uri (uri);
+ file_info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
+ 0, NULL, error);
+ g_object_unref (file);
+
+ if (file_info == NULL)
+ return NULL;
+
+ content_type = g_file_info_get_content_type (file_info);
+ if (content_type) {
+ mime_type = g_content_type_get_mime_type (content_type);
+ }
+
+ g_object_unref (file_info);
+ return mime_type;
+}
+
+static gchar *
+get_mime_type_from_data (const gchar *uri, GError **error)
+{
+#ifndef G_OS_WIN32
+ GFile *file;
+ GFileInputStream *input_stream;
+ gssize size_read;
+ guchar buffer[1024];
+ gboolean retval;
+ gchar *content_type, *mime_type;
+
+ file = g_file_new_for_uri (uri);
+
+ input_stream = g_file_read (file, NULL, error);
+ if (!input_stream) {
+ g_object_unref (file);
+ return NULL;
+ }
+
+ size_read = g_input_stream_read (G_INPUT_STREAM (input_stream),
+ buffer, sizeof (buffer), NULL, error);
+ if (size_read == -1) {
+ g_object_unref (input_stream);
+ g_object_unref (file);
+ return NULL;
+ }
+
+ retval = g_input_stream_close (G_INPUT_STREAM (input_stream), NULL, error);
+
+ g_object_unref (input_stream);
+ g_object_unref (file);
+ if (!retval)
+ return NULL;
+
+ content_type = g_content_type_guess (NULL, /* no filename */
+ buffer, size_read,
+ NULL);
+ if (!content_type)
+ return NULL;
+
+ mime_type = g_content_type_get_mime_type (content_type);
+ g_free (content_type);
+ return mime_type;
+#else
+ /*
+ * On Windows, the implementation of g_content_type_guess() is too limited at the moment, so we do not
+ * use it and fall back to get_mime_type_from_uri()
+ */
+ return get_mime_type_from_uri (uri, error);
+#endif /* G_OS_WIN32 */
+}
+
+/**
+ * ev_file_get_mime_type:
+ * @uri: the URI
+ * @fast: whether to use fast MIME type detection
+ * @error: a #GError location to store an error, or %NULL
+ *
+ * Note: on unknown MIME types, this may return NULL without @error
+ * being filled in.
+ *
+ * Returns: a newly allocated string with the MIME type of the file at
+ * @uri, or %NULL on error or if the MIME type could not be determined
+ */
+gchar *
+ev_file_get_mime_type (const gchar *uri,
+ gboolean fast,
+ GError **error)
+{
+ return fast ? get_mime_type_from_uri (uri, error) : get_mime_type_from_data (uri, error);
+}
+
+/* Compressed files support */
+#define BZIPCOMMAND "bzip2"
+#define GZIPCOMMAND "gzip"
+#define N_ARGS 4
+#define BUFFER_SIZE 1024
+
+static gchar *
+compression_run (const gchar *uri,
+ EvCompressionType type,
+ gboolean compress,
+ GError **error)
+{
+ gchar *argv[N_ARGS];
+ gchar *uri_dst = NULL;
+ gchar *filename, *filename_dst = NULL;
+ gchar *cmd;
+ gint fd, pout;
+ GError *err = NULL;
+
+ if (type == EV_COMPRESSION_NONE)
+ return NULL;
+
+ cmd = g_find_program_in_path ((type == EV_COMPRESSION_BZIP2) ? BZIPCOMMAND : GZIPCOMMAND);
+ if (!cmd) {
+ /* FIXME: better error codes! */
+ /* FIXME: i18n later */
+ g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
+ "Failed to find the \"%s\" command in the search path.",
+ type == EV_COMPRESSION_BZIP2 ? BZIPCOMMAND : GZIPCOMMAND);
+ return NULL;
+ }
+
+ filename = g_filename_from_uri (uri, NULL, error);
+ if (!filename) {
+ g_free (cmd);
+ return NULL;
+ }
+
+ fd = ev_mkstemp ("comp.XXXXXX", &filename_dst, error);
+ if (fd == -1) {
+ g_free (cmd);
+ g_free (filename);
+
+ return NULL;
+ }
+
+ argv[0] = cmd;
+ argv[1] = compress ? "-c" : "-cd";
+ argv[2] = filename;
+ argv[3] = NULL;
+
+ if (g_spawn_async_with_pipes (NULL, argv, NULL,
+ G_SPAWN_STDERR_TO_DEV_NULL,
+ NULL, NULL, NULL,
+ NULL, &pout, NULL, &err)) {
+ GIOChannel *in, *out;
+ gchar buf[BUFFER_SIZE];
+ GIOStatus read_st, write_st;
+ gsize bytes_read, bytes_written;
+
+ in = g_io_channel_unix_new (pout);
+ g_io_channel_set_encoding (in, NULL, NULL);
+ out = g_io_channel_unix_new (fd);
+ g_io_channel_set_encoding (out, NULL, NULL);
+
+ do {
+ read_st = g_io_channel_read_chars (in, buf,
+ BUFFER_SIZE,
+ &bytes_read,
+ error);
+ if (read_st == G_IO_STATUS_NORMAL) {
+ write_st = g_io_channel_write_chars (out, buf,
+ bytes_read,
+ &bytes_written,
+ error);
+ if (write_st == G_IO_STATUS_ERROR)
+ break;
+ } else if (read_st == G_IO_STATUS_ERROR) {
+ break;
+ }
+ } while (bytes_read > 0);
+
+ g_io_channel_unref (in);
+ g_io_channel_unref (out);
+ }
+
+ close (fd);
+
+ if (err) {
+ g_propagate_error (error, err);
+ } else {
+ uri_dst = g_filename_to_uri (filename_dst, NULL, error);
+ }
+
+ g_free (cmd);
+ g_free (filename);
+ g_free (filename_dst);
+
+ return uri_dst;
+}
+
+/**
+ * ev_file_uncompress:
+ * @uri: a file URI
+ * @type: the compression type
+ * @error: a #GError location to store an error, or %NULL
+ *
+ * Uncompresses the file at @uri.
+ *
+ * If @type is %EV_COMPRESSION_NONE, it does nothing and returns %NULL.
+ *
+ * Otherwise, it returns the filename of a
+ * temporary file containing the decompressed data from the file at @uri.
+ * On error it returns %NULL and fills in @error.
+ *
+ * It is the caller's responsibility to unlink the temp file after use.
+ *
+ * Returns: a newly allocated string URI, or %NULL on error
+ */
+gchar *
+ev_file_uncompress (const gchar *uri,
+ EvCompressionType type,
+ GError **error)
+{
+ g_return_val_if_fail (uri != NULL, NULL);
+
+ return compression_run (uri, type, FALSE, error);
+}
+
+/**
+ * ev_file_compress:
+ * @uri: a file URI
+ * @type: the compression type
+ * @error: a #GError location to store an error, or %NULL
+ *
+ * Compresses the file at @uri.
+
+ * If @type is %EV_COMPRESSION_NONE, it does nothing and returns %NULL.
+ *
+ * Otherwise, it returns the filename of a
+ * temporary file containing the compressed data from the file at @uri.
+ *
+ * On error it returns %NULL and fills in @error.
+ *
+ * It is the caller's responsibility to unlink the temp file after use.
+ *
+ * Returns: a newly allocated string URI, or %NULL on error
+ */
+gchar *
+ev_file_compress (const gchar *uri,
+ EvCompressionType type,
+ GError **error)
+{
+ g_return_val_if_fail (uri != NULL, NULL);
+
+ return compression_run (uri, type, TRUE, error);
+}
diff --git a/libdocument/ev-file-helpers.h b/libdocument/ev-file-helpers.h
new file mode 100644
index 00000000..fffae03f
--- /dev/null
+++ b/libdocument/ev-file-helpers.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2002 Jorn Baayen
+ *
+ * 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, 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.
+ *
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_FILE_HELPERS_H
+#define EV_FILE_HELPERS_H
+
+#include <glib.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+typedef enum {
+ EV_COMPRESSION_NONE,
+ EV_COMPRESSION_BZIP2,
+ EV_COMPRESSION_GZIP
+} EvCompressionType;
+
+void _ev_file_helpers_init (void);
+
+void _ev_file_helpers_shutdown (void);
+
+int ev_mkstemp (const char *template,
+ char **file_name,
+ GError **error);
+GFile *ev_mkstemp_file (const char *template,
+ GError **error);
+gchar *ev_mkdtemp (const char *template,
+ GError **error);
+void ev_tmp_filename_unlink (const gchar *filename);
+void ev_tmp_file_unlink (GFile *file);
+void ev_tmp_uri_unlink (const gchar *uri);
+gboolean ev_file_is_temp (GFile *file);
+gboolean ev_xfer_uri_simple (const char *from,
+ const char *to,
+ GError **error);
+
+gchar *ev_file_get_mime_type (const gchar *uri,
+ gboolean fast,
+ GError **error);
+
+gchar *ev_file_uncompress (const gchar *uri,
+ EvCompressionType type,
+ GError **error);
+gchar *ev_file_compress (const gchar *uri,
+ EvCompressionType type,
+ GError **error);
+
+
+G_END_DECLS
+
+#endif /* EV_FILE_HELPERS_H */
diff --git a/libdocument/ev-form-field.c b/libdocument/ev-form-field.c
new file mode 100644
index 00000000..7bea0035
--- /dev/null
+++ b/libdocument/ev-form-field.c
@@ -0,0 +1,209 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2006 Julien Rebetez
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+#include "ev-form-field.h"
+
+static void ev_form_field_init (EvFormField *field);
+static void ev_form_field_class_init (EvFormFieldClass *klass);
+static void ev_form_field_text_init (EvFormFieldText *field_text);
+static void ev_form_field_text_class_init (EvFormFieldTextClass *klass);
+static void ev_form_field_button_init (EvFormFieldButton *field_button);
+static void ev_form_field_button_class_init (EvFormFieldButtonClass *klass);
+static void ev_form_field_choice_init (EvFormFieldChoice *field_choice);
+static void ev_form_field_choice_class_init (EvFormFieldChoiceClass *klass);
+static void ev_form_field_signature_init (EvFormFieldSignature *field_choice);
+static void ev_form_field_signature_class_init (EvFormFieldSignatureClass *klass);
+
+G_DEFINE_ABSTRACT_TYPE (EvFormField, ev_form_field, G_TYPE_OBJECT)
+G_DEFINE_TYPE (EvFormFieldText, ev_form_field_text, EV_TYPE_FORM_FIELD)
+G_DEFINE_TYPE (EvFormFieldButton, ev_form_field_button, EV_TYPE_FORM_FIELD)
+G_DEFINE_TYPE (EvFormFieldChoice, ev_form_field_choice, EV_TYPE_FORM_FIELD)
+G_DEFINE_TYPE (EvFormFieldSignature, ev_form_field_signature, EV_TYPE_FORM_FIELD)
+
+static void
+ev_form_field_init (EvFormField *field)
+{
+ field->page = NULL;
+ field->changed = FALSE;
+ field->is_read_only = FALSE;
+}
+
+static void
+ev_form_field_finalize (GObject *object)
+{
+ EvFormField *field = EV_FORM_FIELD (object);
+
+ g_object_unref (field->page);
+ field->page = NULL;
+
+ (* G_OBJECT_CLASS (ev_form_field_parent_class)->finalize) (object);
+}
+
+static void
+ev_form_field_class_init (EvFormFieldClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = ev_form_field_finalize;
+}
+
+static void
+ev_form_field_text_finalize (GObject *object)
+{
+ EvFormFieldText *field_text = EV_FORM_FIELD_TEXT (object);
+
+ if (field_text->text) {
+ g_free (field_text->text);
+ field_text->text = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_form_field_text_parent_class)->finalize) (object);
+}
+
+static void
+ev_form_field_text_init (EvFormFieldText *field_text)
+{
+}
+
+static void
+ev_form_field_text_class_init (EvFormFieldTextClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = ev_form_field_text_finalize;
+}
+
+static void
+ev_form_field_button_init (EvFormFieldButton *field_button)
+{
+}
+
+static void
+ev_form_field_button_class_init (EvFormFieldButtonClass *klass)
+{
+}
+
+static void
+ev_form_field_choice_finalize (GObject *object)
+{
+ EvFormFieldChoice *field_choice = EV_FORM_FIELD_CHOICE (object);
+
+ if (field_choice->selected_items) {
+ g_list_free (field_choice->selected_items);
+ field_choice->selected_items = NULL;
+ }
+
+ if (field_choice->text) {
+ g_free (field_choice->text);
+ field_choice->text = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_form_field_choice_parent_class)->finalize) (object);
+}
+
+static void
+ev_form_field_choice_init (EvFormFieldChoice *field_choice)
+{
+}
+
+static void
+ev_form_field_choice_class_init (EvFormFieldChoiceClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = ev_form_field_choice_finalize;
+}
+
+static void
+ev_form_field_signature_init (EvFormFieldSignature *field_signature)
+{
+}
+
+static void
+ev_form_field_signature_class_init (EvFormFieldSignatureClass *klass)
+{
+}
+
+EvFormField *
+ev_form_field_text_new (gint id,
+ EvFormFieldTextType type)
+{
+ EvFormField *field;
+
+ g_return_val_if_fail (id >= 0, NULL);
+ g_return_val_if_fail (type >= EV_FORM_FIELD_TEXT_NORMAL &&
+ type <= EV_FORM_FIELD_TEXT_FILE_SELECT, NULL);
+
+ field = EV_FORM_FIELD (g_object_new (EV_TYPE_FORM_FIELD_TEXT, NULL));
+ field->id = id;
+ EV_FORM_FIELD_TEXT (field)->type = type;
+
+ return field;
+}
+
+EvFormField *
+ev_form_field_button_new (gint id,
+ EvFormFieldButtonType type)
+{
+ EvFormField *field;
+
+ g_return_val_if_fail (id >= 0, NULL);
+ g_return_val_if_fail (type >= EV_FORM_FIELD_BUTTON_PUSH &&
+ type <= EV_FORM_FIELD_BUTTON_RADIO, NULL);
+
+ field = EV_FORM_FIELD (g_object_new (EV_TYPE_FORM_FIELD_BUTTON, NULL));
+ field->id = id;
+ EV_FORM_FIELD_BUTTON (field)->type = type;
+
+ return field;
+}
+
+EvFormField *
+ev_form_field_choice_new (gint id,
+ EvFormFieldChoiceType type)
+{
+ EvFormField *field;
+
+ g_return_val_if_fail (id >= 0, NULL);
+ g_return_val_if_fail (type >= EV_FORM_FIELD_CHOICE_COMBO &&
+ type <= EV_FORM_FIELD_CHOICE_LIST, NULL);
+
+ field = EV_FORM_FIELD (g_object_new (EV_TYPE_FORM_FIELD_CHOICE, NULL));
+ field->id = id;
+ EV_FORM_FIELD_CHOICE (field)->type = type;
+
+ return field;
+}
+
+EvFormField *
+ev_form_field_signature_new (gint id)
+{
+ EvFormField *field;
+
+ g_return_val_if_fail (id >= 0, NULL);
+
+ field = EV_FORM_FIELD (g_object_new (EV_TYPE_FORM_FIELD_SIGNATURE, NULL));
+ field->id = id;
+
+ return field;
+}
+
diff --git a/libdocument/ev-form-field.h b/libdocument/ev-form-field.h
new file mode 100644
index 00000000..06948dc1
--- /dev/null
+++ b/libdocument/ev-form-field.h
@@ -0,0 +1,214 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Julien Rebetez
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_FORM_FIELD_H
+#define EV_FORM_FIELD_H
+
+#include <glib-object.h>
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_FORM_FIELD (ev_form_field_get_type())
+#define EV_FORM_FIELD(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_FORM_FIELD, EvFormField))
+#define EV_FORM_FIELD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_FORM_FIELD, EvFormFieldClass))
+#define EV_IS_FORM_FIELD(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_FORM_FIELD))
+#define EV_IS_FORM_FIELD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_FORM_FIELD))
+#define EV_FORM_FIELD_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_FORM_FIELD, EvFormFieldClass))
+
+#define EV_TYPE_FORM_FIELD_TEXT (ev_form_field_text_get_type())
+#define EV_FORM_FIELD_TEXT(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_FORM_FIELD_TEXT, EvFormFieldText))
+#define EV_FORM_FIELD_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_FORM_FIELD_TEXT, EvFormFieldTextClass))
+#define EV_IS_FORM_FIELD_TEXT(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_FORM_FIELD_TEXT))
+#define EV_IS_FORM_FIELD_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_FORM_FIELD_TEXT))
+#define EV_FORM_FIELD_TEXT_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_FORM_FIELD_TEXT, EvFormFieldTextClass))
+
+#define EV_TYPE_FORM_FIELD_BUTTON (ev_form_field_button_get_type())
+#define EV_FORM_FIELD_BUTTON(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_FORM_FIELD_BUTTON, EvFormFieldButton))
+#define EV_FORM_FIELD_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_FORM_FIELD_BUTTON, EvFormFieldButtonClass))
+#define EV_IS_FORM_FIELD_BUTTON(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_FORM_FIELD_BUTTON))
+#define EV_IS_FORM_FIELD_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_FORM_FIELD_BUTTON))
+#define EV_FORM_FIELD_BUTTON_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_FORM_FIELD_BUTTON, EvFormFieldButtonClass))
+
+#define EV_TYPE_FORM_FIELD_CHOICE (ev_form_field_choice_get_type())
+#define EV_FORM_FIELD_CHOICE(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_FORM_FIELD_CHOICE, EvFormFieldChoice))
+#define EV_FORM_FIELD_CHOICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_FORM_FIELD_CHOICE, EvFormFieldChoiceClass))
+#define EV_IS_FORM_FIELD_CHOICE(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_FORM_FIELD_CHOICE))
+#define EV_IS_FORM_FIELD_CHOICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_FORM_FIELD_CHOICE))
+#define EV_FORM_FIELD_CHOICE_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_FORM_FIELD_CHOICE, EvFormFieldChoiceClass))
+
+#define EV_TYPE_FORM_FIELD_SIGNATURE (ev_form_field_signature_get_type())
+#define EV_FORM_FIELD_SIGNATURE(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_FORM_FIELD_SIGNATURE, EvFormFieldSignature))
+#define EV_FORM_FIELD_SIGNATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_FORM_FIELD_SIGNATURE, EvFormFieldSignatureClass))
+#define EV_IS_FORM_FIELD_SIGNATURE(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_FORM_FIELD_SIGNATURE))
+#define EV_IS_FORM_FIELD_SIGNATURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_FORM_FIELD_SIGNATURE))
+#define EV_FORM_FIELD_SIGNATURE_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_FORM_FIELD_SIGNATURE, EvFormFieldSignatureClass))
+
+typedef struct _EvFormField EvFormField;
+typedef struct _EvFormFieldClass EvFormFieldClass;
+
+typedef struct _EvFormFieldText EvFormFieldText;
+typedef struct _EvFormFieldTextClass EvFormFieldTextClass;
+
+typedef struct _EvFormFieldButton EvFormFieldButton;
+typedef struct _EvFormFieldButtonClass EvFormFieldButtonClass;
+
+typedef struct _EvFormFieldChoice EvFormFieldChoice;
+typedef struct _EvFormFieldChoiceClass EvFormFieldChoiceClass;
+
+typedef struct _EvFormFieldSignature EvFormFieldSignature;
+typedef struct _EvFormFieldSignatureClass EvFormFieldSignatureClass;
+
+typedef enum
+{
+ EV_FORM_FIELD_TEXT_NORMAL,
+ EV_FORM_FIELD_TEXT_MULTILINE,
+ EV_FORM_FIELD_TEXT_FILE_SELECT
+} EvFormFieldTextType;
+
+typedef enum
+{
+ EV_FORM_FIELD_BUTTON_PUSH,
+ EV_FORM_FIELD_BUTTON_CHECK,
+ EV_FORM_FIELD_BUTTON_RADIO
+} EvFormFieldButtonType;
+
+typedef enum
+{
+ EV_FORM_FIELD_CHOICE_COMBO,
+ EV_FORM_FIELD_CHOICE_LIST
+} EvFormFieldChoiceType;
+
+struct _EvFormField
+{
+ GObject parent;
+
+ gint id;
+ gboolean is_read_only;
+ gdouble font_size;
+
+ EvPage *page;
+ gboolean changed;
+};
+
+struct _EvFormFieldClass
+{
+ GObjectClass parent_class;
+};
+
+struct _EvFormFieldText
+{
+ EvFormField partent;
+
+ EvFormFieldTextType type;
+
+ gboolean do_spell_check : 1;
+ gboolean do_scroll : 1;
+ gboolean comb : 1;
+ gboolean is_rich_text : 1;
+ gboolean is_password;
+
+ gint max_len;
+ gchar *text;
+};
+
+struct _EvFormFieldTextClass
+{
+ EvFormFieldClass partent_class;
+};
+
+struct _EvFormFieldButton
+{
+ EvFormField partent;
+
+ EvFormFieldButtonType type;
+
+ gboolean state;
+};
+
+struct _EvFormFieldButtonClass
+{
+ EvFormFieldClass partent_class;
+};
+
+struct _EvFormFieldChoice
+{
+ EvFormField partent;
+
+ EvFormFieldChoiceType type;
+
+ gboolean multi_select : 1;
+ gboolean is_editable : 1;
+ gboolean do_spell_check : 1;
+ gboolean commit_on_sel_change : 1;
+
+ GList *selected_items;
+ gchar *text;
+};
+
+struct _EvFormFieldChoiceClass
+{
+ EvFormFieldClass partent_class;
+};
+
+struct _EvFormFieldSignature
+{
+ EvFormField partent;
+
+ /* TODO */
+};
+
+struct _EvFormFieldSignatureClass
+{
+ EvFormFieldClass partent_class;
+};
+
+/* EvFormField base class */
+GType ev_form_field_get_type (void) G_GNUC_CONST;
+
+/* EvFormFieldText */
+GType ev_form_field_text_get_type (void) G_GNUC_CONST;
+EvFormField *ev_form_field_text_new (gint id,
+ EvFormFieldTextType type);
+
+/* EvFormFieldButton */
+GType ev_form_field_button_get_type (void) G_GNUC_CONST;
+EvFormField *ev_form_field_button_new (gint id,
+ EvFormFieldButtonType type);
+
+/* EvFormFieldChoice */
+GType ev_form_field_choice_get_type (void) G_GNUC_CONST;
+EvFormField *ev_form_field_choice_new (gint id,
+ EvFormFieldChoiceType type);
+
+/* EvFormFieldSignature */
+GType ev_form_field_signature_get_type (void) G_GNUC_CONST;
+EvFormField *ev_form_field_signature_new (gint id);
+
+
+G_END_DECLS
+
+#endif /* !EV_FORM_FIELD_H */
+
diff --git a/libdocument/ev-image.c b/libdocument/ev-image.c
new file mode 100644
index 00000000..19ffed51
--- /dev/null
+++ b/libdocument/ev-image.c
@@ -0,0 +1,181 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include <glib/gstdio.h>
+#include <unistd.h>
+
+#include "ev-document-misc.h"
+#include "ev-file-helpers.h"
+#include "ev-image.h"
+
+struct _EvImagePrivate {
+ gint page;
+ gint id;
+ GdkPixbuf *pixbuf;
+ gchar *tmp_uri;
+};
+
+#define EV_IMAGE_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_IMAGE, EvImagePrivate))
+
+G_DEFINE_TYPE (EvImage, ev_image, G_TYPE_OBJECT)
+
+static void
+ev_image_finalize (GObject *object)
+{
+ EvImage *image = EV_IMAGE (object);
+
+ if (image->priv->pixbuf) {
+ g_object_unref (image->priv->pixbuf);
+ image->priv->pixbuf = NULL;
+ }
+
+ if (image->priv->tmp_uri) {
+ gchar *filename;
+
+ filename = g_filename_from_uri (image->priv->tmp_uri, NULL, NULL);
+ ev_tmp_filename_unlink (filename);
+ g_free (filename);
+ g_free (image->priv->tmp_uri);
+ image->priv->tmp_uri = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_image_parent_class)->finalize) (object);
+}
+
+static void
+ev_image_class_init (EvImageClass *klass)
+{
+ GObjectClass *g_object_class;
+
+ g_object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (g_object_class, sizeof (EvImagePrivate));
+
+ g_object_class->finalize = ev_image_finalize;
+}
+
+static void
+ev_image_init (EvImage *image)
+{
+ image->priv = EV_IMAGE_GET_PRIVATE (image);
+}
+
+EvImage *
+ev_image_new (gint page,
+ gint img_id)
+{
+ EvImage *image;
+
+ image = EV_IMAGE (g_object_new (EV_TYPE_IMAGE, NULL));
+ image->priv->page = page;
+ image->priv->id = img_id;
+
+ return image;
+}
+
+EvImage *
+ev_image_new_from_pixbuf (GdkPixbuf *pixbuf)
+{
+ EvImage *image;
+
+ g_return_val_if_fail (GDK_IS_PIXBUF (pixbuf), NULL);
+
+ image = EV_IMAGE (g_object_new (EV_TYPE_IMAGE, NULL));
+ image->priv->pixbuf = g_object_ref (pixbuf);
+
+ return image;
+}
+
+gint
+ev_image_get_page (EvImage *image)
+{
+ g_return_val_if_fail (EV_IS_IMAGE (image), -1);
+
+ return image->priv->page;
+}
+
+gint
+ev_image_get_id (EvImage *image)
+{
+ g_return_val_if_fail (EV_IS_IMAGE (image), -1);
+
+ return image->priv->id;
+}
+
+GdkPixbuf *
+ev_image_get_pixbuf (EvImage *image)
+{
+ g_return_val_if_fail (EV_IS_IMAGE (image), NULL);
+ g_return_val_if_fail (GDK_IS_PIXBUF (image->priv->pixbuf), NULL);
+
+ return image->priv->pixbuf;
+}
+
+const gchar *
+ev_image_save_tmp (EvImage *image,
+ GdkPixbuf *pixbuf)
+{
+ GError *error = NULL;
+ gchar *filename = NULL;
+ int fd;
+
+ g_return_val_if_fail (EV_IS_IMAGE (image), NULL);
+ g_return_val_if_fail (GDK_IS_PIXBUF (pixbuf), NULL);
+
+ if (image->priv->tmp_uri)
+ return image->priv->tmp_uri;
+
+ if ((fd = ev_mkstemp ("image.XXXXXX", &filename, &error)) == -1)
+ goto had_error;
+
+ gdk_pixbuf_save (pixbuf, filename,
+ "png", &error,
+ "compression", "3", NULL);
+ close (fd);
+
+ if (!error) {
+ image->priv->tmp_uri = g_filename_to_uri (filename, NULL, &error);
+ if (image->priv->tmp_uri == NULL)
+ goto had_error;
+
+ g_free (filename);
+
+ return image->priv->tmp_uri;
+ }
+
+ had_error:
+
+ /* Erro saving image */
+ g_warning ("Error saving image: %s", error->message);
+ g_error_free (error);
+ g_free (filename);
+
+ return NULL;
+}
+
+const gchar *
+ev_image_get_tmp_uri (EvImage *image)
+{
+ g_return_val_if_fail (EV_IS_IMAGE (image), NULL);
+
+ return image->priv->tmp_uri;
+}
diff --git a/libdocument/ev-image.h b/libdocument/ev-image.h
new file mode 100644
index 00000000..c3227c96
--- /dev/null
+++ b/libdocument/ev-image.h
@@ -0,0 +1,68 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef __EV_IMAGE_H__
+#define __EV_IMAGE_H__
+
+#include <glib-object.h>
+#include <gdk/gdk.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvImage EvImage;
+typedef struct _EvImageClass EvImageClass;
+typedef struct _EvImagePrivate EvImagePrivate;
+
+#define EV_TYPE_IMAGE (ev_image_get_type())
+#define EV_IMAGE(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_IMAGE, EvImage))
+#define EV_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_IMAGE, EvImageClass))
+#define EV_IS_IMAGE(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_IMAGE))
+#define EV_IS_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_IMAGE))
+#define EV_IMAGE_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_IMAGE, EvImageClass))
+
+struct _EvImage {
+ GObject base_instance;
+
+ EvImagePrivate *priv;
+};
+
+struct _EvImageClass {
+ GObjectClass base_class;
+};
+
+GType ev_image_get_type (void) G_GNUC_CONST;
+EvImage *ev_image_new (gint page,
+ gint img_id);
+EvImage *ev_image_new_from_pixbuf (GdkPixbuf *pixbuf);
+
+gint ev_image_get_id (EvImage *image);
+gint ev_image_get_page (EvImage *image);
+GdkPixbuf *ev_image_get_pixbuf (EvImage *image);
+const gchar *ev_image_save_tmp (EvImage *image,
+ GdkPixbuf *pixbuf);
+const gchar *ev_image_get_tmp_uri (EvImage *image);
+
+
+G_END_DECLS
+
+#endif /* __EV_IMAGE_H__ */
diff --git a/libdocument/ev-init.c b/libdocument/ev-init.c
new file mode 100644
index 00000000..31863357
--- /dev/null
+++ b/libdocument/ev-init.c
@@ -0,0 +1,154 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright © 2009 Christian Persch
+ *
+ * Evince is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * Evince 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 Lesser
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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 <config.h>
+
+#include <glib.h>
+#include <glib/gi18n-lib.h>
+#ifdef G_OS_WIN32
+#include <windows.h>
+#endif
+
+#include "ev-init.h"
+#include "ev-backends-manager.h"
+#include "ev-debug.h"
+#include "ev-file-helpers.h"
+
+static int ev_init_count;
+
+#ifdef G_OS_WIN32
+
+static HMODULE evdocument_dll = NULL;
+static gchar *locale_dir = NULL;
+
+#ifdef DLL_EXPORT
+BOOL WINAPI
+DllMain (HINSTANCE hinstDLL,
+ DWORD fdwReason,
+ LPVOID lpvReserved)
+{
+ if (fdwReason == DLL_PROCESS_ATTACH)
+ evdocument_dll = hinstDLL;
+
+ return TRUE;
+}
+#endif
+
+static const gchar *
+_ev_win32_get_locale_dir (HMODULE module)
+{
+ if (locale_dir)
+ return locale_dir;
+
+ gchar *install_dir = NULL, *utf8_locale_dir;
+ gchar *retval = NULL;
+
+ if (evdocument_dll != NULL)
+ install_dir =
+ g_win32_get_package_installation_directory_of_module (module);
+
+ if (install_dir) {
+ utf8_locale_dir = g_build_filename (install_dir,
+ "share", "locale", NULL);
+
+ locale_dir = g_win32_locale_filename_from_utf8 (utf8_locale_dir);
+
+ g_free (install_dir);
+ g_free (utf8_locale_dir);
+ }
+
+ if (!locale_dir)
+ locale_dir = g_strdup ("");
+}
+
+#endif
+
+const gchar *
+ev_get_locale_dir (void)
+{
+#ifdef G_OS_WIN32
+ return _ev_win32_get_locale_dir (evdocument_dll);
+#else
+ return MATELOCALEDIR;
+#endif
+}
+
+/**
+ * ev_init:
+ *
+ * Initializes the evince document library, and binds the evince
+ * gettext domain.
+ *
+ * You must call this before calling any other function in the evince
+ * document library.
+ *
+ * Returns: %TRUE if any backends were found; %FALSE otherwise
+ */
+gboolean
+ev_init (void)
+{
+ static gboolean have_backends;
+
+ if (ev_init_count++ > 0)
+ return have_backends;
+
+ /* set up translation catalog */
+ bindtextdomain (GETTEXT_PACKAGE, ev_get_locale_dir ());
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+
+ _ev_debug_init ();
+ _ev_file_helpers_init ();
+ have_backends = _ev_backends_manager_init ();
+
+ return have_backends;
+}
+
+/**
+ * ev_shutdown:
+ *
+ * Shuts the evince document library down.
+ */
+void
+ev_shutdown (void)
+{
+ g_assert (_ev_is_initialized ());
+
+ if (--ev_init_count > 0)
+ return;
+
+#ifdef G_OS_WIN32
+ if (locale_dir != NULL)
+ g_free(locale_dir);
+#endif
+
+ _ev_backends_manager_shutdown ();
+ _ev_file_helpers_shutdown ();
+ _ev_debug_shutdown ();
+}
+
+/*
+ * _ev_is_initialized:
+ *
+ * Returns: %TRUE if the evince document library has been initialized
+ */
+gboolean
+_ev_is_initialized (void)
+{
+ return ev_init_count > 0;
+}
diff --git a/libdocument/ev-init.h b/libdocument/ev-init.h
new file mode 100644
index 00000000..b9cddf4f
--- /dev/null
+++ b/libdocument/ev-init.h
@@ -0,0 +1,41 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright © 2009 Christian Persch
+ *
+ * Evince is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * Evince 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 Lesser
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_INIT_H
+#define EV_INIT_H
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+const gchar* ev_get_locale_dir (void);
+
+gboolean ev_init (void);
+
+void ev_shutdown (void);
+
+gboolean _ev_is_initialized (void);
+
+G_END_DECLS
+
+#endif /* EV_INIT_H */
diff --git a/libdocument/ev-layer.c b/libdocument/ev-layer.c
new file mode 100644
index 00000000..935268c1
--- /dev/null
+++ b/libdocument/ev-layer.c
@@ -0,0 +1,86 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include "ev-layer.h"
+
+struct _EvLayerPrivate {
+ guint id;
+ gboolean is_parent;
+ gint rb_group;
+};
+
+#define EV_LAYER_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_LAYER, EvLayerPrivate))
+
+G_DEFINE_TYPE (EvLayer, ev_layer, G_TYPE_OBJECT)
+
+static void
+ev_layer_class_init (EvLayerClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (g_object_class, sizeof (EvLayerPrivate));
+}
+
+static void
+ev_layer_init (EvLayer *layer)
+{
+ layer->priv = EV_LAYER_GET_PRIVATE (layer);
+}
+
+EvLayer *
+ev_layer_new (guint layer_id,
+ gboolean is_parent,
+ gint rb_group)
+{
+ EvLayer *layer;
+
+ layer = EV_LAYER (g_object_new (EV_TYPE_LAYER, NULL));
+ layer->priv->id = layer_id;
+ layer->priv->is_parent = is_parent;
+ layer->priv->rb_group = rb_group;
+
+ return layer;
+}
+
+guint
+ev_layer_get_id (EvLayer *layer)
+{
+ g_return_val_if_fail (EV_IS_LAYER (layer), 0);
+
+ return layer->priv->id;
+}
+
+gboolean
+ev_layer_is_parent (EvLayer *layer)
+{
+ g_return_val_if_fail (EV_IS_LAYER (layer), FALSE);
+
+ return layer->priv->is_parent;
+}
+
+gint
+ev_layer_get_rb_group (EvLayer *layer)
+{
+ g_return_val_if_fail (EV_IS_LAYER (layer), 0);
+
+ return layer->priv->rb_group;
+}
diff --git a/libdocument/ev-layer.h b/libdocument/ev-layer.h
new file mode 100644
index 00000000..809c4701
--- /dev/null
+++ b/libdocument/ev-layer.h
@@ -0,0 +1,62 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef __EV_LAYER_H__
+#define __EV_LAYER_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvLayer EvLayer;
+typedef struct _EvLayerClass EvLayerClass;
+typedef struct _EvLayerPrivate EvLayerPrivate;
+
+#define EV_TYPE_LAYER (ev_layer_get_type())
+#define EV_LAYER(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_LAYER, EvLayer))
+#define EV_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_LAYER, EvLayerClass))
+#define EV_IS_LAYER(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_LAYER))
+#define EV_IS_LAYER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_LAYER))
+#define EV_LAYER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_LAYER, EvLayerClass))
+
+struct _EvLayer {
+ GObject base_instance;
+
+ EvLayerPrivate *priv;
+};
+
+struct _EvLayerClass {
+ GObjectClass base_class;
+};
+
+GType ev_layer_get_type (void) G_GNUC_CONST;
+EvLayer *ev_layer_new (guint layer_id,
+ gboolean is_parent,
+ gint rb_group);
+guint ev_layer_get_id (EvLayer *layer);
+gboolean ev_layer_is_parent (EvLayer *layer);
+gint ev_layer_get_rb_group (EvLayer *layer);
+
+G_END_DECLS
+
+#endif /* __EV_LAYER_H__ */
diff --git a/libdocument/ev-link-action.c b/libdocument/ev-link-action.c
new file mode 100644
index 00000000..9ebc9a30
--- /dev/null
+++ b/libdocument/ev-link-action.c
@@ -0,0 +1,341 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2005 Red Hat, Inc.
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+#include "ev-link-action.h"
+#include "ev-document-type-builtins.h"
+
+enum {
+ PROP_0,
+ PROP_TYPE,
+ PROP_DEST,
+ PROP_URI,
+ PROP_FILENAME,
+ PROP_PARAMS,
+ PROP_NAME
+};
+
+struct _EvLinkAction {
+ GObject base_instance;
+
+ EvLinkActionPrivate *priv;
+};
+
+struct _EvLinkActionClass {
+ GObjectClass base_class;
+};
+
+struct _EvLinkActionPrivate {
+ EvLinkActionType type;
+ EvLinkDest *dest;
+ gchar *uri;
+ gchar *filename;
+ gchar *params;
+ gchar *name;
+};
+
+G_DEFINE_TYPE (EvLinkAction, ev_link_action, G_TYPE_OBJECT)
+
+#define EV_LINK_ACTION_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_LINK_ACTION, EvLinkActionPrivate))
+
+EvLinkActionType
+ev_link_action_get_action_type (EvLinkAction *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_ACTION (self), 0);
+
+ return self->priv->type;
+}
+
+EvLinkDest *
+ev_link_action_get_dest (EvLinkAction *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
+
+ return self->priv->dest;
+}
+
+const gchar *
+ev_link_action_get_uri (EvLinkAction *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
+
+ return self->priv->uri;
+}
+
+const gchar *
+ev_link_action_get_filename (EvLinkAction *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
+
+ return self->priv->filename;
+}
+
+const gchar *
+ev_link_action_get_params (EvLinkAction *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
+
+ return self->priv->params;
+}
+
+const gchar *
+ev_link_action_get_name (EvLinkAction *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
+
+ return self->priv->name;
+}
+
+static void
+ev_link_action_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *param_spec)
+{
+ EvLinkAction *self;
+
+ self = EV_LINK_ACTION (object);
+
+ switch (prop_id) {
+ case PROP_TYPE:
+ g_value_set_enum (value, self->priv->type);
+ break;
+ case PROP_DEST:
+ g_value_set_pointer (value, self->priv->dest);
+ break;
+ case PROP_URI:
+ g_value_set_string (value, self->priv->uri);
+ break;
+ case PROP_FILENAME:
+ g_value_set_string (value, self->priv->filename);
+ break;
+ case PROP_PARAMS:
+ g_value_set_string (value, self->priv->params);
+ break;
+ case PROP_NAME:
+ g_value_set_string (value, self->priv->name);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+ prop_id,
+ param_spec);
+ break;
+ }
+}
+
+static void
+ev_link_action_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *param_spec)
+{
+ EvLinkAction *self = EV_LINK_ACTION (object);
+
+ switch (prop_id) {
+ case PROP_TYPE:
+ self->priv->type = g_value_get_enum (value);
+ break;
+ case PROP_DEST:
+ self->priv->dest = g_value_get_pointer (value);
+ break;
+ case PROP_URI:
+ g_free (self->priv->uri);
+ self->priv->uri = g_value_dup_string (value);
+ break;
+ case PROP_FILENAME:
+ g_free (self->priv->filename);
+ self->priv->filename = g_value_dup_string (value);
+ break;
+ case PROP_PARAMS:
+ g_free (self->priv->params);
+ self->priv->params = g_value_dup_string (value);
+ break;
+ case PROP_NAME:
+ g_free (self->priv->name);
+ self->priv->name = g_value_dup_string (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+ prop_id,
+ param_spec);
+ break;
+ }
+}
+
+static void
+ev_link_action_finalize (GObject *object)
+{
+ EvLinkActionPrivate *priv;
+
+ priv = EV_LINK_ACTION (object)->priv;
+
+ if (priv->dest) {
+ g_object_unref (priv->dest);
+ priv->dest = NULL;
+ }
+
+ if (priv->uri) {
+ g_free (priv->uri);
+ priv->uri = NULL;
+ }
+
+ if (priv->filename) {
+ g_free (priv->filename);
+ priv->filename = NULL;
+ }
+
+ if (priv->params) {
+ g_free (priv->params);
+ priv->params = NULL;
+ }
+
+ if (priv->name) {
+ g_free (priv->name);
+ priv->name = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_link_action_parent_class)->finalize (object);
+}
+
+static void
+ev_link_action_init (EvLinkAction *ev_link_action)
+{
+ ev_link_action->priv = EV_LINK_ACTION_GET_PRIVATE (ev_link_action);
+
+ ev_link_action->priv->dest = NULL;
+ ev_link_action->priv->uri = NULL;
+ ev_link_action->priv->filename = NULL;
+ ev_link_action->priv->params = NULL;
+ ev_link_action->priv->name = NULL;
+}
+
+static void
+ev_link_action_class_init (EvLinkActionClass *ev_link_action_class)
+{
+ GObjectClass *g_object_class;
+
+ g_object_class = G_OBJECT_CLASS (ev_link_action_class);
+
+ g_object_class->set_property = ev_link_action_set_property;
+ g_object_class->get_property = ev_link_action_get_property;
+
+ g_object_class->finalize = ev_link_action_finalize;
+
+ g_type_class_add_private (g_object_class, sizeof (EvLinkActionPrivate));
+
+ g_object_class_install_property (g_object_class,
+ PROP_TYPE,
+ g_param_spec_enum ("type",
+ "Action Type",
+ "The link action type",
+ EV_TYPE_LINK_ACTION_TYPE,
+ EV_LINK_ACTION_TYPE_GOTO_DEST,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_DEST,
+ g_param_spec_pointer ("dest",
+ "Action destination",
+ "The link action destination",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_URI,
+ g_param_spec_string ("uri",
+ "Link Action URI",
+ "The link action URI",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_FILENAME,
+ g_param_spec_string ("filename",
+ "Filename",
+ "The link action filename",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_PARAMS,
+ g_param_spec_string ("params",
+ "Params",
+ "The link action params",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_NAME,
+ g_param_spec_string ("name",
+ "Name",
+ "The link action name",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+}
+
+EvLinkAction *
+ev_link_action_new_dest (EvLinkDest *dest)
+{
+ return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
+ "dest", dest,
+ "type", EV_LINK_ACTION_TYPE_GOTO_DEST,
+ NULL));
+}
+
+EvLinkAction *
+ev_link_action_new_remote (EvLinkDest *dest,
+ const gchar *filename)
+{
+ return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
+ "dest", dest,
+ "filename", filename,
+ "type", EV_LINK_ACTION_TYPE_GOTO_REMOTE,
+ NULL));
+}
+
+EvLinkAction *
+ev_link_action_new_external_uri (const gchar *uri)
+{
+ return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
+ "uri", uri,
+ "type", EV_LINK_ACTION_TYPE_EXTERNAL_URI,
+ NULL));
+}
+
+EvLinkAction *
+ev_link_action_new_launch (const gchar *filename,
+ const gchar *params)
+{
+ return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
+ "filename", filename,
+ "params", params,
+ "type", EV_LINK_ACTION_TYPE_LAUNCH,
+ NULL));
+}
+
+EvLinkAction *
+ev_link_action_new_named (const gchar *name)
+{
+ return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
+ "name", name,
+ "type", EV_LINK_ACTION_TYPE_NAMED,
+ NULL));
+}
diff --git a/libdocument/ev-link-action.h b/libdocument/ev-link-action.h
new file mode 100644
index 00000000..6940a53b
--- /dev/null
+++ b/libdocument/ev-link-action.h
@@ -0,0 +1,73 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2005 Red Hat, Inc.
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_LINK_ACTION_H
+#define EV_LINK_ACTION_H
+
+#include <glib-object.h>
+#include "ev-link-dest.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvLinkAction EvLinkAction;
+typedef struct _EvLinkActionClass EvLinkActionClass;
+typedef struct _EvLinkActionPrivate EvLinkActionPrivate;
+
+#define EV_TYPE_LINK_ACTION (ev_link_action_get_type())
+#define EV_LINK_ACTION(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_LINK_ACTION, EvLinkAction))
+#define EV_LINK_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_LINK_ACTION, EvLinkActionClass))
+#define EV_IS_LINK_ACTION(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_LINK_ACTION))
+#define EV_IS_LINK_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_LINK_ACTION))
+#define EV_LINK_ACTION_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_LINK_ACTION, EvLinkActionClass))
+
+typedef enum {
+ EV_LINK_ACTION_TYPE_GOTO_DEST,
+ EV_LINK_ACTION_TYPE_GOTO_REMOTE,
+ EV_LINK_ACTION_TYPE_EXTERNAL_URI,
+ EV_LINK_ACTION_TYPE_LAUNCH,
+ EV_LINK_ACTION_TYPE_NAMED
+ /* We'll probably fill this in more as we support the other types of
+ * actions */
+} EvLinkActionType;
+
+GType ev_link_action_get_type (void) G_GNUC_CONST;
+
+EvLinkActionType ev_link_action_get_action_type (EvLinkAction *self);
+EvLinkDest *ev_link_action_get_dest (EvLinkAction *self);
+const gchar *ev_link_action_get_uri (EvLinkAction *self);
+const gchar *ev_link_action_get_filename (EvLinkAction *self);
+const gchar *ev_link_action_get_params (EvLinkAction *self);
+const gchar *ev_link_action_get_name (EvLinkAction *self);
+
+EvLinkAction *ev_link_action_new_dest (EvLinkDest *dest);
+EvLinkAction *ev_link_action_new_remote (EvLinkDest *dest,
+ const gchar *filename);
+EvLinkAction *ev_link_action_new_external_uri (const gchar *uri);
+EvLinkAction *ev_link_action_new_launch (const gchar *filename,
+ const gchar *params);
+EvLinkAction *ev_link_action_new_named (const gchar *name);
+
+G_END_DECLS
+
+#endif /* EV_LINK_ACTION_H */
diff --git a/libdocument/ev-link-dest.c b/libdocument/ev-link-dest.c
new file mode 100644
index 00000000..f73f99f7
--- /dev/null
+++ b/libdocument/ev-link-dest.c
@@ -0,0 +1,511 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2005 Red Hat, Inc.
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include "ev-link-dest.h"
+#include "ev-document-type-builtins.h"
+
+enum {
+ PROP_0,
+ PROP_TYPE,
+ PROP_PAGE,
+ PROP_LEFT,
+ PROP_TOP,
+ PROP_BOTTOM,
+ PROP_RIGHT,
+ PROP_ZOOM,
+ PROP_CHANGE,
+ PROP_NAMED,
+ PROP_PAGE_LABEL
+};
+
+typedef enum {
+ EV_DEST_CHANGE_TOP = 1 << 0,
+ EV_DEST_CHANGE_LEFT = 1 << 1,
+ EV_DEST_CHANGE_ZOOM = 1 << 2
+} EvDestChange;
+
+struct _EvLinkDest {
+ GObject base_instance;
+
+ EvLinkDestPrivate *priv;
+};
+
+struct _EvLinkDestClass {
+ GObjectClass base_class;
+};
+
+struct _EvLinkDestPrivate {
+ EvLinkDestType type;
+ int page;
+ double top;
+ double left;
+ double bottom;
+ double right;
+ double zoom;
+ EvDestChange change;
+ gchar *named;
+ gchar *page_label;
+};
+
+G_DEFINE_TYPE (EvLinkDest, ev_link_dest, G_TYPE_OBJECT)
+
+#define EV_LINK_DEST_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_LINK_DEST, EvLinkDestPrivate))
+
+EvLinkDestType
+ev_link_dest_get_dest_type (EvLinkDest *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_DEST (self), 0);
+
+ return self->priv->type;
+}
+
+gint
+ev_link_dest_get_page (EvLinkDest *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_DEST (self), -1);
+
+ return self->priv->page;
+}
+
+gdouble
+ev_link_dest_get_top (EvLinkDest *self,
+ gboolean *change_top)
+{
+ g_return_val_if_fail (EV_IS_LINK_DEST (self), 0);
+
+ if (change_top)
+ *change_top = (self->priv->change & EV_DEST_CHANGE_TOP);
+
+ return self->priv->top;
+}
+
+gdouble
+ev_link_dest_get_left (EvLinkDest *self,
+ gboolean *change_left)
+{
+ g_return_val_if_fail (EV_IS_LINK_DEST (self), 0);
+
+ if (change_left)
+ *change_left = (self->priv->change & EV_DEST_CHANGE_LEFT);
+
+ return self->priv->left;
+}
+
+gdouble
+ev_link_dest_get_bottom (EvLinkDest *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_DEST (self), 0);
+
+ return self->priv->bottom;
+}
+
+gdouble
+ev_link_dest_get_right (EvLinkDest *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_DEST (self), 0);
+
+ return self->priv->right;
+}
+
+gdouble
+ev_link_dest_get_zoom (EvLinkDest *self,
+ gboolean *change_zoom)
+{
+ g_return_val_if_fail (EV_IS_LINK_DEST (self), 0);
+
+ if (change_zoom)
+ *change_zoom = (self->priv->change & EV_DEST_CHANGE_ZOOM);
+
+ return self->priv->zoom;
+}
+
+const gchar *
+ev_link_dest_get_named_dest (EvLinkDest *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_DEST (self), NULL);
+
+ return self->priv->named;
+}
+
+const gchar *
+ev_link_dest_get_page_label (EvLinkDest *self)
+{
+ g_return_val_if_fail (EV_IS_LINK_DEST (self), NULL);
+
+ return self->priv->page_label;
+}
+
+static void
+ev_link_dest_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *param_spec)
+{
+ EvLinkDest *self;
+
+ self = EV_LINK_DEST (object);
+
+ switch (prop_id) {
+ case PROP_TYPE:
+ g_value_set_enum (value, self->priv->type);
+ break;
+ case PROP_PAGE:
+ g_value_set_int (value, self->priv->page);
+ break;
+ case PROP_TOP:
+ g_value_set_double (value, self->priv->top);
+ break;
+ case PROP_LEFT:
+ g_value_set_double (value, self->priv->left);
+ break;
+ case PROP_BOTTOM:
+ g_value_set_double (value, self->priv->bottom);
+ break;
+ case PROP_RIGHT:
+ g_value_set_double (value, self->priv->left);
+ break;
+ case PROP_ZOOM:
+ g_value_set_double (value, self->priv->zoom);
+ break;
+ case PROP_CHANGE:
+ g_value_set_uint (value, self->priv->change);
+ break;
+ case PROP_NAMED:
+ g_value_set_string (value, self->priv->named);
+ break;
+ case PROP_PAGE_LABEL:
+ g_value_set_string (value, self->priv->page_label);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+ prop_id,
+ param_spec);
+ break;
+ }
+}
+
+static void
+ev_link_dest_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *param_spec)
+{
+ EvLinkDest *self = EV_LINK_DEST (object);
+
+ switch (prop_id) {
+ case PROP_TYPE:
+ self->priv->type = g_value_get_enum (value);
+ break;
+ case PROP_PAGE:
+ self->priv->page = g_value_get_int (value);
+ break;
+ case PROP_TOP:
+ self->priv->top = g_value_get_double (value);
+ break;
+ case PROP_LEFT:
+ self->priv->left = g_value_get_double (value);
+ break;
+ case PROP_BOTTOM:
+ self->priv->bottom = g_value_get_double (value);
+ break;
+ case PROP_RIGHT:
+ self->priv->right = g_value_get_double (value);
+ break;
+ case PROP_ZOOM:
+ self->priv->zoom = g_value_get_double (value);
+ break;
+ case PROP_CHANGE:
+ self->priv->change = g_value_get_uint (value);
+ break;
+ case PROP_NAMED:
+ self->priv->named = g_value_dup_string (value);
+ break;
+ case PROP_PAGE_LABEL:
+ self->priv->page_label = g_value_dup_string (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+ prop_id,
+ param_spec);
+ break;
+ }
+}
+
+static void
+ev_link_dest_finalize (GObject *object)
+{
+ EvLinkDestPrivate *priv;
+
+ priv = EV_LINK_DEST (object)->priv;
+
+ if (priv->named) {
+ g_free (priv->named);
+ priv->named = NULL;
+ }
+ if (priv->page_label) {
+ g_free (priv->page_label);
+ priv->page_label = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_link_dest_parent_class)->finalize (object);
+}
+
+static void
+ev_link_dest_init (EvLinkDest *ev_link_dest)
+{
+ ev_link_dest->priv = EV_LINK_DEST_GET_PRIVATE (ev_link_dest);
+
+ ev_link_dest->priv->named = NULL;
+}
+
+static void
+ev_link_dest_class_init (EvLinkDestClass *ev_link_dest_class)
+{
+ GObjectClass *g_object_class;
+
+ g_object_class = G_OBJECT_CLASS (ev_link_dest_class);
+
+ g_object_class->set_property = ev_link_dest_set_property;
+ g_object_class->get_property = ev_link_dest_get_property;
+
+ g_object_class->finalize = ev_link_dest_finalize;
+
+ g_type_class_add_private (g_object_class, sizeof (EvLinkDestPrivate));
+
+ g_object_class_install_property (g_object_class,
+ PROP_TYPE,
+ g_param_spec_enum ("type",
+ "Dest Type",
+ "The destination type",
+ EV_TYPE_LINK_DEST_TYPE,
+ EV_LINK_DEST_TYPE_UNKNOWN,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_PAGE,
+ g_param_spec_int ("page",
+ "Dest Page",
+ "The destination page",
+ -1,
+ G_MAXINT,
+ 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_LEFT,
+ g_param_spec_double ("left",
+ "Left coordinate",
+ "The left coordinate",
+ -G_MAXDOUBLE,
+ G_MAXDOUBLE,
+ 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_TOP,
+ g_param_spec_double ("top",
+ "Top coordinate",
+ "The top coordinate",
+ -G_MAXDOUBLE,
+ G_MAXDOUBLE,
+ 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_BOTTOM,
+ g_param_spec_double ("bottom",
+ "Bottom coordinate",
+ "The bottom coordinate",
+ -G_MAXDOUBLE,
+ G_MAXDOUBLE,
+ 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_RIGHT,
+ g_param_spec_double ("right",
+ "Right coordinate",
+ "The right coordinate",
+ -G_MAXDOUBLE,
+ G_MAXDOUBLE,
+ 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property (g_object_class,
+ PROP_ZOOM,
+ g_param_spec_double ("zoom",
+ "Zoom",
+ "Zoom",
+ 0,
+ G_MAXDOUBLE,
+ 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_CHANGE,
+ g_param_spec_uint ("change",
+ "Change",
+ "Wether top, left, and zoom should be changed",
+ 0,
+ G_MAXUINT,
+ 0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_NAMED,
+ g_param_spec_string ("named",
+ "Named destination",
+ "The named destination",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_PAGE_LABEL,
+ g_param_spec_string ("page_label",
+ "Label of the page",
+ "The label of the destination page",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+}
+
+EvLinkDest *
+ev_link_dest_new_page (gint page)
+{
+ return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
+ "page", page,
+ "type", EV_LINK_DEST_TYPE_PAGE,
+ NULL));
+}
+
+EvLinkDest *
+ev_link_dest_new_xyz (gint page,
+ gdouble left,
+ gdouble top,
+ gdouble zoom,
+ gboolean change_left,
+ gboolean change_top,
+ gboolean change_zoom)
+{
+ EvDestChange change = 0;
+
+ if (change_left)
+ change |= EV_DEST_CHANGE_LEFT;
+ if (change_top)
+ change |= EV_DEST_CHANGE_TOP;
+ if (change_zoom)
+ change |= EV_DEST_CHANGE_ZOOM;
+
+ return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
+ "page", page,
+ "type", EV_LINK_DEST_TYPE_XYZ,
+ "left", left,
+ "top", top,
+ "zoom", zoom,
+ "change", change,
+ NULL));
+}
+
+EvLinkDest *
+ev_link_dest_new_fit (gint page)
+{
+ return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
+ "page", page,
+ "type", EV_LINK_DEST_TYPE_FIT,
+ NULL));
+}
+
+EvLinkDest *
+ev_link_dest_new_fith (gint page,
+ gdouble top,
+ gboolean change_top)
+{
+ EvDestChange change = 0;
+
+ if (change_top)
+ change |= EV_DEST_CHANGE_TOP;
+
+ return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
+ "page", page,
+ "type", EV_LINK_DEST_TYPE_FITH,
+ "top", top,
+ "change", change,
+ NULL));
+}
+
+EvLinkDest *
+ev_link_dest_new_fitv (gint page,
+ gdouble left,
+ gboolean change_left)
+{
+ EvDestChange change = 0;
+
+ if (change_left)
+ change |= EV_DEST_CHANGE_LEFT;
+
+ return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
+ "page", page,
+ "type", EV_LINK_DEST_TYPE_FITV,
+ "left", left,
+ "change", change,
+ NULL));
+}
+
+EvLinkDest *
+ev_link_dest_new_fitr (gint page,
+ gdouble left,
+ gdouble bottom,
+ gdouble right,
+ gdouble top)
+{
+ EvDestChange change = EV_DEST_CHANGE_TOP | EV_DEST_CHANGE_LEFT;
+
+ return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
+ "page", page,
+ "type", EV_LINK_DEST_TYPE_FITR,
+ "left", left,
+ "bottom", bottom,
+ "right", right,
+ "top", top,
+ "change", change,
+ NULL));
+}
+
+EvLinkDest *
+ev_link_dest_new_named (const gchar *named_dest)
+{
+ return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
+ "named", named_dest,
+ "type", EV_LINK_DEST_TYPE_NAMED,
+ NULL));
+}
+
+EvLinkDest *
+ev_link_dest_new_page_label (const gchar *page_label)
+{
+ return EV_LINK_DEST (g_object_new (EV_TYPE_LINK_DEST,
+ "page_label", page_label,
+ "type", EV_LINK_DEST_TYPE_PAGE_LABEL,
+ NULL));
+}
diff --git a/libdocument/ev-link-dest.h b/libdocument/ev-link-dest.h
new file mode 100644
index 00000000..2288d32c
--- /dev/null
+++ b/libdocument/ev-link-dest.h
@@ -0,0 +1,95 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2005 Red Hat, Inc.
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_LINK_DEST_H
+#define EV_LINK_DEST_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvLinkDest EvLinkDest;
+typedef struct _EvLinkDestClass EvLinkDestClass;
+typedef struct _EvLinkDestPrivate EvLinkDestPrivate;
+
+#define EV_TYPE_LINK_DEST (ev_link_dest_get_type())
+#define EV_LINK_DEST(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_LINK_DEST, EvLinkDest))
+#define EV_LINK_DEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_LINK_DEST, EvLinkDestClass))
+#define EV_IS_LINK_DEST(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_LINK_DEST))
+#define EV_IS_LINK_DEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_LINK_DEST))
+#define EV_LINK_DEST_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_LINK_DEST, EvLinkDestClass))
+
+typedef enum {
+ EV_LINK_DEST_TYPE_PAGE,
+ EV_LINK_DEST_TYPE_XYZ,
+ EV_LINK_DEST_TYPE_FIT,
+ EV_LINK_DEST_TYPE_FITH,
+ EV_LINK_DEST_TYPE_FITV,
+ EV_LINK_DEST_TYPE_FITR,
+ EV_LINK_DEST_TYPE_NAMED,
+ EV_LINK_DEST_TYPE_PAGE_LABEL,
+ EV_LINK_DEST_TYPE_UNKNOWN
+} EvLinkDestType;
+
+GType ev_link_dest_get_type (void) G_GNUC_CONST;
+
+EvLinkDestType ev_link_dest_get_dest_type (EvLinkDest *self);
+gint ev_link_dest_get_page (EvLinkDest *self);
+gdouble ev_link_dest_get_top (EvLinkDest *self,
+ gboolean *change_top);
+gdouble ev_link_dest_get_left (EvLinkDest *self,
+ gboolean *change_left);
+gdouble ev_link_dest_get_bottom (EvLinkDest *self);
+gdouble ev_link_dest_get_right (EvLinkDest *self);
+gdouble ev_link_dest_get_zoom (EvLinkDest *self,
+ gboolean *change_zoom);
+const gchar *ev_link_dest_get_named_dest (EvLinkDest *self);
+const gchar *ev_link_dest_get_page_label (EvLinkDest *self);
+
+EvLinkDest *ev_link_dest_new_page (gint page);
+EvLinkDest *ev_link_dest_new_xyz (gint page,
+ gdouble left,
+ gdouble top,
+ gdouble zoom,
+ gboolean change_left,
+ gboolean change_top,
+ gboolean change_zoom);
+EvLinkDest *ev_link_dest_new_fit (gint page);
+EvLinkDest *ev_link_dest_new_fith (gint page,
+ gdouble top,
+ gboolean change_top);
+EvLinkDest *ev_link_dest_new_fitv (gint page,
+ gdouble left,
+ gboolean change_left);
+EvLinkDest *ev_link_dest_new_fitr (gint page,
+ gdouble left,
+ gdouble bottom,
+ gdouble right,
+ gdouble top);
+EvLinkDest *ev_link_dest_new_named (const gchar *named_dest);
+EvLinkDest *ev_link_dest_new_page_label (const gchar *page_label);
+
+G_END_DECLS
+
+#endif /* EV_LINK_DEST_H */
diff --git a/libdocument/ev-link.c b/libdocument/ev-link.c
new file mode 100644
index 00000000..b521e68c
--- /dev/null
+++ b/libdocument/ev-link.c
@@ -0,0 +1,202 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc.
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+#include "ev-link.h"
+
+enum {
+ PROP_0,
+ PROP_TITLE,
+ PROP_ACTION
+};
+
+struct _EvLink {
+ GObject base_instance;
+ EvLinkPrivate *priv;
+};
+
+struct _EvLinkClass {
+ GObjectClass base_class;
+};
+
+struct _EvLinkPrivate {
+ gchar *title;
+ EvLinkAction *action;
+};
+
+G_DEFINE_TYPE (EvLink, ev_link, G_TYPE_OBJECT)
+
+#define EV_LINK_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_LINK, EvLinkPrivate))
+
+const gchar *
+ev_link_get_title (EvLink *self)
+{
+ g_return_val_if_fail (EV_IS_LINK (self), NULL);
+
+ return self->priv->title;
+}
+
+EvLinkAction *
+ev_link_get_action (EvLink *self)
+{
+ g_return_val_if_fail (EV_IS_LINK (self), NULL);
+
+ return self->priv->action;
+}
+
+static void
+ev_link_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *param_spec)
+{
+ EvLink *self;
+
+ self = EV_LINK (object);
+
+ switch (prop_id) {
+ case PROP_TITLE:
+ g_value_set_string (value, self->priv->title);
+ break;
+ case PROP_ACTION:
+ g_value_set_pointer (value, self->priv->action);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+ prop_id,
+ param_spec);
+ break;
+ }
+}
+
+static void
+ev_link_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *param_spec)
+{
+ EvLink *self = EV_LINK (object);
+
+ switch (prop_id) {
+ case PROP_TITLE:
+ self->priv->title = g_value_dup_string (value);
+ break;
+ case PROP_ACTION:
+ self->priv->action = g_value_get_pointer (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
+ prop_id,
+ param_spec);
+ break;
+ }
+}
+
+static void
+ev_link_finalize (GObject *object)
+{
+ EvLinkPrivate *priv;
+
+ priv = EV_LINK (object)->priv;
+
+ if (priv->title) {
+ g_free (priv->title);
+ priv->title = NULL;
+ }
+
+ if (priv->action) {
+ g_object_unref (priv->action);
+ priv->action = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_link_parent_class)->finalize (object);
+}
+
+static void
+ev_link_init (EvLink *ev_link)
+{
+ ev_link->priv = EV_LINK_GET_PRIVATE (ev_link);
+
+ ev_link->priv->title = NULL;
+ ev_link->priv->action = NULL;
+}
+
+static void
+ev_link_class_init (EvLinkClass *ev_window_class)
+{
+ GObjectClass *g_object_class;
+
+ g_object_class = G_OBJECT_CLASS (ev_window_class);
+
+ g_object_class->set_property = ev_link_set_property;
+ g_object_class->get_property = ev_link_get_property;
+
+ g_object_class->finalize = ev_link_finalize;
+
+ g_type_class_add_private (g_object_class, sizeof (EvLinkPrivate));
+
+ g_object_class_install_property (g_object_class,
+ PROP_TITLE,
+ g_param_spec_string ("title",
+ "Link Title",
+ "The link title",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_ACTION,
+ g_param_spec_pointer ("action",
+ "Link Action",
+ "The link action",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+}
+
+EvLink *
+ev_link_new (const char *title,
+ EvLinkAction *action)
+{
+ return EV_LINK (g_object_new (EV_TYPE_LINK,
+ "title", title,
+ "action", action,
+ NULL));
+}
+
+gint
+ev_link_get_page (EvLink *link)
+{
+ EvLinkAction *action;
+ EvLinkDest *dest;
+
+ action = ev_link_get_action (link);
+ if (!action)
+ return -1;
+
+ if (ev_link_action_get_action_type (action) !=
+ EV_LINK_ACTION_TYPE_GOTO_DEST)
+ return -1;
+
+ dest = ev_link_action_get_dest (action);
+ if (dest)
+ return ev_link_dest_get_page (dest);
+
+ return -1;
+}
diff --git a/libdocument/ev-link.h b/libdocument/ev-link.h
new file mode 100644
index 00000000..9da28c9b
--- /dev/null
+++ b/libdocument/ev-link.h
@@ -0,0 +1,55 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc.
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_LINK_H
+#define EV_LINK_H
+
+#include <glib-object.h>
+#include "ev-document.h"
+#include "ev-link-action.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvLink EvLink;
+typedef struct _EvLinkClass EvLinkClass;
+typedef struct _EvLinkPrivate EvLinkPrivate;
+
+#define EV_TYPE_LINK (ev_link_get_type())
+#define EV_LINK(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_LINK, EvLink))
+#define EV_LINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_LINK, EvLinkClass))
+#define EV_IS_LINK(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_LINK))
+#define EV_IS_LINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_LINK))
+#define EV_LINK_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_LINK, EvLinkClass))
+
+GType ev_link_get_type (void) G_GNUC_CONST;
+
+EvLink *ev_link_new (const gchar *title,
+ EvLinkAction *action);
+
+const gchar *ev_link_get_title (EvLink *self);
+EvLinkAction *ev_link_get_action (EvLink *self);
+gint ev_link_get_page (EvLink *link);
+
+G_END_DECLS
+
+#endif /* !EV_LINK_H */
diff --git a/libdocument/ev-mapping-list.c b/libdocument/ev-mapping-list.c
new file mode 100644
index 00000000..50ee9b77
--- /dev/null
+++ b/libdocument/ev-mapping-list.c
@@ -0,0 +1,146 @@
+/* ev-mapping.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "ev-mapping-list.h"
+
+struct _EvMappingList {
+ guint page;
+ GList *list;
+ GDestroyNotify data_destroy_func;
+ volatile gint ref_count;
+};
+
+EvMapping *
+ev_mapping_list_find (EvMappingList *mapping_list,
+ gconstpointer data)
+{
+ GList *list;
+
+ for (list = mapping_list->list; list; list = list->next) {
+ EvMapping *mapping = list->data;
+
+ if (mapping->data == data)
+ return mapping;
+ }
+
+ return NULL;
+}
+
+EvMapping *
+ev_mapping_list_find_custom (EvMappingList *mapping_list,
+ gconstpointer data,
+ GCompareFunc func)
+{
+ GList *list;
+
+ for (list = mapping_list->list; list; list = list->next) {
+ EvMapping *mapping = list->data;
+
+ if (!func (mapping->data, data))
+ return mapping;
+ }
+
+ return NULL;
+}
+
+gpointer
+ev_mapping_list_get_data (EvMappingList *mapping_list,
+ gdouble x,
+ gdouble y)
+{
+ GList *list;
+
+ for (list = mapping_list->list; list; list = list->next) {
+ EvMapping *mapping = list->data;
+
+ if ((x >= mapping->area.x1) &&
+ (y >= mapping->area.y1) &&
+ (x <= mapping->area.x2) &&
+ (y <= mapping->area.y2)) {
+ return mapping->data;
+ }
+ }
+
+ return NULL;
+}
+
+GList *
+ev_mapping_list_get_list (EvMappingList *mapping_list)
+{
+ return mapping_list ? mapping_list->list : NULL;
+}
+
+guint
+ev_mapping_list_get_page (EvMappingList *mapping_list)
+{
+ return mapping_list->page;
+}
+
+EvMappingList *
+ev_mapping_list_new (guint page,
+ GList *list,
+ GDestroyNotify data_destroy_func)
+{
+ EvMappingList *mapping_list;
+
+ g_return_val_if_fail (data_destroy_func != NULL, NULL);
+
+ mapping_list = g_slice_new (EvMappingList);
+ mapping_list->page = page;
+ mapping_list->list = list;
+ mapping_list->data_destroy_func = data_destroy_func;
+ mapping_list->ref_count = 1;
+
+ return mapping_list;
+}
+
+EvMappingList *
+ev_mapping_list_ref (EvMappingList *mapping_list)
+{
+ g_return_val_if_fail (mapping_list != NULL, NULL);
+ g_return_val_if_fail (mapping_list->ref_count > 0, mapping_list);
+
+ g_atomic_int_add (&mapping_list->ref_count, 1);
+
+ return mapping_list;
+}
+
+static void
+mapping_list_free_foreach (EvMapping *mapping,
+ GDestroyNotify destroy_func)
+{
+ destroy_func (mapping->data);
+ g_free (mapping);
+}
+
+void
+ev_mapping_list_unref (EvMappingList *mapping_list)
+{
+ g_return_if_fail (mapping_list != NULL);
+ g_return_if_fail (mapping_list->ref_count > 0);
+
+ if (g_atomic_int_exchange_and_add (&mapping_list->ref_count, -1) - 1 == 0) {
+ g_list_foreach (mapping_list->list,
+ (GFunc)mapping_list_free_foreach,
+ mapping_list->data_destroy_func);
+ g_list_free (mapping_list->list);
+ g_slice_free (EvMappingList, mapping_list);
+ }
+}
diff --git a/libdocument/ev-mapping-list.h b/libdocument/ev-mapping-list.h
new file mode 100644
index 00000000..c86aee5e
--- /dev/null
+++ b/libdocument/ev-mapping-list.h
@@ -0,0 +1,53 @@
+/* ev-mapping.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_MAPPING_LIST_H
+#define EV_MAPPING_LIST_H
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvMappingList EvMappingList;
+
+EvMappingList *ev_mapping_list_new (guint page,
+ GList *list,
+ GDestroyNotify data_destroy_func);
+EvMappingList *ev_mapping_list_ref (EvMappingList *mapping_list);
+void ev_mapping_list_unref (EvMappingList *mapping_list);
+
+guint ev_mapping_list_get_page (EvMappingList *mapping_list);
+GList *ev_mapping_list_get_list (EvMappingList *mapping_list);
+EvMapping *ev_mapping_list_find (EvMappingList *mapping_list,
+ gconstpointer data);
+EvMapping *ev_mapping_list_find_custom (EvMappingList *mapping_list,
+ gconstpointer data,
+ GCompareFunc func);
+gpointer ev_mapping_list_get_data (EvMappingList *mapping_list,
+ gdouble x,
+ gdouble y);
+
+G_END_DECLS
+
+#endif /* EV_MAPPING_LIST_H */
diff --git a/libdocument/ev-module.c b/libdocument/ev-module.c
new file mode 100644
index 00000000..330da2cc
--- /dev/null
+++ b/libdocument/ev-module.c
@@ -0,0 +1,196 @@
+/*
+ * ev-module.c
+ * This file is part of Evince
+ *
+ * Copyright (C) 2005 - Paolo Maggi
+ *
+ * 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.
+ */
+
+/* This is a modified version of ephy-module.c from Epiphany source code.
+ * Here the original copyright assignment:
+ *
+ * Copyright (C) 2003 Marco Pesenti Gritti
+ * Copyright (C) 2003, 2004 Christian Persch
+ *
+ */
+
+/*
+ * Modified by the gedit Team, 2005. See the AUTHORS file for a
+ * list of people on the gedit Team.
+ * See the ChangeLog files for a list of changes.
+ *
+ * $Id: gedit-module.c 5367 2006-12-17 14:29:49Z pborelli $
+ */
+
+/* Modified by evince team */
+
+#include "config.h"
+
+#include "ev-module.h"
+
+#include <gmodule.h>
+
+typedef struct _EvModuleClass EvModuleClass;
+
+struct _EvModuleClass {
+ GTypeModuleClass parent_class;
+};
+
+struct _EvModule {
+ GTypeModule parent_instance;
+
+ GModule *library;
+ gboolean resident;
+
+ gchar *path;
+ GType type;
+};
+
+typedef GType (*EvModuleRegisterFunc) (GTypeModule *);
+
+static void ev_module_init (EvModule *action);
+static void ev_module_class_init (EvModuleClass *class);
+
+G_DEFINE_TYPE (EvModule, ev_module, G_TYPE_TYPE_MODULE)
+
+static gboolean
+ev_module_load (GTypeModule *gmodule)
+{
+ EvModule *module = EV_MODULE (gmodule);
+ EvModuleRegisterFunc register_func;
+
+ module->library = g_module_open (module->path, 0);
+
+ if (!module->library) {
+ g_warning ("%s", g_module_error ());
+
+ return FALSE;
+ }
+
+ /* extract symbols from the lib */
+ if (!g_module_symbol (module->library, "register_evince_backend",
+ (void *) &register_func)) {
+ g_warning ("%s", g_module_error ());
+ g_module_close (module->library);
+
+ return FALSE;
+ }
+
+ /* symbol can still be NULL even though g_module_symbol
+ * returned TRUE */
+ if (!register_func) {
+ g_warning ("Symbol 'register_evince_backend' should not be NULL");
+ g_module_close (module->library);
+
+ return FALSE;
+ }
+
+ module->type = register_func (gmodule);
+
+ if (module->type == 0) {
+ g_warning ("Invalid evince backend contained by module %s", module->path);
+
+ return FALSE;
+ }
+
+ if (module->resident)
+ g_module_make_resident (module->library);
+
+ return TRUE;
+}
+
+static void
+ev_module_unload (GTypeModule *gmodule)
+{
+ EvModule *module = EV_MODULE (gmodule);
+
+ g_module_close (module->library);
+
+ module->library = NULL;
+ module->type = 0;
+}
+
+const gchar *
+ev_module_get_path (EvModule *module)
+{
+ g_return_val_if_fail (EV_IS_MODULE (module), NULL);
+
+ return module->path;
+}
+
+GObject *
+ev_module_new_object (EvModule *module)
+{
+ g_return_val_if_fail (EV_IS_MODULE (module), NULL);
+
+ if (module->type == 0)
+ return NULL;
+
+ return g_object_new (module->type, NULL);
+}
+
+GType
+ev_module_get_object_type (EvModule *module)
+{
+ g_return_val_if_fail (EV_IS_MODULE (module), 0);
+
+ return module->type;
+}
+
+static void
+ev_module_init (EvModule *module)
+{
+}
+
+static void
+ev_module_finalize (GObject *object)
+{
+ EvModule *module = EV_MODULE (object);
+
+ g_free (module->path);
+
+ G_OBJECT_CLASS (ev_module_parent_class)->finalize (object);
+}
+
+static void
+ev_module_class_init (EvModuleClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+ GTypeModuleClass *module_class = G_TYPE_MODULE_CLASS (class);
+
+ object_class->finalize = ev_module_finalize;
+
+ module_class->load = ev_module_load;
+ module_class->unload = ev_module_unload;
+}
+
+EvModule *
+ev_module_new (const gchar *path,
+ gboolean resident)
+{
+ EvModule *result;
+
+ g_return_val_if_fail (path != NULL && path[0] != '\0', NULL);
+
+ result = g_object_new (EV_TYPE_MODULE, NULL);
+
+ g_type_module_set_name (G_TYPE_MODULE (result), path);
+ result->path = g_strdup (path);
+ result->resident = resident;
+
+ return result;
+}
diff --git a/libdocument/ev-module.h b/libdocument/ev-module.h
new file mode 100644
index 00000000..8ac33626
--- /dev/null
+++ b/libdocument/ev-module.h
@@ -0,0 +1,74 @@
+/*
+ * ev-module.h
+ * This file is part of Evince
+ *
+ * Copyright (C) 2005 - Paolo Maggi
+ *
+ * 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.
+ */
+
+/* This is a modified version of gedit-module.h from Epiphany source code.
+ * Here the original copyright assignment:
+ *
+ * Copyright (C) 2003 Marco Pesenti Gritti
+ * Copyright (C) 2003, 2004 Christian Persch
+ *
+ */
+
+/*
+ * Modified by the gedit Team, 2005. See the AUTHORS file for a
+ * list of people on the gedit Team.
+ * See the ChangeLog files for a list of changes.
+ *
+ * $Id: gedit-module.h 5263 2006-10-08 14:26:02Z pborelli $
+ */
+
+/* Modified by Evince Team */
+
+#if !defined (EVINCE_COMPILATION)
+#error "This is a private header."
+#endif
+
+#ifndef EV_MODULE_H
+#define EV_MODULE_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_MODULE (ev_module_get_type ())
+#define EV_MODULE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_MODULE, EvModule))
+#define EV_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_MODULE, EvModuleClass))
+#define EV_IS_MODULE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_MODULE))
+#define EV_IS_MODULE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EV_TYPE_MODULE))
+#define EV_MODULE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), EV_TYPE_MODULE, EvModuleClass))
+
+typedef struct _EvModule EvModule;
+
+GType ev_module_get_type (void) G_GNUC_CONST;
+
+EvModule *ev_module_new (const gchar *path,
+ gboolean resident);
+
+const gchar *ev_module_get_path (EvModule *module);
+
+GObject *ev_module_new_object (EvModule *module);
+
+GType ev_module_get_object_type (EvModule *module);
+
+G_END_DECLS
+
+#endif /* EV_MODULE_H */
diff --git a/libdocument/ev-page.c b/libdocument/ev-page.c
new file mode 100644
index 00000000..3e122332
--- /dev/null
+++ b/libdocument/ev-page.c
@@ -0,0 +1,62 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include "ev-page.h"
+
+G_DEFINE_TYPE (EvPage, ev_page, G_TYPE_OBJECT)
+
+static void
+ev_page_init (EvPage *page)
+{
+}
+
+static void
+ev_page_finalize (GObject *object)
+{
+ EvPage *page = EV_PAGE (object);
+
+ if (page->backend_destroy_func) {
+ page->backend_destroy_func (page->backend_page);
+ page->backend_destroy_func = NULL;
+ }
+ page->backend_page = NULL;
+
+ (* G_OBJECT_CLASS (ev_page_parent_class)->finalize) (object);
+}
+
+static void
+ev_page_class_init (EvPageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = ev_page_finalize;
+}
+
+EvPage *
+ev_page_new (gint index)
+{
+ EvPage *page;
+
+ page = EV_PAGE (g_object_new (EV_TYPE_PAGE, NULL));
+ page->index = index;
+
+ return page;
+}
diff --git a/libdocument/ev-page.h b/libdocument/ev-page.h
new file mode 100644
index 00000000..5365107a
--- /dev/null
+++ b/libdocument/ev-page.h
@@ -0,0 +1,63 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_PAGE_H
+#define EV_PAGE_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_PAGE (ev_page_get_type())
+#define EV_PAGE(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_PAGE, EvPage))
+#define EV_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_PAGE, EvPageClass))
+#define EV_IS_PAGE(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_PAGE))
+#define EV_IS_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_PAGE))
+#define EV_PAGE_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_PAGE, EvPageClass))
+
+typedef struct _EvPage EvPage;
+typedef struct _EvPageClass EvPageClass;
+
+typedef gpointer EvBackendPage;
+typedef GDestroyNotify EvBackendPageDestroyFunc;
+
+struct _EvPage {
+ GObject base_instance;
+
+ gint index;
+
+ EvBackendPage backend_page;
+ EvBackendPageDestroyFunc backend_destroy_func;
+};
+
+struct _EvPageClass {
+ GObjectClass base_class;
+};
+
+GType ev_page_get_type (void) G_GNUC_CONST;
+
+EvPage *ev_page_new (gint index);
+
+G_END_DECLS
+
+#endif /* EV_PAGE_H */
diff --git a/libdocument/ev-render-context.c b/libdocument/ev-render-context.c
new file mode 100644
index 00000000..79dfa962
--- /dev/null
+++ b/libdocument/ev-render-context.c
@@ -0,0 +1,101 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Jonathan Blandford <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+#include "ev-render-context.h"
+
+static void ev_render_context_init (EvRenderContext *rc);
+static void ev_render_context_class_init (EvRenderContextClass *class);
+
+
+G_DEFINE_TYPE (EvRenderContext, ev_render_context, G_TYPE_OBJECT);
+
+static void ev_render_context_init (EvRenderContext *rc) { /* Do Nothing */ }
+
+static void
+ev_render_context_dispose (GObject *object)
+{
+ EvRenderContext *rc;
+
+ rc = (EvRenderContext *) object;
+
+ if (rc->page) {
+ g_object_unref (rc->page);
+ rc->page = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_render_context_parent_class)->dispose) (object);
+}
+
+static void
+ev_render_context_class_init (EvRenderContextClass *class)
+{
+ GObjectClass *oclass;
+
+ oclass = G_OBJECT_CLASS (class);
+
+ oclass->dispose = ev_render_context_dispose;
+}
+
+EvRenderContext *
+ev_render_context_new (EvPage *page,
+ gint rotation,
+ gdouble scale)
+{
+ EvRenderContext *rc;
+
+ rc = (EvRenderContext *) g_object_new (EV_TYPE_RENDER_CONTEXT, NULL);
+
+ rc->page = page ? g_object_ref (page) : NULL;
+ rc->rotation = rotation;
+ rc->scale = scale;
+
+ return rc;
+}
+
+void
+ev_render_context_set_page (EvRenderContext *rc,
+ EvPage *page)
+{
+ g_return_if_fail (rc != NULL);
+ g_return_if_fail (EV_IS_PAGE (page));
+
+ if (rc->page)
+ g_object_unref (rc->page);
+ rc->page = g_object_ref (page);
+}
+
+void
+ev_render_context_set_rotation (EvRenderContext *rc,
+ int rotation)
+{
+ g_return_if_fail (rc != NULL);
+
+ rc->rotation = rotation;
+}
+
+void
+ev_render_context_set_scale (EvRenderContext *rc,
+ gdouble scale)
+{
+ g_return_if_fail (rc != NULL);
+
+ rc->scale = scale;
+}
+
diff --git a/libdocument/ev-render-context.h b/libdocument/ev-render-context.h
new file mode 100644
index 00000000..b7a5bf71
--- /dev/null
+++ b/libdocument/ev-render-context.h
@@ -0,0 +1,70 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Jonathan Blandford <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_RENDER_CONTEXT_H
+#define EV_RENDER_CONTEXT_H
+
+#include <glib-object.h>
+
+#include "ev-page.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvRenderContext EvRenderContext;
+typedef struct _EvRenderContextClass EvRenderContextClass;
+
+#define EV_TYPE_RENDER_CONTEXT (ev_render_context_get_type())
+#define EV_RENDER_CONTEXT(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_RENDER_CONTEXT, EvRenderContext))
+#define EV_RENDER_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_RENDER_CONTEXT, EvRenderContextClass))
+#define EV_IS_RENDER_CONTEXT(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_RENDER_CONTEXT))
+
+struct _EvRenderContextClass
+{
+ GObjectClass klass;
+};
+
+struct _EvRenderContext
+{
+ GObject parent;
+
+ EvPage *page;
+ gint rotation;
+ gdouble scale;
+};
+
+
+GType ev_render_context_get_type (void) G_GNUC_CONST;
+EvRenderContext *ev_render_context_new (EvPage *page,
+ gint rotation,
+ gdouble scale);
+void ev_render_context_set_page (EvRenderContext *rc,
+ EvPage *page);
+void ev_render_context_set_rotation (EvRenderContext *rc,
+ gint rotation);
+void ev_render_context_set_scale (EvRenderContext *rc,
+ gdouble scale);
+
+
+G_END_DECLS
+
+#endif /* !EV_RENDER_CONTEXT */
diff --git a/libdocument/ev-selection.c b/libdocument/ev-selection.c
new file mode 100644
index 00000000..49e56eb4
--- /dev/null
+++ b/libdocument/ev-selection.c
@@ -0,0 +1,77 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2005 Red Hat, Inc.
+ *
+ * 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, 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 "config.h"
+
+#include "ev-selection.h"
+
+G_DEFINE_INTERFACE (EvSelection, ev_selection, 0)
+
+static void
+ev_selection_default_init (EvSelectionInterface *klass)
+{
+}
+
+void
+ev_selection_render_selection (EvSelection *selection,
+ EvRenderContext *rc,
+ cairo_surface_t **surface,
+ EvRectangle *points,
+ EvRectangle *old_points,
+ EvSelectionStyle style,
+ GdkColor *text,
+ GdkColor *base)
+{
+ EvSelectionInterface *iface = EV_SELECTION_GET_IFACE (selection);
+
+ if (!iface->render_selection)
+ return;
+
+ iface->render_selection (selection, rc,
+ surface,
+ points, old_points,
+ style,
+ text, base);
+}
+
+gchar *
+ev_selection_get_selected_text (EvSelection *selection,
+ EvPage *page,
+ EvSelectionStyle style,
+ EvRectangle *points)
+{
+ EvSelectionInterface *iface = EV_SELECTION_GET_IFACE (selection);
+
+ return iface->get_selected_text (selection, page, style, points);
+}
+
+cairo_region_t *
+ev_selection_get_selection_region (EvSelection *selection,
+ EvRenderContext *rc,
+ EvSelectionStyle style,
+ EvRectangle *points)
+{
+ EvSelectionInterface *iface = EV_SELECTION_GET_IFACE (selection);
+
+ if (!iface->get_selection_region)
+ return NULL;
+
+ return iface->get_selection_region (selection, rc, style, points);
+}
diff --git a/libdocument/ev-selection.h b/libdocument/ev-selection.h
new file mode 100644
index 00000000..dff12e0a
--- /dev/null
+++ b/libdocument/ev-selection.h
@@ -0,0 +1,93 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2000-2003 Marco Pesenti Gritti
+ *
+ * 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, 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.
+ *
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef EV_SELECTION_H
+#define EV_SELECTION_H
+
+#include <glib-object.h>
+#include <glib.h>
+#include <gdk/gdk.h>
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_SELECTION (ev_selection_get_type ())
+#define EV_SELECTION(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_SELECTION, EvSelection))
+#define EV_SELECTION_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_SELECTION, EvSelectionInterface))
+#define EV_IS_SELECTION(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_SELECTION))
+#define EV_IS_SELECTION_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_SELECTION))
+#define EV_SELECTION_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_SELECTION, EvSelectionInterface))
+
+typedef enum {
+ EV_SELECTION_STYLE_GLYPH,
+ EV_SELECTION_STYLE_WORD,
+ EV_SELECTION_STYLE_LINE
+} EvSelectionStyle;
+
+typedef struct _EvSelection EvSelection;
+typedef struct _EvSelectionInterface EvSelectionInterface;
+
+struct _EvSelectionInterface
+{
+ GTypeInterface base_iface;
+
+ void (* render_selection) (EvSelection *selection,
+ EvRenderContext *rc,
+ cairo_surface_t **surface,
+ EvRectangle *points,
+ EvRectangle *old_points,
+ EvSelectionStyle style,
+ GdkColor *text,
+ GdkColor *base);
+ gchar * (* get_selected_text) (EvSelection *selection,
+ EvPage *page,
+ EvSelectionStyle style,
+ EvRectangle *points);
+ cairo_region_t * (* get_selection_region) (EvSelection *selection,
+ EvRenderContext *rc,
+ EvSelectionStyle style,
+ EvRectangle *points);
+};
+
+GType ev_selection_get_type (void) G_GNUC_CONST;
+void ev_selection_render_selection (EvSelection *selection,
+ EvRenderContext *rc,
+ cairo_surface_t **surface,
+ EvRectangle *points,
+ EvRectangle *old_points,
+ EvSelectionStyle style,
+ GdkColor *text,
+ GdkColor *base);
+gchar *ev_selection_get_selected_text (EvSelection *selection,
+ EvPage *page,
+ EvSelectionStyle style,
+ EvRectangle *points);
+cairo_region_t *ev_selection_get_selection_region (EvSelection *selection,
+ EvRenderContext *rc,
+ EvSelectionStyle style,
+ EvRectangle *points);
+
+G_END_DECLS
+
+#endif
diff --git a/libdocument/ev-transition-effect.c b/libdocument/ev-transition-effect.c
new file mode 100644
index 00000000..72bd67c2
--- /dev/null
+++ b/libdocument/ev-transition-effect.c
@@ -0,0 +1,224 @@
+/* ev-transition-effect.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garnacho <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include "ev-transition-effect.h"
+
+#include "ev-document-type-builtins.h"
+
+#define EV_TRANSITION_EFFECT_GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EV_TYPE_TRANSITION_EFFECT, EvTransitionEffectPrivate))
+
+typedef struct EvTransitionEffectPrivate EvTransitionEffectPrivate;
+
+struct EvTransitionEffectPrivate {
+ EvTransitionEffectType type;
+ EvTransitionEffectAlignment alignment;
+ EvTransitionEffectDirection direction;
+
+ gint duration;
+ gint angle;
+ gdouble scale;
+
+ guint rectangular : 1;
+};
+
+enum {
+ PROP_0,
+ PROP_TYPE,
+ PROP_ALIGNMENT,
+ PROP_DIRECTION,
+ PROP_DURATION,
+ PROP_ANGLE,
+ PROP_SCALE,
+ PROP_RECTANGULAR
+};
+
+G_DEFINE_TYPE (EvTransitionEffect, ev_transition_effect, G_TYPE_OBJECT)
+
+static void
+ev_transition_effect_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvTransitionEffectPrivate *priv;
+
+ priv = EV_TRANSITION_EFFECT_GET_PRIV (object);
+
+ switch (prop_id) {
+ case PROP_TYPE:
+ priv->type = g_value_get_enum (value);
+ break;
+ case PROP_ALIGNMENT:
+ priv->alignment = g_value_get_enum (value);
+ break;
+ case PROP_DIRECTION:
+ priv->direction = g_value_get_enum (value);
+ break;
+ case PROP_DURATION:
+ priv->duration = g_value_get_int (value);
+ break;
+ case PROP_ANGLE:
+ priv->angle = g_value_get_int (value);
+ break;
+ case PROP_SCALE:
+ priv->scale = g_value_get_double (value);
+ break;
+ case PROP_RECTANGULAR:
+ priv->rectangular = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ev_transition_effect_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvTransitionEffectPrivate *priv;
+
+ priv = EV_TRANSITION_EFFECT_GET_PRIV (object);
+
+ switch (prop_id) {
+ case PROP_TYPE:
+ g_value_set_enum (value, priv->type);
+ break;
+ case PROP_ALIGNMENT:
+ g_value_set_enum (value, priv->alignment);
+ break;
+ case PROP_DIRECTION:
+ g_value_set_enum (value, priv->direction);
+ break;
+ case PROP_DURATION:
+ g_value_set_int (value, priv->duration);
+ break;
+ case PROP_ANGLE:
+ g_value_set_int (value, priv->angle);
+ break;
+ case PROP_SCALE:
+ g_value_set_double (value, priv->scale);
+ break;
+ case PROP_RECTANGULAR:
+ g_value_set_enum (value, priv->rectangular);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ev_transition_effect_init (EvTransitionEffect *effect)
+{
+ EvTransitionEffectPrivate *priv;
+
+ priv = EV_TRANSITION_EFFECT_GET_PRIV (effect);
+
+ priv->scale = 1.;
+}
+
+static void
+ev_transition_effect_class_init (EvTransitionEffectClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->set_property = ev_transition_effect_set_property;
+ object_class->get_property = ev_transition_effect_get_property;
+
+ g_object_class_install_property (object_class,
+ PROP_TYPE,
+ g_param_spec_enum ("type",
+ "Effect type",
+ "Page transition effect type",
+ EV_TYPE_TRANSITION_EFFECT_TYPE,
+ EV_TRANSITION_EFFECT_REPLACE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_ALIGNMENT,
+ g_param_spec_enum ("alignment",
+ "Effect alignment",
+ "Alignment for the effect",
+ EV_TYPE_TRANSITION_EFFECT_ALIGNMENT,
+ EV_TRANSITION_ALIGNMENT_HORIZONTAL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_DIRECTION,
+ g_param_spec_enum ("direction",
+ "Effect direction",
+ "Direction for the effect",
+ EV_TYPE_TRANSITION_EFFECT_DIRECTION,
+ EV_TRANSITION_DIRECTION_INWARD,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_DURATION,
+ g_param_spec_int ("duration",
+ "Effect duration",
+ "Effect duration in seconds",
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_ANGLE,
+ g_param_spec_int ("angle",
+ "Effect angle",
+ "Effect angle in degrees, counted "
+ "counterclockwise from left to right",
+ 0, 360, 0,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_SCALE,
+ g_param_spec_double ("scale",
+ "Effect scale",
+ "Scale at which the effect is applied",
+ 0., 1., 1.,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_RECTANGULAR,
+ g_param_spec_boolean ("rectangular",
+ "Rectangular area",
+ "Whether the covered area is rectangular",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (klass, sizeof (EvTransitionEffectPrivate));
+}
+
+EvTransitionEffect *
+ev_transition_effect_new (EvTransitionEffectType type,
+ const gchar *first_property_name,
+ ...)
+{
+ GObject *object;
+ va_list args;
+
+ object = g_object_new (EV_TYPE_TRANSITION_EFFECT,
+ "type", type,
+ NULL);
+
+ va_start (args, first_property_name);
+ g_object_set_valist (object, first_property_name, args);
+ va_end (args);
+
+ return EV_TRANSITION_EFFECT (object);
+}
diff --git a/libdocument/ev-transition-effect.h b/libdocument/ev-transition-effect.h
new file mode 100644
index 00000000..23591a51
--- /dev/null
+++ b/libdocument/ev-transition-effect.h
@@ -0,0 +1,87 @@
+/* ev-transition-effect.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garnacho <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
+#ifndef __EV_TRANSITION_EFFECT_H__
+#define __EV_TRANSITION_EFFECT_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_TRANSITION_EFFECT (ev_transition_effect_get_type ())
+#define EV_TRANSITION_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_TRANSITION_EFFECT, EvTransitionEffect))
+#define EV_TRANSITION_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_TRANSITION_EFFECT, EvTransitionEffectClass))
+#define EV_IS_TRANSITION_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_TRANSITION_EFFECT))
+#define EV_IS_TRANSITION_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EV_TYPE_TRANSITION_EFFECT))
+#define EV_TRANSITION_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EV_TYPE_TRANSITION_EFFECT, EvTransitionEffectClass))
+
+typedef enum {
+ EV_TRANSITION_EFFECT_REPLACE,
+ EV_TRANSITION_EFFECT_SPLIT,
+ EV_TRANSITION_EFFECT_BLINDS,
+ EV_TRANSITION_EFFECT_BOX,
+ EV_TRANSITION_EFFECT_WIPE,
+ EV_TRANSITION_EFFECT_DISSOLVE,
+ EV_TRANSITION_EFFECT_GLITTER,
+ EV_TRANSITION_EFFECT_FLY,
+ EV_TRANSITION_EFFECT_PUSH,
+ EV_TRANSITION_EFFECT_COVER,
+ EV_TRANSITION_EFFECT_UNCOVER,
+ EV_TRANSITION_EFFECT_FADE
+} EvTransitionEffectType;
+
+typedef enum {
+ EV_TRANSITION_ALIGNMENT_HORIZONTAL,
+ EV_TRANSITION_ALIGNMENT_VERTICAL
+} EvTransitionEffectAlignment;
+
+typedef enum {
+ EV_TRANSITION_DIRECTION_INWARD,
+ EV_TRANSITION_DIRECTION_OUTWARD
+} EvTransitionEffectDirection;
+
+
+typedef struct EvTransitionEffect EvTransitionEffect;
+typedef struct EvTransitionEffectClass EvTransitionEffectClass;
+
+struct EvTransitionEffect
+{
+ GObject parent_instance;
+};
+
+struct EvTransitionEffectClass
+{
+ GObjectClass parent_class;
+};
+
+
+GType ev_transition_effect_get_type (void) G_GNUC_CONST;
+
+EvTransitionEffect *ev_transition_effect_new (EvTransitionEffectType type,
+ const gchar *first_property_name,
+ ...);
+
+G_END_DECLS
+
+#endif /* __EV_TRANSITION_EFFECT_H__ */
diff --git a/libdocument/ev-version.h.in b/libdocument/ev-version.h.in
new file mode 100644
index 00000000..97cf0a98
--- /dev/null
+++ b/libdocument/ev-version.h.in
@@ -0,0 +1,69 @@
+/*
+ * Copyright © 2009 Christian Persch
+ *
+ * This library is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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 EV_VERSION_H
+#define EV_VERSION_H
+
+/**
+ * SECTION:ev-version
+ * @short_description: Library version checks
+ *
+ * These macros enable compile time checks of the library version.
+ */
+
+/**
+ * EV_MAJOR_VERSION:
+ *
+ * The major version number of the EV library
+ * (e.g. in version 3.1.4 this is 3).
+ */
+
+#define EV_MAJOR_VERSION (@EV_MAJOR_VERSION@)
+
+/**
+ * EV_MINOR_VERSION:
+ *
+ * The minor version number of the EV library
+ * (e.g. in version 3.1.4 this is 1).
+ */
+#define EV_MINOR_VERSION (@EV_MINOR_VERSION@)
+
+/**
+ * EV_MICRO_VERSION:
+ *
+ * The micro version number of the EV library
+ * (e.g. in version 3.1.4 this is 4).
+ */
+#define EV_MICRO_VERSION (@EV_MICRO_VERSION@)
+
+/**
+ * EV_CHECK_VERSION:
+ * @major: required major version
+ * @minor: required minor version
+ * @micro: required micro version
+ *
+ * Macro to check the library version at compile time.
+ * It returns <literal>1</literal> if the version of EV is greater or
+ * equal to the required one, and <literal>0</literal> otherwise.
+ */
+#define EV_CHECK_VERSION(major,minor,micro) \
+ (EV_MAJOR_VERSION > (major) || \
+ (EV_MAJOR_VERSION == (major) && EV_MINOR_VERSION > (minor)) || \
+ (EV_MAJOR_VERSION == (major) && EV_MINOR_VERSION == (minor) && EV_MICRO_VERSION >= (micro)))
+
+#endif /* #ifndef EV_VERSION_H */
diff --git a/libmisc/Makefile.am b/libmisc/Makefile.am
new file mode 100644
index 00000000..28097018
--- /dev/null
+++ b/libmisc/Makefile.am
@@ -0,0 +1,22 @@
+noinst_LTLIBRARIES = libevmisc.la
+
+libevmisc_la_SOURCES = \
+ ev-page-action.c \
+ ev-page-action.h \
+ ev-page-action-widget.c \
+ ev-page-action-widget.h
+
+libevmisc_la_CFLAGS = \
+ -DEVINCEDATADIR=\"$(pkgdatadir)\" \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libdocument \
+ -I$(top_srcdir)/libview \
+ $(SHELL_CORE_CFLAGS) \
+ $(WARNING_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+libevmisc_la_LIBADD = \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(top_builddir)/libview/libevview.la
+
+-include $(top_srcdir)/git.mk
diff --git a/libmisc/ev-page-action-widget.c b/libmisc/ev-page-action-widget.c
new file mode 100644
index 00000000..2bc74e60
--- /dev/null
+++ b/libmisc/ev-page-action-widget.c
@@ -0,0 +1,495 @@
+/*
+ * Copyright (C) 2003, 2004 Marco Pesenti Gritti
+ * Copyright (C) 2003, 2004 Christian Persch
+ *
+ * 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, 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 "config.h"
+
+#include <string.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include <evince-document.h>
+#include "ev-page-action.h"
+#include "ev-page-action-widget.h"
+
+/* Widget we pass back */
+static void ev_page_action_widget_init (EvPageActionWidget *action_widget);
+static void ev_page_action_widget_class_init (EvPageActionWidgetClass *action_widget);
+
+enum
+{
+ WIDGET_ACTIVATE_LINK,
+ WIDGET_N_SIGNALS
+};
+
+struct _EvPageActionWidget
+{
+ GtkToolItem parent;
+
+ EvDocument *document;
+ EvDocumentModel *doc_model;
+
+ GtkWidget *entry;
+ GtkWidget *label;
+ guint signal_id;
+ GtkTreeModel *filter_model;
+ GtkTreeModel *model;
+};
+
+static guint widget_signals[WIDGET_N_SIGNALS] = {0, };
+
+G_DEFINE_TYPE (EvPageActionWidget, ev_page_action_widget, GTK_TYPE_TOOL_ITEM)
+
+static void
+update_pages_label (EvPageActionWidget *action_widget,
+ gint page)
+{
+ char *label_text;
+ gint n_pages;
+
+ n_pages = ev_document_get_n_pages (action_widget->document);
+ if (ev_document_has_text_page_labels (action_widget->document)) {
+ label_text = g_strdup_printf (_("(%d of %d)"), page + 1, n_pages);
+ } else {
+ label_text = g_strdup_printf (_("of %d"), n_pages);
+ }
+ gtk_label_set_text (GTK_LABEL (action_widget->label), label_text);
+ g_free (label_text);
+}
+
+static void
+ev_page_action_widget_set_current_page (EvPageActionWidget *action_widget,
+ gint page)
+{
+ if (page >= 0) {
+ gchar *page_label;
+
+ gtk_entry_set_width_chars (GTK_ENTRY (action_widget->entry),
+ CLAMP (ev_document_get_max_label_len (action_widget->document),
+ 6, 12));
+
+ page_label = ev_document_get_page_label (action_widget->document, page);
+ gtk_entry_set_text (GTK_ENTRY (action_widget->entry), page_label);
+ gtk_editable_set_position (GTK_EDITABLE (action_widget->entry), -1);
+ g_free (page_label);
+
+ } else {
+ gtk_entry_set_text (GTK_ENTRY (action_widget->entry), "");
+ }
+
+ update_pages_label (action_widget, page);
+}
+
+static void
+page_changed_cb (EvDocumentModel *model,
+ gint old_page,
+ gint new_page,
+ EvPageActionWidget *action_widget)
+{
+ ev_page_action_widget_set_current_page (action_widget, new_page);
+}
+
+static gboolean
+page_scroll_cb (EvPageActionWidget *action_widget, GdkEventScroll *event)
+{
+ EvDocumentModel *model = action_widget->doc_model;
+ gint pageno;
+
+ pageno = ev_document_model_get_page (model);
+ if ((event->direction == GDK_SCROLL_DOWN) &&
+ (pageno < ev_document_get_n_pages (action_widget->document) - 1))
+ pageno++;
+ if ((event->direction == GDK_SCROLL_UP) && (pageno > 0))
+ pageno--;
+ ev_document_model_set_page (model, pageno);
+
+ return TRUE;
+}
+
+static void
+activate_cb (EvPageActionWidget *action_widget)
+{
+ EvDocumentModel *model;
+ const char *text;
+ EvLinkDest *link_dest;
+ EvLinkAction *link_action;
+ EvLink *link;
+ gchar *link_text;
+ gint current_page;
+
+ model = action_widget->doc_model;
+ current_page = ev_document_model_get_page (model);
+
+ text = gtk_entry_get_text (GTK_ENTRY (action_widget->entry));
+
+ link_dest = ev_link_dest_new_page_label (text);
+ link_action = ev_link_action_new_dest (link_dest);
+ link_text = g_strdup_printf ("Page: %s", text);
+ link = ev_link_new (link_text, link_action);
+
+ g_signal_emit (action_widget, widget_signals[WIDGET_ACTIVATE_LINK], 0, link);
+
+ g_object_unref (link);
+ g_free (link_text);
+
+ if (current_page == ev_document_model_get_page (model))
+ ev_page_action_widget_set_current_page (action_widget, current_page);
+}
+
+static void
+ev_page_action_widget_init (EvPageActionWidget *action_widget)
+{
+ GtkWidget *hbox;
+ AtkObject *obj;
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_set_spacing (GTK_BOX (hbox), 6);
+
+ action_widget->entry = gtk_entry_new ();
+ gtk_widget_add_events (action_widget->entry,
+ GDK_BUTTON_MOTION_MASK);
+ gtk_entry_set_width_chars (GTK_ENTRY (action_widget->entry), 5);
+ gtk_entry_set_text (GTK_ENTRY (action_widget->entry), "");
+ g_signal_connect_swapped (action_widget->entry, "scroll-event",
+ G_CALLBACK (page_scroll_cb),
+ action_widget);
+ g_signal_connect_swapped (action_widget->entry, "activate",
+ G_CALLBACK (activate_cb),
+ action_widget);
+
+ obj = gtk_widget_get_accessible (action_widget->entry);
+ atk_object_set_name (obj, "page-label-entry");
+
+ gtk_box_pack_start (GTK_BOX (hbox), action_widget->entry,
+ FALSE, FALSE, 0);
+ gtk_widget_show (action_widget->entry);
+
+ action_widget->label = gtk_label_new (NULL);
+ gtk_box_pack_start (GTK_BOX (hbox), action_widget->label,
+ FALSE, FALSE, 0);
+ gtk_widget_show (action_widget->label);
+
+ gtk_container_set_border_width (GTK_CONTAINER (action_widget), 6);
+ gtk_container_add (GTK_CONTAINER (action_widget), hbox);
+ gtk_widget_show (hbox);
+
+ gtk_widget_show (GTK_WIDGET (action_widget));
+}
+
+static void
+ev_page_action_widget_document_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvPageActionWidget *action_widget)
+{
+ EvDocument *document = ev_document_model_get_document (model);
+
+ g_object_ref (document);
+ if (action_widget->document)
+ g_object_unref (action_widget->document);
+ action_widget->document = document;
+
+ if (action_widget->signal_id > 0) {
+ g_signal_handler_disconnect (action_widget->doc_model,
+ action_widget->signal_id);
+ action_widget->signal_id = 0;
+ }
+ action_widget->signal_id =
+ g_signal_connect_object (action_widget->doc_model,
+ "page-changed",
+ G_CALLBACK (page_changed_cb),
+ action_widget, 0);
+
+ ev_page_action_widget_set_current_page (action_widget,
+ ev_document_model_get_page (model));
+}
+
+void
+ev_page_action_widget_set_model (EvPageActionWidget *action_widget,
+ EvDocumentModel *model)
+{
+ if (action_widget->doc_model) {
+ g_object_remove_weak_pointer (G_OBJECT (action_widget->doc_model),
+ (gpointer)&action_widget->doc_model);
+ }
+ action_widget->doc_model = model;
+ g_object_add_weak_pointer (G_OBJECT (model),
+ (gpointer)&action_widget->doc_model);
+
+ g_signal_connect (model, "notify::document",
+ G_CALLBACK (ev_page_action_widget_document_changed_cb),
+ action_widget);
+}
+
+static void
+ev_page_action_widget_finalize (GObject *object)
+{
+ EvPageActionWidget *action_widget = EV_PAGE_ACTION_WIDGET (object);
+
+ if (action_widget->doc_model != NULL) {
+ if (action_widget->signal_id > 0) {
+ g_signal_handler_disconnect (action_widget->doc_model,
+ action_widget->signal_id);
+ action_widget->signal_id = 0;
+ }
+ g_object_remove_weak_pointer (G_OBJECT (action_widget->doc_model),
+ (gpointer)&action_widget->doc_model);
+ action_widget->doc_model = NULL;
+ }
+
+ if (action_widget->document) {
+ g_object_unref (action_widget->document);
+ action_widget->document = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_page_action_widget_parent_class)->finalize (object);
+}
+
+static void
+ev_page_action_widget_class_init (EvPageActionWidgetClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+ object_class->finalize = ev_page_action_widget_finalize;
+
+ widget_signals[WIDGET_ACTIVATE_LINK] =
+ g_signal_new ("activate_link",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvPageActionWidgetClass, activate_link),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+
+}
+
+static gboolean
+match_selected_cb (GtkEntryCompletion *completion,
+ GtkTreeModel *filter_model,
+ GtkTreeIter *filter_iter,
+ EvPageActionWidget *proxy)
+{
+ EvLink *link;
+ GtkTreeIter *iter;
+
+ gtk_tree_model_get (filter_model, filter_iter,
+ 0, &iter,
+ -1);
+ gtk_tree_model_get (proxy->model, iter,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+ -1);
+
+ g_signal_emit (proxy, widget_signals[WIDGET_ACTIVATE_LINK], 0, link);
+
+ if (link)
+ g_object_unref (link);
+
+ gtk_tree_iter_free (iter);
+
+ return TRUE;
+}
+
+
+static void
+display_completion_text (GtkCellLayout *cell_layout,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *filter_model,
+ GtkTreeIter *filter_iter,
+ EvPageActionWidget *proxy)
+{
+ EvLink *link;
+ GtkTreeIter *iter;
+
+ gtk_tree_model_get (filter_model, filter_iter,
+ 0, &iter,
+ -1);
+ gtk_tree_model_get (proxy->model, iter,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+ -1);
+
+ g_object_set (renderer, "text", ev_link_get_title (link), NULL);
+
+ if (link)
+ g_object_unref (link);
+
+ gtk_tree_iter_free (iter);
+}
+
+static gboolean
+match_completion (GtkEntryCompletion *completion,
+ const gchar *key,
+ GtkTreeIter *filter_iter,
+ EvPageActionWidget *proxy)
+{
+ EvLink *link;
+ GtkTreeIter *iter;
+ const gchar *text = NULL;
+
+ gtk_tree_model_get (gtk_entry_completion_get_model (completion),
+ filter_iter,
+ 0, &iter,
+ -1);
+ gtk_tree_model_get (proxy->model, iter,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+ -1);
+
+
+ if (link) {
+ text = ev_link_get_title (link);
+ g_object_unref (link);
+ }
+
+ gtk_tree_iter_free (iter);
+
+ if (text && key) {
+ gchar *normalized_text;
+ gchar *normalized_key;
+ gchar *case_normalized_text;
+ gchar *case_normalized_key;
+ gboolean retval = FALSE;
+
+ normalized_text = g_utf8_normalize (text, -1, G_NORMALIZE_ALL);
+ normalized_key = g_utf8_normalize (key, -1, G_NORMALIZE_ALL);
+ case_normalized_text = g_utf8_casefold (normalized_text, -1);
+ case_normalized_key = g_utf8_casefold (normalized_key, -1);
+
+ if (strstr (case_normalized_text, case_normalized_key))
+ retval = TRUE;
+
+ g_free (normalized_text);
+ g_free (normalized_key);
+ g_free (case_normalized_text);
+ g_free (case_normalized_key);
+
+ return retval;
+ }
+
+ return FALSE;
+}
+
+/* user data to set on the widget. */
+#define EPA_FILTER_MODEL_DATA "epa-filter-model"
+
+static gboolean
+build_new_tree_cb (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ GtkTreeModel *filter_model = GTK_TREE_MODEL (data);
+ EvLink *link;
+ EvLinkAction *action;
+ EvLinkActionType type;
+
+ gtk_tree_model_get (model, iter,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+ -1);
+
+ if (!link)
+ return FALSE;
+
+ action = ev_link_get_action (link);
+ if (!action) {
+ g_object_unref (link);
+ return FALSE;
+ }
+
+ type = ev_link_action_get_action_type (action);
+
+ if (type == EV_LINK_ACTION_TYPE_GOTO_DEST) {
+ GtkTreeIter filter_iter;
+
+ gtk_list_store_append (GTK_LIST_STORE (filter_model), &filter_iter);
+ gtk_list_store_set (GTK_LIST_STORE (filter_model), &filter_iter,
+ 0, iter,
+ -1);
+ }
+
+ g_object_unref (link);
+
+ return FALSE;
+}
+
+static GtkTreeModel *
+get_filter_model_from_model (GtkTreeModel *model)
+{
+ GtkTreeModel *filter_model;
+
+ filter_model =
+ (GtkTreeModel *) g_object_get_data (G_OBJECT (model), EPA_FILTER_MODEL_DATA);
+ if (filter_model == NULL) {
+ filter_model = (GtkTreeModel *) gtk_list_store_new (1, GTK_TYPE_TREE_ITER);
+
+ gtk_tree_model_foreach (model,
+ build_new_tree_cb,
+ filter_model);
+ g_object_set_data_full (G_OBJECT (model), EPA_FILTER_MODEL_DATA, filter_model, g_object_unref);
+ }
+
+ return filter_model;
+}
+
+
+void
+ev_page_action_widget_update_links_model (EvPageActionWidget *proxy, GtkTreeModel *model)
+{
+ GtkTreeModel *filter_model;
+ GtkEntryCompletion *completion;
+ GtkCellRenderer *renderer;
+
+ if (!model)
+ return;
+
+ /* Magik */
+ proxy->model = model;
+ filter_model = get_filter_model_from_model (model);
+
+ completion = gtk_entry_completion_new ();
+ g_object_set (G_OBJECT (completion),
+ "popup-set-width", FALSE,
+ "model", filter_model,
+ NULL);
+
+ g_signal_connect (completion, "match-selected", G_CALLBACK (match_selected_cb), proxy);
+ gtk_entry_completion_set_match_func (completion,
+ (GtkEntryCompletionMatchFunc) match_completion,
+ proxy, NULL);
+
+ /* Set up the layout */
+ renderer = (GtkCellRenderer *)
+ g_object_new (GTK_TYPE_CELL_RENDERER_TEXT,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ "width_chars", 30,
+ NULL);
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (completion), renderer, TRUE);
+ gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (completion),
+ renderer,
+ (GtkCellLayoutDataFunc) display_completion_text,
+ proxy, NULL);
+ gtk_entry_set_completion (GTK_ENTRY (proxy->entry), completion);
+
+ g_object_unref (completion);
+}
+
+void
+ev_page_action_widget_grab_focus (EvPageActionWidget *proxy)
+{
+ gtk_widget_grab_focus (proxy->entry);
+}
+
diff --git a/libmisc/ev-page-action-widget.h b/libmisc/ev-page-action-widget.h
new file mode 100644
index 00000000..cf33b551
--- /dev/null
+++ b/libmisc/ev-page-action-widget.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2003, 2004 Marco Pesenti Gritti
+ * Copyright (C) 2003, 2004 Christian Persch
+ *
+ * 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, 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 <evince-view.h>
+
+#include <gtk/gtk.h>
+
+#define EV_TYPE_PAGE_ACTION_WIDGET (ev_page_action_widget_get_type ())
+#define EV_PAGE_ACTION_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_PAGE_ACTION_WIDGET, EvPageActionWidget))
+
+typedef struct _EvPageActionWidget EvPageActionWidget;
+typedef struct _EvPageActionWidgetClass EvPageActionWidgetClass;
+
+struct _EvPageActionWidgetClass
+{
+ GtkToolItemClass parent_class;
+
+ void (* activate_link) (EvPageActionWidget *page_action,
+ EvLink *link);
+};
+
+GType ev_page_action_widget_get_type (void) G_GNUC_CONST;
+
+void ev_page_action_widget_update_links_model (EvPageActionWidget *proxy,
+ GtkTreeModel *model);
+
+void ev_page_action_widget_set_model (EvPageActionWidget *action_widget,
+ EvDocumentModel *doc_model);
+void ev_page_action_widget_grab_focus (EvPageActionWidget *proxy);
diff --git a/libmisc/ev-page-action.c b/libmisc/ev-page-action.c
new file mode 100644
index 00000000..ff1f9fee
--- /dev/null
+++ b/libmisc/ev-page-action.c
@@ -0,0 +1,239 @@
+/*
+ * Copyright (C) 2003, 2004 Marco Pesenti Gritti
+ * Copyright (C) 2003, 2004 Christian Persch
+ *
+ * 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, 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.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "ev-page-action.h"
+#include "ev-page-action-widget.h"
+
+struct _EvPageActionPrivate
+{
+ EvDocumentModel *doc_model;
+ GtkTreeModel *model;
+};
+
+
+static void ev_page_action_init (EvPageAction *action);
+static void ev_page_action_class_init (EvPageActionClass *class);
+
+enum
+{
+ ACTIVATE_LINK,
+ N_SIGNALS
+};
+
+static guint signals[N_SIGNALS] = {0, };
+
+G_DEFINE_TYPE (EvPageAction, ev_page_action, GTK_TYPE_ACTION)
+
+#define EV_PAGE_ACTION_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_PAGE_ACTION, EvPageActionPrivate))
+
+enum {
+ PROP_0,
+ PROP_MODEL
+};
+
+static GtkWidget *
+create_tool_item (GtkAction *action)
+{
+ GtkWidget *proxy;
+
+ proxy = g_object_new (EV_TYPE_PAGE_ACTION_WIDGET, NULL);
+
+ return proxy;
+}
+
+static void
+update_model (EvPageAction *page, GParamSpec *pspec, EvPageActionWidget *proxy)
+{
+ ev_page_action_widget_update_links_model (proxy, page->priv->model);
+}
+
+static void
+activate_link_cb (EvPageActionWidget *proxy, EvLink *link, EvPageAction *action)
+{
+ g_signal_emit (action, signals[ACTIVATE_LINK], 0, link);
+}
+
+static void
+connect_proxy (GtkAction *action, GtkWidget *proxy)
+{
+ EvPageAction *page = EV_PAGE_ACTION (action);
+
+ if (GTK_IS_TOOL_ITEM (proxy)) {
+ ev_page_action_widget_set_model (EV_PAGE_ACTION_WIDGET (proxy),
+ page->priv->doc_model);
+ g_signal_connect (proxy, "activate_link",
+ G_CALLBACK (activate_link_cb),
+ action);
+ g_signal_connect_object (action, "notify::model",
+ G_CALLBACK (update_model),
+ proxy, 0);
+ }
+
+ GTK_ACTION_CLASS (ev_page_action_parent_class)->connect_proxy (action, proxy);
+}
+
+static void
+ev_page_action_dispose (GObject *object)
+{
+ EvPageAction *page = EV_PAGE_ACTION (object);
+
+ if (page->priv->model) {
+ g_object_unref (page->priv->model);
+ page->priv->model = NULL;
+ }
+
+ page->priv->doc_model = NULL;
+
+ G_OBJECT_CLASS (ev_page_action_parent_class)->dispose (object);
+}
+
+static void
+ev_page_action_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvPageAction *page = EV_PAGE_ACTION (object);
+
+ switch (prop_id)
+ {
+ case PROP_MODEL:
+ ev_page_action_set_links_model (page, g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ev_page_action_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvPageAction *page = EV_PAGE_ACTION (object);
+
+ switch (prop_id)
+ {
+ case PROP_MODEL:
+ g_value_set_object (value, page->priv->model);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+void
+ev_page_action_set_model (EvPageAction *page,
+ EvDocumentModel *model)
+{
+ g_return_if_fail (EV_IS_PAGE_ACTION (page));
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ if (page->priv->doc_model == model)
+ return;
+
+ page->priv->doc_model = model;
+}
+
+void
+ev_page_action_set_links_model (EvPageAction *page,
+ GtkTreeModel *links_model)
+{
+ g_return_if_fail (EV_IS_PAGE_ACTION (page));
+ g_return_if_fail (GTK_IS_TREE_MODEL (links_model));
+
+ if (page->priv->model == links_model)
+ return;
+
+ if (page->priv->model)
+ g_object_unref (page->priv->model);
+ page->priv->model = g_object_ref (links_model);
+
+ g_object_notify (G_OBJECT (page), "model");
+}
+
+void
+ev_page_action_grab_focus (EvPageAction *page_action)
+{
+ GSList *proxies;
+
+ proxies = gtk_action_get_proxies (GTK_ACTION (page_action));
+ for (; proxies != NULL; proxies = proxies->next) {
+ EvPageActionWidget *proxy;
+
+ proxy = EV_PAGE_ACTION_WIDGET (proxies->data);
+
+ if (gtk_widget_get_mapped (GTK_WIDGET (proxy)))
+ ev_page_action_widget_grab_focus (proxy);
+ }
+}
+
+static void
+ev_page_action_init (EvPageAction *page)
+{
+ page->priv = EV_PAGE_ACTION_GET_PRIVATE (page);
+}
+
+static void
+ev_page_action_class_init (EvPageActionClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+ GtkActionClass *action_class = GTK_ACTION_CLASS (class);
+
+ object_class->dispose = ev_page_action_dispose;
+ object_class->set_property = ev_page_action_set_property;
+ object_class->get_property = ev_page_action_get_property;
+
+ action_class->toolbar_item_type = GTK_TYPE_TOOL_ITEM;
+ action_class->create_tool_item = create_tool_item;
+ action_class->connect_proxy = connect_proxy;
+
+ signals[ACTIVATE_LINK] = g_signal_new ("activate_link",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvPageActionClass, activate_link),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+
+ g_object_class_install_property (object_class,
+ PROP_MODEL,
+ g_param_spec_object ("model",
+ "Model",
+ "Current Links Model",
+ GTK_TYPE_TREE_MODEL,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (object_class, sizeof (EvPageActionPrivate));
+}
diff --git a/libmisc/ev-page-action.h b/libmisc/ev-page-action.h
new file mode 100644
index 00000000..b18db61d
--- /dev/null
+++ b/libmisc/ev-page-action.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2003, 2004 Marco Pesenti Gritti
+ * Copyright (C) 2003, 2004 Christian Persch
+ *
+ * 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, 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 EV_PAGE_ACTION_H
+#define EV_PAGE_ACTION_H
+
+#include <gtk/gtk.h>
+
+#include <evince-document.h>
+#include <evince-view.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_PAGE_ACTION (ev_page_action_get_type ())
+#define EV_PAGE_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_PAGE_ACTION, EvPageAction))
+#define EV_PAGE_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_PAGE_ACTION, EvPageActionClass))
+#define EV_IS_PAGE_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_PAGE_ACTION))
+#define EV_IS_PAGE_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EV_TYPE_PAGE_ACTION))
+#define EV_PAGE_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), EV_TYPE_PAGE_ACTION, EvPageActionClass))
+
+typedef struct _EvPageAction EvPageAction;
+typedef struct _EvPageActionPrivate EvPageActionPrivate;
+typedef struct _EvPageActionClass EvPageActionClass;
+
+struct _EvPageAction
+{
+ GtkAction parent;
+
+ /*< private >*/
+ EvPageActionPrivate *priv;
+};
+
+struct _EvPageActionClass
+{
+ GtkActionClass parent_class;
+
+ void (* activate_link) (EvPageAction *page_action,
+ EvLink *link);
+};
+
+GType ev_page_action_get_type (void) G_GNUC_CONST;
+
+void ev_page_action_set_model (EvPageAction *page_action,
+ EvDocumentModel *model);
+void ev_page_action_set_links_model (EvPageAction *page_action,
+ GtkTreeModel *links_model);
+void ev_page_action_grab_focus (EvPageAction *page_action);
+
+G_END_DECLS
+
+#endif
diff --git a/libview/Makefile.am b/libview/Makefile.am
new file mode 100644
index 00000000..fc1e6205
--- /dev/null
+++ b/libview/Makefile.am
@@ -0,0 +1,163 @@
+lib_LTLIBRARIES = libevview.la
+
+NOINST_H_FILES = \
+ ev-annotation-window.h \
+ ev-loading-window.h \
+ ev-page-cache.h \
+ ev-pixbuf-cache.h \
+ ev-timeline.h \
+ ev-transition-animation.h \
+ ev-view-accessible.h \
+ ev-view-cursor.h \
+ ev-view-marshal.h \
+ ev-view-private.h
+
+INST_H_SRC_FILES = \
+ ev-document-model.h \
+ ev-jobs.h \
+ ev-job-scheduler.h \
+ ev-print-operation.h \
+ ev-stock-icons.h \
+ ev-view.h \
+ ev-view-presentation.h
+
+INST_H_FILES = \
+ $(INST_H_SRC_FILES) \
+ ev-view-type-builtins.h
+
+headerdir = $(includedir)/evince/$(EV_API_VERSION)/libview
+header_DATA = $(INST_H_FILES)
+
+libevview_la_SOURCES = \
+ ev-annotation-window.c \
+ ev-document-model.c \
+ ev-loading-window.c \
+ ev-jobs.c \
+ ev-job-scheduler.c \
+ ev-page-cache.c \
+ ev-pixbuf-cache.c \
+ ev-print-operation.c \
+ ev-stock-icons.c \
+ ev-timeline.c \
+ ev-transition-animation.c \
+ ev-view.c \
+ ev-view-accessible.c \
+ ev-view-marshal.c \
+ ev-view-cursor.c \
+ ev-view-presentation.c \
+ ev-view-type-builtins.c \
+ $(NOINST_H_FILES) \
+ $(INST_H_FILES)
+
+libevview_la_CPPFLAGS = \
+ -DEVINCEDATADIR=\"$(pkgdatadir)\" \
+ -DG_LOG_DOMAIN=\"EvinceView\" \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DEVINCE_COMPILATION \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libdocument \
+ -I$(top_builddir) \
+ $(AM_CPPFLAGS)
+
+libevview_la_CFLAGS = \
+ $(LIBVIEW_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED) \
+ $(AM_CFLAGS)
+
+libevview_la_LDFLAGS = \
+ -version-info $(EV_VIEW_LT_VERSION_INFO) \
+ -no-undefined \
+ -export-symbols-regex "^ev_*" \
+ $(AM_LDFLAGS)
+
+libevview_la_LIBADD = \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(LIBVIEW_LIBS)
+
+BUILT_SOURCES = \
+ ev-view-marshal.h \
+ ev-view-marshal.c \
+ ev-view-type-builtins.c \
+ ev-view-type-builtins.h
+
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ stamp-ev-view-type-builtins.h \
+ stamp-ev-view-type-builtins.c
+
+ev-view-marshal.h: $(srcdir)/ev-view-marshal.list
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) --prefix=ev_view_marshal $(srcdir)/ev-view-marshal.list --header --internal > $@
+
+ev-view-marshal.c: $(srcdir)/ev-view-marshal.list
+ echo '#include <config.h>' > ev-view-marshal.c
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) --prefix=ev_view_marshal $(srcdir)/ev-view-marshal.list --header --internal --body >> $@
+
+ev-view-type-builtins.h: stamp-ev-view-type-builtins.h
+ @true
+stamp-ev-view-type-builtins.h: ev-view-type-builtins.h.template $(INST_H_SRC_FILES)
+ $(AM_V_GEN)$(GLIB_MKENUMS) --template $< $(filter-out $<,$^) > xgen-etbh \
+ && (cmp -s xgen-etbh ev-view-type-builtins.h || cp xgen-etbh ev-view-type-builtins.h ) \
+ && rm -f xgen-etbh \
+ && echo timestamp > $(@F)
+
+ev-view-type-builtins.c: stamp-ev-view-type-builtins.c
+ @true
+stamp-ev-view-type-builtins.c: ev-view-type-builtins.c.template $(INST_H_SRC_FILES)
+ $(AM_V_GEN)$(GLIB_MKENUMS) --template $< $(filter-out $<,$^) > xgen-etbc \
+ && (cmp -s xgen-etbc ev-view-type-builtins.c || cp xgen-etbc ev-view-type-builtins.c ) \
+ && rm -f xgen-etbc \
+ && echo timestamp > $(@F)
+
+EXTRA_DIST = \
+ ev-view-type-builtins.c.template \
+ ev-view-type-builtins.h.template \
+ ev-view-marshal.list
+
+# GObject Introspection
+
+if ENABLE_INTROSPECTION
+
+EvinceView-$(EV_API_VERSION).gir: libevview.la Makefile $(INST_H_FILES) $(filter %.c,$(libevview_la_SOURCES))
+ $(AM_V_GEN) PKG_CONFIG_PATH=$(top_builddir):$$PKG_CONFIG_PATH \
+ $(G_IR_SCANNER) -v --namespace EvinceView \
+ --add-include-path=$(top_builddir)/libdocument \
+ --strip-prefix=Ev \
+ --nsversion=$(EV_API_VERSION) \
+ --include=GLib-2.0 \
+ --include=GObject-2.0 \
+ --include=Gio-2.0 \
+ --include=Gdk-2.0 \
+ --include=GdkPixbuf-2.0 \
+ --include=Gtk-2.0 \
+ --include=EvinceDocument-$(EV_API_VERSION) \
+ --library=evview \
+ --libtool="$(LIBTOOL)" \
+ --output $@ \
+ --pkg evince-document-$(EV_API_VERSION) \
+ --pkg evince-view-$(EV_API_VERSION) \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ -DEVINCE_COMPILATION \
+ $(filter %.h,$^) \
+ $(filter %.c,$^)
+
+girdir = $(GIRDIR)
+gir_DATA = EvinceView-$(EV_API_VERSION).gir
+
+typelibsdir = $(GIRTYPELIBDIR)
+typelibs_DATA = EvinceView-$(EV_API_VERSION).typelib
+
+EXTRA_DIST += $(gir_DATA)
+CLEANFILES += $(gir_DATA) $(typelibs_DATA)
+
+%.typelib: %.gir
+ $(AM_V_GEN) LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}. $(G_IR_COMPILER) \
+ --includedir=$(srcdir) \
+ --includedir=$(top_builddir)/libdocument \
+ $(G_IR_COMPILER_OPTS) \
+ $< -o $@
+
+endif # ENABLE_INTROSPECTION
+
+-include $(top_srcdir)/git.mk
diff --git a/libview/ev-annotation-window.c b/libview/ev-annotation-window.c
new file mode 100644
index 00000000..6ecfafc6
--- /dev/null
+++ b/libview/ev-annotation-window.c
@@ -0,0 +1,654 @@
+/* ev-annotation-window.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2007 Iñigo Martinez <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include <string.h>
+
+#include "ev-annotation-window.h"
+#include "ev-stock-icons.h"
+#include "ev-view-marshal.h"
+#include "ev-document-misc.h"
+
+enum {
+ PROP_0,
+ PROP_ANNOTATION,
+ PROP_PARENT
+};
+
+enum {
+ CLOSED,
+ MOVED,
+ N_SIGNALS
+};
+
+struct _EvAnnotationWindow {
+ GtkWindow base_instance;
+
+ EvAnnotation *annotation;
+ GtkWindow *parent;
+
+ GtkWidget *title;
+ GtkWidget *close_button;
+ GtkWidget *text_view;
+ GtkWidget *resize_se;
+ GtkWidget *resize_sw;
+
+ gboolean is_open;
+ EvRectangle rect;
+
+ gboolean in_move;
+ gint x;
+ gint y;
+ gint orig_x;
+ gint orig_y;
+};
+
+struct _EvAnnotationWindowClass {
+ GtkWindowClass base_class;
+
+ void (* closed) (EvAnnotationWindow *window);
+ void (* moved) (EvAnnotationWindow *window,
+ gint x,
+ gint y);
+};
+
+static guint signals[N_SIGNALS];
+
+G_DEFINE_TYPE (EvAnnotationWindow, ev_annotation_window, GTK_TYPE_WINDOW)
+
+#define EV_ICON_SIZE_ANNOT_WINDOW (ev_annotation_window_get_icon_size())
+
+/* Cut and paste from gtkwindow.c */
+static void
+send_focus_change (GtkWidget *widget,
+ gboolean in)
+{
+ GdkEvent *fevent = gdk_event_new (GDK_FOCUS_CHANGE);
+
+ fevent->focus_change.type = GDK_FOCUS_CHANGE;
+ fevent->focus_change.window = gtk_widget_get_window (widget);
+ fevent->focus_change.in = in;
+ if (fevent->focus_change.window)
+ g_object_ref (fevent->focus_change.window);
+
+ gtk_widget_send_focus_change (widget, fevent);
+
+ gdk_event_free (fevent);
+}
+
+static gdouble
+get_screen_dpi (EvAnnotationWindow *window)
+{
+ GdkScreen *screen;
+
+ screen = gtk_window_get_screen (GTK_WINDOW (window));
+ return ev_document_misc_get_screen_dpi (screen);
+}
+
+static GtkIconSize
+ev_annotation_window_get_icon_size (void)
+{
+ static GtkIconSize icon_size = 0;
+
+ if (G_UNLIKELY (icon_size == 0))
+ icon_size = gtk_icon_size_register ("ev-icon-size-annot-window", 8, 8);
+
+ return icon_size;
+}
+
+static void
+ev_annotation_window_sync_contents (EvAnnotationWindow *window)
+{
+ gchar *contents;
+ GtkTextIter start, end;
+ GtkTextBuffer *buffer;
+ EvAnnotation *annot = window->annotation;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (window->text_view));
+ gtk_text_buffer_get_bounds (buffer, &start, &end);
+ contents = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+ ev_annotation_set_contents (annot, contents);
+ g_free (contents);
+}
+
+static void
+ev_annotation_window_set_color (EvAnnotationWindow *window,
+ GdkColor *color)
+{
+ GtkRcStyle *rc_style;
+ GdkColor gcolor;
+
+ gcolor = *color;
+
+ /* Allocate these colors */
+ gdk_colormap_alloc_color (gtk_widget_get_colormap (GTK_WIDGET (window)),
+ &gcolor, FALSE, TRUE);
+
+ /* Apply colors to style */
+ rc_style = gtk_widget_get_modifier_style (GTK_WIDGET (window));
+ rc_style->base[GTK_STATE_NORMAL] = gcolor;
+ rc_style->bg[GTK_STATE_PRELIGHT] = gcolor;
+ rc_style->bg[GTK_STATE_NORMAL] = gcolor;
+ rc_style->bg[GTK_STATE_ACTIVE] = gcolor;
+ rc_style->color_flags[GTK_STATE_PRELIGHT] = GTK_RC_BG;
+ rc_style->color_flags[GTK_STATE_NORMAL] = GTK_RC_BG | GTK_RC_BASE;
+ rc_style->color_flags[GTK_STATE_ACTIVE] = GTK_RC_BG;
+
+ /* Apply the style to the widgets */
+ g_object_ref (rc_style);
+ gtk_widget_modify_style (GTK_WIDGET (window), rc_style);
+ gtk_widget_modify_style (window->close_button, rc_style);
+ gtk_widget_modify_style (window->resize_se, rc_style);
+ gtk_widget_modify_style (window->resize_sw, rc_style);
+ g_object_unref (rc_style);
+}
+
+static void
+ev_annotation_window_label_changed (EvAnnotationMarkup *annot,
+ GParamSpec *pspec,
+ EvAnnotationWindow *window)
+{
+ const gchar *label = ev_annotation_markup_get_label (annot);
+
+ gtk_window_set_title (GTK_WINDOW (window), label);
+ gtk_label_set_text (GTK_LABEL (window->title), label);
+}
+
+static void
+ev_annotation_window_color_changed (EvAnnotation *annot,
+ GParamSpec *pspec,
+ EvAnnotationWindow *window)
+{
+ GdkColor color;
+
+ ev_annotation_get_color (annot, &color);
+ ev_annotation_window_set_color (window, &color);
+}
+
+static void
+ev_annotation_window_dispose (GObject *object)
+{
+ EvAnnotationWindow *window = EV_ANNOTATION_WINDOW (object);
+
+ if (window->annotation) {
+ ev_annotation_window_sync_contents (window);
+ g_object_unref (window->annotation);
+ window->annotation = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_annotation_window_parent_class)->dispose) (object);
+}
+
+static void
+ev_annotation_window_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvAnnotationWindow *window = EV_ANNOTATION_WINDOW (object);
+
+ switch (prop_id) {
+ case PROP_ANNOTATION:
+ window->annotation = g_value_dup_object (value);
+ break;
+ case PROP_PARENT:
+ window->parent = g_value_get_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static gboolean
+ev_annotation_window_resize (EvAnnotationWindow *window,
+ GdkEventButton *event,
+ GtkWidget *ebox)
+{
+ if (event->type == GDK_BUTTON_PRESS && event->button == 1) {
+ gtk_window_begin_resize_drag (GTK_WINDOW (window),
+ window->resize_sw == ebox ?
+ GDK_WINDOW_EDGE_SOUTH_WEST :
+ GDK_WINDOW_EDGE_SOUTH_EAST,
+ event->button, event->x_root,
+ event->y_root, event->time);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+ev_annotation_window_set_resize_cursor (GtkWidget *widget,
+ EvAnnotationWindow *window)
+{
+ GdkWindow *gdk_window = gtk_widget_get_window (widget);
+
+ if (!gdk_window)
+ return;
+
+ if (gtk_widget_is_sensitive (widget)) {
+ GdkDisplay *display = gtk_widget_get_display (widget);
+ GdkCursor *cursor;
+
+ cursor = gdk_cursor_new_for_display (display,
+ widget == window->resize_sw ?
+ GDK_BOTTOM_LEFT_CORNER :
+ GDK_BOTTOM_RIGHT_CORNER);
+ gdk_window_set_cursor (gdk_window, cursor);
+ gdk_cursor_unref (cursor);
+ } else {
+ gdk_window_set_cursor (gdk_window, NULL);
+ }
+}
+
+static gboolean
+text_view_button_press (GtkWidget *widget,
+ GdkEventButton *event,
+ EvAnnotationWindow *window)
+{
+ ev_annotation_window_grab_focus (window);
+
+ return FALSE;
+}
+
+static void
+ev_annotation_window_close (EvAnnotationWindow *window)
+{
+ gtk_widget_hide (GTK_WIDGET (window));
+ g_signal_emit (window, signals[CLOSED], 0);
+}
+
+static void
+ev_annotation_window_init (EvAnnotationWindow *window)
+{
+ GtkWidget *vbox, *hbox;
+ GtkWidget *icon;
+ GtkWidget *swindow;
+
+ gtk_widget_set_can_focus (GTK_WIDGET (window), TRUE);
+
+ vbox = gtk_vbox_new (FALSE, 0);
+
+ /* Title bar */
+ hbox = gtk_hbox_new (FALSE, 0);
+
+ icon = gtk_image_new (); /* FIXME: use the annot icon */
+ gtk_box_pack_start (GTK_BOX (hbox), icon, FALSE, FALSE, 0);
+ gtk_widget_show (icon);
+
+ window->title = gtk_label_new (NULL);
+ gtk_box_pack_start (GTK_BOX (hbox), window->title, TRUE, TRUE, 0);
+ gtk_widget_show (window->title);
+
+ window->close_button = gtk_button_new ();
+ gtk_button_set_relief (GTK_BUTTON (window->close_button), GTK_RELIEF_NONE);
+ gtk_container_set_border_width (GTK_CONTAINER (window->close_button), 0);
+ g_signal_connect_swapped (window->close_button, "clicked",
+ G_CALLBACK (ev_annotation_window_close),
+ window);
+ icon = gtk_image_new_from_stock (EV_STOCK_CLOSE, EV_ICON_SIZE_ANNOT_WINDOW);
+ gtk_container_add (GTK_CONTAINER (window->close_button), icon);
+ gtk_widget_show (icon);
+
+ gtk_box_pack_start (GTK_BOX (hbox), window->close_button, FALSE, FALSE, 0);
+ gtk_widget_show (window->close_button);
+
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+ gtk_widget_show (hbox);
+
+ /* Contents */
+ swindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ window->text_view = gtk_text_view_new ();
+ gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (window->text_view), GTK_WRAP_WORD);
+ g_signal_connect (window->text_view, "button_press_event",
+ G_CALLBACK (text_view_button_press),
+ window);
+ gtk_container_add (GTK_CONTAINER (swindow), window->text_view);
+ gtk_widget_show (window->text_view);
+
+ gtk_box_pack_start (GTK_BOX (vbox), swindow, TRUE, TRUE, 0);
+ gtk_widget_show (swindow);
+
+ /* Resize bar */
+ hbox = gtk_hbox_new (FALSE, 0);
+
+ window->resize_sw = gtk_event_box_new ();
+ gtk_widget_add_events (window->resize_sw, GDK_BUTTON_PRESS_MASK);
+ g_signal_connect_swapped (window->resize_sw, "button-press-event",
+ G_CALLBACK (ev_annotation_window_resize),
+ window);
+ g_signal_connect (window->resize_sw, "realize",
+ G_CALLBACK (ev_annotation_window_set_resize_cursor),
+ window);
+
+ icon = gtk_image_new_from_stock (EV_STOCK_RESIZE_SW, EV_ICON_SIZE_ANNOT_WINDOW);
+ gtk_container_add (GTK_CONTAINER (window->resize_sw), icon);
+ gtk_widget_show (icon);
+ gtk_box_pack_start (GTK_BOX (hbox), window->resize_sw, FALSE, FALSE, 0);
+ gtk_widget_show (window->resize_sw);
+
+ window->resize_se = gtk_event_box_new ();
+ gtk_widget_add_events (window->resize_se, GDK_BUTTON_PRESS_MASK);
+ g_signal_connect_swapped (window->resize_se, "button-press-event",
+ G_CALLBACK (ev_annotation_window_resize),
+ window);
+ g_signal_connect (window->resize_se, "realize",
+ G_CALLBACK (ev_annotation_window_set_resize_cursor),
+ window);
+
+ icon = gtk_image_new_from_stock (EV_STOCK_RESIZE_SE, EV_ICON_SIZE_ANNOT_WINDOW);
+ gtk_container_add (GTK_CONTAINER (window->resize_se), icon);
+ gtk_widget_show (icon);
+ gtk_box_pack_end (GTK_BOX (hbox), window->resize_se, FALSE, FALSE, 0);
+ gtk_widget_show (window->resize_se);
+
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+ gtk_widget_show (hbox);
+
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+ gtk_container_set_border_width (GTK_CONTAINER (window), 0);
+ gtk_widget_show (vbox);
+
+ gtk_widget_add_events (GTK_WIDGET (window),
+ GDK_BUTTON_PRESS_MASK |
+ GDK_KEY_PRESS_MASK);
+ gtk_widget_set_app_paintable (GTK_WIDGET (window), TRUE);
+
+ gtk_container_set_border_width (GTK_CONTAINER (window), 2);
+
+ gtk_window_set_accept_focus (GTK_WINDOW (window), TRUE);
+ gtk_window_set_decorated (GTK_WINDOW (window), FALSE);
+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (window), TRUE);
+ gtk_window_set_skip_pager_hint (GTK_WINDOW (window), TRUE);
+ gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
+}
+
+static GObject *
+ev_annotation_window_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ EvAnnotationWindow *window;
+ EvAnnotation *annot;
+ EvAnnotationMarkup *markup;
+ const gchar *contents;
+ const gchar *label;
+ GdkColor color;
+ EvRectangle *rect;
+ gdouble scale;
+
+ object = G_OBJECT_CLASS (ev_annotation_window_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_params);
+ window = EV_ANNOTATION_WINDOW (object);
+ annot = window->annotation;
+ markup = EV_ANNOTATION_MARKUP (annot);
+
+ gtk_window_set_transient_for (GTK_WINDOW (window), window->parent);
+ gtk_window_set_destroy_with_parent (GTK_WINDOW (window), FALSE);
+
+ label = ev_annotation_markup_get_label (markup);
+ window->is_open = ev_annotation_markup_get_popup_is_open (markup);
+ ev_annotation_markup_get_rectangle (markup, &window->rect);
+
+ rect = &window->rect;
+
+ /* Rectangle is at doc resolution (72.0) */
+ scale = get_screen_dpi (window) / 72.0;
+ gtk_window_resize (GTK_WINDOW (window),
+ (gint)((rect->x2 - rect->x1) * scale),
+ (gint)((rect->y2 - rect->y1) * scale));
+
+ ev_annotation_get_color (annot, &color);
+ ev_annotation_window_set_color (window, &color);
+ gtk_widget_set_name (GTK_WIDGET (window), ev_annotation_get_name (annot));
+ gtk_window_set_title (GTK_WINDOW (window), label);
+ gtk_label_set_text (GTK_LABEL (window->title), label);
+
+ contents = ev_annotation_get_contents (annot);
+ if (contents) {
+ GtkTextBuffer *buffer;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (window->text_view));
+ gtk_text_buffer_set_text (buffer, contents, -1);
+ }
+
+ g_signal_connect (annot, "notify::label",
+ G_CALLBACK (ev_annotation_window_label_changed),
+ window);
+ g_signal_connect (annot, "notify::color",
+ G_CALLBACK (ev_annotation_window_color_changed),
+ window);
+
+ return object;
+}
+
+static gboolean
+ev_annotation_window_button_press_event (GtkWidget *widget,
+ GdkEventButton *event)
+{
+ EvAnnotationWindow *window = EV_ANNOTATION_WINDOW (widget);
+
+ if (event->type == GDK_BUTTON_PRESS && event->button == 1) {
+ window->in_move = TRUE;
+ window->x = event->x_root - event->x;
+ window->y = event->y_root - event->y;
+ gtk_window_begin_move_drag (GTK_WINDOW (widget),
+ event->button,
+ event->x_root,
+ event->y_root,
+ event->time);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+ev_annotation_window_configure_event (GtkWidget *widget,
+ GdkEventConfigure *event)
+{
+ EvAnnotationWindow *window = EV_ANNOTATION_WINDOW (widget);
+
+ if (window->in_move &&
+ (window->x != event->x || window->y != event->y)) {
+ window->x = event->x;
+ window->y = event->y;
+ }
+
+ return GTK_WIDGET_CLASS (ev_annotation_window_parent_class)->configure_event (widget, event);
+}
+
+static gboolean
+ev_annotation_window_focus_in_event (GtkWidget *widget,
+ GdkEventFocus *event)
+{
+ EvAnnotationWindow *window = EV_ANNOTATION_WINDOW (widget);
+
+ if (window->in_move) {
+ if (window->orig_x != window->x || window->orig_y != window->y) {
+ window->orig_x = window->x;
+ window->orig_y = window->y;
+ g_signal_emit (window, signals[MOVED], 0, window->x, window->y);
+ }
+ window->in_move = FALSE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+ev_annotation_window_focus_out_event (GtkWidget *widget,
+ GdkEventFocus *event)
+{
+ EvAnnotationWindow *window = EV_ANNOTATION_WINDOW (widget);
+
+ ev_annotation_window_sync_contents (window);
+
+ return FALSE;
+}
+
+static void
+ev_annotation_window_class_init (EvAnnotationWindowClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *gtk_widget_class = GTK_WIDGET_CLASS (klass);
+
+ g_object_class->constructor = ev_annotation_window_constructor;
+ g_object_class->set_property = ev_annotation_window_set_property;
+ g_object_class->dispose = ev_annotation_window_dispose;
+
+ gtk_widget_class->button_press_event = ev_annotation_window_button_press_event;
+ gtk_widget_class->configure_event = ev_annotation_window_configure_event;
+ gtk_widget_class->focus_in_event = ev_annotation_window_focus_in_event;
+ gtk_widget_class->focus_out_event = ev_annotation_window_focus_out_event;
+
+ g_object_class_install_property (g_object_class,
+ PROP_ANNOTATION,
+ g_param_spec_object ("annotation",
+ "Annotation",
+ "The annotation associated to the window",
+ EV_TYPE_ANNOTATION_MARKUP,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (g_object_class,
+ PROP_PARENT,
+ g_param_spec_object ("parent",
+ "Parent",
+ "The parent window",
+ GTK_TYPE_WINDOW,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+ signals[CLOSED] =
+ g_signal_new ("closed",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvAnnotationWindowClass, closed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0, G_TYPE_NONE);
+ signals[MOVED] =
+ g_signal_new ("moved",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvAnnotationWindowClass, moved),
+ NULL, NULL,
+ ev_view_marshal_VOID__INT_INT,
+ G_TYPE_NONE, 2,
+ G_TYPE_INT, G_TYPE_INT);
+}
+
+/* Public methods */
+GtkWidget *
+ev_annotation_window_new (EvAnnotation *annot,
+ GtkWindow *parent)
+{
+ GtkWidget *window;
+
+ g_return_val_if_fail (EV_IS_ANNOTATION_MARKUP (annot), NULL);
+ g_return_val_if_fail (GTK_IS_WINDOW (parent), NULL);
+
+ window = g_object_new (EV_TYPE_ANNOTATION_WINDOW,
+ "annotation", annot,
+ "parent", parent,
+ NULL);
+ return window;
+}
+
+EvAnnotation *
+ev_annotation_window_get_annotation (EvAnnotationWindow *window)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION_WINDOW (window), NULL);
+
+ return window->annotation;
+}
+
+void
+ev_annotation_window_set_annotation (EvAnnotationWindow *window,
+ EvAnnotation *annot)
+{
+ g_return_if_fail (EV_IS_ANNOTATION_WINDOW (window));
+ g_return_if_fail (EV_IS_ANNOTATION (annot));
+
+ if (annot == window->annotation)
+ return;
+
+ g_object_unref (window->annotation);
+ window->annotation = g_object_ref (annot);
+ ev_annotation_window_sync_contents (window);
+ g_object_notify (G_OBJECT (window), "annotation");
+}
+
+gboolean
+ev_annotation_window_is_open (EvAnnotationWindow *window)
+{
+ g_return_val_if_fail (EV_IS_ANNOTATION_WINDOW (window), FALSE);
+
+ return window->is_open;
+}
+
+void
+ev_annotation_window_get_rectangle (EvAnnotationWindow *window,
+ EvRectangle *rect)
+{
+ g_return_if_fail (EV_IS_ANNOTATION_WINDOW (window));
+ g_return_if_fail (rect != NULL);
+
+ *rect = window->rect;
+}
+
+void
+ev_annotation_window_set_rectangle (EvAnnotationWindow *window,
+ const EvRectangle *rect)
+{
+ g_return_if_fail (EV_IS_ANNOTATION_WINDOW (window));
+ g_return_if_fail (rect != NULL);
+
+ window->rect = *rect;
+}
+
+void
+ev_annotation_window_grab_focus (EvAnnotationWindow *window)
+{
+ g_return_if_fail (EV_IS_ANNOTATION_WINDOW (window));
+
+ if (!gtk_widget_has_focus (window->text_view)) {
+ gtk_widget_grab_focus (GTK_WIDGET (window));
+ send_focus_change (window->text_view, TRUE);
+ }
+}
+
+void
+ev_annotation_window_ungrab_focus (EvAnnotationWindow *window)
+{
+ g_return_if_fail (EV_IS_ANNOTATION_WINDOW (window));
+
+ if (gtk_widget_has_focus (window->text_view)) {
+ send_focus_change (window->text_view, FALSE);
+ }
+
+ ev_annotation_window_sync_contents (window);
+}
diff --git a/libview/ev-annotation-window.h b/libview/ev-annotation-window.h
new file mode 100644
index 00000000..267a6a61
--- /dev/null
+++ b/libview/ev-annotation-window.h
@@ -0,0 +1,57 @@
+/* ev-annotation-window.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2007 Iñigo Martinez <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 EV_ANNOTATION_WINDOW_H
+#define EV_ANNOTATION_WINDOW_H
+
+#include <gtk/gtk.h>
+
+#include "ev-annotation.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvAnnotationWindow EvAnnotationWindow;
+typedef struct _EvAnnotationWindowClass EvAnnotationWindowClass;
+
+#define EV_TYPE_ANNOTATION_WINDOW (ev_annotation_window_get_type())
+#define EV_ANNOTATION_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_ANNOTATION_WINDOW, EvAnnotationWindow))
+#define EV_ANNOTATION_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_ANNOTATION_WINDOW, EvAnnotationWindowClass))
+#define EV_IS_ANNOTATION_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_ANNOTATION_WINDOW))
+#define EV_IS_ANNOTATION_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_ANNOTATION_WINDOW))
+#define EV_ANNOTATION_WINDOW_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_ANNOTATION_WINDOW, EvAnnotationWindowClass))
+
+GType ev_annotation_window_get_type (void) G_GNUC_CONST;
+GtkWidget *ev_annotation_window_new (EvAnnotation *annot,
+ GtkWindow *parent);
+EvAnnotation *ev_annotation_window_get_annotation (EvAnnotationWindow *window);
+void ev_annotation_window_set_annotation (EvAnnotationWindow *window,
+ EvAnnotation *annot);
+gboolean ev_annotation_window_is_open (EvAnnotationWindow *window);
+void ev_annotation_window_get_rectangle (EvAnnotationWindow *window,
+ EvRectangle *rect);
+void ev_annotation_window_set_rectangle (EvAnnotationWindow *window,
+ const EvRectangle *rect);
+void ev_annotation_window_grab_focus (EvAnnotationWindow *window);
+void ev_annotation_window_ungrab_focus (EvAnnotationWindow *window);
+
+G_END_DECLS
+
+#endif /* EV_ANNOTATION_WINDOW_H */
diff --git a/libview/ev-document-model.c b/libview/ev-document-model.c
new file mode 100644
index 00000000..a15ab5ca
--- /dev/null
+++ b/libview/ev-document-model.c
@@ -0,0 +1,571 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include "ev-document-model.h"
+#include "ev-view-type-builtins.h"
+#include "ev-view-marshal.h"
+
+struct _EvDocumentModel
+{
+ GObject base;
+
+ EvDocument *document;
+ gint n_pages;
+
+ gint page;
+ gint rotation;
+ gdouble scale;
+ EvSizingMode sizing_mode;
+ guint continuous : 1;
+ guint dual_page : 1;
+ guint fullscreen : 1;
+ guint inverted_colors : 1;
+
+ gdouble max_scale;
+ gdouble min_scale;
+};
+
+struct _EvDocumentModelClass
+{
+ GObjectClass base_class;
+
+ /* Signals */
+ void (* page_changed) (EvDocumentModel *model,
+ gint old_page,
+ gint new_page);
+};
+
+enum {
+ PROP_0,
+ PROP_DOCUMENT,
+ PROP_PAGE,
+ PROP_ROTATION,
+ PROP_INVERTED_COLORS,
+ PROP_SCALE,
+ PROP_SIZING_MODE,
+ PROP_CONTINUOUS,
+ PROP_DUAL_PAGE,
+ PROP_FULLSCREEN
+};
+
+enum
+{
+ PAGE_CHANGED,
+ N_SIGNALS
+};
+
+static guint signals[N_SIGNALS] = { 0 };
+
+G_DEFINE_TYPE (EvDocumentModel, ev_document_model, G_TYPE_OBJECT)
+
+static void
+ev_document_model_finalize (GObject *object)
+{
+ EvDocumentModel *model = EV_DOCUMENT_MODEL (object);
+
+ if (model->document) {
+ g_object_unref (model->document);
+ model->document = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_document_model_parent_class)->finalize (object);
+}
+
+static void
+ev_document_model_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvDocumentModel *model = EV_DOCUMENT_MODEL (object);
+
+ switch (prop_id) {
+ case PROP_DOCUMENT:
+ ev_document_model_set_document (model, (EvDocument *)g_value_get_object (value));
+ break;
+ case PROP_PAGE:
+ ev_document_model_set_page (model, g_value_get_int (value));
+ break;
+ case PROP_ROTATION:
+ ev_document_model_set_rotation (model, g_value_get_int (value));
+ break;
+ case PROP_INVERTED_COLORS:
+ ev_document_model_set_inverted_colors (model, g_value_get_boolean (value));
+ break;
+ case PROP_SCALE:
+ ev_document_model_set_scale (model, g_value_get_double (value));
+ break;
+ case PROP_SIZING_MODE:
+ ev_document_model_set_sizing_mode (model, g_value_get_enum (value));
+ break;
+ case PROP_CONTINUOUS:
+ ev_document_model_set_continuous (model, g_value_get_boolean (value));
+ break;
+ case PROP_DUAL_PAGE:
+ ev_document_model_set_dual_page (model, g_value_get_boolean (value));
+ break;
+ case PROP_FULLSCREEN:
+ ev_document_model_set_fullscreen (model, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_document_model_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvDocumentModel *model = EV_DOCUMENT_MODEL (object);
+
+ switch (prop_id) {
+ case PROP_DOCUMENT:
+ g_value_set_object (value, model->document);
+ break;
+ case PROP_PAGE:
+ g_value_set_int (value, model->page);
+ break;
+ case PROP_ROTATION:
+ g_value_set_int (value, model->rotation);
+ break;
+ case PROP_INVERTED_COLORS:
+ g_value_set_boolean (value, model->inverted_colors);
+ break;
+ case PROP_SCALE:
+ g_value_set_double (value, model->scale);
+ break;
+ case PROP_SIZING_MODE:
+ g_value_set_enum (value, model->sizing_mode);
+ break;
+ case PROP_CONTINUOUS:
+ g_value_set_boolean (value, ev_document_model_get_continuous (model));
+ break;
+ case PROP_DUAL_PAGE:
+ g_value_set_boolean (value, ev_document_model_get_dual_page (model));
+ break;
+ case PROP_FULLSCREEN:
+ g_value_set_boolean (value, ev_document_model_get_fullscreen (model));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_document_model_class_init (EvDocumentModelClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+
+ g_object_class->get_property = ev_document_model_get_property;
+ g_object_class->set_property = ev_document_model_set_property;
+ g_object_class->finalize = ev_document_model_finalize;
+
+ /* Properties */
+ g_object_class_install_property (g_object_class,
+ PROP_DOCUMENT,
+ g_param_spec_object ("document",
+ "Document",
+ "The current document",
+ EV_TYPE_DOCUMENT,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ PROP_PAGE,
+ g_param_spec_int ("page",
+ "Page",
+ "Current page",
+ -1, G_MAXINT, -1,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ PROP_ROTATION,
+ g_param_spec_int ("rotation",
+ "Rotation",
+ "Current rotation angle",
+ 0, 360, 0,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ PROP_INVERTED_COLORS,
+ g_param_spec_boolean ("inverted-colors",
+ "Inverted Colors",
+ "Whether document is displayed with inverted colors",
+ FALSE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ PROP_SCALE,
+ g_param_spec_double ("scale",
+ "Scale",
+ "Current scale factor",
+ 0., G_MAXDOUBLE, 1.,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ PROP_SIZING_MODE,
+ g_param_spec_enum ("sizing-mode",
+ "Sizing Mode",
+ "Current sizing mode",
+ EV_TYPE_SIZING_MODE,
+ EV_SIZING_FIT_WIDTH,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ PROP_CONTINUOUS,
+ g_param_spec_boolean ("continuous",
+ "Continuous",
+ "Whether document is displayed in continuous mode",
+ TRUE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ PROP_DUAL_PAGE,
+ g_param_spec_boolean ("dual-page",
+ "Dual Page",
+ "Whether document is displayed in dual page mode",
+ FALSE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (g_object_class,
+ PROP_FULLSCREEN,
+ g_param_spec_boolean ("fullscreen",
+ "Fullscreen",
+ "Whether document is displayed in fullscreen mode",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ /* Signals */
+ signals [PAGE_CHANGED] =
+ g_signal_new ("page-changed",
+ EV_TYPE_DOCUMENT_MODEL,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvDocumentModelClass, page_changed),
+ NULL, NULL,
+ ev_view_marshal_VOID__INT_INT,
+ G_TYPE_NONE, 2,
+ G_TYPE_INT, G_TYPE_INT);
+}
+
+static void
+ev_document_model_init (EvDocumentModel *model)
+{
+ model->page = -1;
+ model->scale = 1.;
+ model->sizing_mode = EV_SIZING_FIT_WIDTH;
+ model->continuous = TRUE;
+ model->inverted_colors = FALSE;
+ model->min_scale = 0.;
+ model->max_scale = G_MAXDOUBLE;
+}
+
+EvDocumentModel *
+ev_document_model_new (void)
+{
+ return g_object_new (EV_TYPE_DOCUMENT_MODEL, NULL);
+}
+
+EvDocumentModel *
+ev_document_model_new_with_document (EvDocument *document)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+
+ return g_object_new (EV_TYPE_DOCUMENT_MODEL, "document", document, NULL);
+}
+
+void
+ev_document_model_set_document (EvDocumentModel *model,
+ EvDocument *document)
+{
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+ g_return_if_fail (EV_IS_DOCUMENT (document));
+
+ if (document == model->document)
+ return;
+
+ if (model->document)
+ g_object_unref (model->document);
+ model->document = g_object_ref (document);
+
+ model->n_pages = ev_document_get_n_pages (document);
+ ev_document_model_set_page (model, CLAMP (model->page, 0,
+ model->n_pages - 1));
+
+ g_object_notify (G_OBJECT (model), "document");
+}
+
+EvDocument *
+ev_document_model_get_document (EvDocumentModel *model)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT_MODEL (model), NULL);
+
+ return model->document;
+}
+
+void
+ev_document_model_set_page (EvDocumentModel *model,
+ gint page)
+{
+ gint old_page;
+
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ if (model->page == page)
+ return;
+ if (page < 0 || (model->document && page >= model->n_pages))
+ return;
+
+ old_page = model->page;
+ model->page = page;
+ g_signal_emit (model, signals[PAGE_CHANGED], 0, old_page, page);
+
+ g_object_notify (G_OBJECT (model), "page");
+}
+
+void
+ev_document_model_set_page_by_label (EvDocumentModel *model,
+ const gchar *page_label)
+{
+ gint page;
+
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+ g_return_if_fail (model->document != NULL);
+
+ if (ev_document_find_page_by_label (model->document, page_label, &page))
+ ev_document_model_set_page (model, page);
+}
+
+gint
+ev_document_model_get_page (EvDocumentModel *model)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT_MODEL (model), -1);
+
+ return model->page;
+}
+
+void
+ev_document_model_set_scale (EvDocumentModel *model,
+ gdouble scale)
+{
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ scale = CLAMP (scale,
+ model->sizing_mode == EV_SIZING_FREE ?
+ model->min_scale : 0, model->max_scale);
+
+ if (scale == model->scale)
+ return;
+
+ model->scale = scale;
+
+ g_object_notify (G_OBJECT (model), "scale");
+}
+
+gdouble
+ev_document_model_get_scale (EvDocumentModel *model)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT_MODEL (model), 1.0);
+
+ return model->scale;
+}
+
+void
+ev_document_model_set_max_scale (EvDocumentModel *model,
+ gdouble max_scale)
+{
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ if (max_scale == model->max_scale)
+ return;
+
+ model->max_scale = max_scale;
+
+ if (model->scale > max_scale)
+ ev_document_model_set_scale (model, max_scale);
+}
+
+gdouble
+ev_document_model_get_max_scale (EvDocumentModel *model)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT_MODEL (model), 1.0);
+
+ return model->max_scale;
+}
+
+void
+ev_document_model_set_min_scale (EvDocumentModel *model,
+ gdouble min_scale)
+{
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ if (min_scale == model->min_scale)
+ return;
+
+ model->min_scale = min_scale;
+
+ if (model->scale < min_scale)
+ ev_document_model_set_scale (model, min_scale);
+}
+
+gdouble
+ev_document_model_get_min_scale (EvDocumentModel *model)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT_MODEL (model), 0.);
+
+ return model->min_scale;
+}
+
+void
+ev_document_model_set_sizing_mode (EvDocumentModel *model,
+ EvSizingMode mode)
+{
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ if (mode == model->sizing_mode)
+ return;
+
+ model->sizing_mode = mode;
+
+ g_object_notify (G_OBJECT (model), "sizing-mode");
+}
+
+EvSizingMode
+ev_document_model_get_sizing_mode (EvDocumentModel *model)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT_MODEL (model), EV_SIZING_FIT_WIDTH);
+
+ return model->sizing_mode;
+}
+
+void
+ev_document_model_set_rotation (EvDocumentModel *model,
+ gint rotation)
+{
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ if (rotation >= 360)
+ rotation -= 360;
+ else if (rotation < 0)
+ rotation += 360;
+
+ if (rotation == model->rotation)
+ return;
+
+ model->rotation = rotation;
+
+ g_object_notify (G_OBJECT (model), "rotation");
+}
+
+gint
+ev_document_model_get_rotation (EvDocumentModel *model)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT_MODEL (model), 0);
+
+ return model->rotation;
+}
+
+void
+ev_document_model_set_inverted_colors (EvDocumentModel *model,
+ gboolean inverted_colors)
+{
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ if (inverted_colors == model->inverted_colors)
+ return;
+
+ model->inverted_colors = inverted_colors;
+
+ g_object_notify (G_OBJECT (model), "inverted-colors");
+}
+
+gboolean
+ev_document_model_get_inverted_colors (EvDocumentModel *model)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT_MODEL (model), FALSE);
+
+ return model->inverted_colors;
+}
+
+void
+ev_document_model_set_continuous (EvDocumentModel *model,
+ gboolean continuous)
+{
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ continuous = continuous != FALSE;
+
+ if (continuous == model->continuous)
+ return;
+
+ model->continuous = continuous;
+
+ g_object_notify (G_OBJECT (model), "continuous");
+}
+
+gboolean
+ev_document_model_get_continuous (EvDocumentModel *model)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT_MODEL (model), TRUE);
+
+ return model->continuous;
+}
+
+void
+ev_document_model_set_dual_page (EvDocumentModel *model,
+ gboolean dual_page)
+{
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ dual_page = dual_page != FALSE;
+
+ if (dual_page == model->dual_page)
+ return;
+
+ model->dual_page = dual_page;
+
+ g_object_notify (G_OBJECT (model), "dual-page");
+}
+
+gboolean
+ev_document_model_get_dual_page (EvDocumentModel *model)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT_MODEL (model), FALSE);
+
+ return model->dual_page;
+}
+
+void
+ev_document_model_set_fullscreen (EvDocumentModel *model,
+ gboolean fullscreen)
+{
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ fullscreen = fullscreen != FALSE;
+
+ if (fullscreen == model->fullscreen)
+ return;
+
+ model->fullscreen = fullscreen;
+
+ g_object_notify (G_OBJECT (model), "fullscreen");
+}
+
+gboolean
+ev_document_model_get_fullscreen (EvDocumentModel *model)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT_MODEL (model), FALSE);
+
+ return model->fullscreen;
+}
diff --git a/libview/ev-document-model.h b/libview/ev-document-model.h
new file mode 100644
index 00000000..05525ebe
--- /dev/null
+++ b/libview/ev-document-model.h
@@ -0,0 +1,87 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-view.h> can be included directly."
+#endif
+
+#ifndef __EV_DOCUMENT_MODEL_H__
+#define __EV_DOCUMENT_MODEL_H__
+
+#include <glib-object.h>
+#include <evince-document.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_DOCUMENT_MODEL (ev_document_model_get_type ())
+#define EV_DOCUMENT_MODEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_DOCUMENT_MODEL, EvDocumentModel))
+#define EV_IS_DOCUMENT_MODEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_DOCUMENT_MODEL))
+
+typedef enum {
+ EV_SIZING_BEST_FIT,
+ EV_SIZING_FIT_WIDTH,
+ EV_SIZING_FREE,
+} EvSizingMode;
+
+typedef struct _EvDocumentModel EvDocumentModel;
+typedef struct _EvDocumentModelClass EvDocumentModelClass;
+
+GType ev_document_model_get_type (void) G_GNUC_CONST;
+EvDocumentModel *ev_document_model_new (void);
+EvDocumentModel *ev_document_model_new_with_document (EvDocument *document);
+
+void ev_document_model_set_document (EvDocumentModel *model,
+ EvDocument *document);
+EvDocument *ev_document_model_get_document (EvDocumentModel *model);
+void ev_document_model_set_page (EvDocumentModel *model,
+ gint page);
+void ev_document_model_set_page_by_label (EvDocumentModel *model,
+ const gchar *page_label);
+gint ev_document_model_get_page (EvDocumentModel *model);
+void ev_document_model_set_scale (EvDocumentModel *model,
+ gdouble scale);
+gdouble ev_document_model_get_scale (EvDocumentModel *model);
+void ev_document_model_set_max_scale (EvDocumentModel *model,
+ gdouble max_scale);
+gdouble ev_document_model_get_max_scale (EvDocumentModel *model);
+void ev_document_model_set_min_scale (EvDocumentModel *model,
+ gdouble min_scale);
+gdouble ev_document_model_get_min_scale (EvDocumentModel *model);
+void ev_document_model_set_sizing_mode (EvDocumentModel *model,
+ EvSizingMode mode);
+EvSizingMode ev_document_model_get_sizing_mode (EvDocumentModel *model);
+void ev_document_model_set_rotation (EvDocumentModel *model,
+ gint rotation);
+gint ev_document_model_get_rotation (EvDocumentModel *model);
+void ev_document_model_set_inverted_colors (EvDocumentModel *model,
+ gboolean inverted_colors);
+gboolean ev_document_model_get_inverted_colors (EvDocumentModel *model);
+void ev_document_model_set_continuous (EvDocumentModel *model,
+ gboolean continuous);
+gboolean ev_document_model_get_continuous (EvDocumentModel *model);
+void ev_document_model_set_dual_page (EvDocumentModel *model,
+ gboolean dual_page);
+gboolean ev_document_model_get_dual_page (EvDocumentModel *model);
+void ev_document_model_set_fullscreen (EvDocumentModel *model,
+ gboolean fullscreen);
+gboolean ev_document_model_get_fullscreen (EvDocumentModel *model);
+
+G_END_DECLS
+
+#endif /* __EV_DOCUMENT_MODEL_H__ */
diff --git a/libview/ev-job-scheduler.c b/libview/ev-job-scheduler.c
new file mode 100644
index 00000000..f874832f
--- /dev/null
+++ b/libview/ev-job-scheduler.c
@@ -0,0 +1,305 @@
+/* ev-job-scheduler.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "ev-debug.h"
+#include "ev-job-scheduler.h"
+
+typedef struct _EvSchedulerJob {
+ EvJob *job;
+ EvJobPriority priority;
+ GSList *job_link;
+} EvSchedulerJob;
+
+G_LOCK_DEFINE_STATIC(job_list);
+static GSList *job_list = NULL;
+
+static gpointer ev_job_thread_proxy (gpointer data);
+static void ev_scheduler_thread_job_cancelled (EvSchedulerJob *job,
+ GCancellable *cancellable);
+
+/* EvJobQueue */
+static GQueue queue_urgent = G_QUEUE_INIT;
+static GQueue queue_high = G_QUEUE_INIT;
+static GQueue queue_low = G_QUEUE_INIT;
+static GQueue queue_none = G_QUEUE_INIT;
+
+static GCond *job_queue_cond = NULL;
+static GMutex *job_queue_mutex = NULL;
+static GQueue *job_queue[EV_JOB_N_PRIORITIES] = {
+ &queue_urgent,
+ &queue_high,
+ &queue_low,
+ &queue_none
+};
+
+static void
+ev_job_queue_push (EvSchedulerJob *job,
+ EvJobPriority priority)
+{
+ ev_debug_message (DEBUG_JOBS, "%s priority %d", EV_GET_TYPE_NAME (job->job), priority);
+
+ g_mutex_lock (job_queue_mutex);
+
+ g_queue_push_tail (job_queue[priority], job);
+ g_cond_broadcast (job_queue_cond);
+
+ g_mutex_unlock (job_queue_mutex);
+}
+
+static EvSchedulerJob *
+ev_job_queue_get_next_unlocked (void)
+{
+ gint i;
+ EvSchedulerJob *job = NULL;
+
+ for (i = EV_JOB_PRIORITY_URGENT; i < EV_JOB_N_PRIORITIES; i++) {
+ job = (EvSchedulerJob *) g_queue_pop_head (job_queue[i]);
+ if (job)
+ break;
+ }
+
+ ev_debug_message (DEBUG_JOBS, "%s", job ? EV_GET_TYPE_NAME (job->job) : "No jobs in queue");
+
+ return job;
+}
+
+static gpointer
+ev_job_scheduler_init (gpointer data)
+{
+ job_queue_cond = g_cond_new ();
+ job_queue_mutex = g_mutex_new ();
+ g_thread_create (ev_job_thread_proxy, NULL, FALSE, NULL);
+
+ return NULL;
+}
+
+static void
+ev_scheduler_job_list_add (EvSchedulerJob *job)
+{
+ ev_debug_message (DEBUG_JOBS, "%s", EV_GET_TYPE_NAME (job->job));
+
+ G_LOCK (job_list);
+
+ job_list = g_slist_prepend (job_list, job);
+ job->job_link = job_list;
+
+ G_UNLOCK (job_list);
+}
+
+static void
+ev_scheduler_job_list_remove (EvSchedulerJob *job)
+{
+ ev_debug_message (DEBUG_JOBS, "%s", EV_GET_TYPE_NAME (job->job));
+
+ G_LOCK (job_list);
+
+ job_list = g_slist_delete_link (job_list, job->job_link);
+
+ G_UNLOCK (job_list);
+}
+
+static void
+ev_scheduler_job_free (EvSchedulerJob *job)
+{
+ if (!job)
+ return;
+
+ g_object_unref (job->job);
+ g_free (job);
+}
+
+static void
+ev_scheduler_job_destroy (EvSchedulerJob *job)
+{
+ ev_debug_message (DEBUG_JOBS, "%s", EV_GET_TYPE_NAME (job->job));
+
+ if (job->job->run_mode == EV_JOB_RUN_MAIN_LOOP) {
+ g_signal_handlers_disconnect_by_func (job->job,
+ G_CALLBACK (ev_scheduler_job_destroy),
+ job);
+ } else {
+ g_signal_handlers_disconnect_by_func (job->job->cancellable,
+ G_CALLBACK (ev_scheduler_thread_job_cancelled),
+ job);
+ }
+
+ ev_scheduler_job_list_remove (job);
+ ev_scheduler_job_free (job);
+}
+
+static void
+ev_scheduler_thread_job_cancelled (EvSchedulerJob *job,
+ GCancellable *cancellable)
+{
+ GList *list;
+
+ ev_debug_message (DEBUG_JOBS, "%s", EV_GET_TYPE_NAME (job->job));
+
+ g_mutex_lock (job_queue_mutex);
+
+ /* If the job is not still running,
+ * remove it from the job queue and job list.
+ * If the job is currently running, it will be
+ * destroyed as soon as it finishes.
+ */
+ list = g_queue_find (job_queue[job->priority], job);
+ if (list) {
+ g_queue_delete_link (job_queue[job->priority], list);
+ g_mutex_unlock (job_queue_mutex);
+ ev_scheduler_job_destroy (job);
+ } else {
+ g_mutex_unlock (job_queue_mutex);
+ }
+}
+
+static void
+ev_job_thread (EvJob *job)
+{
+ gboolean result;
+
+ ev_debug_message (DEBUG_JOBS, "%s", EV_GET_TYPE_NAME (job));
+
+ do {
+ if (g_cancellable_is_cancelled (job->cancellable))
+ result = FALSE;
+ else
+ result = ev_job_run (job);
+ } while (result);
+}
+
+static gboolean
+ev_job_idle (EvJob *job)
+{
+ ev_debug_message (DEBUG_JOBS, "%s", EV_GET_TYPE_NAME (job));
+
+ if (g_cancellable_is_cancelled (job->cancellable))
+ return FALSE;
+
+ return ev_job_run (job);
+}
+
+static gpointer
+ev_job_thread_proxy (gpointer data)
+{
+ while (TRUE) {
+ EvSchedulerJob *job;
+
+ g_mutex_lock (job_queue_mutex);
+ job = ev_job_queue_get_next_unlocked ();
+ if (!job) {
+ g_cond_wait (job_queue_cond, job_queue_mutex);
+ g_mutex_unlock (job_queue_mutex);
+ continue;
+ }
+ g_mutex_unlock (job_queue_mutex);
+
+ ev_job_thread (job->job);
+ ev_scheduler_job_destroy (job);
+ }
+
+ return NULL;
+}
+
+void
+ev_job_scheduler_push_job (EvJob *job,
+ EvJobPriority priority)
+{
+ static GOnce once_init = G_ONCE_INIT;
+ EvSchedulerJob *s_job;
+
+ g_once (&once_init, ev_job_scheduler_init, NULL);
+
+ ev_debug_message (DEBUG_JOBS, "%s pirority %d", EV_GET_TYPE_NAME (job), priority);
+
+ s_job = g_new0 (EvSchedulerJob, 1);
+ s_job->job = g_object_ref (job);
+ s_job->priority = priority;
+
+ ev_scheduler_job_list_add (s_job);
+
+ switch (ev_job_get_run_mode (job)) {
+ case EV_JOB_RUN_THREAD:
+ g_signal_connect_swapped (job->cancellable, "cancelled",
+ G_CALLBACK (ev_scheduler_thread_job_cancelled),
+ s_job);
+ ev_job_queue_push (s_job, priority);
+ break;
+ case EV_JOB_RUN_MAIN_LOOP:
+ g_signal_connect_swapped (job, "finished",
+ G_CALLBACK (ev_scheduler_job_destroy),
+ s_job);
+ g_signal_connect_swapped (job, "cancelled",
+ G_CALLBACK (ev_scheduler_job_destroy),
+ s_job);
+ g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+ (GSourceFunc)ev_job_idle,
+ g_object_ref (job),
+ (GDestroyNotify)g_object_unref);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+void
+ev_job_scheduler_update_job (EvJob *job,
+ EvJobPriority priority)
+{
+ GSList *l;
+ EvSchedulerJob *s_job = NULL;
+ gboolean need_resort = FALSE;
+
+ /* Main loop jobs are scheduled inmediately */
+ if (ev_job_get_run_mode (job) == EV_JOB_RUN_MAIN_LOOP)
+ return;
+
+ ev_debug_message (DEBUG_JOBS, "%s pirority %d", EV_GET_TYPE_NAME (job), priority);
+
+ G_LOCK (job_list);
+
+ for (l = job_list; l; l = l->next) {
+ s_job = (EvSchedulerJob *)l->data;
+
+ if (s_job->job == job) {
+ need_resort = (s_job->priority != priority);
+ break;
+ }
+ }
+
+ G_UNLOCK (job_list);
+
+ if (need_resort) {
+ GList *list;
+
+ g_mutex_lock (job_queue_mutex);
+
+ list = g_queue_find (job_queue[s_job->priority], s_job);
+ if (list) {
+ ev_debug_message (DEBUG_JOBS, "Moving job %s from pirority %d to %d",
+ EV_GET_TYPE_NAME (job), s_job->priority, priority);
+ g_queue_delete_link (job_queue[s_job->priority], list);
+ g_queue_push_tail (job_queue[priority], s_job);
+ g_cond_broadcast (job_queue_cond);
+ }
+
+ g_mutex_unlock (job_queue_mutex);
+ }
+}
+
diff --git a/libview/ev-job-scheduler.h b/libview/ev-job-scheduler.h
new file mode 100644
index 00000000..b099a66f
--- /dev/null
+++ b/libview/ev-job-scheduler.h
@@ -0,0 +1,48 @@
+/* ev-job-scheduler.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-view.h> can be included directly."
+#endif
+
+#ifndef EV_JOB_SCHEDULER_H
+#define EV_JOB_SCHEDULER_H
+
+#include <glib.h>
+#include "ev-jobs.h"
+
+G_BEGIN_DECLS
+
+typedef enum {
+ EV_JOB_PRIORITY_URGENT, /* Rendering current page range */
+ EV_JOB_PRIORITY_HIGH, /* Rendering current thumbnail range */
+ EV_JOB_PRIORITY_LOW, /* Rendering pages not in current range */
+ EV_JOB_PRIORITY_NONE, /* Any other job: load, save, print, ... */
+ EV_JOB_N_PRIORITIES
+} EvJobPriority;
+
+void ev_job_scheduler_push_job (EvJob *job,
+ EvJobPriority priority);
+void ev_job_scheduler_update_job (EvJob *job,
+ EvJobPriority priority);
+
+G_END_DECLS
+
+#endif /* EV_JOB_SCHEDULER_H */
diff --git a/libview/ev-jobs.c b/libview/ev-jobs.c
new file mode 100644
index 00000000..ffb2d729
--- /dev/null
+++ b/libview/ev-jobs.c
@@ -0,0 +1,1577 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include "ev-jobs.h"
+#include "ev-document-thumbnails.h"
+#include "ev-document-links.h"
+#include "ev-document-images.h"
+#include "ev-document-forms.h"
+#include "ev-file-exporter.h"
+#include "ev-document-factory.h"
+#include "ev-document-misc.h"
+#include "ev-file-helpers.h"
+#include "ev-document-fonts.h"
+#include "ev-document-security.h"
+#include "ev-document-find.h"
+#include "ev-document-layers.h"
+#include "ev-document-print.h"
+#include "ev-document-annotations.h"
+#include "ev-document-attachments.h"
+#include "ev-document-text.h"
+#include "ev-debug.h"
+
+#include <errno.h>
+#include <glib/gstdio.h>
+#include <glib/gi18n-lib.h>
+#include <unistd.h>
+
+static void ev_job_init (EvJob *job);
+static void ev_job_class_init (EvJobClass *class);
+static void ev_job_links_init (EvJobLinks *job);
+static void ev_job_links_class_init (EvJobLinksClass *class);
+static void ev_job_attachments_init (EvJobAttachments *job);
+static void ev_job_attachments_class_init (EvJobAttachmentsClass *class);
+static void ev_job_annots_init (EvJobAnnots *job);
+static void ev_job_annots_class_init (EvJobAnnotsClass *class);
+static void ev_job_render_init (EvJobRender *job);
+static void ev_job_render_class_init (EvJobRenderClass *class);
+static void ev_job_page_data_init (EvJobPageData *job);
+static void ev_job_page_data_class_init (EvJobPageDataClass *class);
+static void ev_job_thumbnail_init (EvJobThumbnail *job);
+static void ev_job_thumbnail_class_init (EvJobThumbnailClass *class);
+static void ev_job_load_init (EvJobLoad *job);
+static void ev_job_load_class_init (EvJobLoadClass *class);
+static void ev_job_save_init (EvJobSave *job);
+static void ev_job_save_class_init (EvJobSaveClass *class);
+static void ev_job_find_init (EvJobFind *job);
+static void ev_job_find_class_init (EvJobFindClass *class);
+static void ev_job_layers_init (EvJobLayers *job);
+static void ev_job_layers_class_init (EvJobLayersClass *class);
+static void ev_job_export_init (EvJobExport *job);
+static void ev_job_export_class_init (EvJobExportClass *class);
+static void ev_job_print_init (EvJobPrint *job);
+static void ev_job_print_class_init (EvJobPrintClass *class);
+
+enum {
+ CANCELLED,
+ FINISHED,
+ LAST_SIGNAL
+};
+
+enum {
+ FONTS_UPDATED,
+ FONTS_LAST_SIGNAL
+};
+
+enum {
+ FIND_UPDATED,
+ FIND_LAST_SIGNAL
+};
+
+static guint job_signals[LAST_SIGNAL] = { 0 };
+static guint job_fonts_signals[FONTS_LAST_SIGNAL] = { 0 };
+static guint job_find_signals[FIND_LAST_SIGNAL] = { 0 };
+
+G_DEFINE_ABSTRACT_TYPE (EvJob, ev_job, G_TYPE_OBJECT)
+G_DEFINE_TYPE (EvJobLinks, ev_job_links, EV_TYPE_JOB)
+G_DEFINE_TYPE (EvJobAttachments, ev_job_attachments, EV_TYPE_JOB)
+G_DEFINE_TYPE (EvJobAnnots, ev_job_annots, EV_TYPE_JOB)
+G_DEFINE_TYPE (EvJobRender, ev_job_render, EV_TYPE_JOB)
+G_DEFINE_TYPE (EvJobPageData, ev_job_page_data, EV_TYPE_JOB)
+G_DEFINE_TYPE (EvJobThumbnail, ev_job_thumbnail, EV_TYPE_JOB)
+G_DEFINE_TYPE (EvJobFonts, ev_job_fonts, EV_TYPE_JOB)
+G_DEFINE_TYPE (EvJobLoad, ev_job_load, EV_TYPE_JOB)
+G_DEFINE_TYPE (EvJobSave, ev_job_save, EV_TYPE_JOB)
+G_DEFINE_TYPE (EvJobFind, ev_job_find, EV_TYPE_JOB)
+G_DEFINE_TYPE (EvJobLayers, ev_job_layers, EV_TYPE_JOB)
+G_DEFINE_TYPE (EvJobExport, ev_job_export, EV_TYPE_JOB)
+G_DEFINE_TYPE (EvJobPrint, ev_job_print, EV_TYPE_JOB)
+
+/* EvJob */
+static void
+ev_job_init (EvJob *job)
+{
+ job->cancellable = g_cancellable_new ();
+}
+
+static void
+ev_job_dispose (GObject *object)
+{
+ EvJob *job;
+
+ job = EV_JOB (object);
+
+ if (job->document) {
+ g_object_unref (job->document);
+ job->document = NULL;
+ }
+
+ if (job->cancellable) {
+ g_object_unref (job->cancellable);
+ job->cancellable = NULL;
+ }
+
+ if (job->error) {
+ g_error_free (job->error);
+ job->error = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_job_parent_class)->dispose) (object);
+}
+
+static void
+ev_job_class_init (EvJobClass *class)
+{
+ GObjectClass *oclass;
+
+ oclass = G_OBJECT_CLASS (class);
+
+ oclass->dispose = ev_job_dispose;
+
+ job_signals[CANCELLED] =
+ g_signal_new ("cancelled",
+ EV_TYPE_JOB,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvJobClass, cancelled),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ job_signals [FINISHED] =
+ g_signal_new ("finished",
+ EV_TYPE_JOB,
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (EvJobClass, finished),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+}
+
+static gboolean
+emit_finished (EvJob *job)
+{
+ ev_debug_message (DEBUG_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ job->idle_finished_id = 0;
+
+ if (job->cancelled) {
+ ev_debug_message (DEBUG_JOBS, "%s (%p) job was cancelled, do not emit finished", EV_GET_TYPE_NAME (job), job);
+ } else {
+ ev_profiler_stop (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+ g_signal_emit (job, job_signals[FINISHED], 0);
+ }
+
+ return FALSE;
+}
+
+static void
+ev_job_emit_finished (EvJob *job)
+{
+ ev_debug_message (DEBUG_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ if (g_cancellable_is_cancelled (job->cancellable)) {
+ ev_debug_message (DEBUG_JOBS, "%s (%p) job was cancelled, returning", EV_GET_TYPE_NAME (job), job);
+ return;
+ }
+
+ job->finished = TRUE;
+
+ if (job->run_mode == EV_JOB_RUN_THREAD) {
+ job->idle_finished_id =
+ g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+ (GSourceFunc)emit_finished,
+ g_object_ref (job),
+ (GDestroyNotify)g_object_unref);
+ } else {
+ ev_profiler_stop (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+ g_signal_emit (job, job_signals[FINISHED], 0);
+ }
+}
+
+gboolean
+ev_job_run (EvJob *job)
+{
+ EvJobClass *class = EV_JOB_GET_CLASS (job);
+
+ return class->run (job);
+}
+
+void
+ev_job_cancel (EvJob *job)
+{
+ if (job->cancelled || (job->finished && job->idle_finished_id == 0))
+ return;
+
+ ev_debug_message (DEBUG_JOBS, "job %s (%p) cancelled", EV_GET_TYPE_NAME (job), job);
+ ev_profiler_stop (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ /* This should never be called from a thread */
+ job->cancelled = TRUE;
+ g_cancellable_cancel (job->cancellable);
+ g_signal_emit (job, job_signals[CANCELLED], 0);
+}
+
+void
+ev_job_failed (EvJob *job,
+ GQuark domain,
+ gint code,
+ const gchar *format,
+ ...)
+{
+ va_list args;
+ gchar *message;
+
+ if (job->failed || job->finished)
+ return;
+
+ ev_debug_message (DEBUG_JOBS, "job %s (%p) failed", EV_GET_TYPE_NAME (job), job);
+
+ job->failed = TRUE;
+
+ va_start (args, format);
+ message = g_strdup_vprintf (format, args);
+ va_end (args);
+
+ job->error = g_error_new_literal (domain, code, message);
+ g_free (message);
+
+ ev_job_emit_finished (job);
+}
+
+void
+ev_job_failed_from_error (EvJob *job,
+ GError *error)
+{
+ if (job->failed || job->finished)
+ return;
+
+ ev_debug_message (DEBUG_JOBS, "job %s (%p) failed", EV_GET_TYPE_NAME (job), job);
+
+ job->failed = TRUE;
+ job->error = g_error_copy (error);
+
+ ev_job_emit_finished (job);
+}
+
+void
+ev_job_succeeded (EvJob *job)
+{
+ if (job->finished)
+ return;
+
+ ev_debug_message (DEBUG_JOBS, "job %s (%p) succeeded", EV_GET_TYPE_NAME (job), job);
+
+ job->failed = FALSE;
+ ev_job_emit_finished (job);
+}
+
+gboolean
+ev_job_is_finished (EvJob *job)
+{
+ return job->finished;
+}
+
+gboolean
+ev_job_is_failed (EvJob *job)
+{
+ return job->failed;
+}
+
+EvJobRunMode
+ev_job_get_run_mode (EvJob *job)
+{
+ return job->run_mode;
+}
+
+void
+ev_job_set_run_mode (EvJob *job,
+ EvJobRunMode run_mode)
+{
+ job->run_mode = run_mode;
+}
+
+/* EvJobLinks */
+static void
+ev_job_links_init (EvJobLinks *job)
+{
+ EV_JOB (job)->run_mode = EV_JOB_RUN_THREAD;
+}
+
+static void
+ev_job_links_dispose (GObject *object)
+{
+ EvJobLinks *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = EV_JOB_LINKS (object);
+
+ if (job->model) {
+ g_object_unref (job->model);
+ job->model = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_job_links_parent_class)->dispose) (object);
+}
+
+static gboolean
+ev_job_links_run (EvJob *job)
+{
+ EvJobLinks *job_links = EV_JOB_LINKS (job);
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+ ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ ev_document_doc_mutex_lock ();
+ job_links->model = ev_document_links_get_links_model (EV_DOCUMENT_LINKS (job->document));
+ ev_document_doc_mutex_unlock ();
+
+ ev_job_succeeded (job);
+
+ return FALSE;
+}
+
+static void
+ev_job_links_class_init (EvJobLinksClass *class)
+{
+ GObjectClass *oclass = G_OBJECT_CLASS (class);
+ EvJobClass *job_class = EV_JOB_CLASS (class);
+
+ oclass->dispose = ev_job_links_dispose;
+ job_class->run = ev_job_links_run;
+}
+
+EvJob *
+ev_job_links_new (EvDocument *document)
+{
+ EvJob *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = g_object_new (EV_TYPE_JOB_LINKS, NULL);
+ job->document = g_object_ref (document);
+
+ return job;
+}
+
+/* EvJobAttachments */
+static void
+ev_job_attachments_init (EvJobAttachments *job)
+{
+ EV_JOB (job)->run_mode = EV_JOB_RUN_THREAD;
+}
+
+static void
+ev_job_attachments_dispose (GObject *object)
+{
+ EvJobAttachments *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = EV_JOB_ATTACHMENTS (object);
+
+ if (job->attachments) {
+ g_list_foreach (job->attachments, (GFunc)g_object_unref, NULL);
+ g_list_free (job->attachments);
+ job->attachments = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_job_attachments_parent_class)->dispose) (object);
+}
+
+static gboolean
+ev_job_attachments_run (EvJob *job)
+{
+ EvJobAttachments *job_attachments = EV_JOB_ATTACHMENTS (job);
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+ ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ ev_document_doc_mutex_lock ();
+ job_attachments->attachments =
+ ev_document_attachments_get_attachments (EV_DOCUMENT_ATTACHMENTS (job->document));
+ ev_document_doc_mutex_unlock ();
+
+ ev_job_succeeded (job);
+
+ return FALSE;
+}
+
+static void
+ev_job_attachments_class_init (EvJobAttachmentsClass *class)
+{
+ GObjectClass *oclass = G_OBJECT_CLASS (class);
+ EvJobClass *job_class = EV_JOB_CLASS (class);
+
+ oclass->dispose = ev_job_attachments_dispose;
+ job_class->run = ev_job_attachments_run;
+}
+
+EvJob *
+ev_job_attachments_new (EvDocument *document)
+{
+ EvJob *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = g_object_new (EV_TYPE_JOB_ATTACHMENTS, NULL);
+ job->document = g_object_ref (document);
+
+ return job;
+}
+
+/* EvJobAnnots */
+static void
+ev_job_annots_init (EvJobAnnots *job)
+{
+ EV_JOB (job)->run_mode = EV_JOB_RUN_THREAD;
+}
+
+static void
+ev_job_annots_dispose (GObject *object)
+{
+ EvJobAnnots *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = EV_JOB_ANNOTS (object);
+
+ if (job->annots) {
+ g_list_foreach (job->annots, (GFunc)ev_mapping_list_unref, NULL);
+ g_list_free (job->annots);
+ job->annots = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_job_annots_parent_class)->dispose (object);
+}
+
+static gboolean
+ev_job_annots_run (EvJob *job)
+{
+ EvJobAnnots *job_annots = EV_JOB_ANNOTS (job);
+ gint i;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+ ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ ev_document_doc_mutex_lock ();
+ for (i = 0; i < ev_document_get_n_pages (job->document); i++) {
+ EvMappingList *mapping_list;
+ EvPage *page;
+
+ page = ev_document_get_page (job->document, i);
+ mapping_list = ev_document_annotations_get_annotations (EV_DOCUMENT_ANNOTATIONS (job->document),
+ page);
+ g_object_unref (page);
+
+ if (mapping_list)
+ job_annots->annots = g_list_prepend (job_annots->annots, mapping_list);
+ }
+ ev_document_doc_mutex_unlock ();
+
+ job_annots->annots = g_list_reverse (job_annots->annots);
+
+ ev_job_succeeded (job);
+
+ return FALSE;
+}
+
+static void
+ev_job_annots_class_init (EvJobAnnotsClass *class)
+{
+ GObjectClass *oclass = G_OBJECT_CLASS (class);
+ EvJobClass *job_class = EV_JOB_CLASS (class);
+
+ oclass->dispose = ev_job_annots_dispose;
+ job_class->run = ev_job_annots_run;
+}
+
+EvJob *
+ev_job_annots_new (EvDocument *document)
+{
+ EvJob *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = g_object_new (EV_TYPE_JOB_ANNOTS, NULL);
+ job->document = g_object_ref (document);
+
+ return job;
+}
+
+/* EvJobRender */
+static void
+ev_job_render_init (EvJobRender *job)
+{
+ EV_JOB (job)->run_mode = EV_JOB_RUN_THREAD;
+}
+
+static void
+ev_job_render_dispose (GObject *object)
+{
+ EvJobRender *job;
+
+ job = EV_JOB_RENDER (object);
+
+ ev_debug_message (DEBUG_JOBS, "page: %d (%p)", job->page, job);
+
+ if (job->surface) {
+ cairo_surface_destroy (job->surface);
+ job->surface = NULL;
+ }
+
+ if (job->selection) {
+ cairo_surface_destroy (job->selection);
+ job->selection = NULL;
+ }
+
+ if (job->selection_region) {
+ cairo_region_destroy (job->selection_region);
+ job->selection_region = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_job_render_parent_class)->dispose) (object);
+}
+
+static gboolean
+ev_job_render_run (EvJob *job)
+{
+ EvJobRender *job_render = EV_JOB_RENDER (job);
+ EvPage *ev_page;
+ EvRenderContext *rc;
+
+ ev_debug_message (DEBUG_JOBS, "page: %d (%p)", job_render->page, job);
+ ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ ev_document_doc_mutex_lock ();
+
+ ev_profiler_start (EV_PROFILE_JOBS, "Rendering page %d", job_render->page);
+
+ ev_document_fc_mutex_lock ();
+
+ ev_page = ev_document_get_page (job->document, job_render->page);
+ rc = ev_render_context_new (ev_page, job_render->rotation, job_render->scale);
+ g_object_unref (ev_page);
+
+ job_render->surface = ev_document_render (job->document, rc);
+ /* If job was cancelled during the page rendering,
+ * we return now, so that the thread is finished ASAP
+ */
+ if (g_cancellable_is_cancelled (job->cancellable)) {
+ ev_document_fc_mutex_unlock ();
+ ev_document_doc_mutex_unlock ();
+ g_object_unref (rc);
+
+ return FALSE;
+ }
+
+ if (job_render->include_selection && EV_IS_SELECTION (job->document)) {
+ ev_selection_render_selection (EV_SELECTION (job->document),
+ rc,
+ &(job_render->selection),
+ &(job_render->selection_points),
+ NULL,
+ job_render->selection_style,
+ &(job_render->text), &(job_render->base));
+ job_render->selection_region =
+ ev_selection_get_selection_region (EV_SELECTION (job->document),
+ rc,
+ job_render->selection_style,
+ &(job_render->selection_points));
+ }
+
+ g_object_unref (rc);
+
+ ev_document_fc_mutex_unlock ();
+ ev_document_doc_mutex_unlock ();
+
+ ev_job_succeeded (job);
+
+ return FALSE;
+}
+
+static void
+ev_job_render_class_init (EvJobRenderClass *class)
+{
+ GObjectClass *oclass = G_OBJECT_CLASS (class);
+ EvJobClass *job_class = EV_JOB_CLASS (class);
+
+ oclass->dispose = ev_job_render_dispose;
+ job_class->run = ev_job_render_run;
+}
+
+EvJob *
+ev_job_render_new (EvDocument *document,
+ gint page,
+ gint rotation,
+ gdouble scale,
+ gint width,
+ gint height)
+{
+ EvJobRender *job;
+
+ ev_debug_message (DEBUG_JOBS, "page: %d", page);
+
+ job = g_object_new (EV_TYPE_JOB_RENDER, NULL);
+
+ EV_JOB (job)->document = g_object_ref (document);
+ job->page = page;
+ job->rotation = rotation;
+ job->scale = scale;
+ job->target_width = width;
+ job->target_height = height;
+
+ return EV_JOB (job);
+}
+
+void
+ev_job_render_set_selection_info (EvJobRender *job,
+ EvRectangle *selection_points,
+ EvSelectionStyle selection_style,
+ GdkColor *text,
+ GdkColor *base)
+{
+ job->include_selection = TRUE;
+
+ job->selection_points = *selection_points;
+ job->selection_style = selection_style;
+ job->text = *text;
+ job->base = *base;
+}
+
+/* EvJobPageData */
+static void
+ev_job_page_data_init (EvJobPageData *job)
+{
+ EV_JOB (job)->run_mode = EV_JOB_RUN_THREAD;
+}
+
+static gboolean
+ev_job_page_data_run (EvJob *job)
+{
+ EvJobPageData *job_pd = EV_JOB_PAGE_DATA (job);
+ EvPage *ev_page;
+
+ ev_debug_message (DEBUG_JOBS, "page: %d (%p)", job_pd->page, job);
+ ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ ev_document_doc_mutex_lock ();
+ ev_page = ev_document_get_page (job->document, job_pd->page);
+
+ if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_TEXT_MAPPING) && EV_IS_DOCUMENT_TEXT (job->document))
+ job_pd->text_mapping =
+ ev_document_text_get_text_mapping (EV_DOCUMENT_TEXT (job->document), ev_page);
+ if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_TEXT) && EV_IS_DOCUMENT_TEXT (job->document))
+ job_pd->text =
+ ev_document_text_get_text (EV_DOCUMENT_TEXT (job->document), ev_page);
+ if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT) && EV_IS_DOCUMENT_TEXT (job->document))
+ ev_document_text_get_text_layout (EV_DOCUMENT_TEXT (job->document),
+ ev_page,
+ &(job_pd->text_layout),
+ &(job_pd->text_layout_length));
+ if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_LINKS) && EV_IS_DOCUMENT_LINKS (job->document))
+ job_pd->link_mapping =
+ ev_document_links_get_links (EV_DOCUMENT_LINKS (job->document), ev_page);
+ if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_FORMS) && EV_IS_DOCUMENT_FORMS (job->document))
+ job_pd->form_field_mapping =
+ ev_document_forms_get_form_fields (EV_DOCUMENT_FORMS (job->document),
+ ev_page);
+ if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_IMAGES) && EV_IS_DOCUMENT_IMAGES (job->document))
+ job_pd->image_mapping =
+ ev_document_images_get_image_mapping (EV_DOCUMENT_IMAGES (job->document),
+ ev_page);
+ if ((job_pd->flags & EV_PAGE_DATA_INCLUDE_ANNOTS) && EV_IS_DOCUMENT_ANNOTATIONS (job->document))
+ job_pd->annot_mapping =
+ ev_document_annotations_get_annotations (EV_DOCUMENT_ANNOTATIONS (job->document),
+ ev_page);
+ g_object_unref (ev_page);
+ ev_document_doc_mutex_unlock ();
+
+ ev_job_succeeded (job);
+
+ return FALSE;
+}
+
+static void
+ev_job_page_data_class_init (EvJobPageDataClass *class)
+{
+ EvJobClass *job_class = EV_JOB_CLASS (class);
+
+ job_class->run = ev_job_page_data_run;
+}
+
+EvJob *
+ev_job_page_data_new (EvDocument *document,
+ gint page,
+ EvJobPageDataFlags flags)
+{
+ EvJobPageData *job;
+
+ ev_debug_message (DEBUG_JOBS, "%d", page);
+
+ job = g_object_new (EV_TYPE_JOB_PAGE_DATA, NULL);
+
+ EV_JOB (job)->document = g_object_ref (document);
+ job->page = page;
+ job->flags = flags;
+
+ return EV_JOB (job);
+}
+
+/* EvJobThumbnail */
+static void
+ev_job_thumbnail_init (EvJobThumbnail *job)
+{
+ EV_JOB (job)->run_mode = EV_JOB_RUN_THREAD;
+}
+
+static void
+ev_job_thumbnail_dispose (GObject *object)
+{
+ EvJobThumbnail *job;
+
+ job = EV_JOB_THUMBNAIL (object);
+
+ ev_debug_message (DEBUG_JOBS, "%d (%p)", job->page, job);
+
+ if (job->thumbnail) {
+ g_object_unref (job->thumbnail);
+ job->thumbnail = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_job_thumbnail_parent_class)->dispose) (object);
+}
+
+static gboolean
+ev_job_thumbnail_run (EvJob *job)
+{
+ EvJobThumbnail *job_thumb = EV_JOB_THUMBNAIL (job);
+ EvRenderContext *rc;
+ EvPage *page;
+
+ ev_debug_message (DEBUG_JOBS, "%d (%p)", job_thumb->page, job);
+ ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ ev_document_doc_mutex_lock ();
+
+ page = ev_document_get_page (job->document, job_thumb->page);
+ rc = ev_render_context_new (page, job_thumb->rotation, job_thumb->scale);
+ g_object_unref (page);
+
+ job_thumb->thumbnail = ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (job->document),
+ rc, TRUE);
+ g_object_unref (rc);
+ ev_document_doc_mutex_unlock ();
+
+ ev_job_succeeded (job);
+
+ return FALSE;
+}
+
+static void
+ev_job_thumbnail_class_init (EvJobThumbnailClass *class)
+{
+ GObjectClass *oclass = G_OBJECT_CLASS (class);
+ EvJobClass *job_class = EV_JOB_CLASS (class);
+
+ oclass->dispose = ev_job_thumbnail_dispose;
+ job_class->run = ev_job_thumbnail_run;
+}
+
+EvJob *
+ev_job_thumbnail_new (EvDocument *document,
+ gint page,
+ gint rotation,
+ gdouble scale)
+{
+ EvJobThumbnail *job;
+
+ ev_debug_message (DEBUG_JOBS, "%d", page);
+
+ job = g_object_new (EV_TYPE_JOB_THUMBNAIL, NULL);
+
+ EV_JOB (job)->document = g_object_ref (document);
+ job->page = page;
+ job->rotation = rotation;
+ job->scale = scale;
+
+ return EV_JOB (job);
+}
+
+/* EvJobFonts */
+static void
+ev_job_fonts_init (EvJobFonts *job)
+{
+ EV_JOB (job)->run_mode = EV_JOB_RUN_MAIN_LOOP;
+}
+
+static gboolean
+ev_job_fonts_run (EvJob *job)
+{
+ EvJobFonts *job_fonts = EV_JOB_FONTS (job);
+ EvDocumentFonts *fonts = EV_DOCUMENT_FONTS (job->document);
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ /* Do not block the main loop */
+ if (!ev_document_doc_mutex_trylock ())
+ return TRUE;
+
+ if (!ev_document_fc_mutex_trylock ())
+ return TRUE;
+
+#ifdef EV_ENABLE_DEBUG
+ /* We use the #ifdef in this case because of the if */
+ if (ev_document_fonts_get_progress (fonts) == 0)
+ ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+#endif
+
+ job_fonts->scan_completed = !ev_document_fonts_scan (fonts, 20);
+ g_signal_emit (job_fonts, job_fonts_signals[FONTS_UPDATED], 0,
+ ev_document_fonts_get_progress (fonts));
+
+ ev_document_fc_mutex_unlock ();
+ ev_document_doc_mutex_unlock ();
+
+ if (job_fonts->scan_completed)
+ ev_job_succeeded (job);
+
+ return !job_fonts->scan_completed;
+}
+
+static void
+ev_job_fonts_class_init (EvJobFontsClass *class)
+{
+ EvJobClass *job_class = EV_JOB_CLASS (class);
+
+ job_class->run = ev_job_fonts_run;
+
+ job_fonts_signals[FONTS_UPDATED] =
+ g_signal_new ("updated",
+ EV_TYPE_JOB_FONTS,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvJobFontsClass, updated),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__DOUBLE,
+ G_TYPE_NONE,
+ 1, G_TYPE_DOUBLE);
+}
+
+EvJob *
+ev_job_fonts_new (EvDocument *document)
+{
+ EvJobFonts *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = g_object_new (EV_TYPE_JOB_FONTS, NULL);
+
+ EV_JOB (job)->document = g_object_ref (document);
+
+ return EV_JOB (job);
+}
+
+/* EvJobLoad */
+static void
+ev_job_load_init (EvJobLoad *job)
+{
+ EV_JOB (job)->run_mode = EV_JOB_RUN_THREAD;
+}
+
+static void
+ev_job_load_dispose (GObject *object)
+{
+ EvJobLoad *job = EV_JOB_LOAD (object);
+
+ ev_debug_message (DEBUG_JOBS, "%s", job->uri);
+
+ if (job->uri) {
+ g_free (job->uri);
+ job->uri = NULL;
+ }
+
+ if (job->password) {
+ g_free (job->password);
+ job->password = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_job_load_parent_class)->dispose) (object);
+}
+
+static gboolean
+ev_job_load_run (EvJob *job)
+{
+ EvJobLoad *job_load = EV_JOB_LOAD (job);
+ GError *error = NULL;
+
+ ev_debug_message (DEBUG_JOBS, "%s", job_load->uri);
+ ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ ev_document_fc_mutex_lock ();
+
+ /* This job may already have a document even if the job didn't complete
+ because, e.g., a password is required - if so, just reload rather than
+ creating a new instance */
+ if (job->document) {
+ const gchar *uncompressed_uri;
+
+ if (job_load->password) {
+ ev_document_security_set_password (EV_DOCUMENT_SECURITY (job->document),
+ job_load->password);
+ }
+
+ job->failed = FALSE;
+ job->finished = FALSE;
+ g_clear_error (&job->error);
+
+ uncompressed_uri = g_object_get_data (G_OBJECT (job->document),
+ "uri-uncompressed");
+ ev_document_load (job->document,
+ uncompressed_uri ? uncompressed_uri : job_load->uri,
+ &error);
+ } else {
+ job->document = ev_document_factory_get_document (job_load->uri,
+ &error);
+ }
+
+ ev_document_fc_mutex_unlock ();
+
+ if (error) {
+ ev_job_failed_from_error (job, error);
+ g_error_free (error);
+ } else {
+ ev_job_succeeded (job);
+ }
+
+ return FALSE;
+}
+
+static void
+ev_job_load_class_init (EvJobLoadClass *class)
+{
+ GObjectClass *oclass = G_OBJECT_CLASS (class);
+ EvJobClass *job_class = EV_JOB_CLASS (class);
+
+ oclass->dispose = ev_job_load_dispose;
+ job_class->run = ev_job_load_run;
+}
+
+EvJob *
+ev_job_load_new (const gchar *uri)
+{
+ EvJobLoad *job;
+
+ ev_debug_message (DEBUG_JOBS, "%s", uri);
+
+ job = g_object_new (EV_TYPE_JOB_LOAD, NULL);
+ job->uri = g_strdup (uri);
+
+ return EV_JOB (job);
+}
+
+void
+ev_job_load_set_uri (EvJobLoad *job, const gchar *uri)
+{
+ ev_debug_message (DEBUG_JOBS, "%s", uri);
+
+ if (job->uri)
+ g_free (job->uri);
+ job->uri = g_strdup (uri);
+}
+
+void
+ev_job_load_set_password (EvJobLoad *job, const gchar *password)
+{
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ if (job->password)
+ g_free (job->password);
+ job->password = password ? g_strdup (password) : NULL;
+}
+
+/* EvJobSave */
+static void
+ev_job_save_init (EvJobSave *job)
+{
+ EV_JOB (job)->run_mode = EV_JOB_RUN_THREAD;
+}
+
+static void
+ev_job_save_dispose (GObject *object)
+{
+ EvJobSave *job = EV_JOB_SAVE (object);
+
+ ev_debug_message (DEBUG_JOBS, "%s", job->uri);
+
+ if (job->uri) {
+ g_free (job->uri);
+ job->uri = NULL;
+ }
+
+ if (job->document_uri) {
+ g_free (job->document_uri);
+ job->document_uri = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_job_save_parent_class)->dispose) (object);
+}
+
+static gboolean
+ev_job_save_run (EvJob *job)
+{
+ EvJobSave *job_save = EV_JOB_SAVE (job);
+ gint fd;
+ gchar *tmp_filename = NULL;
+ gchar *local_uri;
+ GError *error = NULL;
+
+ ev_debug_message (DEBUG_JOBS, "uri: %s, document_uri: %s", job_save->uri, job_save->document_uri);
+ ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ fd = ev_mkstemp ("saveacopy.XXXXXX", &tmp_filename, &error);
+ if (fd == -1) {
+ ev_job_failed_from_error (job, error);
+ g_error_free (error);
+
+ return FALSE;
+ }
+
+ ev_document_doc_mutex_lock ();
+
+ /* Save document to temp filename */
+ local_uri = g_filename_to_uri (tmp_filename, NULL, &error);
+ if (local_uri != NULL) {
+ ev_document_save (job->document, local_uri, &error);
+ }
+
+ close (fd);
+
+ ev_document_doc_mutex_unlock ();
+
+ if (error) {
+ g_free (local_uri);
+ ev_job_failed_from_error (job, error);
+ g_error_free (error);
+
+ return FALSE;
+ }
+
+ /* If original document was compressed,
+ * compress it again before saving
+ */
+ if (g_object_get_data (G_OBJECT (job->document), "uri-uncompressed")) {
+ EvCompressionType ctype = EV_COMPRESSION_NONE;
+ const gchar *ext;
+ gchar *uri_comp;
+
+ ext = g_strrstr (job_save->document_uri, ".gz");
+ if (ext && g_ascii_strcasecmp (ext, ".gz") == 0)
+ ctype = EV_COMPRESSION_GZIP;
+
+ ext = g_strrstr (job_save->document_uri, ".bz2");
+ if (ext && g_ascii_strcasecmp (ext, ".bz2") == 0)
+ ctype = EV_COMPRESSION_BZIP2;
+
+ uri_comp = ev_file_compress (local_uri, ctype, &error);
+ g_free (local_uri);
+ g_unlink (tmp_filename);
+
+ if (!uri_comp || error) {
+ local_uri = NULL;
+ } else {
+ local_uri = uri_comp;
+ }
+ }
+
+ g_free (tmp_filename);
+
+ if (error) {
+ g_free (local_uri);
+ ev_job_failed_from_error (job, error);
+ g_error_free (error);
+
+ return FALSE;
+ }
+
+ if (!local_uri)
+ return FALSE;
+
+ ev_xfer_uri_simple (local_uri, job_save->uri, &error);
+ ev_tmp_uri_unlink (local_uri);
+
+ if (error) {
+ ev_job_failed_from_error (job, error);
+ g_error_free (error);
+ } else {
+ ev_job_succeeded (job);
+ }
+
+ return FALSE;
+}
+
+static void
+ev_job_save_class_init (EvJobSaveClass *class)
+{
+ GObjectClass *oclass = G_OBJECT_CLASS (class);
+ EvJobClass *job_class = EV_JOB_CLASS (class);
+
+ oclass->dispose = ev_job_save_dispose;
+ job_class->run = ev_job_save_run;
+}
+
+EvJob *
+ev_job_save_new (EvDocument *document,
+ const gchar *uri,
+ const gchar *document_uri)
+{
+ EvJobSave *job;
+
+ ev_debug_message (DEBUG_JOBS, "uri: %s, document_uri: %s", uri, document_uri);
+
+ job = g_object_new (EV_TYPE_JOB_SAVE, NULL);
+
+ EV_JOB (job)->document = g_object_ref (document);
+ job->uri = g_strdup (uri);
+ job->document_uri = g_strdup (document_uri);
+
+ return EV_JOB (job);
+}
+
+/* EvJobFind */
+static void
+ev_job_find_init (EvJobFind *job)
+{
+ EV_JOB (job)->run_mode = EV_JOB_RUN_MAIN_LOOP;
+}
+
+static void
+ev_job_find_dispose (GObject *object)
+{
+ EvJobFind *job = EV_JOB_FIND (object);
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ if (job->text) {
+ g_free (job->text);
+ job->text = NULL;
+ }
+
+ if (job->pages) {
+ gint i;
+
+ for (i = 0; i < job->n_pages; i++) {
+ g_list_foreach (job->pages[i], (GFunc)ev_rectangle_free, NULL);
+ g_list_free (job->pages[i]);
+ }
+
+ g_free (job->pages);
+ job->pages = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_job_find_parent_class)->dispose) (object);
+}
+
+static gboolean
+ev_job_find_run (EvJob *job)
+{
+ EvJobFind *job_find = EV_JOB_FIND (job);
+ EvDocumentFind *find = EV_DOCUMENT_FIND (job->document);
+ EvPage *ev_page;
+ GList *matches;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ /* Do not block the main loop */
+ if (!ev_document_doc_mutex_trylock ())
+ return TRUE;
+
+#ifdef EV_ENABLE_DEBUG
+ /* We use the #ifdef in this case because of the if */
+ if (job_find->current_page == job_find->start_page)
+ ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+#endif
+
+ ev_page = ev_document_get_page (job->document, job_find->current_page);
+ matches = ev_document_find_find_text (find, ev_page, job_find->text,
+ job_find->case_sensitive);
+ g_object_unref (ev_page);
+
+ ev_document_doc_mutex_unlock ();
+
+ if (!job_find->has_results)
+ job_find->has_results = (matches != NULL);
+
+ job_find->pages[job_find->current_page] = matches;
+ g_signal_emit (job_find, job_find_signals[FIND_UPDATED], 0, job_find->current_page);
+
+ job_find->current_page = (job_find->current_page + 1) % job_find->n_pages;
+ if (job_find->current_page == job_find->start_page) {
+ ev_job_succeeded (job);
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void
+ev_job_find_class_init (EvJobFindClass *class)
+{
+ EvJobClass *job_class = EV_JOB_CLASS (class);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+
+ job_class->run = ev_job_find_run;
+ gobject_class->dispose = ev_job_find_dispose;
+
+ job_find_signals[FIND_UPDATED] =
+ g_signal_new ("updated",
+ EV_TYPE_JOB_FIND,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvJobFindClass, updated),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__INT,
+ G_TYPE_NONE,
+ 1, G_TYPE_INT);
+}
+
+EvJob *
+ev_job_find_new (EvDocument *document,
+ gint start_page,
+ gint n_pages,
+ const gchar *text,
+ gboolean case_sensitive)
+{
+ EvJobFind *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = g_object_new (EV_TYPE_JOB_FIND, NULL);
+
+ EV_JOB (job)->document = g_object_ref (document);
+ job->start_page = start_page;
+ job->current_page = start_page;
+ job->n_pages = n_pages;
+ job->pages = g_new0 (GList *, n_pages);
+ job->text = g_strdup (text);
+ job->case_sensitive = case_sensitive;
+ job->has_results = FALSE;
+
+ return EV_JOB (job);
+}
+
+gint
+ev_job_find_get_n_results (EvJobFind *job,
+ gint page)
+{
+ return g_list_length (job->pages[page]);
+}
+
+gdouble
+ev_job_find_get_progress (EvJobFind *job)
+{
+ gint pages_done;
+
+ if (ev_job_is_finished (EV_JOB (job)))
+ return 1.0;
+
+ if (job->current_page > job->start_page) {
+ pages_done = job->current_page - job->start_page + 1;
+ } else if (job->current_page == job->start_page) {
+ pages_done = job->n_pages;
+ } else {
+ pages_done = job->n_pages - job->start_page + job->current_page;
+ }
+
+ return pages_done / (gdouble) job->n_pages;
+}
+
+gboolean
+ev_job_find_has_results (EvJobFind *job)
+{
+ return job->has_results;
+}
+
+GList **
+ev_job_find_get_results (EvJobFind *job)
+{
+ return job->pages;
+}
+
+/* EvJobLayers */
+static void
+ev_job_layers_init (EvJobLayers *job)
+{
+ EV_JOB (job)->run_mode = EV_JOB_RUN_THREAD;
+}
+
+static void
+ev_job_layers_dispose (GObject *object)
+{
+ EvJobLayers *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = EV_JOB_LAYERS (object);
+
+ if (job->model) {
+ g_object_unref (job->model);
+ job->model = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_job_layers_parent_class)->dispose) (object);
+}
+
+static gboolean
+ev_job_layers_run (EvJob *job)
+{
+ EvJobLayers *job_layers = EV_JOB_LAYERS (job);
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+ ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ ev_document_doc_mutex_lock ();
+ job_layers->model = ev_document_layers_get_layers (EV_DOCUMENT_LAYERS (job->document));
+ ev_document_doc_mutex_unlock ();
+
+ ev_job_succeeded (job);
+
+ return FALSE;
+}
+
+static void
+ev_job_layers_class_init (EvJobLayersClass *class)
+{
+ GObjectClass *oclass = G_OBJECT_CLASS (class);
+ EvJobClass *job_class = EV_JOB_CLASS (class);
+
+ oclass->dispose = ev_job_layers_dispose;
+ job_class->run = ev_job_layers_run;
+}
+
+EvJob *
+ev_job_layers_new (EvDocument *document)
+{
+ EvJob *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = g_object_new (EV_TYPE_JOB_LAYERS, NULL);
+ job->document = g_object_ref (document);
+
+ return job;
+}
+
+/* EvJobExport */
+static void
+ev_job_export_init (EvJobExport *job)
+{
+ EV_JOB (job)->run_mode = EV_JOB_RUN_THREAD;
+ job->page = -1;
+}
+
+static void
+ev_job_export_dispose (GObject *object)
+{
+ EvJobExport *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = EV_JOB_EXPORT (object);
+
+ if (job->rc) {
+ g_object_unref (job->rc);
+ job->rc = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_job_export_parent_class)->dispose) (object);
+}
+
+static gboolean
+ev_job_export_run (EvJob *job)
+{
+ EvJobExport *job_export = EV_JOB_EXPORT (job);
+ EvPage *ev_page;
+
+ g_assert (job_export->page != -1);
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+ ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ ev_document_doc_mutex_lock ();
+
+ ev_page = ev_document_get_page (job->document, job_export->page);
+ if (job_export->rc) {
+ job->failed = FALSE;
+ job->finished = FALSE;
+ g_clear_error (&job->error);
+
+ ev_render_context_set_page (job_export->rc, ev_page);
+ } else {
+ job_export->rc = ev_render_context_new (ev_page, 0, 1.0);
+ }
+ g_object_unref (ev_page);
+
+ ev_file_exporter_do_page (EV_FILE_EXPORTER (job->document), job_export->rc);
+
+ ev_document_doc_mutex_unlock ();
+
+ ev_job_succeeded (job);
+
+ return FALSE;
+}
+
+static void
+ev_job_export_class_init (EvJobExportClass *class)
+{
+ GObjectClass *oclass = G_OBJECT_CLASS (class);
+ EvJobClass *job_class = EV_JOB_CLASS (class);
+
+ oclass->dispose = ev_job_export_dispose;
+ job_class->run = ev_job_export_run;
+}
+
+EvJob *
+ev_job_export_new (EvDocument *document)
+{
+ EvJob *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = g_object_new (EV_TYPE_JOB_EXPORT, NULL);
+ job->document = g_object_ref (document);
+
+ return job;
+}
+
+void
+ev_job_export_set_page (EvJobExport *job,
+ gint page)
+{
+ job->page = page;
+}
+
+/* EvJobPrint */
+static void
+ev_job_print_init (EvJobPrint *job)
+{
+ EV_JOB (job)->run_mode = EV_JOB_RUN_THREAD;
+ job->page = -1;
+}
+
+static void
+ev_job_print_dispose (GObject *object)
+{
+ EvJobPrint *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = EV_JOB_PRINT (object);
+
+ if (job->cr) {
+ cairo_destroy (job->cr);
+ job->cr = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_job_print_parent_class)->dispose) (object);
+}
+
+static gboolean
+ev_job_print_run (EvJob *job)
+{
+ EvJobPrint *job_print = EV_JOB_PRINT (job);
+ EvPage *ev_page;
+ cairo_status_t cr_status;
+
+ g_assert (job_print->page != -1);
+ g_assert (job_print->cr != NULL);
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+ ev_profiler_start (EV_PROFILE_JOBS, "%s (%p)", EV_GET_TYPE_NAME (job), job);
+
+ job->failed = FALSE;
+ job->finished = FALSE;
+ g_clear_error (&job->error);
+
+ ev_document_doc_mutex_lock ();
+
+ ev_page = ev_document_get_page (job->document, job_print->page);
+ ev_document_print_print_page (EV_DOCUMENT_PRINT (job->document),
+ ev_page, job_print->cr);
+ g_object_unref (ev_page);
+
+ ev_document_doc_mutex_unlock ();
+
+ cr_status = cairo_status (job_print->cr);
+ if (cr_status == CAIRO_STATUS_SUCCESS) {
+ ev_job_succeeded (job);
+ } else {
+ ev_job_failed (job,
+ GTK_PRINT_ERROR,
+ GTK_PRINT_ERROR_GENERAL,
+ _("Failed to print page %d: %s"),
+ job_print->page,
+ cairo_status_to_string (cr_status));
+ }
+
+ return FALSE;
+}
+
+static void
+ev_job_print_class_init (EvJobPrintClass *class)
+{
+ GObjectClass *oclass = G_OBJECT_CLASS (class);
+ EvJobClass *job_class = EV_JOB_CLASS (class);
+
+ oclass->dispose = ev_job_print_dispose;
+ job_class->run = ev_job_print_run;
+}
+
+EvJob *
+ev_job_print_new (EvDocument *document)
+{
+ EvJob *job;
+
+ ev_debug_message (DEBUG_JOBS, NULL);
+
+ job = g_object_new (EV_TYPE_JOB_PRINT, NULL);
+ job->document = g_object_ref (document);
+
+ return job;
+}
+
+void
+ev_job_print_set_page (EvJobPrint *job,
+ gint page)
+{
+ job->page = page;
+}
+
+void
+ev_job_print_set_cairo (EvJobPrint *job,
+ cairo_t *cr)
+{
+ if (job->cr == cr)
+ return;
+
+ if (job->cr)
+ cairo_destroy (job->cr);
+ job->cr = cr ? cairo_reference (cr) : NULL;
+}
diff --git a/libview/ev-jobs.h b/libview/ev-jobs.h
new file mode 100644
index 00000000..14b47f78
--- /dev/null
+++ b/libview/ev-jobs.h
@@ -0,0 +1,502 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-view.h> can be included directly."
+#endif
+
+#ifndef __EV_JOBS_H__
+#define __EV_JOBS_H__
+
+#include <gio/gio.h>
+#include <gtk/gtk.h>
+#include <cairo.h>
+
+#include <evince-document.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvJob EvJob;
+typedef struct _EvJobClass EvJobClass;
+
+typedef struct _EvJobRender EvJobRender;
+typedef struct _EvJobRenderClass EvJobRenderClass;
+
+typedef struct _EvJobPageData EvJobPageData;
+typedef struct _EvJobPageDataClass EvJobPageDataClass;
+
+typedef struct _EvJobThumbnail EvJobThumbnail;
+typedef struct _EvJobThumbnailClass EvJobThumbnailClass;
+
+typedef struct _EvJobLinks EvJobLinks;
+typedef struct _EvJobLinksClass EvJobLinksClass;
+
+typedef struct _EvJobAttachments EvJobAttachments;
+typedef struct _EvJobAttachmentsClass EvJobAttachmentsClass;
+
+typedef struct _EvJobAnnots EvJobAnnots;
+typedef struct _EvJobAnnotsClass EvJobAnnotsClass;
+
+typedef struct _EvJobFonts EvJobFonts;
+typedef struct _EvJobFontsClass EvJobFontsClass;
+
+typedef struct _EvJobLoad EvJobLoad;
+typedef struct _EvJobLoadClass EvJobLoadClass;
+
+typedef struct _EvJobSave EvJobSave;
+typedef struct _EvJobSaveClass EvJobSaveClass;
+
+typedef struct _EvJobFind EvJobFind;
+typedef struct _EvJobFindClass EvJobFindClass;
+
+typedef struct _EvJobLayers EvJobLayers;
+typedef struct _EvJobLayersClass EvJobLayersClass;
+
+typedef struct _EvJobExport EvJobExport;
+typedef struct _EvJobExportClass EvJobExportClass;
+
+typedef struct _EvJobPrint EvJobPrint;
+typedef struct _EvJobPrintClass EvJobPrintClass;
+
+#define EV_TYPE_JOB (ev_job_get_type())
+#define EV_JOB(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB, EvJob))
+#define EV_JOB_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB, EvJobClass))
+#define EV_IS_JOB(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB))
+#define EV_JOB_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_JOB, EvJobClass))
+
+#define EV_TYPE_JOB_LINKS (ev_job_links_get_type())
+#define EV_JOB_LINKS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_LINKS, EvJobLinks))
+#define EV_JOB_LINKS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_LINKS, EvJobLinksClass))
+#define EV_IS_JOB_LINKS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_LINKS))
+
+#define EV_TYPE_JOB_ATTACHMENTS (ev_job_attachments_get_type())
+#define EV_JOB_ATTACHMENTS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_ATTACHMENTS, EvJobAttachments))
+#define EV_JOB_ATTACHMENTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_ATTACHMENTS, EvJobAttachmentsClass))
+#define EV_IS_JOB_ATTACHMENTS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_ATTACHMENTS))
+
+#define EV_TYPE_JOB_ANNOTS (ev_job_annots_get_type())
+#define EV_JOB_ANNOTS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_ANNOTS, EvJobAnnots))
+#define EV_JOB_ANNOTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_ANNOTS, EvJobAnnotsClass))
+#define EV_IS_JOB_ANNOTS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_ANNOTS))
+
+#define EV_TYPE_JOB_RENDER (ev_job_render_get_type())
+#define EV_JOB_RENDER(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_RENDER, EvJobRender))
+#define EV_JOB_RENDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_RENDER, EvJobRenderClass))
+#define EV_IS_JOB_RENDER(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_RENDER))
+
+#define EV_TYPE_JOB_PAGE_DATA (ev_job_page_data_get_type())
+#define EV_JOB_PAGE_DATA(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_PAGE_DATA, EvJobPageData))
+#define EV_JOB_PAGE_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_PAGE_DATA, EvJobPageDataClass))
+#define EV_IS_JOB_PAGE_DATA(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_PAGE_DATA))
+
+#define EV_TYPE_JOB_THUMBNAIL (ev_job_thumbnail_get_type())
+#define EV_JOB_THUMBNAIL(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_THUMBNAIL, EvJobThumbnail))
+#define EV_JOB_THUMBNAIL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_THUMBNAIL, EvJobThumbnailClass))
+#define EV_IS_JOB_THUMBNAIL(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_THUMBNAIL))
+
+#define EV_TYPE_JOB_FONTS (ev_job_fonts_get_type())
+#define EV_JOB_FONTS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_FONTS, EvJobFonts))
+#define EV_JOB_FONTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_FONTS, EvJobFontsClass))
+#define EV_IS_JOB_FONTS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_FONTS))
+
+#define EV_TYPE_JOB_LOAD (ev_job_load_get_type())
+#define EV_JOB_LOAD(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_LOAD, EvJobLoad))
+#define EV_JOB_LOAD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_LOAD, EvJobLoadClass))
+#define EV_IS_JOB_LOAD(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_LOAD))
+
+#define EV_TYPE_JOB_SAVE (ev_job_save_get_type())
+#define EV_JOB_SAVE(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_SAVE, EvJobSave))
+#define EV_JOB_SAVE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_SAVE, EvJobSaveClass))
+#define EV_IS_JOB_SAVE(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_SAVE))
+
+#define EV_TYPE_JOB_FIND (ev_job_find_get_type())
+#define EV_JOB_FIND(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_FIND, EvJobFind))
+#define EV_JOB_FIND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_FIND, EvJobFindClass))
+#define EV_IS_JOB_FIND(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_FIND))
+
+#define EV_TYPE_JOB_LAYERS (ev_job_layers_get_type())
+#define EV_JOB_LAYERS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_LAYERS, EvJobLayers))
+#define EV_JOB_LAYERS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_LAYERS, EvJobLayersClass))
+#define EV_IS_JOB_LAYERS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_LAYERS))
+
+#define EV_TYPE_JOB_EXPORT (ev_job_export_get_type())
+#define EV_JOB_EXPORT(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_EXPORT, EvJobExport))
+#define EV_JOB_EXPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_EXPORT, EvJobExportClass))
+#define EV_IS_JOB_EXPORT(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_EXPORT))
+
+#define EV_TYPE_JOB_PRINT (ev_job_print_get_type())
+#define EV_JOB_PRINT(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_JOB_PRINT, EvJobPrint))
+#define EV_JOB_PRINT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_JOB_PRINT, EvJobPrintClass))
+#define EV_IS_JOB_PRINT(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_JOB_PRINT))
+
+typedef enum {
+ EV_JOB_RUN_THREAD,
+ EV_JOB_RUN_MAIN_LOOP
+} EvJobRunMode;
+
+struct _EvJob
+{
+ GObject parent;
+
+ EvDocument *document;
+
+ EvJobRunMode run_mode;
+
+ guint cancelled : 1;
+ guint finished : 1;
+ guint failed : 1;
+
+ GError *error;
+ GCancellable *cancellable;
+
+ guint idle_finished_id;
+ guint idle_cancelled_id;
+};
+
+struct _EvJobClass
+{
+ GObjectClass parent_class;
+
+ gboolean (*run) (EvJob *job);
+
+ /* Signals */
+ void (* cancelled) (EvJob *job);
+ void (* finished) (EvJob *job);
+};
+
+struct _EvJobLinks
+{
+ EvJob parent;
+
+ GtkTreeModel *model;
+};
+
+struct _EvJobLinksClass
+{
+ EvJobClass parent_class;
+};
+
+struct _EvJobAttachments
+{
+ EvJob parent;
+
+ GList *attachments;
+};
+
+struct _EvJobAttachmentsClass
+{
+ EvJobClass parent_class;
+};
+
+struct _EvJobAnnots
+{
+ EvJob parent;
+
+ GList *annots;
+};
+
+struct _EvJobAnnotsClass
+{
+ EvJobClass parent_class;
+};
+
+struct _EvJobRender
+{
+ EvJob parent;
+
+ gint page;
+ gint rotation;
+ gdouble scale;
+
+ gboolean page_ready;
+ gint target_width;
+ gint target_height;
+ cairo_surface_t *surface;
+
+ gboolean include_selection;
+ cairo_surface_t *selection;
+ cairo_region_t *selection_region;
+ EvRectangle selection_points;
+ EvSelectionStyle selection_style;
+ GdkColor base;
+ GdkColor text;
+};
+
+struct _EvJobRenderClass
+{
+ EvJobClass parent_class;
+};
+
+typedef enum {
+ EV_PAGE_DATA_INCLUDE_NONE = 0,
+ EV_PAGE_DATA_INCLUDE_LINKS = 1 << 0,
+ EV_PAGE_DATA_INCLUDE_TEXT = 1 << 1,
+ EV_PAGE_DATA_INCLUDE_TEXT_MAPPING = 1 << 2,
+ EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT = 1 << 3,
+ EV_PAGE_DATA_INCLUDE_IMAGES = 1 << 4,
+ EV_PAGE_DATA_INCLUDE_FORMS = 1 << 5,
+ EV_PAGE_DATA_INCLUDE_ANNOTS = 1 << 6,
+ EV_PAGE_DATA_INCLUDE_ALL = (1 << 7) - 1
+} EvJobPageDataFlags;
+
+struct _EvJobPageData
+{
+ EvJob parent;
+
+ gint page;
+ EvJobPageDataFlags flags;
+
+ EvMappingList *link_mapping;
+ EvMappingList *image_mapping;
+ EvMappingList *form_field_mapping;
+ EvMappingList *annot_mapping;
+ cairo_region_t *text_mapping;
+ gchar *text;
+ EvRectangle *text_layout;
+ guint text_layout_length;
+};
+
+struct _EvJobPageDataClass
+{
+ EvJobClass parent_class;
+};
+
+struct _EvJobThumbnail
+{
+ EvJob parent;
+
+ gint page;
+ gint rotation;
+ gdouble scale;
+
+ GdkPixbuf *thumbnail;
+};
+
+struct _EvJobThumbnailClass
+{
+ EvJobClass parent_class;
+};
+
+struct _EvJobFonts
+{
+ EvJob parent;
+ gboolean scan_completed;
+};
+
+struct _EvJobFontsClass
+{
+ EvJobClass parent_class;
+
+ /* Signals */
+ void (* updated) (EvJobFonts *job,
+ gdouble progress);
+};
+
+struct _EvJobLoad
+{
+ EvJob parent;
+
+ gchar *uri;
+ gchar *password;
+};
+
+struct _EvJobLoadClass
+{
+ EvJobClass parent_class;
+};
+
+struct _EvJobSave
+{
+ EvJob parent;
+
+ gchar *uri;
+ gchar *document_uri;
+};
+
+struct _EvJobSaveClass
+{
+ EvJobClass parent_class;
+};
+
+struct _EvJobFind
+{
+ EvJob parent;
+
+ gint start_page;
+ gint current_page;
+ gint n_pages;
+ GList **pages;
+ gchar *text;
+ gboolean case_sensitive;
+ gboolean has_results;
+};
+
+struct _EvJobFindClass
+{
+ EvJobClass parent_class;
+
+ /* Signals */
+ void (* updated) (EvJobFind *job,
+ gint page);
+};
+
+struct _EvJobLayers
+{
+ EvJob parent;
+
+ GtkTreeModel *model;
+};
+
+struct _EvJobLayersClass
+{
+ EvJobClass parent_class;
+};
+
+struct _EvJobExport
+{
+ EvJob parent;
+
+ gint page;
+ EvRenderContext *rc;
+};
+
+struct _EvJobExportClass
+{
+ EvJobClass parent_class;
+};
+
+struct _EvJobPrint
+{
+ EvJob parent;
+
+ gint page;
+ cairo_t *cr;
+};
+
+struct _EvJobPrintClass
+{
+ EvJobClass parent_class;
+};
+
+/* Base job class */
+GType ev_job_get_type (void) G_GNUC_CONST;
+gboolean ev_job_run (EvJob *job);
+void ev_job_cancel (EvJob *job);
+void ev_job_failed (EvJob *job,
+ GQuark domain,
+ gint code,
+ const gchar *format,
+ ...);
+void ev_job_failed_from_error (EvJob *job,
+ GError *error);
+void ev_job_succeeded (EvJob *job);
+gboolean ev_job_is_finished (EvJob *job);
+gboolean ev_job_is_failed (EvJob *job);
+EvJobRunMode ev_job_get_run_mode (EvJob *job);
+void ev_job_set_run_mode (EvJob *job,
+ EvJobRunMode run_mode);
+
+/* EvJobLinks */
+GType ev_job_links_get_type (void) G_GNUC_CONST;
+EvJob *ev_job_links_new (EvDocument *document);
+
+/* EvJobAttachments */
+GType ev_job_attachments_get_type (void) G_GNUC_CONST;
+EvJob *ev_job_attachments_new (EvDocument *document);
+
+/* EvJobAnnots */
+GType ev_job_annots_get_type (void) G_GNUC_CONST;
+EvJob *ev_job_annots_new (EvDocument *document);
+
+/* EvJobRender */
+GType ev_job_render_get_type (void) G_GNUC_CONST;
+EvJob *ev_job_render_new (EvDocument *document,
+ gint page,
+ gint rotation,
+ gdouble scale,
+ gint width,
+ gint height);
+void ev_job_render_set_selection_info (EvJobRender *job,
+ EvRectangle *selection_points,
+ EvSelectionStyle selection_style,
+ GdkColor *text,
+ GdkColor *base);
+/* EvJobPageData */
+GType ev_job_page_data_get_type (void) G_GNUC_CONST;
+EvJob *ev_job_page_data_new (EvDocument *document,
+ gint page,
+ EvJobPageDataFlags flags);
+
+/* EvJobThumbnail */
+GType ev_job_thumbnail_get_type (void) G_GNUC_CONST;
+EvJob *ev_job_thumbnail_new (EvDocument *document,
+ gint page,
+ gint rotation,
+ gdouble scale);
+/* EvJobFonts */
+GType ev_job_fonts_get_type (void) G_GNUC_CONST;
+EvJob *ev_job_fonts_new (EvDocument *document);
+
+/* EvJobLoad */
+GType ev_job_load_get_type (void) G_GNUC_CONST;
+EvJob *ev_job_load_new (const gchar *uri);
+void ev_job_load_set_uri (EvJobLoad *load,
+ const gchar *uri);
+void ev_job_load_set_password (EvJobLoad *job,
+ const gchar *password);
+
+/* EvJobSave */
+GType ev_job_save_get_type (void) G_GNUC_CONST;
+EvJob *ev_job_save_new (EvDocument *document,
+ const gchar *uri,
+ const gchar *document_uri);
+/* EvJobFind */
+GType ev_job_find_get_type (void) G_GNUC_CONST;
+EvJob *ev_job_find_new (EvDocument *document,
+ gint start_page,
+ gint n_pages,
+ const gchar *text,
+ gboolean case_sensitive);
+gint ev_job_find_get_n_results (EvJobFind *job,
+ gint pages);
+gdouble ev_job_find_get_progress (EvJobFind *job);
+gboolean ev_job_find_has_results (EvJobFind *job);
+GList **ev_job_find_get_results (EvJobFind *job);
+
+/* EvJobLayers */
+GType ev_job_layers_get_type (void) G_GNUC_CONST;
+EvJob *ev_job_layers_new (EvDocument *document);
+
+/* EvJobExport */
+GType ev_job_export_get_type (void) G_GNUC_CONST;
+EvJob *ev_job_export_new (EvDocument *document);
+void ev_job_export_set_page (EvJobExport *job,
+ gint page);
+/* EvJobPrint */
+GType ev_job_print_get_type (void) G_GNUC_CONST;
+EvJob *ev_job_print_new (EvDocument *document);
+void ev_job_print_set_page (EvJobPrint *job,
+ gint page);
+void ev_job_print_set_cairo (EvJobPrint *job,
+ cairo_t *cr);
+
+G_END_DECLS
+
+#endif /* __EV_JOBS_H__ */
diff --git a/libview/ev-loading-window.c b/libview/ev-loading-window.c
new file mode 100644
index 00000000..e6352fe9
--- /dev/null
+++ b/libview/ev-loading-window.c
@@ -0,0 +1,278 @@
+/* ev-loading-window.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2010 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include <string.h>
+#include <glib/gi18n.h>
+#include "ev-loading-window.h"
+
+enum {
+ PROP_0,
+ PROP_PARENT
+};
+
+struct _EvLoadingWindow {
+ GtkWindow base_instance;
+
+ GtkWindow *parent;
+
+ gint x;
+ gint y;
+ gint width;
+ gint height;
+};
+
+struct _EvLoadingWindowClass {
+ GtkWindowClass base_class;
+};
+
+G_DEFINE_TYPE (EvLoadingWindow, ev_loading_window, GTK_TYPE_WINDOW)
+
+static void
+ev_loading_window_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvLoadingWindow *window = EV_LOADING_WINDOW (object);
+
+ switch (prop_id) {
+ case PROP_PARENT:
+ window->parent = g_value_get_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_loading_window_init (EvLoadingWindow *window)
+{
+ GtkWindow *gtk_window = GTK_WINDOW (window);
+ GtkWidget *widget = GTK_WIDGET (window);
+ GtkWidget *hbox;
+ GtkWidget *spinner;
+ GtkWidget *label;
+ GtkStyle *style;
+ GdkColor fg, bg;
+ const gchar *loading_text = _("Loading…");
+ const gchar *fg_color_name = "info_fg_color";
+ const gchar *bg_color_name = "info_bg_color";
+
+ hbox = gtk_hbox_new (FALSE, 12);
+
+ spinner = gtk_spinner_new ();
+ gtk_spinner_start (GTK_SPINNER (spinner));
+ gtk_box_pack_start (GTK_BOX (hbox), spinner, FALSE, FALSE, 0);
+ gtk_widget_show (spinner);
+
+ label = gtk_label_new (loading_text);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ gtk_container_add (GTK_CONTAINER (window), hbox);
+ gtk_widget_show (hbox);
+
+ gtk_widget_set_app_paintable (widget, TRUE);
+
+ gtk_container_set_border_width (GTK_CONTAINER (window), 10);
+
+ gtk_window_set_type_hint (gtk_window, GDK_WINDOW_TYPE_HINT_NOTIFICATION);
+ gtk_window_set_accept_focus (gtk_window, FALSE);
+ gtk_window_set_decorated (gtk_window, FALSE);
+ gtk_window_set_resizable (gtk_window, FALSE);
+
+ style = gtk_widget_get_style (widget);
+ if (!gtk_style_lookup_color (style, fg_color_name, &fg) ||
+ !gtk_style_lookup_color (style, bg_color_name, &bg)) {
+ fg.pixel = 0;
+ fg.red = 0xb800;
+ fg.green = 0xad00;
+ fg.blue = 0x9d00;
+
+ bg.pixel = 0;
+ bg.red = 0xff00;
+ bg.green = 0xff00;
+ bg.blue = 0xbf00;
+ }
+
+ if (!gdk_color_equal (&bg, &style->bg[GTK_STATE_NORMAL]))
+ gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &bg);
+ if (!gdk_color_equal (&fg, &style->fg[GTK_STATE_NORMAL]))
+ gtk_widget_modify_fg (widget, GTK_STATE_NORMAL, &fg);
+}
+
+static GObject *
+ev_loading_window_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ EvLoadingWindow *window;
+ GtkWindow *gtk_window;
+
+ object = G_OBJECT_CLASS (ev_loading_window_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_params);
+ window = EV_LOADING_WINDOW (object);
+ gtk_window = GTK_WINDOW (window);
+
+ gtk_window_set_transient_for (gtk_window, window->parent);
+ gtk_window_set_destroy_with_parent (gtk_window, TRUE);
+
+ return object;
+}
+
+static void
+_cairo_rounded_rectangle (cairo_t *cr,
+ gint width,
+ gint height,
+ gdouble radius)
+{
+ cairo_move_to (cr, radius, 0);
+ cairo_line_to (cr, width - radius, 0);
+ cairo_curve_to (cr,
+ width, 0,
+ width, 0,
+ width,
+ radius);
+ cairo_line_to (cr, width, height - radius);
+ cairo_curve_to (cr,
+ width,height,
+ width, height,
+ width - radius,
+ height);
+ cairo_line_to (cr, radius, height);
+ cairo_curve_to (cr,
+ 0, height,
+ 0, height,
+ 0, height - radius);
+ cairo_line_to (cr, 0, radius);
+ cairo_curve_to (cr,
+ 0, 0,
+ 0, 0,
+ radius, 0);
+}
+
+static void
+ev_loading_window_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ EvLoadingWindow *window = EV_LOADING_WINDOW (widget);
+ GdkPixmap *mask;
+ cairo_t *cr;
+ double r;
+
+ GTK_WIDGET_CLASS (ev_loading_window_parent_class)->size_allocate (widget, allocation);
+
+ if (allocation->width == window->width && allocation->height == window->height)
+ return;
+
+ window->width = allocation->width;
+ window->height = allocation->height;
+
+ mask = gdk_pixmap_new (NULL, window->width, window->height, 1);
+ cr = gdk_cairo_create (GDK_DRAWABLE (mask));
+
+ cairo_save (cr);
+ cairo_rectangle (cr, 0, 0, window->width, window->height);
+ cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
+ cairo_fill (cr);
+ cairo_restore (cr);
+
+ cairo_set_source_rgb (cr, 1., 1., 1.);
+ r = MIN (window->width, window->height) / 2.;
+ _cairo_rounded_rectangle (cr, window->width, window->height, r);
+ cairo_fill (cr);
+
+ cairo_destroy (cr);
+
+ gtk_widget_shape_combine_mask (widget, mask, 0, 0);
+ g_object_unref (mask);
+}
+
+static void
+ev_loading_window_hide (GtkWidget *widget)
+{
+ EvLoadingWindow *window = EV_LOADING_WINDOW (widget);
+
+ window->x = window->y = 0;
+
+ GTK_WIDGET_CLASS (ev_loading_window_parent_class)->hide (widget);
+}
+
+static void
+ev_loading_window_class_init (EvLoadingWindowClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *gtk_widget_class = GTK_WIDGET_CLASS (klass);
+
+ g_object_class->constructor = ev_loading_window_constructor;
+ g_object_class->set_property = ev_loading_window_set_property;
+
+ gtk_widget_class->size_allocate = ev_loading_window_size_allocate;
+ gtk_widget_class->hide = ev_loading_window_hide;
+
+ g_object_class_install_property (g_object_class,
+ PROP_PARENT,
+ g_param_spec_object ("parent",
+ "Parent",
+ "The parent window",
+ GTK_TYPE_WINDOW,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+}
+
+/* Public methods */
+GtkWidget *
+ev_loading_window_new (GtkWindow *parent)
+{
+ GtkWidget *window;
+
+ g_return_val_if_fail (GTK_IS_WINDOW (parent), NULL);
+
+ window = g_object_new (EV_TYPE_LOADING_WINDOW,
+ "parent", parent,
+ NULL);
+ return window;
+}
+
+void
+ev_loading_window_get_size (EvLoadingWindow *window,
+ gint *width,
+ gint *height)
+{
+ if (width) *width = window->width;
+ if (height) *height = window->height;
+}
+
+void
+ev_loading_window_move (EvLoadingWindow *window,
+ gint x,
+ gint y)
+{
+ if (x == window->x && y == window->y)
+ return;
+
+ window->x = x;
+ window->y = y;
+ gtk_window_move (GTK_WINDOW (window), x, y);
+}
diff --git a/libview/ev-loading-window.h b/libview/ev-loading-window.h
new file mode 100644
index 00000000..fd8eee61
--- /dev/null
+++ b/libview/ev-loading-window.h
@@ -0,0 +1,49 @@
+/* ev-loading-window.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2010 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 EV_LOADING_WINDOW_H
+#define EV_LOADING_WINDOW_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvLoadingWindow EvLoadingWindow;
+typedef struct _EvLoadingWindowClass EvLoadingWindowClass;
+
+#define EV_TYPE_LOADING_WINDOW (ev_loading_window_get_type())
+#define EV_LOADING_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_LOADING_WINDOW, EvLoadingWindow))
+#define EV_LOADING_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_LOADING_WINDOW, EvLoadingWindowClass))
+#define EV_IS_LOADING_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_LOADING_WINDOW))
+#define EV_IS_LOADING_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_LOADING_WINDOW))
+#define EV_LOADING_WINDOW_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_LOADING_WINDOW, EvLoadingWindowClass))
+
+GType ev_loading_window_get_type (void) G_GNUC_CONST;
+GtkWidget *ev_loading_window_new (GtkWindow *parent);
+void ev_loading_window_get_size (EvLoadingWindow *window,
+ gint *width,
+ gint *height);
+void ev_loading_window_move (EvLoadingWindow *window,
+ gint x,
+ gint y);
+
+G_END_DECLS
+
+#endif /* EV_LOADING_WINDOW_H */
diff --git a/libview/ev-page-cache.c b/libview/ev-page-cache.c
new file mode 100644
index 00000000..c4dc062c
--- /dev/null
+++ b/libview/ev-page-cache.c
@@ -0,0 +1,521 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include <glib.h>
+#include "ev-jobs.h"
+#include "ev-job-scheduler.h"
+#include "ev-mapping-list.h"
+#include "ev-selection.h"
+#include "ev-document-links.h"
+#include "ev-document-forms.h"
+#include "ev-document-images.h"
+#include "ev-document-annotations.h"
+#include "ev-document-text.h"
+#include "ev-page-cache.h"
+
+typedef struct _EvPageCacheData {
+ EvJob *job;
+ gboolean done : 1;
+ gboolean dirty : 1;
+ EvJobPageDataFlags flags;
+
+ EvMappingList *link_mapping;
+ EvMappingList *image_mapping;
+ EvMappingList *form_field_mapping;
+ EvMappingList *annot_mapping;
+ cairo_region_t *text_mapping;
+ EvRectangle *text_layout;
+ guint text_layout_length;
+ gchar *text;
+} EvPageCacheData;
+
+struct _EvPageCache {
+ GObject parent;
+
+ EvDocument *document;
+ EvPageCacheData *page_list;
+ gint n_pages;
+
+ /* Current range */
+ gint start_page;
+ gint end_page;
+
+ EvJobPageDataFlags flags;
+};
+
+struct _EvPageCacheClass {
+ GObjectClass parent_class;
+};
+
+#define EV_PAGE_DATA_FLAGS_DEFAULT ( \
+ EV_PAGE_DATA_INCLUDE_LINKS | \
+ EV_PAGE_DATA_INCLUDE_TEXT_MAPPING | \
+ EV_PAGE_DATA_INCLUDE_IMAGES | \
+ EV_PAGE_DATA_INCLUDE_FORMS | \
+ EV_PAGE_DATA_INCLUDE_ANNOTS)
+
+
+static void job_page_data_finished_cb (EvJob *job,
+ EvPageCache *cache);
+static void job_page_data_cancelled_cb (EvJob *job,
+ EvPageCacheData *data);
+
+G_DEFINE_TYPE (EvPageCache, ev_page_cache, G_TYPE_OBJECT)
+
+static void
+ev_page_cache_data_free (EvPageCacheData *data)
+{
+ if (data->job) {
+ g_object_unref (data->job);
+ data->job = NULL;
+ }
+
+ if (data->link_mapping) {
+ ev_mapping_list_unref (data->link_mapping);
+ data->link_mapping = NULL;
+ }
+
+ if (data->image_mapping) {
+ ev_mapping_list_unref (data->image_mapping);
+ data->image_mapping = NULL;
+ }
+
+ if (data->form_field_mapping) {
+ ev_mapping_list_unref (data->form_field_mapping);
+ data->form_field_mapping = NULL;
+ }
+
+ if (data->annot_mapping) {
+ ev_mapping_list_unref (data->annot_mapping);
+ data->annot_mapping = NULL;
+ }
+
+ if (data->text_mapping) {
+ cairo_region_destroy (data->text_mapping);
+ data->text_mapping = NULL;
+ }
+
+ if (data->text_layout) {
+ g_free (data->text_layout);
+ data->text_layout = NULL;
+ data->text_layout_length = 0;
+ }
+
+ if (data->text) {
+ g_free (data->text);
+ data->text = NULL;
+ }
+}
+
+static void
+ev_page_cache_finalize (GObject *object)
+{
+ EvPageCache *cache = EV_PAGE_CACHE (object);
+ gint i;
+
+ if (cache->page_list) {
+ for (i = 0; i < cache->n_pages; i++) {
+ EvPageCacheData *data;
+
+ data = &cache->page_list[i];
+
+ if (data->job) {
+ g_signal_handlers_disconnect_by_func (data->job,
+ G_CALLBACK (job_page_data_finished_cb),
+ cache);
+ g_signal_handlers_disconnect_by_func (data->job,
+ G_CALLBACK (job_page_data_cancelled_cb),
+ data);
+ }
+ ev_page_cache_data_free (data);
+ }
+
+ g_free (cache->page_list);
+ cache->page_list = NULL;
+ cache->n_pages = 0;
+ }
+
+ if (cache->document) {
+ g_object_unref (cache->document);
+ cache->document = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_page_cache_parent_class)->finalize (object);
+}
+
+static void
+ev_page_cache_init (EvPageCache *cache)
+{
+}
+
+static void
+ev_page_cache_class_init (EvPageCacheClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+
+ g_object_class->finalize = ev_page_cache_finalize;
+}
+
+static EvJobPageDataFlags
+ev_page_cache_get_flags_for_data (EvPageCache *cache,
+ EvPageCacheData *data)
+{
+ EvJobPageDataFlags flags = EV_PAGE_DATA_INCLUDE_NONE;
+
+ if (data->flags == cache->flags && !data->dirty)
+ return cache->flags;
+
+ /* Flags changed or data is dirty */
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_LINKS) {
+ flags = (data->link_mapping) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_LINKS :
+ flags | EV_PAGE_DATA_INCLUDE_LINKS;
+ }
+
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_IMAGES) {
+ flags = (data->image_mapping) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_IMAGES :
+ flags | EV_PAGE_DATA_INCLUDE_IMAGES;
+ }
+
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_FORMS) {
+ flags = (data->form_field_mapping) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_FORMS :
+ flags | EV_PAGE_DATA_INCLUDE_FORMS;
+ }
+
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_ANNOTS) {
+ flags = (data->annot_mapping) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_ANNOTS :
+ flags | EV_PAGE_DATA_INCLUDE_ANNOTS;
+ }
+
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_TEXT_MAPPING) {
+ flags = (data->text_mapping) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_TEXT_MAPPING :
+ flags | EV_PAGE_DATA_INCLUDE_TEXT_MAPPING;
+ }
+
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_TEXT) {
+ flags = (data->text) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_TEXT :
+ flags | EV_PAGE_DATA_INCLUDE_TEXT;
+ }
+
+ if (cache->flags & EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT) {
+ flags = (data->text_layout_length > 0) ?
+ flags & ~EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT :
+ flags | EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT;
+ }
+
+ return flags;
+}
+
+EvPageCache *
+ev_page_cache_new (EvDocument *document)
+{
+ EvPageCache *cache;
+
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+
+ cache = EV_PAGE_CACHE (g_object_new (EV_TYPE_PAGE_CACHE, NULL));
+ cache->document = g_object_ref (document);
+ cache->n_pages = ev_document_get_n_pages (document);
+ cache->flags = EV_PAGE_DATA_FLAGS_DEFAULT;
+ cache->page_list = g_new0 (EvPageCacheData, cache->n_pages);
+
+ return cache;
+}
+
+static void
+job_page_data_finished_cb (EvJob *job,
+ EvPageCache *cache)
+{
+ EvJobPageData *job_data = EV_JOB_PAGE_DATA (job);
+ EvPageCacheData *data;
+
+ data = &cache->page_list[job_data->page];
+
+ if (job_data->flags & EV_PAGE_DATA_INCLUDE_LINKS)
+ data->link_mapping = job_data->link_mapping;
+ if (job_data->flags & EV_PAGE_DATA_INCLUDE_IMAGES)
+ data->image_mapping = job_data->image_mapping;
+ if (job_data->flags & EV_PAGE_DATA_INCLUDE_FORMS)
+ data->form_field_mapping = job_data->form_field_mapping;
+ if (job_data->flags & EV_PAGE_DATA_INCLUDE_ANNOTS)
+ data->annot_mapping = job_data->annot_mapping;
+ if (job_data->flags & EV_PAGE_DATA_INCLUDE_TEXT_MAPPING)
+ data->text_mapping = job_data->text_mapping;
+ if (job_data->flags & EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT) {
+ data->text_layout = job_data->text_layout;
+ data->text_layout_length = job_data->text_layout_length;
+ }
+ if (job_data->flags & EV_PAGE_DATA_INCLUDE_TEXT)
+ data->text = job_data->text;
+ data->done = TRUE;
+ data->dirty = FALSE;
+
+ g_object_unref (data->job);
+ data->job = NULL;
+}
+
+static void
+job_page_data_cancelled_cb (EvJob *job,
+ EvPageCacheData *data)
+{
+ g_object_unref (data->job);
+ data->job = NULL;
+}
+
+void
+ev_page_cache_set_page_range (EvPageCache *cache,
+ gint start,
+ gint end)
+{
+ gint i;
+
+ if (cache->flags == EV_PAGE_DATA_INCLUDE_NONE)
+ return;
+
+ cache->start_page = start;
+ cache->end_page = end;
+
+ for (i = start; i <= end; i++) {
+ EvPageCacheData *data = &cache->page_list[i];
+ EvJobPageDataFlags flags;
+
+ if (data->flags == cache->flags && !data->dirty && (data->done || data->job))
+ continue;
+
+ if (data->job)
+ ev_job_cancel (data->job);
+
+ flags = ev_page_cache_get_flags_for_data (cache, data);
+
+ data->flags = cache->flags;
+ data->job = ev_job_page_data_new (cache->document, i, flags);
+ g_signal_connect (data->job, "finished",
+ G_CALLBACK (job_page_data_finished_cb),
+ cache);
+ g_signal_connect (data->job, "cancelled",
+ G_CALLBACK (job_page_data_cancelled_cb),
+ data);
+ ev_job_scheduler_push_job (data->job, EV_JOB_PRIORITY_NONE);
+ }
+}
+
+EvJobPageDataFlags
+ev_page_cache_get_flags (EvPageCache *cache)
+{
+ return cache->flags;
+}
+
+void
+ev_page_cache_set_flags (EvPageCache *cache,
+ EvJobPageDataFlags flags)
+{
+ if (cache->flags == flags)
+ return;
+
+ cache->flags = flags;
+
+ /* Update the current range for new flags */
+ ev_page_cache_set_page_range (cache, cache->start_page, cache->end_page);
+}
+
+void
+ev_page_cache_mark_dirty (EvPageCache *cache,
+ gint page)
+{
+ EvPageCacheData *data;
+
+ g_return_if_fail (EV_IS_PAGE_CACHE (cache));
+
+ data = &cache->page_list[page];
+ data->dirty = TRUE;
+
+ /* Update the current range */
+ ev_page_cache_set_page_range (cache, cache->start_page, cache->end_page);
+}
+
+EvMappingList *
+ev_page_cache_get_link_mapping (EvPageCache *cache,
+ gint page)
+{
+ EvPageCacheData *data;
+
+ g_return_val_if_fail (EV_IS_PAGE_CACHE (cache), NULL);
+ g_return_val_if_fail (page >= 0 && page < cache->n_pages, NULL);
+
+ if (!(cache->flags & EV_PAGE_DATA_INCLUDE_LINKS))
+ return NULL;
+
+ data = &cache->page_list[page];
+ if (data->done)
+ return data->link_mapping;
+
+ if (data->job)
+ return EV_JOB_PAGE_DATA (data->job)->link_mapping;
+
+ return data->link_mapping;
+}
+
+EvMappingList *
+ev_page_cache_get_image_mapping (EvPageCache *cache,
+ gint page)
+{
+ EvPageCacheData *data;
+
+ g_return_val_if_fail (EV_IS_PAGE_CACHE (cache), NULL);
+ g_return_val_if_fail (page >= 0 && page < cache->n_pages, NULL);
+
+ if (!(cache->flags & EV_PAGE_DATA_INCLUDE_IMAGES))
+ return NULL;
+
+ data = &cache->page_list[page];
+ if (data->done)
+ return data->image_mapping;
+
+ if (data->job)
+ return EV_JOB_PAGE_DATA (data->job)->image_mapping;
+
+ return data->image_mapping;
+}
+
+EvMappingList *
+ev_page_cache_get_form_field_mapping (EvPageCache *cache,
+ gint page)
+{
+ EvPageCacheData *data;
+
+ g_return_val_if_fail (EV_IS_PAGE_CACHE (cache), NULL);
+ g_return_val_if_fail (page >= 0 && page < cache->n_pages, NULL);
+
+ if (!(cache->flags & EV_PAGE_DATA_INCLUDE_FORMS))
+ return NULL;
+
+ data = &cache->page_list[page];
+ if (data->done)
+ return data->form_field_mapping;
+
+ if (data->job)
+ return EV_JOB_PAGE_DATA (data->job)->form_field_mapping;
+
+ return data->form_field_mapping;
+}
+
+EvMappingList *
+ev_page_cache_get_annot_mapping (EvPageCache *cache,
+ gint page)
+{
+ EvPageCacheData *data;
+
+ g_return_val_if_fail (EV_IS_PAGE_CACHE (cache), NULL);
+ g_return_val_if_fail (page >= 0 && page < cache->n_pages, NULL);
+
+ if (!(cache->flags & EV_PAGE_DATA_INCLUDE_ANNOTS))
+ return NULL;
+
+ data = &cache->page_list[page];
+ if (data->done)
+ return data->annot_mapping;
+
+ if (data->job)
+ return EV_JOB_PAGE_DATA (data->job)->annot_mapping;
+
+ return data->annot_mapping;
+}
+
+cairo_region_t *
+ev_page_cache_get_text_mapping (EvPageCache *cache,
+ gint page)
+{
+ EvPageCacheData *data;
+
+ g_return_val_if_fail (EV_IS_PAGE_CACHE (cache), NULL);
+ g_return_val_if_fail (page >= 0 && page < cache->n_pages, NULL);
+
+ if (!(cache->flags & EV_PAGE_DATA_INCLUDE_TEXT_MAPPING))
+ return NULL;
+
+ data = &cache->page_list[page];
+ if (data->done)
+ return data->text_mapping;
+
+ if (data->job)
+ return EV_JOB_PAGE_DATA (data->job)->text_mapping;
+
+ return data->text_mapping;
+}
+
+const gchar *
+ev_page_cache_get_text (EvPageCache *cache,
+ gint page)
+{
+ EvPageCacheData *data;
+
+ g_return_val_if_fail (EV_IS_PAGE_CACHE (cache), NULL);
+ g_return_val_if_fail (page >= 0 && page < cache->n_pages, NULL);
+
+ if (!(cache->flags & EV_PAGE_DATA_INCLUDE_TEXT))
+ return NULL;
+
+ data = &cache->page_list[page];
+ if (data->done)
+ return data->text;
+
+ if (data->job)
+ return EV_JOB_PAGE_DATA (data->job)->text;
+
+ return data->text;
+}
+
+gboolean
+ev_page_cache_get_text_layout (EvPageCache *cache,
+ gint page,
+ EvRectangle **areas,
+ guint *n_areas)
+{
+ EvPageCacheData *data;
+
+ g_return_val_if_fail (EV_IS_PAGE_CACHE (cache), FALSE);
+ g_return_val_if_fail (page >= 0 && page < cache->n_pages, FALSE);
+
+ if (!(cache->flags & EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT))
+ return FALSE;
+
+ data = &cache->page_list[page];
+ if (data->done) {
+ *areas = data->text_layout;
+ *n_areas = data->text_layout_length;
+
+ return TRUE;
+ }
+
+ if (data->job) {
+ *areas = EV_JOB_PAGE_DATA (data->job)->text_layout;
+ *n_areas = EV_JOB_PAGE_DATA (data->job)->text_layout_length;
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
diff --git a/libview/ev-page-cache.h b/libview/ev-page-cache.h
new file mode 100644
index 00000000..7432e44d
--- /dev/null
+++ b/libview/ev-page-cache.h
@@ -0,0 +1,71 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-view.h> can be included directly."
+#endif
+
+#ifndef EV_PAGE_CACHE_H
+#define EV_PAGE_CACHE_H
+
+#include <glib-object.h>
+#include <gdk/gdk.h>
+#include <evince-document.h>
+#include <evince-view.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_PAGE_CACHE (ev_page_cache_get_type ())
+#define EV_PAGE_CACHE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_PAGE_CACHE, EvPageCache))
+#define EV_IS_PAGE_CACHE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_PAGE_CACHE))
+
+typedef struct _EvPageCache EvPageCache;
+typedef struct _EvPageCacheClass EvPageCacheClass;
+
+GType ev_page_cache_get_type (void) G_GNUC_CONST;
+EvPageCache *ev_page_cache_new (EvDocument *document);
+
+void ev_page_cache_set_page_range (EvPageCache *cache,
+ gint start,
+ gint end);
+EvJobPageDataFlags ev_page_cache_get_flags (EvPageCache *cache);
+void ev_page_cache_set_flags (EvPageCache *cache,
+ EvJobPageDataFlags flags);
+void ev_page_cache_mark_dirty (EvPageCache *cache,
+ gint page);
+EvMappingList *ev_page_cache_get_link_mapping (EvPageCache *cache,
+ gint page);
+EvMappingList *ev_page_cache_get_image_mapping (EvPageCache *cache,
+ gint page);
+EvMappingList *ev_page_cache_get_form_field_mapping (EvPageCache *cache,
+ gint page);
+EvMappingList *ev_page_cache_get_annot_mapping (EvPageCache *cache,
+ gint page);
+cairo_region_t *ev_page_cache_get_text_mapping (EvPageCache *cache,
+ gint page);
+const gchar *ev_page_cache_get_text (EvPageCache *cache,
+ gint page);
+gboolean ev_page_cache_get_text_layout (EvPageCache *cache,
+ gint page,
+ EvRectangle **areas,
+ guint *n_areas);
+
+G_END_DECLS
+
+#endif /* EV_PAGE_CACHE_H */
diff --git a/libview/ev-pixbuf-cache.c b/libview/ev-pixbuf-cache.c
new file mode 100644
index 00000000..367f70d7
--- /dev/null
+++ b/libview/ev-pixbuf-cache.c
@@ -0,0 +1,1192 @@
+#include <config.h>
+#include "ev-pixbuf-cache.h"
+#include "ev-job-scheduler.h"
+#include "ev-view-private.h"
+
+typedef struct _CacheJobInfo
+{
+ EvJob *job;
+ gboolean page_ready;
+
+ /* Region of the page that needs to be drawn */
+ cairo_region_t *region;
+
+ /* Data we get from rendering */
+ cairo_surface_t *surface;
+
+ /* Selection data.
+ * Selection_points are the coordinates encapsulated in selection.
+ * target_points is the target selection size. */
+ EvRectangle selection_points;
+ EvRectangle target_points;
+ EvSelectionStyle selection_style;
+ gboolean points_set;
+
+ cairo_surface_t *selection;
+ cairo_region_t *selection_region;
+} CacheJobInfo;
+
+struct _EvPixbufCache
+{
+ GObject parent;
+
+ /* We keep a link to our containing view just for style information. */
+ GtkWidget *view;
+ EvDocument *document;
+ EvDocumentModel *model;
+ int start_page;
+ int end_page;
+ gboolean inverted_colors;
+
+ gsize max_size;
+
+ /* preload_cache_size is the number of pages prior to the current
+ * visible area that we cache. It's normally 1, but could be 2 in the
+ * case of twin pages.
+ */
+ int preload_cache_size;
+ guint job_list_len;
+
+ CacheJobInfo *prev_job;
+ CacheJobInfo *job_list;
+ CacheJobInfo *next_job;
+};
+
+struct _EvPixbufCacheClass
+{
+ GObjectClass parent_class;
+
+ void (* job_finished) (EvPixbufCache *pixbuf_cache);
+};
+
+
+enum
+{
+ JOB_FINISHED,
+ N_SIGNALS,
+};
+
+static guint signals[N_SIGNALS] = {0, };
+
+static void ev_pixbuf_cache_init (EvPixbufCache *pixbuf_cache);
+static void ev_pixbuf_cache_class_init (EvPixbufCacheClass *pixbuf_cache);
+static void ev_pixbuf_cache_finalize (GObject *object);
+static void ev_pixbuf_cache_dispose (GObject *object);
+static void job_finished_cb (EvJob *job,
+ EvPixbufCache *pixbuf_cache);
+static CacheJobInfo *find_job_cache (EvPixbufCache *pixbuf_cache,
+ int page);
+static gboolean new_selection_surface_needed(EvPixbufCache *pixbuf_cache,
+ CacheJobInfo *job_info,
+ gint page,
+ gfloat scale);
+
+
+/* These are used for iterating through the prev and next arrays */
+#define FIRST_VISIBLE_PREV(pixbuf_cache) \
+ (MAX (0, pixbuf_cache->preload_cache_size - pixbuf_cache->start_page))
+#define VISIBLE_NEXT_LEN(pixbuf_cache) \
+ (MIN(pixbuf_cache->preload_cache_size, ev_document_get_n_pages (pixbuf_cache->document) - (1 + pixbuf_cache->end_page)))
+#define PAGE_CACHE_LEN(pixbuf_cache) \
+ ((pixbuf_cache->end_page - pixbuf_cache->start_page) + 1)
+
+#define MAX_PRELOADED_PAGES 3
+
+G_DEFINE_TYPE (EvPixbufCache, ev_pixbuf_cache, G_TYPE_OBJECT)
+
+static void
+ev_pixbuf_cache_init (EvPixbufCache *pixbuf_cache)
+{
+ pixbuf_cache->start_page = -1;
+ pixbuf_cache->end_page = -1;
+}
+
+static void
+ev_pixbuf_cache_class_init (EvPixbufCacheClass *class)
+{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (class);
+
+ object_class->finalize = ev_pixbuf_cache_finalize;
+ object_class->dispose = ev_pixbuf_cache_dispose;
+
+ signals[JOB_FINISHED] =
+ g_signal_new ("job-finished",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvPixbufCacheClass, job_finished),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
+}
+
+static void
+ev_pixbuf_cache_finalize (GObject *object)
+{
+ EvPixbufCache *pixbuf_cache;
+
+ pixbuf_cache = EV_PIXBUF_CACHE (object);
+
+ if (pixbuf_cache->job_list) {
+ g_slice_free1 (sizeof (CacheJobInfo) * pixbuf_cache->job_list_len,
+ pixbuf_cache->job_list);
+ pixbuf_cache->job_list = NULL;
+ }
+ if (pixbuf_cache->prev_job) {
+ g_slice_free1 (sizeof (CacheJobInfo) * pixbuf_cache->preload_cache_size,
+ pixbuf_cache->prev_job);
+ pixbuf_cache->prev_job = NULL;
+ }
+ if (pixbuf_cache->next_job) {
+ g_slice_free1 (sizeof (CacheJobInfo) * pixbuf_cache->preload_cache_size,
+ pixbuf_cache->next_job);
+ pixbuf_cache->next_job = NULL;
+ }
+
+ g_object_unref (pixbuf_cache->model);
+
+ G_OBJECT_CLASS (ev_pixbuf_cache_parent_class)->finalize (object);
+}
+
+static void
+dispose_cache_job_info (CacheJobInfo *job_info,
+ gpointer data)
+{
+ if (job_info == NULL)
+ return;
+
+ if (job_info->job) {
+ g_signal_handlers_disconnect_by_func (job_info->job,
+ G_CALLBACK (job_finished_cb),
+ data);
+ ev_job_cancel (job_info->job);
+ g_object_unref (job_info->job);
+ job_info->job = NULL;
+ }
+ if (job_info->surface) {
+ cairo_surface_destroy (job_info->surface);
+ job_info->surface = NULL;
+ }
+ if (job_info->region) {
+ cairo_region_destroy (job_info->region);
+ job_info->region = NULL;
+ }
+ if (job_info->selection) {
+ cairo_surface_destroy (job_info->selection);
+ job_info->selection = NULL;
+ }
+ if (job_info->selection_region) {
+ cairo_region_destroy (job_info->selection_region);
+ job_info->selection_region = NULL;
+ }
+
+ job_info->points_set = FALSE;
+}
+
+static void
+ev_pixbuf_cache_dispose (GObject *object)
+{
+ EvPixbufCache *pixbuf_cache;
+ int i;
+
+ pixbuf_cache = EV_PIXBUF_CACHE (object);
+
+ for (i = 0; i < pixbuf_cache->preload_cache_size; i++) {
+ dispose_cache_job_info (pixbuf_cache->prev_job + i, pixbuf_cache);
+ dispose_cache_job_info (pixbuf_cache->next_job + i, pixbuf_cache);
+ }
+
+ for (i = 0; i < PAGE_CACHE_LEN (pixbuf_cache); i++) {
+ dispose_cache_job_info (pixbuf_cache->job_list + i, pixbuf_cache);
+ }
+
+ G_OBJECT_CLASS (ev_pixbuf_cache_parent_class)->dispose (object);
+}
+
+
+EvPixbufCache *
+ev_pixbuf_cache_new (GtkWidget *view,
+ EvDocumentModel *model,
+ gsize max_size)
+{
+ EvPixbufCache *pixbuf_cache;
+
+ pixbuf_cache = (EvPixbufCache *) g_object_new (EV_TYPE_PIXBUF_CACHE, NULL);
+ /* This is a backlink, so we don't ref this */
+ pixbuf_cache->view = view;
+ pixbuf_cache->model = g_object_ref (model);
+ pixbuf_cache->document = ev_document_model_get_document (model);
+ pixbuf_cache->max_size = max_size;
+
+ return pixbuf_cache;
+}
+
+void
+ev_pixbuf_cache_set_max_size (EvPixbufCache *pixbuf_cache,
+ gsize max_size)
+{
+ if (pixbuf_cache->max_size == max_size)
+ return;
+
+ if (pixbuf_cache->max_size > max_size)
+ ev_pixbuf_cache_clear (pixbuf_cache);
+ pixbuf_cache->max_size = max_size;
+}
+
+static void
+copy_job_to_job_info (EvJobRender *job_render,
+ CacheJobInfo *job_info,
+ EvPixbufCache *pixbuf_cache)
+{
+ if (job_info->surface) {
+ cairo_surface_destroy (job_info->surface);
+ }
+ job_info->surface = cairo_surface_reference (job_render->surface);
+ if (pixbuf_cache->inverted_colors) {
+ ev_document_misc_invert_surface (job_info->surface);
+ }
+
+ job_info->points_set = FALSE;
+ if (job_render->include_selection) {
+ if (job_info->selection) {
+ cairo_surface_destroy (job_info->selection);
+ job_info->selection = NULL;
+ }
+ if (job_info->selection_region) {
+ cairo_region_destroy (job_info->selection_region);
+ job_info->selection_region = NULL;
+ }
+
+ job_info->selection_points = job_render->selection_points;
+ job_info->selection_region = cairo_region_reference (job_render->selection_region);
+ job_info->selection = cairo_surface_reference (job_render->selection);
+ g_assert (job_info->selection_points.x1 >= 0);
+ job_info->points_set = TRUE;
+ }
+
+ if (job_info->job) {
+ g_signal_handlers_disconnect_by_func (job_info->job,
+ G_CALLBACK (job_finished_cb),
+ pixbuf_cache);
+ ev_job_cancel (job_info->job);
+ g_object_unref (job_info->job);
+ job_info->job = NULL;
+ }
+
+ job_info->page_ready = TRUE;
+}
+
+static void
+job_finished_cb (EvJob *job,
+ EvPixbufCache *pixbuf_cache)
+{
+ CacheJobInfo *job_info;
+ EvJobRender *job_render = EV_JOB_RENDER (job);
+
+ /* If the job is outside of our interest, we silently discard it */
+ if ((job_render->page < (pixbuf_cache->start_page - pixbuf_cache->preload_cache_size)) ||
+ (job_render->page > (pixbuf_cache->end_page + pixbuf_cache->preload_cache_size))) {
+ g_object_unref (job);
+ return;
+ }
+
+ job_info = find_job_cache (pixbuf_cache, job_render->page);
+
+ copy_job_to_job_info (job_render, job_info, pixbuf_cache);
+ g_signal_emit (pixbuf_cache, signals[JOB_FINISHED], 0, job_info->region);
+}
+
+/* This checks a job to see if the job would generate the right sized pixbuf
+ * given a scale. If it won't, it removes the job and clears it to NULL.
+ */
+static void
+check_job_size_and_unref (EvPixbufCache *pixbuf_cache,
+ CacheJobInfo *job_info,
+ gfloat scale)
+{
+ gint width, height;
+
+ g_assert (job_info);
+
+ if (job_info->job == NULL)
+ return;
+
+ _get_page_size_for_scale_and_rotation (job_info->job->document,
+ EV_JOB_RENDER (job_info->job)->page,
+ scale,
+ EV_JOB_RENDER (job_info->job)->rotation,
+ &width, &height);
+ if (width == EV_JOB_RENDER (job_info->job)->target_width &&
+ height == EV_JOB_RENDER (job_info->job)->target_height)
+ return;
+
+ g_signal_handlers_disconnect_by_func (job_info->job,
+ G_CALLBACK (job_finished_cb),
+ pixbuf_cache);
+ ev_job_cancel (job_info->job);
+ g_object_unref (job_info->job);
+ job_info->job = NULL;
+}
+
+/* Do all function that copies a job from an older cache to it's position in the
+ * new cache. It clears the old job if it doesn't have a place.
+ */
+static void
+move_one_job (CacheJobInfo *job_info,
+ EvPixbufCache *pixbuf_cache,
+ int page,
+ CacheJobInfo *new_job_list,
+ CacheJobInfo *new_prev_job,
+ CacheJobInfo *new_next_job,
+ int new_preload_cache_size,
+ int start_page,
+ int end_page,
+ gint priority)
+{
+ CacheJobInfo *target_page = NULL;
+ int page_offset;
+ gint new_priority;
+
+ if (page < (start_page - new_preload_cache_size) ||
+ page > (end_page + new_preload_cache_size)) {
+ dispose_cache_job_info (job_info, pixbuf_cache);
+ return;
+ }
+
+ /* find the target page to copy it over to. */
+ if (page < start_page) {
+ page_offset = (page - (start_page - new_preload_cache_size));
+
+ g_assert (page_offset >= 0 &&
+ page_offset < new_preload_cache_size);
+ target_page = new_prev_job + page_offset;
+ new_priority = EV_JOB_PRIORITY_LOW;
+ } else if (page > end_page) {
+ page_offset = (page - (end_page + 1));
+
+ g_assert (page_offset >= 0 &&
+ page_offset < new_preload_cache_size);
+ target_page = new_next_job + page_offset;
+ new_priority = EV_JOB_PRIORITY_LOW;
+ } else {
+ page_offset = page - start_page;
+ g_assert (page_offset >= 0 &&
+ page_offset <= ((end_page - start_page) + 1));
+ new_priority = EV_JOB_PRIORITY_URGENT;
+ target_page = new_job_list + page_offset;
+ }
+
+ *target_page = *job_info;
+ job_info->job = NULL;
+ job_info->region = NULL;
+ job_info->surface = NULL;
+
+ if (new_priority != priority && target_page->job) {
+ ev_job_scheduler_update_job (target_page->job, new_priority);
+ }
+}
+
+static gsize
+ev_pixbuf_cache_get_page_size (EvPixbufCache *pixbuf_cache,
+ gint page_index,
+ gdouble scale,
+ gint rotation)
+{
+ gint width, height;
+
+ _get_page_size_for_scale_and_rotation (pixbuf_cache->document,
+ page_index, scale, rotation,
+ &width, &height);
+ return height * cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, width);
+}
+
+static gint
+ev_pixbuf_cache_get_preload_size (EvPixbufCache *pixbuf_cache,
+ gint start_page,
+ gint end_page,
+ gdouble scale,
+ gint rotation)
+{
+ gsize range_size = 0;
+ gint new_preload_cache_size = 0;
+ gint i;
+ guint n_pages = ev_document_get_n_pages (pixbuf_cache->document);
+
+ /* Get the size of the current range */
+ for (i = start_page; i <= end_page; i++) {
+ range_size += ev_pixbuf_cache_get_page_size (pixbuf_cache, i, scale, rotation);
+ }
+
+ if (range_size >= pixbuf_cache->max_size)
+ return new_preload_cache_size;
+
+ i = 1;
+ while (((start_page - i > 0) || (end_page + i < n_pages)) &&
+ new_preload_cache_size < MAX_PRELOADED_PAGES) {
+ gsize page_size;
+ gboolean updated = FALSE;
+
+ if (end_page + i < n_pages) {
+ page_size = ev_pixbuf_cache_get_page_size (pixbuf_cache, end_page + i,
+ scale, rotation);
+ if (page_size + range_size <= pixbuf_cache->max_size) {
+ range_size += page_size;
+ new_preload_cache_size++;
+ updated = TRUE;
+ } else {
+ break;
+ }
+ }
+
+ if (start_page - i > 0) {
+ page_size = ev_pixbuf_cache_get_page_size (pixbuf_cache, start_page - i,
+ scale, rotation);
+ if (page_size + range_size <= pixbuf_cache->max_size) {
+ range_size += page_size;
+ if (!updated)
+ new_preload_cache_size++;
+ } else {
+ break;
+ }
+ }
+ i++;
+ }
+
+ return new_preload_cache_size;
+}
+
+static void
+ev_pixbuf_cache_update_range (EvPixbufCache *pixbuf_cache,
+ gint start_page,
+ gint end_page,
+ guint rotation,
+ gdouble scale)
+{
+ CacheJobInfo *new_job_list;
+ CacheJobInfo *new_prev_job = NULL;
+ CacheJobInfo *new_next_job = NULL;
+ gint new_preload_cache_size;
+ guint new_job_list_len;
+ int i, page;
+
+ new_preload_cache_size = ev_pixbuf_cache_get_preload_size (pixbuf_cache,
+ start_page,
+ end_page,
+ scale,
+ rotation);
+ if (pixbuf_cache->start_page == start_page &&
+ pixbuf_cache->end_page == end_page &&
+ pixbuf_cache->preload_cache_size == new_preload_cache_size)
+ return;
+
+ new_job_list_len = (end_page - start_page) + 1;
+ new_job_list = g_slice_alloc0 (sizeof (CacheJobInfo) * new_job_list_len);
+ if (new_preload_cache_size > 0) {
+ new_prev_job = g_slice_alloc0 (sizeof (CacheJobInfo) * new_preload_cache_size);
+ new_next_job = g_slice_alloc0 (sizeof (CacheJobInfo) * new_preload_cache_size);
+ }
+
+ /* We go through each job in the old cache and either clear it or move
+ * it to a new location. */
+
+ /* Start with the prev cache. */
+ page = pixbuf_cache->start_page - pixbuf_cache->preload_cache_size;
+ for (i = 0; i < pixbuf_cache->preload_cache_size; i++) {
+ if (page < 0) {
+ dispose_cache_job_info (pixbuf_cache->prev_job + i, pixbuf_cache);
+ } else {
+ move_one_job (pixbuf_cache->prev_job + i,
+ pixbuf_cache, page,
+ new_job_list, new_prev_job, new_next_job,
+ new_preload_cache_size,
+ start_page, end_page, EV_JOB_PRIORITY_LOW);
+ }
+ page ++;
+ }
+
+ page = pixbuf_cache->start_page;
+ for (i = 0; i < PAGE_CACHE_LEN (pixbuf_cache) && page >= 0; i++) {
+ move_one_job (pixbuf_cache->job_list + i,
+ pixbuf_cache, page,
+ new_job_list, new_prev_job, new_next_job,
+ new_preload_cache_size,
+ start_page, end_page, EV_JOB_PRIORITY_URGENT);
+ page ++;
+ }
+
+ for (i = 0; i < pixbuf_cache->preload_cache_size; i++) {
+ if (page >= ev_document_get_n_pages (pixbuf_cache->document)) {
+ dispose_cache_job_info (pixbuf_cache->next_job + i, pixbuf_cache);
+ } else {
+ move_one_job (pixbuf_cache->next_job + i,
+ pixbuf_cache, page,
+ new_job_list, new_prev_job, new_next_job,
+ new_preload_cache_size,
+ start_page, end_page, EV_JOB_PRIORITY_LOW);
+ }
+ page ++;
+ }
+
+ if (pixbuf_cache->job_list) {
+ g_slice_free1 (sizeof (CacheJobInfo) * pixbuf_cache->job_list_len,
+ pixbuf_cache->job_list);
+ }
+ if (pixbuf_cache->prev_job) {
+ g_slice_free1 (sizeof (CacheJobInfo) * pixbuf_cache->preload_cache_size,
+ pixbuf_cache->prev_job);
+ }
+ if (pixbuf_cache->next_job) {
+ g_slice_free1 (sizeof (CacheJobInfo) * pixbuf_cache->preload_cache_size,
+ pixbuf_cache->next_job);
+ }
+
+ pixbuf_cache->preload_cache_size = new_preload_cache_size;
+ pixbuf_cache->job_list_len = new_job_list_len;
+
+ pixbuf_cache->job_list = new_job_list;
+ pixbuf_cache->prev_job = new_prev_job;
+ pixbuf_cache->next_job = new_next_job;
+
+ pixbuf_cache->start_page = start_page;
+ pixbuf_cache->end_page = end_page;
+}
+
+static CacheJobInfo *
+find_job_cache (EvPixbufCache *pixbuf_cache,
+ int page)
+{
+ int page_offset;
+
+ if (page < (pixbuf_cache->start_page - pixbuf_cache->preload_cache_size) ||
+ page > (pixbuf_cache->end_page + pixbuf_cache->preload_cache_size))
+ return NULL;
+
+ if (page < pixbuf_cache->start_page) {
+ page_offset = (page - (pixbuf_cache->start_page - pixbuf_cache->preload_cache_size));
+
+ g_assert (page_offset >= 0 &&
+ page_offset < pixbuf_cache->preload_cache_size);
+ return pixbuf_cache->prev_job + page_offset;
+ }
+
+ if (page > pixbuf_cache->end_page) {
+ page_offset = (page - (pixbuf_cache->end_page + 1));
+
+ g_assert (page_offset >= 0 &&
+ page_offset < pixbuf_cache->preload_cache_size);
+ return pixbuf_cache->next_job + page_offset;
+ }
+
+ page_offset = page - pixbuf_cache->start_page;
+ g_assert (page_offset >= 0 &&
+ page_offset <= PAGE_CACHE_LEN(pixbuf_cache));
+ return pixbuf_cache->job_list + page_offset;
+}
+
+static void
+ev_pixbuf_cache_clear_job_sizes (EvPixbufCache *pixbuf_cache,
+ gfloat scale)
+{
+ int i;
+
+ for (i = 0; i < PAGE_CACHE_LEN (pixbuf_cache); i++) {
+ check_job_size_and_unref (pixbuf_cache, pixbuf_cache->job_list + i, scale);
+ }
+
+ for (i = 0; i < pixbuf_cache->preload_cache_size; i++) {
+ check_job_size_and_unref (pixbuf_cache, pixbuf_cache->prev_job + i, scale);
+ check_job_size_and_unref (pixbuf_cache, pixbuf_cache->next_job + i, scale);
+ }
+}
+
+static void
+get_selection_colors (GtkWidget *widget, GdkColor **text, GdkColor **base)
+{
+ GtkStyle *style = gtk_widget_get_style (widget);
+
+ if (gtk_widget_has_focus (widget)) {
+ *text = &style->text [GTK_STATE_SELECTED];
+ *base = &style->base [GTK_STATE_SELECTED];
+ } else {
+ *text = &style->text [GTK_STATE_ACTIVE];
+ *base = &style->base [GTK_STATE_ACTIVE];
+ }
+}
+
+static void
+add_job (EvPixbufCache *pixbuf_cache,
+ CacheJobInfo *job_info,
+ cairo_region_t *region,
+ gint width,
+ gint height,
+ gint page,
+ gint rotation,
+ gfloat scale,
+ EvJobPriority priority)
+{
+ job_info->page_ready = FALSE;
+
+ if (job_info->region)
+ cairo_region_destroy (job_info->region);
+ job_info->region = region ? cairo_region_reference (region) : NULL;
+
+ job_info->job = ev_job_render_new (pixbuf_cache->document,
+ page, rotation, scale,
+ width, height);
+
+ if (new_selection_surface_needed (pixbuf_cache, job_info, page, scale)) {
+ GdkColor *text, *base;
+
+ gtk_widget_ensure_style (pixbuf_cache->view);
+ get_selection_colors (pixbuf_cache->view, &text, &base);
+ ev_job_render_set_selection_info (EV_JOB_RENDER (job_info->job),
+ &(job_info->target_points),
+ job_info->selection_style,
+ text, base);
+ }
+
+ g_signal_connect (job_info->job, "finished",
+ G_CALLBACK (job_finished_cb),
+ pixbuf_cache);
+ ev_job_scheduler_push_job (job_info->job, priority);
+}
+
+static void
+add_job_if_needed (EvPixbufCache *pixbuf_cache,
+ CacheJobInfo *job_info,
+ gint page,
+ gint rotation,
+ gfloat scale,
+ EvJobPriority priority)
+{
+ gint width, height;
+
+ if (job_info->job)
+ return;
+
+ _get_page_size_for_scale_and_rotation (pixbuf_cache->document,
+ page, scale, rotation,
+ &width, &height);
+
+ if (job_info->surface &&
+ cairo_image_surface_get_width (job_info->surface) == width &&
+ cairo_image_surface_get_height (job_info->surface) == height)
+ return;
+
+ /* Free old surfaces for non visible pages */
+ if (priority == EV_JOB_PRIORITY_LOW) {
+ if (job_info->surface) {
+ cairo_surface_destroy (job_info->surface);
+ job_info->surface = NULL;
+ }
+
+ if (job_info->selection) {
+ cairo_surface_destroy (job_info->selection);
+ job_info->selection = NULL;
+ }
+ }
+
+ add_job (pixbuf_cache, job_info, NULL,
+ width, height, page, rotation, scale,
+ priority);
+}
+
+static void
+ev_pixbuf_cache_add_jobs_if_needed (EvPixbufCache *pixbuf_cache,
+ gint rotation,
+ gfloat scale)
+{
+ CacheJobInfo *job_info;
+ int page;
+ int i;
+
+ for (i = 0; i < PAGE_CACHE_LEN (pixbuf_cache); i++) {
+ job_info = (pixbuf_cache->job_list + i);
+ page = pixbuf_cache->start_page + i;
+
+ add_job_if_needed (pixbuf_cache, job_info,
+ page, rotation, scale,
+ EV_JOB_PRIORITY_URGENT);
+ }
+
+ for (i = FIRST_VISIBLE_PREV(pixbuf_cache); i < pixbuf_cache->preload_cache_size; i++) {
+ job_info = (pixbuf_cache->prev_job + i);
+ page = pixbuf_cache->start_page - pixbuf_cache->preload_cache_size + i;
+
+ add_job_if_needed (pixbuf_cache, job_info,
+ page, rotation, scale,
+ EV_JOB_PRIORITY_LOW);
+ }
+
+ for (i = 0; i < VISIBLE_NEXT_LEN(pixbuf_cache); i++) {
+ job_info = (pixbuf_cache->next_job + i);
+ page = pixbuf_cache->end_page + 1 + i;
+
+ add_job_if_needed (pixbuf_cache, job_info,
+ page, rotation, scale,
+ EV_JOB_PRIORITY_LOW);
+ }
+
+}
+
+void
+ev_pixbuf_cache_set_page_range (EvPixbufCache *pixbuf_cache,
+ gint start_page,
+ gint end_page,
+ GList *selection_list)
+{
+ gdouble scale = ev_document_model_get_scale (pixbuf_cache->model);
+ gint rotation = ev_document_model_get_rotation (pixbuf_cache->model);
+
+ g_return_if_fail (EV_IS_PIXBUF_CACHE (pixbuf_cache));
+
+ g_return_if_fail (start_page >= 0 && start_page < ev_document_get_n_pages (pixbuf_cache->document));
+ g_return_if_fail (end_page >= 0 && end_page < ev_document_get_n_pages (pixbuf_cache->document));
+ g_return_if_fail (end_page >= start_page);
+
+ /* First, resize the page_range as needed. We cull old pages
+ * mercilessly. */
+ ev_pixbuf_cache_update_range (pixbuf_cache, start_page, end_page, rotation, scale);
+
+ /* Then, we update the current jobs to see if any of them are the wrong
+ * size, we remove them if we need to. */
+ ev_pixbuf_cache_clear_job_sizes (pixbuf_cache, scale);
+
+ /* Next, we update the target selection for our pages */
+ ev_pixbuf_cache_set_selection_list (pixbuf_cache, selection_list);
+
+ /* Finally, we add the new jobs for all the sizes that don't have a
+ * pixbuf */
+ ev_pixbuf_cache_add_jobs_if_needed (pixbuf_cache, rotation, scale);
+}
+
+void
+ev_pixbuf_cache_set_inverted_colors (EvPixbufCache *pixbuf_cache,
+ gboolean inverted_colors)
+{
+ gint i;
+
+ if (pixbuf_cache->inverted_colors == inverted_colors)
+ return;
+
+ pixbuf_cache->inverted_colors = inverted_colors;
+
+ for (i = 0; i < pixbuf_cache->preload_cache_size; i++) {
+ CacheJobInfo *job_info;
+
+ job_info = pixbuf_cache->prev_job + i;
+ if (job_info && job_info->surface)
+ ev_document_misc_invert_surface (job_info->surface);
+
+ job_info = pixbuf_cache->next_job + i;
+ if (job_info && job_info->surface)
+ ev_document_misc_invert_surface (job_info->surface);
+ }
+
+ for (i = 0; i < PAGE_CACHE_LEN (pixbuf_cache); i++) {
+ CacheJobInfo *job_info;
+
+ job_info = pixbuf_cache->job_list + i;
+ if (job_info && job_info->surface)
+ ev_document_misc_invert_surface (job_info->surface);
+ }
+}
+
+cairo_surface_t *
+ev_pixbuf_cache_get_surface (EvPixbufCache *pixbuf_cache,
+ gint page)
+{
+ CacheJobInfo *job_info;
+
+ job_info = find_job_cache (pixbuf_cache, page);
+ if (job_info == NULL)
+ return NULL;
+
+ if (job_info->page_ready)
+ return job_info->surface;
+
+ /* We don't need to wait for the idle to handle the callback */
+ if (job_info->job &&
+ EV_JOB_RENDER (job_info->job)->page_ready) {
+ copy_job_to_job_info (EV_JOB_RENDER (job_info->job), job_info, pixbuf_cache);
+ g_signal_emit (pixbuf_cache, signals[JOB_FINISHED], 0, job_info->region);
+ }
+
+ return job_info->surface;
+}
+
+static gboolean
+new_selection_surface_needed (EvPixbufCache *pixbuf_cache,
+ CacheJobInfo *job_info,
+ gint page,
+ gfloat scale)
+{
+ if (job_info->selection) {
+ gint width, height;
+ gint selection_width, selection_height;
+
+ _get_page_size_for_scale_and_rotation (pixbuf_cache->document,
+ page, scale, 0,
+ &width, &height);
+
+ selection_width = cairo_image_surface_get_width (job_info->selection);
+ selection_height = cairo_image_surface_get_height (job_info->selection);
+
+ if (width != selection_width || height != selection_height)
+ return TRUE;
+ } else {
+ if (job_info->points_set)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+clear_selection_if_needed (EvPixbufCache *pixbuf_cache,
+ CacheJobInfo *job_info,
+ gint page,
+ gfloat scale)
+{
+ if (new_selection_surface_needed (pixbuf_cache, job_info, page, scale)) {
+ if (job_info->selection)
+ cairo_surface_destroy (job_info->selection);
+ job_info->selection = NULL;
+ job_info->selection_points.x1 = -1;
+ }
+}
+
+/* Clears the cache of jobs and pixbufs.
+ */
+void
+ev_pixbuf_cache_clear (EvPixbufCache *pixbuf_cache)
+{
+ int i;
+
+ if (!pixbuf_cache->job_list)
+ return;
+
+ for (i = 0; i < pixbuf_cache->preload_cache_size; i++) {
+ dispose_cache_job_info (pixbuf_cache->prev_job + i, pixbuf_cache);
+ dispose_cache_job_info (pixbuf_cache->next_job + i, pixbuf_cache);
+ }
+
+ for (i = 0; i < PAGE_CACHE_LEN (pixbuf_cache); i++) {
+ dispose_cache_job_info (pixbuf_cache->job_list + i, pixbuf_cache);
+ }
+}
+
+
+void
+ev_pixbuf_cache_style_changed (EvPixbufCache *pixbuf_cache)
+{
+ gint i;
+
+ if (!pixbuf_cache->job_list)
+ return;
+
+ /* FIXME: doesn't update running jobs. */
+ for (i = 0; i < pixbuf_cache->preload_cache_size; i++) {
+ CacheJobInfo *job_info;
+
+ job_info = pixbuf_cache->prev_job + i;
+ if (job_info->selection) {
+ cairo_surface_destroy (job_info->selection);
+ job_info->selection = NULL;
+ }
+
+ job_info = pixbuf_cache->next_job + i;
+ if (job_info->selection) {
+ cairo_surface_destroy (job_info->selection);
+ job_info->selection = NULL;
+ }
+ }
+
+ for (i = 0; i < PAGE_CACHE_LEN (pixbuf_cache); i++) {
+ CacheJobInfo *job_info;
+
+ job_info = pixbuf_cache->job_list + i;
+ if (job_info->selection) {
+ cairo_surface_destroy (job_info->selection);
+ job_info->selection = NULL;
+ }
+ }
+}
+
+cairo_surface_t *
+ev_pixbuf_cache_get_selection_surface (EvPixbufCache *pixbuf_cache,
+ gint page,
+ gfloat scale,
+ cairo_region_t **region)
+{
+ CacheJobInfo *job_info;
+
+ /* the document does not implement the selection interface */
+ if (!EV_IS_SELECTION (pixbuf_cache->document))
+ return NULL;
+
+ job_info = find_job_cache (pixbuf_cache, page);
+ if (job_info == NULL)
+ return NULL;
+
+ /* No selection on this page */
+ if (!job_info->points_set)
+ return NULL;
+
+ /* If we have a running job, we just return what we have under the
+ * assumption that it'll be updated later and we can scale it as need
+ * be */
+ if (job_info->job && EV_JOB_RENDER (job_info->job)->include_selection)
+ return job_info->selection;
+
+ /* Now, lets see if we need to resize the image. If we do, we clear the
+ * old one. */
+ clear_selection_if_needed (pixbuf_cache, job_info, page, scale);
+
+ /* Finally, we see if the two scales are the same, and get a new pixbuf
+ * if needed. We do this synchronously for now. At some point, we
+ * _should_ be able to get rid of the doc_mutex, so the synchronicity
+ * doesn't kill us. Rendering a few glyphs should really be fast.
+ */
+ if (ev_rect_cmp (&(job_info->target_points), &(job_info->selection_points))) {
+ EvRectangle *old_points;
+ GdkColor *text, *base;
+ EvRenderContext *rc;
+ EvPage *ev_page;
+
+ /* we need to get a new selection pixbuf */
+ ev_document_doc_mutex_lock ();
+ if (job_info->selection_points.x1 < 0) {
+ g_assert (job_info->selection == NULL);
+ old_points = NULL;
+ } else {
+ g_assert (job_info->selection != NULL);
+ old_points = &(job_info->selection_points);
+ }
+
+ ev_page = ev_document_get_page (pixbuf_cache->document, page);
+ rc = ev_render_context_new (ev_page, 0, scale);
+ g_object_unref (ev_page);
+
+ if (job_info->selection_region)
+ cairo_region_destroy (job_info->selection_region);
+ job_info->selection_region =
+ ev_selection_get_selection_region (EV_SELECTION (pixbuf_cache->document),
+ rc, job_info->selection_style,
+ &(job_info->target_points));
+
+ gtk_widget_ensure_style (pixbuf_cache->view);
+
+ get_selection_colors (pixbuf_cache->view, &text, &base);
+
+ ev_selection_render_selection (EV_SELECTION (pixbuf_cache->document),
+ rc, &(job_info->selection),
+ &(job_info->target_points),
+ old_points,
+ job_info->selection_style,
+ text, base);
+ job_info->selection_points = job_info->target_points;
+ g_object_unref (rc);
+ ev_document_doc_mutex_unlock ();
+ }
+ if (region)
+ *region = job_info->selection_region;
+ return job_info->selection;
+}
+
+static void
+update_job_selection (CacheJobInfo *job_info,
+ EvViewSelection *selection)
+{
+ job_info->points_set = TRUE;
+ job_info->target_points = selection->rect;
+ job_info->selection_style = selection->style;
+}
+
+static void
+clear_job_selection (CacheJobInfo *job_info)
+{
+ job_info->points_set = FALSE;
+ job_info->selection_points.x1 = -1;
+
+ if (job_info->selection) {
+ cairo_surface_destroy (job_info->selection);
+ job_info->selection = NULL;
+ }
+}
+
+/* This function will reset the selection on pages that no longer have them, and
+ * will update the target_selection on those that need it. It will _not_ free
+ * the previous selection_list -- that's up to caller to do.
+ */
+void
+ev_pixbuf_cache_set_selection_list (EvPixbufCache *pixbuf_cache,
+ GList *selection_list)
+{
+ EvViewSelection *selection;
+ GList *list = selection_list;
+ int page;
+ int i;
+
+ g_return_if_fail (EV_IS_PIXBUF_CACHE (pixbuf_cache));
+
+ if (!EV_IS_SELECTION (pixbuf_cache->document))
+ return;
+
+ /* We check each area to see what needs updating, and what needs freeing; */
+ page = pixbuf_cache->start_page - pixbuf_cache->preload_cache_size;
+ for (i = 0; i < pixbuf_cache->preload_cache_size; i++) {
+ if (page < 0) {
+ page ++;
+ continue;
+ }
+
+ selection = NULL;
+ while (list) {
+ if (((EvViewSelection *)list->data)->page == page) {
+ selection = list->data;
+ break;
+ } else if (((EvViewSelection *)list->data)->page > page)
+ break;
+ list = list->next;
+ }
+
+ if (selection)
+ update_job_selection (pixbuf_cache->prev_job + i, selection);
+ else
+ clear_job_selection (pixbuf_cache->prev_job + i);
+ page ++;
+ }
+
+ page = pixbuf_cache->start_page;
+ for (i = 0; i < PAGE_CACHE_LEN (pixbuf_cache); i++) {
+ selection = NULL;
+ while (list) {
+ if (((EvViewSelection *)list->data)->page == page) {
+ selection = list->data;
+ break;
+ } else if (((EvViewSelection *)list->data)->page > page)
+ break;
+ list = list->next;
+ }
+
+ if (selection)
+ update_job_selection (pixbuf_cache->job_list + i, selection);
+ else
+ clear_job_selection (pixbuf_cache->job_list + i);
+ page ++;
+ }
+
+ for (i = 0; i < pixbuf_cache->preload_cache_size; i++) {
+ if (page >= ev_document_get_n_pages (pixbuf_cache->document))
+ break;
+
+ selection = NULL;
+ while (list) {
+ if (((EvViewSelection *)list->data)->page == page) {
+ selection = list->data;
+ break;
+ } else if (((EvViewSelection *)list->data)->page > page)
+ break;
+ list = list->next;
+ }
+
+ if (selection)
+ update_job_selection (pixbuf_cache->next_job + i, selection);
+ else
+ clear_job_selection (pixbuf_cache->next_job + i);
+ page ++;
+ }
+}
+
+
+/* Returns what the pixbuf cache thinks is */
+
+GList *
+ev_pixbuf_cache_get_selection_list (EvPixbufCache *pixbuf_cache)
+{
+ EvViewSelection *selection;
+ GList *retval = NULL;
+ int page;
+ int i;
+
+ g_return_val_if_fail (EV_IS_PIXBUF_CACHE (pixbuf_cache), NULL);
+
+ /* We check each area to see what needs updating, and what needs freeing; */
+ page = pixbuf_cache->start_page - pixbuf_cache->preload_cache_size;
+ for (i = 0; i < pixbuf_cache->preload_cache_size; i++) {
+ if (page < 0) {
+ page ++;
+ continue;
+ }
+
+ if (pixbuf_cache->prev_job[i].selection_points.x1 != -1) {
+ selection = g_new0 (EvViewSelection, 1);
+ selection->page = page;
+ selection->rect = pixbuf_cache->prev_job[i].selection_points;
+ if (pixbuf_cache->prev_job[i].selection_region)
+ selection->covered_region = cairo_region_reference (pixbuf_cache->prev_job[i].selection_region);
+ retval = g_list_append (retval, selection);
+ }
+
+ page ++;
+ }
+
+ page = pixbuf_cache->start_page;
+ for (i = 0; i < PAGE_CACHE_LEN (pixbuf_cache); i++) {
+ if (pixbuf_cache->job_list[i].selection_points.x1 != -1) {
+ selection = g_new0 (EvViewSelection, 1);
+ selection->page = page;
+ selection->rect = pixbuf_cache->job_list[i].selection_points;
+ if (pixbuf_cache->job_list[i].selection_region)
+ selection->covered_region = cairo_region_reference (pixbuf_cache->job_list[i].selection_region);
+ retval = g_list_append (retval, selection);
+ }
+
+ page ++;
+ }
+
+ for (i = 0; i < pixbuf_cache->preload_cache_size; i++) {
+ if (page >= ev_document_get_n_pages (pixbuf_cache->document))
+ break;
+
+ if (pixbuf_cache->next_job[i].selection_points.x1 != -1) {
+ selection = g_new0 (EvViewSelection, 1);
+ selection->page = page;
+ selection->rect = pixbuf_cache->next_job[i].selection_points;
+ if (pixbuf_cache->next_job[i].selection_region)
+ selection->covered_region = cairo_region_reference (pixbuf_cache->next_job[i].selection_region);
+ retval = g_list_append (retval, selection);
+ }
+
+ page ++;
+ }
+
+ return retval;
+}
+
+void
+ev_pixbuf_cache_reload_page (EvPixbufCache *pixbuf_cache,
+ cairo_region_t *region,
+ gint page,
+ gint rotation,
+ gdouble scale)
+{
+ CacheJobInfo *job_info;
+ gint width, height;
+
+ job_info = find_job_cache (pixbuf_cache, page);
+ if (job_info == NULL)
+ return;
+
+ _get_page_size_for_scale_and_rotation (pixbuf_cache->document,
+ page, scale, rotation,
+ &width, &height);
+ add_job (pixbuf_cache, job_info, region,
+ width, height, page, rotation, scale,
+ EV_JOB_PRIORITY_URGENT);
+}
+
+
diff --git a/libview/ev-pixbuf-cache.h b/libview/ev-pixbuf-cache.h
new file mode 100644
index 00000000..67c2517e
--- /dev/null
+++ b/libview/ev-pixbuf-cache.h
@@ -0,0 +1,89 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+/* This File is basically an extention of EvView, and is out here just to keep
+ * ev-view.c from exploding.
+ */
+
+#if !defined (__EV_EVINCE_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-view.h> can be included directly."
+#endif
+
+#ifndef __EV_PIXBUF_CACHE_H__
+#define __EV_PIXBUF_CACHE_H__
+
+#include <gtk/gtk.h>
+
+#include <evince-document.h>
+#include <evince-view.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_PIXBUF_CACHE (ev_pixbuf_cache_get_type ())
+#define EV_PIXBUF_CACHE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_PIXBUF_CACHE, EvPixbufCache))
+#define EV_IS_PIXBUF_CACHE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_PIXBUF_CACHE))
+
+
+
+/* The coordinates in the rect here are at scale == 1.0, so that we can ignore
+ * resizings. There is one per page, maximum.
+ */
+typedef struct {
+ int page;
+ EvRectangle rect;
+ cairo_region_t *covered_region;
+ EvSelectionStyle style;
+} EvViewSelection;
+
+typedef struct _EvPixbufCache EvPixbufCache;
+typedef struct _EvPixbufCacheClass EvPixbufCacheClass;
+
+GType ev_pixbuf_cache_get_type (void) G_GNUC_CONST;
+EvPixbufCache *ev_pixbuf_cache_new (GtkWidget *view,
+ EvDocumentModel *model,
+ gsize max_size);
+void ev_pixbuf_cache_set_max_size (EvPixbufCache *pixbuf_cache,
+ gsize max_size);
+void ev_pixbuf_cache_set_page_range (EvPixbufCache *pixbuf_cache,
+ gint start_page,
+ gint end_page,
+ GList *selection_list);
+cairo_surface_t *ev_pixbuf_cache_get_surface (EvPixbufCache *pixbuf_cache,
+ gint page);
+void ev_pixbuf_cache_clear (EvPixbufCache *pixbuf_cache);
+void ev_pixbuf_cache_style_changed (EvPixbufCache *pixbuf_cache);
+void ev_pixbuf_cache_reload_page (EvPixbufCache *pixbuf_cache,
+ cairo_region_t *region,
+ gint page,
+ gint rotation,
+ gdouble scale);
+void ev_pixbuf_cache_set_inverted_colors (EvPixbufCache *pixbuf_cache,
+ gboolean inverted_colors);
+/* Selection */
+cairo_surface_t *ev_pixbuf_cache_get_selection_surface (EvPixbufCache *pixbuf_cache,
+ gint page,
+ gfloat scale,
+ cairo_region_t **region);
+void ev_pixbuf_cache_set_selection_list (EvPixbufCache *pixbuf_cache,
+ GList *selection_list);
+GList *ev_pixbuf_cache_get_selection_list (EvPixbufCache *pixbuf_cache);
+
+G_END_DECLS
+
+#endif /* __EV_PIXBUF_CACHE_H__ */
diff --git a/libview/ev-print-operation.c b/libview/ev-print-operation.c
new file mode 100644
index 00000000..d913c7be
--- /dev/null
+++ b/libview/ev-print-operation.c
@@ -0,0 +1,2028 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include "ev-print-operation.h"
+
+#if GTKUNIXPRINT_ENABLED
+#include <gtk/gtkunixprint.h>
+#endif
+#include <glib/gi18n.h>
+#include <glib/gstdio.h>
+#include <unistd.h>
+
+#include "ev-jobs.h"
+#include "ev-job-scheduler.h"
+
+enum {
+ PROP_0,
+ PROP_DOCUMENT
+};
+
+enum {
+ DONE,
+ BEGIN_PRINT,
+ STATUS_CHANGED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+struct _EvPrintOperation {
+ GObject parent;
+
+ EvDocument *document;
+
+ /* Progress */
+ gchar *status;
+ gdouble progress;
+};
+
+struct _EvPrintOperationClass {
+ GObjectClass parent_class;
+
+ void (* set_current_page) (EvPrintOperation *op,
+ gint current_page);
+ void (* set_print_settings) (EvPrintOperation *op,
+ GtkPrintSettings *print_settings);
+ GtkPrintSettings *(* get_print_settings) (EvPrintOperation *op);
+ void (* set_default_page_setup) (EvPrintOperation *op,
+ GtkPageSetup *page_setup);
+ GtkPageSetup *(* get_default_page_setup) (EvPrintOperation *op);
+ void (* set_job_name) (EvPrintOperation *op,
+ const gchar *job_name);
+ const gchar *(* get_job_name) (EvPrintOperation *op);
+ void (* run) (EvPrintOperation *op,
+ GtkWindow *parent);
+ void (* cancel) (EvPrintOperation *op);
+ void (* get_error) (EvPrintOperation *op,
+ GError **error);
+ void (* set_embed_page_setup) (EvPrintOperation *op,
+ gboolean embed);
+ gboolean (* get_embed_page_setup) (EvPrintOperation *op);
+
+ /* signals */
+ void (* done) (EvPrintOperation *op,
+ GtkPrintOperationResult result);
+ void (* begin_print) (EvPrintOperation *op);
+ void (* status_changed) (EvPrintOperation *op);
+};
+
+G_DEFINE_ABSTRACT_TYPE (EvPrintOperation, ev_print_operation, G_TYPE_OBJECT)
+
+static void
+ev_print_operation_finalize (GObject *object)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (object);
+
+ if (op->document) {
+ g_object_unref (op->document);
+ op->document = NULL;
+ }
+
+ if (op->status) {
+ g_free (op->status);
+ op->status = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_print_operation_parent_class)->finalize) (object);
+}
+
+static void
+ev_print_operation_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (object);
+
+ switch (prop_id) {
+ case PROP_DOCUMENT:
+ op->document = g_value_dup_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_print_operation_init (EvPrintOperation *op)
+{
+}
+
+static void
+ev_print_operation_class_init (EvPrintOperationClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+
+ g_object_class->set_property = ev_print_operation_set_property;
+ g_object_class->finalize = ev_print_operation_finalize;
+
+ g_object_class_install_property (g_object_class,
+ PROP_DOCUMENT,
+ g_param_spec_object ("document",
+ "Document",
+ "The document to print",
+ EV_TYPE_DOCUMENT,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+ signals[DONE] =
+ g_signal_new ("done",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvPrintOperationClass, done),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__ENUM,
+ G_TYPE_NONE, 1,
+ GTK_TYPE_PRINT_OPERATION_RESULT);
+ signals[BEGIN_PRINT] =
+ g_signal_new ("begin_print",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvPrintOperationClass, begin_print),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ signals[STATUS_CHANGED] =
+ g_signal_new ("status_changed",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvPrintOperationClass, status_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+}
+
+/* Public methods */
+void
+ev_print_operation_set_current_page (EvPrintOperation *op,
+ gint current_page)
+{
+ EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
+
+ g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+ g_return_if_fail (current_page >= 0);
+
+ class->set_current_page (op, current_page);
+}
+
+void
+ev_print_operation_set_print_settings (EvPrintOperation *op,
+ GtkPrintSettings *print_settings)
+{
+ EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
+
+ g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+ g_return_if_fail (GTK_IS_PRINT_SETTINGS (print_settings));
+
+ class->set_print_settings (op, print_settings);
+}
+
+GtkPrintSettings *
+ev_print_operation_get_print_settings (EvPrintOperation *op)
+{
+ EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
+
+ g_return_val_if_fail (EV_IS_PRINT_OPERATION (op), NULL);
+
+ return class->get_print_settings (op);
+}
+
+void
+ev_print_operation_set_default_page_setup (EvPrintOperation *op,
+ GtkPageSetup *page_setup)
+{
+ EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
+
+ g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+ g_return_if_fail (GTK_IS_PAGE_SETUP (page_setup));
+
+ class->set_default_page_setup (op, page_setup);
+}
+
+GtkPageSetup *
+ev_print_operation_get_default_page_setup (EvPrintOperation *op)
+{
+ EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
+
+ g_return_val_if_fail (EV_IS_PRINT_OPERATION (op), NULL);
+
+ return class->get_default_page_setup (op);
+}
+
+void
+ev_print_operation_set_job_name (EvPrintOperation *op,
+ const gchar *job_name)
+{
+ EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
+
+ g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+ g_return_if_fail (job_name != NULL);
+
+ class->set_job_name (op, job_name);
+}
+
+const gchar *
+ev_print_operation_get_job_name (EvPrintOperation *op)
+{
+ EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
+
+ g_return_val_if_fail (EV_IS_PRINT_OPERATION (op), NULL);
+
+ return class->get_job_name (op);
+}
+
+void
+ev_print_operation_run (EvPrintOperation *op,
+ GtkWindow *parent)
+{
+ EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
+
+ g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+
+ class->run (op, parent);
+}
+
+void
+ev_print_operation_cancel (EvPrintOperation *op)
+{
+ EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
+
+ g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+
+ class->cancel (op);
+}
+
+void
+ev_print_operation_get_error (EvPrintOperation *op,
+ GError **error)
+{
+ EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
+
+ g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+
+ class->get_error (op, error);
+}
+
+void
+ev_print_operation_set_embed_page_setup (EvPrintOperation *op,
+ gboolean embed)
+{
+ EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
+
+ g_return_if_fail (EV_IS_PRINT_OPERATION (op));
+
+ class->set_embed_page_setup (op, embed);
+}
+
+gboolean
+ev_print_operation_get_embed_page_setup (EvPrintOperation *op)
+{
+ EvPrintOperationClass *class = EV_PRINT_OPERATION_GET_CLASS (op);
+
+ g_return_val_if_fail (EV_IS_PRINT_OPERATION (op), FALSE);
+
+ return class->get_embed_page_setup (op);
+}
+
+const gchar *
+ev_print_operation_get_status (EvPrintOperation *op)
+{
+ g_return_val_if_fail (EV_IS_PRINT_OPERATION (op), NULL);
+
+ return op->status ? op->status : "";
+}
+
+gdouble
+ev_print_operation_get_progress (EvPrintOperation *op)
+{
+ g_return_val_if_fail (EV_IS_PRINT_OPERATION (op), 0.0);
+
+ return op->progress;
+}
+
+static void
+ev_print_operation_update_status (EvPrintOperation *op,
+ gint page,
+ gint n_pages,
+ gdouble progress)
+{
+ if (op->status && op->progress == progress)
+ return;
+
+ g_free (op->status);
+
+ if (page == -1) {
+ /* Initial state */
+ op->status = g_strdup (_("Preparing to print…"));
+ } else if (page > n_pages) {
+ op->status = g_strdup (_("Finishing…"));
+ } else {
+ op->status = g_strdup_printf (_("Printing page %d of %d…"),
+ page, n_pages);
+ }
+
+ op->progress = MIN (1.0, progress);
+
+ g_signal_emit (op, signals[STATUS_CHANGED], 0);
+}
+
+#if GTKUNIXPRINT_ENABLED
+
+/* Export interface */
+#define EV_TYPE_PRINT_OPERATION_EXPORT (ev_print_operation_export_get_type())
+#define EV_PRINT_OPERATION_EXPORT(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_PRINT_OPERATION_EXPORT, EvPrintOperationExport))
+#define EV_PRINT_OPERATION_EXPORT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_PRINT_OPERATION_EXPORT, EvPrintOperationExportClass))
+#define EV_IS_PRINT_OPERATION_EXPORT(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_PRINT_OPERATION_EXPORT))
+
+typedef struct _EvPrintOperationExport EvPrintOperationExport;
+typedef struct _EvPrintOperationExportClass EvPrintOperationExportClass;
+
+static GType ev_print_operation_export_get_type (void) G_GNUC_CONST;
+
+static void ev_print_operation_export_begin (EvPrintOperationExport *export);
+static gboolean export_print_page (EvPrintOperationExport *export);
+static void export_cancel (EvPrintOperationExport *export);
+
+struct _EvPrintOperationExport {
+ EvPrintOperation parent;
+
+ GtkWindow *parent_window;
+ EvJob *job_export;
+ GError *error;
+
+ gboolean print_preview;
+ gint n_pages;
+ gint current_page;
+ GtkPrinter *printer;
+ GtkPageSetup *page_setup;
+ GtkPrintSettings *print_settings;
+ GtkPageSet page_set;
+ gint copies;
+ guint collate : 1;
+ guint reverse : 1;
+ gint pages_per_sheet;
+ gint fd;
+ gchar *temp_file;
+ gchar *job_name;
+ gboolean embed_page_setup;
+
+ guint idle_id;
+
+ /* Context */
+ EvFileExporterContext fc;
+ gint n_pages_to_print;
+ gint uncollated_copies;
+ gint collated_copies;
+ gint uncollated, collated, total;
+
+ gint sheet, page_count;
+
+ gint range, n_ranges;
+ GtkPageRange *ranges;
+ GtkPageRange one_range;
+
+ gint page, start, end, inc;
+};
+
+struct _EvPrintOperationExportClass {
+ EvPrintOperationClass parent_class;
+};
+
+G_DEFINE_TYPE (EvPrintOperationExport, ev_print_operation_export, EV_TYPE_PRINT_OPERATION)
+
+/* Internal print queue */
+static GHashTable *print_queue = NULL;
+
+static void
+queue_free (GQueue *queue)
+{
+ g_queue_foreach (queue, (GFunc)g_object_unref, NULL);
+ g_queue_free (queue);
+}
+
+static void
+ev_print_queue_init (void)
+{
+ if (G_UNLIKELY (print_queue == NULL)) {
+ print_queue = g_hash_table_new_full (g_direct_hash,
+ g_direct_equal,
+ NULL,
+ (GDestroyNotify)queue_free);
+ }
+}
+
+static void
+remove_document_queue (gpointer data,
+ GObject *document)
+{
+ if (print_queue)
+ g_hash_table_remove (print_queue, document);
+}
+
+static gboolean
+ev_print_queue_is_empty (EvDocument *document)
+{
+ GQueue *queue;
+
+ queue = g_hash_table_lookup (print_queue, document);
+ return (!queue || g_queue_is_empty (queue));
+}
+
+static void
+ev_print_queue_push (EvPrintOperation *op)
+{
+ GQueue *queue;
+
+ queue = g_hash_table_lookup (print_queue, op->document);
+ if (!queue) {
+ queue = g_queue_new ();
+ g_hash_table_insert (print_queue,
+ op->document,
+ queue);
+ g_object_weak_ref (G_OBJECT (op->document),
+ (GWeakNotify)remove_document_queue,
+ NULL);
+ }
+
+ g_queue_push_head (queue, g_object_ref (op));
+}
+
+static EvPrintOperation *
+ev_print_queue_pop (EvDocument *document)
+{
+ EvPrintOperation *op;
+ GQueue *queue;
+
+ queue = g_hash_table_lookup (print_queue, document);
+ if (!queue || g_queue_is_empty (queue))
+ return NULL;
+
+ op = g_queue_pop_tail (queue);
+ g_object_unref (op);
+
+ return op;
+}
+
+static EvPrintOperation *
+ev_print_queue_peek (EvDocument *document)
+{
+ GQueue *queue;
+
+ queue = g_hash_table_lookup (print_queue, document);
+ if (!queue || g_queue_is_empty (queue))
+ return NULL;
+
+ return g_queue_peek_tail (queue);
+}
+
+static void
+ev_print_operation_export_set_current_page (EvPrintOperation *op,
+ gint current_page)
+{
+ EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op);
+
+ g_return_if_fail (current_page < export->n_pages);
+
+ export->current_page = current_page;
+}
+
+static void
+ev_print_operation_export_set_print_settings (EvPrintOperation *op,
+ GtkPrintSettings *print_settings)
+{
+ EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op);
+
+ if (print_settings == export->print_settings)
+ return;
+
+ g_object_ref (print_settings);
+ if (export->print_settings)
+ g_object_unref (export->print_settings);
+ export->print_settings = print_settings;
+}
+
+static GtkPrintSettings *
+ev_print_operation_export_get_print_settings (EvPrintOperation *op)
+{
+ EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op);
+
+ return export->print_settings;
+}
+
+static void
+ev_print_operation_export_set_default_page_setup (EvPrintOperation *op,
+ GtkPageSetup *page_setup)
+{
+ EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op);
+
+ if (page_setup == export->page_setup)
+ return;
+
+ g_object_ref (page_setup);
+ if (export->page_setup)
+ g_object_unref (export->page_setup);
+ export->page_setup = page_setup;
+}
+
+static GtkPageSetup *
+ev_print_operation_export_get_default_page_setup (EvPrintOperation *op)
+{
+ EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op);
+
+ return export->page_setup;
+}
+
+static void
+ev_print_operation_export_set_job_name (EvPrintOperation *op,
+ const gchar *job_name)
+{
+ EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op);
+
+ g_free (export->job_name);
+ export->job_name = g_strdup (job_name);
+}
+
+static const gchar *
+ev_print_operation_export_get_job_name (EvPrintOperation *op)
+{
+ EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op);
+
+ return export->job_name;
+}
+
+static void
+ev_print_operation_export_set_printer (EvPrintOperationExport *export,
+ GtkPrinter *printer)
+{
+ if (printer == export->printer)
+ return;
+
+ g_object_ref (printer);
+ if (export->printer)
+ g_object_unref (export->printer);
+ export->printer = printer;
+}
+
+static void
+find_range (EvPrintOperationExport *export)
+{
+ GtkPageRange *range;
+
+ range = &export->ranges[export->range];
+
+ if (export->inc < 0) {
+ export->start = range->end;
+ export->end = range->start - 1;
+ } else {
+ export->start = range->start;
+ export->end = range->end + 1;
+ }
+}
+
+static gboolean
+clamp_ranges (EvPrintOperationExport *export)
+{
+ gint num_of_correct_ranges = 0;
+ gint n_pages_to_print = 0;
+ gint i;
+ gboolean null_flag = FALSE;
+
+ for (i = 0; i < export->n_ranges; i++) {
+ gint n_pages;
+
+ if ((export->ranges[i].start >= 0) &&
+ (export->ranges[i].start < export->n_pages) &&
+ (export->ranges[i].end >= 0) &&
+ (export->ranges[i].end < export->n_pages)) {
+ export->ranges[num_of_correct_ranges] = export->ranges[i];
+ num_of_correct_ranges++;
+ } else if ((export->ranges[i].start >= 0) &&
+ (export->ranges[i].start < export->n_pages) &&
+ (export->ranges[i].end >= export->n_pages)) {
+ export->ranges[i].end = export->n_pages - 1;
+ export->ranges[num_of_correct_ranges] = export->ranges[i];
+ num_of_correct_ranges++;
+ } else if ((export->ranges[i].end >= 0) &&
+ (export->ranges[i].end < export->n_pages) &&
+ (export->ranges[i].start < 0)) {
+ export->ranges[i].start = 0;
+ export->ranges[num_of_correct_ranges] = export->ranges[i];
+ num_of_correct_ranges++;
+ }
+
+ n_pages = export->ranges[i].end - export->ranges[i].start + 1;
+ if (export->page_set == GTK_PAGE_SET_ALL) {
+ n_pages_to_print += n_pages;
+ } else if (n_pages % 2 == 0) {
+ n_pages_to_print += n_pages / 2;
+ } else if (export->page_set == GTK_PAGE_SET_EVEN) {
+ if (n_pages==1 && export->ranges[i].start % 2 == 0)
+ null_flag = TRUE;
+ else
+ n_pages_to_print += export->ranges[i].start % 2 == 0 ?
+ n_pages / 2 : (n_pages / 2) + 1;
+ } else if (export->page_set == GTK_PAGE_SET_ODD) {
+ if (n_pages==1 && export->ranges[i].start % 2 != 0)
+ null_flag = TRUE;
+ else
+ n_pages_to_print += export->ranges[i].start % 2 == 0 ?
+ (n_pages / 2) + 1 : n_pages / 2;
+ }
+ }
+
+ if (null_flag && !n_pages_to_print) {
+ return FALSE;
+ } else {
+ export->n_ranges = num_of_correct_ranges;
+ export->n_pages_to_print = n_pages_to_print;
+ return TRUE;
+ }
+}
+
+static void
+get_first_and_last_page (EvPrintOperationExport *export,
+ gint *first,
+ gint *last)
+{
+ gint i;
+ gint first_page = G_MAXINT;
+ gint last_page = G_MININT;
+ gint max_page = export->n_pages - 1;
+
+ if (export->n_ranges == 0) {
+ *first = 0;
+ *last = max_page;
+
+ return;
+ }
+
+ for (i = 0; i < export->n_ranges; i++) {
+ if (export->ranges[i].start < first_page)
+ first_page = export->ranges[i].start;
+ if (export->ranges[i].end > last_page)
+ last_page = export->ranges[i].end;
+ }
+
+ *first = MAX (0, first_page);
+ *last = MIN (max_page, last_page);
+}
+
+static gboolean
+export_print_inc_page (EvPrintOperationExport *export)
+{
+ do {
+ export->page += export->inc;
+
+ /* note: when NOT collating, page_count is increased in export_print_page */
+ if (export->collate) {
+ export->page_count++;
+ export->sheet = 1 + (export->page_count - 1) / export->pages_per_sheet;
+ }
+
+ if (export->page == export->end) {
+ export->range += export->inc;
+ if (export->range == -1 || export->range == export->n_ranges) {
+ export->uncollated++;
+
+ /* when printing multiple collated copies & multiple pages per sheet we want to
+ * prevent the next copy bleeding into the last sheet of the previous one
+ * we've reached the last range to be printed now, so this is the time to do it */
+ if (export->pages_per_sheet > 1 && export->collate == 1 &&
+ (export->page_count - 1) % export->pages_per_sheet != 0) {
+
+ EvPrintOperation *op = EV_PRINT_OPERATION (export);
+ ev_document_doc_mutex_lock ();
+
+ /* keep track of all blanks but only actualise those
+ * which are in the current odd / even sheet set */
+
+ export->page_count += export->pages_per_sheet - (export->page_count - 1) % export->pages_per_sheet;
+ if (export->page_set == GTK_PAGE_SET_ALL ||
+ (export->page_set == GTK_PAGE_SET_EVEN && export->sheet % 2 == 0) ||
+ (export->page_set == GTK_PAGE_SET_ODD && export->sheet % 2 == 1) ) {
+ ev_file_exporter_end_page (EV_FILE_EXPORTER (op->document));
+ }
+ ev_document_doc_mutex_unlock ();
+ export->sheet = 1 + (export->page_count - 1) / export->pages_per_sheet;
+ }
+
+ if (export->uncollated == export->uncollated_copies)
+ return FALSE;
+
+ export->range = export->inc < 0 ? export->n_ranges - 1 : 0;
+ }
+ find_range (export);
+ export->page = export->start;
+ }
+
+ /* in/decrement the page number until we reach the first page on the next EVEN or ODD sheet
+ * if we're not collating, we have to make sure that this is done only once! */
+ } while ( export->collate == 1 &&
+ ((export->page_set == GTK_PAGE_SET_EVEN && export->sheet % 2 == 1) ||
+ (export->page_set == GTK_PAGE_SET_ODD && export->sheet % 2 == 0)));
+
+ return TRUE;
+}
+
+static void
+ev_print_operation_export_clear_temp_file (EvPrintOperationExport *export)
+{
+ if (!export->temp_file)
+ return;
+
+ g_unlink (export->temp_file);
+ g_free (export->temp_file);
+ export->temp_file = NULL;
+}
+
+static void
+ev_print_operation_export_run_next (EvPrintOperationExport *export)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (export);
+ EvPrintOperation *next;
+ EvDocument *document;
+
+ /* First pop the current job */
+ document = op->document;
+ ev_print_queue_pop (document);
+
+ next = ev_print_queue_peek (document);
+ if (next)
+ ev_print_operation_export_begin (EV_PRINT_OPERATION_EXPORT (next));
+}
+
+static void
+gtk_print_job_finished (GtkPrintJob *print_job,
+ EvPrintOperationExport *export,
+ GError *error)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (export);
+
+ if (error) {
+ g_set_error_literal (&export->error,
+ GTK_PRINT_ERROR,
+ GTK_PRINT_ERROR_GENERAL,
+ error->message);
+ g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_ERROR);
+ } else {
+ g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_APPLY);
+ }
+
+ ev_print_operation_export_clear_temp_file (export);
+ g_object_unref (print_job);
+
+ ev_print_operation_export_run_next (export);
+}
+
+static void
+export_print_done (EvPrintOperationExport *export)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (export);
+ GtkPrintSettings *settings;
+ EvFileExporterCapabilities capabilities;
+ GError *error = NULL;
+
+ g_assert (export->temp_file != NULL);
+
+ /* Some printers take into account some print settings,
+ * and others don't. However we have exported the document
+ * to a ps or pdf file according to such print settings. So,
+ * we want to send the exported file to printer with those
+ * settings set to default values.
+ */
+ settings = gtk_print_settings_copy (export->print_settings);
+ capabilities = ev_file_exporter_get_capabilities (EV_FILE_EXPORTER (op->document));
+
+ gtk_print_settings_set_page_ranges (settings, NULL, 0);
+ gtk_print_settings_set_print_pages (settings, GTK_PRINT_PAGES_ALL);
+ if (capabilities & EV_FILE_EXPORTER_CAN_COPIES)
+ gtk_print_settings_set_n_copies (settings, 1);
+ if (capabilities & EV_FILE_EXPORTER_CAN_PAGE_SET)
+ gtk_print_settings_set_page_set (settings, GTK_PAGE_SET_ALL);
+ if (capabilities & EV_FILE_EXPORTER_CAN_SCALE)
+ gtk_print_settings_set_scale (settings, 1.0);
+ if (capabilities & EV_FILE_EXPORTER_CAN_COLLATE)
+ gtk_print_settings_set_collate (settings, FALSE);
+ if (capabilities & EV_FILE_EXPORTER_CAN_REVERSE)
+ gtk_print_settings_set_reverse (settings, FALSE);
+ if (capabilities & EV_FILE_EXPORTER_CAN_NUMBER_UP) {
+ gtk_print_settings_set_number_up (settings, 1);
+ gtk_print_settings_set_int (settings, "cups-"GTK_PRINT_SETTINGS_NUMBER_UP, 1);
+ }
+
+ if (export->print_preview) {
+ GKeyFile *key_file;
+ gchar *data = NULL;
+ gsize data_len;
+ gchar *print_settings_file = NULL;
+
+ key_file = g_key_file_new ();
+
+ gtk_print_settings_to_key_file (settings, key_file, NULL);
+ gtk_page_setup_to_key_file (export->page_setup, key_file, NULL);
+ g_key_file_set_string (key_file, "Print Job", "title", export->job_name);
+
+ data = g_key_file_to_data (key_file, &data_len, &error);
+ if (data) {
+ gint fd;
+
+ fd = g_file_open_tmp ("print-settingsXXXXXX", &print_settings_file, &error);
+ if (!error)
+ g_file_set_contents (print_settings_file, data, data_len, &error);
+ close (fd);
+
+ g_free (data);
+ }
+
+ g_key_file_free (key_file);
+
+ if (!error) {
+ gint argc;
+ gchar **argv;
+ gchar *cmd;
+ gchar *quoted_filename;
+ gchar *quoted_settings_filename;
+
+ quoted_filename = g_shell_quote (export->temp_file);
+ quoted_settings_filename = g_shell_quote (print_settings_file);
+ cmd = g_strdup_printf ("evince-previewer --unlink-tempfile --print-settings %s %s",
+ quoted_settings_filename, quoted_filename);
+
+ g_shell_parse_argv (cmd, &argc, &argv, &error);
+
+ g_free (quoted_filename);
+ g_free (quoted_settings_filename);
+ g_free (cmd);
+
+ if (!error) {
+ gdk_spawn_on_screen (gtk_window_get_screen (export->parent_window),
+ NULL, argv, NULL,
+ G_SPAWN_SEARCH_PATH,
+ NULL, NULL, NULL,
+ &error);
+ }
+
+ g_strfreev (argv);
+ }
+
+ if (error) {
+ if (print_settings_file)
+ g_unlink (print_settings_file);
+ g_free (print_settings_file);
+ } else {
+ g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_APPLY);
+ /* temp_file will be deleted by the previewer */
+
+ ev_print_operation_export_run_next (export);
+ }
+ } else {
+ GtkPrintJob *job;
+
+ job = gtk_print_job_new (export->job_name,
+ export->printer,
+ settings,
+ export->page_setup);
+ gtk_print_job_set_source_file (job, export->temp_file, &error);
+ if (!error){
+ gtk_print_job_send (job,
+ (GtkPrintJobCompleteFunc)gtk_print_job_finished,
+ g_object_ref (export),
+ (GDestroyNotify)g_object_unref);
+ }
+ }
+ g_object_unref (settings);
+
+ if (error) {
+ g_set_error_literal (&export->error,
+ GTK_PRINT_ERROR,
+ GTK_PRINT_ERROR_GENERAL,
+ error->message);
+ g_error_free (error);
+ ev_print_operation_export_clear_temp_file (export);
+ g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_ERROR);
+
+ ev_print_operation_export_run_next (export);
+ }
+}
+
+static void
+export_print_page_idle_finished (EvPrintOperationExport *export)
+{
+ export->idle_id = 0;
+}
+
+static void
+export_job_finished (EvJobExport *job,
+ EvPrintOperationExport *export)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (export);
+
+ if (export->pages_per_sheet == 1 ||
+ ( export->page_count % export->pages_per_sheet == 0 &&
+ ( export->page_set == GTK_PAGE_SET_ALL ||
+ ( export->page_set == GTK_PAGE_SET_EVEN && export->sheet % 2 == 0 ) ||
+ ( export->page_set == GTK_PAGE_SET_ODD && export->sheet % 2 == 1 ) ) ) ) {
+
+ ev_document_doc_mutex_lock ();
+ ev_file_exporter_end_page (EV_FILE_EXPORTER (op->document));
+ ev_document_doc_mutex_unlock ();
+ }
+
+ /* Reschedule */
+ export->idle_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+ (GSourceFunc)export_print_page,
+ export,
+ (GDestroyNotify)export_print_page_idle_finished);
+}
+
+static void
+export_job_cancelled (EvJobExport *job,
+ EvPrintOperationExport *export)
+{
+ export_cancel (export);
+}
+
+static void
+export_cancel (EvPrintOperationExport *export)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (export);
+
+ if (export->idle_id > 0)
+ g_source_remove (export->idle_id);
+ export->idle_id = 0;
+
+ if (export->job_export) {
+ g_signal_handlers_disconnect_by_func (export->job_export,
+ export_job_finished,
+ export);
+ g_signal_handlers_disconnect_by_func (export->job_export,
+ export_job_cancelled,
+ export);
+ g_object_unref (export->job_export);
+ export->job_export = NULL;
+ }
+
+ if (export->fd != -1) {
+ close (export->fd);
+ export->fd = -1;
+ }
+
+ ev_print_operation_export_clear_temp_file (export);
+
+ g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_CANCEL);
+
+ ev_print_operation_export_run_next (export);
+}
+
+static void
+update_progress (EvPrintOperationExport *export)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (export);
+
+ ev_print_operation_update_status (op, export->total,
+ export->n_pages_to_print,
+ export->total / (gdouble)export->n_pages_to_print);
+}
+
+static gboolean
+export_print_page (EvPrintOperationExport *export)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (export);
+
+ if (!export->temp_file)
+ return FALSE; /* cancelled */
+
+ export->total++;
+ export->collated++;
+
+ /* note: when collating, page_count is increased in export_print_inc_page */
+ if (!export->collate) {
+ export->page_count++;
+ export->sheet = 1 + (export->page_count - 1) / export->pages_per_sheet;
+ }
+
+ if (export->collated == export->collated_copies) {
+ export->collated = 0;
+ if (!export_print_inc_page (export)) {
+ ev_document_doc_mutex_lock ();
+ ev_file_exporter_end (EV_FILE_EXPORTER (op->document));
+ ev_document_doc_mutex_unlock ();
+
+ close (export->fd);
+ export->fd = -1;
+ update_progress (export);
+ export_print_done (export);
+
+ return FALSE;
+ }
+ }
+
+ /* we're not collating and we've reached a sheet from the wrong sheet set */
+ if (!export->collate &&
+ ((export->page_set == GTK_PAGE_SET_EVEN && export->sheet % 2 != 0) ||
+ (export->page_set == GTK_PAGE_SET_ODD && export->sheet % 2 != 1))) {
+
+ do {
+ export->page_count++;
+ export->collated++;
+ export->sheet = 1 + (export->page_count - 1) / export->pages_per_sheet;
+
+ if (export->collated == export->collated_copies) {
+ export->collated = 0;
+
+ if (!export_print_inc_page (export)) {
+ ev_document_doc_mutex_lock ();
+ ev_file_exporter_end (EV_FILE_EXPORTER (op->document));
+ ev_document_doc_mutex_unlock ();
+
+ close (export->fd);
+ export->fd = -1;
+
+ update_progress (export);
+
+ export_print_done (export);
+ return FALSE;
+ }
+ }
+
+ } while ((export->page_set == GTK_PAGE_SET_EVEN && export->sheet % 2 != 0) ||
+ (export->page_set == GTK_PAGE_SET_ODD && export->sheet % 2 != 1));
+
+ }
+
+ if (export->pages_per_sheet == 1 ||
+ (export->page_count % export->pages_per_sheet == 1 &&
+ (export->page_set == GTK_PAGE_SET_ALL ||
+ (export->page_set == GTK_PAGE_SET_EVEN && export->sheet % 2 == 0) ||
+ (export->page_set == GTK_PAGE_SET_ODD && export->sheet % 2 == 1)))) {
+ ev_document_doc_mutex_lock ();
+ ev_file_exporter_begin_page (EV_FILE_EXPORTER (op->document));
+ ev_document_doc_mutex_unlock ();
+ }
+
+ if (!export->job_export) {
+ export->job_export = ev_job_export_new (op->document);
+ g_signal_connect (export->job_export, "finished",
+ G_CALLBACK (export_job_finished),
+ (gpointer)export);
+ g_signal_connect (export->job_export, "cancelled",
+ G_CALLBACK (export_job_cancelled),
+ (gpointer)export);
+ }
+
+ ev_job_export_set_page (EV_JOB_EXPORT (export->job_export), export->page);
+ ev_job_scheduler_push_job (export->job_export, EV_JOB_PRIORITY_NONE);
+
+ update_progress (export);
+
+ return FALSE;
+}
+
+static void
+ev_print_operation_export_begin (EvPrintOperationExport *export)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (export);
+
+ if (!export->temp_file)
+ return; /* cancelled */
+
+ ev_document_doc_mutex_lock ();
+ ev_file_exporter_begin (EV_FILE_EXPORTER (op->document), &export->fc);
+ ev_document_doc_mutex_unlock ();
+
+ export->idle_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+ (GSourceFunc)export_print_page,
+ export,
+ (GDestroyNotify)export_print_page_idle_finished);
+}
+
+static void
+ev_print_operation_export_print_dialog_response_cb (GtkDialog *dialog,
+ gint response,
+ EvPrintOperationExport *export)
+{
+ GtkPrintPages print_pages;
+ GtkPrintSettings *print_settings;
+ GtkPageSetup *page_setup;
+ GtkPrinter *printer;
+ gdouble scale;
+ gdouble width;
+ gdouble height;
+ gint first_page;
+ gint last_page;
+ const gchar *file_format;
+ gchar *filename;
+ GError *error = NULL;
+ EvPrintOperation *op = EV_PRINT_OPERATION (export);
+
+ if (response != GTK_RESPONSE_OK &&
+ response != GTK_RESPONSE_APPLY) {
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+ g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_CANCEL);
+
+ return;
+ }
+
+ export->print_preview = (response == GTK_RESPONSE_APPLY);
+
+ printer = gtk_print_unix_dialog_get_selected_printer (GTK_PRINT_UNIX_DIALOG (dialog));
+ ev_print_operation_export_set_printer (export, printer);
+
+ print_settings = gtk_print_unix_dialog_get_settings (GTK_PRINT_UNIX_DIALOG (dialog));
+ ev_print_operation_export_set_print_settings (op, print_settings);
+
+ page_setup = gtk_print_unix_dialog_get_page_setup (GTK_PRINT_UNIX_DIALOG (dialog));
+ ev_print_operation_export_set_default_page_setup (op, page_setup);
+
+ if (!gtk_printer_accepts_ps (export->printer)) {
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+
+ g_set_error_literal (&export->error,
+ GTK_PRINT_ERROR,
+ GTK_PRINT_ERROR_GENERAL,
+ _("Printing is not supported on this printer."));
+ g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_ERROR);
+
+ return;
+ }
+
+ file_format = gtk_print_settings_get (print_settings, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT);
+
+ filename = g_strdup_printf ("evince_print.%s.XXXXXX", file_format != NULL ? file_format : "");
+ export->fd = g_file_open_tmp (filename, &export->temp_file, &error);
+ g_free (filename);
+ if (export->fd <= -1) {
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+
+ g_set_error_literal (&export->error,
+ GTK_PRINT_ERROR,
+ GTK_PRINT_ERROR_GENERAL,
+ error->message);
+ g_error_free (error);
+ g_signal_emit (op, signals[DONE], 0, GTK_PRINT_OPERATION_RESULT_ERROR);
+
+ return;
+ }
+
+ export->current_page = gtk_print_unix_dialog_get_current_page (GTK_PRINT_UNIX_DIALOG (dialog));
+ export->page_set = gtk_print_settings_get_page_set (print_settings);
+ print_pages = gtk_print_settings_get_print_pages (print_settings);
+
+ switch (print_pages) {
+ case GTK_PRINT_PAGES_CURRENT:
+ export->ranges = &export->one_range;
+
+ export->ranges[0].start = export->current_page;
+ export->ranges[0].end = export->current_page;
+ export->n_ranges = 1;
+
+ break;
+ case GTK_PRINT_PAGES_RANGES: {
+ gint i;
+
+ export->ranges = gtk_print_settings_get_page_ranges (print_settings, &export->n_ranges);
+ for (i = 0; i < export->n_ranges; i++)
+ if (export->ranges[i].end == -1 || export->ranges[i].end >= export->n_pages)
+ export->ranges[i].end = export->n_pages - 1;
+ }
+ break;
+ default:
+ g_warning ("Unsupported print pages setting\n");
+ case GTK_PRINT_PAGES_ALL:
+ export->ranges = &export->one_range;
+
+ export->ranges[0].start = 0;
+ export->ranges[0].end = export->n_pages - 1;
+ export->n_ranges = 1;
+
+ break;
+ }
+
+ if (export->n_ranges < 1 || !clamp_ranges (export)) {
+ GtkWidget *message_dialog;
+
+ message_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_CLOSE,
+ "%s", _("Invalid page selection"));
+ gtk_window_set_title (GTK_WINDOW (message_dialog), _("Warning"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (message_dialog),
+ "%s", _("Your print range selection does not include any pages"));
+ g_signal_connect (message_dialog, "response",
+ G_CALLBACK (gtk_widget_destroy),
+ NULL);
+ gtk_widget_show (message_dialog);
+
+ return;
+ } else ev_print_operation_update_status (op, -1, -1, 0.0);
+
+ width = gtk_page_setup_get_paper_width (page_setup, GTK_UNIT_POINTS);
+ height = gtk_page_setup_get_paper_height (page_setup, GTK_UNIT_POINTS);
+ scale = gtk_print_settings_get_scale (print_settings) * 0.01;
+ if (scale != 1.0) {
+ width *= scale;
+ height *= scale;
+ }
+
+ export->pages_per_sheet = MAX (1, gtk_print_settings_get_number_up (print_settings));
+
+ export->copies = gtk_print_settings_get_n_copies (print_settings);
+ export->collate = gtk_print_settings_get_collate (print_settings);
+ export->reverse = gtk_print_settings_get_reverse (print_settings);
+
+ if (export->collate) {
+ export->uncollated_copies = export->copies;
+ export->collated_copies = 1;
+ } else {
+ export->uncollated_copies = 1;
+ export->collated_copies = export->copies;
+ }
+
+ if (export->reverse) {
+ export->range = export->n_ranges - 1;
+ export->inc = -1;
+ } else {
+ export->range = 0;
+ export->inc = 1;
+ }
+ find_range (export);
+
+ export->page = export->start - export->inc;
+ export->collated = export->collated_copies - 1;
+
+ get_first_and_last_page (export, &first_page, &last_page);
+
+ export->fc.format = file_format && g_ascii_strcasecmp (file_format, "pdf") == 0 ?
+ EV_FILE_FORMAT_PDF : EV_FILE_FORMAT_PS;
+ export->fc.filename = export->temp_file;
+ export->fc.first_page = MIN (first_page, last_page);
+ export->fc.last_page = MAX (first_page, last_page);
+ export->fc.paper_width = width;
+ export->fc.paper_height = height;
+ export->fc.duplex = FALSE;
+ export->fc.pages_per_sheet = export->pages_per_sheet;
+
+ if (ev_print_queue_is_empty (op->document))
+ ev_print_operation_export_begin (export);
+
+ ev_print_queue_push (op);
+
+ g_signal_emit (op, signals[BEGIN_PRINT], 0);
+
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+static void
+ev_print_operation_export_run (EvPrintOperation *op,
+ GtkWindow *parent)
+{
+ EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op);
+ GtkWidget *dialog;
+ GtkPrintCapabilities capabilities;
+
+ ev_print_queue_init ();
+
+ export->parent_window = parent;
+ export->error = NULL;
+
+ dialog = gtk_print_unix_dialog_new (_("Print"), parent);
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+
+ capabilities = GTK_PRINT_CAPABILITY_PREVIEW |
+ ev_file_exporter_get_capabilities (EV_FILE_EXPORTER (op->document));
+ gtk_print_unix_dialog_set_manual_capabilities (GTK_PRINT_UNIX_DIALOG (dialog),
+ capabilities);
+
+ gtk_print_unix_dialog_set_embed_page_setup (GTK_PRINT_UNIX_DIALOG (dialog),
+ export->embed_page_setup);
+
+ gtk_print_unix_dialog_set_current_page (GTK_PRINT_UNIX_DIALOG (dialog),
+ export->current_page);
+
+ gtk_print_unix_dialog_set_settings (GTK_PRINT_UNIX_DIALOG (dialog),
+ export->print_settings);
+
+ if (export->page_setup)
+ gtk_print_unix_dialog_set_page_setup (GTK_PRINT_UNIX_DIALOG (dialog),
+ export->page_setup);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (ev_print_operation_export_print_dialog_response_cb),
+ export);
+
+ gtk_window_present (GTK_WINDOW (dialog));
+}
+
+static void
+ev_print_operation_export_cancel (EvPrintOperation *op)
+{
+ EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op);
+
+ if (export->job_export &&
+ !ev_job_is_finished (export->job_export)) {
+ ev_job_cancel (export->job_export);
+ } else {
+ export_cancel (export);
+ }
+}
+
+static void
+ev_print_operation_export_get_error (EvPrintOperation *op,
+ GError **error)
+{
+ EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op);
+
+ g_propagate_error (error, export->error);
+ export->error = NULL;
+}
+
+static void
+ev_print_operation_export_set_embed_page_setup (EvPrintOperation *op,
+ gboolean embed)
+{
+ EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op);
+
+ export->embed_page_setup = embed;
+}
+
+static gboolean
+ev_print_operation_export_get_embed_page_setup (EvPrintOperation *op)
+{
+ EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (op);
+
+ return export->embed_page_setup;
+}
+
+static void
+ev_print_operation_export_finalize (GObject *object)
+{
+ EvPrintOperationExport *export = EV_PRINT_OPERATION_EXPORT (object);
+
+ if (export->idle_id > 0) {
+ g_source_remove (export->idle_id);
+ export->idle_id = 0;
+ }
+
+ if (export->fd != -1) {
+ close (export->fd);
+ export->fd = -1;
+ }
+
+ if (export->ranges) {
+ if (export->ranges != &export->one_range)
+ g_free (export->ranges);
+ export->ranges = NULL;
+ export->n_ranges = 0;
+ }
+
+ if (export->temp_file) {
+ g_free (export->temp_file);
+ export->temp_file = NULL;
+ }
+
+ if (export->job_name) {
+ g_free (export->job_name);
+ export->job_name = NULL;
+ }
+
+ if (export->job_export) {
+ if (!ev_job_is_finished (export->job_export))
+ ev_job_cancel (export->job_export);
+ g_signal_handlers_disconnect_by_func (export->job_export,
+ export_job_finished,
+ export);
+ g_signal_handlers_disconnect_by_func (export->job_export,
+ export_job_cancelled,
+ export);
+ g_object_unref (export->job_export);
+ export->job_export = NULL;
+ }
+
+ if (export->error) {
+ g_error_free (export->error);
+ export->error = NULL;
+ }
+
+ if (export->print_settings) {
+ g_object_unref (export->print_settings);
+ export->print_settings = NULL;
+ }
+
+ if (export->page_setup) {
+ g_object_unref (export->page_setup);
+ export->page_setup = NULL;
+ }
+
+ if (export->printer) {
+ g_object_unref (export->printer);
+ export->printer = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_print_operation_export_parent_class)->finalize) (object);
+}
+
+static void
+ev_print_operation_export_init (EvPrintOperationExport *export)
+{
+ /* sheets are counted from 1 to be physical */
+ export->sheet = 1;
+}
+
+static GObject *
+ev_print_operation_export_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ EvPrintOperationExport *export;
+ EvPrintOperation *op;
+
+ object = G_OBJECT_CLASS (ev_print_operation_export_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_params);
+ export = EV_PRINT_OPERATION_EXPORT (object);
+ op = EV_PRINT_OPERATION (object);
+ export->n_pages = ev_document_get_n_pages (op->document);
+
+ return object;
+}
+
+static void
+ev_print_operation_export_class_init (EvPrintOperationExportClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+ EvPrintOperationClass *ev_print_op_class = EV_PRINT_OPERATION_CLASS (klass);
+
+ ev_print_op_class->set_current_page = ev_print_operation_export_set_current_page;
+ ev_print_op_class->set_print_settings = ev_print_operation_export_set_print_settings;
+ ev_print_op_class->get_print_settings = ev_print_operation_export_get_print_settings;
+ ev_print_op_class->set_default_page_setup = ev_print_operation_export_set_default_page_setup;
+ ev_print_op_class->get_default_page_setup = ev_print_operation_export_get_default_page_setup;
+ ev_print_op_class->set_job_name = ev_print_operation_export_set_job_name;
+ ev_print_op_class->get_job_name = ev_print_operation_export_get_job_name;
+ ev_print_op_class->run = ev_print_operation_export_run;
+ ev_print_op_class->cancel = ev_print_operation_export_cancel;
+ ev_print_op_class->get_error = ev_print_operation_export_get_error;
+ ev_print_op_class->set_embed_page_setup = ev_print_operation_export_set_embed_page_setup;
+ ev_print_op_class->get_embed_page_setup = ev_print_operation_export_get_embed_page_setup;
+
+ g_object_class->constructor = ev_print_operation_export_constructor;
+ g_object_class->finalize = ev_print_operation_export_finalize;
+}
+
+#endif /* GTKUNIXPRINT_ENABLED */
+
+/* Print to cairo interface */
+#define EV_TYPE_PRINT_OPERATION_PRINT (ev_print_operation_print_get_type())
+#define EV_PRINT_OPERATION_PRINT(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_PRINT_OPERATION_PRINT, EvPrintOperationPrint))
+#define EV_PRINT_OPERATION_PRINT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_PRINT_OPERATION_PRINT, EvPrintOperationPrintClass))
+#define EV_IS_PRINT_OPERATION_PRINT(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_PRINT_OPERATION_PRINT))
+
+typedef struct _EvPrintOperationPrint EvPrintOperationPrint;
+typedef struct _EvPrintOperationPrintClass EvPrintOperationPrintClass;
+
+static GType ev_print_operation_print_get_type (void) G_GNUC_CONST;
+
+typedef enum {
+ EV_SCALE_NONE,
+ EV_SCALE_SHRINK_TO_PRINTABLE_AREA,
+ EV_SCALE_FIT_TO_PRINTABLE_AREA
+} EvPrintScale;
+
+#define EV_PRINT_SETTING_PAGE_SCALE "evince-print-setting-page-scale"
+#define EV_PRINT_SETTING_AUTOROTATE "evince-print-setting-page-autorotate"
+#define EV_PRINT_SETTING_PAGE_SIZE "evince-print-setting-page-size"
+
+struct _EvPrintOperationPrint {
+ EvPrintOperation parent;
+
+ GtkPrintOperation *op;
+ gint n_pages_to_print;
+ gint total;
+ EvJob *job_print;
+ gchar *job_name;
+
+ /* Page handling tab */
+ GtkWidget *scale_combo;
+ EvPrintScale page_scale;
+ GtkWidget *autorotate_button;
+ gboolean autorotate;
+ GtkWidget *source_button;
+ gboolean use_source_size;
+};
+
+struct _EvPrintOperationPrintClass {
+ EvPrintOperationClass parent_class;
+};
+
+G_DEFINE_TYPE (EvPrintOperationPrint, ev_print_operation_print, EV_TYPE_PRINT_OPERATION)
+
+static void
+ev_print_operation_print_set_current_page (EvPrintOperation *op,
+ gint current_page)
+{
+ EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op);
+
+ gtk_print_operation_set_current_page (print->op, current_page);
+}
+
+static void
+ev_print_operation_print_set_print_settings (EvPrintOperation *op,
+ GtkPrintSettings *print_settings)
+{
+ EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op);
+
+ gtk_print_operation_set_print_settings (print->op, print_settings);
+}
+
+static GtkPrintSettings *
+ev_print_operation_print_get_print_settings (EvPrintOperation *op)
+{
+ EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op);
+
+ return gtk_print_operation_get_print_settings (print->op);
+}
+
+static void
+ev_print_operation_print_set_default_page_setup (EvPrintOperation *op,
+ GtkPageSetup *page_setup)
+{
+ EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op);
+
+ gtk_print_operation_set_default_page_setup (print->op, page_setup);
+}
+
+static GtkPageSetup *
+ev_print_operation_print_get_default_page_setup (EvPrintOperation *op)
+{
+ EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op);
+
+ return gtk_print_operation_get_default_page_setup (print->op);
+}
+
+static void
+ev_print_operation_print_set_job_name (EvPrintOperation *op,
+ const gchar *job_name)
+{
+ EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op);
+
+ g_free (print->job_name);
+ print->job_name = g_strdup (job_name);
+
+ gtk_print_operation_set_job_name (print->op, print->job_name);
+}
+
+static const gchar *
+ev_print_operation_print_get_job_name (EvPrintOperation *op)
+{
+ EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op);
+
+ if (!print->job_name) {
+ gchar *name;
+
+ g_object_get (print->op, "job_name", &name, NULL);
+ print->job_name = name;
+ }
+
+ return print->job_name;
+}
+
+static void
+ev_print_operation_print_run (EvPrintOperation *op,
+ GtkWindow *parent)
+{
+ EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op);
+
+ gtk_print_operation_run (print->op,
+ GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
+ parent, NULL);
+}
+
+static void
+ev_print_operation_print_cancel (EvPrintOperation *op)
+{
+ EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op);
+
+ gtk_print_operation_cancel (print->op);
+}
+
+static void
+ev_print_operation_print_get_error (EvPrintOperation *op,
+ GError **error)
+{
+ EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op);
+
+ gtk_print_operation_get_error (print->op, error);
+}
+
+static void
+ev_print_operation_print_set_embed_page_setup (EvPrintOperation *op,
+ gboolean embed)
+{
+ EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op);
+
+ gtk_print_operation_set_embed_page_setup (print->op, embed);
+}
+
+static gboolean
+ev_print_operation_print_get_embed_page_setup (EvPrintOperation *op)
+{
+ EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op);
+
+ return gtk_print_operation_get_embed_page_setup (print->op);
+}
+
+static void
+ev_print_operation_print_begin_print (EvPrintOperationPrint *print,
+ GtkPrintContext *context)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (print);
+ gint n_pages;
+
+ n_pages = ev_document_get_n_pages (op->document);
+ gtk_print_operation_set_n_pages (print->op, n_pages);
+ ev_print_operation_update_status (op, -1, n_pages, 0);
+
+ g_signal_emit (op, signals[BEGIN_PRINT], 0);
+}
+
+static void
+ev_print_operation_print_done (EvPrintOperationPrint *print,
+ GtkPrintOperationResult result)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (print);
+
+ ev_print_operation_update_status (op, 0, print->n_pages_to_print, 1.0);
+
+ g_signal_emit (op, signals[DONE], 0, result);
+}
+
+static void
+ev_print_operation_print_status_changed (EvPrintOperationPrint *print)
+{
+ GtkPrintStatus status;
+
+ status = gtk_print_operation_get_status (print->op);
+ if (status == GTK_PRINT_STATUS_GENERATING_DATA)
+ print->n_pages_to_print = gtk_print_operation_get_n_pages_to_print (print->op);
+}
+
+static void
+print_job_finished (EvJobPrint *job,
+ EvPrintOperationPrint *print)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (print);
+
+ gtk_print_operation_draw_page_finish (print->op);
+
+ print->total++;
+ ev_print_operation_update_status (op, print->total,
+ print->n_pages_to_print,
+ print->total / (gdouble)print->n_pages_to_print);
+ ev_job_print_set_cairo (job, NULL);
+}
+
+static void
+print_job_cancelled (EvJobPrint *job,
+ EvPrintOperationPrint *print)
+{
+ gtk_print_operation_cancel (print->op);
+}
+
+static void
+ev_print_operation_print_request_page_setup (EvPrintOperationPrint *print,
+ GtkPrintContext *context,
+ gint page_nr,
+ GtkPageSetup *setup)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (print);
+ gdouble width, height;
+ GtkPaperSize *paper_size;
+
+ ev_document_get_page_size (op->document, page_nr,
+ &width, &height);
+
+ if (print->use_source_size) {
+ paper_size = gtk_paper_size_new_custom ("custom", "custom",
+ width, height, GTK_UNIT_POINTS);
+ gtk_page_setup_set_paper_size_and_default_margins (setup, paper_size);
+ gtk_paper_size_free (paper_size);
+ }
+
+ if (print->autorotate) {
+ if (width > height)
+ gtk_page_setup_set_orientation (setup, GTK_PAGE_ORIENTATION_LANDSCAPE);
+ else
+ gtk_page_setup_set_orientation (setup, GTK_PAGE_ORIENTATION_PORTRAIT);
+ }
+}
+
+static void
+_print_context_get_hard_margins (GtkPrintContext *context,
+ gdouble *top,
+ gdouble *bottom,
+ gdouble *left,
+ gdouble *right)
+{
+ if (!gtk_print_context_get_hard_margins (context, top, bottom, left, right)) {
+ *top = 0;
+ *bottom = 0;
+ *left = 0;
+ *right = 0;
+ }
+}
+
+static void
+ev_print_operation_print_draw_page (EvPrintOperationPrint *print,
+ GtkPrintContext *context,
+ gint page)
+{
+ EvPrintOperation *op = EV_PRINT_OPERATION (print);
+ cairo_t *cr;
+ gdouble cr_width, cr_height;
+ gdouble width, height, scale;
+ gdouble x_scale, y_scale;
+ gdouble top, bottom, left, right;
+
+ gtk_print_operation_set_defer_drawing (print->op);
+
+ if (!print->job_print) {
+ print->job_print = ev_job_print_new (op->document);
+ g_signal_connect (G_OBJECT (print->job_print), "finished",
+ G_CALLBACK (print_job_finished),
+ (gpointer)print);
+ g_signal_connect (G_OBJECT (print->job_print), "cancelled",
+ G_CALLBACK (print_job_cancelled),
+ (gpointer)print);
+ }
+
+ ev_job_print_set_page (EV_JOB_PRINT (print->job_print), page);
+
+ cr = gtk_print_context_get_cairo_context (context);
+ cr_width = gtk_print_context_get_width (context);
+ cr_height = gtk_print_context_get_height (context);
+ ev_document_get_page_size (op->document, page, &width, &height);
+
+ if (print->page_scale == EV_SCALE_NONE) {
+ /* Center document page on the printed page */
+ if (print->autorotate)
+ cairo_translate (cr, (cr_width - width) / 2, (cr_height - height) / 2);
+ } else {
+ _print_context_get_hard_margins (context, &top, &bottom, &left, &right);
+
+ x_scale = (cr_width - left - right) / width;
+ y_scale = (cr_height - top - bottom) / height;
+
+ if (x_scale < y_scale)
+ scale = x_scale;
+ else
+ scale = y_scale;
+
+ if (print->autorotate) {
+ double left_right_sides, top_bottom_sides;
+
+ cairo_translate (cr, (cr_width - scale * width) / 2,
+ (cr_height - scale * height) / 2);
+
+ /* Ensure document page is within the margins. The
+ * scale guarantees the document will fit in the
+ * margins so we just need to check each side and
+ * if it overhangs the margin, translate it to the
+ * margin. */
+ left_right_sides = (cr_width - width*scale)/2;
+ top_bottom_sides = (cr_height - height*scale)/2;
+ if (left_right_sides < left)
+ cairo_translate (cr, left - left_right_sides, 0);
+
+ if (left_right_sides < right)
+ cairo_translate (cr, -(right - left_right_sides), 0);
+
+ if (top_bottom_sides < top)
+ cairo_translate (cr, 0, top - top_bottom_sides);
+
+ if (top_bottom_sides < bottom)
+ cairo_translate (cr, 0, -(bottom - top_bottom_sides));
+ } else {
+ cairo_translate (cr, left, top);
+ }
+
+ if (print->page_scale == EV_SCALE_FIT_TO_PRINTABLE_AREA || scale < 1.0) {
+ cairo_scale (cr, scale, scale);
+ }
+ }
+
+ ev_job_print_set_cairo (EV_JOB_PRINT (print->job_print), cr);
+ ev_job_scheduler_push_job (print->job_print, EV_JOB_PRIORITY_NONE);
+}
+
+static GObject *
+ev_print_operation_print_create_custom_widget (EvPrintOperationPrint *print,
+ GtkPrintContext *context)
+{
+ GtkPrintSettings *settings;
+ GtkWidget *label;
+ GtkWidget *table;
+ EvPrintScale page_scale;
+ gboolean autorotate;
+ gboolean use_source_size;
+
+ settings = gtk_print_operation_get_print_settings (print->op);
+ page_scale = gtk_print_settings_get_int_with_default (settings, EV_PRINT_SETTING_PAGE_SCALE, 1);
+ autorotate = gtk_print_settings_has_key (settings, EV_PRINT_SETTING_AUTOROTATE) ?
+ gtk_print_settings_get_bool (settings, EV_PRINT_SETTING_AUTOROTATE) :
+ TRUE;
+ use_source_size = gtk_print_settings_get_bool (settings, EV_PRINT_SETTING_PAGE_SIZE);
+
+ table = gtk_table_new (3, 2, FALSE);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+ gtk_table_set_col_spacings (GTK_TABLE (table), 12);
+ gtk_container_set_border_width (GTK_CONTAINER (table), 12);
+
+ label = gtk_label_new (_("Page Scaling:"));
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, 0, 0, 0);
+ gtk_widget_show (label);
+
+ print->scale_combo = gtk_combo_box_new_text ();
+ gtk_combo_box_append_text (GTK_COMBO_BOX (print->scale_combo), _("None"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (print->scale_combo), _("Shrink to Printable Area"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (print->scale_combo), _("Fit to Printable Area"));
+ gtk_combo_box_set_active (GTK_COMBO_BOX (print->scale_combo), page_scale);
+ gtk_widget_set_tooltip_text (print->scale_combo,
+ _("Scale document pages to fit the selected printer page. Select from one of the following:\n"
+ "\n"
+ "• \"None\": No page scaling is performed.\n"
+ "\n"
+ "• \"Shrink to Printable Area\": Document pages larger than the printable area"
+ " are reduced to fit the printable area of the printer page.\n"
+ "\n"
+ "• \"Fit to Printable Area\": Document pages are enlarged or reduced as"
+ " required to fit the printable area of the printer page.\n"));
+ gtk_table_attach (GTK_TABLE (table), print->scale_combo, 1, 2, 0, 1, GTK_FILL, 0, 0, 0);
+ gtk_widget_show (print->scale_combo);
+
+ print->autorotate_button = gtk_check_button_new_with_label (_("Auto Rotate and Center"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (print->autorotate_button), autorotate);
+ gtk_widget_set_tooltip_text (print->autorotate_button,
+ _("Rotate printer page orientation of each page to match orientation of each document page. "
+ "Document pages will be centered within the printer page."));
+ gtk_table_attach (GTK_TABLE (table), print->autorotate_button, 0, 2, 1, 2, GTK_FILL, 0, 0, 0);
+ gtk_widget_show (print->autorotate_button);
+
+ print->source_button = gtk_check_button_new_with_label (_("Select page size using document page size"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (print->source_button), use_source_size);
+ gtk_widget_set_tooltip_text (print->source_button, _("When enabled, each page will be printed on "
+ "the same size paper as the document page."));
+ gtk_table_attach (GTK_TABLE (table), print->source_button, 0, 2, 2, 3, GTK_FILL, 0, 0, 0);
+ gtk_widget_show (print->source_button);
+
+ return G_OBJECT (table);
+}
+
+static void
+ev_print_operation_print_custom_widget_apply (EvPrintOperationPrint *print,
+ GtkPrintContext *context)
+{
+ GtkPrintSettings *settings;
+
+ print->page_scale = gtk_combo_box_get_active (GTK_COMBO_BOX (print->scale_combo));
+ print->autorotate = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (print->autorotate_button));
+ print->use_source_size = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (print->source_button));
+ settings = gtk_print_operation_get_print_settings (print->op);
+ gtk_print_settings_set_int (settings, EV_PRINT_SETTING_PAGE_SCALE, print->page_scale);
+ gtk_print_settings_set_bool (settings, EV_PRINT_SETTING_AUTOROTATE, print->autorotate);
+ gtk_print_settings_set_bool (settings, EV_PRINT_SETTING_PAGE_SIZE, print->use_source_size);
+}
+
+static void
+ev_print_operation_print_finalize (GObject *object)
+{
+ EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (object);
+
+ if (print->op) {
+ g_object_unref (print->op);
+ print->op = NULL;
+ }
+
+ if (print->job_name) {
+ g_free (print->job_name);
+ print->job_name = NULL;
+ }
+
+ if (print->job_print) {
+ if (!ev_job_is_finished (print->job_print))
+ ev_job_cancel (print->job_print);
+ g_signal_handlers_disconnect_by_func (print->job_print,
+ print_job_finished,
+ print);
+ g_signal_handlers_disconnect_by_func (print->job_print,
+ print_job_cancelled,
+ print);
+ g_object_unref (print->job_print);
+ print->job_print = NULL;
+ }
+
+ (* G_OBJECT_CLASS (ev_print_operation_print_parent_class)->finalize) (object);
+}
+
+static void
+ev_print_operation_print_init (EvPrintOperationPrint *print)
+{
+ print->op = gtk_print_operation_new ();
+ g_signal_connect_swapped (print->op, "begin_print",
+ G_CALLBACK (ev_print_operation_print_begin_print),
+ print);
+ g_signal_connect_swapped (print->op, "done",
+ G_CALLBACK (ev_print_operation_print_done),
+ print);
+ g_signal_connect_swapped (print->op, "draw_page",
+ G_CALLBACK (ev_print_operation_print_draw_page),
+ print);
+ g_signal_connect_swapped (print->op, "status_changed",
+ G_CALLBACK (ev_print_operation_print_status_changed),
+ print);
+ g_signal_connect_swapped (print->op, "request_page_setup",
+ G_CALLBACK (ev_print_operation_print_request_page_setup),
+ print);
+ g_signal_connect_swapped (print->op, "create_custom_widget",
+ G_CALLBACK (ev_print_operation_print_create_custom_widget),
+ print);
+ g_signal_connect_swapped (print->op, "custom_widget_apply",
+ G_CALLBACK (ev_print_operation_print_custom_widget_apply),
+ print);
+ gtk_print_operation_set_allow_async (print->op, TRUE);
+ gtk_print_operation_set_use_full_page (print->op, TRUE);
+ gtk_print_operation_set_unit (print->op, GTK_UNIT_POINTS);
+ gtk_print_operation_set_custom_tab_label (print->op, _("Page Handling"));
+}
+
+static void
+ev_print_operation_print_class_init (EvPrintOperationPrintClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+ EvPrintOperationClass *ev_print_op_class = EV_PRINT_OPERATION_CLASS (klass);
+
+ ev_print_op_class->set_current_page = ev_print_operation_print_set_current_page;
+ ev_print_op_class->set_print_settings = ev_print_operation_print_set_print_settings;
+ ev_print_op_class->get_print_settings = ev_print_operation_print_get_print_settings;
+ ev_print_op_class->set_default_page_setup = ev_print_operation_print_set_default_page_setup;
+ ev_print_op_class->get_default_page_setup = ev_print_operation_print_get_default_page_setup;
+ ev_print_op_class->set_job_name = ev_print_operation_print_set_job_name;
+ ev_print_op_class->get_job_name = ev_print_operation_print_get_job_name;
+ ev_print_op_class->run = ev_print_operation_print_run;
+ ev_print_op_class->cancel = ev_print_operation_print_cancel;
+ ev_print_op_class->get_error = ev_print_operation_print_get_error;
+ ev_print_op_class->set_embed_page_setup = ev_print_operation_print_set_embed_page_setup;
+ ev_print_op_class->get_embed_page_setup = ev_print_operation_print_get_embed_page_setup;
+
+ g_object_class->finalize = ev_print_operation_print_finalize;
+}
+
+gboolean
+ev_print_operation_exists_for_document (EvDocument *document)
+{
+#if GTKUNIXPRINT_ENABLED
+ return (EV_IS_FILE_EXPORTER(document) || EV_IS_DOCUMENT_PRINT(document));
+#else
+ return EV_IS_DOCUMENT_PRINT(document);
+#endif /* GTKUNIXPRINT_ENABLED */
+}
+
+/* Factory method */
+EvPrintOperation *
+ev_print_operation_new (EvDocument *document)
+{
+ EvPrintOperation *op = NULL;
+
+ g_return_val_if_fail (ev_print_operation_exists_for_document (document), NULL);
+
+ if (EV_IS_DOCUMENT_PRINT (document))
+ op = EV_PRINT_OPERATION (g_object_new (EV_TYPE_PRINT_OPERATION_PRINT,
+ "document", document, NULL));
+ else
+#if GTKUNIXPRINT_ENABLED
+ op = EV_PRINT_OPERATION (g_object_new (EV_TYPE_PRINT_OPERATION_EXPORT,
+ "document", document, NULL));
+#else
+ op = NULL;
+#endif
+ return op;
+}
diff --git a/libview/ev-print-operation.h b/libview/ev-print-operation.h
new file mode 100644
index 00000000..c01a0995
--- /dev/null
+++ b/libview/ev-print-operation.h
@@ -0,0 +1,71 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-view.h> can be included directly."
+#endif
+
+#ifndef __EV_PRINT_OPERATION_H__
+#define __EV_PRINT_OPERATION_H__
+
+#include <gtk/gtk.h>
+#include <glib-object.h>
+
+#include <evince-document.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvPrintOperation EvPrintOperation;
+typedef struct _EvPrintOperationClass EvPrintOperationClass;
+
+#define EV_TYPE_PRINT_OPERATION (ev_print_operation_get_type())
+#define EV_PRINT_OPERATION(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_PRINT_OPERATION, EvPrintOperation))
+#define EV_PRINT_OPERATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_PRINT_OPERATION, EvPrintOperationClass))
+#define EV_IS_PRINT_OPERATION(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_PRINT_OPERATION))
+#define EV_PRINT_OPERATION_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_PRINT_OPERATION, EvPrintOperationClass))
+
+GType ev_print_operation_get_type (void) G_GNUC_CONST;
+
+gboolean ev_print_operation_exists_for_document (EvDocument *document);
+EvPrintOperation *ev_print_operation_new (EvDocument *document);
+void ev_print_operation_set_current_page (EvPrintOperation *op,
+ gint current_page);
+void ev_print_operation_set_print_settings (EvPrintOperation *op,
+ GtkPrintSettings *print_settings);
+GtkPrintSettings *ev_print_operation_get_print_settings (EvPrintOperation *op);
+void ev_print_operation_set_default_page_setup (EvPrintOperation *op,
+ GtkPageSetup *page_setup);
+GtkPageSetup *ev_print_operation_get_default_page_setup (EvPrintOperation *op);
+void ev_print_operation_set_job_name (EvPrintOperation *op,
+ const gchar *job_name);
+const gchar *ev_print_operation_get_job_name (EvPrintOperation *op);
+void ev_print_operation_run (EvPrintOperation *op,
+ GtkWindow *parent);
+void ev_print_operation_cancel (EvPrintOperation *op);
+void ev_print_operation_get_error (EvPrintOperation *op,
+ GError **error);
+void ev_print_operation_set_embed_page_setup (EvPrintOperation *op,
+ gboolean embed);
+gboolean ev_print_operation_get_embed_page_setup (EvPrintOperation *op);
+const gchar *ev_print_operation_get_status (EvPrintOperation *op);
+gdouble ev_print_operation_get_progress (EvPrintOperation *op);
+
+G_END_DECLS
+
+#endif /* __EV_PRINT_OPERATION_H__ */
diff --git a/libview/ev-stock-icons.c b/libview/ev-stock-icons.c
new file mode 100644
index 00000000..47b3943e
--- /dev/null
+++ b/libview/ev-stock-icons.c
@@ -0,0 +1,143 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* Stock icons for Evince
+ *
+ * Copyright (C) 2003 Martin Kretzschmar
+ *
+ * Author:
+ * Martin Kretzschmar <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include <gtk/gtk.h>
+
+#include "ev-stock-icons.h"
+
+typedef struct {
+ char *stock_id;
+ char *icon;
+} EvStockIcon;
+
+/* Evince stock icons */
+static const EvStockIcon stock_icons [] = {
+ { EV_STOCK_ZOOM, "zoom" },
+ { EV_STOCK_ZOOM_PAGE, "zoom-fit-height" },
+ { EV_STOCK_ZOOM_WIDTH, "zoom-fit-width" },
+ { EV_STOCK_VIEW_DUAL, "view-page-facing" },
+ { EV_STOCK_VIEW_CONTINUOUS, "view-page-continuous" },
+ { EV_STOCK_ROTATE_LEFT, "object-rotate-left"},
+ { EV_STOCK_ROTATE_RIGHT, "object-rotate-right"},
+ { EV_STOCK_RUN_PRESENTATION, "x-office-presentation"},
+ { EV_STOCK_VISIBLE, "eye"},
+ { EV_STOCK_RESIZE_SE, "resize-se"},
+ { EV_STOCK_RESIZE_SW, "resize-sw"},
+ { EV_STOCK_CLOSE, "close"},
+ { EV_STOCK_INVERTED_COLORS, "stock_filters-invert"},
+ { EV_STOCK_ATTACHMENT, "mail-attachment"}
+};
+
+static gchar *ev_icons_path;
+
+static void
+ev_stock_icons_add_icons_path_for_screen (GdkScreen *screen)
+{
+ GtkIconTheme *icon_theme;
+
+ g_return_if_fail (ev_icons_path != NULL);
+
+ icon_theme = screen ? gtk_icon_theme_get_for_screen (screen) : gtk_icon_theme_get_default ();
+ if (icon_theme) {
+ gchar **path = NULL;
+ gint n_paths;
+ gint i;
+
+ /* GtkIconTheme will then look in Evince custom hicolor dir
+ * for icons as well as the standard search paths
+ */
+ gtk_icon_theme_get_search_path (icon_theme, &path, &n_paths);
+ for (i = n_paths - 1; i >= 0; i--) {
+ if (g_ascii_strcasecmp (ev_icons_path, path[i]) == 0)
+ break;
+ }
+
+ if (i < 0)
+ gtk_icon_theme_append_search_path (icon_theme,
+ ev_icons_path);
+
+ g_strfreev (path);
+ }
+}
+
+/**
+ * ev_stock_icons_init:
+ *
+ * Creates a new icon factory, adding the base stock icons to it.
+ */
+void
+ev_stock_icons_init (void)
+{
+ GtkIconFactory *factory;
+ GtkIconSource *source;
+ gint i;
+#ifdef G_OS_WIN32
+ gchar *dir;
+
+ dir = g_win32_get_package_installation_directory_of_module (NULL);
+ ev_icons_path = g_build_filename (dir, "share", "evince", "icons", NULL);
+ g_free (dir);
+#else
+ ev_icons_path = g_build_filename (EVINCEDATADIR, "icons", NULL);
+#endif
+
+ factory = gtk_icon_factory_new ();
+ gtk_icon_factory_add_default (factory);
+
+ source = gtk_icon_source_new ();
+
+ for (i = 0; i < G_N_ELEMENTS (stock_icons); i++) {
+ GtkIconSet *set;
+
+ gtk_icon_source_set_icon_name (source, stock_icons [i].icon);
+
+ set = gtk_icon_set_new ();
+ gtk_icon_set_add_source (set, source);
+
+ gtk_icon_factory_add (factory, stock_icons [i].stock_id, set);
+ gtk_icon_set_unref (set);
+ }
+
+ gtk_icon_source_free (source);
+
+ g_object_unref (G_OBJECT (factory));
+
+ ev_stock_icons_add_icons_path_for_screen (gdk_screen_get_default ());
+}
+
+void
+ev_stock_icons_set_screen (GdkScreen *screen)
+{
+ g_return_if_fail (GDK_IS_SCREEN (screen));
+
+ ev_stock_icons_add_icons_path_for_screen (screen);
+}
+
+void
+ev_stock_icons_shutdown (void)
+{
+ g_free (ev_icons_path);
+}
+
diff --git a/libview/ev-stock-icons.h b/libview/ev-stock-icons.h
new file mode 100644
index 00000000..96ec26f6
--- /dev/null
+++ b/libview/ev-stock-icons.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* Stock icons for Evince
+ *
+ * Copyright (C) 2003 Martin Kretzschmar
+ *
+ * Author:
+ * Martin Kretzschmar <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-view.h> can be included directly."
+#endif
+
+#ifndef __EV_STOCK_ICONS_H__
+#define __EV_STOCK_ICONS_H__
+
+#include <gdk/gdk.h>
+
+G_BEGIN_DECLS
+
+/* Evince stock icons */
+#define EV_STOCK_ZOOM "zoom"
+#define EV_STOCK_ZOOM_PAGE "zoom-fit-height"
+#define EV_STOCK_ZOOM_WIDTH "zoom-fit-width"
+#define EV_STOCK_VIEW_DUAL "view-page-facing"
+#define EV_STOCK_VIEW_CONTINUOUS "view-page-continuous"
+#define EV_STOCK_ROTATE_LEFT "object-rotate-left"
+#define EV_STOCK_ROTATE_RIGHT "object-rotate-right"
+#define EV_STOCK_RUN_PRESENTATION "x-office-presentation"
+#define EV_STOCK_VISIBLE "eye"
+#define EV_STOCK_RESIZE_SE "resize-se"
+#define EV_STOCK_RESIZE_SW "resize-sw"
+#define EV_STOCK_CLOSE "close"
+#define EV_STOCK_INVERTED_COLORS "inverted"
+#define EV_STOCK_ATTACHMENT "mail-attachment"
+
+void ev_stock_icons_init (void);
+void ev_stock_icons_shutdown (void);
+void ev_stock_icons_set_screen (GdkScreen *screen);
+
+G_END_DECLS
+
+#endif /* __EV_STOCK_ICONS_H__ */
diff --git a/libview/ev-timeline.c b/libview/ev-timeline.c
new file mode 100644
index 00000000..7491d6cf
--- /dev/null
+++ b/libview/ev-timeline.c
@@ -0,0 +1,450 @@
+/* ev-timeline.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garnacho <[email protected]>
+ *
+ * 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.
+ */
+
+#include <glib.h>
+#include <math.h>
+#include <gdk/gdk.h>
+#include "ev-timeline.h"
+
+#define EV_TIMELINE_GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EV_TYPE_TIMELINE, EvTimelinePriv))
+#define MSECS_PER_SEC 1000
+#define FRAME_INTERVAL(nframes) (MSECS_PER_SEC / nframes)
+#define DEFAULT_FPS 30
+
+typedef struct EvTimelinePriv EvTimelinePriv;
+
+struct EvTimelinePriv {
+ guint duration;
+ guint fps;
+ guint source_id;
+
+ GTimer *timer;
+
+ guint loop : 1;
+};
+
+enum {
+ PROP_0,
+ PROP_FPS,
+ PROP_DURATION,
+ PROP_LOOP
+};
+
+enum {
+ STARTED,
+ PAUSED,
+ FINISHED,
+ FRAME,
+ LAST_SIGNAL
+};
+
+static guint signals [LAST_SIGNAL] = { 0, };
+
+
+G_DEFINE_TYPE (EvTimeline, ev_timeline, G_TYPE_OBJECT)
+
+
+static void
+ev_timeline_init (EvTimeline *timeline)
+{
+ EvTimelinePriv *priv;
+
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+
+ priv->fps = DEFAULT_FPS;
+ priv->duration = 0;
+}
+
+static void
+ev_timeline_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvTimeline *timeline;
+
+ timeline = EV_TIMELINE (object);
+
+ switch (prop_id) {
+ case PROP_FPS:
+ ev_timeline_set_fps (timeline, g_value_get_uint (value));
+ break;
+ case PROP_DURATION:
+ ev_timeline_set_duration (timeline, g_value_get_uint (value));
+ break;
+ case PROP_LOOP:
+ ev_timeline_set_loop (timeline, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_timeline_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvTimeline *timeline;
+ EvTimelinePriv *priv;
+
+ timeline = EV_TIMELINE (object);
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+
+ switch (prop_id) {
+ case PROP_FPS:
+ g_value_set_uint (value, priv->fps);
+ break;
+ case PROP_DURATION:
+ g_value_set_uint (value, priv->duration);
+ break;
+ case PROP_LOOP:
+ g_value_set_boolean (value, priv->loop);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_timeline_finalize (GObject *object)
+{
+ EvTimelinePriv *priv;
+
+ priv = EV_TIMELINE_GET_PRIV (object);
+
+ if (priv->source_id) {
+ g_source_remove (priv->source_id);
+ priv->source_id = 0;
+ }
+
+ if (priv->timer)
+ g_timer_destroy (priv->timer);
+
+ G_OBJECT_CLASS (ev_timeline_parent_class)->finalize (object);
+}
+
+static gboolean
+ev_timeline_run_frame (EvTimeline *timeline)
+{
+ EvTimelinePriv *priv;
+ gdouble progress;
+ guint elapsed_time;
+
+ GDK_THREADS_ENTER ();
+
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+
+ elapsed_time = (guint) (g_timer_elapsed (priv->timer, NULL) * 1000);
+ progress = (gdouble) elapsed_time / priv->duration;
+ progress = CLAMP (progress, 0., 1.);
+
+ g_signal_emit (timeline, signals [FRAME], 0, progress);
+
+ if (progress >= 1.0) {
+ if (!priv->loop) {
+ if (priv->source_id) {
+ g_source_remove (priv->source_id);
+ priv->source_id = 0;
+ }
+
+ g_signal_emit (timeline, signals [FINISHED], 0);
+ return FALSE;
+ } else {
+ ev_timeline_rewind (timeline);
+ }
+ }
+
+ GDK_THREADS_LEAVE ();
+
+ return TRUE;
+}
+
+static void
+ev_timeline_real_start (EvTimeline *timeline)
+{
+ EvTimelinePriv *priv;
+
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+
+ if (!priv->source_id) {
+ if (priv->timer)
+ g_timer_continue (priv->timer);
+ else
+ priv->timer = g_timer_new ();
+
+ /* sanity check */
+ g_assert (priv->fps > 0);
+
+ g_signal_emit (timeline, signals [STARTED], 0);
+
+ priv->source_id = g_timeout_add (FRAME_INTERVAL (priv->fps),
+ (GSourceFunc) ev_timeline_run_frame,
+ timeline);
+ }
+}
+
+static void
+ev_timeline_class_init (EvTimelineClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+ object_class->set_property = ev_timeline_set_property;
+ object_class->get_property = ev_timeline_get_property;
+ object_class->finalize = ev_timeline_finalize;
+
+ class->start = ev_timeline_real_start;
+
+ g_object_class_install_property (object_class,
+ PROP_FPS,
+ g_param_spec_uint ("fps",
+ "FPS",
+ "Frames per second for the timeline",
+ 1,
+ G_MAXUINT,
+ DEFAULT_FPS,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_DURATION,
+ g_param_spec_uint ("duration",
+ "Animation Duration",
+ "Animation Duration",
+ 0,
+ G_MAXUINT,
+ 0,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_LOOP,
+ g_param_spec_boolean ("loop",
+ "Loop",
+ "Whether the timeline loops or not",
+ FALSE,
+ G_PARAM_READWRITE));
+ signals[STARTED] =
+ g_signal_new ("started",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvTimelineClass, started),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals[PAUSED] =
+ g_signal_new ("paused",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvTimelineClass, paused),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals[FINISHED] =
+ g_signal_new ("finished",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvTimelineClass, finished),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals[FRAME] =
+ g_signal_new ("frame",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvTimelineClass, frame),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__DOUBLE,
+ G_TYPE_NONE, 1,
+ G_TYPE_DOUBLE);
+
+ g_type_class_add_private (class, sizeof (EvTimelinePriv));
+}
+
+EvTimeline *
+ev_timeline_new (guint duration)
+{
+ return g_object_new (EV_TYPE_TIMELINE,
+ "duration", duration,
+ NULL);
+}
+
+void
+ev_timeline_start (EvTimeline *timeline)
+{
+ g_return_if_fail (EV_IS_TIMELINE (timeline));
+
+ EV_TIMELINE_GET_CLASS (timeline)->start (timeline);
+}
+
+void
+ev_timeline_pause (EvTimeline *timeline)
+{
+ EvTimelinePriv *priv;
+
+ g_return_if_fail (EV_IS_TIMELINE (timeline));
+
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+
+ if (priv->source_id) {
+ g_source_remove (priv->source_id);
+ priv->source_id = 0;
+ g_timer_stop (priv->timer);
+ g_signal_emit (timeline, signals [PAUSED], 0);
+ }
+}
+
+void
+ev_timeline_rewind (EvTimeline *timeline)
+{
+ EvTimelinePriv *priv;
+
+ g_return_if_fail (EV_IS_TIMELINE (timeline));
+
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+
+ /* destroy and re-create timer if neccesary */
+ if (priv->timer) {
+ g_timer_destroy (priv->timer);
+
+ if (ev_timeline_is_running (timeline))
+ priv->timer = g_timer_new ();
+ else
+ priv->timer = NULL;
+ }
+}
+
+gboolean
+ev_timeline_is_running (EvTimeline *timeline)
+{
+ EvTimelinePriv *priv;
+
+ g_return_val_if_fail (EV_IS_TIMELINE (timeline), FALSE);
+
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+
+ return (priv->source_id != 0);
+}
+
+guint
+ev_timeline_get_fps (EvTimeline *timeline)
+{
+ EvTimelinePriv *priv;
+
+ g_return_val_if_fail (EV_IS_TIMELINE (timeline), 1);
+
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+ return priv->fps;
+}
+
+void
+ev_timeline_set_fps (EvTimeline *timeline,
+ guint fps)
+{
+ EvTimelinePriv *priv;
+
+ g_return_if_fail (EV_IS_TIMELINE (timeline));
+
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+
+ priv->fps = fps;
+
+ if (ev_timeline_is_running (timeline)) {
+ g_source_remove (priv->source_id);
+ priv->source_id = g_timeout_add (FRAME_INTERVAL (priv->fps),
+ (GSourceFunc) ev_timeline_run_frame,
+ timeline);
+ }
+
+ g_object_notify (G_OBJECT (timeline), "fps");
+}
+
+gboolean
+ev_timeline_get_loop (EvTimeline *timeline)
+{
+ EvTimelinePriv *priv;
+
+ g_return_val_if_fail (EV_IS_TIMELINE (timeline), FALSE);
+
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+ return priv->loop;
+}
+
+void
+ev_timeline_set_loop (EvTimeline *timeline,
+ gboolean loop)
+{
+ EvTimelinePriv *priv;
+
+ g_return_if_fail (EV_IS_TIMELINE (timeline));
+
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+ priv->loop = loop;
+
+ g_object_notify (G_OBJECT (timeline), "loop");
+}
+
+void
+ev_timeline_set_duration (EvTimeline *timeline,
+ guint duration)
+{
+ EvTimelinePriv *priv;
+
+ g_return_if_fail (EV_IS_TIMELINE (timeline));
+
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+
+ priv->duration = duration;
+
+ g_object_notify (G_OBJECT (timeline), "duration");
+}
+
+guint
+ev_timeline_get_duration (EvTimeline *timeline)
+{
+ EvTimelinePriv *priv;
+
+ g_return_val_if_fail (EV_IS_TIMELINE (timeline), 0);
+
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+
+ return priv->duration;
+}
+
+gdouble
+ev_timeline_get_progress (EvTimeline *timeline)
+{
+ EvTimelinePriv *priv;
+ gdouble progress;
+ guint elapsed_time;
+
+ g_return_val_if_fail (EV_IS_TIMELINE (timeline), 0.0);
+
+ priv = EV_TIMELINE_GET_PRIV (timeline);
+
+ if (!priv->timer)
+ return 0.;
+
+ elapsed_time = (guint) (g_timer_elapsed (priv->timer, NULL) * 1000);
+ progress = (gdouble) elapsed_time / priv->duration;
+
+ return CLAMP (progress, 0., 1.);
+}
diff --git a/libview/ev-timeline.h b/libview/ev-timeline.h
new file mode 100644
index 00000000..e7f9d625
--- /dev/null
+++ b/libview/ev-timeline.h
@@ -0,0 +1,90 @@
+/* ev-timeline.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garnacho <[email protected]>
+ *
+ * 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.
+ */
+
+#if !defined (EVINCE_COMPILATION)
+#error "This is a private header."
+#endif
+
+#ifndef __EV_TIMELINE_H__
+#define __EV_TIMELINE_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_TIMELINE (ev_timeline_get_type ())
+#define EV_TIMELINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_TIMELINE, EvTimeline))
+#define EV_TIMELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_TIMELINE, EvTimelineClass))
+#define EV_IS_TIMELINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_TIMELINE))
+#define EV_IS_TIMELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EV_TYPE_TIMELINE))
+#define EV_TIMELINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EV_TYPE_TIMELINE, EvTimelineClass))
+
+typedef struct EvTimeline EvTimeline;
+typedef struct EvTimelineClass EvTimelineClass;
+
+struct EvTimeline {
+ GObject parent_instance;
+};
+
+struct EvTimelineClass {
+ GObjectClass parent_class;
+
+ /* vmethods */
+ void (* start) (EvTimeline *timeline);
+
+ /* signals */
+ void (* started) (EvTimeline *timeline);
+ void (* finished) (EvTimeline *timeline);
+ void (* paused) (EvTimeline *timeline);
+
+ void (* frame) (EvTimeline *timeline,
+ gdouble progress);
+};
+
+
+GType ev_timeline_get_type (void) G_GNUC_CONST;
+
+EvTimeline *ev_timeline_new (guint duration);
+
+void ev_timeline_start (EvTimeline *timeline);
+void ev_timeline_pause (EvTimeline *timeline);
+void ev_timeline_rewind (EvTimeline *timeline);
+
+gboolean ev_timeline_is_running (EvTimeline *timeline);
+
+guint ev_timeline_get_fps (EvTimeline *timeline);
+void ev_timeline_set_fps (EvTimeline *timeline,
+ guint fps);
+
+gboolean ev_timeline_get_loop (EvTimeline *timeline);
+void ev_timeline_set_loop (EvTimeline *timeline,
+ gboolean loop);
+
+guint ev_timeline_get_duration (EvTimeline *timeline);
+void ev_timeline_set_duration (EvTimeline *timeline,
+ guint duration);
+
+gdouble ev_timeline_get_progress (EvTimeline *timeline);
+
+
+G_END_DECLS
+
+#endif /* __EV_TIMELINE_H__ */
diff --git a/libview/ev-transition-animation.c b/libview/ev-transition-animation.c
new file mode 100644
index 00000000..a767019b
--- /dev/null
+++ b/libview/ev-transition-animation.c
@@ -0,0 +1,676 @@
+/* ev-transition-animation.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garnacho <[email protected]>
+ *
+ * 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.
+ */
+
+#include <cairo.h>
+#include <gdk/gdk.h>
+#include "ev-transition-animation.h"
+#include "ev-timeline.h"
+
+#define EV_TRANSITION_ANIMATION_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EV_TYPE_TRANSITION_ANIMATION, EvTransitionAnimationPriv))
+#define N_BLINDS 6
+
+typedef struct EvTransitionAnimationPriv EvTransitionAnimationPriv;
+
+struct EvTransitionAnimationPriv {
+ EvTransitionEffect *effect;
+ cairo_surface_t *origin_surface;
+ cairo_surface_t *dest_surface;
+};
+
+enum {
+ PROP_0,
+ PROP_EFFECT,
+ PROP_ORIGIN_SURFACE,
+ PROP_DEST_SURFACE
+};
+
+
+G_DEFINE_TYPE (EvTransitionAnimation, ev_transition_animation, EV_TYPE_TIMELINE)
+
+
+static void
+ev_transition_animation_init (EvTransitionAnimation *animation)
+{
+}
+
+static void
+ev_transition_animation_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvTransitionAnimationPriv *priv;
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_EFFECT:
+ if (priv->effect)
+ g_object_unref (priv->effect);
+
+ priv->effect = g_value_dup_object (value);
+ break;
+ case PROP_ORIGIN_SURFACE:
+ ev_transition_animation_set_origin_surface (EV_TRANSITION_ANIMATION (object),
+ g_value_get_pointer (value));
+ break;
+ case PROP_DEST_SURFACE:
+ ev_transition_animation_set_dest_surface (EV_TRANSITION_ANIMATION (object),
+ g_value_get_pointer (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_transition_animation_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvTransitionAnimationPriv *priv;
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (object);
+
+ switch (prop_id) {
+ case PROP_EFFECT:
+ g_value_set_object (value, priv->effect);
+ break;
+ case PROP_ORIGIN_SURFACE:
+ g_value_set_pointer (value, priv->origin_surface);
+ break;
+ case PROP_DEST_SURFACE:
+ g_value_set_pointer (value, priv->dest_surface);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_transition_animation_finalize (GObject *object)
+{
+ EvTransitionAnimationPriv *priv;
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (object);
+
+ if (priv->effect)
+ g_object_unref (priv->effect);
+
+ if (priv->origin_surface)
+ cairo_surface_destroy (priv->origin_surface);
+
+ if (priv->dest_surface)
+ cairo_surface_destroy (priv->dest_surface);
+
+ G_OBJECT_CLASS (ev_transition_animation_parent_class)->finalize (object);
+}
+
+static GObject *
+ev_transition_animation_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ EvTransitionAnimationPriv *priv;
+ EvTransitionEffect *effect;
+ gint duration;
+
+ object = G_OBJECT_CLASS (ev_transition_animation_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_params);
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (object);
+ effect = priv->effect;
+
+ g_object_get (effect, "duration", &duration, NULL);
+ ev_timeline_set_duration (EV_TIMELINE (object), duration * 1000);
+
+ return object;
+}
+
+static void
+ev_transition_animation_class_init (EvTransitionAnimationClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->set_property = ev_transition_animation_set_property;
+ object_class->get_property = ev_transition_animation_get_property;
+ object_class->finalize = ev_transition_animation_finalize;
+ object_class->constructor = ev_transition_animation_constructor;
+
+ g_object_class_install_property (object_class,
+ PROP_EFFECT,
+ g_param_spec_object ("effect",
+ "Effect",
+ "Transition effect description",
+ EV_TYPE_TRANSITION_EFFECT,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_ORIGIN_SURFACE,
+ g_param_spec_pointer ("origin-surface",
+ "Origin surface",
+ "Cairo surface from which the animation will happen",
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_DEST_SURFACE,
+ g_param_spec_pointer ("dest-surface",
+ "Destination surface",
+ "Cairo surface to which the animation will happen",
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (klass, sizeof (EvTransitionAnimationPriv));
+}
+
+static void
+paint_surface (cairo_t *cr,
+ cairo_surface_t *surface,
+ gdouble x_offset,
+ gdouble y_offset,
+ gdouble alpha,
+ GdkRectangle page_area)
+{
+ cairo_save (cr);
+
+ gdk_cairo_rectangle (cr, &page_area);
+ cairo_clip (cr);
+ cairo_surface_set_device_offset (surface, x_offset, y_offset);
+ cairo_set_source_surface (cr, surface, 0, 0);
+
+ if (alpha == 1.)
+ cairo_paint (cr);
+ else
+ cairo_paint_with_alpha (cr, alpha);
+
+ cairo_restore (cr);
+}
+
+/* animations */
+static void
+ev_transition_animation_split (cairo_t *cr,
+ EvTransitionAnimation *animation,
+ EvTransitionEffect *effect,
+ gdouble progress,
+ GdkRectangle page_area)
+{
+ EvTransitionAnimationPriv *priv;
+ EvTransitionEffectAlignment alignment;
+ EvTransitionEffectDirection direction;
+ gint width, height;
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+ width = page_area.width;
+ height = page_area.height;
+
+ g_object_get (effect,
+ "alignment", &alignment,
+ "direction", &direction,
+ NULL);
+
+ if (direction == EV_TRANSITION_DIRECTION_INWARD) {
+ paint_surface (cr, priv->dest_surface, 0, 0, 1., page_area);
+
+ if (alignment == EV_TRANSITION_ALIGNMENT_HORIZONTAL) {
+ cairo_rectangle (cr,
+ 0,
+ height * progress / 2,
+ width,
+ height * (1 - progress));
+ } else {
+ cairo_rectangle (cr,
+ width * progress / 2,
+ 0,
+ width * (1 - progress),
+ height);
+ }
+
+ cairo_clip (cr);
+
+ paint_surface (cr, priv->origin_surface, 0, 0, 1., page_area);
+ } else {
+ paint_surface (cr, priv->origin_surface, 0, 0, 1., page_area);
+
+ if (alignment == EV_TRANSITION_ALIGNMENT_HORIZONTAL) {
+ cairo_rectangle (cr,
+ 0,
+ (height / 2) - (height * progress / 2),
+ width,
+ height * progress);
+ } else {
+ cairo_rectangle (cr,
+ (width / 2) - (width * progress / 2),
+ 0,
+ width * progress,
+ height);
+ }
+
+ cairo_clip (cr);
+
+ paint_surface (cr, priv->dest_surface, 0, 0, 1., page_area);
+ }
+}
+
+static void
+ev_transition_animation_blinds (cairo_t *cr,
+ EvTransitionAnimation *animation,
+ EvTransitionEffect *effect,
+ gdouble progress,
+ GdkRectangle page_area)
+{
+ EvTransitionAnimationPriv *priv;
+ EvTransitionEffectAlignment alignment;
+ gint width, height, i;
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+ width = page_area.width;
+ height = page_area.height;
+
+ g_object_get (effect,
+ "alignment", &alignment,
+ NULL);
+
+ paint_surface (cr, priv->origin_surface, 0, 0, 1., page_area);
+
+ for (i = 0; i < N_BLINDS; i++) {
+ cairo_save (cr);
+
+ if (alignment == EV_TRANSITION_ALIGNMENT_HORIZONTAL) {
+ cairo_rectangle (cr,
+ 0,
+ height / N_BLINDS * i,
+ width,
+ height / N_BLINDS * progress);
+ } else {
+ cairo_rectangle (cr,
+ width / N_BLINDS * i,
+ 0,
+ width / N_BLINDS * progress,
+ height);
+ }
+
+ cairo_clip (cr);
+ paint_surface (cr, priv->dest_surface, 0, 0, 1., page_area);
+ cairo_restore (cr);
+ }
+}
+
+static void
+ev_transition_animation_box (cairo_t *cr,
+ EvTransitionAnimation *animation,
+ EvTransitionEffect *effect,
+ gdouble progress,
+ GdkRectangle page_area)
+{
+ EvTransitionAnimationPriv *priv;
+ EvTransitionEffectDirection direction;
+ gint width, height;
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+ width = page_area.width;
+ height = page_area.height;
+
+ g_object_get (effect,
+ "direction", &direction,
+ NULL);
+
+ if (direction == EV_TRANSITION_DIRECTION_INWARD) {
+ paint_surface (cr, priv->dest_surface, 0, 0, 1., page_area);
+
+ cairo_rectangle (cr,
+ width * progress / 2,
+ height * progress / 2,
+ width * (1 - progress),
+ height * (1 - progress));
+ cairo_clip (cr);
+
+ paint_surface (cr, priv->origin_surface, 0, 0, 1., page_area);
+ } else {
+ paint_surface (cr, priv->origin_surface, 0, 0, 1., page_area);
+
+ cairo_rectangle (cr,
+ (width / 2) - (width * progress / 2),
+ (height / 2) - (height * progress / 2),
+ width * progress,
+ height * progress);
+ cairo_clip (cr);
+
+ paint_surface (cr, priv->dest_surface, 0, 0, 1., page_area);
+ }
+}
+
+static void
+ev_transition_animation_wipe (cairo_t *cr,
+ EvTransitionAnimation *animation,
+ EvTransitionEffect *effect,
+ gdouble progress,
+ GdkRectangle page_area)
+{
+ EvTransitionAnimationPriv *priv;
+ gint width, height;
+ gint angle;
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+ width = page_area.width;
+ height = page_area.height;
+
+ g_object_get (effect,
+ "angle", &angle,
+ NULL);
+
+ paint_surface (cr, priv->origin_surface, 0, 0, 1., page_area);
+
+ if (angle == 0) {
+ /* left to right */
+ cairo_rectangle (cr,
+ 0, 0,
+ width * progress,
+ height);
+ } else if (angle <= 90) {
+ /* bottom to top */
+ cairo_rectangle (cr,
+ 0,
+ height * (1 - progress),
+ width,
+ height * progress);
+ } else if (angle <= 180) {
+ /* right to left */
+ cairo_rectangle (cr,
+ width * (1 - progress),
+ 0,
+ width * progress,
+ height);
+ } else if (angle <= 270) {
+ /* top to bottom */
+ cairo_rectangle (cr,
+ 0, 0,
+ width,
+ height * progress);
+ }
+
+ cairo_clip (cr);
+
+ paint_surface (cr, priv->dest_surface, 0, 0, 1., page_area);
+}
+
+static void
+ev_transition_animation_dissolve (cairo_t *cr,
+ EvTransitionAnimation *animation,
+ EvTransitionEffect *effect,
+ gdouble progress,
+ GdkRectangle page_area)
+{
+ EvTransitionAnimationPriv *priv;
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+
+ paint_surface (cr, priv->dest_surface, 0, 0, 1., page_area);
+ paint_surface (cr, priv->origin_surface, 0, 0, 1 - progress, page_area);
+}
+
+static void
+ev_transition_animation_push (cairo_t *cr,
+ EvTransitionAnimation *animation,
+ EvTransitionEffect *effect,
+ gdouble progress,
+ GdkRectangle page_area)
+{
+ EvTransitionAnimationPriv *priv;
+ gint width, height;
+ gint angle;
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+ width = page_area.width;
+ height = page_area.height;
+
+ g_object_get (effect,
+ "angle", &angle,
+ NULL);
+
+ if (angle == 0) {
+ /* left to right */
+ paint_surface (cr, priv->origin_surface, - (width * progress), 0, 1., page_area);
+ paint_surface (cr, priv->dest_surface, width * (1 - progress), 0, 1., page_area);
+ } else {
+ /* top to bottom */
+ paint_surface (cr, priv->origin_surface, 0, - (height * progress), 1., page_area);
+ paint_surface (cr, priv->dest_surface, 0, height * (1 - progress), 1., page_area);
+ }
+}
+
+static void
+ev_transition_animation_cover (cairo_t *cr,
+ EvTransitionAnimation *animation,
+ EvTransitionEffect *effect,
+ gdouble progress,
+ GdkRectangle page_area)
+{
+ EvTransitionAnimationPriv *priv;
+ gint width, height;
+ gint angle;
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+ width = page_area.width;
+ height = page_area.height;
+
+ g_object_get (effect,
+ "angle", &angle,
+ NULL);
+
+ paint_surface (cr, priv->origin_surface, 0, 0, 1., page_area);
+
+ if (angle == 0) {
+ /* left to right */
+ paint_surface (cr, priv->dest_surface, width * (1 - progress), 0, 1., page_area);
+ } else {
+ /* top to bottom */
+ paint_surface (cr, priv->dest_surface, 0, height * (1 - progress), 1., page_area);
+ }
+}
+
+static void
+ev_transition_animation_uncover (cairo_t *cr,
+ EvTransitionAnimation *animation,
+ EvTransitionEffect *effect,
+ gdouble progress,
+ GdkRectangle page_area)
+{
+ EvTransitionAnimationPriv *priv;
+ gint width, height;
+ gint angle;
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+ width = page_area.width;
+ height = page_area.height;
+
+ g_object_get (effect,
+ "angle", &angle,
+ NULL);
+
+ paint_surface (cr, priv->dest_surface, 0, 0, 1., page_area);
+
+ if (angle == 0) {
+ /* left to right */
+ paint_surface (cr, priv->origin_surface, - (width * progress), 0, 1., page_area);
+ } else {
+ /* top to bottom */
+ paint_surface (cr, priv->origin_surface, 0, - (height * progress), 1., page_area);
+ }
+}
+
+static void
+ev_transition_animation_fade (cairo_t *cr,
+ EvTransitionAnimation *animation,
+ EvTransitionEffect *effect,
+ gdouble progress,
+ GdkRectangle page_area)
+{
+ EvTransitionAnimationPriv *priv;
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+
+ paint_surface (cr, priv->origin_surface, 0, 0, 1., page_area);
+ paint_surface (cr, priv->dest_surface, 0, 0, progress, page_area);
+}
+
+void
+ev_transition_animation_paint (EvTransitionAnimation *animation,
+ cairo_t *cr,
+ GdkRectangle page_area)
+{
+ EvTransitionAnimationPriv *priv;
+ EvTransitionEffectType type;
+ gdouble progress;
+
+ g_return_if_fail (EV_IS_TRANSITION_ANIMATION (animation));
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+
+ if (!priv->dest_surface) {
+ /* animation is still not ready, paint the origin surface */
+ paint_surface (cr, priv->origin_surface, 0, 0, 1., page_area);
+ return;
+ }
+
+ g_object_get (priv->effect, "type", &type, NULL);
+ progress = ev_timeline_get_progress (EV_TIMELINE (animation));
+
+ switch (type) {
+ case EV_TRANSITION_EFFECT_REPLACE:
+ /* just paint the destination slide */
+ paint_surface (cr, priv->dest_surface, 0, 0, 1., page_area);
+ break;
+ case EV_TRANSITION_EFFECT_SPLIT:
+ ev_transition_animation_split (cr, animation, priv->effect, progress, page_area);
+ break;
+ case EV_TRANSITION_EFFECT_BLINDS:
+ ev_transition_animation_blinds (cr, animation, priv->effect, progress, page_area);
+ break;
+ case EV_TRANSITION_EFFECT_BOX:
+ ev_transition_animation_box (cr, animation, priv->effect, progress, page_area);
+ break;
+ case EV_TRANSITION_EFFECT_WIPE:
+ ev_transition_animation_wipe (cr, animation, priv->effect, progress, page_area);
+ break;
+ case EV_TRANSITION_EFFECT_DISSOLVE:
+ ev_transition_animation_dissolve (cr, animation, priv->effect, progress, page_area);
+ break;
+ case EV_TRANSITION_EFFECT_PUSH:
+ ev_transition_animation_push (cr, animation, priv->effect, progress, page_area);
+ break;
+ case EV_TRANSITION_EFFECT_COVER:
+ ev_transition_animation_cover (cr, animation, priv->effect, progress, page_area);
+ break;
+ case EV_TRANSITION_EFFECT_UNCOVER:
+ ev_transition_animation_uncover (cr, animation, priv->effect, progress, page_area);
+ break;
+ case EV_TRANSITION_EFFECT_FADE:
+ ev_transition_animation_fade (cr, animation, priv->effect, progress, page_area);
+ break;
+ default: {
+ GEnumValue *enum_value;
+
+ enum_value = g_enum_get_value (g_type_class_peek (EV_TYPE_TRANSITION_EFFECT_TYPE), type);
+
+ g_warning ("Unimplemented transition animation: '%s', "
+ "please post a bug report in Evince bugzilla "
+ "(http://bugzilla.mate.org) with a testcase.",
+ enum_value->value_nick);
+
+ /* just paint the destination slide */
+ paint_surface (cr, priv->dest_surface, 0, 0, 1., page_area);
+ }
+ }
+}
+
+EvTransitionAnimation *
+ev_transition_animation_new (EvTransitionEffect *effect)
+{
+ g_return_val_if_fail (EV_IS_TRANSITION_EFFECT (effect), NULL);
+
+ return g_object_new (EV_TYPE_TRANSITION_ANIMATION,
+ "effect", effect,
+ NULL);
+}
+
+void
+ev_transition_animation_set_origin_surface (EvTransitionAnimation *animation,
+ cairo_surface_t *origin_surface)
+{
+ EvTransitionAnimationPriv *priv;
+ cairo_surface_t *surface;
+
+ g_return_if_fail (EV_IS_TRANSITION_ANIMATION (animation));
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+
+ if (priv->origin_surface == origin_surface)
+ return;
+
+ surface = cairo_surface_reference (origin_surface);
+
+ if (priv->origin_surface)
+ cairo_surface_destroy (priv->origin_surface);
+
+ priv->origin_surface = surface;
+ g_object_notify (G_OBJECT (animation), "origin-surface");
+
+ if (priv->origin_surface && priv->dest_surface)
+ ev_timeline_start (EV_TIMELINE (animation));
+}
+
+void
+ev_transition_animation_set_dest_surface (EvTransitionAnimation *animation,
+ cairo_surface_t *dest_surface)
+{
+ EvTransitionAnimationPriv *priv;
+ cairo_surface_t *surface;
+
+ g_return_if_fail (EV_IS_TRANSITION_ANIMATION (animation));
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+
+ if (priv->dest_surface == dest_surface)
+ return;
+
+ surface = cairo_surface_reference (dest_surface);
+
+ if (priv->dest_surface)
+ cairo_surface_destroy (priv->dest_surface);
+
+ priv->dest_surface = surface;
+ g_object_notify (G_OBJECT (animation), "dest-surface");
+
+ if (priv->origin_surface && priv->dest_surface)
+ ev_timeline_start (EV_TIMELINE (animation));
+}
+
+gboolean
+ev_transition_animation_ready (EvTransitionAnimation *animation)
+{
+ EvTransitionAnimationPriv *priv;
+
+ g_return_val_if_fail (EV_IS_TRANSITION_ANIMATION (animation), FALSE);
+
+ priv = EV_TRANSITION_ANIMATION_GET_PRIVATE (animation);
+
+ return (priv->origin_surface != NULL);
+}
diff --git a/libview/ev-transition-animation.h b/libview/ev-transition-animation.h
new file mode 100644
index 00000000..3d17f28d
--- /dev/null
+++ b/libview/ev-transition-animation.h
@@ -0,0 +1,73 @@
+/* ev-transition-animation.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garnacho <[email protected]>
+ *
+ * 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.
+ */
+
+#if !defined (EVINCE_COMPILATION)
+#error "This is a private header."
+#endif
+
+#ifndef __EV_TRANSITION_ANIMATION_H__
+#define __EV_TRANSITION_ANIMATION_H__
+
+#include <evince-document.h>
+#include "ev-timeline.h"
+#include "ev-transition-effect.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_TRANSITION_ANIMATION (ev_transition_animation_get_type ())
+#define EV_TRANSITION_ANIMATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_TRANSITION_ANIMATION, EvTransitionAnimation))
+#define EV_TRANSITION_ANIMATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_TRANSITION_ANIMATION, EvTransitionAnimationClass))
+#define EV_IS_TRANSITION_ANIMATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_TRANSITION_ANIMATION))
+#define EV_IS_TRANSITION_ANIMATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EV_TYPE_TRANSITION_ANIMATION))
+#define EV_TRANSITION_ANIMATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EV_TYPE_TRANSITION_ANIMATION, EvTransitionAnimationClass))
+
+typedef struct EvTransitionAnimation EvTransitionAnimation;
+typedef struct EvTransitionAnimationClass EvTransitionAnimationClass;
+
+struct EvTransitionAnimation {
+ EvTimeline parent_instance;
+};
+
+struct EvTransitionAnimationClass {
+ EvTimelineClass parent_class;
+};
+
+
+GType ev_transition_animation_get_type (void) G_GNUC_CONST;
+
+EvTransitionAnimation * ev_transition_animation_new (EvTransitionEffect *effect);
+
+void ev_transition_animation_set_origin_surface (EvTransitionAnimation *animation,
+ cairo_surface_t *origin_surface);
+void ev_transition_animation_set_dest_surface (EvTransitionAnimation *animation,
+ cairo_surface_t *origin_surface);
+gint ev_transition_animation_get_page_from (EvTransitionAnimation *animation);
+gint ev_transition_animation_get_page_to (EvTransitionAnimation *animation);
+
+void ev_transition_animation_paint (EvTransitionAnimation *animation,
+ cairo_t *cr,
+ GdkRectangle page_area);
+gboolean ev_transition_animation_ready (EvTransitionAnimation *animation);
+
+
+G_END_DECLS
+
+#endif /* __EV_TRANSITION_ANIMATION_H__ */
diff --git a/libview/ev-view-accessible.c b/libview/ev-view-accessible.c
new file mode 100644
index 00000000..9b41c919
--- /dev/null
+++ b/libview/ev-view-accessible.c
@@ -0,0 +1,911 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 <math.h>
+#include <config.h>
+#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
+#include <libgail-util/gail-util.h>
+
+#include "ev-selection.h"
+#include "ev-page-cache.h"
+#include "ev-view-accessible.h"
+#include "ev-view-private.h"
+
+#define EV_TYPE_VIEW_ACCESSIBLE (ev_view_accessible_get_type ())
+#define EV_VIEW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_VIEW_ACCESSIBLE, EvViewAccessible))
+#define EV_IS_VIEW_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_VIEW_ACCESSIBLE))
+
+static GType ev_view_accessible_get_type (void);
+
+enum {
+ ACTION_SCROLL_UP,
+ ACTION_SCROLL_DOWN,
+ LAST_ACTION
+};
+
+static const gchar *const ev_view_accessible_action_names[] =
+{
+ N_("Scroll Up"),
+ N_("Scroll Down"),
+ NULL
+};
+
+static const gchar *const ev_view_accessible_action_descriptions[] =
+{
+ N_("Scroll View Up"),
+ N_("Scroll View Down"),
+ NULL
+};
+
+typedef struct {
+ /* Action */
+ gchar *action_descriptions[LAST_ACTION];
+ guint action_idle_handler;
+ GtkScrollType idle_scroll;
+ GtkTextBuffer *buffer;
+ guint current_page;
+} EvViewAccessiblePriv;
+
+typedef GtkAccessibleClass EvViewAccessibleClass;
+typedef GtkAccessible EvViewAccessible;
+
+#define EV_VIEW_ACCESSIBLE_GET_PRIVATE(inst) (G_TYPE_INSTANCE_GET_PRIVATE ((inst), EV_TYPE_VIEW_ACCESSIBLE, EvViewAccessiblePriv))
+
+static void
+ev_view_accessible_finalize (GObject *object)
+{
+ EvViewAccessiblePriv *priv = EV_VIEW_ACCESSIBLE_GET_PRIVATE (object);
+ int i;
+
+ if (priv->action_idle_handler)
+ g_source_remove (priv->action_idle_handler);
+ for (i = 0; i < LAST_ACTION; i++)
+ g_free (priv->action_descriptions [i]);
+ if (priv->buffer)
+ g_object_unref (priv->buffer);
+
+}
+
+static void ev_view_accessible_class_init (EvViewAccessibleClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = ev_view_accessible_finalize;
+
+ g_type_class_add_private (klass, sizeof (EvViewAccessiblePriv));
+}
+
+static GtkTextBuffer *
+ev_view_accessible_get_text_buffer (EvViewAccessible *accessible, EvView *view)
+{
+ EvPageCache *page_cache;
+ const gchar *retval = NULL;
+ EvViewAccessiblePriv* priv = EV_VIEW_ACCESSIBLE_GET_PRIVATE (accessible);
+
+ page_cache = view->page_cache;
+ if (!page_cache) {
+ return NULL;
+ }
+
+ if (view->current_page == priv->current_page && priv->buffer) {
+ return priv->buffer;
+ }
+
+ priv->current_page = view->current_page;
+
+ if (!priv->buffer) {
+ priv->buffer = gtk_text_buffer_new (NULL);
+ }
+
+ retval = ev_page_cache_get_text (page_cache, view->current_page);
+ gtk_text_buffer_set_text (priv->buffer, retval, -1);
+
+ return priv->buffer;
+}
+
+static gchar*
+ev_view_accessible_get_text (AtkText *text,
+ gint start_pos,
+ gint end_pos)
+{
+ GtkWidget *widget;
+ GtkTextIter start, end;
+ GtkTextBuffer *buffer;
+ gchar *retval;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return NULL;
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return NULL;
+
+ gtk_text_buffer_get_iter_at_offset (buffer, &start, start_pos);
+ gtk_text_buffer_get_iter_at_offset (buffer, &end, end_pos);
+ retval = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+
+ return retval;
+}
+
+static gunichar
+ev_view_accessible_get_character_at_offset (AtkText *text,
+ gint offset)
+{
+ GtkWidget *widget;
+ GtkTextIter start, end;
+ GtkTextBuffer *buffer;
+ gchar *string;
+ gunichar unichar;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return '\0';
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return '\0';
+
+ if (offset >= gtk_text_buffer_get_char_count (buffer))
+ return '\0';
+
+ gtk_text_buffer_get_iter_at_offset (buffer, &start, offset);
+ end = start;
+ gtk_text_iter_forward_char (&end);
+ string = gtk_text_buffer_get_slice (buffer, &start, &end, FALSE);
+ unichar = g_utf8_get_char (string);
+ g_free(string);
+
+ return unichar;
+}
+
+static gchar*
+ev_view_accessible_get_text_before_offset (AtkText *text,
+ gint offset,
+ AtkTextBoundary boundary_type,
+ gint *start_offset,
+ gint *end_offset)
+{
+ GtkWidget *widget;
+ gpointer layout = NULL;
+ GailTextUtil *gail_text = NULL;
+ gchar *retval = NULL;
+ GtkTextBuffer *buffer;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return NULL;
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return NULL;
+
+ gail_text = gail_text_util_new ();
+ gail_text_util_buffer_setup (gail_text, buffer);
+ retval = gail_text_util_get_text (gail_text, layout,
+ GAIL_BEFORE_OFFSET, boundary_type,
+ offset, start_offset, end_offset);
+ g_object_unref (gail_text);
+
+ return retval;
+}
+
+static gchar*
+ev_view_accessible_get_text_at_offset (AtkText *text,
+ gint offset,
+ AtkTextBoundary boundary_type,
+ gint *start_offset,
+ gint *end_offset)
+{
+ GtkWidget *widget;
+ gpointer layout = NULL;
+ GailTextUtil *gail_text = NULL;
+ gchar *retval = NULL;
+ GtkTextBuffer *buffer;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return NULL;
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return NULL;
+
+ gail_text = gail_text_util_new ();
+ gail_text_util_buffer_setup (gail_text, buffer);
+ retval = gail_text_util_get_text (gail_text, layout,
+ GAIL_AT_OFFSET, boundary_type,
+ offset, start_offset, end_offset);
+ g_object_unref (gail_text);
+
+ return retval;
+}
+
+static gchar*
+ev_view_accessible_get_text_after_offset (AtkText *text,
+ gint offset,
+ AtkTextBoundary boundary_type,
+ gint *start_offset,
+ gint *end_offset)
+{
+ GtkWidget *widget;
+ gpointer layout = NULL;
+ GailTextUtil *gail_text = NULL;
+ gchar *retval = NULL;
+ GtkTextBuffer *buffer;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return NULL;
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return NULL;
+
+ gail_text = gail_text_util_new ();
+ gail_text_util_buffer_setup (gail_text, buffer);
+ retval = gail_text_util_get_text (gail_text, layout,
+ GAIL_AFTER_OFFSET, boundary_type,
+ offset, start_offset, end_offset);
+ g_object_unref (gail_text);
+
+ return retval;
+}
+
+static gint
+ev_view_accessible_get_character_count (AtkText *text)
+{
+ GtkWidget *widget;
+ GtkTextBuffer *buffer;
+ gint retval;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return 0;
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return 0;
+
+ retval = gtk_text_buffer_get_char_count (buffer);
+
+ return retval;
+}
+
+static gint
+ev_view_accessible_get_caret_offset (AtkText *text)
+{
+ GtkWidget *widget;
+ GtkTextBuffer *buffer;
+ GtkTextMark *cursor_mark;
+ GtkTextIter cursor_itr;
+ gint retval;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return 0;
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return 0;
+
+ cursor_mark = gtk_text_buffer_get_insert (buffer);
+ gtk_text_buffer_get_iter_at_mark (buffer, &cursor_itr, cursor_mark);
+ retval = gtk_text_iter_get_offset (&cursor_itr);
+
+ return retval;
+}
+
+static gboolean
+ev_view_accessible_set_caret_offset (AtkText *text, gint offset)
+{
+ GtkWidget *widget;
+ GtkTextBuffer *buffer;
+ GtkTextIter pos_itr;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return FALSE;
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return FALSE;
+
+ gtk_text_buffer_get_iter_at_offset (buffer, &pos_itr, offset);
+ gtk_text_buffer_place_cursor (buffer, &pos_itr);
+
+ return TRUE;
+}
+
+static AtkAttributeSet*
+ev_view_accessible_get_run_attributes (AtkText *text,
+ gint offset,
+ gint *start_offset,
+ gint *end_offset)
+{
+ GtkWidget *widget;
+ GtkTextBuffer *buffer;
+ AtkAttributeSet *retval;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return NULL;
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return NULL;
+
+ retval = gail_misc_buffer_get_run_attributes (buffer, offset,
+ start_offset, end_offset);
+
+ return retval;
+}
+
+static AtkAttributeSet*
+ev_view_accessible_get_default_attributes (AtkText *text)
+{
+ GtkWidget *widget;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return NULL;
+ return NULL;
+}
+
+static void
+ev_view_accessible_get_character_extents (AtkText *text,
+ gint offset,
+ gint *x,
+ gint *y,
+ gint *width,
+ gint *height,
+ AtkCoordType coords)
+{
+ GtkWidget *widget, *toplevel;
+ EvRectangle *areas = NULL;
+ EvRectangle *rect = NULL;
+ guint n_areas = 0;
+ EvPageCache *page_cache;
+ gint x_widget, y_widget, x_window, y_window;
+ gdouble scale;
+ GtkBorder border;
+ GdkRectangle page_area;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return;
+
+ page_cache = EV_VIEW (widget)->page_cache;
+ if (!page_cache)
+ return;
+
+ ev_view_get_page_extents (EV_VIEW (widget), EV_VIEW (widget)->current_page,
+ &page_area, &border);
+
+ scale = EV_VIEW (widget)->scale;
+ ev_page_cache_get_text_layout (page_cache, EV_VIEW (widget)->current_page, &areas, &n_areas);
+ if (!areas)
+ return;
+
+ if (offset > n_areas)
+ return;
+
+ rect = areas + offset;
+ *x = (int)(rect->x1 * scale);
+ *y = (int)(rect->y1 * scale);
+
+ *width = (int)(fabs (rect->x2 - rect->x1) * scale);
+ *height = (int)(fabs (rect->y2 - rect->y1) * scale);
+
+ toplevel = gtk_widget_get_toplevel (widget);
+ gtk_widget_translate_coordinates (widget, toplevel, 0, 0, &x_widget, &y_widget);
+ *x += x_widget;
+ *y += y_widget;
+
+ if (coords == ATK_XY_SCREEN) {
+ gdk_window_get_origin (gtk_widget_get_window (toplevel), &x_window, &y_window);
+ *x += x_window;
+ *y += y_window;
+ }
+
+ *x -= EV_VIEW (widget)->scroll_x;
+ *y -= EV_VIEW (widget)->scroll_y;
+
+ *x += page_area.x;
+ *y += page_area.y;
+}
+
+static gint
+ev_view_accessible_get_offset_at_point (AtkText *text,
+ gint x,
+ gint y,
+ AtkCoordType coords)
+{
+ GtkWidget *widget, *toplevel;
+ EvRectangle *areas = NULL;
+ EvRectangle *rect = NULL;
+ guint n_areas = 0;
+ guint i = 0;
+ EvPageCache *page_cache;
+ gint x_window, y_window, x_widget, y_widget;
+ gint offset=-1, rx, ry;
+ gdouble scale;
+ GtkBorder border;
+ GdkRectangle page_area;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return -1;
+
+ page_cache = EV_VIEW (widget)->page_cache;
+ if (!page_cache)
+ return -1;
+
+ ev_view_get_page_extents (EV_VIEW (widget), EV_VIEW (widget)->current_page,
+ &page_area, &border);
+
+ scale = EV_VIEW (widget)->scale;
+ ev_page_cache_get_text_layout (page_cache, EV_VIEW (widget)->current_page, &areas, &n_areas);
+ if (!areas)
+ return -1;
+
+ rx = x;
+ ry = y;
+
+ rx -= page_area.x;
+ ry -= page_area.y;
+
+ rx += EV_VIEW (widget)->scroll_x;
+ ry += EV_VIEW (widget)->scroll_y;
+
+ toplevel = gtk_widget_get_toplevel (widget);
+ gtk_widget_translate_coordinates (widget, toplevel, 0, 0, &x_widget, &y_widget);
+ rx -= x_widget;
+ ry -= y_widget;
+
+ if (coords == ATK_XY_SCREEN) {
+ gdk_window_get_origin (gtk_widget_get_window (toplevel), &x_window, &y_window);
+ rx -= x_window;
+ ry -= y_window;
+ }
+
+ rx /= scale;
+ ry /= scale;
+
+ for (i = 0; i < n_areas; i++) {
+ rect = areas + i;
+ if (rx >= rect->x1 && rx <= rect->x2 &&
+ ry >= rect->y1 && ry <= rect->y2)
+ offset = i;
+ }
+
+ return offset;
+}
+
+static gint
+ev_view_accessible_get_n_selections (AtkText *text)
+{
+ GtkWidget *widget;
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+ gint select_start, select_end;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return -1;
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return -1;
+
+ gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
+ select_start = gtk_text_iter_get_offset (&start);
+ select_end = gtk_text_iter_get_offset (&end);
+
+ if (select_start != select_end)
+ return 1;
+ else
+ return 0;
+}
+
+static gchar*
+ev_view_accessible_get_selection (AtkText *text,
+ gint selection_num,
+ gint *start_pos,
+ gint *end_pos)
+{
+ GtkWidget *widget;
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+ gchar *retval = NULL;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return NULL;
+
+ if (selection_num != 0)
+ return NULL;
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return NULL;
+
+ gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
+ *start_pos = gtk_text_iter_get_offset (&start);
+ *end_pos = gtk_text_iter_get_offset (&end);
+
+ if (*start_pos != *end_pos)
+ retval = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+
+ return retval;
+}
+
+static gboolean
+ev_view_accessible_add_selection (AtkText *text,
+ gint start_pos,
+ gint end_pos)
+{
+ GtkWidget *widget;
+ GtkTextBuffer *buffer;
+ GtkTextIter pos_itr;
+ GtkTextIter start, end;
+ gint select_start, select_end;
+ gboolean retval = FALSE;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return FALSE;
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return FALSE;
+
+ gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
+ select_start = gtk_text_iter_get_offset (&start);
+ select_end = gtk_text_iter_get_offset (&end);
+
+ /* If there is already a selection, then don't allow
+ * another to be added
+ */
+ if (select_start == select_end) {
+ gtk_text_buffer_get_iter_at_offset (buffer, &pos_itr, start_pos);
+ gtk_text_buffer_move_mark_by_name (buffer, "selection_bound", &pos_itr);
+ gtk_text_buffer_get_iter_at_offset (buffer, &pos_itr, end_pos);
+ gtk_text_buffer_move_mark_by_name (buffer, "insert", &pos_itr);
+
+ retval = TRUE;
+ }
+
+ return retval;
+}
+
+static gboolean
+ev_view_accessible_remove_selection (AtkText *text,
+ gint selection_num)
+{
+ GtkWidget *widget;
+ GtkTextBuffer *buffer;
+ GtkTextMark *cursor_mark;
+ GtkTextIter cursor_itr;
+ GtkTextIter start, end;
+ gint select_start, select_end;
+ gboolean retval = FALSE;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return FALSE;
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return FALSE;
+
+ gtk_text_buffer_get_selection_bounds(buffer, &start, &end);
+ select_start = gtk_text_iter_get_offset(&start);
+ select_end = gtk_text_iter_get_offset(&end);
+
+ if (select_start != select_end) {
+ /* Setting the start & end of the selected region
+ * to the caret position turns off the selection.
+ */
+ cursor_mark = gtk_text_buffer_get_insert (buffer);
+ gtk_text_buffer_get_iter_at_mark (buffer, &cursor_itr, cursor_mark);
+ gtk_text_buffer_move_mark_by_name (buffer, "selection_bound", &cursor_itr);
+
+ retval = TRUE;
+ }
+
+ return retval;
+}
+
+static gboolean
+ev_view_accessible_set_selection (AtkText *text,
+ gint selection_num,
+ gint start_pos,
+ gint end_pos)
+{
+ GtkWidget *widget;
+ GtkTextBuffer *buffer;
+ GtkTextIter pos_itr;
+ GtkTextIter start, end;
+ gint select_start, select_end;
+ gboolean retval = FALSE;
+
+ widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
+ if (widget == NULL)
+ /* State is defunct */
+ return FALSE;
+
+ buffer = ev_view_accessible_get_text_buffer (EV_VIEW_ACCESSIBLE (text), EV_VIEW (widget));
+ if (!buffer)
+ return FALSE;
+
+ gtk_text_buffer_get_selection_bounds(buffer, &start, &end);
+ select_start = gtk_text_iter_get_offset(&start);
+ select_end = gtk_text_iter_get_offset(&end);
+
+ if (select_start != select_end) {
+ gtk_text_buffer_get_iter_at_offset (buffer, &pos_itr, start_pos);
+ gtk_text_buffer_move_mark_by_name (buffer, "selection_bound", &pos_itr);
+ gtk_text_buffer_get_iter_at_offset (buffer, &pos_itr, end_pos);
+ gtk_text_buffer_move_mark_by_name (buffer, "insert", &pos_itr);
+
+ retval = TRUE;
+ }
+
+ return retval;
+}
+
+static void ev_view_accessible_text_iface_init (AtkTextIface * iface)
+{
+ g_return_if_fail (iface != NULL);
+
+ iface->get_text = ev_view_accessible_get_text;
+ iface->get_character_at_offset = ev_view_accessible_get_character_at_offset;
+ iface->get_text_before_offset = ev_view_accessible_get_text_before_offset;
+ iface->get_text_at_offset = ev_view_accessible_get_text_at_offset;
+ iface->get_text_after_offset = ev_view_accessible_get_text_after_offset;
+ iface->get_caret_offset = ev_view_accessible_get_caret_offset;
+ iface->set_caret_offset = ev_view_accessible_set_caret_offset;
+ iface->get_character_count = ev_view_accessible_get_character_count;
+ iface->get_n_selections = ev_view_accessible_get_n_selections;
+ iface->get_selection = ev_view_accessible_get_selection;
+ iface->add_selection = ev_view_accessible_add_selection;
+ iface->remove_selection = ev_view_accessible_remove_selection;
+ iface->set_selection = ev_view_accessible_set_selection;
+ iface->get_run_attributes = ev_view_accessible_get_run_attributes;
+ iface->get_default_attributes = ev_view_accessible_get_default_attributes;
+ iface->get_character_extents = ev_view_accessible_get_character_extents;
+ iface->get_offset_at_point = ev_view_accessible_get_offset_at_point;
+ return;
+}
+
+static gboolean
+ev_view_accessible_idle_do_action (gpointer data)
+{
+ EvViewAccessiblePriv* priv = EV_VIEW_ACCESSIBLE_GET_PRIVATE (data);
+
+ ev_view_scroll (EV_VIEW (gtk_accessible_get_widget (GTK_ACCESSIBLE (data))),
+ priv->idle_scroll,
+ FALSE);
+ priv->action_idle_handler = 0;
+ return FALSE;
+}
+
+static gboolean
+ev_view_accessible_action_do_action (AtkAction *action,
+ gint i)
+{
+ EvViewAccessiblePriv* priv = EV_VIEW_ACCESSIBLE_GET_PRIVATE (action);
+
+ if (gtk_accessible_get_widget (GTK_ACCESSIBLE (action)) == NULL)
+ return FALSE;
+
+ if (priv->action_idle_handler)
+ return FALSE;
+
+ switch (i) {
+ case ACTION_SCROLL_UP:
+ priv->idle_scroll = GTK_SCROLL_PAGE_BACKWARD;
+ break;
+ case ACTION_SCROLL_DOWN:
+ priv->idle_scroll = GTK_SCROLL_PAGE_FORWARD;
+ break;
+ default:
+ return FALSE;
+ }
+ priv->action_idle_handler = g_idle_add (ev_view_accessible_idle_do_action,
+ action);
+ return TRUE;
+}
+
+static gint
+ev_view_accessible_action_get_n_actions (AtkAction *action)
+{
+ return LAST_ACTION;
+}
+
+static const gchar *
+ev_view_accessible_action_get_description (AtkAction *action,
+ gint i)
+{
+ EvViewAccessiblePriv* priv = EV_VIEW_ACCESSIBLE_GET_PRIVATE (action);
+
+ if (i < 0 || i >= LAST_ACTION)
+ return NULL;
+
+ if (priv->action_descriptions[i])
+ return priv->action_descriptions[i];
+ else
+ return ev_view_accessible_action_descriptions[i];
+}
+
+static const gchar *
+ev_view_accessible_action_get_name (AtkAction *action,
+ gint i)
+{
+ if (i < 0 || i >= LAST_ACTION)
+ return NULL;
+
+ return ev_view_accessible_action_names[i];
+}
+
+static gboolean
+ev_view_accessible_action_set_description (AtkAction *action,
+ gint i,
+ const gchar *description)
+{
+ EvViewAccessiblePriv* priv = EV_VIEW_ACCESSIBLE_GET_PRIVATE (action);
+ gchar *old_description;
+
+ if (i < 0 || i >= LAST_ACTION)
+ return FALSE;
+
+ old_description = priv->action_descriptions[i];
+ priv->action_descriptions[i] = g_strdup (description);
+ g_free (old_description);
+
+ return TRUE;
+}
+
+static void ev_view_accessible_action_iface_init (AtkActionIface * iface)
+{
+ iface->do_action = ev_view_accessible_action_do_action;
+ iface->get_n_actions = ev_view_accessible_action_get_n_actions;
+ iface->get_description = ev_view_accessible_action_get_description;
+ iface->get_name = ev_view_accessible_action_get_name;
+ iface->set_description = ev_view_accessible_action_set_description;
+}
+
+GType ev_view_accessible_get_type (void)
+{
+ static GType type = 0;
+
+ if (G_UNLIKELY (type == 0)) {
+ GTypeInfo tinfo = {
+ 0, /* class size */
+ (GBaseInitFunc) NULL, /* base init */
+ (GBaseFinalizeFunc) NULL, /* base finalize */
+ (GClassInitFunc) ev_view_accessible_class_init, /* class init */
+ (GClassFinalizeFunc) NULL, /* class finalize */
+ NULL, /* class data */
+ 0, /* instance size */
+ 0, /* nb preallocs */
+ (GInstanceInitFunc) NULL, /* instance init */
+ NULL /* value table */
+ };
+
+ const GInterfaceInfo atk_text_info = {
+ (GInterfaceInitFunc)
+ ev_view_accessible_text_iface_init,
+ (GInterfaceFinalizeFunc) NULL,
+ NULL
+ };
+
+ const GInterfaceInfo atk_action_info = {
+ (GInterfaceInitFunc)
+ ev_view_accessible_action_iface_init,
+ (GInterfaceFinalizeFunc) NULL,
+ NULL
+ };
+ /*
+ * Figure out the size of the class and instance
+ * we are deriving from
+ */
+ AtkObjectFactory *factory;
+ GType derived_type;
+ GTypeQuery query;
+ GType derived_atk_type;
+
+ derived_type = g_type_parent (EV_TYPE_VIEW);
+ factory = atk_registry_get_factory (atk_get_default_registry (),
+ derived_type);
+ derived_atk_type = atk_object_factory_get_accessible_type (factory);
+
+ g_type_query (derived_atk_type, &query);
+ tinfo.class_size = query.class_size;
+ tinfo.instance_size = query.instance_size;
+
+ type = g_type_register_static (derived_atk_type, "EvViewAccessible",
+ &tinfo, 0);
+ g_type_add_interface_static (type, ATK_TYPE_TEXT,
+ &atk_text_info);
+ g_type_add_interface_static (type, ATK_TYPE_ACTION,
+ &atk_action_info);
+ }
+
+ return type;
+}
+
+static AtkObject *ev_view_accessible_new(GObject * obj)
+{
+ AtkObject *accessible;
+
+ g_return_val_if_fail(EV_IS_VIEW (obj), NULL);
+
+ accessible = g_object_new (ev_view_accessible_get_type (), NULL);
+ atk_object_initialize (accessible, obj);
+
+ atk_object_set_name (ATK_OBJECT (accessible), _("Document View"));
+ atk_object_set_role (ATK_OBJECT (accessible), ATK_ROLE_UNKNOWN);
+
+ return accessible;
+}
+
+typedef AtkObjectFactory EvViewAccessibleFactory;
+typedef AtkObjectFactoryClass EvViewAccessibleFactoryClass;
+
+static void ev_view_accessible_factory_init (EvViewAccessibleFactory *factory)
+{
+}
+
+static GType ev_view_accessible_factory_get_accessible_type(void)
+{
+ return ev_view_accessible_get_type();
+}
+
+static AtkObject *ev_view_accessible_factory_create_accessible (GObject * obj)
+{
+ return ev_view_accessible_new(obj);
+}
+
+static void ev_view_accessible_factory_class_init (AtkObjectFactoryClass * klass)
+{
+ klass->create_accessible = ev_view_accessible_factory_create_accessible;
+ klass->get_accessible_type = ev_view_accessible_factory_get_accessible_type;
+}
+
+G_DEFINE_TYPE (EvViewAccessibleFactory, ev_view_accessible_factory, ATK_TYPE_OBJECT_FACTORY)
diff --git a/libview/ev-view-accessible.h b/libview/ev-view-accessible.h
new file mode 100644
index 00000000..9ec7ed27
--- /dev/null
+++ b/libview/ev-view-accessible.h
@@ -0,0 +1,33 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (EVINCE_COMPILATION)
+#error "This is a private header."
+#endif
+
+#ifndef __EV_VIEW_ACCESSIBLE_H__
+#define __EV_VIEW_ACCESSIBLE_H__
+
+#include "ev-view.h"
+
+GType ev_view_accessible_factory_get_type (void);
+
+#endif /* __EV_VIEW_ACCESSIBLE_H__ */
+
diff --git a/libview/ev-view-cursor.c b/libview/ev-view-cursor.c
new file mode 100644
index 00000000..930e1f8e
--- /dev/null
+++ b/libview/ev-view-cursor.c
@@ -0,0 +1,55 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 "ev-view-cursor.h"
+
+GdkCursor *
+ev_view_cursor_new (GdkDisplay *display,
+ EvViewCursor new_cursor)
+{
+ GdkCursor *cursor = NULL;
+
+ switch (new_cursor) {
+ case EV_VIEW_CURSOR_NORMAL:
+ break;
+ case EV_VIEW_CURSOR_IBEAM:
+ cursor = gdk_cursor_new_for_display (display, GDK_XTERM);
+ break;
+ case EV_VIEW_CURSOR_LINK:
+ cursor = gdk_cursor_new_for_display (display, GDK_HAND2);
+ break;
+ case EV_VIEW_CURSOR_WAIT:
+ cursor = gdk_cursor_new_for_display (display, GDK_WATCH);
+ break;
+ case EV_VIEW_CURSOR_HIDDEN:
+ cursor = gdk_cursor_new_for_display (display, GDK_BLANK_CURSOR);
+ break;
+ case EV_VIEW_CURSOR_DRAG:
+ cursor = gdk_cursor_new_for_display (display, GDK_FLEUR);
+ break;
+ case EV_VIEW_CURSOR_AUTOSCROLL:
+ cursor = gdk_cursor_new_for_display (display, GDK_DOUBLE_ARROW);
+ break;
+ case EV_VIEW_CURSOR_ADD:
+ cursor = gdk_cursor_new_for_display (display, GDK_PLUS);
+ break;
+ }
+
+ return cursor;
+}
diff --git a/libview/ev-view-cursor.h b/libview/ev-view-cursor.h
new file mode 100644
index 00000000..9d5e8e53
--- /dev/null
+++ b/libview/ev-view-cursor.h
@@ -0,0 +1,47 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-view.h> can be included directly."
+#endif
+
+#ifndef __EV_VIEW_CURSOR_H__
+#define __EV_VIEW_CURSOR_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+typedef enum {
+ EV_VIEW_CURSOR_NORMAL,
+ EV_VIEW_CURSOR_IBEAM,
+ EV_VIEW_CURSOR_LINK,
+ EV_VIEW_CURSOR_WAIT,
+ EV_VIEW_CURSOR_HIDDEN,
+ EV_VIEW_CURSOR_DRAG,
+ EV_VIEW_CURSOR_AUTOSCROLL,
+ EV_VIEW_CURSOR_ADD
+} EvViewCursor;
+
+GdkCursor *ev_view_cursor_new (GdkDisplay *display,
+ EvViewCursor cursor);
+
+G_END_DECLS
+
+#endif /* __EV_VIEW_CURSOR_H__ */
diff --git a/libview/ev-view-marshal.list b/libview/ev-view-marshal.list
new file mode 100644
index 00000000..d7b0e75e
--- /dev/null
+++ b/libview/ev-view-marshal.list
@@ -0,0 +1,2 @@
+VOID:ENUM,BOOLEAN
+VOID:INT,INT
diff --git a/libview/ev-view-presentation.c b/libview/ev-view-presentation.c
new file mode 100644
index 00000000..31556fa2
--- /dev/null
+++ b/libview/ev-view-presentation.c
@@ -0,0 +1,1498 @@
+/* ev-view-presentation.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2010 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include <stdlib.h>
+#include <glib/gi18n-lib.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "ev-view-presentation.h"
+#include "ev-jobs.h"
+#include "ev-job-scheduler.h"
+#include "ev-transition-animation.h"
+#include "ev-view-cursor.h"
+#include "ev-page-cache.h"
+
+enum {
+ PROP_0,
+ PROP_DOCUMENT,
+ PROP_CURRENT_PAGE,
+ PROP_ROTATION,
+ PROP_INVERTED_COLORS
+};
+
+enum {
+ CHANGE_PAGE,
+ FINISHED,
+ N_SIGNALS
+};
+
+typedef enum {
+ EV_PRESENTATION_NORMAL,
+ EV_PRESENTATION_BLACK,
+ EV_PRESENTATION_WHITE,
+ EV_PRESENTATION_END
+} EvPresentationState;
+
+struct _EvViewPresentation
+{
+ GtkWidget base;
+
+ guint current_page;
+ cairo_surface_t *current_surface;
+ EvDocument *document;
+ guint rotation;
+ gboolean inverted_colors;
+ EvPresentationState state;
+ gdouble scale;
+ gint monitor_width;
+ gint monitor_height;
+
+ /* Cursors */
+ EvViewCursor cursor;
+ guint hide_cursor_timeout_id;
+
+ /* Goto Window */
+ GtkWidget *goto_window;
+ GtkWidget *goto_entry;
+
+ /* Page Transition */
+ guint trans_timeout_id;
+
+ /* Animations */
+ gboolean enable_animations;
+ EvTransitionAnimation *animation;
+
+ /* Links */
+ EvPageCache *page_cache;
+
+ EvJob *prev_job;
+ EvJob *curr_job;
+ EvJob *next_job;
+};
+
+struct _EvViewPresentationClass
+{
+ GtkWidgetClass base_class;
+
+ /* signals */
+ void (* change_page) (EvViewPresentation *pview,
+ GtkScrollType scroll);
+ void (* finished) (EvViewPresentation *pview);
+};
+
+static guint signals[N_SIGNALS] = { 0 };
+
+static void ev_view_presentation_next_page (EvViewPresentation *pview);
+static void ev_view_presentation_previous_page (EvViewPresentation *pview);
+static void ev_view_presentation_set_cursor_for_location (EvViewPresentation *pview,
+ gdouble x,
+ gdouble y);
+
+#define HIDE_CURSOR_TIMEOUT 5
+
+G_DEFINE_TYPE (EvViewPresentation, ev_view_presentation, GTK_TYPE_WIDGET)
+
+static void
+ev_view_presentation_set_normal (EvViewPresentation *pview)
+{
+ GtkWidget *widget = GTK_WIDGET (pview);
+ GtkStyle *style;
+
+ if (pview->state == EV_PRESENTATION_NORMAL)
+ return;
+
+ pview->state = EV_PRESENTATION_NORMAL;
+ style = gtk_widget_get_style (widget);
+ gdk_window_set_background (gtk_widget_get_window (widget), &style->black);
+ gtk_widget_queue_draw (widget);
+}
+
+static void
+ev_view_presentation_set_black (EvViewPresentation *pview)
+{
+ GtkWidget *widget = GTK_WIDGET (pview);
+ GtkStyle *style;
+
+ if (pview->state == EV_PRESENTATION_BLACK)
+ return;
+
+ pview->state = EV_PRESENTATION_BLACK;
+ style = gtk_widget_get_style (widget);
+ gdk_window_set_background (gtk_widget_get_window (widget), &style->black);
+ gtk_widget_queue_draw (widget);
+}
+
+static void
+ev_view_presentation_set_white (EvViewPresentation *pview)
+{
+ GtkWidget *widget = GTK_WIDGET (pview);
+ GtkStyle *style;
+
+ if (pview->state == EV_PRESENTATION_WHITE)
+ return;
+
+ pview->state = EV_PRESENTATION_WHITE;
+ style = gtk_widget_get_style (widget);
+ gdk_window_set_background (gtk_widget_get_window (widget), &style->white);
+ gtk_widget_queue_draw (widget);
+}
+
+static void
+ev_view_presentation_set_end (EvViewPresentation *pview)
+{
+ GtkWidget *widget = GTK_WIDGET (pview);
+
+ if (pview->state == EV_PRESENTATION_END)
+ return;
+
+ pview->state = EV_PRESENTATION_END;
+ gtk_widget_queue_draw (widget);
+}
+
+static gdouble
+ev_view_presentation_get_scale_for_page (EvViewPresentation *pview,
+ guint page)
+{
+ if (!ev_document_is_page_size_uniform (pview->document) || pview->scale == 0) {
+ gdouble width, height;
+
+ ev_document_get_page_size (pview->document, page, &width, &height);
+ if (pview->rotation == 90 || pview->rotation == 270) {
+ gdouble tmp;
+
+ tmp = width;
+ width = height;
+ height = tmp;
+ }
+ pview->scale = MIN (pview->monitor_width / width, pview->monitor_height / height);
+ }
+
+ return pview->scale;
+}
+
+static void
+ev_view_presentation_get_page_area (EvViewPresentation *pview,
+ GdkRectangle *area)
+{
+ GtkWidget *widget = GTK_WIDGET (pview);
+ GtkAllocation allocation;
+ gdouble doc_width, doc_height;
+ gint view_width, view_height;
+ gdouble scale;
+
+ ev_document_get_page_size (pview->document,
+ pview->current_page,
+ &doc_width, &doc_height);
+ scale = ev_view_presentation_get_scale_for_page (pview, pview->current_page);
+
+ if (pview->rotation == 90 || pview->rotation == 270) {
+ view_width = (gint)((doc_height * scale) + 0.5);
+ view_height = (gint)((doc_width * scale) + 0.5);
+ } else {
+ view_width = (gint)((doc_width * scale) + 0.5);
+ view_height = (gint)((doc_height * scale) + 0.5);
+ }
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+ area->x = (MAX (0, allocation.width - view_width)) / 2;
+ area->y = (MAX (0, allocation.height - view_height)) / 2;
+ area->width = view_width;
+ area->height = view_height;
+}
+
+/* Page Transition */
+static gboolean
+transition_next_page (EvViewPresentation *pview)
+{
+ ev_view_presentation_next_page (pview);
+
+ return FALSE;
+}
+
+static void
+ev_view_presentation_transition_stop (EvViewPresentation *pview)
+{
+ if (pview->trans_timeout_id > 0)
+ g_source_remove (pview->trans_timeout_id);
+ pview->trans_timeout_id = 0;
+}
+
+static void
+ev_view_presentation_transition_start (EvViewPresentation *pview)
+{
+ gdouble duration;
+
+ if (!EV_IS_DOCUMENT_TRANSITION (pview->document))
+ return;
+
+ ev_view_presentation_transition_stop (pview);
+
+ duration = ev_document_transition_get_page_duration (EV_DOCUMENT_TRANSITION (pview->document),
+ pview->current_page);
+ if (duration >= 0) {
+ pview->trans_timeout_id =
+ g_timeout_add_seconds (duration,
+ (GSourceFunc) transition_next_page,
+ pview);
+ }
+}
+
+/* Animations */
+static void
+ev_view_presentation_animation_cancel (EvViewPresentation *pview)
+{
+ if (pview->animation) {
+ g_object_unref (pview->animation);
+ pview->animation = NULL;
+ }
+}
+
+static void
+ev_view_presentation_transition_animation_finish (EvViewPresentation *pview)
+{
+ ev_view_presentation_animation_cancel (pview);
+ ev_view_presentation_transition_start (pview);
+ gtk_widget_queue_draw (GTK_WIDGET (pview));
+}
+
+static void
+ev_view_presentation_transition_animation_frame (EvViewPresentation *pview,
+ gdouble progress)
+{
+ gtk_widget_queue_draw (GTK_WIDGET (pview));
+}
+
+static void
+ev_view_presentation_animation_start (EvViewPresentation *pview,
+ gint new_page)
+{
+ EvTransitionEffect *effect = NULL;
+ cairo_surface_t *surface;
+ gint jump;
+
+ if (!pview->enable_animations)
+ return;
+
+ if (pview->current_page == new_page)
+ return;
+
+ effect = ev_document_transition_get_effect (EV_DOCUMENT_TRANSITION (pview->document),
+ new_page);
+ if (!effect)
+ return;
+
+ pview->animation = ev_transition_animation_new (effect);
+
+ surface = pview->curr_job ? EV_JOB_RENDER (pview->curr_job)->surface : NULL;
+ ev_transition_animation_set_origin_surface (pview->animation,
+ surface != NULL ?
+ surface : pview->current_surface);
+
+ jump = new_page - pview->current_page;
+ if (jump == -1)
+ surface = pview->prev_job ? EV_JOB_RENDER (pview->prev_job)->surface : NULL;
+ else if (jump == 1)
+ surface = pview->next_job ? EV_JOB_RENDER (pview->next_job)->surface : NULL;
+ else
+ surface = NULL;
+ if (surface)
+ ev_transition_animation_set_dest_surface (pview->animation, surface);
+
+ g_signal_connect_swapped (pview->animation, "frame",
+ G_CALLBACK (ev_view_presentation_transition_animation_frame),
+ pview);
+ g_signal_connect_swapped (pview->animation, "finished",
+ G_CALLBACK (ev_view_presentation_transition_animation_finish),
+ pview);
+}
+
+/* Page Navigation */
+static void
+job_finished_cb (EvJob *job,
+ EvViewPresentation *pview)
+{
+ EvJobRender *job_render = EV_JOB_RENDER (job);
+
+ if (pview->inverted_colors)
+ ev_document_misc_invert_surface (job_render->surface);
+
+ if (job != pview->curr_job)
+ return;
+
+ if (pview->animation) {
+ ev_transition_animation_set_dest_surface (pview->animation,
+ job_render->surface);
+ } else {
+ ev_view_presentation_transition_start (pview);
+ gtk_widget_queue_draw (GTK_WIDGET (pview));
+ }
+}
+
+static EvJob *
+ev_view_presentation_schedule_new_job (EvViewPresentation *pview,
+ gint page,
+ EvJobPriority priority)
+{
+ EvJob *job;
+ gdouble scale;
+
+ if (page < 0 || page >= ev_document_get_n_pages (pview->document))
+ return NULL;
+
+ scale = ev_view_presentation_get_scale_for_page (pview, page);
+ job = ev_job_render_new (pview->document, page, pview->rotation, scale, 0, 0);
+ g_signal_connect (job, "finished",
+ G_CALLBACK (job_finished_cb),
+ pview);
+ ev_job_scheduler_push_job (job, priority);
+
+ return job;
+}
+
+static void
+ev_view_presentation_delete_job (EvViewPresentation *pview,
+ EvJob *job)
+{
+ if (!job)
+ return;
+
+ g_signal_handlers_disconnect_by_func (job, job_finished_cb, pview);
+ ev_job_cancel (job);
+ g_object_unref (job);
+}
+
+static void
+ev_view_presentation_update_current_page (EvViewPresentation *pview,
+ guint page)
+{
+ gint jump;
+
+ if (page < 0 || page >= ev_document_get_n_pages (pview->document))
+ return;
+
+ ev_view_presentation_animation_cancel (pview);
+ ev_view_presentation_animation_start (pview, page);
+
+ jump = page - pview->current_page;
+
+ switch (jump) {
+ case 0:
+ if (!pview->curr_job)
+ pview->curr_job = ev_view_presentation_schedule_new_job (pview, page, EV_JOB_PRIORITY_URGENT);
+ if (!pview->next_job)
+ pview->next_job = ev_view_presentation_schedule_new_job (pview, page + 1, EV_JOB_PRIORITY_HIGH);
+ if (!pview->prev_job)
+ pview->prev_job = ev_view_presentation_schedule_new_job (pview, page - 1, EV_JOB_PRIORITY_LOW);
+ break;
+ case -1:
+ ev_view_presentation_delete_job (pview, pview->next_job);
+ pview->next_job = pview->curr_job;
+ pview->curr_job = pview->prev_job;
+
+ if (!pview->curr_job)
+ pview->curr_job = ev_view_presentation_schedule_new_job (pview, page, EV_JOB_PRIORITY_URGENT);
+ else
+ ev_job_scheduler_update_job (pview->curr_job, EV_JOB_PRIORITY_URGENT);
+ pview->prev_job = ev_view_presentation_schedule_new_job (pview, page - 1, EV_JOB_PRIORITY_HIGH);
+ ev_job_scheduler_update_job (pview->next_job, EV_JOB_PRIORITY_LOW);
+
+ break;
+ case 1:
+ ev_view_presentation_delete_job (pview, pview->prev_job);
+ pview->prev_job = pview->curr_job;
+ pview->curr_job = pview->next_job;
+
+ if (!pview->curr_job)
+ pview->curr_job = ev_view_presentation_schedule_new_job (pview, page, EV_JOB_PRIORITY_URGENT);
+ else
+ ev_job_scheduler_update_job (pview->curr_job, EV_JOB_PRIORITY_URGENT);
+ pview->next_job = ev_view_presentation_schedule_new_job (pview, page + 1, EV_JOB_PRIORITY_HIGH);
+ ev_job_scheduler_update_job (pview->prev_job, EV_JOB_PRIORITY_LOW);
+
+ break;
+ case -2:
+ ev_view_presentation_delete_job (pview, pview->next_job);
+ ev_view_presentation_delete_job (pview, pview->curr_job);
+ pview->next_job = pview->prev_job;
+
+ pview->curr_job = ev_view_presentation_schedule_new_job (pview, page, EV_JOB_PRIORITY_URGENT);
+ pview->prev_job = ev_view_presentation_schedule_new_job (pview, page - 1, EV_JOB_PRIORITY_HIGH);
+ if (!pview->next_job)
+ pview->next_job = ev_view_presentation_schedule_new_job (pview, page + 1, EV_JOB_PRIORITY_LOW);
+ else
+ ev_job_scheduler_update_job (pview->next_job, EV_JOB_PRIORITY_LOW);
+ break;
+ case 2:
+ ev_view_presentation_delete_job (pview, pview->prev_job);
+ ev_view_presentation_delete_job (pview, pview->curr_job);
+ pview->prev_job = pview->next_job;
+
+ pview->curr_job = ev_view_presentation_schedule_new_job (pview, page, EV_JOB_PRIORITY_URGENT);
+ pview->next_job = ev_view_presentation_schedule_new_job (pview, page + 1, EV_JOB_PRIORITY_HIGH);
+ if (!pview->prev_job)
+ pview->prev_job = ev_view_presentation_schedule_new_job (pview, page - 1, EV_JOB_PRIORITY_LOW);
+ else
+ ev_job_scheduler_update_job (pview->prev_job, EV_JOB_PRIORITY_LOW);
+ break;
+ default:
+ ev_view_presentation_delete_job (pview, pview->prev_job);
+ ev_view_presentation_delete_job (pview, pview->curr_job);
+ ev_view_presentation_delete_job (pview, pview->next_job);
+
+ pview->curr_job = ev_view_presentation_schedule_new_job (pview, page, EV_JOB_PRIORITY_URGENT);
+ if (jump > 0) {
+ pview->next_job = ev_view_presentation_schedule_new_job (pview, page + 1, EV_JOB_PRIORITY_HIGH);
+ pview->prev_job = ev_view_presentation_schedule_new_job (pview, page - 1, EV_JOB_PRIORITY_LOW);
+ } else {
+ pview->prev_job = ev_view_presentation_schedule_new_job (pview, page - 1, EV_JOB_PRIORITY_HIGH);
+ pview->next_job = ev_view_presentation_schedule_new_job (pview, page + 1, EV_JOB_PRIORITY_LOW);
+ }
+ }
+
+ pview->current_page = page;
+
+ if (pview->page_cache)
+ ev_page_cache_set_page_range (pview->page_cache, page, page);
+
+ if (pview->cursor != EV_VIEW_CURSOR_HIDDEN) {
+ gint x, y;
+
+ gtk_widget_get_pointer (GTK_WIDGET (pview), &x, &y);
+ ev_view_presentation_set_cursor_for_location (pview, x, y);
+ }
+
+ if (EV_JOB_RENDER (pview->curr_job)->surface)
+ gtk_widget_queue_draw (GTK_WIDGET (pview));
+}
+
+static void
+ev_view_presentation_next_page (EvViewPresentation *pview)
+{
+ guint n_pages;
+ gint new_page;
+
+ switch (pview->state) {
+ case EV_PRESENTATION_BLACK:
+ case EV_PRESENTATION_WHITE:
+ ev_view_presentation_set_normal (pview);
+ case EV_PRESENTATION_END:
+ return;
+ case EV_PRESENTATION_NORMAL:
+ break;
+ }
+
+ n_pages = ev_document_get_n_pages (pview->document);
+ new_page = pview->current_page + 1;
+
+ if (new_page == n_pages)
+ ev_view_presentation_set_end (pview);
+ else
+ ev_view_presentation_update_current_page (pview, new_page);
+}
+
+static void
+ev_view_presentation_previous_page (EvViewPresentation *pview)
+{
+ gint new_page = 0;
+
+ switch (pview->state) {
+ case EV_PRESENTATION_BLACK:
+ case EV_PRESENTATION_WHITE:
+ ev_view_presentation_set_normal (pview);
+ return;
+ case EV_PRESENTATION_END:
+ pview->state = EV_PRESENTATION_NORMAL;
+ new_page = pview->current_page;
+ break;
+ case EV_PRESENTATION_NORMAL:
+ new_page = pview->current_page - 1;
+ break;
+ }
+
+ ev_view_presentation_update_current_page (pview, new_page);
+}
+
+/* Goto Window */
+#define KEY_IS_NUMERIC(keyval) \
+ ((keyval >= GDK_0 && keyval <= GDK_9) || (keyval >= GDK_KP_0 && keyval <= GDK_KP_9))
+
+/* Cut and paste from gtkwindow.c */
+static void
+send_focus_change (GtkWidget *widget,
+ gboolean in)
+{
+ GdkEvent *fevent = gdk_event_new (GDK_FOCUS_CHANGE);
+
+ fevent->focus_change.type = GDK_FOCUS_CHANGE;
+ fevent->focus_change.window = gtk_widget_get_window (widget);
+ fevent->focus_change.in = in;
+ if (fevent->focus_change.window)
+ g_object_ref (fevent->focus_change.window);
+
+ gtk_widget_send_focus_change (widget, fevent);
+
+ gdk_event_free (fevent);
+}
+
+static void
+ev_view_presentation_goto_window_hide (EvViewPresentation *pview)
+{
+ /* send focus-in event */
+ send_focus_change (pview->goto_entry, FALSE);
+ gtk_widget_hide (pview->goto_window);
+ gtk_entry_set_text (GTK_ENTRY (pview->goto_entry), "");
+}
+
+static gboolean
+ev_view_presentation_goto_window_delete_event (GtkWidget *widget,
+ GdkEventAny *event,
+ EvViewPresentation *pview)
+{
+ ev_view_presentation_goto_window_hide (pview);
+
+ return TRUE;
+}
+
+static gboolean
+ev_view_presentation_goto_window_key_press_event (GtkWidget *widget,
+ GdkEventKey *event,
+ EvViewPresentation *pview)
+{
+ switch (event->keyval) {
+ case GDK_Escape:
+ case GDK_Tab:
+ case GDK_KP_Tab:
+ case GDK_ISO_Left_Tab:
+ ev_view_presentation_goto_window_hide (pview);
+ return TRUE;
+ case GDK_Return:
+ case GDK_KP_Enter:
+ case GDK_ISO_Enter:
+ case GDK_BackSpace:
+ case GDK_Delete:
+ return FALSE;
+ default:
+ if (!KEY_IS_NUMERIC (event->keyval))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+ev_view_presentation_goto_window_button_press_event (GtkWidget *widget,
+ GdkEventButton *event,
+ EvViewPresentation *pview)
+{
+ ev_view_presentation_goto_window_hide (pview);
+
+ return TRUE;
+}
+
+static void
+ev_view_presentation_goto_entry_activate (GtkEntry *entry,
+ EvViewPresentation *pview)
+{
+ const gchar *text;
+ gint page;
+
+ text = gtk_entry_get_text (entry);
+ page = atoi (text) - 1;
+
+ ev_view_presentation_goto_window_hide (pview);
+ ev_view_presentation_update_current_page (pview, page);
+}
+
+static void
+ev_view_presentation_goto_window_create (EvViewPresentation *pview)
+{
+ GtkWidget *frame, *hbox, *label;
+ GtkWindow *toplevel, *goto_window;
+
+ toplevel = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (pview)));
+ goto_window = GTK_WINDOW (pview->goto_window);
+
+ if (pview->goto_window) {
+ if (gtk_window_has_group (toplevel))
+ gtk_window_group_add_window (gtk_window_get_group (toplevel), goto_window);
+ else if (gtk_window_has_group (goto_window))
+ gtk_window_group_remove_window (gtk_window_get_group (goto_window), goto_window);
+
+ return;
+ }
+
+ pview->goto_window = gtk_window_new (GTK_WINDOW_POPUP);
+ gtk_window_set_screen (goto_window, gtk_widget_get_screen (GTK_WIDGET (pview)));
+
+ if (gtk_window_has_group (toplevel))
+ gtk_window_group_add_window (gtk_window_get_group (toplevel), goto_window);
+
+ gtk_window_set_modal (goto_window, TRUE);
+
+ g_signal_connect (pview->goto_window, "delete_event",
+ G_CALLBACK (ev_view_presentation_goto_window_delete_event),
+ pview);
+ g_signal_connect (pview->goto_window, "key_press_event",
+ G_CALLBACK (ev_view_presentation_goto_window_key_press_event),
+ pview);
+ g_signal_connect (pview->goto_window, "button_press_event",
+ G_CALLBACK (ev_view_presentation_goto_window_button_press_event),
+ pview);
+
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
+ gtk_container_add (GTK_CONTAINER (pview->goto_window), frame);
+ gtk_widget_show (frame);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (hbox), 3);
+ gtk_container_add (GTK_CONTAINER (frame), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Jump to page:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 3);
+ gtk_widget_show (label);
+ gtk_widget_realize (label);
+
+ pview->goto_entry = gtk_entry_new ();
+ g_signal_connect (pview->goto_entry, "activate",
+ G_CALLBACK (ev_view_presentation_goto_entry_activate),
+ pview);
+ gtk_box_pack_start (GTK_BOX (hbox), pview->goto_entry, TRUE, TRUE, 0);
+ gtk_widget_show (pview->goto_entry);
+ gtk_widget_realize (pview->goto_entry);
+}
+
+static void
+ev_view_presentation_goto_entry_grab_focus (EvViewPresentation *pview)
+{
+ GtkWidgetClass *entry_parent_class;
+
+ entry_parent_class = g_type_class_peek_parent (GTK_ENTRY_GET_CLASS (pview->goto_entry));
+ (entry_parent_class->grab_focus) (pview->goto_entry);
+
+ send_focus_change (pview->goto_entry, TRUE);
+}
+
+static void
+ev_view_presentation_goto_window_send_key_event (EvViewPresentation *pview,
+ GdkEvent *event)
+{
+ GdkEventKey *new_event;
+ GdkScreen *screen;
+
+ /* Move goto window off screen */
+ screen = gtk_widget_get_screen (GTK_WIDGET (pview));
+ gtk_window_move (GTK_WINDOW (pview->goto_window),
+ gdk_screen_get_width (screen) + 1,
+ gdk_screen_get_height (screen) + 1);
+ gtk_widget_show (pview->goto_window);
+
+ new_event = (GdkEventKey *) gdk_event_copy (event);
+ g_object_unref (new_event->window);
+ new_event->window = gtk_widget_get_window (pview->goto_window);
+ if (new_event->window)
+ g_object_ref (new_event->window);
+ gtk_widget_realize (pview->goto_window);
+
+ gtk_widget_event (pview->goto_window, (GdkEvent *)new_event);
+ gdk_event_free ((GdkEvent *)new_event);
+ gtk_widget_hide (pview->goto_window);
+}
+
+/* Links */
+static gboolean
+ev_view_presentation_link_is_supported (EvViewPresentation *pview,
+ EvLink *link)
+{
+ EvLinkAction *action;
+
+ action = ev_link_get_action (link);
+ if (!action)
+ return FALSE;
+
+ switch (ev_link_action_get_action_type (action)) {
+ case EV_LINK_ACTION_TYPE_GOTO_DEST:
+ return ev_link_action_get_dest (action) != NULL;
+ case EV_LINK_ACTION_TYPE_NAMED:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+
+ return FALSE;
+}
+
+static EvLink *
+ev_view_presentation_get_link_at_location (EvViewPresentation *pview,
+ gdouble x,
+ gdouble y)
+{
+ GdkRectangle page_area;
+ EvMappingList *link_mapping;
+ EvLink *link;
+ gdouble width, height;
+ gdouble new_x, new_y;
+ gdouble scale;
+
+ if (!pview->page_cache)
+ return NULL;
+
+ ev_document_get_page_size (pview->document, pview->current_page, &width, &height);
+ ev_view_presentation_get_page_area (pview, &page_area);
+ scale = ev_view_presentation_get_scale_for_page (pview, pview->current_page);
+ x = (x - page_area.x) / scale;
+ y = (y - page_area.y) / scale;
+ switch (pview->rotation) {
+ case 0:
+ case 360:
+ new_x = x;
+ new_y = y;
+ break;
+ case 90:
+ new_x = y;
+ new_y = height - x;
+ break;
+ case 180:
+ new_x = width - x;
+ new_y = height - y;
+ break;
+ case 270:
+ new_x = width - y;
+ new_y = x;
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ link_mapping = ev_page_cache_get_link_mapping (pview->page_cache, pview->current_page);
+
+ link = link_mapping ? ev_mapping_list_get_data (link_mapping, new_x, new_y) : NULL;
+
+ return link && ev_view_presentation_link_is_supported (pview, link) ? link : NULL;
+}
+
+static void
+ev_vew_presentation_goto_link_dest (EvViewPresentation *pview,
+ EvLink *link)
+{
+ EvLinkAction *action;
+
+ action = ev_link_get_action (link);
+
+ if (ev_link_action_get_action_type (action) == EV_LINK_ACTION_TYPE_NAMED) {
+ const gchar *name = ev_link_action_get_name (action);
+
+ if (g_ascii_strcasecmp (name, "FirstPage") == 0) {
+ ev_view_presentation_update_current_page (pview, 0);
+ } else if (g_ascii_strcasecmp (name, "PrevPage") == 0) {
+ ev_view_presentation_update_current_page (pview, pview->current_page - 1);
+ } else if (g_ascii_strcasecmp (name, "NextPage") == 0) {
+ ev_view_presentation_update_current_page (pview, pview->current_page + 1);
+ } else if (g_ascii_strcasecmp (name, "LastPage") == 0) {
+ gint n_pages;
+
+ n_pages = ev_document_get_n_pages (pview->document);
+ ev_view_presentation_update_current_page (pview, n_pages - 1);
+ }
+ } else {
+ EvLinkDest *dest;
+ gint page;
+
+ dest = ev_link_action_get_dest (action);
+ page = ev_document_links_get_dest_page (EV_DOCUMENT_LINKS (pview->document), dest);
+ ev_view_presentation_update_current_page (pview, page);
+ }
+}
+
+/* Cursors */
+static void
+ev_view_presentation_set_cursor (EvViewPresentation *pview,
+ EvViewCursor view_cursor)
+{
+ GtkWidget *widget;
+ GdkCursor *cursor;
+
+ if (pview->cursor == view_cursor)
+ return;
+
+ widget = GTK_WIDGET (pview);
+ if (!gtk_widget_get_realized (widget))
+ gtk_widget_realize (widget);
+
+ pview->cursor = view_cursor;
+
+ cursor = ev_view_cursor_new (gtk_widget_get_display (widget), view_cursor);
+ gdk_window_set_cursor (gtk_widget_get_window (widget), cursor);
+ gdk_flush ();
+ if (cursor)
+ gdk_cursor_unref (cursor);
+}
+
+static void
+ev_view_presentation_set_cursor_for_location (EvViewPresentation *pview,
+ gdouble x,
+ gdouble y)
+{
+ if (ev_view_presentation_get_link_at_location (pview, x, y))
+ ev_view_presentation_set_cursor (pview, EV_VIEW_CURSOR_LINK);
+ else
+ ev_view_presentation_set_cursor (pview, EV_VIEW_CURSOR_NORMAL);
+}
+
+static gboolean
+hide_cursor_timeout_cb (EvViewPresentation *pview)
+{
+ ev_view_presentation_set_cursor (pview, EV_VIEW_CURSOR_HIDDEN);
+ pview->hide_cursor_timeout_id = 0;
+
+ return FALSE;
+}
+
+static void
+ev_view_presentation_hide_cursor_timeout_stop (EvViewPresentation *pview)
+{
+ if (pview->hide_cursor_timeout_id > 0)
+ g_source_remove (pview->hide_cursor_timeout_id);
+ pview->hide_cursor_timeout_id = 0;
+}
+
+static void
+ev_view_presentation_hide_cursor_timeout_start (EvViewPresentation *pview)
+{
+ ev_view_presentation_hide_cursor_timeout_stop (pview);
+ pview->hide_cursor_timeout_id =
+ g_timeout_add_seconds (HIDE_CURSOR_TIMEOUT,
+ (GSourceFunc)hide_cursor_timeout_cb,
+ pview);
+}
+
+static void
+ev_view_presentation_update_current_surface (EvViewPresentation *pview,
+ cairo_surface_t *surface)
+{
+ if (!surface || pview->current_surface == surface)
+ return;
+
+ cairo_surface_reference (surface);
+ if (pview->current_surface)
+ cairo_surface_destroy (pview->current_surface);
+ pview->current_surface = surface;
+}
+
+static void
+ev_view_presentation_destroy (GtkObject *object)
+{
+ EvViewPresentation *pview = EV_VIEW_PRESENTATION (object);
+
+ if (pview->document) {
+ g_object_unref (pview->document);
+ pview->document = NULL;
+ }
+
+ ev_view_presentation_animation_cancel (pview);
+ ev_view_presentation_transition_stop (pview);
+ ev_view_presentation_hide_cursor_timeout_stop (pview);
+
+ if (pview->curr_job) {
+ ev_view_presentation_delete_job (pview, pview->curr_job);
+ pview->curr_job = NULL;
+ }
+
+ if (pview->prev_job) {
+ ev_view_presentation_delete_job (pview, pview->prev_job);
+ pview->prev_job = NULL;
+ }
+
+ if (pview->next_job) {
+ ev_view_presentation_delete_job (pview, pview->next_job);
+ pview->next_job = NULL;
+ }
+
+ if (pview->current_surface) {
+ cairo_surface_destroy (pview->current_surface);
+ pview->current_surface = NULL;
+ }
+
+ if (pview->page_cache) {
+ g_object_unref (pview->page_cache);
+ pview->page_cache = NULL;
+ }
+
+ if (pview->goto_window) {
+ gtk_widget_destroy (pview->goto_window);
+ pview->goto_window = NULL;
+ pview->goto_entry = NULL;
+ }
+
+ GTK_OBJECT_CLASS (ev_view_presentation_parent_class)->destroy (object);
+}
+
+static void
+ev_view_presentation_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ requisition->width = 0;
+ requisition->height = 0;
+}
+
+static void
+ev_view_presentation_draw_end_page (EvViewPresentation *pview)
+{
+ GtkWidget *widget = GTK_WIDGET (pview);
+ PangoLayout *layout;
+ PangoFontDescription *font_desc;
+ gchar *markup;
+ GtkAllocation allocation;
+ GdkRectangle area = {0};
+ const gchar *text = _("End of presentation. Click to exit.");
+
+ if (pview->state != EV_PRESENTATION_END)
+ return;
+
+ layout = gtk_widget_create_pango_layout (widget, NULL);
+ markup = g_strdup_printf ("<span foreground=\"white\">%s</span>", text);
+ pango_layout_set_markup (layout, markup, -1);
+ g_free (markup);
+
+ font_desc = pango_font_description_new ();
+ pango_font_description_set_size (font_desc, 16 * PANGO_SCALE);
+ pango_layout_set_font_description (layout, font_desc);
+
+ gtk_widget_get_allocation (widget, &allocation);
+ area.width = allocation.width;
+ area.height = allocation.height;
+
+ gtk_paint_layout (gtk_widget_get_style (widget),
+ gtk_widget_get_window (widget),
+ gtk_widget_get_state (widget),
+ FALSE,
+ &area,
+ widget,
+ NULL,
+ 15,
+ 15,
+ layout);
+
+ pango_font_description_free (font_desc);
+ g_object_unref (layout);
+}
+
+static gboolean
+ev_view_presentation_expose_event (GtkWidget *widget,
+ GdkEventExpose *event)
+{
+ EvViewPresentation *pview = EV_VIEW_PRESENTATION (widget);
+ GdkRectangle page_area;
+ GdkRectangle overlap;
+ cairo_surface_t *surface;
+ cairo_t *cr;
+
+ switch (pview->state) {
+ case EV_PRESENTATION_END:
+ ev_view_presentation_draw_end_page (pview);
+ return FALSE;
+ case EV_PRESENTATION_BLACK:
+ case EV_PRESENTATION_WHITE:
+ return FALSE;
+ case EV_PRESENTATION_NORMAL:
+ break;
+ }
+
+ if (pview->animation) {
+ if (ev_transition_animation_ready (pview->animation)) {
+ ev_view_presentation_get_page_area (pview, &page_area);
+
+ cr = gdk_cairo_create (gtk_widget_get_window (widget));
+
+ /* normalize to x=0, y=0 */
+ cairo_translate (cr, page_area.x, page_area.y);
+ page_area.x = page_area.y = 0;
+
+ /* Try to fix rounding errors */
+ page_area.width--;
+
+ ev_transition_animation_paint (pview->animation, cr, page_area);
+ cairo_destroy (cr);
+ }
+
+ return TRUE;
+ }
+
+ surface = pview->curr_job ? EV_JOB_RENDER (pview->curr_job)->surface : NULL;
+ if (surface) {
+ ev_view_presentation_update_current_surface (pview, surface);
+ } else if (pview->current_surface) {
+ surface = pview->current_surface;
+ } else {
+ return FALSE;
+ }
+
+ ev_view_presentation_get_page_area (pview, &page_area);
+ if (gdk_rectangle_intersect (&page_area, &(event->area), &overlap)) {
+ cr = gdk_cairo_create (gtk_widget_get_window (widget));
+
+ /* Try to fix rounding errors. See bug #438760 */
+ if (overlap.width == page_area.width)
+ overlap.width--;
+
+ cairo_rectangle (cr, overlap.x, overlap.y, overlap.width, overlap.height);
+ cairo_set_source_surface (cr, surface, page_area.x, page_area.y);
+ cairo_fill (cr);
+ cairo_destroy (cr);
+ }
+
+ return FALSE;
+}
+
+static gboolean
+ev_view_presentation_key_press_event (GtkWidget *widget,
+ GdkEventKey *event)
+{
+ EvViewPresentation *pview = EV_VIEW_PRESENTATION (widget);
+
+ if (pview->state == EV_PRESENTATION_END)
+ return gtk_bindings_activate_event (GTK_OBJECT (widget), event);
+
+ switch (event->keyval) {
+ case GDK_b:
+ case GDK_B:
+ case GDK_period:
+ case GDK_KP_Decimal:
+ if (pview->state == EV_PRESENTATION_BLACK)
+ ev_view_presentation_set_normal (pview);
+ else
+ ev_view_presentation_set_black (pview);
+
+ return TRUE;
+ case GDK_w:
+ case GDK_W:
+ if (pview->state == EV_PRESENTATION_WHITE)
+ ev_view_presentation_set_normal (pview);
+ else
+ ev_view_presentation_set_white (pview);
+
+ return TRUE;
+ case GDK_Home:
+ if (pview->state == EV_PRESENTATION_NORMAL) {
+ ev_view_presentation_update_current_page (pview, 0);
+ return TRUE;
+ }
+ break;
+ case GDK_End:
+ if (pview->state == EV_PRESENTATION_NORMAL) {
+ gint page;
+
+ page = ev_document_get_n_pages (pview->document) - 1;
+ ev_view_presentation_update_current_page (pview, page);
+
+ return TRUE;
+ }
+ break;
+ default:
+ break;
+ }
+
+ ev_view_presentation_set_normal (pview);
+
+ if (ev_document_get_n_pages (pview->document) > 1 && KEY_IS_NUMERIC (event->keyval)) {
+ gint x, y;
+
+ ev_view_presentation_goto_window_create (pview);
+ ev_view_presentation_goto_window_send_key_event (pview, (GdkEvent *)event);
+ gtk_widget_get_pointer (GTK_WIDGET (pview), &x, &y);
+ gtk_window_move (GTK_WINDOW (pview->goto_window), x, y);
+ gtk_widget_show (pview->goto_window);
+ ev_view_presentation_goto_entry_grab_focus (pview);
+
+ return TRUE;
+ }
+
+ return gtk_bindings_activate_event (GTK_OBJECT (widget), event);
+}
+
+static gboolean
+ev_view_presentation_button_release_event (GtkWidget *widget,
+ GdkEventButton *event)
+{
+ EvViewPresentation *pview = EV_VIEW_PRESENTATION (widget);
+
+ switch (event->button) {
+ case 1: {
+ EvLink *link;
+
+ if (pview->state == EV_PRESENTATION_END) {
+ g_signal_emit (pview, signals[FINISHED], 0, NULL);
+
+ return FALSE;
+ }
+
+ link = ev_view_presentation_get_link_at_location (pview,
+ event->x,
+ event->y);
+ if (link)
+ ev_vew_presentation_goto_link_dest (pview, link);
+ else
+ ev_view_presentation_next_page (pview);
+ }
+ break;
+ case 3:
+ ev_view_presentation_previous_page (pview);
+ break;
+ default:
+ break;
+ }
+
+ return FALSE;
+}
+
+static gint
+ev_view_presentation_focus_out (GtkWidget *widget,
+ GdkEventFocus *event)
+{
+ EvViewPresentation *pview = EV_VIEW_PRESENTATION (widget);
+
+ if (pview->goto_window)
+ ev_view_presentation_goto_window_hide (pview);
+
+ return FALSE;
+}
+
+static gboolean
+ev_view_presentation_motion_notify_event (GtkWidget *widget,
+ GdkEventMotion *event)
+{
+ EvViewPresentation *pview = EV_VIEW_PRESENTATION (widget);
+
+ ev_view_presentation_hide_cursor_timeout_start (pview);
+ ev_view_presentation_set_cursor_for_location (pview, event->x, event->y);
+
+ return FALSE;
+}
+
+static gboolean
+init_presentation (GtkWidget *widget)
+{
+ EvViewPresentation *pview = EV_VIEW_PRESENTATION (widget);
+ GdkScreen *screen = gtk_widget_get_screen (widget);
+ GdkRectangle monitor;
+ gint monitor_num;
+
+ monitor_num = gdk_screen_get_monitor_at_window (screen, gtk_widget_get_window (widget));
+ gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
+ pview->monitor_width = monitor.width;
+ pview->monitor_height = monitor.height;
+
+ ev_view_presentation_update_current_page (pview, pview->current_page);
+ ev_view_presentation_hide_cursor_timeout_start (pview);
+
+ return FALSE;
+}
+
+static void
+ev_view_presentation_realize (GtkWidget *widget)
+{
+ GdkWindow *window;
+ GtkStyle *style;
+ GdkWindowAttr attributes;
+ GtkAllocation allocation;
+
+ gtk_widget_set_realized (widget, TRUE);
+
+ attributes.window_type = GDK_WINDOW_CHILD;
+ attributes.wclass = GDK_INPUT_OUTPUT;
+ attributes.visual = gtk_widget_get_visual (widget);
+ attributes.colormap = gtk_widget_get_colormap (widget);
+
+ gtk_widget_get_allocation (widget, &allocation);
+ attributes.x = allocation.x;
+ attributes.y = allocation.y;
+ attributes.width = allocation.width;
+ attributes.height = allocation.height;
+ attributes.event_mask = GDK_EXPOSURE_MASK |
+ GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK |
+ GDK_SCROLL_MASK |
+ GDK_KEY_PRESS_MASK |
+ GDK_POINTER_MOTION_MASK |
+ GDK_POINTER_MOTION_HINT_MASK |
+ GDK_ENTER_NOTIFY_MASK |
+ GDK_LEAVE_NOTIFY_MASK;
+
+ window = gdk_window_new (gtk_widget_get_parent_window (widget),
+ &attributes,
+ GDK_WA_X | GDK_WA_Y |
+ GDK_WA_COLORMAP |
+ GDK_WA_VISUAL);
+
+ gdk_window_set_user_data (window, widget);
+ gtk_widget_set_window (widget, window);
+
+ gtk_widget_style_attach (widget);
+ style = gtk_widget_get_style (widget);
+ gdk_window_set_background (window, &style->black);
+
+ g_idle_add ((GSourceFunc)init_presentation, widget);
+}
+
+static void
+ev_view_presentation_change_page (EvViewPresentation *pview,
+ GtkScrollType scroll)
+{
+ switch (scroll) {
+ case GTK_SCROLL_PAGE_FORWARD:
+ ev_view_presentation_next_page (pview);
+ break;
+ case GTK_SCROLL_PAGE_BACKWARD:
+ ev_view_presentation_previous_page (pview);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static gboolean
+ev_view_presentation_scroll_event (GtkWidget *widget,
+ GdkEventScroll *event)
+{
+ EvViewPresentation *pview = EV_VIEW_PRESENTATION (widget);
+ guint state;
+
+ state = event->state & gtk_accelerator_get_default_mod_mask ();
+ if (state != 0)
+ return FALSE;
+
+ switch (event->direction) {
+ case GDK_SCROLL_DOWN:
+ case GDK_SCROLL_RIGHT:
+ ev_view_presentation_change_page (pview, GTK_SCROLL_PAGE_FORWARD);
+ break;
+ case GDK_SCROLL_UP:
+ case GDK_SCROLL_LEFT:
+ ev_view_presentation_change_page (pview, GTK_SCROLL_PAGE_BACKWARD);
+ break;
+ }
+
+ return TRUE;
+}
+
+
+static void
+add_change_page_binding_keypad (GtkBindingSet *binding_set,
+ guint keyval,
+ GdkModifierType modifiers,
+ GtkScrollType scroll)
+{
+ guint keypad_keyval = keyval - GDK_Left + GDK_KP_Left;
+
+ gtk_binding_entry_add_signal (binding_set, keyval, modifiers,
+ "change_page", 1,
+ GTK_TYPE_SCROLL_TYPE, scroll);
+ gtk_binding_entry_add_signal (binding_set, keypad_keyval, modifiers,
+ "change_page", 1,
+ GTK_TYPE_SCROLL_TYPE, scroll);
+}
+
+static void
+ev_view_presentation_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvViewPresentation *pview = EV_VIEW_PRESENTATION (object);
+
+ switch (prop_id) {
+ case PROP_DOCUMENT:
+ pview->document = g_value_dup_object (value);
+ pview->enable_animations = EV_IS_DOCUMENT_TRANSITION (pview->document);
+ break;
+ case PROP_CURRENT_PAGE:
+ pview->current_page = g_value_get_uint (value);
+ break;
+ case PROP_ROTATION:
+ pview->rotation = g_value_get_uint (value);
+ break;
+ case PROP_INVERTED_COLORS:
+ pview->inverted_colors = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static GObject *
+ev_view_presentation_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ EvViewPresentation *pview;
+
+ object = G_OBJECT_CLASS (ev_view_presentation_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_params);
+ pview = EV_VIEW_PRESENTATION (object);
+
+ if (EV_IS_DOCUMENT_LINKS (pview->document)) {
+ pview->page_cache = ev_page_cache_new (pview->document);
+ ev_page_cache_set_flags (pview->page_cache, EV_PAGE_DATA_INCLUDE_LINKS);
+ }
+
+ return object;
+}
+
+static void
+ev_view_presentation_class_init (EvViewPresentationClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass);
+ GtkBindingSet *binding_set;
+
+ klass->change_page = ev_view_presentation_change_page;
+
+ widget_class->size_request = ev_view_presentation_size_request;
+ widget_class->realize = ev_view_presentation_realize;
+ widget_class->expose_event = ev_view_presentation_expose_event;
+ widget_class->key_press_event = ev_view_presentation_key_press_event;
+ widget_class->button_release_event = ev_view_presentation_button_release_event;
+ widget_class->focus_out_event = ev_view_presentation_focus_out;
+ widget_class->motion_notify_event = ev_view_presentation_motion_notify_event;
+ widget_class->scroll_event = ev_view_presentation_scroll_event;
+
+ gtk_object_class->destroy = ev_view_presentation_destroy;
+
+ gobject_class->constructor = ev_view_presentation_constructor;
+ gobject_class->set_property = ev_view_presentation_set_property;
+
+ g_object_class_install_property (gobject_class,
+ PROP_DOCUMENT,
+ g_param_spec_object ("document",
+ "Document",
+ "Document",
+ EV_TYPE_DOCUMENT,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (gobject_class,
+ PROP_CURRENT_PAGE,
+ g_param_spec_uint ("current_page",
+ "Current Page",
+ "The current page",
+ 0, G_MAXUINT, 0,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (gobject_class,
+ PROP_ROTATION,
+ g_param_spec_uint ("rotation",
+ "Rotation",
+ "Current rotation angle",
+ 0, 360, 0,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (gobject_class,
+ PROP_INVERTED_COLORS,
+ g_param_spec_boolean ("inverted_colors",
+ "Inverted Colors",
+ "Whether presentation is displayed with inverted colors",
+ FALSE,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+
+ signals[CHANGE_PAGE] =
+ g_signal_new ("change_page",
+ G_OBJECT_CLASS_TYPE (gobject_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvViewPresentationClass, change_page),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__ENUM,
+ G_TYPE_NONE, 1,
+ GTK_TYPE_SCROLL_TYPE);
+ signals[FINISHED] =
+ g_signal_new ("finished",
+ G_OBJECT_CLASS_TYPE (gobject_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvViewPresentationClass, finished),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0,
+ G_TYPE_NONE);
+
+ binding_set = gtk_binding_set_by_class (klass);
+ add_change_page_binding_keypad (binding_set, GDK_Left, 0, GTK_SCROLL_PAGE_BACKWARD);
+ add_change_page_binding_keypad (binding_set, GDK_Right, 0, GTK_SCROLL_PAGE_FORWARD);
+ add_change_page_binding_keypad (binding_set, GDK_Up, 0, GTK_SCROLL_PAGE_BACKWARD);
+ add_change_page_binding_keypad (binding_set, GDK_Down, 0, GTK_SCROLL_PAGE_FORWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_space, 0,
+ "change_page", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_FORWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_BackSpace, 0,
+ "change_page", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_BACKWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_Page_Down, 0,
+ "change_page", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_FORWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_Page_Up, 0,
+ "change_page", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_BACKWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_J, 0,
+ "change_page", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_FORWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_H, 0,
+ "change_page", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_BACKWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_L, 0,
+ "change_page", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_FORWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_K, 0,
+ "change_page", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_BACKWARD);
+}
+
+static void
+ev_view_presentation_init (EvViewPresentation *pview)
+{
+ gtk_widget_set_can_focus (GTK_WIDGET (pview), TRUE);
+}
+
+GtkWidget *
+ev_view_presentation_new (EvDocument *document,
+ guint current_page,
+ guint rotation,
+ gboolean inverted_colors)
+{
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
+ g_return_val_if_fail (current_page < ev_document_get_n_pages (document), NULL);
+
+ return GTK_WIDGET (g_object_new (EV_TYPE_VIEW_PRESENTATION,
+ "document", document,
+ "current_page", current_page,
+ "rotation", rotation,
+ "inverted_colors", inverted_colors,
+ NULL));
+}
+
+guint
+ev_view_presentation_get_current_page (EvViewPresentation *pview)
+{
+ return pview->current_page;
+}
diff --git a/libview/ev-view-presentation.h b/libview/ev-view-presentation.h
new file mode 100644
index 00000000..3aaf6f06
--- /dev/null
+++ b/libview/ev-view-presentation.h
@@ -0,0 +1,51 @@
+/* ev-view-presentation.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2010 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-view.h> can be included directly."
+#endif
+
+#ifndef __EV_VIEW_PRESENTATION_H__
+#define __EV_VIEW_PRESENTATION_H__
+
+#include <gtk/gtk.h>
+
+#include <evince-document.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_VIEW_PRESENTATION (ev_view_presentation_get_type ())
+#define EV_VIEW_PRESENTATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_VIEW_PRESENTATION, EvViewPresentation))
+#define EV_IS_VIEW_PRESENTATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_VIEW_PRESENTATION))
+
+typedef struct _EvViewPresentation EvViewPresentation;
+typedef struct _EvViewPresentationClass EvViewPresentationClass;
+
+GType ev_view_presentation_get_type (void) G_GNUC_CONST;
+
+GtkWidget *ev_view_presentation_new (EvDocument *document,
+ guint current_page,
+ guint rotation,
+ gboolean inverted_colors);
+guint ev_view_presentation_get_current_page (EvViewPresentation *pview);
+
+G_END_DECLS
+
+#endif /* __EV_VIEW_PRESENTATION_H__ */
diff --git a/libview/ev-view-private.h b/libview/ev-view-private.h
new file mode 100644
index 00000000..8ecd12db
--- /dev/null
+++ b/libview/ev-view-private.h
@@ -0,0 +1,225 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (EVINCE_COMPILATION)
+#error "This is a private header."
+#endif
+
+#ifndef __EV_VIEW_PRIVATE_H__
+#define __EV_VIEW_PRIVATE_H__
+
+#include "ev-view.h"
+#include "ev-document-model.h"
+#include "ev-pixbuf-cache.h"
+#include "ev-page-cache.h"
+#include "ev-jobs.h"
+#include "ev-image.h"
+#include "ev-form-field.h"
+#include "ev-selection.h"
+#include "ev-view-cursor.h"
+
+#define DRAG_HISTORY 10
+
+/* Information for middle clicking and moving around the doc */
+typedef struct {
+ gboolean in_drag;
+ GdkPoint start;
+ gdouble hadj;
+ gdouble vadj;
+ guint drag_timeout_id;
+ guint release_timeout_id;
+ GdkPoint buffer[DRAG_HISTORY];
+ GdkPoint momentum;
+} DragInfo;
+
+/* Autoscrolling */
+typedef struct {
+ gboolean autoscrolling;
+ guint last_y;
+ guint start_y;
+ guint timeout_id;
+} AutoScrollInfo;
+
+/* Information for handling selection */
+typedef struct {
+ gboolean in_drag;
+ GdkPoint start;
+ gboolean in_selection;
+ GList *selections;
+ EvSelectionStyle style;
+} SelectionInfo;
+
+/* Information for handling images DND */
+typedef struct {
+ gboolean in_drag;
+ GdkPoint start;
+ EvImage *image;
+} ImageDNDInfo;
+
+/* Annotation popup windows */
+typedef struct {
+ GtkWidget *window;
+ guint page;
+
+ /* Current position */
+ gint x;
+ gint y;
+
+ /* EvView root position */
+ gint parent_x;
+ gint parent_y;
+
+ /* Document coords */
+ gdouble orig_x;
+ gdouble orig_y;
+
+ gboolean visible;
+ gboolean moved;
+} EvViewWindowChild;
+
+typedef enum {
+ SCROLL_TO_KEEP_POSITION,
+ SCROLL_TO_PAGE_POSITION,
+ SCROLL_TO_CENTER,
+ SCROLL_TO_FIND_LOCATION,
+} PendingScroll;
+
+typedef struct _EvHeightToPageCache {
+ gint rotation;
+ gdouble *height_to_page;
+ gdouble *dual_height_to_page;
+} EvHeightToPageCache;
+
+struct _EvView {
+ GtkLayout layout;
+
+ EvDocument *document;
+
+ /* Find */
+ GList **find_pages;
+ gint find_result;
+ gboolean jump_to_find_result;
+ gboolean highlight_find_results;
+
+ EvDocumentModel *model;
+ EvPixbufCache *pixbuf_cache;
+ gsize pixbuf_cache_size;
+ EvPageCache *page_cache;
+ EvHeightToPageCache *height_to_page_cache;
+ EvViewCursor cursor;
+ EvJobRender *current_job;
+
+ GtkRequisition requisition;
+ gboolean internal_size_request;
+
+ /* Scrolling */
+ GtkAdjustment *hadjustment;
+ GtkAdjustment *vadjustment;
+
+ gint scroll_x;
+ gint scroll_y;
+
+ PendingScroll pending_scroll;
+ gboolean pending_resize;
+ EvPoint pending_point;
+
+ /* Current geometry */
+
+ gint start_page;
+ gint end_page;
+ gint current_page;
+
+ gint rotation;
+ gdouble scale;
+ gint spacing;
+
+ gboolean loading;
+ gboolean continuous;
+ gboolean dual_page;
+ gboolean fullscreen;
+ EvSizingMode sizing_mode;
+ GtkWidget *loading_window;
+ guint loading_timeout;
+
+ /* Common for button press handling */
+ int pressed_button;
+
+ /* Information for middle clicking and dragging around. */
+ DragInfo drag_info;
+
+ /* Autoscrolling */
+ AutoScrollInfo scroll_info;
+
+ /* Selection */
+ GdkPoint motion;
+ guint selection_update_id;
+ guint selection_scroll_id;
+
+ EvViewSelectionMode selection_mode;
+ SelectionInfo selection_info;
+
+ /* Copy link address selection */
+ EvLinkAction *link_selected;
+
+ /* Image DND */
+ ImageDNDInfo image_dnd_info;
+
+ /* Annotations */
+ GList *window_children;
+ EvViewWindowChild *window_child_focus;
+ EvMapping *focus_annotation;
+ gboolean adding_annot;
+ EvAnnotationType adding_annot_type;
+
+ /* Synctex */
+ EvMapping *synctex_result;
+
+ /* Accessibility */
+ gboolean a11y_enabled;
+};
+
+struct _EvViewClass {
+ GtkLayoutClass parent_class;
+
+ void (*binding_activated) (EvView *view,
+ GtkScrollType scroll,
+ gboolean horizontal);
+ void (*handle_link) (EvView *view,
+ EvLink *link);
+ void (*external_link) (EvView *view,
+ EvLinkAction *action);
+ void (*popup_menu) (EvView *view,
+ GList *items);
+ void (*selection_changed) (EvView *view);
+ void (*sync_source) (EvView *view,
+ EvSourceLink *link);
+ void (*annot_added) (EvView *view,
+ EvAnnotation *annot);
+};
+
+void _get_page_size_for_scale_and_rotation (EvDocument *document,
+ gint page,
+ gdouble scale,
+ gint rotation,
+ gint *page_width,
+ gint *page_height);
+
+#endif /* __EV_VIEW_PRIVATE_H__ */
+
diff --git a/libview/ev-view-type-builtins.c.template b/libview/ev-view-type-builtins.c.template
new file mode 100644
index 00000000..01ca13af
--- /dev/null
+++ b/libview/ev-view-type-builtins.c.template
@@ -0,0 +1,44 @@
+/*** BEGIN file-header ***/
+#include <config.h>
+
+#include "ev-view-type-builtins.h"
+
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+/* enumerations from "@filename@" */
+#include "@filename@"
+/*** END file-production ***/
+
+
+/*** BEGIN value-header ***/
+GType
+@enum_name@_get_type (void)
+{
+ static volatile gsize g_define_type_id__volatile = 0;
+
+ if (g_once_init_enter (&g_define_type_id__volatile)) {
+ static const G@Type@Value values[] = {
+/*** END value-header ***/
+
+/*** BEGIN value-production ***/
+ { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
+/*** END value-production ***/
+
+/*** BEGIN value-tail ***/
+ { 0, NULL, NULL }
+ };
+ GType g_define_type_id = \
+ g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
+
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
+ }
+
+ return g_define_type_id__volatile;
+}
+
+/*** END value-tail ***/
+
+/*** BEGIN file-tail ***/
+
+/*** END file-tail ***/
diff --git a/libview/ev-view-type-builtins.h.template b/libview/ev-view-type-builtins.h.template
new file mode 100644
index 00000000..c4ba4974
--- /dev/null
+++ b/libview/ev-view-type-builtins.h.template
@@ -0,0 +1,29 @@
+/*** BEGIN file-header ***/
+
+#if !defined (__EV_EVINCE_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-view.h> can be included directly."
+#endif
+
+#ifndef EV_VIEW_TYPE_BUILTINS_H
+#define EV_VIEW_TYPE_BUILTINS_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+/*** END file-header ***/
+
+/*** BEGIN file-production ***/
+
+/* enumerations from "@filename@" */
+/*** END file-production ***/
+
+/*** BEGIN value-header ***/
+GType @enum_name@_get_type (void) G_GNUC_CONST;
+#define EV_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
+/*** END value-header ***/
+
+/*** BEGIN file-tail ***/
+G_END_DECLS
+
+#endif /* !EV_VIEW_TYPE_BUILTINS_H */
+/*** END file-tail ***/
diff --git a/libview/ev-view.c b/libview/ev-view.c
new file mode 100644
index 00000000..b47d6047
--- /dev/null
+++ b/libview/ev-view.c
@@ -0,0 +1,6274 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "ev-mapping-list.h"
+#include "ev-document-forms.h"
+#include "ev-document-images.h"
+#include "ev-document-links.h"
+#include "ev-document-misc.h"
+#include "ev-pixbuf-cache.h"
+#include "ev-page-cache.h"
+#include "ev-view-marshal.h"
+#include "ev-document-annotations.h"
+#include "ev-annotation-window.h"
+#include "ev-loading-window.h"
+#include "ev-view.h"
+#include "ev-view-accessible.h"
+#include "ev-view-private.h"
+#include "ev-view-type-builtins.h"
+
+#define EV_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_VIEW, EvViewClass))
+#define EV_IS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EV_TYPE_VIEW))
+#define EV_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EV_TYPE_VIEW, EvViewClass))
+
+enum {
+ SIGNAL_BINDING_ACTIVATED,
+ SIGNAL_HANDLE_LINK,
+ SIGNAL_EXTERNAL_LINK,
+ SIGNAL_POPUP_MENU,
+ SIGNAL_SELECTION_CHANGED,
+ SIGNAL_SYNC_SOURCE,
+ SIGNAL_ANNOT_ADDED,
+ N_SIGNALS
+};
+
+enum {
+ TARGET_DND_URI,
+ TARGET_DND_TEXT,
+ TARGET_DND_IMAGE
+};
+
+static guint signals[N_SIGNALS];
+
+typedef enum {
+ EV_VIEW_FIND_NEXT,
+ EV_VIEW_FIND_PREV
+} EvViewFindDirection;
+
+#define ZOOM_IN_FACTOR 1.2
+#define ZOOM_OUT_FACTOR (1.0/ZOOM_IN_FACTOR)
+
+#define SCROLL_TIME 150
+
+/*** Scrolling ***/
+static void ev_view_set_scroll_adjustments (GtkLayout *layout,
+ GtkAdjustment *hadjustment,
+ GtkAdjustment *vadjustment);
+static void view_update_range_and_current_page (EvView *view);
+static void set_scroll_adjustment (EvView *view,
+ GtkOrientation orientation,
+ GtkAdjustment *adjustment);
+static void add_scroll_binding_keypad (GtkBindingSet *binding_set,
+ guint keyval,
+ GdkModifierType modifiers,
+ GtkScrollType scroll,
+ gboolean horizontal);
+static void ensure_rectangle_is_visible (EvView *view,
+ GdkRectangle *rect);
+
+/*** Geometry computations ***/
+static void compute_border (EvView *view,
+ int width,
+ int height,
+ GtkBorder *border);
+static void get_page_y_offset (EvView *view,
+ int page,
+ int *y_offset);
+static void view_rect_to_doc_rect (EvView *view,
+ GdkRectangle *view_rect,
+ GdkRectangle *page_area,
+ EvRectangle *doc_rect);
+static void doc_rect_to_view_rect (EvView *view,
+ int page,
+ EvRectangle *doc_rect,
+ GdkRectangle *view_rect);
+static gboolean get_dual_even_left (EvView *view);
+static void find_page_at_location (EvView *view,
+ gdouble x,
+ gdouble y,
+ gint *page,
+ gint *x_offset,
+ gint *y_offset);
+static void doc_point_to_view_point (EvView *view,
+ int page,
+ EvPoint *doc_point,
+ GdkPoint *view_point);
+/*** Hyperrefs ***/
+static EvLink * ev_view_get_link_at_location (EvView *view,
+ gdouble x,
+ gdouble y);
+static char* tip_from_link (EvView *view,
+ EvLink *link);
+/*** Forms ***/
+static EvFormField *ev_view_get_form_field_at_location (EvView *view,
+ gdouble x,
+ gdouble y);
+
+/*** Annotations ***/
+static EvAnnotation *ev_view_get_annotation_at_location (EvView *view,
+ gdouble x,
+ gdouble y);
+static void show_annotation_windows (EvView *view,
+ gint page);
+static void hide_annotation_windows (EvView *view,
+ gint page);
+/*** GtkWidget implementation ***/
+static void ev_view_size_request_continuous_dual_page (EvView *view,
+ GtkRequisition *requisition);
+static void ev_view_size_request_continuous (EvView *view,
+ GtkRequisition *requisition);
+static void ev_view_size_request_dual_page (EvView *view,
+ GtkRequisition *requisition);
+static void ev_view_size_request_single_page (EvView *view,
+ GtkRequisition *requisition);
+static void ev_view_size_request (GtkWidget *widget,
+ GtkRequisition *requisition);
+static void ev_view_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation);
+static void ev_view_realize (GtkWidget *widget);
+static gboolean ev_view_scroll_event (GtkWidget *widget,
+ GdkEventScroll *event);
+static gboolean ev_view_expose_event (GtkWidget *widget,
+ GdkEventExpose *event);
+static gboolean ev_view_popup_menu (GtkWidget *widget);
+static gboolean ev_view_button_press_event (GtkWidget *widget,
+ GdkEventButton *event);
+static gboolean ev_view_motion_notify_event (GtkWidget *widget,
+ GdkEventMotion *event);
+static gboolean ev_view_button_release_event (GtkWidget *widget,
+ GdkEventButton *event);
+static gboolean ev_view_enter_notify_event (GtkWidget *widget,
+ GdkEventCrossing *event);
+static gboolean ev_view_leave_notify_event (GtkWidget *widget,
+ GdkEventCrossing *event);
+static void ev_view_style_set (GtkWidget *widget,
+ GtkStyle *old_style);
+static void ev_view_remove_all (EvView *view);
+
+static AtkObject *ev_view_get_accessible (GtkWidget *widget);
+
+/*** Drawing ***/
+static void highlight_find_results (EvView *view,
+ int page);
+static void highlight_forward_search_results (EvView *view,
+ int page);
+static void focus_annotation (EvView *view,
+ int page,
+ GdkRectangle *clip);
+static void draw_one_page (EvView *view,
+ gint page,
+ cairo_t *cr,
+ GdkRectangle *page_area,
+ GtkBorder *border,
+ GdkRectangle *expose_area,
+ gboolean *page_ready);
+static void show_loading_window (EvView *view);
+static void hide_loading_window (EvView *view);
+static void ev_view_reload_page (EvView *view,
+ gint page,
+ cairo_region_t *region);
+static void ev_view_loading_window_move (EvView *view);
+
+/*** Callbacks ***/
+static void ev_view_change_page (EvView *view,
+ gint new_page);
+static void job_finished_cb (EvPixbufCache *pixbuf_cache,
+ cairo_region_t *region,
+ EvView *view);
+static void ev_view_page_changed_cb (EvDocumentModel *model,
+ gint old_page,
+ gint new_page,
+ EvView *view);
+static void on_adjustment_value_changed (GtkAdjustment *adjustment,
+ EvView *view);
+
+/*** GObject ***/
+static void ev_view_finalize (GObject *object);
+static void ev_view_destroy (GtkObject *object);
+static void ev_view_class_init (EvViewClass *class);
+static void ev_view_init (EvView *view);
+
+/*** Zoom and sizing ***/
+static double zoom_for_size_fit_width (gdouble doc_width,
+ gdouble doc_height,
+ int target_width,
+ int target_height);
+static double zoom_for_size_fit_height (gdouble doc_width,
+ gdouble doc_height,
+ int target_width,
+ int target_height);
+static double zoom_for_size_best_fit (gdouble doc_width,
+ gdouble doc_height,
+ int target_width,
+ int target_height);
+static void ev_view_zoom_for_size (EvView *view,
+ int width,
+ int height);
+static void ev_view_zoom_for_size_continuous_and_dual_page (EvView *view,
+ int width,
+ int height);
+static void ev_view_zoom_for_size_continuous (EvView *view,
+ int width,
+ int height);
+static void ev_view_zoom_for_size_dual_page (EvView *view,
+ int width,
+ int height);
+static void ev_view_zoom_for_size_single_page (EvView *view,
+ int width,
+ int height);
+/*** Cursors ***/
+static void ev_view_set_cursor (EvView *view,
+ EvViewCursor new_cursor);
+static void ev_view_handle_cursor_over_xy (EvView *view,
+ gint x,
+ gint y);
+
+/*** Find ***/
+static gint ev_view_find_get_n_results (EvView *view,
+ gint page);
+static EvRectangle *ev_view_find_get_result (EvView *view,
+ gint page,
+ gint result);
+static void jump_to_find_result (EvView *view);
+static void jump_to_find_page (EvView *view,
+ EvViewFindDirection direction,
+ gint shift);
+/*** Selection ***/
+static void compute_selections (EvView *view,
+ EvSelectionStyle style,
+ GdkPoint *start,
+ GdkPoint *stop);
+static void clear_selection (EvView *view);
+static void clear_link_selected (EvView *view);
+static void selection_free (EvViewSelection *selection);
+static char* get_selected_text (EvView *ev_view);
+static void ev_view_primary_get_cb (GtkClipboard *clipboard,
+ GtkSelectionData *selection_data,
+ guint info,
+ gpointer data);
+static void ev_view_primary_clear_cb (GtkClipboard *clipboard,
+ gpointer data);
+static void ev_view_update_primary_selection (EvView *ev_view);
+
+G_DEFINE_TYPE (EvView, ev_view, GTK_TYPE_LAYOUT)
+
+/* HeightToPage cache */
+#define EV_HEIGHT_TO_PAGE_CACHE_KEY "ev-height-to-page-cache"
+
+static void
+build_height_to_page (EvHeightToPageCache *cache,
+ EvDocument *document,
+ gint rotation)
+{
+ gboolean swap, uniform, dual_even_left;
+ int i;
+ double uniform_height, page_height, next_page_height;
+ double saved_height;
+ gdouble u_width, u_height;
+ gint n_pages;
+
+ swap = (rotation == 90 || rotation == 270);
+
+ uniform = ev_document_is_page_size_uniform (document);
+ n_pages = ev_document_get_n_pages (document);
+ dual_even_left = (n_pages > 2);
+
+ g_free (cache->height_to_page);
+ g_free (cache->dual_height_to_page);
+
+ cache->rotation = rotation;
+ cache->height_to_page = g_new0 (gdouble, n_pages + 1);
+ cache->dual_height_to_page = g_new0 (gdouble, n_pages + 2);
+
+ if (uniform)
+ ev_document_get_page_size (document, 0, &u_width, &u_height);
+
+ saved_height = 0;
+ for (i = 0; i <= n_pages; i++) {
+ if (uniform) {
+ uniform_height = swap ? u_width : u_height;
+ cache->height_to_page[i] = i * uniform_height;
+ } else {
+ if (i < n_pages) {
+ gdouble w, h;
+
+ ev_document_get_page_size (document, i, &w, &h);
+ page_height = swap ? w : h;
+ } else {
+ page_height = 0;
+ }
+ cache->height_to_page[i] = saved_height;
+ saved_height += page_height;
+ }
+ }
+
+ if (dual_even_left && !uniform) {
+ gdouble w, h;
+
+ ev_document_get_page_size (document, 0, &w, &h);
+ saved_height = swap ? w : h;
+ } else {
+ saved_height = 0;
+ }
+
+ for (i = dual_even_left; i < n_pages + 2; i += 2) {
+ if (uniform) {
+ uniform_height = swap ? u_width : u_height;
+ cache->dual_height_to_page[i] = ((i + dual_even_left) / 2) * uniform_height;
+ if (i + 1 < n_pages + 2)
+ cache->dual_height_to_page[i + 1] = ((i + dual_even_left) / 2) * uniform_height;
+ } else {
+ if (i + 1 < n_pages) {
+ gdouble w, h;
+
+ ev_document_get_page_size (document, i + 1, &w, &h);
+ next_page_height = swap ? w : h;
+ } else {
+ next_page_height = 0;
+ }
+
+ if (i < n_pages) {
+ gdouble w, h;
+
+ ev_document_get_page_size (document, i, &w, &h);
+ page_height = swap ? w : h;
+ } else {
+ page_height = 0;
+ }
+
+ if (i + 1 < n_pages + 2) {
+ cache->dual_height_to_page[i] = saved_height;
+ cache->dual_height_to_page[i + 1] = saved_height;
+ saved_height += MAX(page_height, next_page_height);
+ } else {
+ cache->dual_height_to_page[i] = saved_height;
+ }
+ }
+ }
+}
+
+static void
+ev_height_to_page_cache_get_height (EvHeightToPageCache *cache,
+ EvDocument *document,
+ gint page,
+ gint rotation,
+ gdouble *height,
+ gdouble *dual_height)
+{
+ if (cache->rotation != rotation)
+ build_height_to_page (cache, document, rotation);
+
+ *height = cache->height_to_page[page];
+ *dual_height = cache->dual_height_to_page[page];
+}
+
+static void
+ev_height_to_page_cache_free (EvHeightToPageCache *cache)
+{
+ if (cache->height_to_page) {
+ g_free (cache->height_to_page);
+ cache->height_to_page = NULL;
+ }
+
+ if (cache->dual_height_to_page) {
+ g_free (cache->dual_height_to_page);
+ cache->dual_height_to_page = NULL;
+ }
+ g_free (cache);
+}
+
+static EvHeightToPageCache *
+ev_view_get_height_to_page_cache (EvView *view)
+{
+ EvHeightToPageCache *cache;
+
+ if (!view->document)
+ return NULL;
+
+ cache = g_object_get_data (G_OBJECT (view->document), EV_HEIGHT_TO_PAGE_CACHE_KEY);
+ if (!cache) {
+ cache = g_new0 (EvHeightToPageCache, 1);
+ build_height_to_page (cache, view->document, view->rotation);
+ g_object_set_data_full (G_OBJECT (view->document),
+ EV_HEIGHT_TO_PAGE_CACHE_KEY,
+ cache,
+ (GDestroyNotify)ev_height_to_page_cache_free);
+ }
+
+ return cache;
+}
+
+static void
+ev_view_get_height_to_page (EvView *view,
+ gint page,
+ gint *height,
+ gint *dual_height)
+{
+ gdouble h, dh;
+
+ if (!view->height_to_page_cache)
+ return;
+
+ ev_height_to_page_cache_get_height (view->height_to_page_cache,
+ view->document,
+ page,
+ view->rotation,
+ &h, &dh);
+ if (height)
+ *height = (gint)(h * view->scale + 0.5);
+
+ if (dual_height)
+ *dual_height = (gint)(dh * view->scale + 0.5);
+}
+
+static gint
+ev_view_get_scrollbar_size (EvView *view,
+ GtkOrientation orientation)
+{
+ GtkWidget *widget = GTK_WIDGET (view);
+ GtkWidget *sb;
+ GtkWidget *swindow = gtk_widget_get_parent (GTK_WIDGET (view));
+ GtkAllocation allocation;
+ GtkRequisition req;
+ gint spacing;
+
+ if (!GTK_IS_SCROLLED_WINDOW (swindow))
+ return 0;
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+ if (orientation == GTK_ORIENTATION_VERTICAL) {
+ if (allocation.height >= view->requisition.height)
+ sb = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (swindow));
+ else
+ return 0;
+ } else {
+ if (allocation.width >= view->requisition.width)
+ sb = gtk_scrolled_window_get_hscrollbar (GTK_SCROLLED_WINDOW (swindow));
+ else
+ return 0;
+ }
+
+ gtk_widget_style_get (swindow, "scrollbar_spacing", &spacing, NULL);
+ gtk_widget_size_request (sb, &req);
+
+ return (orientation == GTK_ORIENTATION_VERTICAL ? req.width : req.height) + spacing;
+}
+
+static void
+scroll_to_point (EvView *view,
+ gdouble x,
+ gdouble y,
+ GtkOrientation orientation)
+{
+ gdouble page_size;
+ gdouble upper, lower;
+
+ if (orientation == GTK_ORIENTATION_VERTICAL) {
+ page_size = gtk_adjustment_get_page_size (view->vadjustment);
+ upper = gtk_adjustment_get_upper (view->vadjustment);
+ lower = gtk_adjustment_get_lower (view->vadjustment);
+
+ if (view->continuous) {
+ gtk_adjustment_clamp_page (view->vadjustment,
+ y - view->spacing / 2,
+ y + page_size);
+ } else {
+ gtk_adjustment_set_value (view->vadjustment,
+ CLAMP (y, lower, upper - page_size));
+ }
+ } else {
+ page_size = gtk_adjustment_get_page_size (view->hadjustment);
+ upper = gtk_adjustment_get_upper (view->hadjustment);
+ lower = gtk_adjustment_get_lower (view->hadjustment);
+
+ if (view->dual_page) {
+ gtk_adjustment_clamp_page (view->hadjustment, x,
+ x + page_size);
+ } else {
+ gtk_adjustment_set_value (view->hadjustment,
+ CLAMP (x, lower, upper - page_size));
+ }
+ }
+}
+
+static void
+ev_view_scroll_to_page_position (EvView *view, GtkOrientation orientation)
+{
+ gdouble x, y;
+
+ if (!view->document)
+ return;
+
+ if ((orientation == GTK_ORIENTATION_VERTICAL && view->pending_point.y == 0) ||
+ (orientation == GTK_ORIENTATION_HORIZONTAL && view->pending_point.x == 0)) {
+ GdkRectangle page_area;
+ GtkBorder border;
+
+ ev_view_get_page_extents (view, view->current_page, &page_area, &border);
+ x = page_area.x;
+ y = page_area.y;
+ } else {
+ GdkPoint view_point;
+
+ doc_point_to_view_point (view, view->current_page,
+ &view->pending_point, &view_point);
+ x = view_point.x;
+ y = view_point.y;
+ }
+
+ scroll_to_point (view, x, y, orientation);
+}
+
+static void
+view_set_adjustment_values (EvView *view,
+ GtkOrientation orientation)
+{
+ GtkWidget *widget = GTK_WIDGET (view);
+ GtkAdjustment *adjustment;
+ GtkAllocation allocation;
+ int req_size;
+ int alloc_size;
+ gdouble page_size;
+ gdouble value;
+ gdouble upper;
+ double factor;
+ gint new_value;
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+ if (orientation == GTK_ORIENTATION_HORIZONTAL) {
+ req_size = view->requisition.width;
+ alloc_size = allocation.width;
+ adjustment = view->hadjustment;
+ } else {
+ req_size = view->requisition.height;
+ alloc_size = allocation.height;
+ adjustment = view->vadjustment;
+ }
+
+ if (!adjustment)
+ return;
+
+ factor = 1.0;
+ value = gtk_adjustment_get_value (adjustment);
+ upper = gtk_adjustment_get_upper (adjustment);
+ page_size = gtk_adjustment_get_page_size (adjustment);
+
+ switch (view->pending_scroll) {
+ case SCROLL_TO_KEEP_POSITION:
+ case SCROLL_TO_FIND_LOCATION:
+ factor = value / upper;
+ break;
+ case SCROLL_TO_PAGE_POSITION:
+ break;
+ case SCROLL_TO_CENTER:
+ factor = (value + page_size * 0.5) / upper;
+ break;
+ }
+
+ upper = MAX (alloc_size, req_size);
+ page_size = alloc_size;
+
+ gtk_adjustment_set_page_size (adjustment, page_size);
+ gtk_adjustment_set_step_increment (adjustment, alloc_size * 0.1);
+ gtk_adjustment_set_page_increment (adjustment, alloc_size * 0.9);
+ gtk_adjustment_set_lower (adjustment, 0);
+ gtk_adjustment_set_upper (adjustment, upper);
+
+ /*
+ * We add 0.5 to the values before to average out our rounding errors.
+ */
+ switch (view->pending_scroll) {
+ case SCROLL_TO_KEEP_POSITION:
+ case SCROLL_TO_FIND_LOCATION:
+ new_value = CLAMP (upper * factor + 0.5, 0, upper - page_size);
+ gtk_adjustment_set_value (adjustment, (int)new_value);
+ break;
+ case SCROLL_TO_PAGE_POSITION:
+ ev_view_scroll_to_page_position (view, orientation);
+ break;
+ case SCROLL_TO_CENTER:
+ new_value = CLAMP (upper * factor - page_size * 0.5 + 0.5,
+ 0, upper - page_size);
+ gtk_adjustment_set_value (adjustment, (int)new_value);
+ break;
+ }
+
+ gtk_adjustment_changed (adjustment);
+}
+
+static void
+view_update_range_and_current_page (EvView *view)
+{
+ gint start = view->start_page;
+ gint end = view->end_page;
+
+ if (ev_document_get_n_pages (view->document) <= 0 ||
+ !ev_document_check_dimensions (view->document))
+ return;
+
+ if (view->continuous) {
+ GdkRectangle current_area, unused, page_area;
+ GtkBorder border;
+ gboolean found = FALSE;
+ gint area_max = -1, area;
+ gint best_current_page = -1;
+ int i, j = 0;
+
+ if (!(view->vadjustment && view->hadjustment))
+ return;
+
+ current_area.x = gtk_adjustment_get_value (view->hadjustment);
+ current_area.width = gtk_adjustment_get_page_size (view->hadjustment);
+ current_area.y = gtk_adjustment_get_value (view->vadjustment);
+ current_area.height = gtk_adjustment_get_page_size (view->vadjustment);
+
+ for (i = 0; i < ev_document_get_n_pages (view->document); i++) {
+
+ ev_view_get_page_extents (view, i, &page_area, &border);
+
+ if (gdk_rectangle_intersect (&current_area, &page_area, &unused)) {
+ area = unused.width * unused.height;
+
+ if (!found) {
+ area_max = area;
+ view->start_page = i;
+ found = TRUE;
+ best_current_page = i;
+ }
+ if (area > area_max) {
+ best_current_page = (area == area_max) ? MIN (i, best_current_page) : i;
+ area_max = area;
+ }
+
+ view->end_page = i;
+ j = 0;
+ } else if (found && view->current_page <= view->end_page) {
+ if (view->dual_page && j < 1) {
+ /* In dual mode we stop searching
+ * after two consecutive non-visible pages.
+ */
+ j++;
+ continue;
+ }
+ break;
+ }
+ }
+
+ if (view->pending_scroll == SCROLL_TO_KEEP_POSITION) {
+ best_current_page = MAX (best_current_page, view->start_page);
+
+ if (view->current_page != best_current_page) {
+ view->current_page = best_current_page;
+ hide_loading_window (view);
+ ev_document_model_set_page (view->model, best_current_page);
+ }
+ }
+ } else if (view->dual_page) {
+ if (view->current_page % 2 == get_dual_even_left (view)) {
+ view->start_page = view->current_page;
+ if (view->current_page + 1 < ev_document_get_n_pages (view->document))
+ view->end_page = view->start_page + 1;
+ else
+ view->end_page = view->start_page;
+ } else {
+ if (view->current_page < 1)
+ view->start_page = view->current_page;
+ else
+ view->start_page = view->current_page - 1;
+ view->end_page = view->current_page;
+ }
+ } else {
+ view->start_page = view->current_page;
+ view->end_page = view->current_page;
+ }
+
+ if (view->start_page == -1 || view->end_page == -1)
+ return;
+
+ if (start != view->start_page || end != view->end_page) {
+ gint i;
+
+ for (i = start; i < view->start_page && start != -1; i++) {
+ hide_annotation_windows (view, i);
+ }
+
+ for (i = end; i > view->end_page && end != -1; i--) {
+ hide_annotation_windows (view, i);
+ }
+ }
+
+ ev_page_cache_set_page_range (view->page_cache,
+ view->start_page,
+ view->end_page);
+ ev_pixbuf_cache_set_page_range (view->pixbuf_cache,
+ view->start_page,
+ view->end_page,
+ view->selection_info.selections);
+
+ if (ev_pixbuf_cache_get_surface (view->pixbuf_cache, view->current_page))
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+}
+
+static void
+set_scroll_adjustment (EvView *view,
+ GtkOrientation orientation,
+ GtkAdjustment *adjustment)
+{
+ GtkAdjustment **to_set;
+
+ if (orientation == GTK_ORIENTATION_HORIZONTAL)
+ to_set = &view->hadjustment;
+ else
+ to_set = &view->vadjustment;
+
+ if (*to_set != adjustment) {
+ if (*to_set) {
+ g_signal_handlers_disconnect_by_func (*to_set,
+ (gpointer) on_adjustment_value_changed,
+ view);
+ g_object_unref (*to_set);
+ }
+
+ *to_set = adjustment;
+ view_set_adjustment_values (view, orientation);
+
+ if (*to_set) {
+ g_object_ref (*to_set);
+ g_signal_connect (*to_set, "value_changed",
+ G_CALLBACK (on_adjustment_value_changed), view);
+ }
+ }
+}
+
+static void
+ev_view_set_scroll_adjustments (GtkLayout *layout,
+ GtkAdjustment *hadjustment,
+ GtkAdjustment *vadjustment)
+{
+ EvView *view = EV_VIEW (layout);
+
+ set_scroll_adjustment (view, GTK_ORIENTATION_HORIZONTAL, hadjustment);
+ set_scroll_adjustment (view, GTK_ORIENTATION_VERTICAL, vadjustment);
+
+ on_adjustment_value_changed (NULL, view);
+}
+
+static void
+add_scroll_binding_keypad (GtkBindingSet *binding_set,
+ guint keyval,
+ GdkModifierType modifiers,
+ GtkScrollType scroll,
+ gboolean horizontal)
+{
+ guint keypad_keyval = keyval - GDK_Left + GDK_KP_Left;
+
+ gtk_binding_entry_add_signal (binding_set, keyval, modifiers,
+ "binding_activated", 2,
+ GTK_TYPE_SCROLL_TYPE, scroll,
+ G_TYPE_BOOLEAN, horizontal);
+ gtk_binding_entry_add_signal (binding_set, keypad_keyval, modifiers,
+ "binding_activated", 2,
+ GTK_TYPE_SCROLL_TYPE, scroll,
+ G_TYPE_BOOLEAN, horizontal);
+}
+
+static gdouble
+compute_scroll_increment (EvView *view,
+ GtkScrollType scroll)
+{
+ GtkWidget *widget = GTK_WIDGET (view);
+ GtkAdjustment *adjustment = view->vadjustment;
+ cairo_region_t *text_region, *region;
+ GtkAllocation allocation;
+ gint page;
+ GdkRectangle rect;
+ EvRectangle doc_rect;
+ GdkRectangle page_area;
+ GtkBorder border;
+ gdouble fraction = 1.0;
+
+ if (scroll != GTK_SCROLL_PAGE_BACKWARD && scroll != GTK_SCROLL_PAGE_FORWARD)
+ return gtk_adjustment_get_page_size (adjustment);
+
+ page = scroll == GTK_SCROLL_PAGE_BACKWARD ? view->start_page : view->end_page;
+
+ text_region = ev_page_cache_get_text_mapping (view->page_cache, page);
+ if (!text_region || cairo_region_is_empty (text_region))
+ return gtk_adjustment_get_page_size (adjustment);
+
+ gtk_widget_get_allocation (widget, &allocation);
+ ev_view_get_page_extents (view, page, &page_area, &border);
+ rect.x = page_area.x + view->scroll_x;
+ rect.y = view->scroll_y + (scroll == GTK_SCROLL_PAGE_BACKWARD ? 5 : allocation.height - 5);
+ rect.width = page_area.width;
+ rect.height = 1;
+ view_rect_to_doc_rect (view, &rect, &page_area, &doc_rect);
+
+ /* Convert the doc rectangle into a GdkRectangle */
+ rect.x = doc_rect.x1;
+ rect.y = doc_rect.y1;
+ rect.width = doc_rect.x2 - doc_rect.x1;
+ rect.height = MAX (1, doc_rect.y2 - doc_rect.y1);
+ region = cairo_region_create_rectangle (&rect);
+
+ cairo_region_intersect (region, text_region);
+ if (cairo_region_num_rectangles (region)) {
+ EvRenderContext *rc;
+ EvPage *ev_page;
+ cairo_region_t *sel_region;
+
+ cairo_region_get_rectangle (region, 0, &rect);
+ ev_page = ev_document_get_page (view->document, page);
+ rc = ev_render_context_new (ev_page, view->rotation, view->scale);
+ g_object_unref (ev_page);
+ /* Get the selection region to know the height of the line */
+ doc_rect.x1 = doc_rect.x2 = rect.x + 0.5;
+ doc_rect.y1 = doc_rect.y2 = rect.y + 0.5;
+
+ ev_document_doc_mutex_lock ();
+ sel_region = ev_selection_get_selection_region (EV_SELECTION (view->document),
+ rc, EV_SELECTION_STYLE_LINE,
+ &doc_rect);
+ ev_document_doc_mutex_unlock ();
+
+ g_object_unref (rc);
+
+ if (cairo_region_num_rectangles (sel_region) > 0) {
+ cairo_region_get_rectangle (sel_region, 0, &rect);
+ fraction = 1 - (rect.height / gtk_adjustment_get_page_size (adjustment));
+ }
+ cairo_region_destroy (sel_region);
+ }
+ cairo_region_destroy (region);
+
+ return gtk_adjustment_get_page_size (adjustment) * fraction;
+
+}
+
+void
+ev_view_scroll (EvView *view,
+ GtkScrollType scroll,
+ gboolean horizontal)
+{
+ GtkAdjustment *adjustment;
+ double value, increment;
+ gdouble upper, lower;
+ gdouble page_size;
+ gdouble step_increment;
+ gboolean first_page = FALSE;
+ gboolean last_page = FALSE;
+
+ view->jump_to_find_result = FALSE;
+
+ if (view->sizing_mode == EV_SIZING_BEST_FIT) {
+ switch (scroll) {
+ case GTK_SCROLL_PAGE_BACKWARD:
+ case GTK_SCROLL_STEP_BACKWARD:
+ ev_view_previous_page (view);
+ break;
+ case GTK_SCROLL_PAGE_FORWARD:
+ case GTK_SCROLL_STEP_FORWARD:
+ ev_view_next_page (view);
+ break;
+ default:
+ break;
+ }
+ return;
+ }
+
+ /* Assign values for increment and vertical adjustment */
+ adjustment = horizontal ? view->hadjustment : view->vadjustment;
+ value = gtk_adjustment_get_value (adjustment);
+ upper = gtk_adjustment_get_upper (adjustment);
+ lower = gtk_adjustment_get_lower (adjustment);
+ page_size = gtk_adjustment_get_page_size (adjustment);
+ step_increment = gtk_adjustment_get_step_increment (adjustment);
+
+ /* Assign boolean for first and last page */
+ if (view->current_page == 0)
+ first_page = TRUE;
+ if (view->current_page == ev_document_get_n_pages (view->document) - 1)
+ last_page = TRUE;
+
+ switch (scroll) {
+ case GTK_SCROLL_PAGE_BACKWARD:
+ /* Do not jump backwards if at the first page */
+ if (value == lower && first_page) {
+ /* Do nothing */
+ /* At the top of a page, assign the upper bound limit of previous page */
+ } else if (value == lower) {
+ value = upper - page_size;
+ ev_view_previous_page (view);
+ /* Jump to the top */
+ } else {
+ increment = compute_scroll_increment (view, GTK_SCROLL_PAGE_BACKWARD);
+ value = MAX (value - increment, lower);
+ }
+ break;
+ case GTK_SCROLL_PAGE_FORWARD:
+ /* Do not jump forward if at the last page */
+ if (value == (upper - page_size) && last_page) {
+ /* Do nothing */
+ /* At the bottom of a page, assign the lower bound limit of next page */
+ } else if (value == (upper - page_size)) {
+ value = 0;
+ ev_view_next_page (view);
+ /* Jump to the bottom */
+ } else {
+ increment = compute_scroll_increment (view, GTK_SCROLL_PAGE_FORWARD);
+ value = MIN (value + increment, upper - page_size);
+ }
+ break;
+ case GTK_SCROLL_STEP_BACKWARD:
+ value -= step_increment;
+ break;
+ case GTK_SCROLL_STEP_FORWARD:
+ value += step_increment;
+ break;
+ case GTK_SCROLL_STEP_DOWN:
+ value -= step_increment / 10;
+ break;
+ case GTK_SCROLL_STEP_UP:
+ value += step_increment / 10;
+ break;
+ default:
+ break;
+ }
+
+ value = CLAMP (value, lower, upper - page_size);
+
+ gtk_adjustment_set_value (adjustment, value);
+}
+
+#define MARGIN 5
+
+static void
+ensure_rectangle_is_visible (EvView *view, GdkRectangle *rect)
+{
+ GtkWidget *widget = GTK_WIDGET (view);
+ GtkAdjustment *adjustment;
+ GtkAllocation allocation;
+ gdouble adj_value;
+ int value;
+
+ view->pending_scroll = SCROLL_TO_FIND_LOCATION;
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+ adjustment = view->vadjustment;
+ adj_value = gtk_adjustment_get_value (adjustment);
+
+ if (rect->y < adj_value) {
+ value = MAX (gtk_adjustment_get_lower (adjustment), rect->y - MARGIN);
+ gtk_adjustment_set_value (view->vadjustment, value);
+ } else if (rect->y + rect->height > adj_value + allocation.height) {
+ value = MIN (gtk_adjustment_get_upper (adjustment), rect->y + rect->height -
+ allocation.height + MARGIN);
+ gtk_adjustment_set_value (view->vadjustment, value);
+ }
+
+ adjustment = view->hadjustment;
+ adj_value = gtk_adjustment_get_value (adjustment);
+
+ if (rect->x < adj_value) {
+ value = MAX (gtk_adjustment_get_lower (adjustment), rect->x - MARGIN);
+ gtk_adjustment_set_value (view->hadjustment, value);
+ } else if (rect->x + rect->height > adj_value + allocation.width) {
+ value = MIN (gtk_adjustment_get_upper (adjustment), rect->x + rect->width -
+ allocation.width + MARGIN);
+ gtk_adjustment_set_value (view->hadjustment, value);
+ }
+
+ gtk_widget_queue_resize (GTK_WIDGET (view));
+}
+
+/*** Geometry computations ***/
+
+static void
+compute_border (EvView *view, int width, int height, GtkBorder *border)
+{
+ ev_document_misc_get_page_border_size (width, height, border);
+}
+
+void
+_get_page_size_for_scale_and_rotation (EvDocument *document,
+ gint page,
+ gdouble scale,
+ gint rotation,
+ gint *page_width,
+ gint *page_height)
+{
+ gdouble w, h;
+ gint width, height;
+
+ ev_document_get_page_size (document, page, &w, &h);
+
+ width = (gint)(w * scale + 0.5);
+ height = (gint)(h * scale + 0.5);
+
+ if (page_width)
+ *page_width = (rotation == 0 || rotation == 180) ? width : height;
+ if (page_height)
+ *page_height = (rotation == 0 || rotation == 180) ? height : width;
+}
+
+static void
+ev_view_get_page_size (EvView *view,
+ gint page,
+ gint *page_width,
+ gint *page_height)
+{
+ _get_page_size_for_scale_and_rotation (view->document,
+ page,
+ view->scale,
+ view->rotation,
+ page_width,
+ page_height);
+}
+
+static void
+ev_view_get_max_page_size (EvView *view,
+ gint *max_width,
+ gint *max_height)
+{
+ double w, h;
+ gint width, height;
+
+ ev_document_get_max_page_size (view->document, &w, &h);
+
+ width = (gint)(w * view->scale + 0.5);
+ height = (gint)(h * view->scale + 0.5);
+
+ if (max_width)
+ *max_width = (view->rotation == 0 || view->rotation == 180) ? width : height;
+ if (max_height)
+ *max_height = (view->rotation == 0 || view->rotation == 180) ? height : width;
+}
+
+static void
+get_page_y_offset (EvView *view, int page, int *y_offset)
+{
+ int max_width, offset;
+ GtkBorder border;
+
+ g_return_if_fail (y_offset != NULL);
+
+ ev_view_get_max_page_size (view, &max_width, NULL);
+ compute_border (view, max_width, max_width, &border);
+
+ if (view->dual_page) {
+ ev_view_get_height_to_page (view, page, NULL, &offset);
+ offset += ((page + get_dual_even_left (view)) / 2 + 1) * view->spacing +
+ ((page + get_dual_even_left (view)) / 2 ) * (border.top + border.bottom);
+ } else {
+ ev_view_get_height_to_page (view, page, &offset, NULL);
+ offset += (page + 1) * view->spacing + page * (border.top + border.bottom);
+ }
+
+ *y_offset = offset;
+ return;
+}
+
+gboolean
+ev_view_get_page_extents (EvView *view,
+ gint page,
+ GdkRectangle *page_area,
+ GtkBorder *border)
+{
+ GtkWidget *widget;
+ int width, height;
+ GtkAllocation allocation;
+
+ widget = GTK_WIDGET (view);
+ gtk_widget_get_allocation (widget, &allocation);
+
+ /* Get the size of the page */
+ ev_view_get_page_size (view, page, &width, &height);
+ compute_border (view, width, height, border);
+ page_area->width = width + border->left + border->right;
+ page_area->height = height + border->top + border->bottom;
+
+ if (view->continuous) {
+ gint max_width;
+ gint x, y;
+
+ ev_view_get_max_page_size (view, &max_width, NULL);
+ max_width = max_width + border->left + border->right;
+ /* Get the location of the bounding box */
+ if (view->dual_page) {
+ x = view->spacing + ((page % 2 == get_dual_even_left (view)) ? 0 : 1) * (max_width + view->spacing);
+ x = x + MAX (0, allocation.width - (max_width * 2 + view->spacing * 3)) / 2;
+ if (page % 2 == get_dual_even_left (view))
+ x = x + (max_width - width - border->left - border->right);
+ } else {
+ x = view->spacing;
+ x = x + MAX (0, allocation.width - (width + view->spacing * 2)) / 2;
+ }
+
+ get_page_y_offset (view, page, &y);
+
+ page_area->x = x;
+ page_area->y = y;
+ } else {
+ gint x, y;
+ if (view->dual_page) {
+ gint width_2, height_2;
+ gint max_width = width;
+ gint max_height = height;
+ GtkBorder overall_border;
+ gint other_page;
+
+ other_page = (page % 2 == get_dual_even_left (view)) ? page + 1: page - 1;
+
+ /* First, we get the bounding box of the two pages */
+ if (other_page < ev_document_get_n_pages (view->document)
+ && (0 <= other_page)) {
+ ev_view_get_page_size (view, other_page,
+ &width_2, &height_2);
+ if (width_2 > width)
+ max_width = width_2;
+ if (height_2 > height)
+ max_height = height_2;
+ }
+ compute_border (view, max_width, max_height, &overall_border);
+
+ /* Find the offsets */
+ x = view->spacing;
+ y = view->spacing;
+
+ /* Adjust for being the left or right page */
+ if (page % 2 == get_dual_even_left (view))
+ x = x + max_width - width;
+ else
+ x = x + (max_width + overall_border.left + overall_border.right) + view->spacing;
+
+ y = y + (max_height - height)/2;
+
+ /* Adjust for extra allocation */
+ x = x + MAX (0, allocation.width -
+ ((max_width + overall_border.left + overall_border.right) * 2 + view->spacing * 3))/2;
+ y = y + MAX (0, allocation.height - (height + view->spacing * 2))/2;
+ } else {
+ x = view->spacing;
+ y = view->spacing;
+
+ /* Adjust for extra allocation */
+ x = x + MAX (0, allocation.width - (width + border->left + border->right + view->spacing * 2))/2;
+ y = y + MAX (0, allocation.height - (height + border->top + border->bottom + view->spacing * 2))/2;
+ }
+
+ page_area->x = x;
+ page_area->y = y;
+ }
+
+ return TRUE;
+}
+
+static void
+get_doc_page_size (EvView *view,
+ gint page,
+ gdouble *width,
+ gdouble *height)
+{
+ double w, h;
+
+ ev_document_get_page_size (view->document, page, &w, &h);
+ if (view->rotation == 0 || view->rotation == 180) {
+ if (width) *width = w;
+ if (height) *height = h;
+ } else {
+ if (width) *width = h;
+ if (height) *height = w;
+ }
+}
+
+static void
+view_point_to_doc_point (EvView *view,
+ GdkPoint *view_point,
+ GdkRectangle *page_area,
+ double *doc_point_x,
+ double *doc_point_y)
+{
+ *doc_point_x = (double) (view_point->x - page_area->x) / view->scale;
+ *doc_point_y = (double) (view_point->y - page_area->y) / view->scale;
+}
+
+static void
+view_rect_to_doc_rect (EvView *view,
+ GdkRectangle *view_rect,
+ GdkRectangle *page_area,
+ EvRectangle *doc_rect)
+{
+ doc_rect->x1 = (double) (view_rect->x - page_area->x) / view->scale;
+ doc_rect->y1 = (double) (view_rect->y - page_area->y) / view->scale;
+ doc_rect->x2 = doc_rect->x1 + (double) view_rect->width / view->scale;
+ doc_rect->y2 = doc_rect->y1 + (double) view_rect->height / view->scale;
+}
+
+static void
+doc_point_to_view_point (EvView *view,
+ int page,
+ EvPoint *doc_point,
+ GdkPoint *view_point)
+{
+ GdkRectangle page_area;
+ GtkBorder border;
+ double x, y, view_x, view_y;
+ gdouble width, height;
+
+ get_doc_page_size (view, page, &width, &height);
+
+ if (view->rotation == 0) {
+ x = doc_point->x;
+ y = doc_point->y;
+ } else if (view->rotation == 90) {
+ x = width - doc_point->y;
+ y = doc_point->x;
+ } else if (view->rotation == 180) {
+ x = width - doc_point->x;
+ y = height - doc_point->y;
+ } else if (view->rotation == 270) {
+ x = doc_point->y;
+ y = height - doc_point->x;
+ } else {
+ g_assert_not_reached ();
+ }
+
+ ev_view_get_page_extents (view, page, &page_area, &border);
+
+ view_x = CLAMP (x * view->scale, 0, page_area.width);
+ view_y = CLAMP (y * view->scale, 0, page_area.height);
+ view_point->x = view_x + page_area.x;
+ view_point->y = view_y + page_area.y;
+}
+
+static void
+doc_rect_to_view_rect (EvView *view,
+ int page,
+ EvRectangle *doc_rect,
+ GdkRectangle *view_rect)
+{
+ GdkRectangle page_area;
+ GtkBorder border;
+ double x, y, w, h;
+ gdouble width, height;
+
+ get_doc_page_size (view, page, &width, &height);
+
+ if (view->rotation == 0) {
+ x = doc_rect->x1;
+ y = doc_rect->y1;
+ w = doc_rect->x2 - doc_rect->x1;
+ h = doc_rect->y2 - doc_rect->y1;
+ } else if (view->rotation == 90) {
+ x = width - doc_rect->y2;
+ y = doc_rect->x1;
+ w = doc_rect->y2 - doc_rect->y1;
+ h = doc_rect->x2 - doc_rect->x1;
+ } else if (view->rotation == 180) {
+ x = width - doc_rect->x2;
+ y = height - doc_rect->y2;
+ w = doc_rect->x2 - doc_rect->x1;
+ h = doc_rect->y2 - doc_rect->y1;
+ } else if (view->rotation == 270) {
+ x = doc_rect->y1;
+ y = height - doc_rect->x2;
+ w = doc_rect->y2 - doc_rect->y1;
+ h = doc_rect->x2 - doc_rect->x1;
+ } else {
+ g_assert_not_reached ();
+ }
+
+ ev_view_get_page_extents (view, page, &page_area, &border);
+
+ view_rect->x = x * view->scale + page_area.x;
+ view_rect->y = y * view->scale + page_area.y;
+ view_rect->width = w * view->scale;
+ view_rect->height = h * view->scale;
+}
+
+static gboolean
+get_dual_even_left (EvView *view)
+{
+ return (ev_document_get_n_pages (view->document) > 2);
+}
+
+static void
+find_page_at_location (EvView *view,
+ gdouble x,
+ gdouble y,
+ gint *page,
+ gint *x_offset,
+ gint *y_offset)
+{
+ int i;
+
+ if (view->document == NULL)
+ return;
+
+ g_assert (page);
+ g_assert (x_offset);
+ g_assert (y_offset);
+
+ for (i = view->start_page; i >= 0 && i <= view->end_page; i++) {
+ GdkRectangle page_area;
+ GtkBorder border;
+
+ if (! ev_view_get_page_extents (view, i, &page_area, &border))
+ continue;
+
+ if ((x >= page_area.x + border.left) &&
+ (x < page_area.x + page_area.width - border.right) &&
+ (y >= page_area.y + border.top) &&
+ (y < page_area.y + page_area.height - border.bottom)) {
+ *page = i;
+ *x_offset = x - (page_area.x + border.left);
+ *y_offset = y - (page_area.y + border.top);
+ return;
+ }
+ }
+
+ *page = -1;
+}
+
+static gboolean
+location_in_text (EvView *view,
+ gdouble x,
+ gdouble y)
+{
+ cairo_region_t *region;
+ gint page = -1;
+ gint x_offset = 0, y_offset = 0;
+
+ find_page_at_location (view, x, y, &page, &x_offset, &y_offset);
+
+ if (page == -1)
+ return FALSE;
+
+ region = ev_page_cache_get_text_mapping (view->page_cache, page);
+
+ if (region)
+ return cairo_region_contains_point (region, x_offset / view->scale, y_offset / view->scale);
+ else
+ return FALSE;
+}
+
+static gboolean
+location_in_selected_text (EvView *view,
+ gdouble x,
+ gdouble y)
+{
+ gint page = -1;
+ gint x_offset = 0, y_offset = 0;
+ EvViewSelection *selection;
+ GList *l = NULL;
+
+ for (l = view->selection_info.selections; l != NULL; l = l->next) {
+ selection = (EvViewSelection *)l->data;
+
+ find_page_at_location (view, x, y, &page, &x_offset, &y_offset);
+
+ if (page != selection->page)
+ continue;
+
+ if (selection->covered_region &&
+ cairo_region_contains_point (selection->covered_region, x_offset, y_offset))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+get_doc_point_from_offset (EvView *view,
+ gint page,
+ gint x_offset,
+ gint y_offset,
+ gint *x_new,
+ gint *y_new)
+{
+ gdouble width, height;
+ double x, y;
+
+ get_doc_page_size (view, page, &width, &height);
+
+ x_offset = x_offset / view->scale;
+ y_offset = y_offset / view->scale;
+
+ if (view->rotation == 0) {
+ x = x_offset;
+ y = y_offset;
+ } else if (view->rotation == 90) {
+ x = y_offset;
+ y = width - x_offset;
+ } else if (view->rotation == 180) {
+ x = width - x_offset;
+ y = height - y_offset;
+ } else if (view->rotation == 270) {
+ x = height - y_offset;
+ y = x_offset;
+ } else {
+ g_assert_not_reached ();
+ }
+
+ *x_new = x;
+ *y_new = y;
+
+ return TRUE;
+}
+
+static gboolean
+get_doc_point_from_location (EvView *view,
+ gdouble x,
+ gdouble y,
+ gint *page,
+ gint *x_new,
+ gint *y_new)
+{
+ gint x_offset = 0, y_offset = 0;
+
+ x += view->scroll_x;
+ y += view->scroll_y;
+ find_page_at_location (view, x, y, page, &x_offset, &y_offset);
+ if (*page == -1)
+ return FALSE;
+
+ return get_doc_point_from_offset (view, *page, x_offset, y_offset, x_new, y_new);
+}
+
+static void
+ev_view_get_area_from_mapping (EvView *view,
+ guint page,
+ EvMappingList *mapping_list,
+ gconstpointer data,
+ GdkRectangle *area)
+{
+ EvMapping *mapping;
+
+ mapping = ev_mapping_list_find (mapping_list, data);
+ doc_rect_to_view_rect (view, page, &mapping->area, area);
+ area->x -= view->scroll_x;
+ area->y -= view->scroll_y;
+}
+
+
+/*** Hyperref ***/
+static EvLink *
+ev_view_get_link_at_location (EvView *view,
+ gdouble x,
+ gdouble y)
+{
+ gint page = -1;
+ gint x_new = 0, y_new = 0;
+ EvMappingList *link_mapping;
+
+ if (!EV_IS_DOCUMENT_LINKS (view->document))
+ return NULL;
+
+ if (!get_doc_point_from_location (view, x, y, &page, &x_new, &y_new))
+ return NULL;
+
+ link_mapping = ev_page_cache_get_link_mapping (view->page_cache, page);
+
+ if (link_mapping)
+ return ev_mapping_list_get_data (link_mapping, x_new, y_new);
+ else
+ return NULL;
+}
+
+static void
+goto_fitr_dest (EvView *view, EvLinkDest *dest)
+{
+ EvPoint doc_point;
+ gdouble zoom, left, top;
+ gboolean change_left, change_top;
+ GtkAllocation allocation;
+
+ gtk_widget_get_allocation (GTK_WIDGET (view), &allocation);
+
+ left = ev_link_dest_get_left (dest, &change_left);
+ top = ev_link_dest_get_top (dest, &change_top);
+
+ zoom = zoom_for_size_best_fit (ev_link_dest_get_right (dest) - left,
+ ev_link_dest_get_bottom (dest) - top,
+ allocation.width,
+ allocation.height);
+
+ ev_document_model_set_sizing_mode (view->model, EV_SIZING_FREE);
+ ev_document_model_set_scale (view->model, zoom);
+
+ doc_point.x = change_left ? left : 0;
+ doc_point.y = change_top ? top : 0;
+ view->pending_point = doc_point;
+
+ ev_view_change_page (view, ev_link_dest_get_page (dest));
+}
+
+static void
+goto_fitv_dest (EvView *view, EvLinkDest *dest)
+{
+ EvPoint doc_point;
+ gdouble doc_width, doc_height;
+ gint page;
+ double zoom, left;
+ gboolean change_left;
+ GtkAllocation allocation;
+
+ gtk_widget_get_allocation (GTK_WIDGET (view), &allocation);
+
+ page = ev_link_dest_get_page (dest);
+ ev_document_get_page_size (view->document, page, &doc_width, &doc_height);
+
+ left = ev_link_dest_get_left (dest, &change_left);
+ doc_point.x = change_left ? left : 0;
+ doc_point.y = 0;
+
+ zoom = zoom_for_size_fit_height (doc_width - doc_point.x , doc_height,
+ allocation.width,
+ allocation.height);
+
+ ev_document_model_set_sizing_mode (view->model, EV_SIZING_FREE);
+ ev_document_model_set_scale (view->model, zoom);
+
+ view->pending_point = doc_point;
+
+ ev_view_change_page (view, page);
+}
+
+static void
+goto_fith_dest (EvView *view, EvLinkDest *dest)
+{
+ EvPoint doc_point;
+ gdouble doc_width, doc_height;
+ gint page;
+ gdouble zoom, top;
+ gboolean change_top;
+ GtkAllocation allocation;
+
+ gtk_widget_get_allocation (GTK_WIDGET (view), &allocation);
+
+ page = ev_link_dest_get_page (dest);
+ ev_document_get_page_size (view->document, page, &doc_width, &doc_height);
+
+ top = ev_link_dest_get_top (dest, &change_top);
+
+ doc_point.x = 0;
+ doc_point.y = change_top ? top : 0;
+
+ zoom = zoom_for_size_fit_width (doc_width, top,
+ allocation.width,
+ allocation.height);
+
+ ev_document_model_set_sizing_mode (view->model, EV_SIZING_FIT_WIDTH);
+ ev_document_model_set_scale (view->model, zoom);
+
+ view->pending_point = doc_point;
+
+ ev_view_change_page (view, page);
+}
+
+static void
+goto_fit_dest (EvView *view, EvLinkDest *dest)
+{
+ double zoom;
+ gdouble doc_width, doc_height;
+ int page;
+ GtkAllocation allocation;
+
+ gtk_widget_get_allocation (GTK_WIDGET (view), &allocation);
+
+ page = ev_link_dest_get_page (dest);
+ ev_document_get_page_size (view->document, page, &doc_width, &doc_height);
+
+ zoom = zoom_for_size_best_fit (doc_width, doc_height,
+ allocation.width,
+ allocation.height);
+
+ ev_document_model_set_sizing_mode (view->model, EV_SIZING_BEST_FIT);
+ ev_document_model_set_scale (view->model, zoom);
+
+ ev_view_change_page (view, page);
+}
+
+static void
+goto_xyz_dest (EvView *view, EvLinkDest *dest)
+{
+ EvPoint doc_point;
+ gint page;
+ gdouble zoom, left, top;
+ gboolean change_zoom, change_left, change_top;
+
+ zoom = ev_link_dest_get_zoom (dest, &change_zoom);
+ page = ev_link_dest_get_page (dest);
+
+ if (change_zoom && zoom > 1) {
+ ev_document_model_set_sizing_mode (view->model, EV_SIZING_FREE);
+ ev_document_model_set_scale (view->model, zoom);
+ }
+
+ left = ev_link_dest_get_left (dest, &change_left);
+ top = ev_link_dest_get_top (dest, &change_top);
+
+ doc_point.x = change_left ? left : 0;
+ doc_point.y = change_top ? top : 0;
+ view->pending_point = doc_point;
+
+ ev_view_change_page (view, page);
+}
+
+static void
+goto_dest (EvView *view, EvLinkDest *dest)
+{
+ EvLinkDestType type;
+ int page, n_pages, current_page;
+
+ page = ev_link_dest_get_page (dest);
+ n_pages = ev_document_get_n_pages (view->document);
+
+ if (page < 0 || page >= n_pages)
+ return;
+
+ current_page = view->current_page;
+
+ type = ev_link_dest_get_dest_type (dest);
+
+ switch (type) {
+ case EV_LINK_DEST_TYPE_PAGE:
+ ev_document_model_set_page (view->model, page);
+ break;
+ case EV_LINK_DEST_TYPE_FIT:
+ goto_fit_dest (view, dest);
+ break;
+ case EV_LINK_DEST_TYPE_FITH:
+ goto_fith_dest (view, dest);
+ break;
+ case EV_LINK_DEST_TYPE_FITV:
+ goto_fitv_dest (view, dest);
+ break;
+ case EV_LINK_DEST_TYPE_FITR:
+ goto_fitr_dest (view, dest);
+ break;
+ case EV_LINK_DEST_TYPE_XYZ:
+ goto_xyz_dest (view, dest);
+ break;
+ case EV_LINK_DEST_TYPE_PAGE_LABEL:
+ ev_document_model_set_page_by_label (view->model, ev_link_dest_get_page_label (dest));
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ if (current_page != view->current_page)
+ ev_document_model_set_page (view->model, view->current_page);
+}
+
+static void
+ev_view_goto_dest (EvView *view, EvLinkDest *dest)
+{
+ EvLinkDestType type;
+
+ type = ev_link_dest_get_dest_type (dest);
+
+ if (type == EV_LINK_DEST_TYPE_NAMED) {
+ EvLinkDest *dest2;
+ const gchar *named_dest;
+
+ named_dest = ev_link_dest_get_named_dest (dest);
+ dest2 = ev_document_links_find_link_dest (EV_DOCUMENT_LINKS (view->document),
+ named_dest);
+ if (dest2) {
+ goto_dest (view, dest2);
+ g_object_unref (dest2);
+ }
+
+ return;
+ }
+
+ goto_dest (view, dest);
+}
+
+void
+ev_view_handle_link (EvView *view, EvLink *link)
+{
+ EvLinkAction *action = NULL;
+ EvLinkActionType type;
+
+ action = ev_link_get_action (link);
+ if (!action)
+ return;
+
+ type = ev_link_action_get_action_type (action);
+
+ switch (type) {
+ case EV_LINK_ACTION_TYPE_GOTO_DEST: {
+ EvLinkDest *dest;
+
+ g_signal_emit (view, signals[SIGNAL_HANDLE_LINK], 0, link);
+
+ dest = ev_link_action_get_dest (action);
+ ev_view_goto_dest (view, dest);
+ }
+ break;
+ case EV_LINK_ACTION_TYPE_GOTO_REMOTE:
+ case EV_LINK_ACTION_TYPE_EXTERNAL_URI:
+ case EV_LINK_ACTION_TYPE_LAUNCH:
+ case EV_LINK_ACTION_TYPE_NAMED:
+ g_signal_emit (view, signals[SIGNAL_EXTERNAL_LINK], 0, action);
+ break;
+ }
+}
+
+static char *
+tip_from_action_named (EvLinkAction *action)
+{
+ const gchar *name = ev_link_action_get_name (action);
+
+ if (g_ascii_strcasecmp (name, "FirstPage") == 0) {
+ return g_strdup (_("Go to first page"));
+ } else if (g_ascii_strcasecmp (name, "PrevPage") == 0) {
+ return g_strdup (_("Go to previous page"));
+ } else if (g_ascii_strcasecmp (name, "NextPage") == 0) {
+ return g_strdup (_("Go to next page"));
+ } else if (g_ascii_strcasecmp (name, "LastPage") == 0) {
+ return g_strdup (_("Go to last page"));
+ } else if (g_ascii_strcasecmp (name, "GoToPage") == 0) {
+ return g_strdup (_("Go to page"));
+ } else if (g_ascii_strcasecmp (name, "Find") == 0) {
+ return g_strdup (_("Find"));
+ }
+
+ return NULL;
+}
+
+static char *
+tip_from_link (EvView *view, EvLink *link)
+{
+ EvLinkAction *action;
+ EvLinkActionType type;
+ char *msg = NULL;
+ char *page_label;
+ const char *title;
+
+ action = ev_link_get_action (link);
+ title = ev_link_get_title (link);
+
+ if (!action)
+ return title ? g_strdup (title) : NULL;
+
+ type = ev_link_action_get_action_type (action);
+
+ switch (type) {
+ case EV_LINK_ACTION_TYPE_GOTO_DEST:
+ page_label = ev_document_links_get_dest_page_label (EV_DOCUMENT_LINKS (view->document),
+ ev_link_action_get_dest (action));
+ if (page_label) {
+ msg = g_strdup_printf (_("Go to page %s"), page_label);
+ g_free (page_label);
+ }
+ break;
+ case EV_LINK_ACTION_TYPE_GOTO_REMOTE:
+ if (title) {
+ msg = g_strdup_printf (_("Go to %s on file “%s”"), title,
+ ev_link_action_get_filename (action));
+ } else {
+ msg = g_strdup_printf (_("Go to file “%s”"),
+ ev_link_action_get_filename (action));
+ }
+ break;
+ case EV_LINK_ACTION_TYPE_EXTERNAL_URI:
+ msg = g_strdup (ev_link_action_get_uri (action));
+ break;
+ case EV_LINK_ACTION_TYPE_LAUNCH:
+ msg = g_strdup_printf (_("Launch %s"),
+ ev_link_action_get_filename (action));
+ break;
+ case EV_LINK_ACTION_TYPE_NAMED:
+ msg = tip_from_action_named (action);
+ break;
+ default:
+ if (title)
+ msg = g_strdup (title);
+ break;
+ }
+
+ return msg;
+}
+
+static void
+ev_view_handle_cursor_over_xy (EvView *view, gint x, gint y)
+{
+ EvLink *link;
+ EvFormField *field;
+ EvAnnotation *annot = NULL;
+
+ if (view->cursor == EV_VIEW_CURSOR_HIDDEN)
+ return;
+
+ if (view->adding_annot) {
+ if (view->cursor != EV_VIEW_CURSOR_ADD)
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_ADD);
+ return;
+ }
+
+ if (view->drag_info.in_drag) {
+ if (view->cursor != EV_VIEW_CURSOR_DRAG)
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_DRAG);
+ return;
+ }
+
+ if (view->scroll_info.autoscrolling) {
+ if (view->cursor != EV_VIEW_CURSOR_AUTOSCROLL)
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_AUTOSCROLL);
+ return;
+ }
+
+ link = ev_view_get_link_at_location (view, x, y);
+ if (link) {
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_LINK);
+ } else if ((field = ev_view_get_form_field_at_location (view, x, y))) {
+ if (field->is_read_only) {
+ if (view->cursor == EV_VIEW_CURSOR_LINK ||
+ view->cursor == EV_VIEW_CURSOR_IBEAM ||
+ view->cursor == EV_VIEW_CURSOR_DRAG)
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL);
+ } else if (EV_IS_FORM_FIELD_TEXT (field)) {
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_IBEAM);
+ } else {
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_LINK);
+ }
+ } else if ((annot = ev_view_get_annotation_at_location (view, x, y))) {
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_LINK);
+ } else if (location_in_text (view, x + view->scroll_x, y + view->scroll_y)) {
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_IBEAM);
+ } else {
+ if (view->cursor == EV_VIEW_CURSOR_LINK ||
+ view->cursor == EV_VIEW_CURSOR_IBEAM ||
+ view->cursor == EV_VIEW_CURSOR_DRAG ||
+ view->cursor == EV_VIEW_CURSOR_AUTOSCROLL ||
+ view->cursor == EV_VIEW_CURSOR_ADD)
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL);
+ }
+
+ if (link || annot)
+ g_object_set (view, "has-tooltip", TRUE, NULL);
+}
+
+/*** Images ***/
+static EvImage *
+ev_view_get_image_at_location (EvView *view,
+ gdouble x,
+ gdouble y)
+{
+ gint page = -1;
+ gint x_new = 0, y_new = 0;
+ EvMappingList *image_mapping;
+
+ if (!EV_IS_DOCUMENT_IMAGES (view->document))
+ return NULL;
+
+ if (!get_doc_point_from_location (view, x, y, &page, &x_new, &y_new))
+ return NULL;
+
+ image_mapping = ev_page_cache_get_image_mapping (view->page_cache, page);
+
+ if (image_mapping)
+ return ev_mapping_list_get_data (image_mapping, x_new, y_new);
+ else
+ return NULL;
+}
+
+/*** Forms ***/
+static EvFormField *
+ev_view_get_form_field_at_location (EvView *view,
+ gdouble x,
+ gdouble y)
+{
+ gint page = -1;
+ gint x_new = 0, y_new = 0;
+ EvMappingList *forms_mapping;
+
+ if (!EV_IS_DOCUMENT_FORMS (view->document))
+ return NULL;
+
+ if (!get_doc_point_from_location (view, x, y, &page, &x_new, &y_new))
+ return NULL;
+
+ forms_mapping = ev_page_cache_get_form_field_mapping (view->page_cache, page);
+
+ if (forms_mapping)
+ return ev_mapping_list_get_data (forms_mapping, x_new, y_new);
+ else
+ return NULL;
+}
+
+static cairo_region_t *
+ev_view_form_field_get_region (EvView *view,
+ EvFormField *field)
+{
+ GdkRectangle view_area;
+ EvMappingList *forms_mapping;
+
+ forms_mapping = ev_page_cache_get_form_field_mapping (view->page_cache,
+ field->page->index);
+ ev_view_get_area_from_mapping (view, field->page->index,
+ forms_mapping,
+ field, &view_area);
+
+ return cairo_region_create_rectangle (&view_area);
+}
+
+static gboolean
+ev_view_forms_remove_widgets (EvView *view)
+{
+ ev_view_remove_all (view);
+
+ return FALSE;
+}
+
+static void
+ev_view_form_field_destroy (GtkWidget *widget,
+ EvView *view)
+{
+ g_idle_add ((GSourceFunc)ev_view_forms_remove_widgets, view);
+}
+
+static GtkWidget *
+ev_view_form_field_button_create_widget (EvView *view,
+ EvFormField *field)
+{
+ EvFormFieldButton *field_button = EV_FORM_FIELD_BUTTON (field);
+ cairo_region_t *field_region = NULL;
+
+ switch (field_button->type) {
+ case EV_FORM_FIELD_BUTTON_PUSH:
+ return NULL;
+ case EV_FORM_FIELD_BUTTON_CHECK:
+ case EV_FORM_FIELD_BUTTON_RADIO: {
+ gboolean state;
+ EvMappingList *forms_mapping;
+ GList *l;
+
+ state = ev_document_forms_form_field_button_get_state (EV_DOCUMENT_FORMS (view->document),
+ field);
+
+ /* FIXME: it actually depends on NoToggleToOff flags */
+ if (field_button->type == EV_FORM_FIELD_BUTTON_RADIO &&
+ state && field_button->state)
+ return NULL;
+
+ field_region = ev_view_form_field_get_region (view, field);
+
+ /* For radio buttons and checkbox buttons that are in a set
+ * we need to update also the region for the current selected item
+ */
+ forms_mapping = ev_page_cache_get_form_field_mapping (view->page_cache,
+ field->page->index);
+ for (l = ev_mapping_list_get_list (forms_mapping); l; l = g_list_next (l)) {
+ EvFormField *button = ((EvMapping *)(l->data))->data;
+ cairo_region_t *button_region;
+
+ if (button->id == field->id)
+ continue;
+
+ /* FIXME: only buttons in the same group should be updated */
+ if (!EV_IS_FORM_FIELD_BUTTON (button) ||
+ EV_FORM_FIELD_BUTTON (button)->type != field_button->type ||
+ EV_FORM_FIELD_BUTTON (button)->state != TRUE)
+ continue;
+
+ button_region = ev_view_form_field_get_region (view, button);
+ cairo_region_union (field_region, button_region);
+ cairo_region_destroy (button_region);
+ }
+
+ ev_document_forms_form_field_button_set_state (EV_DOCUMENT_FORMS (view->document),
+ field, !state);
+ field_button->state = !state;
+ }
+ break;
+ }
+
+ ev_view_reload_page (view, field->page->index, field_region);
+ cairo_region_destroy (field_region);
+
+ return NULL;
+}
+
+static void
+ev_view_form_field_text_save (EvView *view,
+ GtkWidget *widget)
+{
+ EvFormField *field;
+
+ if (!view->document)
+ return;
+
+ field = g_object_get_data (G_OBJECT (widget), "form-field");
+
+ if (field->changed) {
+ EvFormFieldText *field_text = EV_FORM_FIELD_TEXT (field);
+ cairo_region_t *field_region;
+
+ field_region = ev_view_form_field_get_region (view, field);
+
+ ev_document_forms_form_field_text_set_text (EV_DOCUMENT_FORMS (view->document),
+ field, field_text->text);
+ field->changed = FALSE;
+ ev_view_reload_page (view, field->page->index, field_region);
+ cairo_region_destroy (field_region);
+ }
+}
+
+static void
+ev_view_form_field_text_changed (GtkWidget *widget,
+ EvFormField *field)
+{
+ EvFormFieldText *field_text = EV_FORM_FIELD_TEXT (field);
+ gchar *text = NULL;
+
+ if (GTK_IS_ENTRY (widget)) {
+ text = g_strdup (gtk_entry_get_text (GTK_ENTRY (widget)));
+ } else if (GTK_IS_TEXT_BUFFER (widget)) {
+ GtkTextIter start, end;
+
+ gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (widget), &start, &end);
+ text = gtk_text_buffer_get_text (GTK_TEXT_BUFFER (widget),
+ &start, &end, FALSE);
+ }
+
+ if (!field_text->text ||
+ (field_text->text && g_ascii_strcasecmp (field_text->text, text) != 0)) {
+ g_free (field_text->text);
+ field_text->text = text;
+ field->changed = TRUE;
+ }
+}
+
+static GtkWidget *
+ev_view_form_field_text_create_widget (EvView *view,
+ EvFormField *field)
+{
+ EvFormFieldText *field_text = EV_FORM_FIELD_TEXT (field);
+ GtkWidget *text = NULL;
+ gchar *txt;
+
+ txt = ev_document_forms_form_field_text_get_text (EV_DOCUMENT_FORMS (view->document),
+ field);
+
+ switch (field_text->type) {
+ case EV_FORM_FIELD_TEXT_FILE_SELECT:
+ /* TODO */
+ case EV_FORM_FIELD_TEXT_NORMAL:
+ text = gtk_entry_new ();
+ gtk_entry_set_has_frame (GTK_ENTRY (text), FALSE);
+ gtk_entry_set_max_length (GTK_ENTRY (text), field_text->max_len);
+ gtk_entry_set_visibility (GTK_ENTRY (text), !field_text->is_password);
+
+ if (txt) {
+ gtk_entry_set_text (GTK_ENTRY (text), txt);
+ g_free (txt);
+ }
+
+ g_signal_connect (text, "changed",
+ G_CALLBACK (ev_view_form_field_text_changed),
+ field);
+ g_signal_connect_after (text, "activate",
+ G_CALLBACK (ev_view_form_field_destroy),
+ view);
+ break;
+ case EV_FORM_FIELD_TEXT_MULTILINE: {
+ GtkTextBuffer *buffer;
+
+ text = gtk_text_view_new ();
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
+
+ if (txt) {
+ gtk_text_buffer_set_text (buffer, txt, -1);
+ g_free (txt);
+ }
+
+ g_signal_connect (buffer, "changed",
+ G_CALLBACK (ev_view_form_field_text_changed),
+ field);
+ }
+ break;
+ }
+
+ g_object_weak_ref (G_OBJECT (text),
+ (GWeakNotify)ev_view_form_field_text_save,
+ view);
+
+ return text;
+}
+
+static void
+ev_view_form_field_choice_save (EvView *view,
+ GtkWidget *widget)
+{
+ EvFormField *field;
+
+ if (!view->document)
+ return;
+
+ field = g_object_get_data (G_OBJECT (widget), "form-field");
+
+ if (field->changed) {
+ GList *l;
+ EvFormFieldChoice *field_choice = EV_FORM_FIELD_CHOICE (field);
+ cairo_region_t *field_region;
+
+ field_region = ev_view_form_field_get_region (view, field);
+
+ if (field_choice->is_editable) {
+ ev_document_forms_form_field_choice_set_text (EV_DOCUMENT_FORMS (view->document),
+ field, field_choice->text);
+ } else {
+ ev_document_forms_form_field_choice_unselect_all (EV_DOCUMENT_FORMS (view->document), field);
+ for (l = field_choice->selected_items; l; l = g_list_next (l)) {
+ ev_document_forms_form_field_choice_select_item (EV_DOCUMENT_FORMS (view->document),
+ field,
+ GPOINTER_TO_INT (l->data));
+ }
+ }
+ field->changed = FALSE;
+ ev_view_reload_page (view, field->page->index, field_region);
+ cairo_region_destroy (field_region);
+ }
+}
+
+static void
+ev_view_form_field_choice_changed (GtkWidget *widget,
+ EvFormField *field)
+{
+ EvFormFieldChoice *field_choice = EV_FORM_FIELD_CHOICE (field);
+
+ if (GTK_IS_COMBO_BOX (widget)) {
+ gint item;
+
+ item = gtk_combo_box_get_active (GTK_COMBO_BOX (widget));
+ if (!field_choice->selected_items ||
+ GPOINTER_TO_INT (field_choice->selected_items->data) != item) {
+ g_list_free (field_choice->selected_items);
+ field_choice->selected_items = NULL;
+ field_choice->selected_items = g_list_prepend (field_choice->selected_items,
+ GINT_TO_POINTER (item));
+ field->changed = TRUE;
+ }
+
+ if (GTK_IS_COMBO_BOX_ENTRY (widget)) {
+ gchar *text;
+
+ text = gtk_combo_box_get_active_text (GTK_COMBO_BOX (widget));
+ if (!field_choice->text ||
+ (field_choice->text && g_ascii_strcasecmp (field_choice->text, text) != 0)) {
+ g_free (field_choice->text);
+ field_choice->text = text;
+ field->changed = TRUE;
+ }
+ }
+ } else if (GTK_IS_TREE_SELECTION (widget)) {
+ GtkTreeSelection *selection = GTK_TREE_SELECTION (widget);
+ GtkTreeModel *model;
+ GList *items, *l;
+
+ items = gtk_tree_selection_get_selected_rows (selection, &model);
+ g_list_free (field_choice->selected_items);
+ field_choice->selected_items = NULL;
+
+ for (l = items; l && l->data; l = g_list_next (l)) {
+ GtkTreeIter iter;
+ GtkTreePath *path = (GtkTreePath *)l->data;
+ gint item;
+
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_model_get (model, &iter, 1, &item, -1);
+
+ field_choice->selected_items = g_list_prepend (field_choice->selected_items,
+ GINT_TO_POINTER (item));
+
+ gtk_tree_path_free (path);
+ }
+
+ g_list_free (items);
+
+ field->changed = TRUE;
+ }
+}
+
+static GtkWidget *
+ev_view_form_field_choice_create_widget (EvView *view,
+ EvFormField *field)
+{
+ EvFormFieldChoice *field_choice = EV_FORM_FIELD_CHOICE (field);
+ GtkWidget *choice;
+ GtkTreeModel *model;
+ gint n_items, i;
+ gint selected_item = 0;
+
+ n_items = ev_document_forms_form_field_choice_get_n_items (EV_DOCUMENT_FORMS (view->document),
+ field);
+ model = GTK_TREE_MODEL (gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_INT));
+ for (i = 0; i < n_items; i++) {
+ GtkTreeIter iter;
+ gchar *item;
+
+ item = ev_document_forms_form_field_choice_get_item (EV_DOCUMENT_FORMS (view->document),
+ field, i);
+ if (ev_document_forms_form_field_choice_is_item_selected (
+ EV_DOCUMENT_FORMS (view->document), field, i)) {
+ selected_item = i;
+ /* FIXME: we need a get_selected_items function in poppler */
+ field_choice->selected_items = g_list_prepend (field_choice->selected_items,
+ GINT_TO_POINTER (i));
+ }
+
+ if (item) {
+ gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ 0, item,
+ 1, i,
+ -1);
+ g_free (item);
+ }
+ }
+
+ if (field_choice->type == EV_FORM_FIELD_CHOICE_LIST) {
+ GtkCellRenderer *renderer;
+ GtkWidget *tree_view;
+ GtkTreeSelection *selection;
+
+ tree_view = gtk_tree_view_new_with_model (model);
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
+ if (field_choice->multi_select) {
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
+ }
+
+ /* TODO: set selected items */
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
+ 0,
+ "choix", renderer,
+ "text", 0,
+ NULL);
+
+ choice = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (choice),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_container_add (GTK_CONTAINER (choice), tree_view);
+ gtk_widget_show (tree_view);
+
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (ev_view_form_field_choice_changed),
+ field);
+ g_signal_connect_after (selection, "changed",
+ G_CALLBACK (ev_view_form_field_destroy),
+ view);
+ } else if (field_choice->is_editable) { /* ComboBoxEntry */
+ gchar *text;
+
+ choice = gtk_combo_box_entry_new_with_model (model, 0);
+ text = ev_document_forms_form_field_choice_get_text (EV_DOCUMENT_FORMS (view->document), field);
+ if (text) {
+ gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (choice))), text);
+ g_free (text);
+ }
+
+ g_signal_connect (choice, "changed",
+ G_CALLBACK (ev_view_form_field_choice_changed),
+ field);
+ g_signal_connect_after (gtk_bin_get_child (GTK_BIN (choice)),
+ "activate",
+ G_CALLBACK (ev_view_form_field_destroy),
+ view);
+ } else { /* ComboBoxText */
+ GtkCellRenderer *renderer;
+
+ choice = gtk_combo_box_new_with_model (model);
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (choice),
+ renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (choice),
+ renderer,
+ "text", 0,
+ NULL);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (choice), selected_item);
+ gtk_combo_box_popup (GTK_COMBO_BOX (choice));
+
+ g_signal_connect (choice, "changed",
+ G_CALLBACK (ev_view_form_field_choice_changed),
+ field);
+ g_signal_connect_after (choice, "changed",
+ G_CALLBACK (ev_view_form_field_destroy),
+ view);
+ }
+
+ g_object_unref (model);
+
+ g_object_weak_ref (G_OBJECT (choice),
+ (GWeakNotify)ev_view_form_field_choice_save,
+ view);
+
+ return choice;
+}
+
+static void
+ev_view_handle_form_field (EvView *view,
+ EvFormField *field,
+ gdouble x,
+ gdouble y)
+{
+ GtkWidget *field_widget = NULL;
+ EvMappingList *form_field_mapping;
+ GdkRectangle view_area;
+
+ if (field->is_read_only)
+ return;
+
+ if (EV_IS_FORM_FIELD_BUTTON (field)) {
+ field_widget = ev_view_form_field_button_create_widget (view, field);
+ } else if (EV_IS_FORM_FIELD_TEXT (field)) {
+ field_widget = ev_view_form_field_text_create_widget (view, field);
+ } else if (EV_IS_FORM_FIELD_CHOICE (field)) {
+ field_widget = ev_view_form_field_choice_create_widget (view, field);
+ } else if (EV_IS_FORM_FIELD_SIGNATURE (field)) {
+ /* TODO */
+ }
+
+ /* Form field doesn't require a widget */
+ if (!field_widget)
+ return;
+
+ g_object_set_data_full (G_OBJECT (field_widget), "form-field",
+ g_object_ref (field),
+ (GDestroyNotify)g_object_unref);
+
+ form_field_mapping = ev_page_cache_get_form_field_mapping (view->page_cache,
+ field->page->index);
+ ev_view_get_area_from_mapping (view, field->page->index,
+ form_field_mapping,
+ field, &view_area);
+
+ gtk_layout_put (GTK_LAYOUT (view), field_widget, view_area.x, view_area.y);
+ gtk_widget_show (field_widget);
+ gtk_widget_grab_focus (field_widget);
+}
+
+/* Annotations */
+static EvViewWindowChild *
+ev_view_get_window_child (EvView *view,
+ GtkWidget *window)
+{
+ GList *children = view->window_children;
+
+ while (children) {
+ EvViewWindowChild *child;
+
+ child = (EvViewWindowChild *)children->data;
+ children = children->next;
+
+ if (child->window == window)
+ return child;
+ }
+
+ return NULL;
+}
+
+static void
+ev_view_window_child_move (EvView *view,
+ EvViewWindowChild *child,
+ gint x,
+ gint y)
+{
+ GtkAllocation allocation;
+ gint width, height;
+
+ gtk_widget_get_allocation (GTK_WIDGET (view), &allocation);
+ gtk_window_get_size (GTK_WINDOW (child->window), &width, &height);
+
+ child->x = x;
+ child->y = y;
+ gtk_window_move (GTK_WINDOW (child->window),
+ CLAMP (x, child->parent_x,
+ child->parent_x + allocation.width - width),
+ CLAMP (y, child->parent_y,
+ child->parent_y + allocation.height - height));
+}
+
+static void
+ev_view_window_child_move_with_parent (EvView *view,
+ GtkWidget *window)
+{
+ EvViewWindowChild *child;
+ gint root_x, root_y;
+
+ child = ev_view_get_window_child (view, window);
+ gdk_window_get_origin (gtk_widget_get_window (GTK_WIDGET (view)),
+ &root_x, &root_y);
+ if (root_x != child->parent_x || root_y != child->parent_y) {
+ gint dest_x, dest_y;
+
+ dest_x = child->x + (root_x - child->parent_x);
+ dest_y = child->y + (root_y - child->parent_y);
+ child->parent_x = root_x;
+ child->parent_y = root_y;
+ ev_view_window_child_move (view, child, dest_x, dest_y);
+ }
+
+ if (child->visible && !gtk_widget_get_visible (window))
+ gtk_widget_show (window);
+}
+
+static void
+ev_view_window_child_put (EvView *view,
+ GtkWidget *window,
+ guint page,
+ gint x,
+ gint y,
+ gdouble orig_x,
+ gdouble orig_y)
+{
+ EvViewWindowChild *child;
+ gint root_x, root_y;
+
+ gdk_window_get_origin (gtk_widget_get_window (GTK_WIDGET (view)),
+ &root_x, &root_y);
+
+ child = g_new0 (EvViewWindowChild, 1);
+ child->window = window;
+ child->page = page;
+ child->orig_x = orig_x;
+ child->orig_y = orig_y;
+ child->parent_x = root_x;
+ child->parent_y = root_y;
+ child->visible = ev_annotation_window_is_open (EV_ANNOTATION_WINDOW (window));
+ ev_view_window_child_move (view, child, x + root_x, y + root_y);
+
+ if (child->visible)
+ gtk_widget_show (window);
+ else
+ gtk_widget_hide (window);
+
+ view->window_children = g_list_append (view->window_children, child);
+}
+
+static EvViewWindowChild *
+ev_view_find_window_child_for_annot (EvView *view,
+ guint page,
+ EvAnnotation *annot)
+{
+ GList *children = view->window_children;
+
+ while (children) {
+ EvViewWindowChild *child;
+ EvAnnotation *wannot;
+
+ child = (EvViewWindowChild *)children->data;
+ children = children->next;
+
+ if (child->page != page)
+ continue;
+
+ wannot = ev_annotation_window_get_annotation (EV_ANNOTATION_WINDOW (child->window));
+ if (ev_annotation_equal (wannot, annot))
+ return child;
+ }
+
+ return NULL;
+}
+
+static void
+ev_view_window_children_free (EvView *view)
+{
+ GList *l;
+
+ if (!view->window_children)
+ return;
+
+ for (l = view->window_children; l && l->data; l = g_list_next (l)) {
+ EvViewWindowChild *child;
+
+ child = (EvViewWindowChild *)l->data;
+ gtk_widget_destroy (GTK_WIDGET (child->window));
+ g_free (child);
+ }
+ g_list_free (view->window_children);
+ view->window_children = NULL;
+ view->window_child_focus = NULL;
+}
+
+static void
+annotation_window_grab_focus (GtkWidget *widget,
+ EvView *view)
+{
+ if (view->window_child_focus)
+ ev_annotation_window_ungrab_focus (EV_ANNOTATION_WINDOW (view->window_child_focus->window));
+ view->window_child_focus = ev_view_get_window_child (view, widget);
+}
+
+static void
+annotation_window_closed (EvAnnotationWindow *window,
+ EvView *view)
+{
+ EvViewWindowChild *child;
+
+ child = ev_view_get_window_child (view, GTK_WIDGET (window));
+ child->visible = FALSE;
+}
+
+static void
+annotation_window_moved (EvAnnotationWindow *window,
+ gint x,
+ gint y,
+ EvView *view)
+{
+ EvViewWindowChild *child;
+ GdkRectangle page_area;
+ GtkBorder border;
+ GdkRectangle view_rect;
+ EvRectangle doc_rect;
+ gint width, height;
+
+ child = ev_view_get_window_child (view, GTK_WIDGET (window));
+ if (child->x == x && child->y == y)
+ return;
+
+ child->moved = TRUE;
+ child->x = x;
+ child->y = y;
+
+ /* Window has been moved by the user,
+ * we have to set a new origin in doc coords
+ */
+ gtk_window_get_size (GTK_WINDOW (window), &width, &height);
+ view_rect.x = (x - child->parent_x) + view->scroll_x;
+ view_rect.y = (y - child->parent_y) + view->scroll_y;
+ view_rect.width = width;
+ view_rect.height = height;
+
+ ev_view_get_page_extents (view, child->page, &page_area, &border);
+ view_rect_to_doc_rect (view, &view_rect, &page_area, &doc_rect);
+ child->orig_x = doc_rect.x1;
+ child->orig_y = doc_rect.y1;
+}
+
+static void
+ev_view_annotation_save_contents (EvView *view,
+ GParamSpec *pspec,
+ EvAnnotation *annot)
+{
+ if (!view->document)
+ return;
+
+ ev_document_doc_mutex_lock ();
+ ev_document_annotations_save_annotation (EV_DOCUMENT_ANNOTATIONS (view->document),
+ annot, EV_ANNOTATIONS_SAVE_CONTENTS);
+ ev_document_doc_mutex_unlock ();
+}
+
+static GtkWidget *
+ev_view_create_annotation_window (EvView *view,
+ EvAnnotation *annot,
+ GtkWindow *parent)
+{
+ GtkWidget *window;
+ EvRectangle doc_rect;
+ GdkRectangle view_rect;
+ guint page;
+
+ window = ev_annotation_window_new (annot, parent);
+ g_signal_connect (window, "grab_focus",
+ G_CALLBACK (annotation_window_grab_focus),
+ view);
+ g_signal_connect (window, "closed",
+ G_CALLBACK (annotation_window_closed),
+ view);
+ g_signal_connect (window, "moved",
+ G_CALLBACK (annotation_window_moved),
+ view);
+ g_signal_connect_swapped (annot, "notify::contents",
+ G_CALLBACK (ev_view_annotation_save_contents),
+ view);
+ g_object_set_data (G_OBJECT (annot), "popup", window);
+
+ page = ev_annotation_get_page_index (annot);
+ ev_annotation_window_get_rectangle (EV_ANNOTATION_WINDOW (window), &doc_rect);
+ doc_rect_to_view_rect (view, page, &doc_rect, &view_rect);
+ view_rect.x -= view->scroll_x;
+ view_rect.y -= view->scroll_y;
+
+ ev_view_window_child_put (view, window, page,
+ view_rect.x, view_rect.y,
+ doc_rect.x1, doc_rect.y1);
+
+ return window;
+}
+
+static void
+show_annotation_windows (EvView *view,
+ gint page)
+{
+ EvMappingList *annots;
+ GList *l;
+ GtkWindow *parent;
+
+ parent = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view)));
+
+ annots = ev_page_cache_get_annot_mapping (view->page_cache, page);
+
+ for (l = ev_mapping_list_get_list (annots); l && l->data; l = g_list_next (l)) {
+ EvAnnotation *annot;
+ EvViewWindowChild *child;
+ GtkWidget *window;
+
+ annot = ((EvMapping *)(l->data))->data;
+
+ if (!EV_IS_ANNOTATION_MARKUP (annot))
+ continue;
+
+ if (!ev_annotation_markup_has_popup (EV_ANNOTATION_MARKUP (annot)))
+ continue;
+
+ window = g_object_get_data (G_OBJECT (annot), "popup");
+ if (window) {
+ ev_view_window_child_move_with_parent (view, window);
+ continue;
+ }
+
+ /* Look if we already have a popup for this annot */
+ child = ev_view_find_window_child_for_annot (view, page, annot);
+ window = child ? child->window : NULL;
+ if (window) {
+ ev_annotation_window_set_annotation (EV_ANNOTATION_WINDOW (window), annot);
+ g_object_set_data (G_OBJECT (annot), "popup", window);
+ ev_view_window_child_move_with_parent (view, window);
+ } else {
+ ev_view_create_annotation_window (view, annot, parent);
+ }
+ }
+}
+
+static void
+hide_annotation_windows (EvView *view,
+ gint page)
+{
+ EvMappingList *annots;
+ GList *l;
+
+ annots = ev_page_cache_get_annot_mapping (view->page_cache, page);
+
+ for (l = ev_mapping_list_get_list (annots); l && l->data; l = g_list_next (l)) {
+ EvAnnotation *annot;
+ GtkWidget *window;
+
+ annot = ((EvMapping *)(l->data))->data;
+
+ if (!EV_IS_ANNOTATION_MARKUP (annot))
+ continue;
+
+ window = g_object_get_data (G_OBJECT (annot), "popup");
+ if (window)
+ gtk_widget_hide (window);
+ }
+}
+
+static EvAnnotation *
+ev_view_get_annotation_at_location (EvView *view,
+ gdouble x,
+ gdouble y)
+{
+ gint page = -1;
+ gint x_new = 0, y_new = 0;
+ EvMappingList *annotations_mapping;
+
+ if (!EV_IS_DOCUMENT_ANNOTATIONS (view->document))
+ return NULL;
+
+ if (!get_doc_point_from_location (view, x, y, &page, &x_new, &y_new))
+ return NULL;
+
+ annotations_mapping = ev_page_cache_get_annot_mapping (view->page_cache, page);
+
+ if (annotations_mapping)
+ return ev_mapping_list_get_data (annotations_mapping, x_new, y_new);
+ else
+ return NULL;
+}
+
+static void
+ev_view_annotation_show_popup_window (EvView *view,
+ GtkWidget *window)
+{
+ EvViewWindowChild *child;
+
+ if (!window)
+ return;
+
+ child = ev_view_get_window_child (view, window);
+ if (!child->visible) {
+ child->visible = TRUE;
+ ev_view_window_child_move (view, child, child->x, child->y);
+ gtk_widget_show (window);
+ }
+}
+
+static void
+ev_view_handle_annotation (EvView *view,
+ EvAnnotation *annot,
+ gdouble x,
+ gdouble y,
+ guint32 timestamp)
+{
+ if (EV_IS_ANNOTATION_MARKUP (annot)) {
+ GtkWidget *window;
+
+ window = g_object_get_data (G_OBJECT (annot), "popup");
+ ev_view_annotation_show_popup_window (view, window);
+ }
+
+ if (EV_IS_ANNOTATION_ATTACHMENT (annot)) {
+ EvAttachment *attachment;
+
+ attachment = ev_annotation_attachment_get_attachment (EV_ANNOTATION_ATTACHMENT (annot));
+ if (attachment) {
+ GError *error = NULL;
+
+ ev_attachment_open (attachment,
+ gtk_widget_get_screen (GTK_WIDGET (view)),
+ timestamp,
+ &error);
+
+ if (error) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ }
+ }
+ }
+}
+
+static void
+ev_view_create_annotation (EvView *view,
+ EvAnnotationType annot_type,
+ gint x,
+ gint y)
+{
+ EvAnnotation *annot;
+ GdkPoint point;
+ GdkRectangle page_area;
+ GtkBorder border;
+ EvRectangle doc_rect, popup_rect;
+ EvPage *page;
+ GdkColor color = { 0, 65535, 65535, 0 };
+ GdkRectangle view_rect;
+ cairo_region_t *region;
+
+ point.x = x;
+ point.y = y;
+ ev_view_get_page_extents (view, view->current_page, &page_area, &border);
+ view_point_to_doc_point (view, &point, &page_area,
+ &doc_rect.x1, &doc_rect.y1);
+ doc_rect.x2 = doc_rect.x1 + 24;
+ doc_rect.y2 = doc_rect.y1 + 24;
+
+ ev_document_doc_mutex_lock ();
+ page = ev_document_get_page (view->document, view->current_page);
+ switch (annot_type) {
+ case EV_ANNOTATION_TYPE_TEXT:
+ annot = ev_annotation_text_new (page);
+ break;
+ case EV_ANNOTATION_TYPE_ATTACHMENT:
+ /* TODO */
+ g_object_unref (page);
+ ev_document_doc_mutex_unlock ();
+ return;
+ default:
+ g_assert_not_reached ();
+ }
+ g_object_unref (page);
+
+ ev_annotation_set_color (annot, &color);
+
+ if (EV_IS_ANNOTATION_MARKUP (annot)) {
+ popup_rect.x1 = doc_rect.x2;
+ popup_rect.x2 = popup_rect.x1 + 200;
+ popup_rect.y1 = doc_rect.y2;
+ popup_rect.y2 = popup_rect.y1 + 150;
+ g_object_set (annot,
+ "rectangle", &popup_rect,
+ "has_popup", TRUE,
+ "popup_is_open", FALSE,
+ "label", g_get_real_name (),
+ "opacity", 1.0,
+ NULL);
+ }
+ ev_document_annotations_add_annotation (EV_DOCUMENT_ANNOTATIONS (view->document),
+ annot, &doc_rect);
+ ev_document_doc_mutex_unlock ();
+
+ /* If the page didn't have annots, mark the cache as dirty */
+ if (!ev_page_cache_get_annot_mapping (view->page_cache, view->current_page))
+ ev_page_cache_mark_dirty (view->page_cache, view->current_page);
+
+ if (EV_IS_ANNOTATION_MARKUP (annot)) {
+ GtkWindow *parent;
+ GtkWidget *window;
+
+ parent = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view)));
+ window = ev_view_create_annotation_window (view, annot, parent);
+
+ /* Show the annot window the first time */
+ ev_view_annotation_show_popup_window (view, window);
+ }
+
+ doc_rect_to_view_rect (view, view->current_page, &doc_rect, &view_rect);
+ view_rect.x -= view->scroll_x;
+ view_rect.y -= view->scroll_y;
+ region = cairo_region_create_rectangle (&view_rect);
+ ev_view_reload_page (view, view->current_page, region);
+ cairo_region_destroy (region);
+
+ g_signal_emit (view, signals[SIGNAL_ANNOT_ADDED], 0, annot);
+}
+
+void
+ev_view_focus_annotation (EvView *view,
+ EvMapping *annot_mapping)
+{
+ GdkRectangle view_rect;
+ EvAnnotation *annot;
+ guint page;
+
+ if (!EV_IS_DOCUMENT_ANNOTATIONS (view->document))
+ return;
+
+ if (view->focus_annotation == annot_mapping)
+ return;
+
+ view->focus_annotation = annot_mapping;
+ annot = (EvAnnotation *)annot_mapping->data;
+
+ page = ev_annotation_get_page_index (annot);
+ ev_document_model_set_page (view->model, page);
+
+ doc_rect_to_view_rect (view, page,
+ &annot_mapping->area, &view_rect);
+ ensure_rectangle_is_visible (view, &view_rect);
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+}
+
+void
+ev_view_begin_add_annotation (EvView *view,
+ EvAnnotationType annot_type)
+{
+ if (annot_type == EV_ANNOTATION_TYPE_UNKNOWN)
+ return;
+
+ if (view->adding_annot)
+ return;
+
+ view->adding_annot = TRUE;
+ view->adding_annot_type = annot_type;
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_ADD);
+}
+
+void
+ev_view_cancel_add_annotation (EvView *view)
+{
+ gint x, y;
+
+ if (!view->adding_annot)
+ return;
+
+ view->adding_annot = FALSE;
+ gtk_widget_get_pointer (GTK_WIDGET (view), &x, &y);
+ ev_view_handle_cursor_over_xy (view, x, y);
+}
+
+static gboolean
+ev_view_synctex_backward_search (EvView *view,
+ gdouble x,
+ gdouble y)
+{
+ gint page = -1;
+ gint x_new = 0, y_new = 0;
+ EvSourceLink *link;
+
+ if (!ev_document_has_synctex (view->document))
+ return FALSE;
+
+ if (!get_doc_point_from_location (view, x, y, &page, &x_new, &y_new))
+ return FALSE;
+
+ link = ev_document_synctex_backward_search (view->document, page, x_new, y_new);
+ if (link) {
+ g_signal_emit (view, signals[SIGNAL_SYNC_SOURCE], 0, link);
+ g_free (link);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/*** GtkWidget implementation ***/
+
+static void
+ev_view_size_request_continuous_dual_page (EvView *view,
+ GtkRequisition *requisition)
+{
+ gint n_pages;
+
+ n_pages = ev_document_get_n_pages (view->document) + 1;
+ get_page_y_offset (view, n_pages, &requisition->height);
+
+ switch (view->sizing_mode) {
+ case EV_SIZING_FIT_WIDTH:
+ case EV_SIZING_BEST_FIT:
+ requisition->width = 1;
+
+ break;
+ case EV_SIZING_FREE: {
+ gint max_width;
+ GtkBorder border;
+
+ ev_view_get_max_page_size (view, &max_width, NULL);
+ compute_border (view, max_width, max_width, &border);
+ requisition->width = (max_width + border.left + border.right) * 2 + (view->spacing * 3);
+ }
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+ev_view_size_request_continuous (EvView *view,
+ GtkRequisition *requisition)
+{
+ gint n_pages;
+
+ n_pages = ev_document_get_n_pages (view->document);
+ get_page_y_offset (view, n_pages, &requisition->height);
+
+ switch (view->sizing_mode) {
+ case EV_SIZING_FIT_WIDTH:
+ case EV_SIZING_BEST_FIT:
+ requisition->width = 1;
+
+ break;
+ case EV_SIZING_FREE: {
+ gint max_width;
+ GtkBorder border;
+
+ ev_view_get_max_page_size (view, &max_width, NULL);
+ compute_border (view, max_width, max_width, &border);
+ requisition->width = max_width + (view->spacing * 2) + border.left + border.right;
+ }
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+ev_view_size_request_dual_page (EvView *view,
+ GtkRequisition *requisition)
+{
+ GtkBorder border;
+ gint width, height;
+
+ if (view->sizing_mode == EV_SIZING_BEST_FIT) {
+ requisition->width = 1;
+ requisition->height = 1;
+
+ return;
+ }
+
+ /* Find the largest of the two. */
+ ev_view_get_page_size (view,
+ view->current_page,
+ &width, &height);
+ if (view->current_page + 1 < ev_document_get_n_pages (view->document)) {
+ gint width_2, height_2;
+ ev_view_get_page_size (view,
+ view->current_page + 1,
+ &width_2, &height_2);
+ if (width_2 > width) {
+ width = width_2;
+ height = height_2;
+ }
+ }
+ compute_border (view, width, height, &border);
+
+ requisition->width = view->sizing_mode == EV_SIZING_FIT_WIDTH ? 1 :
+ ((width + border.left + border.right) * 2) + (view->spacing * 3);
+ requisition->height = (height + border.top + border.bottom) + (view->spacing * 2);
+}
+
+static void
+ev_view_size_request_single_page (EvView *view,
+ GtkRequisition *requisition)
+{
+ GtkBorder border;
+ gint width, height;
+
+ if (view->sizing_mode == EV_SIZING_BEST_FIT) {
+ requisition->width = 1;
+ requisition->height = 1;
+
+ return;
+ }
+
+ ev_view_get_page_size (view, view->current_page, &width, &height);
+ compute_border (view, width, height, &border);
+
+ requisition->width = view->sizing_mode == EV_SIZING_FIT_WIDTH ? 1 :
+ width + border.left + border.right + (2 * view->spacing);
+ requisition->height = height + border.top + border.bottom + (2 * view->spacing);
+}
+
+static void
+ev_view_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ EvView *view = EV_VIEW (widget);
+
+ if (view->document == NULL) {
+ view->requisition.width = 1;
+ view->requisition.height = 1;
+
+ *requisition = view->requisition;
+
+ return;
+ }
+
+ /* Get zoom for size here when not called from
+ * ev_view_size_allocate()
+ */
+ if (!view->internal_size_request &&
+ (view->sizing_mode == EV_SIZING_FIT_WIDTH ||
+ view->sizing_mode == EV_SIZING_BEST_FIT)) {
+ GtkAllocation allocation;
+
+ gtk_widget_get_allocation (widget, &allocation);
+ ev_view_zoom_for_size (view,
+ allocation.width,
+ allocation.height);
+ }
+
+ if (view->continuous && view->dual_page)
+ ev_view_size_request_continuous_dual_page (view, &view->requisition);
+ else if (view->continuous)
+ ev_view_size_request_continuous (view, &view->requisition);
+ else if (view->dual_page)
+ ev_view_size_request_dual_page (view, &view->requisition);
+ else
+ ev_view_size_request_single_page (view, &view->requisition);
+
+ *requisition = view->requisition;
+}
+
+static void
+ev_view_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ EvView *view = EV_VIEW (widget);
+ GList *children, *l;
+ gint root_x, root_y;
+
+ GTK_WIDGET_CLASS (ev_view_parent_class)->size_allocate (widget, allocation);
+
+ if (!view->document)
+ return;
+
+ if (view->sizing_mode == EV_SIZING_FIT_WIDTH ||
+ view->sizing_mode == EV_SIZING_BEST_FIT) {
+ GtkRequisition req;
+
+ ev_view_zoom_for_size (view,
+ allocation->width,
+ allocation->height);
+ view->internal_size_request = TRUE;
+ ev_view_size_request (widget, &req);
+ view->internal_size_request = FALSE;
+ }
+
+ view_set_adjustment_values (view, GTK_ORIENTATION_HORIZONTAL);
+ view_set_adjustment_values (view, GTK_ORIENTATION_VERTICAL);
+
+ if (view->document)
+ view_update_range_and_current_page (view);
+
+ view->pending_scroll = SCROLL_TO_KEEP_POSITION;
+ view->pending_resize = FALSE;
+ view->pending_point.x = 0;
+ view->pending_point.y = 0;
+
+ children = gtk_container_get_children (GTK_CONTAINER (widget));
+ for (l = children; l && l->data; l = g_list_next (l)) {
+ EvFormField *field;
+ GdkRectangle view_area;
+ EvMappingList *form_field_mapping;
+ GtkAllocation child_allocation;
+ GtkRequisition child_requisition;
+ GtkWidget *child = (GtkWidget *)l->data;
+
+ field = g_object_get_data (G_OBJECT (child), "form-field");
+ if (!field)
+ continue;
+
+ form_field_mapping = ev_page_cache_get_form_field_mapping (view->page_cache,
+ field->page->index);
+ ev_view_get_area_from_mapping (view, field->page->index,
+ form_field_mapping,
+ field, &view_area);
+
+ gtk_widget_size_request (child, &child_requisition);
+ if (child_requisition.width != view_area.width ||
+ child_requisition.height != view_area.height)
+ gtk_widget_set_size_request (child, view_area.width, view_area.height);
+
+ gtk_container_child_get (GTK_CONTAINER (widget),
+ child,
+ "x", &child_allocation.x,
+ "y", &child_allocation.y,
+ NULL);
+ if (child_allocation.x != view_area.x ||
+ child_allocation.y != view_area.y) {
+ gtk_layout_move (GTK_LAYOUT (widget), child, view_area.x, view_area.y);
+ }
+ }
+ g_list_free (children);
+
+ if (view->window_children)
+ gdk_window_get_origin (gtk_widget_get_window (GTK_WIDGET (view)),
+ &root_x, &root_y);
+
+ for (l = view->window_children; l && l->data; l = g_list_next (l)) {
+ EvViewWindowChild *child;
+ EvRectangle doc_rect;
+ GdkRectangle view_rect;
+
+ child = (EvViewWindowChild *)l->data;
+
+ ev_annotation_window_get_rectangle (EV_ANNOTATION_WINDOW (child->window), &doc_rect);
+ if (child->moved) {
+ doc_rect.x1 = child->orig_x;
+ doc_rect.y1 = child->orig_y;
+ }
+ doc_rect_to_view_rect (view, child->page, &doc_rect, &view_rect);
+ view_rect.x -= view->scroll_x;
+ view_rect.y -= view->scroll_y;
+
+ if (view_rect.x != child->orig_x || view_rect.y != child->orig_y) {
+ child->parent_x = root_x;
+ child->parent_y = root_y;
+ ev_view_window_child_move (view, child, view_rect.x + root_x, view_rect.y + root_y);
+ }
+ }
+}
+
+static void
+ev_view_realize (GtkWidget *widget)
+{
+ EvView *view = EV_VIEW (widget);
+ GdkWindow *bin_window;
+ GtkStyle *style;
+
+ if (GTK_WIDGET_CLASS (ev_view_parent_class)->realize)
+ (* GTK_WIDGET_CLASS (ev_view_parent_class)->realize) (widget);
+
+ bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
+ gdk_window_set_events (bin_window,
+ (gdk_window_get_events (bin_window) |
+ GDK_EXPOSURE_MASK |
+ GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK |
+ GDK_SCROLL_MASK |
+ GDK_KEY_PRESS_MASK |
+ GDK_POINTER_MOTION_MASK |
+ GDK_POINTER_MOTION_HINT_MASK |
+ GDK_ENTER_NOTIFY_MASK |
+ GDK_LEAVE_NOTIFY_MASK));
+
+ style = gtk_widget_get_style (widget);
+ gdk_window_set_background (bin_window, &style->mid[GTK_STATE_NORMAL]);
+
+ on_adjustment_value_changed (NULL, view);
+}
+
+static gboolean
+ev_view_scroll_event (GtkWidget *widget, GdkEventScroll *event)
+{
+ EvView *view = EV_VIEW (widget);
+ guint state;
+
+ state = event->state & gtk_accelerator_get_default_mod_mask ();
+
+ if (state == GDK_CONTROL_MASK) {
+ ev_document_model_set_sizing_mode (view->model, EV_SIZING_FREE);
+ if (event->direction == GDK_SCROLL_UP ||
+ event->direction == GDK_SCROLL_LEFT) {
+ if (ev_view_can_zoom_in (view)) {
+ ev_view_zoom_in (view);
+ }
+ } else {
+ if (ev_view_can_zoom_out (view)) {
+ ev_view_zoom_out (view);
+ }
+ }
+
+ return TRUE;
+ }
+
+ view->jump_to_find_result = FALSE;
+
+ /* Shift+Wheel scrolls the in the perpendicular direction */
+ if (state & GDK_SHIFT_MASK) {
+ if (event->direction == GDK_SCROLL_UP)
+ event->direction = GDK_SCROLL_LEFT;
+ else if (event->direction == GDK_SCROLL_LEFT)
+ event->direction = GDK_SCROLL_UP;
+ else if (event->direction == GDK_SCROLL_DOWN)
+ event->direction = GDK_SCROLL_RIGHT;
+ else if (event->direction == GDK_SCROLL_RIGHT)
+ event->direction = GDK_SCROLL_DOWN;
+
+ event->state &= ~GDK_SHIFT_MASK;
+ state &= ~GDK_SHIFT_MASK;
+ }
+
+ if (state == 0 && view->sizing_mode == EV_SIZING_BEST_FIT && !view->continuous) {
+ switch (event->direction) {
+ case GDK_SCROLL_DOWN:
+ case GDK_SCROLL_RIGHT:
+ ev_view_next_page (view);
+ break;
+ case GDK_SCROLL_UP:
+ case GDK_SCROLL_LEFT:
+ ev_view_previous_page (view);
+ break;
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static EvViewSelection *
+find_selection_for_page (EvView *view,
+ gint page)
+{
+ GList *list;
+
+ for (list = view->selection_info.selections; list != NULL; list = list->next) {
+ EvViewSelection *selection;
+
+ selection = (EvViewSelection *) list->data;
+
+ if (selection->page == page)
+ return selection;
+ }
+
+ return NULL;
+}
+
+static gboolean
+ev_view_expose_event (GtkWidget *widget,
+ GdkEventExpose *event)
+{
+ EvView *view = EV_VIEW (widget);
+ GdkWindow *bin_window;
+ cairo_t *cr;
+ gint i;
+
+ if (view->loading) {
+ show_loading_window (view);
+ } else if (view->loading_window &&
+ gtk_widget_get_visible (view->loading_window)) {
+ ev_view_loading_window_move (view);
+ }
+
+ if (view->document == NULL)
+ return FALSE;
+
+ bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
+ cr = gdk_cairo_create (bin_window);
+
+ for (i = view->start_page; i >= 0 && i <= view->end_page; i++) {
+ GdkRectangle page_area;
+ GtkBorder border;
+ gboolean page_ready = TRUE;
+
+ if (!ev_view_get_page_extents (view, i, &page_area, &border))
+ continue;
+
+ page_area.x -= view->scroll_x;
+ page_area.y -= view->scroll_y;
+
+ draw_one_page (view, i, cr, &page_area, &border, &(event->area), &page_ready);
+
+ if (page_ready && view->find_pages && view->highlight_find_results)
+ highlight_find_results (view, i);
+ if (page_ready && EV_IS_DOCUMENT_ANNOTATIONS (view->document))
+ show_annotation_windows (view, i);
+ if (page_ready && view->focus_annotation)
+ focus_annotation (view, i, &event->area);
+ if (page_ready && view->synctex_result)
+ highlight_forward_search_results (view, i);
+ }
+
+ cairo_destroy (cr);
+
+ if (GTK_WIDGET_CLASS (ev_view_parent_class)->expose_event)
+ (* GTK_WIDGET_CLASS (ev_view_parent_class)->expose_event) (widget, event);
+
+ return FALSE;
+}
+
+static gboolean
+ev_view_do_popup_menu (EvView *view,
+ gdouble x,
+ gdouble y)
+{
+ GList *items = NULL;
+ EvLink *link;
+ EvImage *image;
+ EvAnnotation *annot;
+
+ image = ev_view_get_image_at_location (view, x, y);
+ if (image)
+ items = g_list_prepend (items, image);
+
+ link = ev_view_get_link_at_location (view, x, y);
+ if (link)
+ items = g_list_prepend (items, link);
+
+ annot = ev_view_get_annotation_at_location (view, x, y);
+ if (annot)
+ items = g_list_prepend (items, annot);
+
+ g_signal_emit (view, signals[SIGNAL_POPUP_MENU], 0, items);
+
+ g_list_free (items);
+
+ return TRUE;
+}
+
+static gboolean
+ev_view_popup_menu (GtkWidget *widget)
+{
+ gint x, y;
+
+ gtk_widget_get_pointer (widget, &x, &y);
+ return ev_view_do_popup_menu (EV_VIEW (widget), x, y);
+}
+
+static void
+get_link_area (EvView *view,
+ gint x,
+ gint y,
+ EvLink *link,
+ GdkRectangle *area)
+{
+ EvMappingList *link_mapping;
+ gint page;
+ gint x_offset = 0, y_offset = 0;
+
+ x += view->scroll_x;
+ y += view->scroll_y;
+
+ find_page_at_location (view, x, y, &page, &x_offset, &y_offset);
+
+ link_mapping = ev_page_cache_get_link_mapping (view->page_cache, page);
+ ev_view_get_area_from_mapping (view, page,
+ link_mapping,
+ link, area);
+}
+
+static void
+get_annot_area (EvView *view,
+ gint x,
+ gint y,
+ EvAnnotation *annot,
+ GdkRectangle *area)
+{
+ EvMappingList *annot_mapping;
+ gint page;
+ gint x_offset = 0, y_offset = 0;
+
+ x += view->scroll_x;
+ y += view->scroll_y;
+
+ find_page_at_location (view, x, y, &page, &x_offset, &y_offset);
+
+ annot_mapping = ev_page_cache_get_annot_mapping (view->page_cache, page);
+ ev_view_get_area_from_mapping (view, page,
+ annot_mapping,
+ annot, area);
+}
+
+static gboolean
+ev_view_query_tooltip (GtkWidget *widget,
+ gint x,
+ gint y,
+ gboolean keyboard_tip,
+ GtkTooltip *tooltip)
+{
+ EvView *view = EV_VIEW (widget);
+ EvLink *link;
+ EvAnnotation *annot;
+ gchar *text;
+
+ annot = ev_view_get_annotation_at_location (view, x, y);
+ if (annot) {
+ const gchar *contents;
+
+ if ((contents = ev_annotation_get_contents (annot))) {
+ GdkRectangle annot_area;
+
+ get_annot_area (view, x, y, annot, &annot_area);
+ gtk_tooltip_set_text (tooltip, contents);
+ gtk_tooltip_set_tip_area (tooltip, &annot_area);
+
+ return TRUE;
+ }
+ }
+
+ link = ev_view_get_link_at_location (view, x, y);
+ if (!link)
+ return FALSE;
+
+ text = tip_from_link (view, link);
+ if (text && g_utf8_validate (text, -1, NULL)) {
+ GdkRectangle link_area;
+
+ get_link_area (view, x, y, link, &link_area);
+ gtk_tooltip_set_text (tooltip, text);
+ gtk_tooltip_set_tip_area (tooltip, &link_area);
+ }
+ g_free (text);
+
+ return TRUE;
+}
+
+static void
+start_selection_for_event (EvView *view,
+ GdkEventButton *event)
+{
+ clear_selection (view);
+
+ view->selection_info.start.x = event->x + view->scroll_x;
+ view->selection_info.start.y = event->y + view->scroll_y;
+
+ switch (event->type) {
+ case GDK_2BUTTON_PRESS:
+ view->selection_info.style = EV_SELECTION_STYLE_WORD;
+ break;
+ case GDK_3BUTTON_PRESS:
+ view->selection_info.style = EV_SELECTION_STYLE_LINE;
+ break;
+ default:
+ view->selection_info.style = EV_SELECTION_STYLE_GLYPH;
+ return;
+ }
+
+ /* In case of WORD or LINE, compute selections now */
+ compute_selections (view,
+ view->selection_info.style,
+ &(view->selection_info.start),
+ &(view->selection_info.start));
+}
+
+static gboolean
+ev_view_button_press_event (GtkWidget *widget,
+ GdkEventButton *event)
+{
+ EvView *view = EV_VIEW (widget);
+
+ if (!view->document)
+ return FALSE;
+
+ if (!gtk_widget_has_focus (widget)) {
+ gtk_widget_grab_focus (widget);
+ }
+
+ if (view->window_child_focus) {
+ EvAnnotationWindow *window;
+ EvAnnotation *annot;
+
+ window = EV_ANNOTATION_WINDOW (view->window_child_focus->window);
+ annot = ev_annotation_window_get_annotation (window);
+ ev_annotation_window_ungrab_focus (window);
+ view->window_child_focus = NULL;
+ }
+
+ view->pressed_button = event->button;
+ view->selection_info.in_drag = FALSE;
+
+ if (view->adding_annot)
+ return FALSE;
+
+ if (view->scroll_info.autoscrolling)
+ return TRUE;
+
+ switch (event->button) {
+ case 1: {
+ EvImage *image;
+ EvAnnotation *annot;
+ EvFormField *field;
+
+ if (event->state & GDK_CONTROL_MASK)
+ return ev_view_synctex_backward_search (view, event->x , event->y);
+
+ if (EV_IS_SELECTION (view->document) && view->selection_info.selections) {
+ if (event->type == GDK_3BUTTON_PRESS) {
+ start_selection_for_event (view, event);
+ } else if (location_in_selected_text (view,
+ event->x + view->scroll_x,
+ event->y + view->scroll_y)) {
+ view->selection_info.in_drag = TRUE;
+ } else {
+ start_selection_for_event (view, event);
+ }
+
+ gtk_widget_queue_draw (widget);
+ } else if ((annot = ev_view_get_annotation_at_location (view, event->x, event->y))) {
+ ev_view_handle_annotation (view, annot, event->x, event->y, event->time);
+ } else if ((field = ev_view_get_form_field_at_location (view, event->x, event->y))) {
+ ev_view_remove_all (view);
+ ev_view_handle_form_field (view, field, event->x, event->y);
+ } else if (!location_in_text (view, event->x + view->scroll_x, event->y + view->scroll_y) &&
+ (image = ev_view_get_image_at_location (view, event->x, event->y))) {
+ if (view->image_dnd_info.image)
+ g_object_unref (view->image_dnd_info.image);
+ view->image_dnd_info.image = g_object_ref (image);
+ view->image_dnd_info.in_drag = TRUE;
+
+ view->image_dnd_info.start.x = event->x + view->scroll_x;
+ view->image_dnd_info.start.y = event->y + view->scroll_y;
+ } else {
+ ev_view_remove_all (view);
+
+ if (view->synctex_result) {
+ g_free (view->synctex_result);
+ view->synctex_result = NULL;
+ gtk_widget_queue_draw (widget);
+ }
+
+ if (view->focus_annotation)
+ view->focus_annotation = NULL;
+
+ if (EV_IS_SELECTION (view->document))
+ start_selection_for_event (view, event);
+ }
+ }
+ return TRUE;
+ case 2:
+ /* use root coordinates as reference point because
+ * scrolling changes window relative coordinates */
+ view->drag_info.start.x = event->x_root;
+ view->drag_info.start.y = event->y_root;
+ view->drag_info.hadj = gtk_adjustment_get_value (view->hadjustment);
+ view->drag_info.vadj = gtk_adjustment_get_value (view->vadjustment);
+
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_DRAG);
+
+ return TRUE;
+ case 3:
+ view->scroll_info.start_y = event->y;
+ return ev_view_do_popup_menu (view, event->x, event->y);
+ }
+
+ return FALSE;
+}
+
+static void
+ev_view_remove_all (EvView *view)
+{
+ GList *children, *child;
+
+ children = gtk_container_get_children (GTK_CONTAINER (view));
+ for (child = children; child && child->data; child = g_list_next (child)) {
+ gtk_container_remove (GTK_CONTAINER (view),
+ GTK_WIDGET (child->data));
+ }
+ g_list_free (children);
+}
+
+/*** Drag and Drop ***/
+static void
+ev_view_drag_data_get (GtkWidget *widget,
+ GdkDragContext *context,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time)
+{
+ EvView *view = EV_VIEW (widget);
+
+ switch (info) {
+ case TARGET_DND_TEXT:
+ if (EV_IS_SELECTION (view->document) &&
+ view->selection_info.selections) {
+ gchar *text;
+
+ text = get_selected_text (view);
+ gtk_selection_data_set_text (selection_data,
+ text,
+ strlen (text));
+ g_free (text);
+ }
+ break;
+ case TARGET_DND_IMAGE:
+ if (view->image_dnd_info.image) {
+ GdkPixbuf *pixbuf;
+
+ ev_document_doc_mutex_lock ();
+ pixbuf = ev_document_images_get_image (EV_DOCUMENT_IMAGES (view->document),
+ view->image_dnd_info.image);
+ ev_document_doc_mutex_unlock ();
+
+ gtk_selection_data_set_pixbuf (selection_data, pixbuf);
+ g_object_unref (pixbuf);
+ }
+ break;
+ case TARGET_DND_URI:
+ if (view->image_dnd_info.image) {
+ GdkPixbuf *pixbuf;
+ const gchar *tmp_uri;
+ gchar *uris[2];
+
+ ev_document_doc_mutex_lock ();
+ pixbuf = ev_document_images_get_image (EV_DOCUMENT_IMAGES (view->document),
+ view->image_dnd_info.image);
+ ev_document_doc_mutex_unlock ();
+
+ tmp_uri = ev_image_save_tmp (view->image_dnd_info.image, pixbuf);
+ g_object_unref (pixbuf);
+
+ uris[0] = (gchar *)tmp_uri;
+ uris[1] = NULL;
+ gtk_selection_data_set_uris (selection_data, uris);
+ }
+ }
+}
+
+static gboolean
+ev_view_drag_motion (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time)
+{
+ if (gtk_drag_get_source_widget (context) == widget)
+ gdk_drag_status (context, 0, time);
+ else
+ gdk_drag_status (context, gdk_drag_context_get_suggested_action (context), time);
+
+ return TRUE;
+}
+
+static gboolean
+selection_update_idle_cb (EvView *view)
+{
+ compute_selections (view,
+ view->selection_info.style,
+ &view->selection_info.start,
+ &view->motion);
+ view->selection_update_id = 0;
+ return FALSE;
+}
+
+static gboolean
+selection_scroll_timeout_cb (EvView *view)
+{
+ gint x, y, shift = 0;
+ GtkWidget *widget = GTK_WIDGET (view);
+ GtkAllocation allocation;
+
+ gtk_widget_get_allocation (widget, &allocation);
+ gtk_widget_get_pointer (widget, &x, &y);
+
+ if (y > allocation.height) {
+ shift = (y - allocation.height) / 2;
+ } else if (y < 0) {
+ shift = y / 2;
+ }
+
+ if (shift)
+ gtk_adjustment_set_value (view->vadjustment,
+ CLAMP (gtk_adjustment_get_value (view->vadjustment) + shift,
+ gtk_adjustment_get_lower (view->vadjustment),
+ gtk_adjustment_get_upper (view->vadjustment) -
+ gtk_adjustment_get_page_size (view->vadjustment)));
+
+ if (x > allocation.width) {
+ shift = (x - allocation.width) / 2;
+ } else if (x < 0) {
+ shift = x / 2;
+ }
+
+ if (shift)
+ gtk_adjustment_set_value (view->hadjustment,
+ CLAMP (gtk_adjustment_get_value (view->hadjustment) + shift,
+ gtk_adjustment_get_lower (view->hadjustment),
+ gtk_adjustment_get_upper (view->hadjustment) -
+ gtk_adjustment_get_page_size (view->hadjustment)));
+
+ return TRUE;
+}
+
+static gboolean
+ev_view_drag_update_momentum (EvView *view)
+{
+ int i;
+ if (!view->drag_info.in_drag)
+ return FALSE;
+
+ for (i = DRAG_HISTORY - 1; i > 0; i--) {
+ view->drag_info.buffer[i].x = view->drag_info.buffer[i-1].x;
+ view->drag_info.buffer[i].y = view->drag_info.buffer[i-1].y;
+ }
+
+ /* Momentum is a moving average of 10ms granularity over
+ * the last 100ms with each 10ms stored in buffer.
+ */
+
+ view->drag_info.momentum.x = (view->drag_info.buffer[DRAG_HISTORY - 1].x - view->drag_info.buffer[0].x);
+ view->drag_info.momentum.y = (view->drag_info.buffer[DRAG_HISTORY - 1].y - view->drag_info.buffer[0].y);
+
+ return TRUE;
+}
+
+static gboolean
+ev_view_scroll_drag_release (EvView *view)
+{
+ gdouble dhadj_value, dvadj_value;
+ gdouble oldhadjustment, oldvadjustment;
+ gdouble h_page_size, v_page_size;
+ gdouble h_upper, v_upper;
+ GtkAllocation allocation;
+
+ view->drag_info.momentum.x /= 1.2;
+ view->drag_info.momentum.y /= 1.2; /* Alter these constants to change "friction" */
+
+ gtk_widget_get_allocation (GTK_WIDGET (view), &allocation);
+
+ h_page_size = gtk_adjustment_get_page_size (view->hadjustment);
+ v_page_size = gtk_adjustment_get_page_size (view->vadjustment);
+
+ dhadj_value = h_page_size *
+ (gdouble)view->drag_info.momentum.x / allocation.width;
+ dvadj_value = v_page_size *
+ (gdouble)view->drag_info.momentum.y / allocation.height;
+
+ oldhadjustment = gtk_adjustment_get_value (view->hadjustment);
+ oldvadjustment = gtk_adjustment_get_value (view->vadjustment);
+
+ h_upper = gtk_adjustment_get_upper (view->hadjustment);
+ v_upper = gtk_adjustment_get_upper (view->vadjustment);
+
+ /* When we reach the edges, we need either to absorb some momentum and bounce by
+ * multiplying it on -0.5 or stop scrolling by setting momentum to 0. */
+ if (((oldhadjustment + dhadj_value) > (h_upper - h_page_size)) ||
+ ((oldhadjustment + dhadj_value) < 0))
+ view->drag_info.momentum.x = 0;
+ if (((oldvadjustment + dvadj_value) > (v_upper - v_page_size)) ||
+ ((oldvadjustment + dvadj_value) < 0))
+ view->drag_info.momentum.y = 0;
+
+ gtk_adjustment_set_value (view->hadjustment,
+ MIN (oldhadjustment + dhadj_value,
+ h_upper - h_page_size));
+ gtk_adjustment_set_value (view->vadjustment,
+ MIN (oldvadjustment + dvadj_value,
+ v_upper - v_page_size));
+
+ if (((view->drag_info.momentum.x < 1) && (view->drag_info.momentum.x > -1)) &&
+ ((view->drag_info.momentum.y < 1) && (view->drag_info.momentum.y > -1)))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static gboolean
+ev_view_motion_notify_event (GtkWidget *widget,
+ GdkEventMotion *event)
+{
+ EvView *view = EV_VIEW (widget);
+ GdkWindow *bin_window;
+ gint x, y;
+
+ if (!view->document)
+ return FALSE;
+
+ bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
+
+ if (event->is_hint || event->window != bin_window) {
+ gtk_widget_get_pointer (widget, &x, &y);
+ } else {
+ x = event->x;
+ y = event->y;
+ }
+
+ if (view->scroll_info.autoscrolling) {
+ view->scroll_info.last_y = y;
+ return TRUE;
+ }
+
+ if (view->selection_info.in_drag) {
+ if (gtk_drag_check_threshold (widget,
+ view->selection_info.start.x,
+ view->selection_info.start.y,
+ x, y)) {
+ GtkTargetList *target_list = gtk_target_list_new (NULL, 0);
+
+ gtk_target_list_add_text_targets (target_list, TARGET_DND_TEXT);
+
+ gtk_drag_begin (widget, target_list,
+ GDK_ACTION_COPY,
+ 1, (GdkEvent *)event);
+
+ view->selection_info.in_drag = FALSE;
+
+ gtk_target_list_unref (target_list);
+
+ return TRUE;
+ }
+ } else if (view->image_dnd_info.in_drag) {
+ if (gtk_drag_check_threshold (widget,
+ view->selection_info.start.x,
+ view->selection_info.start.y,
+ x, y)) {
+ GtkTargetList *target_list = gtk_target_list_new (NULL, 0);
+
+ gtk_target_list_add_uri_targets (target_list, TARGET_DND_URI);
+ gtk_target_list_add_image_targets (target_list, TARGET_DND_IMAGE, TRUE);
+
+ gtk_drag_begin (widget, target_list,
+ GDK_ACTION_COPY,
+ 1, (GdkEvent *)event);
+
+ view->image_dnd_info.in_drag = FALSE;
+
+ gtk_target_list_unref (target_list);
+
+ return TRUE;
+ }
+ }
+
+ switch (view->pressed_button) {
+ case 1:
+ /* For the Evince 0.4.x release, we limit selection to un-rotated
+ * documents only.
+ */
+ if (view->rotation != 0)
+ return FALSE;
+
+ /* Schedule timeout to scroll during selection and additionally
+ * scroll once to allow arbitrary speed. */
+ if (!view->selection_scroll_id)
+ view->selection_scroll_id = g_timeout_add (SCROLL_TIME,
+ (GSourceFunc)selection_scroll_timeout_cb,
+ view);
+ else
+ selection_scroll_timeout_cb (view);
+
+ view->selection_info.in_selection = TRUE;
+ view->motion.x = x + view->scroll_x;
+ view->motion.y = y + view->scroll_y;
+
+ /* Queue an idle to handle the motion. We do this because
+ * handling any selection events in the motion could be slower
+ * than new motion events reach us. We always put it in the
+ * idle to make sure we catch up and don't visibly lag the
+ * mouse. */
+ if (!view->selection_update_id)
+ view->selection_update_id = g_idle_add ((GSourceFunc)selection_update_idle_cb, view);
+
+ return TRUE;
+ case 2:
+ if (!view->drag_info.in_drag) {
+ gboolean start;
+ int i;
+
+ start = gtk_drag_check_threshold (widget,
+ view->drag_info.start.x,
+ view->drag_info.start.y,
+ event->x_root,
+ event->y_root);
+ view->drag_info.in_drag = start;
+ view->drag_info.drag_timeout_id = g_timeout_add (10,
+ (GSourceFunc)ev_view_drag_update_momentum, view);
+ /* Set 100 to choose how long it takes to build up momentum */
+ /* Clear out previous momentum info: */
+ for (i = 0; i < DRAG_HISTORY; i++) {
+ view->drag_info.buffer[i].x = event->x;
+ view->drag_info.buffer[i].y = event->y;
+ }
+ view->drag_info.momentum.x = 0;
+ view->drag_info.momentum.y = 0;
+ }
+
+ if (view->drag_info.in_drag) {
+ int dx, dy;
+ gdouble dhadj_value, dvadj_value;
+ GtkAllocation allocation;
+
+ view->drag_info.buffer[0].x = event->x;
+ view->drag_info.buffer[0].y = event->y;
+
+ dx = event->x_root - view->drag_info.start.x;
+ dy = event->y_root - view->drag_info.start.y;
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+ dhadj_value = gtk_adjustment_get_page_size (view->hadjustment) *
+ (gdouble)dx / allocation.width;
+ dvadj_value = gtk_adjustment_get_page_size (view->vadjustment) *
+ (gdouble)dy / allocation.height;
+
+ /* clamp scrolling to visible area */
+ gtk_adjustment_set_value (view->hadjustment,
+ MIN (view->drag_info.hadj - dhadj_value,
+ gtk_adjustment_get_upper (view->hadjustment) -
+ gtk_adjustment_get_page_size (view->hadjustment)));
+ gtk_adjustment_set_value (view->vadjustment,
+ MIN (view->drag_info.vadj - dvadj_value,
+ gtk_adjustment_get_upper (view->vadjustment) -
+ gtk_adjustment_get_page_size (view->vadjustment)));
+
+ return TRUE;
+ }
+
+ break;
+ default:
+ ev_view_handle_cursor_over_xy (view, x, y);
+ }
+
+ return FALSE;
+}
+
+static gboolean
+ev_view_button_release_event (GtkWidget *widget,
+ GdkEventButton *event)
+{
+ EvView *view = EV_VIEW (widget);
+ EvLink *link = NULL;
+
+ view->image_dnd_info.in_drag = FALSE;
+
+ if (view->scroll_info.autoscrolling) {
+ ev_view_autoscroll_stop (view);
+ view->pressed_button = -1;
+
+ return TRUE;
+ }
+
+ if (view->pressed_button == 1 && event->state & GDK_CONTROL_MASK) {
+ view->pressed_button = -1;
+ return TRUE;
+ }
+
+ if (view->drag_info.in_drag) {
+ view->drag_info.release_timeout_id =
+ g_timeout_add (20,
+ (GSourceFunc)ev_view_scroll_drag_release, view);
+ }
+
+ if (view->document && !view->drag_info.in_drag && view->pressed_button != 3) {
+ link = ev_view_get_link_at_location (view, event->x, event->y);
+ }
+
+ view->drag_info.in_drag = FALSE;
+
+ if (view->adding_annot && view->pressed_button == 1) {
+ view->adding_annot = FALSE;
+ ev_view_handle_cursor_over_xy (view, event->x, event->y);
+ view->pressed_button = -1;
+
+ ev_view_create_annotation (view,
+ view->adding_annot_type,
+ event->x + view->scroll_x,
+ event->y + view->scroll_y);
+
+ return FALSE;
+ }
+
+ if (view->pressed_button == 2) {
+ ev_view_handle_cursor_over_xy (view, event->x, event->y);
+ }
+
+ view->pressed_button = -1;
+
+ if (view->selection_scroll_id) {
+ g_source_remove (view->selection_scroll_id);
+ view->selection_scroll_id = 0;
+ }
+ if (view->selection_update_id) {
+ g_source_remove (view->selection_update_id);
+ view->selection_update_id = 0;
+ }
+
+ if (view->selection_info.selections) {
+ clear_link_selected (view);
+ ev_view_update_primary_selection (view);
+
+ if (view->selection_info.in_drag) {
+ clear_selection (view);
+ gtk_widget_queue_draw (widget);
+ }
+
+ view->selection_info.in_drag = FALSE;
+ } else if (link) {
+ if (event->button == 2) {
+ EvLinkAction *action;
+ EvLinkActionType type;
+
+ action = ev_link_get_action (link);
+ if (!action)
+ return FALSE;
+
+ type = ev_link_action_get_action_type (action);
+ if (type == EV_LINK_ACTION_TYPE_GOTO_DEST) {
+ g_signal_emit (view,
+ signals[SIGNAL_EXTERNAL_LINK],
+ 0, action);
+ }
+ } else {
+ ev_view_handle_link (view, link);
+ }
+ }
+
+ return FALSE;
+}
+
+static gboolean
+ev_view_key_press_event (GtkWidget *widget,
+ GdkEventKey *event)
+{
+ EvView *view = EV_VIEW (widget);
+
+ if (!view->document)
+ return FALSE;
+
+ if (!gtk_widget_has_focus (widget)) {
+ /* Forward key events to current focused window child */
+ if (view->window_child_focus) {
+ GdkEventKey *new_event;
+ gboolean handled;
+
+ new_event = (GdkEventKey *) gdk_event_copy ((GdkEvent *)event);
+ g_object_unref (new_event->window);
+ new_event->window = gtk_widget_get_window (view->window_child_focus->window);
+ if (new_event->window)
+ g_object_ref (new_event->window);
+ gtk_widget_realize (view->window_child_focus->window);
+ handled = gtk_widget_event (view->window_child_focus->window, (GdkEvent *)new_event);
+ gdk_event_free ((GdkEvent *)new_event);
+
+ return handled;
+ }
+
+ return FALSE;
+ }
+
+ return gtk_bindings_activate_event (GTK_OBJECT (widget), event);
+}
+
+static gint
+ev_view_focus_in (GtkWidget *widget,
+ GdkEventFocus *event)
+{
+ if (EV_VIEW (widget)->pixbuf_cache)
+ ev_pixbuf_cache_style_changed (EV_VIEW (widget)->pixbuf_cache);
+ gtk_widget_queue_draw (widget);
+
+ return FALSE;
+}
+
+static gint
+ev_view_focus_out (GtkWidget *widget,
+ GdkEventFocus *event)
+{
+ if (EV_VIEW (widget)->pixbuf_cache)
+ ev_pixbuf_cache_style_changed (EV_VIEW (widget)->pixbuf_cache);
+ gtk_widget_queue_draw (widget);
+
+ return FALSE;
+}
+
+static gboolean
+ev_view_leave_notify_event (GtkWidget *widget, GdkEventCrossing *event)
+{
+ EvView *view = EV_VIEW (widget);
+
+ if (view->cursor != EV_VIEW_CURSOR_NORMAL)
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL);
+
+ return FALSE;
+}
+
+static gboolean
+ev_view_enter_notify_event (GtkWidget *widget, GdkEventCrossing *event)
+{
+ EvView *view = EV_VIEW (widget);
+
+ ev_view_handle_cursor_over_xy (view, event->x, event->y);
+
+ return FALSE;
+}
+
+static void
+ev_view_style_set (GtkWidget *widget,
+ GtkStyle *old_style)
+{
+ if (EV_VIEW (widget)->pixbuf_cache)
+ ev_pixbuf_cache_style_changed (EV_VIEW (widget)->pixbuf_cache);
+
+ GTK_WIDGET_CLASS (ev_view_parent_class)->style_set (widget, old_style);
+}
+
+/*** Drawing ***/
+
+static void
+draw_rubberband (EvView *view,
+ GdkWindow *window,
+ const GdkRectangle *rect,
+ gdouble alpha)
+{
+ GtkStyle *style;
+ GdkColor *fill_color_gdk;
+ gdouble r, g, b;
+ cairo_t *cr;
+
+ style = gtk_widget_get_style (GTK_WIDGET (view));
+ fill_color_gdk = gdk_color_copy (&style->base[GTK_STATE_SELECTED]);
+ r = fill_color_gdk->red / 65535.;
+ g = fill_color_gdk->green / 65535.;
+ b = fill_color_gdk->blue / 65535.;
+
+ cr = gdk_cairo_create (window);
+
+ cairo_set_source_rgba (cr, r, g, b, alpha);
+ cairo_rectangle (cr,
+ rect->x - view->scroll_x,
+ rect->y - view->scroll_y,
+ rect->width, rect->height);
+ cairo_fill_preserve (cr);
+
+ cairo_set_line_width (cr, 0.5);
+ cairo_set_source_rgb (cr, r, g, b);
+ cairo_stroke (cr);
+
+ cairo_destroy (cr);
+
+ gdk_color_free (fill_color_gdk);
+}
+
+
+static void
+highlight_find_results (EvView *view, int page)
+{
+ gint i, n_results = 0;
+ GdkWindow *bin_window;
+
+ bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
+
+ n_results = ev_view_find_get_n_results (view, page);
+
+ for (i = 0; i < n_results; i++) {
+ EvRectangle *rectangle;
+ GdkRectangle view_rectangle;
+ gdouble alpha;
+
+ if (i == view->find_result && page == view->current_page) {
+ alpha = 0.6;
+ } else {
+ alpha = 0.3;
+ }
+
+ rectangle = ev_view_find_get_result (view, page, i);
+ doc_rect_to_view_rect (view, page, rectangle, &view_rectangle);
+ draw_rubberband (view, bin_window, &view_rectangle, alpha);
+ }
+}
+
+static void
+highlight_forward_search_results (EvView *view, int page)
+{
+ GdkWindow *bin_window;
+ GdkRectangle rect;
+ cairo_t *cr;
+ EvMapping *mapping = view->synctex_result;
+
+ if (GPOINTER_TO_INT (mapping->data) != page)
+ return;
+
+ bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
+ doc_rect_to_view_rect (view, page, &mapping->area, &rect);
+
+ cr = gdk_cairo_create (bin_window);
+ cairo_set_source_rgb (cr, 1., 0., 0.);
+ cairo_rectangle (cr,
+ rect.x - view->scroll_x,
+ rect.y - view->scroll_y,
+ rect.width, rect.height);
+ cairo_stroke (cr);
+ cairo_destroy (cr);
+}
+
+static void
+focus_annotation (EvView *view,
+ gint page,
+ GdkRectangle *clip)
+{
+ GtkWidget *widget = GTK_WIDGET (view);
+ GdkRectangle rect;
+ EvMapping *mapping = view->focus_annotation;
+ EvAnnotation *annot = (EvAnnotation *)mapping->data;
+
+ if (ev_annotation_get_page_index (annot) != page)
+ return;
+
+ doc_rect_to_view_rect (view, page, &mapping->area, &rect);
+ gtk_paint_focus (gtk_widget_get_style (widget),
+ gtk_layout_get_bin_window (GTK_LAYOUT (view)),
+ gtk_widget_get_state (widget),
+ NULL, widget, NULL,
+ rect.x - view->scroll_x,
+ rect.y - view->scroll_y,
+ rect.width + 1, rect.height + 1);
+}
+
+static void
+ev_view_loading_window_move (EvView *view)
+{
+ GtkWidget *widget = GTK_WIDGET (view);
+ EvLoadingWindow *window = EV_LOADING_WINDOW (view->loading_window);
+ gint root_x, root_y;
+ gint window_width;
+ GtkAllocation allocation;
+
+ gtk_widget_get_allocation (widget, &allocation);
+ gdk_window_get_origin (gtk_widget_get_window (widget), &root_x, &root_y);
+ ev_loading_window_get_size (window, &window_width, NULL);
+
+ root_x += allocation.width - window_width - 10;
+ root_y += 10;
+
+ ev_loading_window_move (window, root_x, root_y);
+}
+
+static gboolean
+show_loading_window_cb (EvView *view)
+{
+ if (!view->loading_window) {
+ GtkWindow *parent;
+ GdkScreen *screen;
+
+ parent = GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view)));
+ view->loading_window = ev_loading_window_new (parent);
+
+ /* Show the window off screen to get a valid size asap */
+ screen = gtk_widget_get_screen (GTK_WIDGET (view));
+ gtk_window_move (GTK_WINDOW (view->loading_window),
+ gdk_screen_get_width (screen) + 1,
+ gdk_screen_get_height (screen) + 1);
+ gtk_widget_show (view->loading_window);
+ }
+
+ ev_view_loading_window_move (view);
+
+ gtk_widget_show (view->loading_window);
+
+ view->loading_timeout = 0;
+
+ return FALSE;
+}
+
+static void
+show_loading_window (EvView *view)
+{
+ if (view->loading_window && gtk_widget_get_visible (view->loading_window)) {
+ ev_view_loading_window_move (view);
+ return;
+ }
+
+ if (!view->loading_timeout) {
+ view->loading_timeout =
+ g_timeout_add_full (G_PRIORITY_LOW,
+ 0.5, (GSourceFunc)show_loading_window_cb,
+ view, NULL);
+ }
+}
+
+static void
+hide_loading_window (EvView *view)
+{
+ if (view->loading_timeout) {
+ g_source_remove (view->loading_timeout);
+ view->loading_timeout = 0;
+ }
+
+ if (view->loading_window && gtk_widget_get_visible (view->loading_window)) {
+ gtk_widget_hide (view->loading_window);
+ }
+}
+
+static void
+draw_one_page (EvView *view,
+ gint page,
+ cairo_t *cr,
+ GdkRectangle *page_area,
+ GtkBorder *border,
+ GdkRectangle *expose_area,
+ gboolean *page_ready)
+{
+ GdkWindow *bin_window;
+ GdkRectangle overlap;
+ GdkRectangle real_page_area;
+ gint current_page;
+ gboolean inverted_colors;
+
+ g_assert (view->document);
+
+ if (! gdk_rectangle_intersect (page_area, expose_area, &overlap))
+ return;
+
+ /* Render the document itself */
+ real_page_area = *page_area;
+
+ real_page_area.x += border->left;
+ real_page_area.y += border->top;
+ real_page_area.width -= (border->left + border->right);
+ real_page_area.height -= (border->top + border->bottom);
+ *page_ready = TRUE;
+
+ bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
+ current_page = ev_document_model_get_page (view->model);
+ inverted_colors = ev_document_model_get_inverted_colors (view->model);
+ ev_document_misc_paint_one_page (cr,
+ GTK_WIDGET (view),
+ page_area, border,
+ page == current_page,
+ inverted_colors);
+
+ if (gdk_rectangle_intersect (&real_page_area, expose_area, &overlap)) {
+ gint width, height;
+ gint page_width, page_height;
+ cairo_surface_t *page_surface = NULL;
+ gint selection_width, selection_height;
+ cairo_surface_t *selection_surface = NULL;
+
+ page_surface = ev_pixbuf_cache_get_surface (view->pixbuf_cache, page);
+
+ if (!page_surface) {
+ if (page == current_page)
+ show_loading_window (view);
+
+ *page_ready = FALSE;
+
+ return;
+ }
+
+ if (page == current_page)
+ hide_loading_window (view);
+
+ ev_view_get_page_size (view, page, &width, &height);
+
+ page_width = cairo_image_surface_get_width (page_surface);
+ page_height = cairo_image_surface_get_height (page_surface);
+
+ cairo_save (cr);
+ cairo_translate (cr, overlap.x, overlap.y);
+
+ if (width != page_width || height != page_height) {
+ cairo_pattern_set_filter (cairo_get_source (cr),
+ CAIRO_FILTER_FAST);
+ cairo_scale (cr,
+ (gdouble)width / page_width,
+ (gdouble)height / page_height);
+ }
+
+ cairo_surface_set_device_offset (page_surface,
+ overlap.x - real_page_area.x,
+ overlap.y - real_page_area.y);
+ cairo_set_source_surface (cr, page_surface, 0, 0);
+ cairo_paint (cr);
+ cairo_restore (cr);
+
+ /* Get the selection pixbuf iff we have something to draw */
+ if (find_selection_for_page (view, page) &&
+ view->selection_mode == EV_VIEW_SELECTION_TEXT) {
+ selection_surface =
+ ev_pixbuf_cache_get_selection_surface (view->pixbuf_cache,
+ page,
+ view->scale,
+ NULL);
+ }
+
+ if (!selection_surface) {
+ return;
+ }
+
+ selection_width = cairo_image_surface_get_width (selection_surface);
+ selection_height = cairo_image_surface_get_height (selection_surface);
+
+ cairo_save (cr);
+ cairo_translate (cr, overlap.x, overlap.y);
+
+ if (width != selection_width || height != selection_height) {
+ cairo_pattern_set_filter (cairo_get_source (cr),
+ CAIRO_FILTER_FAST);
+ cairo_scale (cr,
+ (gdouble)width / selection_width,
+ (gdouble)height / selection_height);
+ }
+
+ cairo_surface_set_device_offset (selection_surface,
+ overlap.x - real_page_area.x,
+ overlap.y - real_page_area.y);
+
+ cairo_set_source_surface (cr, selection_surface, 0, 0);
+ cairo_paint (cr);
+ cairo_restore (cr);
+ }
+}
+
+/*** GObject functions ***/
+
+static void
+ev_view_finalize (GObject *object)
+{
+ EvView *view = EV_VIEW (object);
+
+ clear_selection (view);
+ clear_link_selected (view);
+
+ if (view->synctex_result) {
+ g_free (view->synctex_result);
+ view->synctex_result = NULL;
+ }
+
+ if (view->image_dnd_info.image)
+ g_object_unref (view->image_dnd_info.image);
+ view->image_dnd_info.image = NULL;
+
+ G_OBJECT_CLASS (ev_view_parent_class)->finalize (object);
+}
+
+static void
+ev_view_destroy (GtkObject *object)
+{
+ EvView *view = EV_VIEW (object);
+
+ if (view->model) {
+ g_object_unref (view->model);
+ view->model = NULL;
+ }
+
+ if (view->pixbuf_cache) {
+ g_object_unref (view->pixbuf_cache);
+ view->pixbuf_cache = NULL;
+ }
+
+ if (view->document) {
+ g_object_unref (view->document);
+ view->document = NULL;
+ }
+
+ if (view->page_cache) {
+ g_object_unref (view->page_cache);
+ view->page_cache = NULL;
+ }
+
+ ev_view_window_children_free (view);
+
+ if (view->selection_scroll_id) {
+ g_source_remove (view->selection_scroll_id);
+ view->selection_scroll_id = 0;
+ }
+
+ if (view->selection_update_id) {
+ g_source_remove (view->selection_update_id);
+ view->selection_update_id = 0;
+ }
+
+ if (view->scroll_info.timeout_id) {
+ g_source_remove (view->scroll_info.timeout_id);
+ view->scroll_info.timeout_id = 0;
+ }
+
+ if (view->drag_info.drag_timeout_id) {
+ g_source_remove (view->drag_info.drag_timeout_id);
+ view->drag_info.drag_timeout_id = 0;
+ }
+
+ if (view->drag_info.release_timeout_id) {
+ g_source_remove (view->drag_info.release_timeout_id);
+ view->drag_info.release_timeout_id = 0;
+ }
+
+ if (view->loading_timeout) {
+ g_source_remove (view->loading_timeout);
+ view->loading_timeout = 0;
+ }
+
+ ev_view_set_scroll_adjustments (GTK_LAYOUT (view), NULL, NULL);
+
+ GTK_OBJECT_CLASS (ev_view_parent_class)->destroy (object);
+}
+
+static AtkObject *
+ev_view_get_accessible (GtkWidget *widget)
+{
+ static gboolean first_time = TRUE;
+
+ if (first_time) {
+ AtkObjectFactory *factory;
+ AtkRegistry *registry;
+ GType derived_type;
+ GType derived_atk_type;
+
+ /*
+ * Figure out whether accessibility is enabled by looking at the
+ * type of the accessible object which would be created for
+ * the parent type of EvView.
+ */
+ derived_type = g_type_parent (EV_TYPE_VIEW);
+
+ registry = atk_get_default_registry ();
+ factory = atk_registry_get_factory (registry,
+ derived_type);
+ derived_atk_type = atk_object_factory_get_accessible_type (factory);
+ if (g_type_is_a (derived_atk_type, GTK_TYPE_ACCESSIBLE)) {
+ atk_registry_set_factory_type (registry,
+ EV_TYPE_VIEW,
+ ev_view_accessible_factory_get_type ());
+ EV_VIEW (widget)->a11y_enabled = TRUE;
+ }
+ first_time = FALSE;
+ }
+ return GTK_WIDGET_CLASS (ev_view_parent_class)->get_accessible (widget);
+}
+
+static void
+ev_view_class_init (EvViewClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+ GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (class);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
+ GtkLayoutClass *layout_class = GTK_LAYOUT_CLASS (class);
+ GtkBindingSet *binding_set;
+
+ object_class->finalize = ev_view_finalize;
+
+ widget_class->expose_event = ev_view_expose_event;
+ widget_class->button_press_event = ev_view_button_press_event;
+ widget_class->motion_notify_event = ev_view_motion_notify_event;
+ widget_class->button_release_event = ev_view_button_release_event;
+ widget_class->key_press_event = ev_view_key_press_event;
+ widget_class->focus_in_event = ev_view_focus_in;
+ widget_class->focus_out_event = ev_view_focus_out;
+ widget_class->get_accessible = ev_view_get_accessible;
+ widget_class->size_request = ev_view_size_request;
+ widget_class->size_allocate = ev_view_size_allocate;
+ widget_class->realize = ev_view_realize;
+ widget_class->scroll_event = ev_view_scroll_event;
+ widget_class->enter_notify_event = ev_view_enter_notify_event;
+ widget_class->leave_notify_event = ev_view_leave_notify_event;
+ widget_class->style_set = ev_view_style_set;
+ widget_class->drag_data_get = ev_view_drag_data_get;
+ widget_class->drag_motion = ev_view_drag_motion;
+ widget_class->popup_menu = ev_view_popup_menu;
+ widget_class->query_tooltip = ev_view_query_tooltip;
+
+ gtk_object_class->destroy = ev_view_destroy;
+
+ layout_class->set_scroll_adjustments = ev_view_set_scroll_adjustments;
+
+ class->binding_activated = ev_view_scroll;
+
+ signals[SIGNAL_BINDING_ACTIVATED] = g_signal_new ("binding_activated",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvViewClass, binding_activated),
+ NULL, NULL,
+ ev_view_marshal_VOID__ENUM_BOOLEAN,
+ G_TYPE_NONE, 2,
+ GTK_TYPE_SCROLL_TYPE,
+ G_TYPE_BOOLEAN);
+ signals[SIGNAL_HANDLE_LINK] = g_signal_new ("handle-link",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvViewClass, handle_link),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+ signals[SIGNAL_EXTERNAL_LINK] = g_signal_new ("external-link",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvViewClass, external_link),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+ signals[SIGNAL_POPUP_MENU] = g_signal_new ("popup",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvViewClass, popup_menu),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
+ signals[SIGNAL_SELECTION_CHANGED] = g_signal_new ("selection-changed",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvViewClass, selection_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0,
+ G_TYPE_NONE);
+ signals[SIGNAL_SYNC_SOURCE] = g_signal_new ("sync-source",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvViewClass, sync_source),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
+ signals[SIGNAL_ANNOT_ADDED] = g_signal_new ("annot-added",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvViewClass, annot_added),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ EV_TYPE_ANNOTATION);
+
+ binding_set = gtk_binding_set_by_class (class);
+
+ add_scroll_binding_keypad (binding_set, GDK_Left, 0, GTK_SCROLL_STEP_BACKWARD, TRUE);
+ add_scroll_binding_keypad (binding_set, GDK_Right, 0, GTK_SCROLL_STEP_FORWARD, TRUE);
+ add_scroll_binding_keypad (binding_set, GDK_Left, GDK_MOD1_MASK, GTK_SCROLL_STEP_DOWN, TRUE);
+ add_scroll_binding_keypad (binding_set, GDK_Right, GDK_MOD1_MASK, GTK_SCROLL_STEP_UP, TRUE);
+ add_scroll_binding_keypad (binding_set, GDK_Up, 0, GTK_SCROLL_STEP_BACKWARD, FALSE);
+ add_scroll_binding_keypad (binding_set, GDK_Down, 0, GTK_SCROLL_STEP_FORWARD, FALSE);
+ add_scroll_binding_keypad (binding_set, GDK_Up, GDK_MOD1_MASK, GTK_SCROLL_STEP_DOWN, FALSE);
+ add_scroll_binding_keypad (binding_set, GDK_Down, GDK_MOD1_MASK, GTK_SCROLL_STEP_UP, FALSE);
+ gtk_binding_entry_add_signal (binding_set, GDK_H, 0, "binding_activated", 2, GTK_TYPE_SCROLL_TYPE,
+ GTK_SCROLL_STEP_BACKWARD, G_TYPE_BOOLEAN, TRUE);
+ gtk_binding_entry_add_signal (binding_set, GDK_J, 0, "binding_activated", 2, GTK_TYPE_SCROLL_TYPE,
+ GTK_SCROLL_STEP_FORWARD, G_TYPE_BOOLEAN, FALSE);
+ gtk_binding_entry_add_signal (binding_set, GDK_K, 0, "binding_activated", 2, GTK_TYPE_SCROLL_TYPE,
+ GTK_SCROLL_STEP_BACKWARD, G_TYPE_BOOLEAN, FALSE);
+ gtk_binding_entry_add_signal (binding_set, GDK_L, 0, "binding_activated", 2, GTK_TYPE_SCROLL_TYPE,
+ GTK_SCROLL_STEP_FORWARD, G_TYPE_BOOLEAN, TRUE);
+
+}
+
+static void
+ev_view_init (EvView *view)
+{
+ gtk_widget_set_can_focus (GTK_WIDGET (view), TRUE);
+
+ view->start_page = -1;
+ view->end_page = -1;
+ view->spacing = 5;
+ view->scale = 1.0;
+ view->current_page = 0;
+ view->pressed_button = -1;
+ view->cursor = EV_VIEW_CURSOR_NORMAL;
+ view->drag_info.in_drag = FALSE;
+ view->scroll_info.autoscrolling = FALSE;
+ view->selection_info.selections = NULL;
+ view->selection_info.in_selection = FALSE;
+ view->selection_info.in_drag = FALSE;
+ view->selection_mode = EV_VIEW_SELECTION_TEXT;
+ view->continuous = TRUE;
+ view->dual_page = FALSE;
+ view->fullscreen = FALSE;
+ view->sizing_mode = EV_SIZING_FIT_WIDTH;
+ view->pending_scroll = SCROLL_TO_KEEP_POSITION;
+ view->jump_to_find_result = TRUE;
+ view->highlight_find_results = FALSE;
+
+ gtk_layout_set_hadjustment (GTK_LAYOUT (view), NULL);
+ gtk_layout_set_vadjustment (GTK_LAYOUT (view), NULL);
+}
+
+/*** Callbacks ***/
+
+static void
+ev_view_change_page (EvView *view,
+ gint new_page)
+{
+ gint x, y;
+
+ view->current_page = new_page;
+ view->pending_scroll = SCROLL_TO_PAGE_POSITION;
+
+ hide_loading_window (view);
+
+ gtk_widget_get_pointer (GTK_WIDGET (view), &x, &y);
+ ev_view_handle_cursor_over_xy (view, x, y);
+
+ gtk_widget_queue_resize (GTK_WIDGET (view));
+}
+
+static void
+job_finished_cb (EvPixbufCache *pixbuf_cache,
+ cairo_region_t *region,
+ EvView *view)
+{
+ if (region) {
+ GdkWindow *bin_window;
+
+ bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
+#if GTK_CHECK_VERSION(2, 90, 5)
+ gdk_window_invalidate_region (bin_window, region, TRUE);
+#else
+ {
+ GdkRegion *gdk_region = gdk_region_new ();
+ guint n_recs = cairo_region_num_rectangles (region);
+ guint i;
+
+ for (i = 0; i < n_recs; i++) {
+ cairo_rectangle_int_t rect;
+
+ cairo_region_get_rectangle (region, i, &rect);
+ gdk_region_union_with_rect (gdk_region, (GdkRectangle *)&rect);
+ }
+ gdk_window_invalidate_region (bin_window, gdk_region, TRUE);
+ gdk_region_destroy (gdk_region);
+ }
+#endif
+ } else {
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+ }
+}
+
+static void
+ev_view_page_changed_cb (EvDocumentModel *model,
+ gint old_page,
+ gint new_page,
+ EvView *view)
+{
+ if (!view->document)
+ return;
+
+ if (view->current_page != new_page) {
+ ev_view_change_page (view, new_page);
+ } else {
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+ }
+
+ view->find_result = 0;
+}
+
+static void
+on_adjustment_value_changed (GtkAdjustment *adjustment,
+ EvView *view)
+{
+ int dx = 0, dy = 0;
+ gint x, y;
+ gint value;
+ GList *children, *l;
+
+ if (!gtk_widget_get_realized (GTK_WIDGET (view)))
+ return;
+
+ if (view->hadjustment) {
+ value = (gint) gtk_adjustment_get_value (view->hadjustment);
+ dx = view->scroll_x - value;
+ view->scroll_x = value;
+ } else {
+ view->scroll_x = 0;
+ }
+
+ if (view->vadjustment) {
+ value = (gint) gtk_adjustment_get_value (view->vadjustment);
+ dy = view->scroll_y - value;
+ view->scroll_y = value;
+ } else {
+ view->scroll_y = 0;
+ }
+
+ children = gtk_container_get_children (GTK_CONTAINER (view));
+ for (l = children; l && l->data; l = g_list_next (l)) {
+ gint child_x, child_y;
+ GtkWidget *child = (GtkWidget *)l->data;
+
+ gtk_container_child_get (GTK_CONTAINER (view),
+ child,
+ "x", &child_x,
+ "y", &child_y,
+ NULL);
+ gtk_layout_move (GTK_LAYOUT (view), child, child_x + dx, child_y + dy);
+ }
+ g_list_free (children);
+
+ for (l = view->window_children; l && l->data; l = g_list_next (l)) {
+ EvViewWindowChild *child;
+
+ child = (EvViewWindowChild *)l->data;
+
+ ev_view_window_child_move (view, child, child->x + dx, child->y + dy);
+ }
+
+ if (view->pending_resize) {
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+ } else {
+ GdkWindow *bin_window;
+
+ bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
+ gdk_window_scroll (bin_window, dx, dy);
+ }
+
+ gtk_widget_get_pointer (GTK_WIDGET (view), &x, &y);
+ ev_view_handle_cursor_over_xy (view, x, y);
+
+ if (view->document)
+ view_update_range_and_current_page (view);
+}
+
+GtkWidget*
+ev_view_new (void)
+{
+ GtkWidget *view;
+
+ view = g_object_new (EV_TYPE_VIEW, NULL);
+
+ return view;
+}
+
+static void
+setup_caches (EvView *view)
+{
+ gboolean inverted_colors;
+
+ view->height_to_page_cache = ev_view_get_height_to_page_cache (view);
+ view->pixbuf_cache = ev_pixbuf_cache_new (GTK_WIDGET (view), view->model, view->pixbuf_cache_size);
+ view->page_cache = ev_page_cache_new (view->document);
+ if (view->a11y_enabled) {
+ EvJobPageDataFlags flags = ev_page_cache_get_flags (view->page_cache);
+
+ ev_page_cache_set_flags (view->page_cache,
+ flags |
+ EV_PAGE_DATA_INCLUDE_TEXT_LAYOUT |
+ EV_PAGE_DATA_INCLUDE_TEXT);
+ }
+ inverted_colors = ev_document_model_get_inverted_colors (view->model);
+ ev_pixbuf_cache_set_inverted_colors (view->pixbuf_cache, inverted_colors);
+ g_signal_connect (view->pixbuf_cache, "job-finished", G_CALLBACK (job_finished_cb), view);
+}
+
+static void
+clear_caches (EvView *view)
+{
+ if (view->pixbuf_cache) {
+ g_object_unref (view->pixbuf_cache);
+ view->pixbuf_cache = NULL;
+ }
+
+ if (view->page_cache) {
+ g_object_unref (view->page_cache);
+ view->page_cache = NULL;
+ }
+}
+
+/**
+ * ev_view_set_page_cache_size:
+ * @view:
+ * @cache_size:
+ *
+ * Sets the maximum size in bytes that will be used to cache
+ * rendered pages. Use 0 to disable caching rendered pages.
+ *
+ * Note that this limit doesn't affect the current visible page range,
+ * which will always be rendered. In order to limit the total memory used
+ * you have to use ev_document_model_set_max_scale() too.
+ *
+ */
+void
+ev_view_set_page_cache_size (EvView *view,
+ gsize cache_size)
+{
+ if (view->pixbuf_cache_size == cache_size)
+ return;
+
+ view->pixbuf_cache_size = cache_size;
+ if (view->pixbuf_cache)
+ ev_pixbuf_cache_set_max_size (view->pixbuf_cache, cache_size);
+}
+
+void
+ev_view_set_loading (EvView *view,
+ gboolean loading)
+{
+ if (view->loading && !loading)
+ hide_loading_window (view);
+ view->loading = loading;
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+}
+
+static gboolean
+ev_view_autoscroll_cb (EvView *view)
+{
+ gdouble speed, value;
+
+ /* If the user stops autoscrolling, autoscrolling will be
+ * set to false but the timeout will continue; stop the timeout: */
+ if (!view->scroll_info.autoscrolling) {
+ view->scroll_info.timeout_id = 0;
+ return FALSE;
+ }
+
+ if (view->scroll_info.last_y > view->scroll_info.start_y &&
+ (view->scroll_info.last_y < view->scroll_info.start_y))
+ return TRUE;
+
+ /* Replace 100 with your speed of choice: The lower the faster.
+ * Replace 3 with another speed of choice: The higher, the faster it accelerated
+ * based on the distance of the starting point from the mouse
+ * (All also effected by the timeout interval of this callback) */
+
+ if (view->scroll_info.start_y > view->scroll_info.last_y)
+ speed = -pow ((((gdouble)view->scroll_info.start_y - view->scroll_info.last_y) / 100), 3);
+ else
+ speed = pow ((((gdouble)view->scroll_info.last_y - view->scroll_info.start_y) / 100), 3);
+
+ value = gtk_adjustment_get_value (view->vadjustment);
+ value = CLAMP (value + speed, 0,
+ gtk_adjustment_get_upper (view->vadjustment) -
+ gtk_adjustment_get_page_size (view->vadjustment));
+ gtk_adjustment_set_value (view->vadjustment, value);
+
+ return TRUE;
+
+}
+
+void
+ev_view_autoscroll_start (EvView *view)
+{
+ gint x, y;
+
+ g_return_if_fail (EV_IS_VIEW (view));
+
+ if (view->scroll_info.autoscrolling)
+ return;
+
+ view->scroll_info.autoscrolling = TRUE;
+ view->scroll_info.timeout_id =
+ g_timeout_add (20, (GSourceFunc)ev_view_autoscroll_cb,
+ view);
+
+ gtk_widget_get_pointer (GTK_WIDGET (view), &x, &y);
+ ev_view_handle_cursor_over_xy (view, x, y);
+}
+
+void
+ev_view_autoscroll_stop (EvView *view)
+{
+ gint x, y;
+
+ g_return_if_fail (EV_IS_VIEW (view));
+
+ if (!view->scroll_info.autoscrolling)
+ return;
+
+ view->scroll_info.autoscrolling = FALSE;
+ if (view->scroll_info.timeout_id) {
+ g_source_remove (view->scroll_info.timeout_id);
+ view->scroll_info.timeout_id = 0;
+ }
+
+ gtk_widget_get_pointer (GTK_WIDGET (view), &x, &y);
+ ev_view_handle_cursor_over_xy (view, x, y);
+}
+
+static void
+ev_view_document_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvView *view)
+{
+ EvDocument *document = ev_document_model_get_document (model);
+
+ if (document != view->document) {
+ gint current_page;
+
+ clear_caches (view);
+
+ if (view->document) {
+ g_object_unref (view->document);
+ }
+
+ view->document = document;
+ view->find_result = 0;
+
+ if (view->document) {
+ view->loading = FALSE;
+ g_object_ref (view->document);
+ setup_caches (view);
+ }
+
+ current_page = ev_document_model_get_page (model);
+ if (view->current_page != current_page) {
+ ev_view_change_page (view, current_page);
+ } else {
+ view->pending_scroll = SCROLL_TO_KEEP_POSITION;
+ gtk_widget_queue_resize (GTK_WIDGET (view));
+ }
+ }
+}
+
+static void
+ev_view_rotation_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvView *view)
+{
+ gint rotation = ev_document_model_get_rotation (model);
+
+ view->rotation = rotation;
+
+ if (view->pixbuf_cache) {
+ ev_pixbuf_cache_clear (view->pixbuf_cache);
+ if (!ev_document_is_page_size_uniform (view->document))
+ view->pending_scroll = SCROLL_TO_PAGE_POSITION;
+ gtk_widget_queue_resize (GTK_WIDGET (view));
+ }
+
+ ev_view_remove_all (view);
+
+ if (rotation != 0)
+ clear_selection (view);
+}
+
+static void
+ev_view_inverted_colors_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvView *view)
+{
+ if (view->pixbuf_cache) {
+ gboolean inverted_colors;
+
+ inverted_colors = ev_document_model_get_inverted_colors (model);
+ ev_pixbuf_cache_set_inverted_colors (view->pixbuf_cache, inverted_colors);
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+ }
+}
+
+static void
+ev_view_sizing_mode_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvView *view)
+{
+ EvSizingMode mode = ev_document_model_get_sizing_mode (model);
+
+ view->sizing_mode = mode;
+ if (mode != EV_SIZING_FREE)
+ gtk_widget_queue_resize (GTK_WIDGET (view));
+}
+
+#define EPSILON 0.0000001
+static void
+ev_view_scale_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvView *view)
+{
+ gdouble scale = ev_document_model_get_scale (model);
+
+ if (ABS (view->scale - scale) < EPSILON)
+ return;
+
+ view->scale = scale;
+
+ view->pending_resize = TRUE;
+ if (view->sizing_mode == EV_SIZING_FREE)
+ gtk_widget_queue_resize (GTK_WIDGET (view));
+}
+
+static void
+ev_view_continuous_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvView *view)
+{
+ gboolean continuous = ev_document_model_get_continuous (model);
+
+ view->continuous = continuous;
+ view->pending_scroll = SCROLL_TO_PAGE_POSITION;
+ gtk_widget_queue_resize (GTK_WIDGET (view));
+}
+
+static void
+ev_view_dual_page_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvView *view)
+{
+ gboolean dual_page = ev_document_model_get_dual_page (model);
+
+ view->dual_page = dual_page;
+ view->pending_scroll = SCROLL_TO_PAGE_POSITION;
+ /* FIXME: if we're keeping the pixbuf cache around, we should extend the
+ * preload_cache_size to be 2 if dual_page is set.
+ */
+ gtk_widget_queue_resize (GTK_WIDGET (view));
+}
+
+static void
+ev_view_fullscreen_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvView *view)
+{
+ gboolean fullscreen = ev_document_model_get_fullscreen (model);
+
+ view->fullscreen = fullscreen;
+ gtk_widget_queue_resize (GTK_WIDGET (view));
+}
+
+void
+ev_view_set_model (EvView *view,
+ EvDocumentModel *model)
+{
+ g_return_if_fail (EV_IS_VIEW (view));
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ if (model == view->model)
+ return;
+
+ if (view->model) {
+ g_signal_handlers_disconnect_by_func (view->model,
+ ev_view_document_changed_cb,
+ view);
+ g_signal_handlers_disconnect_by_func (view->model,
+ ev_view_page_changed_cb,
+ view);
+ g_object_unref (view->model);
+ }
+ view->model = g_object_ref (model);
+
+ /* Initialize view from model */
+ view->rotation = ev_document_model_get_rotation (view->model);
+ view->sizing_mode = ev_document_model_get_sizing_mode (view->model);
+ view->scale = ev_document_model_get_scale (view->model);
+ view->continuous = ev_document_model_get_continuous (view->model);
+ view->dual_page = ev_document_model_get_dual_page (view->model);
+ view->fullscreen = ev_document_model_get_fullscreen (view->model);
+ ev_view_document_changed_cb (view->model, NULL, view);
+
+ g_signal_connect (view->model, "notify::document",
+ G_CALLBACK (ev_view_document_changed_cb),
+ view);
+ g_signal_connect (view->model, "notify::rotation",
+ G_CALLBACK (ev_view_rotation_changed_cb),
+ view);
+ g_signal_connect (view->model, "notify::inverted-colors",
+ G_CALLBACK (ev_view_inverted_colors_changed_cb),
+ view);
+ g_signal_connect (view->model, "notify::sizing-mode",
+ G_CALLBACK (ev_view_sizing_mode_changed_cb),
+ view);
+ g_signal_connect (view->model, "notify::scale",
+ G_CALLBACK (ev_view_scale_changed_cb),
+ view);
+ g_signal_connect (view->model, "notify::continuous",
+ G_CALLBACK (ev_view_continuous_changed_cb),
+ view);
+ g_signal_connect (view->model, "notify::dual-page",
+ G_CALLBACK (ev_view_dual_page_changed_cb),
+ view);
+ g_signal_connect (view->model, "notify::fullscreen",
+ G_CALLBACK (ev_view_fullscreen_changed_cb),
+ view);
+ g_signal_connect (view->model, "page-changed",
+ G_CALLBACK (ev_view_page_changed_cb),
+ view);
+}
+
+static void
+ev_view_reload_page (EvView *view,
+ gint page,
+ cairo_region_t *region)
+{
+ ev_pixbuf_cache_reload_page (view->pixbuf_cache,
+ region,
+ page,
+ view->rotation,
+ view->scale);
+}
+
+void
+ev_view_reload (EvView *view)
+{
+ ev_pixbuf_cache_clear (view->pixbuf_cache);
+ view_update_range_and_current_page (view);
+}
+
+/*** Zoom and sizing mode ***/
+
+gboolean
+ev_view_can_zoom_in (EvView *view)
+{
+ return view->scale * ZOOM_IN_FACTOR <= ev_document_model_get_max_scale (view->model);
+}
+
+gboolean
+ev_view_can_zoom_out (EvView *view)
+{
+ return view->scale * ZOOM_OUT_FACTOR >= ev_document_model_get_min_scale (view->model);
+}
+
+void
+ev_view_zoom_in (EvView *view)
+{
+ gdouble scale;
+
+ g_return_if_fail (view->sizing_mode == EV_SIZING_FREE);
+
+ view->pending_scroll = SCROLL_TO_CENTER;
+ scale = ev_document_model_get_scale (view->model) * ZOOM_IN_FACTOR;
+ ev_document_model_set_scale (view->model, scale);
+}
+
+void
+ev_view_zoom_out (EvView *view)
+{
+ gdouble scale;
+
+ g_return_if_fail (view->sizing_mode == EV_SIZING_FREE);
+
+ view->pending_scroll = SCROLL_TO_CENTER;
+ scale = ev_document_model_get_scale (view->model) * ZOOM_OUT_FACTOR;
+ ev_document_model_set_scale (view->model, scale);
+}
+
+static double
+zoom_for_size_fit_width (gdouble doc_width,
+ gdouble doc_height,
+ int target_width,
+ int target_height)
+{
+ return (double)target_width / doc_width;
+}
+
+static double
+zoom_for_size_fit_height (gdouble doc_width,
+ gdouble doc_height,
+ int target_width,
+ int target_height)
+{
+ return (double)target_height / doc_height;
+}
+
+static double
+zoom_for_size_best_fit (gdouble doc_width,
+ gdouble doc_height,
+ int target_width,
+ int target_height)
+{
+ double w_scale;
+ double h_scale;
+
+ w_scale = (double)target_width / doc_width;
+ h_scale = (double)target_height / doc_height;
+
+ return MIN (w_scale, h_scale);
+}
+
+static void
+ev_view_zoom_for_size_continuous_and_dual_page (EvView *view,
+ int width,
+ int height)
+{
+ gdouble doc_width, doc_height;
+ GtkBorder border;
+ gdouble scale;
+ gint sb_size;
+
+ ev_document_get_max_page_size (view->document, &doc_width, &doc_height);
+ if (view->rotation == 90 || view->rotation == 270) {
+ gdouble tmp;
+
+ tmp = doc_width;
+ doc_width = doc_height;
+ doc_height = tmp;
+ }
+
+ compute_border (view, doc_width, doc_height, &border);
+
+ doc_width *= 2;
+ width -= (2 * (border.left + border.right) + 3 * view->spacing);
+ height -= (border.top + border.bottom + 2 * view->spacing - 1);
+
+ sb_size = ev_view_get_scrollbar_size (view, GTK_ORIENTATION_VERTICAL);
+
+ if (view->sizing_mode == EV_SIZING_FIT_WIDTH) {
+ scale = zoom_for_size_fit_width (doc_width, doc_height, width - sb_size, height);
+ } else if (view->sizing_mode == EV_SIZING_BEST_FIT)
+ scale = zoom_for_size_best_fit (doc_width, doc_height, width - sb_size, height);
+ else
+ g_assert_not_reached ();
+
+ ev_document_model_set_scale (view->model, scale);
+}
+
+static void
+ev_view_zoom_for_size_continuous (EvView *view,
+ int width,
+ int height)
+{
+ gdouble doc_width, doc_height;
+ GtkBorder border;
+ gdouble scale;
+ gint sb_size;
+
+ ev_document_get_max_page_size (view->document, &doc_width, &doc_height);
+ if (view->rotation == 90 || view->rotation == 270) {
+ gdouble tmp;
+
+ tmp = doc_width;
+ doc_width = doc_height;
+ doc_height = tmp;
+ }
+
+ compute_border (view, doc_width, doc_height, &border);
+
+ width -= (border.left + border.right + 2 * view->spacing);
+ height -= (border.top + border.bottom + 2 * view->spacing - 1);
+
+ sb_size = ev_view_get_scrollbar_size (view, GTK_ORIENTATION_VERTICAL);
+
+ if (view->sizing_mode == EV_SIZING_FIT_WIDTH) {
+ scale = zoom_for_size_fit_width (doc_width, doc_height, width - sb_size, height);
+ } else if (view->sizing_mode == EV_SIZING_BEST_FIT)
+ scale = zoom_for_size_best_fit (doc_width, doc_height, width - sb_size, height);
+ else
+ g_assert_not_reached ();
+
+ ev_document_model_set_scale (view->model, scale);
+}
+
+static void
+ev_view_zoom_for_size_dual_page (EvView *view,
+ int width,
+ int height)
+{
+ GtkBorder border;
+ gdouble doc_width, doc_height;
+ gdouble scale;
+ gint other_page;
+
+ other_page = view->current_page ^ 1;
+
+ /* Find the largest of the two. */
+ get_doc_page_size (view, view->current_page, &doc_width, &doc_height);
+ if (other_page < ev_document_get_n_pages (view->document)) {
+ gdouble width_2, height_2;
+
+ get_doc_page_size (view, other_page, &width_2, &height_2);
+ if (width_2 > doc_width)
+ doc_width = width_2;
+ if (height_2 > doc_height)
+ doc_height = height_2;
+ }
+ compute_border (view, width, height, &border);
+
+ doc_width = doc_width * 2;
+ width -= ((border.left + border.right)* 2 + 3 * view->spacing);
+ height -= (border.top + border.bottom + 2 * view->spacing);
+
+ if (view->sizing_mode == EV_SIZING_FIT_WIDTH) {
+ gint sb_size;
+
+ sb_size = ev_view_get_scrollbar_size (view, GTK_ORIENTATION_VERTICAL);
+ scale = zoom_for_size_fit_width (doc_width, doc_height, width - sb_size, height);
+ } else if (view->sizing_mode == EV_SIZING_BEST_FIT)
+ scale = zoom_for_size_best_fit (doc_width, doc_height, width, height);
+ else
+ g_assert_not_reached ();
+
+ ev_document_model_set_scale (view->model, scale);
+}
+
+static void
+ev_view_zoom_for_size_single_page (EvView *view,
+ int width,
+ int height)
+{
+ gdouble doc_width, doc_height;
+ GtkBorder border;
+ gdouble scale;
+
+ get_doc_page_size (view, view->current_page, &doc_width, &doc_height);
+
+ /* Get an approximate border */
+ compute_border (view, width, height, &border);
+
+ width -= (border.left + border.right + 2 * view->spacing);
+ height -= (border.top + border.bottom + 2 * view->spacing);
+
+ if (view->sizing_mode == EV_SIZING_FIT_WIDTH) {
+ gint sb_size;
+
+ sb_size = ev_view_get_scrollbar_size (view, GTK_ORIENTATION_VERTICAL);
+ scale = zoom_for_size_fit_width (doc_width, doc_height, width - sb_size, height);
+ } else if (view->sizing_mode == EV_SIZING_BEST_FIT)
+ scale = zoom_for_size_best_fit (doc_width, doc_height, width, height);
+ else
+ g_assert_not_reached ();
+
+ ev_document_model_set_scale (view->model, scale);
+}
+
+static void
+ev_view_zoom_for_size (EvView *view,
+ int width,
+ int height)
+{
+ g_return_if_fail (EV_IS_VIEW (view));
+ g_return_if_fail (view->sizing_mode == EV_SIZING_FIT_WIDTH ||
+ view->sizing_mode == EV_SIZING_BEST_FIT);
+ g_return_if_fail (width >= 0);
+ g_return_if_fail (height >= 0);
+
+ if (view->document == NULL)
+ return;
+
+ if (view->continuous && view->dual_page)
+ ev_view_zoom_for_size_continuous_and_dual_page (view, width, height);
+ else if (view->continuous)
+ ev_view_zoom_for_size_continuous (view, width, height);
+ else if (view->dual_page)
+ ev_view_zoom_for_size_dual_page (view, width, height);
+ else
+ ev_view_zoom_for_size_single_page (view, width, height);
+}
+
+/*** Find ***/
+static gint
+ev_view_find_get_n_results (EvView *view, gint page)
+{
+ return view->find_pages ? g_list_length (view->find_pages[page]) : 0;
+}
+
+static EvRectangle *
+ev_view_find_get_result (EvView *view, gint page, gint result)
+{
+ return view->find_pages ? (EvRectangle *) g_list_nth_data (view->find_pages[page], result) : NULL;
+}
+
+static void
+jump_to_find_result (EvView *view)
+{
+ gint n_results;
+ gint page = view->current_page;
+
+ n_results = ev_view_find_get_n_results (view, page);
+
+ if (n_results > 0 && view->find_result < n_results) {
+ EvRectangle *rect;
+ GdkRectangle view_rect;
+
+ rect = ev_view_find_get_result (view, page, view->find_result);
+ doc_rect_to_view_rect (view, page, rect, &view_rect);
+ ensure_rectangle_is_visible (view, &view_rect);
+ view->jump_to_find_result = FALSE;
+ }
+}
+
+/**
+ * jump_to_find_page
+ * @view: #EvView instance
+ * @direction: Direction to look
+ * @shift: Shift from current page
+ *
+ * Jumps to the first page that has occurences of searched word.
+ * Uses a direction where to look and a shift from current page.
+ *
+ */
+static void
+jump_to_find_page (EvView *view, EvViewFindDirection direction, gint shift)
+{
+ int n_pages, i;
+
+ n_pages = ev_document_get_n_pages (view->document);
+
+ for (i = 0; i < n_pages; i++) {
+ int page;
+
+ if (direction == EV_VIEW_FIND_NEXT)
+ page = view->current_page + i;
+ else
+ page = view->current_page - i;
+ page += shift;
+
+ if (page >= n_pages) {
+ page = page - n_pages;
+ } else if (page < 0)
+ page = page + n_pages;
+
+ if (ev_view_find_get_n_results (view, page) > 0) {
+ ev_document_model_set_page (view->model, page);
+ break;
+ }
+ }
+}
+
+void
+ev_view_find_changed (EvView *view, GList **results, gint page)
+{
+ view->find_pages = results;
+
+ if (view->jump_to_find_result == TRUE) {
+ jump_to_find_page (view, EV_VIEW_FIND_NEXT, 0);
+ jump_to_find_result (view);
+ }
+
+ if (view->current_page == page)
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+}
+
+void
+ev_view_find_next (EvView *view)
+{
+ gint n_results;
+
+ n_results = ev_view_find_get_n_results (view, view->current_page);
+ view->find_result++;
+
+ if (view->find_result >= n_results) {
+ view->find_result = 0;
+ jump_to_find_page (view, EV_VIEW_FIND_NEXT, 1);
+ jump_to_find_result (view);
+ } else {
+ jump_to_find_result (view);
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+ }
+}
+
+void
+ev_view_find_previous (EvView *view)
+{
+ view->find_result--;
+
+ if (view->find_result < 0) {
+ jump_to_find_page (view, EV_VIEW_FIND_PREV, -1);
+ view->find_result = MAX (0, ev_view_find_get_n_results (view, view->current_page) - 1);
+ jump_to_find_result (view);
+ } else {
+ jump_to_find_result (view);
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+ }
+}
+
+void
+ev_view_find_search_changed (EvView *view)
+{
+ /* search string has changed, focus on new search result */
+ view->jump_to_find_result = TRUE;
+ view->find_pages = NULL;
+}
+
+void
+ev_view_find_set_highlight_search (EvView *view, gboolean value)
+{
+ view->highlight_find_results = value;
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+}
+
+void
+ev_view_find_cancel (EvView *view)
+{
+ view->find_pages = NULL;
+}
+
+/*** Synctex ***/
+void
+ev_view_highlight_forward_search (EvView *view,
+ EvSourceLink *link)
+{
+ EvMapping *mapping;
+ gint page;
+ GdkRectangle view_rect;
+
+ if (!ev_document_has_synctex (view->document))
+ return;
+
+ mapping = ev_document_synctex_forward_search (view->document, link);
+ if (!mapping)
+ return;
+
+ if (view->synctex_result)
+ g_free (view->synctex_result);
+ view->synctex_result = mapping;
+
+ page = GPOINTER_TO_INT (mapping->data);
+ ev_document_model_set_page (view->model, page);
+
+ doc_rect_to_view_rect (view, page, &mapping->area, &view_rect);
+ ensure_rectangle_is_visible (view, &view_rect);
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+}
+
+/*** Selections ***/
+
+/* compute_new_selection_rect/text calculates the area currently selected by
+ * view_rect. each handles a different mode;
+ */
+static GList *
+compute_new_selection_rect (EvView *view,
+ GdkPoint *start,
+ GdkPoint *stop)
+{
+ GdkRectangle view_rect;
+ int n_pages, i;
+ GList *list = NULL;
+
+ g_assert (view->selection_mode == EV_VIEW_SELECTION_RECTANGLE);
+
+ view_rect.x = MIN (start->x, stop->x);
+ view_rect.y = MIN (start->y, stop->y);
+ view_rect.width = MAX (start->x, stop->x) - view_rect.x;
+ view_rect.width = MAX (start->y, stop->y) - view_rect.y;
+
+ n_pages = ev_document_get_n_pages (view->document);
+
+ for (i = 0; i < n_pages; i++) {
+ GdkRectangle page_area;
+ GtkBorder border;
+
+ if (ev_view_get_page_extents (view, i, &page_area, &border)) {
+ GdkRectangle overlap;
+
+ if (gdk_rectangle_intersect (&page_area, &view_rect, &overlap)) {
+ EvViewSelection *selection;
+
+ selection = g_new0 (EvViewSelection, 1);
+ selection->page = i;
+ view_rect_to_doc_rect (view, &overlap, &page_area,
+ &(selection->rect));
+
+ list = g_list_append (list, selection);
+ }
+ }
+ }
+
+ return list;
+}
+
+static gboolean
+gdk_rectangle_point_in (GdkRectangle *rectangle,
+ GdkPoint *point)
+{
+ return rectangle->x <= point->x &&
+ rectangle->y <= point->y &&
+ point->x < rectangle->x + rectangle->width &&
+ point->y < rectangle->y + rectangle->height;
+}
+
+static GList *
+compute_new_selection_text (EvView *view,
+ EvSelectionStyle style,
+ GdkPoint *start,
+ GdkPoint *stop)
+{
+ int n_pages, i, first, last;
+ GList *list = NULL;
+ EvViewSelection *selection;
+ gdouble width, height;
+ int start_page, end_page;
+
+ g_assert (view->selection_mode == EV_VIEW_SELECTION_TEXT);
+
+ n_pages = ev_document_get_n_pages (view->document);
+
+ /* First figure out the range of pages the selection
+ * affects. */
+ first = n_pages;
+ last = 0;
+ if (view->continuous) {
+ start_page = 0;
+ end_page = n_pages;
+ } else if (view->dual_page) {
+ start_page = view->start_page;
+ end_page = view->end_page + 1;
+ } else {
+ start_page = view->current_page;
+ end_page = view->current_page + 1;
+ }
+
+ for (i = start_page; i < end_page; i++) {
+ GdkRectangle page_area;
+ GtkBorder border;
+
+ ev_view_get_page_extents (view, i, &page_area, &border);
+ if (gdk_rectangle_point_in (&page_area, start) ||
+ gdk_rectangle_point_in (&page_area, stop)) {
+ if (first == n_pages)
+ first = i;
+ last = i;
+ }
+
+ }
+
+ /* Now create a list of EvViewSelection's for the affected
+ * pages. This could be an empty list, a list of just one
+ * page or a number of pages.*/
+ for (i = first; i < last + 1; i++) {
+ GdkRectangle page_area;
+ GtkBorder border;
+ GdkPoint *point;
+
+ get_doc_page_size (view, i, &width, &height);
+
+ selection = g_new0 (EvViewSelection, 1);
+ selection->page = i;
+ selection->style = style;
+ selection->rect.x1 = selection->rect.y1 = 0;
+ selection->rect.x2 = width;
+ selection->rect.y2 = height;
+
+ ev_view_get_page_extents (view, i, &page_area, &border);
+
+ if (gdk_rectangle_point_in (&page_area, start))
+ point = start;
+ else
+ point = stop;
+
+ if (i == first)
+ view_point_to_doc_point (view, point, &page_area,
+ &selection->rect.x1,
+ &selection->rect.y1);
+
+ /* If the selection is contained within just one page,
+ * make sure we don't write 'start' into both points
+ * in selection->rect. */
+ if (first == last)
+ point = stop;
+
+ if (i == last)
+ view_point_to_doc_point (view, point, &page_area,
+ &selection->rect.x2,
+ &selection->rect.y2);
+
+ list = g_list_append (list, selection);
+ }
+
+ return list;
+}
+
+/* This function takes the newly calculated list, and figures out which regions
+ * have changed. It then queues a redraw approporiately.
+ */
+static void
+merge_selection_region (EvView *view,
+ GList *new_list)
+{
+ GList *old_list;
+ GList *new_list_ptr, *old_list_ptr;
+
+ /* Update the selection */
+ old_list = ev_pixbuf_cache_get_selection_list (view->pixbuf_cache);
+ g_list_foreach (view->selection_info.selections, (GFunc)selection_free, NULL);
+ g_list_free (view->selection_info.selections);
+ view->selection_info.selections = new_list;
+ ev_pixbuf_cache_set_selection_list (view->pixbuf_cache, new_list);
+ g_signal_emit (view, signals[SIGNAL_SELECTION_CHANGED], 0, NULL);
+
+ new_list_ptr = new_list;
+ old_list_ptr = old_list;
+
+ while (new_list_ptr || old_list_ptr) {
+ EvViewSelection *old_sel, *new_sel;
+ int cur_page;
+ cairo_region_t *region = NULL;
+
+ new_sel = (new_list_ptr) ? (new_list_ptr->data) : NULL;
+ old_sel = (old_list_ptr) ? (old_list_ptr->data) : NULL;
+
+ /* Assume that the lists are in order, and we run through them
+ * comparing them, one page at a time. We come out with the
+ * first page we see. */
+ if (new_sel && old_sel) {
+ if (new_sel->page < old_sel->page) {
+ new_list_ptr = new_list_ptr->next;
+ old_sel = NULL;
+ } else if (new_sel->page > old_sel->page) {
+ old_list_ptr = old_list_ptr->next;
+ new_sel = NULL;
+ } else {
+ new_list_ptr = new_list_ptr->next;
+ old_list_ptr = old_list_ptr->next;
+ }
+ } else if (new_sel) {
+ new_list_ptr = new_list_ptr->next;
+ } else if (old_sel) {
+ old_list_ptr = old_list_ptr->next;
+ }
+
+ g_assert (new_sel || old_sel);
+
+ /* is the page we're looking at on the screen?*/
+ cur_page = new_sel ? new_sel->page : old_sel->page;
+ if (cur_page < view->start_page || cur_page > view->end_page)
+ continue;
+
+ /* seed the cache with a new page. We are going to need the new
+ * region too. */
+ if (new_sel) {
+ cairo_region_t *tmp_region = NULL;
+
+ ev_pixbuf_cache_get_selection_surface (view->pixbuf_cache,
+ cur_page,
+ view->scale,
+ &tmp_region);
+
+ if (tmp_region && !cairo_region_is_empty (tmp_region)) {
+ new_sel->covered_region = cairo_region_reference (tmp_region);
+ }
+ }
+
+ /* Now we figure out what needs redrawing */
+ if (old_sel && new_sel) {
+ if (old_sel->covered_region && new_sel->covered_region) {
+ /* We only want to redraw the areas that have
+ * changed, so we xor the old and new regions
+ * and redraw if it's different */
+ region = cairo_region_copy (old_sel->covered_region);
+#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 9, 12)
+ cairo_region_xor (region, new_sel->covered_region);
+#else
+ cairo_region_t *tbr;
+ tbr = cairo_region_copy (new_sel->covered_region);
+
+ /* xor old_sel, new_sel*/
+ cairo_region_subtract (tbr, region);
+ cairo_region_subtract (region, new_sel->covered_region);
+ cairo_region_union (region, tbr);
+ cairo_region_destroy (tbr);
+#endif
+
+ if (cairo_region_is_empty (region)) {
+ cairo_region_destroy (region);
+ region = NULL;
+ } else {
+ gint num_rectangles = cairo_region_num_rectangles (region);
+ GdkRectangle r;
+
+ /* We need to make the damage region a little bigger
+ * because the edges of the old selection might change
+ */
+ cairo_region_get_rectangle (region, 0, &r);
+ r.x -= 5;
+ r.width = 5;
+ cairo_region_union_rectangle (region, &r);
+
+ cairo_region_get_rectangle (region, num_rectangles - 1, &r);
+ r.x += r.width;
+ r.width = 5;
+ cairo_region_union_rectangle (region, &r);
+ }
+ } else if (old_sel->covered_region) {
+ region = cairo_region_copy (old_sel->covered_region);
+ } else if (new_sel->covered_region) {
+ region = cairo_region_copy (new_sel->covered_region);
+ }
+ } else if (old_sel && !new_sel) {
+ if (old_sel->covered_region && !cairo_region_is_empty (old_sel->covered_region)) {
+ region = cairo_region_copy (old_sel->covered_region);
+ }
+ } else if (!old_sel && new_sel) {
+ if (new_sel->covered_region && !cairo_region_is_empty (new_sel->covered_region)) {
+ region = cairo_region_copy (new_sel->covered_region);
+ }
+ } else {
+ g_assert_not_reached ();
+ }
+
+ /* Redraw the damaged region! */
+ if (region) {
+ GdkWindow *bin_window;
+ GdkRectangle page_area;
+ GtkBorder border;
+
+ bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
+ ev_view_get_page_extents (view, cur_page, &page_area, &border);
+ cairo_region_translate (region,
+ page_area.x + border.left - view->scroll_x,
+ page_area.y + border.top - view->scroll_y);
+#if GTK_CHECK_VERSION(2, 90, 5)
+ gdk_window_invalidate_region (bin_window, region, TRUE);
+#else
+ {
+ GdkRegion *gdk_region = gdk_region_new ();
+ guint n_recs = cairo_region_num_rectangles (region);
+ guint i;
+
+ for (i = 0; i < n_recs; i++) {
+ cairo_rectangle_int_t rect;
+
+ cairo_region_get_rectangle (region, i, &rect);
+ gdk_region_union_with_rect (gdk_region, (GdkRectangle *)&rect);
+ }
+ gdk_window_invalidate_region (bin_window, gdk_region, TRUE);
+ gdk_region_destroy (gdk_region);
+ }
+#endif
+ cairo_region_destroy (region);
+ }
+ }
+
+ /* Free the old list, now that we're done with it. */
+ g_list_foreach (old_list, (GFunc) selection_free, NULL);
+ g_list_free (old_list);
+}
+
+static void
+compute_selections (EvView *view,
+ EvSelectionStyle style,
+ GdkPoint *start,
+ GdkPoint *stop)
+{
+ GList *list;
+
+ if (view->selection_mode == EV_VIEW_SELECTION_RECTANGLE)
+ list = compute_new_selection_rect (view, start, stop);
+ else
+ list = compute_new_selection_text (view, style, start, stop);
+ merge_selection_region (view, list);
+}
+
+/* Free's the selection. It's up to the caller to queue redraws if needed.
+ */
+static void
+selection_free (EvViewSelection *selection)
+{
+ if (selection->covered_region)
+ cairo_region_destroy (selection->covered_region);
+ g_free (selection);
+}
+
+static void
+clear_selection (EvView *view)
+{
+ if (view->selection_info.selections) {
+ g_list_foreach (view->selection_info.selections, (GFunc)selection_free, NULL);
+ g_list_free (view->selection_info.selections);
+ view->selection_info.selections = NULL;
+
+ g_signal_emit (view, signals[SIGNAL_SELECTION_CHANGED], 0, NULL);
+ }
+ view->selection_info.in_selection = FALSE;
+ if (view->pixbuf_cache)
+ ev_pixbuf_cache_set_selection_list (view->pixbuf_cache, NULL);
+}
+
+void
+ev_view_select_all (EvView *view)
+{
+ GList *selections = NULL;
+ int n_pages, i;
+
+ /* Disable selection on rotated pages for the 0.4.0 series */
+ if (view->rotation != 0)
+ return;
+
+ clear_selection (view);
+
+ n_pages = ev_document_get_n_pages (view->document);
+ for (i = 0; i < n_pages; i++) {
+ gdouble width, height;
+ EvViewSelection *selection;
+
+ get_doc_page_size (view, i, &width, &height);
+
+ selection = g_new0 (EvViewSelection, 1);
+ selection->page = i;
+ selection->style = EV_SELECTION_STYLE_GLYPH;
+ selection->rect.x1 = selection->rect.y1 = 0;
+ selection->rect.x2 = width;
+ selection->rect.y2 = height;
+
+ selections = g_list_append (selections, selection);
+ }
+
+ merge_selection_region (view, selections);
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+}
+
+gboolean
+ev_view_get_has_selection (EvView *view)
+{
+ return view->selection_info.selections != NULL;
+}
+
+static char *
+get_selected_text (EvView *view)
+{
+ GString *text;
+ GList *l;
+ gchar *normalized_text;
+
+ text = g_string_new (NULL);
+
+ ev_document_doc_mutex_lock ();
+
+ for (l = view->selection_info.selections; l != NULL; l = l->next) {
+ EvViewSelection *selection = (EvViewSelection *)l->data;
+ EvPage *page;
+ gchar *tmp;
+
+ page = ev_document_get_page (view->document, selection->page);
+ tmp = ev_selection_get_selected_text (EV_SELECTION (view->document),
+ page, selection->style,
+ &(selection->rect));
+ g_object_unref (page);
+ g_string_append (text, tmp);
+ g_free (tmp);
+ }
+
+ ev_document_doc_mutex_unlock ();
+
+ normalized_text = g_utf8_normalize (text->str, text->len, G_NORMALIZE_NFKC);
+ g_string_free (text, TRUE);
+ return normalized_text;
+}
+
+static void
+ev_view_clipboard_copy (EvView *view,
+ const gchar *text)
+{
+ GtkClipboard *clipboard;
+
+ clipboard = gtk_widget_get_clipboard (GTK_WIDGET (view),
+ GDK_SELECTION_CLIPBOARD);
+ gtk_clipboard_set_text (clipboard, text, -1);
+}
+
+void
+ev_view_copy (EvView *ev_view)
+{
+ char *text;
+
+ if (!EV_IS_SELECTION (ev_view->document))
+ return;
+
+ text = get_selected_text (ev_view);
+ ev_view_clipboard_copy (ev_view, text);
+ g_free (text);
+}
+
+static void
+ev_view_primary_get_cb (GtkClipboard *clipboard,
+ GtkSelectionData *selection_data,
+ guint info,
+ gpointer data)
+{
+ EvView *ev_view = EV_VIEW (data);
+
+ if (ev_view->link_selected) {
+ gtk_selection_data_set_text (selection_data,
+ ev_link_action_get_uri (ev_view->link_selected),
+ -1);
+ } else if (EV_IS_SELECTION (ev_view->document) &&
+ ev_view->selection_info.selections) {
+ gchar *text;
+
+ text = get_selected_text (ev_view);
+ if (text) {
+ gtk_selection_data_set_text (selection_data, text, -1);
+ g_free (text);
+ }
+ }
+}
+
+static void
+ev_view_primary_clear_cb (GtkClipboard *clipboard,
+ gpointer data)
+{
+ EvView *view = EV_VIEW (data);
+
+ clear_selection (view);
+ clear_link_selected (view);
+}
+
+static void
+ev_view_update_primary_selection (EvView *ev_view)
+{
+ GtkClipboard *clipboard;
+
+ clipboard = gtk_widget_get_clipboard (GTK_WIDGET (ev_view),
+ GDK_SELECTION_PRIMARY);
+
+ if (ev_view->selection_info.selections || ev_view->link_selected) {
+ GtkTargetList *target_list;
+ GtkTargetEntry *targets;
+ int n_targets;
+
+ target_list = gtk_target_list_new (NULL, 0);
+ gtk_target_list_add_text_targets (target_list, 0);
+ targets = gtk_target_table_new_from_list (target_list, &n_targets);
+ gtk_target_list_unref (target_list);
+
+ if (!gtk_clipboard_set_with_owner (clipboard,
+ targets, n_targets,
+ ev_view_primary_get_cb,
+ ev_view_primary_clear_cb,
+ G_OBJECT (ev_view)))
+ ev_view_primary_clear_cb (clipboard, ev_view);
+
+ gtk_target_table_free (targets, n_targets);
+ } else {
+ if (gtk_clipboard_get_owner (clipboard) == G_OBJECT (ev_view))
+ gtk_clipboard_clear (clipboard);
+ }
+}
+
+static void
+clear_link_selected (EvView *view)
+{
+ if (view->link_selected) {
+ g_object_unref (view->link_selected);
+ view->link_selected = NULL;
+ }
+}
+
+void
+ev_view_copy_link_address (EvView *view,
+ EvLinkAction *action)
+{
+ clear_link_selected (view);
+
+ ev_view_clipboard_copy (view, ev_link_action_get_uri (action));
+
+ view->link_selected = g_object_ref (action);
+ ev_view_update_primary_selection (view);
+}
+
+/*** Cursor operations ***/
+static void
+ev_view_set_cursor (EvView *view, EvViewCursor new_cursor)
+{
+ GdkCursor *cursor = NULL;
+ GtkWidget *widget;
+ GdkWindow *bin_window;
+
+ if (view->cursor == new_cursor) {
+ return;
+ }
+
+ view->cursor = new_cursor;
+
+ bin_window = gtk_layout_get_bin_window (GTK_LAYOUT (view));
+ widget = gtk_widget_get_toplevel (GTK_WIDGET (view));
+ cursor = ev_view_cursor_new (gtk_widget_get_display (widget), new_cursor);
+ gdk_window_set_cursor (bin_window, cursor);
+ gdk_flush ();
+ if (cursor)
+ gdk_cursor_unref (cursor);
+}
+
+void
+ev_view_hide_cursor (EvView *view)
+{
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_HIDDEN);
+}
+
+void
+ev_view_show_cursor (EvView *view)
+{
+ ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL);
+}
+
+gboolean
+ev_view_next_page (EvView *view)
+{
+ int page, n_pages;
+
+ g_return_val_if_fail (EV_IS_VIEW (view), FALSE);
+
+ if (!view->document)
+ return FALSE;
+
+ page = ev_document_model_get_page (view->model);
+ n_pages = ev_document_get_n_pages (view->document);
+
+ if (view->dual_page)
+ page = page + 2;
+ else
+ page = page + 1;
+
+ if (page < n_pages) {
+ ev_document_model_set_page (view->model, page);
+ return TRUE;
+ } else if (view->dual_page && page == n_pages) {
+ ev_document_model_set_page (view->model, page - 1);
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+gboolean
+ev_view_previous_page (EvView *view)
+{
+ int page;
+
+ g_return_val_if_fail (EV_IS_VIEW (view), FALSE);
+
+ if (!view->document)
+ return FALSE;
+
+ page = ev_document_model_get_page (view->model);
+
+ if (view->dual_page)
+ page = page - 2;
+ else
+ page = page - 1;
+
+ if (page >= 0) {
+ ev_document_model_set_page (view->model, page);
+ return TRUE;
+ } else if (view->dual_page && page == -1) {
+ ev_document_model_set_page (view->model, 0);
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
diff --git a/libview/ev-view.h b/libview/ev-view.h
new file mode 100644
index 00000000..ccef4bb4
--- /dev/null
+++ b/libview/ev-view.h
@@ -0,0 +1,115 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#if !defined (__EV_EVINCE_VIEW_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-view.h> can be included directly."
+#endif
+
+#ifndef __EV_VIEW_H__
+#define __EV_VIEW_H__
+
+#include <gtk/gtk.h>
+
+#include <evince-document.h>
+
+#include "ev-document-model.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_VIEW (ev_view_get_type ())
+#define EV_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_VIEW, EvView))
+#define EV_IS_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_VIEW))
+
+typedef struct _EvView EvView;
+typedef struct _EvViewClass EvViewClass;
+
+typedef enum {
+ EV_VIEW_SELECTION_TEXT,
+ EV_VIEW_SELECTION_RECTANGLE,
+} EvViewSelectionMode;
+
+GType ev_view_get_type (void) G_GNUC_CONST;
+
+GtkWidget* ev_view_new (void);
+void ev_view_set_model (EvView *view,
+ EvDocumentModel *model);
+void ev_view_set_loading (EvView *view,
+ gboolean loading);
+void ev_view_reload (EvView *view);
+void ev_view_set_page_cache_size (EvView *view,
+ gsize cache_size);
+
+/* Clipboard */
+void ev_view_copy (EvView *view);
+void ev_view_copy_link_address (EvView *view,
+ EvLinkAction *action);
+void ev_view_select_all (EvView *view);
+gboolean ev_view_get_has_selection (EvView *view);
+
+/* Page size */
+gboolean ev_view_can_zoom_in (EvView *view);
+void ev_view_zoom_in (EvView *view);
+gboolean ev_view_can_zoom_out (EvView *view);
+void ev_view_zoom_out (EvView *view);
+
+/* Find */
+void ev_view_find_next (EvView *view);
+void ev_view_find_previous (EvView *view);
+void ev_view_find_search_changed (EvView *view);
+void ev_view_find_set_highlight_search (EvView *view,
+ gboolean value);
+void ev_view_find_changed (EvView *view,
+ GList **results,
+ gint page);
+void ev_view_find_cancel (EvView *view);
+
+/* Synctex */
+void ev_view_highlight_forward_search (EvView *view,
+ EvSourceLink *link);
+
+/* Cursor */
+void ev_view_hide_cursor (EvView *view);
+void ev_view_show_cursor (EvView *view);
+
+/* Navigation */
+void ev_view_scroll (EvView *view,
+ GtkScrollType scroll,
+ gboolean horizontal);
+void ev_view_handle_link (EvView *view,
+ EvLink *link);
+gboolean ev_view_next_page (EvView *view);
+gboolean ev_view_previous_page (EvView *view);
+
+void ev_view_autoscroll_start (EvView *view);
+void ev_view_autoscroll_stop (EvView *view);
+
+gboolean ev_view_get_page_extents (EvView *view,
+ gint page,
+ GdkRectangle *page_area,
+ GtkBorder *border);
+/* Annotations */
+void ev_view_focus_annotation (EvView *view,
+ EvMapping *annot_mapping);
+void ev_view_begin_add_annotation (EvView *view,
+ EvAnnotationType annot_type);
+void ev_view_cancel_add_annotation (EvView *view);
+
+G_END_DECLS
+
+#endif /* __EV_VIEW_H__ */
diff --git a/m4/gtk-doc.m4 b/m4/gtk-doc.m4
new file mode 100644
index 00000000..2cfa1e71
--- /dev/null
+++ b/m4/gtk-doc.m4
@@ -0,0 +1,61 @@
+dnl -*- mode: autoconf -*-
+
+# serial 1
+
+dnl Usage:
+dnl GTK_DOC_CHECK([minimum-gtk-doc-version])
+AC_DEFUN([GTK_DOC_CHECK],
+[
+ AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
+ AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
+
+ dnl check for tools we added during development
+ AC_PATH_PROG([GTKDOC_CHECK],[gtkdoc-check])
+ AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true])
+ AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf])
+
+ dnl for overriding the documentation installation directory
+ AC_ARG_WITH([html-dir],
+ AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
+ [with_html_dir='${datadir}/gtk-doc/html'])
+ HTML_DIR="$with_html_dir"
+ AC_SUBST([HTML_DIR])
+
+ dnl enable/disable documentation building
+ AC_ARG_ENABLE([gtk-doc],
+ AS_HELP_STRING([--enable-gtk-doc],
+ [use gtk-doc to build documentation [[default=no]]]),,
+ [enable_gtk_doc=no])
+
+ if test x$enable_gtk_doc = xyes; then
+ ifelse([$1],[],
+ [PKG_CHECK_EXISTS([gtk-doc],,
+ AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))],
+ [PKG_CHECK_EXISTS([gtk-doc >= $1],,
+ AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build $PACKAGE_NAME]))])
+ fi
+
+ AC_MSG_CHECKING([whether to build gtk-doc documentation])
+ AC_MSG_RESULT($enable_gtk_doc)
+
+ dnl enable/disable output formats
+ AC_ARG_ENABLE([gtk-doc-html],
+ AS_HELP_STRING([--enable-gtk-doc-html],
+ [build documentation in html format [[default=yes]]]),,
+ [enable_gtk_doc_html=yes])
+ AC_ARG_ENABLE([gtk-doc-pdf],
+ AS_HELP_STRING([--enable-gtk-doc-pdf],
+ [build documentation in pdf format [[default=no]]]),,
+ [enable_gtk_doc_pdf=no])
+
+ if test -z "$GTKDOC_MKPDF"; then
+ enable_gtk_doc_pdf=no
+ fi
+
+
+ AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes])
+ AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes])
+ AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes])
+ AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"])
+ AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"])
+])
diff --git a/m4/intltool.m4 b/m4/intltool.m4
new file mode 100644
index 00000000..122d773d
--- /dev/null
+++ b/m4/intltool.m4
@@ -0,0 +1,216 @@
+## intltool.m4 - Configure intltool for the target system. -*-Shell-script-*-
+## Copyright (C) 2001 Eazel, Inc.
+## Author: Maciej Stachowiak <[email protected]>
+## Kenneth Christiansen <[email protected]>
+##
+## 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+##
+## As a special exception to the GNU General Public License, if you
+## distribute this file as part of a program that contains a
+## configuration script generated by Autoconf, you may include it under
+## the same distribution terms that you use for the rest of that program.
+
+dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml])
+# serial 40 IT_PROG_INTLTOOL
+AC_DEFUN([IT_PROG_INTLTOOL], [
+AC_PREREQ([2.50])dnl
+AC_REQUIRE([AM_NLS])dnl
+
+case "$am__api_version" in
+ 1.[01234])
+ AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool])
+ ;;
+ *)
+ ;;
+esac
+
+if test -n "$1"; then
+ AC_MSG_CHECKING([for intltool >= $1])
+
+ INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+ INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3`
+ [INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
+ ]
+ AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found])
+ test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" ||
+ AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.])
+fi
+
+AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update])
+AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge])
+AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract])
+if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then
+ AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.])
+fi
+
+ INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< [$]@'
+ INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< [$]@'
+ INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+ INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@'
+
+_IT_SUBST(INTLTOOL_DESKTOP_RULE)
+_IT_SUBST(INTLTOOL_DIRECTORY_RULE)
+_IT_SUBST(INTLTOOL_KEYS_RULE)
+_IT_SUBST(INTLTOOL_PROP_RULE)
+_IT_SUBST(INTLTOOL_OAF_RULE)
+_IT_SUBST(INTLTOOL_PONG_RULE)
+_IT_SUBST(INTLTOOL_SERVER_RULE)
+_IT_SUBST(INTLTOOL_SHEET_RULE)
+_IT_SUBST(INTLTOOL_SOUNDLIST_RULE)
+_IT_SUBST(INTLTOOL_UI_RULE)
+_IT_SUBST(INTLTOOL_XAM_RULE)
+_IT_SUBST(INTLTOOL_KBD_RULE)
+_IT_SUBST(INTLTOOL_XML_RULE)
+_IT_SUBST(INTLTOOL_XML_NOMERGE_RULE)
+_IT_SUBST(INTLTOOL_CAVES_RULE)
+_IT_SUBST(INTLTOOL_SCHEMAS_RULE)
+_IT_SUBST(INTLTOOL_THEME_RULE)
+_IT_SUBST(INTLTOOL_SERVICE_RULE)
+_IT_SUBST(INTLTOOL_POLICY_RULE)
+
+# Check the gettext tools to make sure they are GNU
+AC_PATH_PROG(XGETTEXT, xgettext)
+AC_PATH_PROG(MSGMERGE, msgmerge)
+AC_PATH_PROG(MSGFMT, msgfmt)
+AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then
+ AC_MSG_ERROR([GNU gettext tools not found; required for intltool])
+fi
+xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`"
+mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`"
+mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`"
+if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then
+ AC_MSG_ERROR([GNU gettext tools not found; required for intltool])
+fi
+
+AC_PATH_PROG(INTLTOOL_PERL, perl)
+if test -z "$INTLTOOL_PERL"; then
+ AC_MSG_ERROR([perl not found])
+fi
+AC_MSG_CHECKING([for perl >= 5.8.1])
+$INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1
+if test $? -ne 0; then
+ AC_MSG_ERROR([perl 5.8.1 is required for intltool])
+else
+ IT_PERL_VERSION="`$INTLTOOL_PERL -e \"printf '%vd', $^V\"`"
+ AC_MSG_RESULT([$IT_PERL_VERSION])
+fi
+if test "x$2" != "xno-xml"; then
+ AC_MSG_CHECKING([for XML::Parser])
+ if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then
+ AC_MSG_RESULT([ok])
+ else
+ AC_MSG_ERROR([XML::Parser perl module is required for intltool])
+ fi
+fi
+
+# Substitute ALL_LINGUAS so we can use it in po/Makefile
+AC_SUBST(ALL_LINGUAS)
+
+# Set DATADIRNAME correctly if it is not set yet
+# (copied from glib-gettext.m4)
+if test -z "$DATADIRNAME"; then
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[]],
+ [[extern int _nl_msg_cat_cntr;
+ return _nl_msg_cat_cntr]])],
+ [DATADIRNAME=share],
+ [case $host in
+ *-*-solaris*)
+ dnl On Solaris, if bind_textdomain_codeset is in libc,
+ dnl GNU format message catalog is always supported,
+ dnl since both are added to the libc all together.
+ dnl Hence, we'd like to go with DATADIRNAME=share
+ dnl in this case.
+ AC_CHECK_FUNC(bind_textdomain_codeset,
+ [DATADIRNAME=share], [DATADIRNAME=lib])
+ ;;
+ *)
+ [DATADIRNAME=lib]
+ ;;
+ esac])
+fi
+AC_SUBST(DATADIRNAME)
+
+IT_PO_SUBDIR([po])
+
+])
+
+
+# IT_PO_SUBDIR(DIRNAME)
+# ---------------------
+# All po subdirs have to be declared with this macro; the subdir "po" is
+# declared by IT_PROG_INTLTOOL.
+#
+AC_DEFUN([IT_PO_SUBDIR],
+[AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS.
+dnl
+dnl The following CONFIG_COMMANDS should be exetuted at the very end
+dnl of config.status.
+AC_CONFIG_COMMANDS_PRE([
+ AC_CONFIG_COMMANDS([$1/stamp-it], [
+ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then
+ AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.])
+ fi
+ rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp"
+ >"$1/stamp-it.tmp"
+ [sed '/^#/d
+ s/^[[].*] *//
+ /^[ ]*$/d
+ '"s|^| $ac_top_srcdir/|" \
+ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES"
+ ]
+ [sed '/^POTFILES =/,/[^\\]$/ {
+ /^POTFILES =/!d
+ r $1/POTFILES
+ }
+ ' "$1/Makefile.in" >"$1/Makefile"]
+ rm -f "$1/Makefile.tmp"
+ mv "$1/stamp-it.tmp" "$1/stamp-it"
+ ])
+])dnl
+])
+
+# _IT_SUBST(VARIABLE)
+# -------------------
+# Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST
+#
+AC_DEFUN([_IT_SUBST],
+[
+AC_SUBST([$1])
+m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])])
+]
+)
+
+# deprecated macros
+AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL])
+# A hint is needed for aclocal from Automake <= 1.9.4:
+# AC_DEFUN([AC_PROG_INTLTOOL], ...)
+
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644
index 00000000..d8125842
--- /dev/null
+++ b/m4/libtool.m4
@@ -0,0 +1,7831 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+# Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+# 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+# Inc.
+# Written by Gordon Matzigkeit, 1996
+#
+# This file is part of GNU Libtool.
+#
+# GNU Libtool 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.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 57 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+ [m4_default([$3],
+ [m4_fatal([Libtool version $1 or higher is required],
+ 63)])],
+ [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+ *\ * | *\ *)
+ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+ case $cc_temp in
+ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+ \-*) ;;
+ *) break;;
+ esac
+done
+cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ _LT_PATH_MAGIC
+ fi
+ ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+ [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME. Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+ [m4_ifval([$1], [$1], [$2])])
+ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+ m4_ifval([$4],
+ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+ lt_dict_add_subkey([lt_decl_dict], [$2],
+ [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+ [0], [m4_fatal([$0: too few arguments: $#])],
+ [1], [m4_fatal([$0: too few arguments: $#: $1])],
+ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+ [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+ m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+ m4_if([$2], [],
+ m4_quote(lt_decl_varnames),
+ m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'. VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly. In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+# # Some comment about what VAR is for.
+# visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+ [description])))[]dnl
+m4_pushdef([_libtool_name],
+ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+ [0], [_libtool_name=[$]$1],
+ [1], [_libtool_name=$lt_[]$1],
+ [2], [_libtool_name=$lt_[]$1],
+ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'. Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+ dnl If the libtool generation code has been placed in $CONFIG_LT,
+ dnl instead of duplicating it all over again into config.status,
+ dnl then we will have config.status run $CONFIG_LT later, so it
+ dnl needs to know what name is stored there:
+ [AC_CONFIG_COMMANDS([libtool],
+ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+ dnl If the libtool generation code is destined for config.status,
+ dnl expand the accumulated commands and init code now:
+ [AC_CONFIG_COMMANDS([libtool],
+ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+ eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+ *[[\\\\\\\`\\"\\\$]]*)
+ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+ ;;
+ *)
+ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+ ;;
+ esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable. If COMMENT is supplied, it is inserted after the
+# `#!' sequence but before initialization text begins. After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script. The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test $lt_write_fail = 0 && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+ echo
+ AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+
+Report bugs to <[email protected]>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+ case $[1] in
+ --version | --v* | -V )
+ echo "$lt_cl_version"; exit 0 ;;
+ --help | --h* | -h )
+ echo "$lt_cl_help"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --quiet | --q* | --silent | --s* | -q )
+ lt_cl_silent=: ;;
+
+ -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+ *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+ esac
+ shift
+done
+
+if $lt_cl_silent; then
+ exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure. Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test "$silent" = yes &&
+ lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars. Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+ m4_if(_LT_TAG, [C], [
+ # See if we are running on zsh, and set the options which allow our
+ # commands through without removal of \ escapes.
+ if test -n "${ZSH_VERSION+set}" ; then
+ setopt NO_GLOB_SUBST
+ fi
+
+ cfgfile="${ofile}T"
+ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+ $RM "$cfgfile"
+
+ cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+ case $host_os in
+ aix3*)
+ cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+_LT_EOF
+ ;;
+ esac
+
+ _LT_PROG_LTMAIN
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "$cfgfile" \
+ || (rm -f "$cfgfile"; exit 1)
+
+ _LT_PROG_REPLACE_SHELLFNS
+
+ mv -f "$cfgfile" "$ofile" ||
+ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+ chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+ PACKAGE='$PACKAGE'
+ VERSION='$VERSION'
+ TIMESTAMP='$TIMESTAMP'
+ RM='$RM'
+ ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+# autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+ [C], [_LT_LANG(C)],
+ [C++], [_LT_LANG(CXX)],
+ [Java], [_LT_LANG(GCJ)],
+ [Fortran 77], [_LT_LANG(F77)],
+ [Fortran], [_LT_LANG(FC)],
+ [Windows Resource], [_LT_LANG(RC)],
+ [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+ [_LT_LANG($1)],
+ [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+ [LT_SUPPORTED_TAG([$1])dnl
+ m4_append([_LT_TAGS], [$1 ])dnl
+ m4_define([_LT_LANG_]$1[_enabled], [])dnl
+ _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [LT_LANG(CXX)],
+ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+ [LT_LANG(F77)],
+ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+ [LT_LANG(FC)],
+ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+ [LT_LANG(GCJ)],
+ [m4_ifdef([AC_PROG_GCJ],
+ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([A][M_PROG_GCJ],
+ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+ m4_ifdef([LT_PROG_GCJ],
+ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+ [LT_LANG(RC)],
+ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+ case $host_os in
+ rhapsody* | darwin*)
+ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+ AC_CHECK_TOOL([LIPO], [lipo], [:])
+ AC_CHECK_TOOL([OTOOL], [otool], [:])
+ AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+ _LT_DECL([], [DSYMUTIL], [1],
+ [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+ _LT_DECL([], [NMEDIT], [1],
+ [Tool to change global to local symbols on Mac OS X])
+ _LT_DECL([], [LIPO], [1],
+ [Tool to manipulate fat objects and archives on Mac OS X])
+ _LT_DECL([], [OTOOL], [1],
+ [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+ _LT_DECL([], [OTOOL64], [1],
+ [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ rm -rf libconftest.dylib*
+ echo "int foo(void){return 1;}" > conftest.c
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+ _lt_result=$?
+ if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+ lt_cv_apple_cc_single_mod=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -rf libconftest.dylib*
+ rm -f conftest.*
+ fi])
+ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+ [lt_cv_ld_exported_symbols_list],
+ [lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [lt_cv_ld_exported_symbols_list=yes],
+ [lt_cv_ld_exported_symbols_list=no])
+ LDFLAGS="$save_LDFLAGS"
+ ])
+ AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+ [lt_cv_ld_force_load=no
+ cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+ echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+ $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+ echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+ $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+ cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+ echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+ $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+ _lt_result=$?
+ if test -f conftest && test ! -s conftest.err && test $_lt_result = 0 && $GREP forced_load conftest 2>&1 >/dev/null; then
+ lt_cv_ld_force_load=yes
+ else
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ fi
+ rm -f conftest.err libconftest.a conftest conftest.c
+ rm -rf conftest.dSYM
+ ])
+ case $host_os in
+ rhapsody* | darwin1.[[012]])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*) # darwin 5.x on
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[[012]]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+ fi
+ if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+ _lt_dsymutil='~$DSYMUTIL $lib || :'
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+ m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_automatic, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ if test "$lt_cv_ld_force_load" = "yes"; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+ case $cc_basename in
+ ifort*) _lt_dar_can_shared=yes ;;
+ *) _lt_dar_can_shared=$GCC ;;
+ esac
+ if test "$_lt_dar_can_shared" = "yes"; then
+ output_verbose_link_cmd=func_echo_all
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+ _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+ _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+ m4_if([$1], [CXX],
+[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+ fi
+],[])
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test "${lt_cv_aix_libpath+set}" = set; then
+ aix_libpath=$lt_cv_aix_libpath
+else
+ AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+ lt_aix_libpath_sed='[
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\([^ ]*\) *$/\1/
+ p
+ }
+ }]'
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ # Check for a 64-bit object if we didn't find anything.
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+ fi],[])
+ if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+ _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+ fi
+ ])
+ aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script which will find a shell with a builtin
+# printf (which we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+ ECHO='printf %s\n'
+else
+ # Use this function as a fallback that always works.
+ func_fallback_echo ()
+ {
+ eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+ }
+ ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+ $ECHO "$*"
+}
+
+case "$ECHO" in
+ printf*) AC_MSG_RESULT([printf]) ;;
+ print*) AC_MSG_RESULT([print -r]) ;;
+ *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+ ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+ PATH=/empty FPATH=/empty; export PATH FPATH
+ test "X`printf %s $ECHO`" = "X$ECHO" \
+ || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[ --with-sysroot[=DIR] Search for dependent libraries within DIR
+ (or the compiler's sysroot if not specified).],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted. We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case ${with_sysroot} in #(
+ yes)
+ if test "$GCC" = yes; then
+ lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+ fi
+ ;; #(
+ /*)
+ lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ ;; #(
+ no|'')
+ ;; #(
+ *)
+ AC_MSG_RESULT([${with_sysroot}])
+ AC_MSG_ERROR([The sysroot must be an absolute path.])
+ ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and in which our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+ [AS_HELP_STRING([--disable-libtool-lock],
+ [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *ELF-32*)
+ HPUX_IA64_MODE="32"
+ ;;
+ *ELF-64*)
+ HPUX_IA64_MODE="64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -melf32bsmip"
+ ;;
+ *N32*)
+ LD="${LD-ld} -melf32bmipn32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -melf64bmip"
+ ;;
+ esac
+ else
+ case `/usr/bin/file conftest.$ac_objext` in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ fi
+ rm -rf conftest*
+ ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *32-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_i386"
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+ ;;
+ s390x-*linux*)
+ LD="${LD-ld} -m elf_s390"
+ ;;
+ sparc64-*linux*)
+ LD="${LD-ld} -m elf32_sparc"
+ ;;
+ esac
+ ;;
+ *64-bit*)
+ case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
+ x86_64-*linux*)
+ LD="${LD-ld} -m elf_x86_64"
+ ;;
+ ppc*-*linux*|powerpc*-*linux*)
+ LD="${LD-ld} -m elf64ppc"
+ ;;
+ s390*-*linux*|s390*-*tpf*)
+ LD="${LD-ld} -m elf64_s390"
+ ;;
+ sparc*-*linux*)
+ LD="${LD-ld} -m elf64_sparc"
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+ [AC_LANG_PUSH(C)
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_POP])
+ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+ CFLAGS="$SAVE_CFLAGS"
+ fi
+ ;;
+sparc*-*solaris*)
+ # Find out which ABI we are using.
+ echo 'int i;' > conftest.$ac_ext
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.o` in
+ *64-bit*)
+ case $lt_cv_prog_gnu_ld in
+ yes*) LD="${LD-ld} -m elf64_sparc" ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+ [lt_cv_ar_at_file=no
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+ [echo conftest.$ac_objext > conftest.lst
+ lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([lt_ar_try])
+ if test "$ac_status" -eq 0; then
+ # Ensure the archiver fails upon bogus file names.
+ rm -f conftest.$ac_objext libconftest.a
+ AC_TRY_EVAL([lt_ar_try])
+ if test "$ac_status" -ne 0; then
+ lt_cv_ar_at_file=@
+ fi
+ fi
+ rm -f conftest.* libconftest.a
+ ])
+ ])
+
+if test "x$lt_cv_ar_at_file" = xno; then
+ archiver_list_spec=
+else
+ archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+ [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+ [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+ ;;
+ *)
+ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+case $host_os in
+ darwin*)
+ lock_old_archive_extraction=yes ;;
+ *)
+ lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+ [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+ [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+ lt_compiler_flag="$3"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ # The option is referenced via a variable to avoid confusing sed.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>conftest.err)
+ ac_status=$?
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s "$ac_outfile"; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings other than the usual output.
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ fi
+ $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$5], , :, [$5])
+else
+ m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+# [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+ [$2=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $3"
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
+ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+ # The linker can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ # Append any errors to the config.log.
+ cat conftest.err 1>&AS_MESSAGE_LOG_FD
+ $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+ if diff conftest.exp conftest.er2 >/dev/null; then
+ $2=yes
+ fi
+ else
+ $2=yes
+ fi
+ fi
+ $RM -r conftest*
+ LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+ m4_if([$4], , :, [$4])
+else
+ m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+ i=0
+ teststring="ABCD"
+
+ case $build_os in
+ msdosdjgpp*)
+ # On DJGPP, this test can blow up pretty badly due to problems in libc
+ # (any single argument exceeding 2000 bytes causes a buffer overrun
+ # during glob expansion). Even if it were fixed, the result of this
+ # check would be larger than it should be.
+ lt_cv_sys_max_cmd_len=12288; # 12K is about right
+ ;;
+
+ gnu*)
+ # Under GNU Hurd, this test is not required because there is
+ # no limit to the length of command line arguments.
+ # Libtool will interpret -1 as no limit whatsoever
+ lt_cv_sys_max_cmd_len=-1;
+ ;;
+
+ cygwin* | mingw* | cegcc*)
+ # On Win9x/ME, this test blows up -- it succeeds, but takes
+ # about 5 minutes as the teststring grows exponentially.
+ # Worse, since 9x/ME are not pre-emptively multitasking,
+ # you end up with a "frozen" computer, even though with patience
+ # the test eventually succeeds (with a max line length of 256k).
+ # Instead, let's just punt: use the minimum linelength reported by
+ # all of the supported platforms: 8192 (on NT/2K/XP).
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ mint*)
+ # On MiNT this can take a long time and run out of memory.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ amigaos*)
+ # On AmigaOS with pdksh, this test takes hours, literally.
+ # So we just punt and use a minimum line length of 8192.
+ lt_cv_sys_max_cmd_len=8192;
+ ;;
+
+ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+ # This has been around since 386BSD, at least. Likely further.
+ if test -x /sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+ elif test -x /usr/sbin/sysctl; then
+ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+ else
+ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
+ fi
+ # And add a safety zone
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ ;;
+
+ interix*)
+ # We know the value 262144 and hardcode it with a safety zone (like BSD)
+ lt_cv_sys_max_cmd_len=196608
+ ;;
+
+ osf*)
+ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+ # nice to cause kernel panics so lets avoid the loop below.
+ # First set a reasonable default.
+ lt_cv_sys_max_cmd_len=16384
+ #
+ if test -x /sbin/sysconfig; then
+ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+ *1*) lt_cv_sys_max_cmd_len=-1 ;;
+ esac
+ fi
+ ;;
+ sco3.2v5*)
+ lt_cv_sys_max_cmd_len=102400
+ ;;
+ sysv5* | sco5v6* | sysv4.2uw2*)
+ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+ if test -n "$kargmax"; then
+ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ else
+ lt_cv_sys_max_cmd_len=32768
+ fi
+ ;;
+ *)
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ # Make teststring a little bigger before we do anything with it.
+ # a 1K string should be a reasonable start.
+ for i in 1 2 3 4 5 6 7 8 ; do
+ teststring=$teststring$teststring
+ done
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ # If test is not a shell built-in, we'll probably end up computing a
+ # maximum length that is only half of the actual maximum length, but
+ # we can't tell.
+ while { test "X"`func_fallback_echo "$teststring$teststring" 2>/dev/null` \
+ = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ # Only check the string length outside the loop.
+ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on
+ # massive amounts of additional arguments before passing them to the
+ # linker. It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
+ ;;
+ esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+ AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+ [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+/* When -fvisbility=hidden is used, assume the code has been annotated
+ correspondingly for the symbols needed. */
+#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else
+ {
+ if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ else puts (dlerror ());
+ }
+ /* dlclose (self); */
+ }
+ else
+ puts (dlerror ());
+
+ return status;
+}]
+_LT_EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_dlunknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ mingw* | pw32* | cegcc*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ cygwin*)
+ lt_cv_dlopen="dlopen"
+ lt_cv_dlopen_libs=
+ ;;
+
+ darwin*)
+ # if libdl is installed we need to link against it
+ AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+ lt_cv_dlopen="dyld"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ])
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+ [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+ [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+ [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+ $RM -r conftest 2>/dev/null
+ mkdir conftest
+ cd conftest
+ mkdir out
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ lt_compiler_flag="-o out/conftest2.$ac_objext"
+ # Insert the option either (1) after the last *FLAGS variable, or
+ # (2) before a word containing "conftest.", or (3) at the end.
+ # Note that $ac_compile itself does not contain backslashes and begins
+ # with a dollar sign (not a hyphen), so the echo should work correctly.
+ lt_compile=`echo "$ac_compile" | $SED \
+ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+ -e 's:$: $lt_compiler_flag:'`
+ (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$lt_compile" 2>out/conftest.err)
+ ac_status=$?
+ cat out/conftest.err >&AS_MESSAGE_LOG_FD
+ echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+ if (exit $ac_status) && test -s out/conftest2.$ac_objext
+ then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+ fi
+ fi
+ chmod u+w . 2>&AS_MESSAGE_LOG_FD
+ $RM conftest*
+ # SGI C++ compiler will create directory out/ii_files/ for
+ # template instantiation
+ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+ $RM out/* && rmdir out
+ cd ..
+ $RM -r conftest
+ $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+ [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $RM conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ lt_cv_objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+ [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+ [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+ test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+ test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+ # We can hardcode non-existent directories.
+ if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+ test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+ # Linking always hardcodes the temporary library directory.
+ _LT_TAGVAR(hardcode_action, $1)=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ _LT_TAGVAR(hardcode_action, $1)=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+ test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+ [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+ case $host_os in
+ darwin*)
+ if test -n "$STRIP" ; then
+ striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ ;;
+ *)
+ AC_MSG_RESULT([no])
+ ;;
+ esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+ [], [
+if test "$GCC" = yes; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ case $host_os in
+ mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
+ *) lt_sed_strip_eq="s,=/,/,g" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
+ case $lt_search_path_spec in
+ *\;*)
+ # if the path contains ";" then we assume it to be the separator
+ # otherwise default to the standard path separator (i.e. ":") - it is
+ # assumed that no part of a normal pathname contains ";" but that should
+ # okay in the real world where ";" in dirpaths is itself problematic.
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+ ;;
+ *)
+ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ esac
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ # AWK program above erroneously prepends '/' to C:/dos/paths
+ # for these hosts.
+ case $host_os in
+ mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+ esac
+ sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX 3 has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+
+aix[[4-9]]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ hardcode_into_libs=yes
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+ # soname into executable. Probably we can add versioning support to
+ # collect2, so additional links can be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ case $host_cpu in
+ powerpc)
+ # Since July 2007 AmigaOS4 officially supports .so libraries.
+ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ ;;
+ m68k)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+ ;;
+ esac
+ ;;
+
+beos*)
+ library_names_spec='${libname}${shared_ext}'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi[[45]]*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+ version_type=windows
+ shrext_cmds=".dll"
+ need_version=no
+ need_lib_prefix=no
+
+ case $GCC,$cc_basename in
+ yes,*)
+ # gcc
+ library_names_spec='$libname.dll.a'
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname~
+ chmod a+x \$dldir/$dlname~
+ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+ fi'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+
+ case $host_os in
+ cygwin*)
+ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+ ;;
+ mingw* | cegcc*)
+ # MinGW DLLs use traditional 'lib' prefix
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ pw32*)
+ # pw32 DLLs use 'pw' prefix rather than 'lib'
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ ;;
+
+ *,cl*)
+ # Native MSVC
+ libname_spec='$name'
+ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+ library_names_spec='${libname}.dll.lib'
+
+ case $build_os in
+ mingw*)
+ sys_lib_search_path_spec=
+ lt_save_ifs=$IFS
+ IFS=';'
+ for lt_path in $LIB
+ do
+ IFS=$lt_save_ifs
+ # Let DOS variable expansion print the short 8.3 style file name.
+ lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+ sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+ done
+ IFS=$lt_save_ifs
+ # Convert to MSYS style.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+ ;;
+ cygwin*)
+ # Convert to unix form, then to dos form, then back to unix form
+ # but this time dos style (no spaces!) so that the unix form looks
+ # like /cygdrive/c/PROGRA~1:/cygdr...
+ sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+ sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+ sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ ;;
+ *)
+ sys_lib_search_path_spec="$LIB"
+ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+ # It is most probably a Windows format PATH.
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ else
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ fi
+ # FIXME: find the short name or the path components, as spaces are
+ # common. (e.g. "Program Files" -> "PROGRA~1")
+ ;;
+ esac
+
+ # DLL is installed to $(libdir)/../bin by postinstall_cmds
+ postinstall_cmds='base_file=`basename \${file}`~
+ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog $dir/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $RM \$dlpath'
+ shlibpath_overrides_runpath=yes
+ dynamic_linker='Win32 link.exe'
+ ;;
+
+ *)
+ # Assume MSVC wrapper
+ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+ dynamic_linker='Win32 ld.exe'
+ ;;
+ esac
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+ soname_spec='${libname}${release}${major}$shared_ext'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd* | dragonfly*)
+ # DragonFly does not have aout. When/if they implement a new
+ # versioning mechanism, adjust this.
+ if test -x /usr/bin/objformat; then
+ objformat=`/usr/bin/objformat`
+ else
+ case $host_os in
+ freebsd[[123]]*) objformat=aout ;;
+ *) objformat=elf ;;
+ esac
+ fi
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ *) # from 4.6 on, and DragonFly
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+haiku*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ dynamic_linker="$host_os runtime_loader"
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ case $host_cpu in
+ ia64*)
+ shrext_cmds='.so'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.so"
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ if test "X$HPUX_IA64_MODE" = X32; then
+ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+ else
+ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+ fi
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ hppa*64*)
+ shrext_cmds='.sl'
+ hardcode_into_libs=yes
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+ ;;
+ *)
+ shrext_cmds='.sl'
+ dynamic_linker="$host_os dld.sl"
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ ;;
+ esac
+ # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+ postinstall_cmds='chmod 555 $lib'
+ # or fails outright, so override atomically:
+ install_override_mode=555
+ ;;
+
+interix[[3-9]]*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *)
+ if test "$lt_cv_prog_gnu_ld" = yes; then
+ version_type=linux
+ else
+ version_type=irix
+ fi ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+ libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+ libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+ libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ hardcode_into_libs=yes
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+
+ # Some binutils ld are patched to set DT_RUNPATH
+ AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+ [lt_cv_shlibpath_overrides_runpath=no
+ save_LDFLAGS=$LDFLAGS
+ save_libdir=$libdir
+ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+ [lt_cv_shlibpath_overrides_runpath=yes])])
+ LDFLAGS=$save_LDFLAGS
+ libdir=$save_libdir
+ ])
+ shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # Append ld.so.conf contents to the search path
+ if test -f /etc/ld.so.conf; then
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+ fi
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+*nto* | *qnx*)
+ version_type=qnx
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ dynamic_linker='ldqnx.so'
+ ;;
+
+openbsd*)
+ version_type=sunos
+ sys_lib_dlsearch_path_spec="/usr/lib"
+ need_lib_prefix=no
+ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+ case $host_os in
+ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+ *) need_version=no ;;
+ esac
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case $host_os in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ ;;
+
+os2*)
+ libname_spec='$name'
+ shrext_cmds=".dll"
+ need_lib_prefix=no
+ library_names_spec='$libname${shared_ext} $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}${shared_ext}$major'
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+rdos*)
+ dynamic_linker=no
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.3*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ need_lib_prefix=no
+ runpath_var=LD_RUN_PATH
+ ;;
+ siemens)
+ need_lib_prefix=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+ soname_spec='$libname${shared_ext}.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ version_type=freebsd-elf
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ if test "$with_gnu_ld" = yes; then
+ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+ else
+ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+ case $host_os in
+ sco3.2v5*)
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+ ;;
+ esac
+ fi
+ sys_lib_dlsearch_path_spec='/usr/lib'
+ ;;
+
+tpf*)
+ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+ soname_spec='${libname}${release}${shared_ext}$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+ [Variables whose values should be saved in libtool wrapper scripts and
+ restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+ [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+ [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+ [[List of archive names. First name is the real one, the rest are links.
+ The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+ [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+ [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+ [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+ [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+ [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+ [[As "finish_cmds", except a single script fragment to be evaled but
+ not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+ [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+ [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+ [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] | ?:[\\/]*])
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+*)
+ lt_save_MAGIC_CMD="$MAGIC_CMD"
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="m4_if([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$1; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ $EGREP "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+
+_LT_EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$lt_save_ifs"
+ MAGIC_CMD="$lt_save_MAGIC_CMD"
+ ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+ [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+ [AS_HELP_STRING([--with-gnu-ld],
+ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+ [test "$withval" = no || with_gnu_ld=yes],
+ [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+ # Check if gcc -print-prog-name=ld gives a path.
+ AC_MSG_CHECKING([for ld used by $CC])
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
+ # Accept absolute paths.
+ [[\\/]]* | ?:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
+ # Canonicalize the pathname of ld
+ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+ lt_cv_path_LD="$ac_dir/$ac_prog"
+ # Check to see if the program is GNU ld. I'd rather use --version,
+ # but apparently some variants of GNU ld only accept -v.
+ # Break only if it was the GNU/non-GNU ld that we prefer.
+ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+ *GNU* | *'with BFD'*)
+ test "$with_gnu_ld" != no && break
+ ;;
+ *)
+ test "$with_gnu_ld" != yes && break
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+else
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+ lt_cv_prog_gnu_ld=yes
+ ;;
+*)
+ lt_cv_prog_gnu_ld=no
+ ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+ lt_cv_ld_reload_flag,
+ [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ if test "$GCC" != yes; then
+ reload_cmds=false
+ fi
+ ;;
+ darwin*)
+ if test "$GCC" = yes; then
+ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+ else
+ reload_cmds='$LD$reload_flag -o $output$reload_objs'
+ fi
+ ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi[[45]]*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin*)
+ # func_win32_libid is a shell function defined in ltmain.sh
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ ;;
+
+mingw* | pw32*)
+ # Base MSYS/MinGW do not provide the 'file' command needed by
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
+ if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ # Keep this pattern in sync with the one in func_win32_libid.
+ lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
+ ;;
+
+cegcc*)
+ # use the weaker test based on 'objdump'. See mingw*.
+ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+freebsd* | dragonfly*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+haiku*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20* | hpux11*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ case $host_cpu in
+ ia64*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+ ;;
+ hppa*64*)
+ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+ ;;
+ *)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+ esac
+ ;;
+
+interix[[3-9]]*)
+ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+*nto* | *qnx*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+openbsd*)
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.3*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ siemens)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ pc)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ esac
+ ;;
+
+tpf*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+ case $host_os in
+ mingw* | pw32*)
+ if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+ want_nocaseglob=yes
+ else
+ file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+ fi
+ ;;
+ esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+ [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+ [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+ [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+ [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ lt_cv_path_NM="$NM"
+else
+ lt_nm_to_check="${ac_tool_prefix}nm"
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ lt_nm_to_check="$lt_nm_to_check nm"
+ fi
+ for lt_tmp_nm in $lt_nm_to_check; do
+ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+ IFS="$lt_save_ifs"
+ test -z "$ac_dir" && ac_dir=.
+ tmp_nm="$ac_dir/$lt_tmp_nm"
+ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+ # Check to see if the nm accepts a BSD-compat flag.
+ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+ # nm: unknown option "B" ignored
+ # Tru64's nm complains that /dev/null is an invalid object file
+ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+ */dev/null* | *'Invalid file or object type'*)
+ lt_cv_path_NM="$tmp_nm -B"
+ break
+ ;;
+ *)
+ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ */dev/null*)
+ lt_cv_path_NM="$tmp_nm -p"
+ break
+ ;;
+ *)
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+ continue # so that we can try to find one that supports BSD flags
+ ;;
+ esac
+ ;;
+ esac
+ fi
+ done
+ IFS="$lt_save_ifs"
+ done
+ : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+ NM="$lt_cv_path_NM"
+else
+ # Didn't find any BSD compatible name lister, look for dumpbin.
+ if test -n "$DUMPBIN"; then :
+ # Let the user override the test.
+ else
+ AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+ case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+ *COFF*)
+ DUMPBIN="$DUMPBIN -symbols"
+ ;;
+ *)
+ DUMPBIN=:
+ ;;
+ esac
+ fi
+ AC_SUBST([DUMPBIN])
+ if test "$DUMPBIN" != ":"; then
+ NM="$DUMPBIN"
+ fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+ [lt_cv_nm_interface="BSD nm"
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$ac_compile" 2>conftest.err)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+ cat conftest.out >&AS_MESSAGE_LOG_FD
+ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+ lt_cv_nm_interface="MS dumpbin"
+ fi
+ rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+# -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+ # two different shell functions defined in ltmain.sh
+ # decide which to use based on capabilities of $DLLTOOL
+ case `$DLLTOOL --help 2>&1` in
+ *--identify-strict*)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+ ;;
+ *)
+ lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+ ;;
+ esac
+ ;;
+*)
+ # fallback: assume linklib IS sharedlib
+ lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+ ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+ [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+ [lt_cv_path_mainfest_tool=no
+ echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+ $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+ cat conftest.err >&AS_MESSAGE_LOG_FD
+ if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+ lt_cv_path_mainfest_tool=yes
+ fi
+ rm -f conftest*])
+if test "x$lt_cv_path_mainfest_tool" != xyes; then
+ MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+ # These system don't have libm, or don't need it
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, cos, LIBM="-lm")
+ ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+ case $cc_basename in
+ nvcc*)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+ esac
+
+ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+ lt_cv_prog_compiler_rtti_exceptions,
+ [-fno-rtti -fno-exceptions], [],
+ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+ [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32* | cegcc*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*)
+ if test "$host_cpu" = ia64; then
+ symcode='[[ABCDEGRST]]'
+ fi
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+osf*)
+ symcode='[[BCDEGQRST]]'
+ ;;
+solaris*)
+ symcode='[[BDRT]]'
+ ;;
+sco3.2v5*)
+ symcode='[[DT]]'
+ ;;
+sysv4.2uw2*)
+ symcode='[[DT]]'
+ ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+ symcode='[[ABDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+ symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+ symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+ # Write the raw and C identifiers.
+ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ # Fake it for dumpbin and say T for any non-static function
+ # and D for any global variable.
+ # Also find C++ and __fastcall symbols from MSVC++,
+ # which start with @ or ?.
+ lt_cv_sys_global_symbol_pipe="$AWK ['"\
+" {last_section=section; section=\$ 3};"\
+" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+" \$ 0!~/External *\|/{next};"\
+" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+" {if(hide[section]) next};"\
+" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+" s[1]~/^[@?]/{print s[1], s[1]; next};"\
+" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+" ' prfx=^$ac_symprfx]"
+ else
+ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ fi
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+
+ rm -f conftest*
+ cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */
+#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
+/* DATA imports from DLLs on WIN32 con't be const, because runtime
+ relocations are performed -- see ld's documentation on pseudo-relocs. */
+# define LT@&t@_DLSYM_CONST
+#elif defined(__osf__)
+/* This system does not cope well with relocations in const data. */
+# define LT@&t@_DLSYM_CONST
+#else
+# define LT@&t@_DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+ cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols. */
+LT@&t@_DLSYM_CONST struct {
+ const char *name;
+ void *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+ { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+ cat <<\_LT_EOF >> conftest.$ac_ext
+ {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ lt_globsym_save_LIBS=$LIBS
+ lt_globsym_save_CFLAGS=$CFLAGS
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+ pipe_works=yes
+ fi
+ LIBS=$lt_globsym_save_LIBS
+ CFLAGS=$lt_globsym_save_CFLAGS
+ else
+ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+ fi
+ else
+ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+ cat conftest.$ac_ext >&5
+ fi
+ rm -rf conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+ nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+ nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+ [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+ [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+ [lt_cv_sys_global_symbol_to_c_name_address], [1],
+ [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+ [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([], [nm_file_list_spec], [1],
+ [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+ # C++ specific cases for pic, static, wl, etc.
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+ *djgpp*)
+ # DJGPP does not support shared libraries at all
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ else
+ case $host_os in
+ aix[[4-9]]*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+ chorus*)
+ case $cc_basename in
+ cxch68*)
+ # Green Hills C++ Compiler
+ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+ ;;
+ esac
+ ;;
+ mingw* | cygwin* | os2* | pw32* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ freebsd* | dragonfly*)
+ # FreeBSD uses GNU C++
+ ;;
+ hpux9* | hpux10* | hpux11*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ fi
+ ;;
+ aCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ interix*)
+ # This is c89, which is MS Visual C++ (no shared libs)
+ # Anyone wants to do a port?
+ ;;
+ irix5* | irix6* | nonstopux*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ # CC pic flag -KPIC is the default.
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # KAI C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ ecpc* )
+ # old Intel C++ for x86_64 which still supported -KPIC.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ icpc* )
+ # Intel C++, used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ cxx*)
+ # Compaq C++
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+ # IBM XL 8.0, 9.0 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ lynxos*)
+ ;;
+ m88k*)
+ ;;
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ netbsd*)
+ ;;
+ *qnx* | *nto*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ cxx*)
+ # Digital/Compaq C++
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # Make sure the PIC flag is empty. It appears that all Alpha
+ # Linux and Compaq Tru64 Unix objects are PIC.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ psos*)
+ ;;
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ lcc*)
+ # Lucid
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ esac
+ ;;
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ vxworks*)
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+],
+[
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+ case $host_os in
+ aix*)
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ m68k)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ esac
+ ;;
+
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ # Although the cygwin gcc ignores -fPIC, still need this for old-style
+ # (--disable-auto-import) libraries
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+ ;;
+
+ haiku*)
+ # PIC is the default for Haiku.
+ # The "-static" flag exists, but is broken.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)=
+ ;;
+
+ hpux*)
+ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
+ # sets the default TLS model and affects inlining.
+ case $host_cpu in
+ hppa*64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+ # Instead, we relocate shared libraries at runtime.
+ ;;
+
+ msdosdjgpp*)
+ # Just because we use GCC doesn't mean we suddenly get shared libraries
+ # on systems that don't support them.
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ enable_shared=no
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+ fi
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ ;;
+ esac
+
+ case $cc_basename in
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xcompiler -fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for flag to pass linker flags through the system compiler.
+ case $host_os in
+ aix*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ else
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ mingw* | cygwin* | pw32* | os2* | cegcc*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ m4_if([$1], [GCJ], [],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+ # not for PA HP-UX.
+ case $host_cpu in
+ hppa*64*|ia64*)
+ # +Z the default
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+ ;;
+ esac
+ # Is there a better lt_prog_compiler_static that works with the bundled CC?
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # PIC (with -KPIC) is the default.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ # old Intel for x86_64 which still supported -KPIC.
+ ecc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # icc used to be incompatible with GCC.
+ # ICC 10 doesn't accept -KPIC any more.
+ icc* | ifort*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+ # Lahey Fortran 8.1.
+ lf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+ ;;
+ nagfor*)
+ # NAG Fortran compiler
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+ ccc*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All Alpha code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+ xl* | bgxl* | bgf* | mpixl*)
+ # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ F* | *Sun*Fortran*)
+ # Sun Fortran 8.3 passes all unrecognized flags to the linker
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+ ;;
+ *Sun\ C*)
+ # Sun C 5.9
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *nto* | *qnx*)
+ # QNX uses GNU C++, but need to define -shared option too, otherwise
+ # it will coredump.
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ # All OSF/1 code is PIC.
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ rdos*)
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ case $cc_basename in
+ f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ fi
+ ;;
+
+ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ unicos*)
+ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+ ;;
+
+ *)
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+ ;;
+ esac
+ fi
+])
+case $host_os in
+ # For platforms which do not support PIC, -DPIC is meaningless:
+ *djgpp*)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ ;;
+ *)
+ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+ ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+ [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+ "" | " "*) ;;
+ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+ esac],
+ [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+ [Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+ [How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+ _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+ $lt_tmp_static_flag,
+ [],
+ [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+ [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ case $host_os in
+ aix[[4-9]]*)
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global defined
+ # symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ ;;
+ pw32*)
+ _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+ ;;
+ cygwin* | mingw* | cegcc*)
+ case $cc_basename in
+ cl*) ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+ ;;
+ esac
+ ;;
+ *)
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ ;;
+ esac
+], [
+ runpath_var=
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(archive_cmds, $1)=
+ _LT_TAGVAR(archive_expsym_cmds, $1)=
+ _LT_TAGVAR(compiler_needs_object, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(hardcode_automatic, $1)=no
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ _LT_TAGVAR(hardcode_minus_L, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+ _LT_TAGVAR(inherit_rpath, $1)=no
+ _LT_TAGVAR(link_all_deplibs, $1)=unknown
+ _LT_TAGVAR(module_cmds, $1)=
+ _LT_TAGVAR(module_expsym_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+ _LT_TAGVAR(thread_safe_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ # include_expsyms should be a list of space-separated symbols to be *always*
+ # included in the symbol list
+ _LT_TAGVAR(include_expsyms, $1)=
+ # exclude_expsyms can be an extended regexp of symbols to exclude
+ # it will be wrapped by ` (' and `)$', so one must not match beginning or
+ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+ # as well as any symbol that contains `d'.
+ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+ # platforms (ab)use it in PIC code, but their linkers get confused if
+ # the symbol is explicitly referenced. Since portable code cannot
+ # rely on this symbol name, it's probably fine to never include it in
+ # preloaded symbol tables.
+ # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+ extract_expsyms_cmds=
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | cegcc*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+ interix*)
+ # we just hope/assume this is gcc and not c89 (= MSVC++)
+ with_gnu_ld=yes
+ ;;
+ openbsd*)
+ with_gnu_ld=no
+ ;;
+ esac
+
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+
+ # On some targets, GNU ld is compatible enough with the native linker
+ # that we're better off using the native interface for both.
+ lt_use_gnu_ld_interface=no
+ if test "$with_gnu_ld" = yes; then
+ case $host_os in
+ aix*)
+ # The AIX port of GNU ld has always aspired to compatibility
+ # with the native linker. However, as the warning in the GNU ld
+ # block says, versions before 2.19.5* couldn't really create working
+ # shared libraries, regardless of the interface used.
+ case `$LD -v 2>&1` in
+ *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+ *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+ *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ ;;
+ *)
+ lt_use_gnu_ld_interface=yes
+ ;;
+ esac
+ fi
+
+ if test "$lt_use_gnu_ld_interface" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # Set some defaults for GNU ld with shared library support. These
+ # are reset later if shared libraries are not supported. Putting them
+ # here allows them to be overridden if necessary.
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ supports_anon_versioning=no
+ case `$LD -v 2>&1` in
+ *GNU\ gold*) supports_anon_versioning=yes ;;
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+ *\ 2.11.*) ;; # other 2.11 versions
+ *) supports_anon_versioning=yes ;;
+ esac
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix[[3-9]]*)
+ # On AIX/PPC, the GNU linker is very broken
+ if test "$host_cpu" != ia64; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <[email protected]> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+ _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+
+ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+ tmp_diet=no
+ if test "$host_os" = linux-dietlibc; then
+ case $cc_basename in
+ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
+ esac
+ fi
+ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+ && test "$tmp_diet" = no
+ then
+ tmp_addflag=' $pic_flag'
+ tmp_sharedflag='-shared'
+ case $cc_basename,$host_cpu in
+ pgcc*) # Portland Group C compiler
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+ pgf77* | pgf90* | pgf95* | pgfortran*)
+ # Portland Group f77 and f90 compilers
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag -Mnomain' ;;
+ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
+ tmp_addflag=' -i_dynamic' ;;
+ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
+ tmp_addflag=' -i_dynamic -nofor_main' ;;
+ ifc* | ifort*) # Intel Fortran compiler
+ tmp_addflag=' -nofor_main' ;;
+ lf95*) # Lahey Fortran 8.1
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ tmp_sharedflag='--shared' ;;
+ xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+ tmp_sharedflag='-qmkshrobj'
+ tmp_addflag= ;;
+ nvcc*) # Cuda Compiler Driver 2.2
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ ;;
+ esac
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*) # Sun C 5.9
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+ tmp_sharedflag='-G' ;;
+ *Sun\ F*) # Sun Fortran 8.3
+ tmp_sharedflag='-G' ;;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+
+ case $cc_basename in
+ xlf* | bgf* | bgxlf* | mpixlf*)
+ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ esac
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris*)
+ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+ case `$LD -v 2>&1` in
+ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+ ;;
+ *)
+ # For security reasons, it is highly recommended that you always
+ # use absolute paths for naming shared libraries, and exclude the
+ # DT_RUNPATH tag from executables and libraries. But doing so
+ # requires that you compile everything twice, which is a pain.
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ sunos4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+
+ if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+ runpath_var=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ # If we're using GNU nm, then we don't want the "-C" option.
+ # -C means demangle to AIX nm, but means don't demangle with GNU nm
+ # Also, AIX nm treats weak defined symbols like other global
+ # defined symbols, whereas GNU nm marks them as "W".
+ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ else
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+ fi
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ ;;
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ case $host_cpu in
+ powerpc)
+ # see comment about AmigaOS4 .so support
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)=''
+ ;;
+ m68k)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ ;;
+
+ bsdi[[45]]*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ case $cc_basename in
+ cl*)
+ # Native MSVC
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+ else
+ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile="$lt_outputfile.exe"
+ lt_tool_outputfile="$lt_tool_outputfile.exe"
+ ;;
+ esac~
+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # Assume MSVC wrapper
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ # FIXME: Should let the user specify the lib program.
+ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ ;;
+ esac
+ ;;
+
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ freebsd1*)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd* | dragonfly*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ hpux9*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+
+ hpux10*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ fi
+ ;;
+
+ hpux11*)
+ if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ else
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ m4_if($1, [], [
+ # Older versions of the 11.00 compiler do not understand -b yet
+ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+ _LT_LINKER_OPTION([if $CC understands -b],
+ _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+ [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+ [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+ ;;
+ esac
+ fi
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+ # hardcode_minus_L: Not really in the search PATH,
+ # but as the default location of the library.
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ ;;
+ esac
+ fi
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ # Try to use the -exported_symbol ld option, if it does not
+ # work, assume that -exports_file does not work either and
+ # implicitly export all symbols.
+ # This should be the same for all languages, so no per-tag cache variable.
+ AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+ [lt_cv_irix_exported_symbol],
+ [save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+ AC_LINK_IFELSE(
+ [AC_LANG_SOURCE(
+ [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+ [C++], [[int foo (void) { return 0; }]],
+ [Fortran 77], [[
+ subroutine foo
+ end]],
+ [Fortran], [[
+ subroutine foo
+ end]])])],
+ [lt_cv_irix_exported_symbol=yes],
+ [lt_cv_irix_exported_symbol=no])
+ LDFLAGS="$save_LDFLAGS"])
+ if test "$lt_cv_irix_exported_symbol" = yes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+ fi
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ newsos6)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *nto* | *qnx*)
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ else
+ case $host_os in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ os2*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ else
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+ # Both c and cxx compiler support -rpath directly
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ ;;
+
+ solaris*)
+ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+ if test "$GCC" = yes; then
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ else
+ case `$CC -V 2>&1` in
+ *"Compilers 5.0"*)
+ wlarc=''
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+ ;;
+ *)
+ wlarc='${wl}'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+ ;;
+ esac
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'. GCC discards it without `$wl',
+ # but is careful enough not to reorder.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ fi
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4)
+ case $host_vendor in
+ sni)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+ ;;
+ siemens)
+ ## LD is ld it makes a PLAMLIB
+ ## CC just makes a GrossModule.
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ ;;
+ motorola)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+ ;;
+ esac
+ runpath_var='LD_RUN_PATH'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ sysv4.3*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ fi
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ if test "$GCC" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ ;;
+
+ uts4*)
+ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+
+ *)
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ if test x$host_vendor = xsni; then
+ case $host in
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+ ;;
+ esac
+ fi
+ fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+ [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+ # Assume -lc should be added
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+ if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $_LT_TAGVAR(archive_cmds, $1) in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+ [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+ [$RM conftest*
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+ _LT_TAGVAR(allow_undefined_flag, $1)=
+ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+ then
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ else
+ lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ fi
+ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+ $RM conftest*
+ ])
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+ ;;
+ esac
+ fi
+ ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+ [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+ [enable_shared_with_static_runtimes], [0],
+ [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+ [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+ [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+ [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+ [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+ [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+ [Commands used to build a loadable module if different from building
+ a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+ [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+ [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+ [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+ [Flag to hardcode $libdir into a binary during linking.
+ This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+ [[If ld is used when linking, flag to hardcode $libdir into a binary
+ during linking. This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+ [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+ DIR into the resulting binary and the resulting library dependency is
+ "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+ library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+ into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+ [Set to "yes" if building a shared library automatically hardcodes DIR
+ into the library and all subsequent libraries and executables linked
+ against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+ [Set to yes if linker adds runtime paths of dependent libraries
+ to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+ [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+ [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+ [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+ [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+ [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+ [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+ [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+ [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+ LT_SYS_DLOPEN_SELF
+ _LT_CMD_STRIPLIB
+
+ # Report which library types will actually be built
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined. These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+ (test "X$CXX" != "Xg++"))) ; then
+ AC_PROG_CXXCPP
+else
+ _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="int some_variable = 0;"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC=$CC
+ lt_save_CFLAGS=$CFLAGS
+ lt_save_LD=$LD
+ lt_save_GCC=$GCC
+ GCC=$GXX
+ lt_save_with_gnu_ld=$with_gnu_ld
+ lt_save_path_LD=$lt_cv_path_LD
+ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+ else
+ $as_unset lt_cv_prog_gnu_ld
+ fi
+ if test -n "${lt_cv_path_LDCXX+set}"; then
+ lt_cv_path_LD=$lt_cv_path_LDCXX
+ else
+ $as_unset lt_cv_path_LD
+ fi
+ test -z "${LDCXX+set}" || LD=$LDCXX
+ CC=${CXX-"c++"}
+ CFLAGS=$CXXFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ # We don't want -fno-exception when compiling C++ code, so set the
+ # no_builtin_flag separately
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+ else
+ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+ fi
+
+ if test "$GXX" = yes; then
+ # Set up default GNU C++ configuration
+
+ LT_PATH_LD
+
+ # Check if GNU C++ uses GNU ld as the underlying linker, since the
+ # archiving commands below assume that GNU ld is being used.
+ if test "$with_gnu_ld" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+ # investigate it a little bit more. (MM)
+ wlarc='${wl}'
+
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+ $GREP 'no-whole-archive' > /dev/null; then
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ _LT_TAGVAR(whole_archive_flag_spec, $1)=
+ fi
+ else
+ with_gnu_ld=no
+ wlarc=
+
+ # A generic and very simple default shared library creation
+ # command for GNU C++ for the case where it uses the native
+ # linker, instead of GNU ld. If possible, this setting should
+ # overridden to take advantage of the native linker features on
+ # the platform it is being used on.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ fi
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ GXX=no
+ with_gnu_ld=no
+ wlarc=
+ fi
+
+ # PORTME: fill in a description of your system's C++ link characteristics
+ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ case $host_os in
+ aix3*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+ for ld_flag in $LDFLAGS; do
+ case $ld_flag in
+ *-brtl*)
+ aix_use_runtimelinking=yes
+ break
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ _LT_TAGVAR(archive_cmds, $1)=''
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+ if test "$GXX" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ # We only want to do this on AIX 4.2 and lower, the check
+ # below for broken collect2 doesn't work under 4.3+
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" &&
+ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ :
+ else
+ # We have old collect2
+ _LT_TAGVAR(hardcode_direct, $1)=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=
+ fi
+ esac
+ shared_flag='-shared'
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag="$shared_flag "'${wl}-G'
+ fi
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+ # chokes on -Wl,-G. The following line is correct:
+ shared_flag='-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+ # It seems that -bexpall does not export symbols beginning with
+ # underscore (_), so it is better to generate a list of symbols to
+ # export.
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+ # Determine the default libpath from the value encoded in an empty
+ # executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+ else
+ # Determine the default libpath from the value encoded in an
+ # empty executable.
+ _LT_SYS_MODULE_PATH_AIX([$1])
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+ if test "$with_gnu_ld" = yes; then
+ # We only use this code for GNU lds that support --whole-archive.
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ else
+ # Exported symbols can be pulled into shared objects from archives
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+ fi
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+ # This is similar to how AIX traditionally builds its shared
+ # libraries.
+ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+ fi
+ fi
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ # Joseph Beckenbach <[email protected]> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ chorus*)
+ case $cc_basename in
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ cygwin* | mingw* | pw32* | cegcc*)
+ case $GXX,$cc_basename in
+ ,cl* | no,cl*)
+ # Native MSVC
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # Tell ltmain to make .dll files, not .so files.
+ shrext_cmds=".dll"
+ # FIXME: Setting linknames here is a bad hack.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
+ else
+ $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
+ fi~
+ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+ linknames='
+ # The linker will not automatically build a static lib if we build a DLL.
+ # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ # Don't use ranlib
+ _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+ _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+ lt_tool_outputfile="@TOOL_OUTPUT@"~
+ case $lt_outputfile in
+ *.exe|*.EXE) ;;
+ *)
+ lt_outputfile="$lt_outputfile.exe"
+ lt_tool_outputfile="$lt_tool_outputfile.exe"
+ ;;
+ esac~
+ func_to_tool_file "$lt_outputfile"~
+ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
+ $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+ $RM "$lt_outputfile.manifest";
+ fi'
+ ;;
+ *)
+ # g++
+ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+ # as there is no search path for DLLs.
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+ _LT_TAGVAR(always_export_symbols, $1)=no
+ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is; otherwise, prepend...
+ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname.def;
+ else
+ echo EXPORTS > $output_objdir/$soname.def;
+ cat $export_symbols >> $output_objdir/$soname.def;
+ fi~
+ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+ darwin* | rhapsody*)
+ _LT_DARWIN_LINKER_FEATURES($1)
+ ;;
+
+ dgux*)
+ case $cc_basename in
+ ec++*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ ghcx*)
+ # Green Hills C++ Compiler
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ freebsd[[12]]*)
+ # C++ shared libraries reported to be fairly broken before
+ # switch to ELF
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ freebsd-elf*)
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ ;;
+
+ freebsd* | dragonfly*)
+ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+ # conventions
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ gnu*)
+ ;;
+
+ haiku*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+
+ hpux9*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ hpux10*|hpux11*)
+ if test $with_gnu_ld = no; then
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ case $host_cpu in
+ hppa*64*|ia64*)
+ ;;
+ *)
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ ;;
+ esac
+ fi
+ case $host_cpu in
+ hppa*64*|ia64*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ ;;
+ *)
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+ # but as the default
+ # location of the library.
+ ;;
+ esac
+
+ case $cc_basename in
+ CC*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ aCC*)
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test $with_gnu_ld = no; then
+ case $host_cpu in
+ hppa*64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ ia64*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ ;;
+ esac
+ fi
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ interix[[3-9]]*)
+ _LT_TAGVAR(hardcode_direct, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+ # Instead, shared libraries are loaded at an image base (0x10000000 by
+ # default) and relocated if they conflict, which is a slow very memory
+ # consuming and fragmenting process. To avoid this, we pick a random,
+ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ ;;
+ irix5* | irix6*)
+ case $cc_basename in
+ CC*)
+ # SGI C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+
+ # Archives containing C++ object files must be created using
+ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+ ;;
+ *)
+ if test "$GXX" = yes; then
+ if test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+ fi
+ fi
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ ;;
+ esac
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+ _LT_TAGVAR(inherit_rpath, $1)=yes
+ ;;
+
+ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+ # Archives containing C++ object files must be created using
+ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+ ;;
+ icpc* | ecpc* )
+ # Intel C++
+ with_gnu_ld=yes
+ # version 8.0 and above of icpc choke on multiply defined symbols
+ # if we add $predep_objects and $postdep_objects, however 7.1 and
+ # earlier do not add the objects themselves.
+ case `$CC -V 2>&1` in
+ *"Version 7."*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ *) # Version 8.0 or newer
+ tmp_idyn=
+ case $host_cpu in
+ ia64*) tmp_idyn=' -i_dynamic';;
+ esac
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ ;;
+ esac
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+ pgCC* | pgcpp*)
+ # Portland Group C++ compiler
+ case `$CC -V` in
+ *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+ $RANLIB $oldlib'
+ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ *) # Version 6 and above use weak symbols
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ ;;
+ cxx*)
+ # Compaq C++
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+ runpath_var=LD_RUN_PATH
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+ ;;
+ xl* | mpixl* | bgxl*)
+ # IBM XL 8.0 on PPC, with GNU ld
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ if test "x$supports_anon_versioning" = xyes; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ echo "local: *; };" >> $output_objdir/$libname.ver~
+ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+ fi
+ ;;
+ *)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+ _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+ # Not sure whether something based on
+ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+ # would be better.
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+
+ lynxos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ m88k*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ mvs*)
+ case $cc_basename in
+ cxx*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+ wlarc=
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ fi
+ # Workaround some broken pre-1.5 toolchains
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+ ;;
+
+ *nto* | *qnx*)
+ _LT_TAGVAR(ld_shlibs, $1)=yes
+ ;;
+
+ openbsd2*)
+ # C++ shared libraries are fairly broken
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ openbsd*)
+ if test -f /usr/libexec/ld.so; then
+ _LT_TAGVAR(hardcode_direct, $1)=yes
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ fi
+ output_verbose_link_cmd=func_echo_all
+ else
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+
+ osf3* | osf4* | osf5*)
+ case $cc_basename in
+ KCC*)
+ # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+ # KCC will only create a shared library if the output file
+ # ends with ".so" (or ".sl" for HP-UX), so rename the library
+ # to its proper name (with version) after linking.
+ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Archives containing C++ object files must be created using
+ # the KAI C++ compiler.
+ case $host in
+ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+ esac
+ ;;
+ RCC*)
+ # Rational C++ 2.4.1
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ cxx*)
+ case $host in
+ osf3*)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ ;;
+ *)
+ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+ echo "-hidden">> $lib.exp~
+ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
+ $RM $lib.exp'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ #
+ # There doesn't appear to be a way to prevent this compiler from
+ # explicitly linking system object files so we need to strip them
+ # from the output so that they don't get included in the library
+ # dependencies.
+ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+ ;;
+ *)
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+ case $host in
+ osf3*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ ;;
+ esac
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+ else
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ fi
+ ;;
+ esac
+ ;;
+
+ psos*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ sunos4*)
+ case $cc_basename in
+ CC*)
+ # Sun C++ 4.x
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ lcc*)
+ # Lucid
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # Sun C++ 4.2, 5.x and Centerline C++
+ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ # The compiler driver will combine and reorder linker options,
+ # but understands `-z linker_flag'.
+ # Supported since Solaris 2.6 (maybe 2.5.1?)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+ ;;
+ esac
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+ output_verbose_link_cmd='func_echo_all'
+
+ # Archives containing C++ object files must be created using
+ # "CC -xar", where "CC" is the Sun C++ compiler. This is
+ # necessary to make sure instantiated templates are included
+ # in the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+ ;;
+ gcx*)
+ # Green Hills C++ Compiler
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+ # The C++ compiler must be used to create the archive.
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+ ;;
+ *)
+ # GNU C++ compiler with Solaris linker
+ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ else
+ # g++ 2.7 appears to require `-G' NOT `-shared' on this
+ # platform.
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+ # Commands to make compiler produce verbose output that lists
+ # what "hidden" libraries, object files and flags are used when
+ # linking a shared library.
+ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+ fi
+
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *)
+ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+
+ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ sysv5* | sco3.2v5* | sco5v6*)
+ # Note: We can NOT use -z defs as we might desire, because we do not
+ # link with -lc, and that would cause any symbols used from libc to
+ # always be unresolved, which means just about no library would
+ # ever link correctly. If we're not using GNU ld we use -z text
+ # though, which does catch some bad symbols but isn't as heavy-handed
+ # as -z defs.
+ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+ _LT_TAGVAR(link_all_deplibs, $1)=yes
+ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+ runpath_var='LD_RUN_PATH'
+
+ case $cc_basename in
+ CC*)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+ '"$_LT_TAGVAR(old_archive_cmds, $1)"
+ _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+ '"$_LT_TAGVAR(reload_cmds, $1)"
+ ;;
+ *)
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+ ;;
+ esac
+ ;;
+
+ tandem*)
+ case $cc_basename in
+ NCC*)
+ # NonStop-UX NCC 3.20
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+ ;;
+
+ vxworks*)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+
+ *)
+ # FIXME: insert proper C++ library support
+ _LT_TAGVAR(ld_shlibs, $1)=no
+ ;;
+ esac
+
+ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+ test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+ _LT_TAGVAR(GCC, $1)="$GXX"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+ LDCXX=$LD
+ LD=$lt_save_LD
+ GCC=$lt_save_GCC
+ with_gnu_ld=$lt_save_with_gnu_ld
+ lt_cv_path_LDCXX=$lt_cv_path_LD
+ lt_cv_path_LD=$lt_save_path_LD
+ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+ case ${2} in
+ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
+ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+ esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library. It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+ Foo (void) { a = 0; }
+private:
+ int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer*4 a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+ subroutine foo
+ implicit none
+ integer a
+ a=0
+ return
+ end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+ private int a;
+ public void bar (void) {
+ a = 0;
+ }
+};
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+ # Parse the compiler output and extract the necessary
+ # objects, libraries and library flags.
+
+ # Sentinel used to keep track of whether or not we are before
+ # the conftest object file.
+ pre_test_object_deps_done=no
+
+ for p in `eval "$output_verbose_link_cmd"`; do
+ case ${prev}${p} in
+
+ -L* | -R* | -l*)
+ # Some compilers place space between "-{L,R}" and the path.
+ # Remove the space.
+ if test $p = "-L" ||
+ test $p = "-R"; then
+ prev=$p
+ continue
+ fi
+
+ # Expand the sysroot to ease extracting the directories later.
+ if test -z "$prev"; then
+ case $p in
+ -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+ -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+ -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+ esac
+ fi
+ case $p in
+ =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+ esac
+ if test "$pre_test_object_deps_done" = no; then
+ case ${prev} in
+ -L | -R)
+ # Internal compiler library paths should come after those
+ # provided the user. The postdeps already come after the
+ # user supplied libs so there is no need to process them.
+ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+ fi
+ ;;
+ # The "-l" case would never come before the object being
+ # linked, so don't bother handling this case.
+ esac
+ else
+ if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+ _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+ else
+ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+ fi
+ fi
+ prev=
+ ;;
+
+ *.lto.$objext) ;; # Ignore GCC LTO objects
+ *.$objext)
+ # This assumes that the test object file only shows up
+ # once in the compiler output.
+ if test "$p" = "conftest.$objext"; then
+ pre_test_object_deps_done=yes
+ continue
+ fi
+
+ if test "$pre_test_object_deps_done" = no; then
+ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+ _LT_TAGVAR(predep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+ fi
+ else
+ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+ _LT_TAGVAR(postdep_objects, $1)="$p"
+ else
+ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+ fi
+ fi
+ ;;
+
+ *) ;; # Ignore the rest.
+
+ esac
+ done
+
+ # Clean up.
+ rm -f a.out a.exe
+else
+ echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+ # Interix 3.5 installs completely hosed .la files for C++, so rather than
+ # hack all around it, let's just trust "g++" to DTRT.
+ _LT_TAGVAR(predep_objects,$1)=
+ _LT_TAGVAR(postdep_objects,$1)=
+ _LT_TAGVAR(postdeps,$1)=
+ ;;
+
+linux*)
+ case `$CC -V 2>&1 | sed 5q` in
+ *Sun\ C*)
+ # Sun C++ 5.9
+
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+
+solaris*)
+ case $cc_basename in
+ CC* | sunCC*)
+ # The more standards-conforming stlport4 library is
+ # incompatible with the Cstd library. Avoid specifying
+ # it if it's in CXXFLAGS. Ignore libCrun as
+ # -library=stlport4 depends on it.
+ case " $CXX $CXXFLAGS " in
+ *" -library=stlport4 "*)
+ solaris_use_stlport4=yes
+ ;;
+ esac
+
+ # Adding this requires a known-good setup of shared libraries for
+ # Sun compiler versions before 5.6, else PIC objects from an old
+ # archive will be linked into the output, leading to subtle bugs.
+ if test "$solaris_use_stlport4" != yes; then
+ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+ fi
+ ;;
+ esac
+ ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+ [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+ [Dependencies to place before and after the objects being linked to
+ create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+ [The library search path used internally by the compiler when linking
+ a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test "X$F77" = "Xno"; then
+ _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${F77-"f77"}
+ CFLAGS=$FFLAGS
+ compiler=$CC
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+ GCC=$G77
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$G77"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC="$lt_save_CC"
+ CFLAGS="$lt_save_CFLAGS"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test "X$FC" = "Xno"; then
+ _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working. Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+ # Code to be used in simple compile tests
+ lt_simple_compile_test_code="\
+ subroutine t
+ return
+ end
+"
+
+ # Code to be used in simple link tests
+ lt_simple_link_test_code="\
+ program t
+ end
+"
+
+ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+ _LT_TAG_COMPILER
+
+ # save warnings/boilerplate of simple test code
+ _LT_COMPILER_BOILERPLATE
+ _LT_LINKER_BOILERPLATE
+
+ # Allow CC to be a program name with arguments.
+ lt_save_CC="$CC"
+ lt_save_GCC=$GCC
+ lt_save_CFLAGS=$CFLAGS
+ CC=${FC-"f95"}
+ CFLAGS=$FCFLAGS
+ compiler=$CC
+ GCC=$ac_cv_fc_compiler_gnu
+
+ _LT_TAGVAR(compiler, $1)=$CC
+ _LT_CC_BASENAME([$compiler])
+
+ if test -n "$compiler"; then
+ AC_MSG_CHECKING([if libtool supports shared libraries])
+ AC_MSG_RESULT([$can_build_shared])
+
+ AC_MSG_CHECKING([whether to build shared libraries])
+ test "$can_build_shared" = "no" && enable_shared=no
+
+ # On AIX, shared libraries and static libraries use the same namespace, and
+ # are all built from PIC.
+ case $host_os in
+ aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+ aix[[4-9]]*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+ esac
+ AC_MSG_RESULT([$enable_shared])
+
+ AC_MSG_CHECKING([whether to build static libraries])
+ # Make sure either enable_shared or enable_static is yes.
+ test "$enable_shared" = yes || enable_static=yes
+ AC_MSG_RESULT([$enable_static])
+
+ _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+ _LT_TAGVAR(LD, $1)="$LD"
+
+ ## CAVEAT EMPTOR:
+ ## There is no encapsulation within the following macros, do not change
+ ## the running order or otherwise move them around unless you know exactly
+ ## what you are doing...
+ _LT_SYS_HIDDEN_LIBDEPS($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_SYS_DYNAMIC_LINKER($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+ fi # test -n "$compiler"
+
+ GCC=$lt_save_GCC
+ CC=$lt_save_CC
+ CFLAGS=$lt_save_CFLAGS
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+ _LT_COMPILER_NO_RTTI($1)
+ _LT_COMPILER_PIC($1)
+ _LT_COMPILER_C_O($1)
+ _LT_COMPILER_FILE_LOCKS($1)
+ _LT_LINKER_SHLIBS($1)
+ _LT_LINKER_HARDCODE_LIBPATH($1)
+
+ _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined. These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+ :
+ _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+ [AC_CHECK_TOOL(GCJ, gcj,)
+ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+ AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible. Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+ [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into #
+# GNU Autoconf as AC_PROG_SED. When it is available in #
+# a released version of Autoconf we should remove this #
+# macro and use it instead. #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for lt_ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+ fi
+ done
+ done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+ test ! -f $lt_ac_sed && continue
+ cat /dev/null > conftest.in
+ lt_ac_count=0
+ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+ # Check for GNU sed and select it if it is found.
+ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+ lt_cv_path_SED=$lt_ac_sed
+ break
+ fi
+ while true; do
+ cat conftest.in conftest.in >conftest.tmp
+ mv conftest.tmp conftest.in
+ cp conftest.in conftest.nl
+ echo >>conftest.nl
+ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+ cmp -s conftest.out conftest.nl || break
+ # 10000 chars as input seems more than enough
+ test $lt_ac_count -gt 10 && break
+ lt_ac_count=`expr $lt_ac_count + 1`
+ if test $lt_ac_count -gt $lt_ac_max; then
+ lt_ac_max=$lt_ac_count
+ lt_cv_path_SED=$lt_ac_sed
+ fi
+ done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \
+ = c,a/b,b/c, \
+ && eval 'test $(( 1 + 1 )) -eq 2 \
+ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+ && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+ >/dev/null 2>&1 \
+ && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ lt_unset=unset
+else
+ lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ lt_SP2NL='tr \040 \012'
+ lt_NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ lt_SP2NL='tr \100 \n'
+ lt_NL2SP='tr \r\n \100\100'
+ ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
+# ------------------------------------------------------
+# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
+# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
+m4_defun([_LT_PROG_FUNCTION_REPLACE],
+[dnl {
+sed -e '/^$1 ()$/,/^} # $1 /c\
+$1 ()\
+{\
+m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1])
+} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+test 0 -eq $? || _lt_function_replace_fail=:
+])
+
+
+# _LT_PROG_REPLACE_SHELLFNS
+# -------------------------
+# Replace existing portable implementations of several shell functions with
+# equivalent extended shell implementations where those features are available..
+m4_defun([_LT_PROG_REPLACE_SHELLFNS],
+[if test x"$xsi_shell" = xyes; then
+ _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac])
+
+ _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
+ func_basename_result="${1##*/}"])
+
+ _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
+ case ${1} in
+ */*) func_dirname_result="${1%/*}${2}" ;;
+ * ) func_dirname_result="${3}" ;;
+ esac
+ func_basename_result="${1##*/}"])
+
+ _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
+ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+ # positional parameters, so assign one to ordinary parameter first.
+ func_stripname_result=${3}
+ func_stripname_result=${func_stripname_result#"${1}"}
+ func_stripname_result=${func_stripname_result%"${2}"}])
+
+ _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
+ func_split_long_opt_name=${1%%=*}
+ func_split_long_opt_arg=${1#*=}])
+
+ _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
+ func_split_short_opt_arg=${1#??}
+ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
+
+ _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
+ case ${1} in
+ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+ *) func_lo2o_result=${1} ;;
+ esac])
+
+ _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo])
+
+ _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))])
+
+ _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}])
+fi
+
+if test x"$lt_shell_append" = xyes; then
+ _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"])
+
+ _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
+ func_quote_for_eval "${2}"
+dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
+ eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
+
+ # Save a `func_append' function call where possible by direct use of '+='
+ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+ test 0 -eq $? || _lt_function_replace_fail=:
+else
+ # Save a `func_append' function call even when '+=' is not available
+ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
+ && mv -f "$cfgfile.tmp" "$cfgfile" \
+ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
+ test 0 -eq $? || _lt_function_replace_fail=:
+fi
+
+if test x"$_lt_function_replace_fail" = x":"; then
+ AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
+fi
+])
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine which file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path). These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+ ;;
+ esac
+ ;;
+ *-*-cygwin* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+ ;;
+ *-*-cygwin* )
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+ * ) # otherwise, assume *nix
+ lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+ ;;
+ esac
+ ;;
+ * ) # unhandled hosts (and "normal" native builds)
+ lt_cv_to_host_file_cmd=func_convert_file_noop
+ ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+ [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+ *-*-mingw* )
+ case $build in
+ *-*-mingw* ) # actually msys
+ lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+ ;;
+ esac
+ ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+ [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644
index 00000000..17cfd51c
--- /dev/null
+++ b/m4/ltoptions.m4
@@ -0,0 +1,369 @@
+# Helper functions for option handling. -*- Autoconf -*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 7 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it. Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+ _LT_MANGLE_DEFUN([$1], [$2]),
+ [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+ [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME. If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+ [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+ dnl
+ dnl Simply set some default values (i.e off) if boolean options were not
+ dnl specified:
+ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+ ])
+ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+ ])
+ dnl
+ dnl If no reference was made to various pairs of opposing options, then
+ dnl we run the default mode handler for the pair. For example, if neither
+ dnl `shared' nor `disable-shared' was passed, we enable building of shared
+ dnl archives by default:
+ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+ [_LT_ENABLE_FAST_INSTALL])
+ ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS], [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_shared=yes ;;
+ no) enable_shared=no ;;
+ *)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+ _LT_DECL([build_libtool_libs], [enable_shared], [0],
+ [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_static=yes ;;
+ no) enable_static=no ;;
+ *)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+ _LT_DECL([build_old_libs], [enable_static], [0],
+ [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+ [p=${PACKAGE-default}
+ case $enableval in
+ yes) enable_fast_install=yes ;;
+ no) enable_fast_install=no ;;
+ *)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+ for pkg in $enableval; do
+ IFS="$lt_save_ifs"
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$lt_save_ifs"
+ ;;
+ esac],
+ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+ [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+ [AS_HELP_STRING([--with-pic],
+ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+ [pic_mode="$withval"],
+ [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+ [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+ [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+ [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+ [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+ [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644
index 00000000..9000a057
--- /dev/null
+++ b/m4/ltsugar.m4
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+ [$#], [2], [[$2]],
+ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+ [$#], 1, [],
+ [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+ [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+ [m4_foreach([_Lt_suffix],
+ ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+ [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+ [lt_append([$1], [$2], [$3])$4],
+ [$5])],
+ [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+ [$5],
+ [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+ [lt_join(m4_quote(m4_default([$4], [[, ]])),
+ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644
index 00000000..9c7b5d41
--- /dev/null
+++ b/m4/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers -*- Autoconf -*-
+#
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 3293 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4])
+m4_define([LT_PACKAGE_REVISION], [1.3293])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4'
+macro_revision='1.3293'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644
index 00000000..ecc946dd
--- /dev/null
+++ b/m4/lt~obsolete.m4
@@ -0,0 +1,98 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+# Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else. This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAMATECONFIG], [AC_DEFUN([_LT_AC_TAMATECONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])])
diff --git a/m4/mate-doc-utils.m4 b/m4/mate-doc-utils.m4
new file mode 100644
index 00000000..b55e0fe6
--- /dev/null
+++ b/m4/mate-doc-utils.m4
@@ -0,0 +1,56 @@
+dnl Do not call MATE_DOC_DEFINES directly. It is split out from
+dnl MATE_DOC_INIT to allow mate-doc-utils to bootstrap off itself.
+AC_DEFUN([MATE_DOC_DEFINES],
+[
+AC_ARG_WITH([help-dir],
+ AC_HELP_STRING([--with-help-dir=DIR], [path to help docs]),,
+ [with_help_dir='${datadir}/mate/help'])
+HELP_DIR="$with_help_dir"
+AC_SUBST(HELP_DIR)
+
+AC_ARG_WITH([omf-dir],
+ AC_HELP_STRING([--with-omf-dir=DIR], [path to OMF files]),,
+ [with_omf_dir='${datadir}/omf'])
+OMF_DIR="$with_omf_dir"
+AC_SUBST(OMF_DIR)
+
+AC_ARG_WITH([help-formats],
+ AC_HELP_STRING([--with-help-formats=FORMATS], [list of formats]),,
+ [with_help_formats=''])
+DOC_USER_FORMATS="$with_help_formats"
+AC_SUBST(DOC_USER_FORMATS)
+
+AC_ARG_ENABLE([scrollkeeper],
+ [AC_HELP_STRING([--disable-scrollkeeper],
+ [do not make updates to the scrollkeeper database])],,
+ enable_scrollkeeper=yes)
+AM_CONDITIONAL([ENABLE_SK],[test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"])
+
+dnl disable scrollkeeper automatically for distcheck
+DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS"
+AC_SUBST(DISTCHECK_CONFIGURE_FLAGS)
+
+AM_CONDITIONAL([HAVE_MATE_DOC_UTILS],[test "$gdu_cv_have_gdu" = "yes"])
+])
+
+# MATE_DOC_INIT ([MINIMUM-VERSION],[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
+#
+AC_DEFUN([MATE_DOC_INIT],
+[AC_REQUIRE([AC_PROG_LN_S])dnl
+
+ifelse([$1],,[gdu_cv_version_required=0.3.2],[gdu_cv_version_required=$1])
+
+AC_MSG_CHECKING([mate-doc-utils >= $gdu_cv_version_required])
+PKG_CHECK_EXISTS([mate-doc-utils >= $gdu_cv_version_required],
+ [gdu_cv_have_gdu=yes],[gdu_cv_have_gdu=no])
+
+if test "$gdu_cv_have_gdu" = "yes"; then
+ AC_MSG_RESULT([yes])
+ ifelse([$2],,[:],[$2])
+else
+ AC_MSG_RESULT([no])
+ ifelse([$3],,[AC_MSG_ERROR([mate-doc-utils >= $gdu_cv_version_required not found])],[$3])
+fi
+
+MATE_DOC_DEFINES
+])
diff --git a/po/ChangeLog b/po/ChangeLog
new file mode 100644
index 00000000..727ed8e9
--- /dev/null
+++ b/po/ChangeLog
@@ -0,0 +1,4424 @@
+2010-08-15 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated zh_CN translation.
+
+2010-05-31 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated zh_CN translation.
+
+2009-04-15 Khaled Hosny <[email protected]>
+
+ * ar.po: Updated Arabic translation.
+
+2009-04-12 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2009-04-12 Priit Laes <plaes at svn dot mate dot org>
+
+ * et.po: Translation updated by Ivar Smolin
+
+2009-04-10 Goran Rakic <[email protected]>
+
+ * sr.po, [email protected]: Updated Serbian translation (by Miloš Popović).
+
+2009-04-10 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated zh_CN translation.
+
+2009-03-25 Amitakhya Phukan <[email protected]>
+
+ * as.po: Updated Assamese translations.
+
+2009-03-25 Amitakhya Phukan <[email protected]>
+
+ * as.po: Updated Assamese translations.
+
+2009-03-18 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic translation by Usama Akkad.
+
+2009-03-16 Baris Cicek <[email protected]>
+
+ * tr.po: Updated Turkish translation.
+
+2009-03-16 Kostas Papadimas <[email protected]>
+
+ * el.po: Updated Greek Translation by Fotis Tsamis.
+
+2009-03-16 Krishnababu K <[email protected]>
+
+ * te.po: Updated Telugu Translation.
+
+2009-03-16 Rajesh Ranjan <[email protected]>
+
+ * mai.po: added Maithili translation.
+ * LINGUAS: Added Maithili (mai) to the list of Languages.
+
+2009-03-15 Andre Klapper <[email protected]>
+
+ * af.po: Added Afrikaans translation by Walter / Friedel Wolff.
+ * LINGUAS: Added af.
+
+2009-03-15 Gabor Kelemen <[email protected]>
+
+ * hu.po: Translation updated.
+
+2009-03-15 Ani Peter <[email protected]>
+
+ * ml.po: Updated Malayalam Translations
+
+2009-03-15 Kostas Papadimas <[email protected]>
+
+ * el.po: Updated Greek Translation by Pierros Papadeas.
+
+2009-03-14 Žygimantas Beručka <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2009-03-13 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation by Yuriy Penkin.
+
+2009-03-13 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician translation
+
+2009-03-13 Andre Klapper <[email protected]>
+
+ * cs.po: Revert last commit.
+
+2009-03-13 Andre Klapper <[email protected]>
+
+ * cs.po: Updated Czech translation by Lucas Lommer.
+
+2009-03-12 I. Felix <[email protected]>
+
+ * ta.po: Tamil Translation updated
+
+2009-03-11 Krishnababu K <[email protected]>
+
+ * te.po: Updated Telugu Translation.
+
+2009-03-09 Andre Klapper <[email protected]>
+
+ * cs.po: Updated Czech translation by Martin Picek.
+
+2009-03-09 Sandeep Shedmake <[email protected]>
+
+ * mr.po: Updated Marathi Translations.
+
+2009-03-09 Sandeep Shedmake <[email protected]>
+
+ * mr.po: Updated Marathi Translations.
+
+2009-03-09 Priit Laes <plaes at svn dot mate dot org>
+
+ * et.po: Translation updated by Ivar Smolin
+
+2009-03-08 Mișu Moldovan <[email protected]>
+
+ * ro.po: Updated Romanian translation.
+
+2009-03-08 Milo Casagrande <[email protected]>
+
+ * it.po: Updated Italian translation by Francesco Marletta.
+
+2009-03-07 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation by Yaron Sharabani.
+
+2009-03-06 Og Maciel <[email protected]>
+
+ * pt_BR.po: Updated Brazilian Portuguese translation by
+ Fabrício Godoy.
+
+2009-03-06 Gintautas Miliauskas <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2009-03-05 Shankar Prasad <[email protected]>
+
+ * kn.po: Updated Kannada translations.
+
+2009-03-03 Manoj Kumar Giri <[email protected]>
+
+ * or.po: Updated Oriya Translation.
+
+2009-03-02 Petr Kovar <[email protected]>
+
+ * cs.po: Updated Czech translation by Adrian Gunis.
+
+2009-03-02 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation by Juan Jesus Ojeda
+
+2009-02-28 Duarte Loreto <[email protected]>
+
+ * pt.po: Updated Portuguese translation.
+
+2009-02-28 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation.
+
+2009-02-26 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2009-02-25 Chao-Hsiung Liao <[email protected]>
+
+ * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+ * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2009-02-25 Christian Kirbach <[email protected]>
+
+ * de.po: Updated German translation.
+
+2009-02-23 Philip Withnall <[email protected]>
+
+ * en_GB.po: Updated British English translation.
+
+2009-02-21 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Alexander Shopov <[email protected]>
+
+2009-02-22 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2009-02-19 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2009-02-19 Gil Forcada <[email protected]>
+
+ * ca.po: Updated Catalan translation.
+
+2009-02-19 Sweta Kothari <[email protected]>
+
+ * gu.po: Committed Gujarati Translation.
+
+2009-02-18 Claude Paroz <[email protected]>
+
+ * fr.po: Updated French translation.
+
+2009-02-18 Inaki Larranaga Murgoitio <[email protected]>
+
+ * eu.po: Updated Basque translation.
+
+2009-02-18 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2009-02-18 Ihar Hrachyshka <[email protected]>
+
+ * [email protected]: Updated Belarusian Latin translation by Ihar Hrachyshka.
+
+2009-02-18 Changwoo Ryu <[email protected]>
+
+ * ko.po: Updated Korean translation.
+
+2009-02-17 Gabor Kelemen <[email protected]>
+
+ * hu.po: Translation updated.
+
+2009-02-17 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2009-02-16 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Updated Dutch translation by Wouter Bolsterlee.
+
+2009-02-15 Tomasz Dominikowski <[email protected]>
+
+ * pl.po: Updated Polish translation
+
+2009-02-15 Kenneth Nielsen <[email protected]>
+
+ * da.po: Updated Danish translation by Kenneth Nielsen
+
+2009-02-15 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2009-02-15 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2009-02-14 Kenneth Nielsen <[email protected]>
+
+ * da.po: Updated Danish translation by Kenneth Nielsen
+
+2009-02-14 Tomasz Dominikowski <[email protected]>
+
+ * pl.po: Updated Polish translation
+
+2009-02-14 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2009-02-14 Ihar Hrachyshka <[email protected]>
+
+ * [email protected]: Updated Belarusian Latin translation by Ihar Hrachyshka.
+
+2009-02-11 Inaki Larranaga Murgoitio <[email protected]>
+
+ * eu.po: Updated Basque translation.
+
+2009-02-09 Gil Forcada <[email protected]>
+
+ * ast.po: Added Asturian translation on behalf of Mikel González.
+ * LINGUAS: Added ast.
+
+2009-02-07 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2009-02-04 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Dutch translation updated by Wouter Bolsterlee.
+
+2009-02-03 Chao-Hsiung Liao <[email protected]>
+
+ * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+ * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2009-02-01 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2009-01-31 Gabor Kelemen <[email protected]>
+
+ * hu.po: Translation updated.
+
+2009-01-29 Priit Laes <plaes at svn dot mate dot org>
+
+ * et.po: Translation updated by Ivar Smolin
+
+2009-01-28 Hendrik Richter <[email protected]>
+
+ * de.po: Updated German translation.
+
+2009-01-24 Changwoo Ryu <[email protected]>
+
+ * ko.po: Updated Korean translation.
+
+2009-01-19 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2009-01-18 Gil Forcada <[email protected]>
+
+ * ca.po: Updated Catalan translation.
+
+2009-01-17 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2009-01-16 Hendrik Richter <[email protected]>
+
+ * de.po: Updated German translation, fix #567910.
+
+2009-01-12 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2009-01-10 Mario Blättermann <[email protected]>
+
+ * de.po: Updated German translation
+
+2009-01-05 甘露(Gan Lu) <[email protected]>
+
+ * zh_CN.po: Updated Chinese Simplified translation
+
+2009-01-05 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2009-01-04 Leonardo Ferreira Fontenelle <[email protected]>
+
+ * pt_BR.po: Updated Brazilian Portuguese translation. Contributed by
+ Taylon Silmer.
+
+2009-01-02 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation by Juan Jesús Ojeda and me
+
+2009-01-01 甘露(Gan Lu) <[email protected]>
+
+ * zh_CN.po: Updated Chinese Simplified translation
+
+2009-01-01 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation.
+
+2008-12-28 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2008-12-20 Ihar Hrachyshka <[email protected]>
+
+ * [email protected]: Updated Belarusian Latin translation by Ihar Hračyška.
+
+2008-12-16 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2008-12-15 Kjartan Maraas <[email protected]>
+
+ * POTFILES.in: Remove non-existing files.
+ * nb.po: Updated Norwegian bokmål translation.
+
+2008-12-15 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2008-12-07 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation.
+
+2008-11-17 Nguyễn Thái Ngọc Duy <[email protected]>
+
+ * vi.po: Fixed #557023
+
+2008-11-08 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2008-11-02 Hendrik Richter <[email protected]>
+
+ * de.po: Updated German translation.
+
+2008-10-19 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Usama Akkad.
+
+2008-10-16 Kenneth Nielsen <[email protected]>
+
+ * da.po: Updated Danish translation
+
+2008-10-12 Petr Kovar <[email protected]>
+
+ * cs.po: Updated Czech translation by Adrian Gunis
+ (bug #544424 again).
+
+2008-10-11 Ihar Hrachyshka <[email protected]>
+
+ * [email protected]: Updated Belarusian Latin translation by Ihar Hrachyshka.
+
+2008-09-30 Priit Laes <plaes at svn dot mate dot org>
+
+ * et.po: Translation updated by Ivar Smolin
+
+2008-09-23 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2008-09-21 Wadim Dziedzic <[email protected]>
+
+ * pl.po: Updated Polish translation
+
+2008-09-21 Alexandre Prokoudine <[email protected]>
+
+ * ru.po: Updated Russian translation
+
+2008-09-20 Mugurel Tudor <[email protected]>
+
+ * ro.po: Updated Romanian translation by
+ Mişu Moldovan <[email protected]>
+
+2008-09-20 Kenneth Nielsen <[email protected]>
+
+ * da.po: Updated Danish translation by Kenneth Nielsen
+
+2008-09-20 Nikos Charonitakis <[email protected]>
+
+ * el.po: Updated Greek translation by Papadeas Pierros <[email protected]>.
+
+2008-09-19 Hendrik Richter <[email protected]>
+
+ * de.po: Updated German translation.
+
+2008-09-19 Mario Blättermann <[email protected]>
+
+ * de.po: Updated German Translation
+
+2008-09-19 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Usama Akkad.
+
+2008-09-18 Sweta Kothari <[email protected]>
+
+ * gu.po: Committed Gujarati Translation.
+
+2008-09-18 Shankar Prasad <[email protected]>
+
+ * kn.po: Updated Kannada Translation
+
+2008-09-18 Baris Cicek <[email protected]>
+
+ * tr.po: Updated Turkish Translation
+
+2008-09-18 Chao-Hsiung Liao <[email protected]>
+
+ * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+ * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2008-09-18 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-09-17 Luca Ferretti <[email protected]>
+
+ * it.po: Updated Italian translation by Francesco Marletta.
+
+2008-09-16 Gil Forcada <[email protected]>
+
+ * ca.po: Updated Catalan translation.
+
+2008-09-15 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-09-15 I. Felix <[email protected]>
+
+ * ta.po: Tamil Translation updated by Tirumurthi Vasudevan
+
+2008-09-14 Sandeep Shedmake <[email protected]>
+
+ * mr.po: Updated Marathi translations.
+
+2008-09-14 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2008-09-14 Arangel Angov <[email protected]>
+
+ * mk.po: Updated Macedonian translation.
+
+2008-09-13 Gabor Kelemen <[email protected]>
+
+ * hu.po: Translation updated.
+
+2008-09-13 Changwoo Ryu <[email protected]>
+
+ * ko.po: Updated Korean translation.
+
+2008-09-13 Gintautas Miliauskas <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2008-09-12 Goran Rakić <[email protected]>
+
+ * sr.po, [email protected]: Updated Serbian translation (by Miloš Popović).
+
+2008-09-09 Praveen Arimbrathodiyil <[email protected]>
+
+ * ml.po: Malayalam translation updated by Santhosh Thottingal.
+
+2008-09-09 Inaki Larranaga Murgoitio <[email protected]>
+
+ * eu.po: Updated Basque translation.
+
+2008-09-08 Kjartan Maraas <[email protected]>
+
+ * LINGUAS: Remove hr until the translation is added.
+
+2008-09-07 Robert Sedak <[email protected]>
+
+ * hr.po: Added Croatian translation.
+ * LINGUAS: Added hr
+
+2008-09-07 Duarte Loreto <[email protected]>
+
+ * pt.po: Updated Portuguese translation.
+
+2008-09-07 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Updated Dutch translation by Wouter Bolsterlee.
+
+2008-09-07 Philip Withnall <[email protected]>
+
+ * en_GB.po: Updated British English translation.
+
+2008-09-07 Petr Kovar <[email protected]>
+
+ * cs.po: Updated Czech translation by Adrian Gunis
+ (bug #544424).
+
+2008-09-06 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated zh_CN translation.
+
+2008-09-04 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Alexander Shopov <[email protected]>
+
+2008-09-04 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2008-09-04 Laurent Dhima <[email protected]>
+
+ * sq.po: Updated Albanian Translation.
+
+2008-09-02 Claude Paroz <[email protected]>
+
+ * fr.po: Updated French translation by Robert-André Mauchin.
+
+2008-09-02 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician translation
+
+2008-09-02 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2008-09-02 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2008-09-02 Nguyễn Thái Ngọc Duy <[email protected]>
+
+ * vi.po: Updated Vietnamese translation
+
+2008-09-02 Priit Laes <plaes at svn dot mate dot org>
+
+ * et.po: Translation updated by Ivar Smolin
+
+2008-09-02 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2008-09-01 Leonardo Ferreira Fontenelle <[email protected]>
+
+ * pt_BR.po: Updated Brazilian Portuguese translation, and fixed some
+ terminology.
+
+2008-08-29 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2008-08-29 Mario Blättermann <[email protected]>
+
+ * de.po: Updated German translation.
+
+2008-08-28 Gintautas Miliauskas <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2008-08-27 Pema Geyleg <[email protected]>
+
+ * dz.po: Updated Dzongkha Translation
+
+
+2008-08-25 Goran Rakic <[email protected]>
+
+ * LINGUAS, [email protected], [email protected]: Conversion from sr@Latn to sr@latin.
+
+2008-08-21 Chao-Hsiung Liao <[email protected]>
+
+ * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+ * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2008-08-20 Inaki Larranaga Murgoitio <[email protected]>
+
+ * eu.po: Updated Basque translation.
+
+2008-08-20 Manoj Kumar Giri <[email protected]>
+
+ * or.po: Updated Oriya Translation
+
+2008-08-13 Runa Bhattacharjee <[email protected]>
+
+ * bn_IN.po: Updated Bengali India Translation
+
+2008-08-13 Shankar Prasad <[email protected]>
+
+ * kn.po: Updated Kannada Translation.
+
+2008-08-12 Gil Forcada <[email protected]>
+
+ * ca.po: Updated Catalan translation.
+
+2008-08-12 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2008-08-12 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2008-08-07 Og Maciel <[email protected]>
+
+ * pt_BR.po: Updated translation by Vladimir Melo.
+
+2008-08-6 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-07-30 Duarte Loreto <[email protected]>
+
+ * pt.po: Updated Portuguese translation.
+
+2008-07-29 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2008-07-27 Petr Kovar <[email protected]>
+
+ * cs.po: Updated Czech translation by Adrian Gunis
+ (bug #544424).
+
+2008-07-24 Claude Paroz <[email protected]>
+
+ * fr.po: Updated French translation by Pierre Lemaire.
+
+2008-07-21 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Dutch translation updated by Wouter Bolsterlee.
+
+2008-07-19 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2008-07-15 Runa Bhattacharjee <[email protected]>
+
+ * ps.po: Added Pashto Translations by Zabeeh Khan
+ * LINGUAS: Added Pashto (ps) to the List of Languages
+
+2008-07-04 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2008-07-03 Runa Bhattacharjee <[email protected]>
+
+ * ks.po: Added Kashmiri Translations by Rakesh Pandit ([email protected])
+ * LINGUAS: Added Kashmiri (ks) to the List of Languages.
+
+2008-06-30 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation.
+
+2008-06-25 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2008-06-23 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2008-06-21 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2008-06-19 Priit Laes <plaes at svn dot mate dot org>
+
+ * et.po: Translation updated by Ivar Smolin
+
+2008-06-11 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2008-05-28 Priit Laes <plaes at svn dot mate dot org>
+
+ * et.po: Translation updated by Ivar Smolin
+
+2008-05-25 Philip Withnall <[email protected]>
+
+ * en_GB.po: Updated British English translation.
+
+2008-05-25 Philip Withnall <[email protected]>
+
+ * en_GB.po: Updated British English translation.
+
+2008-05-25 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2008-05-22 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2008-05-22 Goran Rakić <[email protected]>
+
+ * sr.po, [email protected]: Updated Serbian translation.
+
+2008-05-19 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2008-05-05 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation.
+
+2008-04-30 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2008-04-29 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2008-04-26 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2008-04-21 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2008-04-19 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation.
+
+2008-04-19 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2008-04-19 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2008-04-19 Kjartan Maraas <[email protected]>
+
+ * POTFILES.in: Remove some deleted files and add a missing one.
+ * nb.po: Updated Norwegian bokmål translation.
+
+2008-03-29 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Yavor Doganov <[email protected]>
+
+2008-03-29 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2008-03-25 Philip Withnall <[email protected]>
+
+ * en_GB.po: Updated British English translation.
+
+2008-03-23 Nguyễn Thái Ngọc Duy <[email protected]>
+
+ * vi.po: Update Vietnamese translation
+
+2008-03-23 Priit Laes <plaes at svn dot mate dot org>
+
+ * et.po: Translation updated by Ivar Smolin
+
+2008-03-20 Priit Laes <plaes at svn dot mate dot org>
+
+ * et.po: Translation updated by Ivar Smolin
+
+2008-03-15 Alexander Nyakhaychyk <[email protected]>
+
+ * be.po: Updated Belarusian Translation.
+
+2008-03-10 Ani Peter <[email protected]>
+
+ * ml.po: Updated Malayalam Translation
+
+2008-03-09 Vasiliy Faronov <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2008-03-09 Gabor Kelemen <[email protected]>
+
+ * hu.po: Translation updated
+
+2008-03-08 Claude Paroz <[email protected]>
+
+ * fr.po: Fix in French translation.
+
+2008-03-08 Laurent Dhima <[email protected]>
+
+ * sq.po: Updated Albanian Translation.
+
+2008-03-08 Petr Kovar <[email protected]>
+
+ * cs.po: Updated Czech translation by Kamil Paral.
+
+2008-03-07 Mugurel Tudor <[email protected]>
+
+ *ro.po: Updated Romanian translation
+ by Mişu Moldovan <[email protected]>
+
+2008-03-06 Stéphane Raimbault <[email protected]>
+
+ * fr.po: Fixed French translation.
+
+2008-03-05 Stéphane Raimbault <[email protected]>
+
+ * fr.po: Updated French translation.
+
+2008-03-05 Rahul Bhalerao <[email protected]>
+
+ * mr.po: Updated Marathi Translations by Sandeep Shedmake.
+
+2008-03-05 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2008-03-04 Nikos Charonitakis <[email protected]>
+
+ * el.po: Updated Greek translation.
+
+2008-03-03 Philip Withnall <[email protected]>
+
+ * en_GB.po: Updated British English translation.
+
+2008-03-02 Åsmund Skjæveland <[email protected]>
+
+ * nn.po: Updated Norwegian Nynorsk translation.
+
+2008-03-02 Luca Ferretti <[email protected]>
+
+ * it.po: Updated Italian translation.
+
+2008-03-02 Kenneth Nielsen <[email protected]>
+
+ * da.po: Updated Danish translation
+
+2008-03-02 Gintautas Miliauskas <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2008-02-29 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2008-02-24 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2008-02-23 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation.
+
+2008-02-19 Priit Laes <plaes at svn dot mate dot org>
+
+ * et.po: Translation updated by Ivar Smolin
+
+2008-02-17 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2008-02-16 Leonardo Ferreira Fontenelle <[email protected]>
+
+ * pt_BR.po: Brazilian Portuguese translation updated by Hugo Doria.
+
+2008-02-17 Ihar Hrachyshka <[email protected]>
+
+ * [email protected]: Updated Belarusian Latin translation.
+
+2008-02-15 Runa Bhattacharjee <[email protected]>
+
+ * kn.po: Added Kannada Translations by Shankar Prasad
+ * LINGUAS: Added Kannada (kn) to the list of languages.
+
+2008-02-15 Changwoo Ryu <[email protected]>
+
+ * ko.po: Updated Korean translation.
+
+2008-02-14 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2008-02-14 Arangel Angov <[email protected]>
+
+ * mk.po: Updated Macedonian translation.
+
+2008-02-14 Pawan Chitrakar <[email protected]>
+
+ * ne.po: Updated Nepali Translation.
+
+2008-02-13 Yannig Marchegay <[email protected]>
+
+ * oc.po: Updated Occitan translation.
+
+2008-02-13 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2008-02-11 Inaki Larranaga Murgoitio <[email protected]>
+
+ * eu.po: Updated Basque translation.
+
+2008-02-10 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2008-02-10 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2008-02-10 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-02-10 Hendrik Brandt <[email protected]>
+
+ * de.po: Updated German translation.
+
+2008-02-07 Artur Flinta <[email protected]>
+
+ * pl.po: Updated Polish translation by MATE PL Team.
+
+2008-02-02 Duarte Loreto <[email protected]>
+
+ * pt.po: Updated Portuguese translation.
+
+2008-02-02 Yannig Marchegay <[email protected]>
+
+ * oc.po: Updated Occitan translation.
+
+2008-02-02 Leonardo Ferreira Fontenelle <[email protected]>
+
+ * pt_BR.po: Brazilian Portuguese translation updated by Vladimir Melo.
+
+2008-02-2 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-02-01 Baris Cicek <[email protected]>
+
+ * tr.po: Updated Turkish translation by Serdar Cicek
+
+2008-02-01 Chao-Hsiung Liao <[email protected]>
+
+ * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+ * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2008-02-01 Amitakhya Phukan <[email protected]>
+
+ * LINGUAS: Added as to LINGUAS.
+ * as.po: Updated assamese translations.
+
+2008-01-31 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-01-29 Jonh Wendell <[email protected]>
+
+ * pt_BR.po: Brazilian Portuguese translation updated by Vladimir Melo.
+
+2008-01-29 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2008-01-28 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2008-01-27 Maxim Dziumanenko <[email protected]>
+
+ * uk.po: Update Ukrainian translation.
+
+2008-01-27 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2008-01-27 Jovan Naumovski <[email protected]>
+
+ * mk.po: Updated Macedonian translation.
+
+2008-01-27 Priit Laes <plaes at svn dot mate dot org>
+
+ * et.po: Translation updated by Ivar Smolin
+
+2008-01-26 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2008-01-25 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2008-01-24 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2008-01-24 Danishka Navin <[email protected]>
+
+ * LINGUAS: Added si (Sinhala)
+
+2008-01-24 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2008-01-23 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Dutch translation updated by Wouter Bolsterlee.
+
+2008-01-23 Priit Laes <plaes at svn dot mate dot org>
+
+ * et.po: Translation updated by Ivar Smolin
+
+2008-01-21 Stéphane Raimbault <[email protected]>
+
+ * fr.po: Updated French translation.
+
+2008-01-21 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2008-01-18 Gil Forcada <[email protected]>
+
+ * tr.po: Updated Turkish translation to pass msgfmt -cv.
+
+2008-01-18 Gil Forcada <[email protected]>
+
+ * ca.po: Updated Catalan translation.
+
+2008-01-18 Inaki Larranaga Murgoitio <[email protected]>
+
+ * eu.po: Updated Basque translation.
+
+2008-01-15 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2008-01-14 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2008-01-14 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2008-01-12 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2008-01-09 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2008-01-07 Kjartan Maraas <[email protected]>
+
+ * POTFILES.in: Add missing files.
+ * nb.po: Update.
+
+2008-01-06 Ihar Hrachyshka <[email protected]>
+
+ * [email protected]: Updated Belarusian Latin translation.
+
+2008-01-04 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2008-01-03 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2007-12-31 Yannig Marchegay <[email protected]>
+
+ * oc.po: Updated Occitan translation.
+
+2007-12-31 Inaki Larranaga Murgoitio <[email protected]>
+
+ * eu.po: Updated Basque translation.
+
+2007-12-28 Priit Laes <plaes at svn dot mate dot org>
+
+ * et.po: Translation updated by Ivar Smolin echo
+
+2007-12-28 Thierry Randrianiriana <[email protected]>
+
+ * mg.po: Updated Malagasy translation.
+
+2007-12-26 Seán de Búrca <[email protected]>
+
+ * ga.po: Added Irish translation.
+ * LINGUAS: Added Irish.
+
+2007-12-24 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2007-12-23 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2007-12-22 Leonardo Ferreira Fontenelle <[email protected]>
+
+ * pt_BR.po: Brazilian Portuguese translation updated by Hugo Doria and
+ myself.
+
+2007-12-18 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2007-12-17 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2007-12-13 Leonardo Ferreira Fontenelle <[email protected]>
+
+ * pt_BR.po: Translation of "status bar" fixed by Rodrigo Flores.
+
+2007-12-06 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2007-12-01 Ihar Hrachyshka <[email protected]>
+
+ * [email protected]: Updated Belarusian Latin translation.
+
+2007-11-27 Matej Urbančič <[email protected]>
+
+ * sl.po: Updated Slovenian translation.
+
+2007-11-25 Jorge Gonzalez <[email protected]>
+
+ * es/es.po: Updated Spanish translation
+
+2007-11-21 Yannig Marchegay <[email protected]>
+
+ * oc.po: Updated Occitan translation
+
+2007-11-11 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2007-11-09 Ihar Hrachyshka <[email protected]>
+
+ * [email protected]: Updated Belarusian Latin translation.
+
+2007-11-03 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2007-11-01 Jorge Gonzalez <[email protected]>
+
+ * es/es.po: Updated Spanish translation
+
+2007-11-01 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2007-11-01 Gabor Kelemen <[email protected]>
+
+ * hu.po: Translation updated
+
+2007-10-31 Gintautas Miliauskas <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2007-10-31 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2007-10-29 Kjartan Maraas <[email protected]>
+
+ * POTFILES.in: Add missing file.
+ * nb.po: Updated Norwegian bokmål translation.
+
+2007-10-28 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2007-10-27 Kjartan Maraas <[email protected]>
+
+ * POTFILES.in: Remove a file.
+ * nb.po: Updated Norwegian bokmål translation.
+
+2007-10-25 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2007-10-24 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2007-10-23 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Youssef Chahibi.
+
+2007-10-21 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Youssef Chahibi.
+
+2007-10-15 Matej Urbančič <[email protected]>
+
+ * sl.po: Updated Slovenian translation.
+
+2007-10-16 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2007-10-07 Kenneth Nielsen <[email protected]>
+
+ * da.po: Updated Danish translation
+
+2007-09-23 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation (fix for bug #479254).
+
+2007-09-22 Changwoo Ryu <[email protected]>
+
+ * ko.po: Updated Korean translation.
+
+2007-09-20 Luca Ferretti <[email protected]>
+ * it.po: Updated Italian translation fixing some
+ typos.
+
+2007-09-17 Luca Ferretti <[email protected]>
+
+ * it.po: Updated Italian translation by
+ Francesco Marletta <[email protected]>
+
+2007-09-17 Gintautas Miliauskas <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2007-09-16 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Alexander Shopov <[email protected]>
+
+2007-09-16 Yannig Marchegay <[email protected]>
+
+ * oc.po: Updated Occitan translation
+
+2007-09-15 Mugurel Tudor <[email protected]>
+
+ * ro.po: Updated Romanian translation
+ by Mişu Moldovan <[email protected]>
+
+2007-09-13 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Youssef Chahibi.
+
+2007-09-13 Claude Paroz <[email protected]>
+
+ * sk.po: Updated Slovak translation on behalf of Peter Tuharsky
+
+2007-09-13 Laurent Dhima <[email protected]>
+
+ * sq.po: Updated Albanian translation.
+
+2007-09-10 Maxim Dziumanenko <[email protected]>
+
+ * uk.po: Update Ukrainian translation.
+
+2007-09-09 Kenneth Nielsen <[email protected]>
+
+ * da.po: Updated Danish translation
+
+2007-09-07 Goran Rakić <[email protected]>
+
+ * sr.po, [email protected]: Updated Serbian translation.
+
+2007-09-06 Priit Laes <[email protected]>
+
+ * et.po: Estonian translation updates by Ivar Smolin
+
+2007-09-05 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2007-09-05 Kjartan Maraas <[email protected]>
+
+ * POTFILES.in: Add ev-jobs.c
+ * nb.po: Updated Norwegian bokmål translation.
+
+2007-09-02 Gil Forcada <[email protected]>
+
+ * ca.po: Updated catalan translation.
+
+2007-08-28 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2007-08-27 Duarte Loreto <[email protected]>
+
+ * pt.po: Updated Portuguese translation.
+
+2007-08-23 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2007-08-16 Stéphane Raimbault <[email protected]>
+
+ * fr.po: Updated French translation.
+
+2007-08-15 Hendrik Richter <[email protected]>
+
+ * de.po: Updated German translation.
+
+2007-08-15 Hendrik Richter <[email protected]>
+
+ * de.po: intltool-update de
+
+2007-08-05 Leonardo Ferreira Fontenelle <[email protected]>
+
+ * pt_BR.po: s/_Conteúdo/S_umário; see bug #461308.
+
+2007-08-05 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Fixed wrong translation.
+
+2007-08-04 Raphael Higino <[email protected]>
+
+ * pt_BR.po: Updated Brazilian Portuguese translation
+
+2007-08-03 Danishka Navin <[email protected]>
+
+ * si.po: Added Sinhala translation by Danishka Navin
+ * LINGUAS: Added "si".
+
+2007-08-03 Ihar Hrachyshka <[email protected]>
+
+ * [email protected]: Added Belarusian Latin translation.
+
+2007-07-28 Inaki Larranaga Murgoitio <[email protected]>
+
+ * eu.po: Updated Basque translation
+
+2007-07-26 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated Simplified Chinese translation
+
+2007-07-16 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Dutch translation updated by Wouter Bolsterlee.
+
+2007-07-16 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2007-07-11 Gabor Kelemen <[email protected]>
+
+ * hu.po: Translation updated.
+
+2007-07-09 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2007-07-09 I. Felix <[email protected]>
+
+ * ta.po: Tamil Translation updated by Tirumurthi Vasudevan
+
+2007-07-06 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2007-07-03 Jovan Naumovski <[email protected]>
+
+ * mk.po: Updated Macedonian translation.
+
+2007-07-01 Nguyễn Thái Ngọc Duy <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2007-07-01 Sunil Mohan Adapa <[email protected]>
+
+ * te.po: Added Telugu translation done by
+ Bharat Kumar <[email protected]>.
+
+2007-06-29 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2007-06-29 Pema Geyleg <[email protected]>
+
+ * dz.po: Updated dzongkha translation
+
+2007-06-28 Artur Flinta <[email protected]>
+
+ * pl.po: Updated Polish translation by MATE PL Team.
+
+2007-06-28 Priit Laes <[email protected]>
+
+ * et.po: Estonian translation update by Ivar Smolin.
+
+2007-06-26 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2007-06-24 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2007-06-23 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2007-06-18 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2007-06-18 I Felix <[email protected]>
+
+ * ta.po: Updated Tamil Translation.
+
+2007-06-14 Pema Geyleg <[email protected]>
+
+ * dz.po: Updated dzongkha translation.
+
+2007-06-04 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2007-06-02 Jordi Mas <[email protected]>
+
+ * ca.po: Some fixes for the Catalan translation.
+
+2007-05-27 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2007-05-23 Priit Laes <[email protected]>
+
+ * et.po: Updated Estonian translation by Ivar Smolin <[email protected]>.
+
+2007-05-22 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation.
+
+2007-05-19 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2007-05-17 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2007-05-15 David Lodge <[email protected]>
+
+ * en_GB.po: Updated British English translation
+
+2007-05-15 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2007-05-10 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2007-05-10 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2007-05-08 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation
+
+2007-05-08 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation from
+ Espen Stefansen.
+
+2007-04-25 Christophe Merlet <[email protected]>
+
+ * oc.po: Added Occitan translation from
+ Yannig MARCHEGAY <[email protected]>.
+ * LINGUAS: Added "oc" (Occitan).
+
+2007-04-23 Jorge Gonzalez <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2007-04-23 Luca Ferretti <[email protected]>
+
+ * it.po: Updated Italian translation by Francesco Marletta.
+
+2007-04-22 David Lodge <[email protected]>
+
+ * en_GB.po: Updated British English translation
+
+2007-04-21 Leonardo Ferreira Fontenelle <[email protected]>
+
+ * pt_BR.po: Fixes in Brazilian Portuguese translation by Washington
+ Lins <[email protected]> and me (Leonardo F. Fontenelle
+
+2007-04-21 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2007-04-20 Jakub Friedl <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2007-04-15 Kostas Papadimas <[email protected]>
+
+ * el.po: Updated Greek translation
+
+2007-04-12 Priit Laes <[email protected]>
+
+ * et.po: Updated Estonian translation by Ivar Smolin <[email protected]>.
+
+2007-04-10 Jakub Friedl <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2007-04-06 Jakub Friedl <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2007-04-03 Jakub Friedl <[email protected]>
+
+ * cs.po: Updated Czech Translation.
+
+2007-04-02 Josep Puigdemont i Casamajó <[email protected]>
+
+ * ca.po: Updated Catalan translation by
+ Gil Forcada <[email protected]>.
+
+2007-03-30 Inaki Larranaga Murgoitio <[email protected]>
+
+ * eu.po: Updated Basque translation.
+
+2007-03-27 Claudio Saavedra <[email protected]>
+
+ * es.po: Updated Spanish translation by Jorge González.
+
+2007-03-25 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2007-03-21 Pema Geyleg <[email protected]>
+
+ * dz.po: Updated Dzongkha Translation.
+
+2007-03-12 Goran Rakić <[email protected]>
+
+ * sr.po, [email protected]: Updated Serbian translation, by
+ Igor Nestorović <[email protected]>
+
+2007-03-11 Mugurel Tudor <[email protected]>
+
+ * ro.po: Updated Romanian translation by
+ Mişu Moldovan <[email protected]>
+
+2007-03-10 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2007-03-06 Thierry Randrianiriana <[email protected]>
+
+ * mg.po: Updated Malagasy translation.
+
+2007-03-04 Gintautas Miliauskas <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2007-03-04 Erdal Ronahi <[email protected]>
+
+ * ku.po: Updated Kurdish translation
+
+2007-03-04 Chao-Hsiung Liao <[email protected]>
+
+ * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+ * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2007-03-03 Artur Flinta <[email protected]>
+
+ * pl.po: Updated Polish translation by MATE PL Team.
+
+2007-03-03 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation.
+
+2007-03-01 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2007-03-01 Changwoo Ryu <[email protected]>
+
+ * ko.po: Updated Korean translation.
+
+2007-02-28 Matic Zgur <[email protected]>
+
+ * sl.po: Updated Slovenian translation.
+
+2007-02-28 Nguyễn Thái Ngọc Duy <[email protected]>
+
+ * vi.po: Updated Vietnamese translation by Phạm Thành Long <[email protected]>.
+
+2007-02-27 Gintautas Miliauskas <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2007-02-27 Hendrik Richter <[email protected]>
+
+ * de.po: Updated German translation, by
+ Christian Kintner <[email protected]>
+
+2007-02-25 Josep Puigdemont i Casamajó <[email protected]>
+
+ * ca.po: Updated Catalan translation by
+ Gil Forcada <[email protected]>.
+
+2007-02-25 Priit Laes <[email protected]>
+
+ * et.po: Updated Estonian translation by Ivar Smolin <[email protected]>.
+
+2007-02-25 Changwoo Ryu <[email protected]>
+
+ * ko.po: Updated Korean translation.
+
+2007-02-24 Gabor Kelemen <[email protected]>
+
+ * hu.po: Translation updated.
+
+2007-02-23 Kjartan Maraas <[email protected]>
+
+ * nb.po: Fix mangled header.
+
+2007-02-22 Maxim Dziumanenko <[email protected]>
+
+ * uk.po: Updated Ukrainian translation.
+
+2007-02-22 Abel Cheung <[email protected]>
+
+ * zh_CN.po: Updated simplified Chinese translation on behalf of
+ Funda Wang.
+
+2007-02-20 Raphael Higino <[email protected]>
+
+ * pt_BR.po: Updated Brazilian Portuguese.
+
+2007-02-19 Artur Flinta <[email protected]>
+
+ * pl.po: Updated Polish translation by MATE PL Team.
+
+2007-02-19 Nguyễn Thái Ngọc Duy <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2007-02-18 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2007-02-17 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2007-02-16 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2007-02-15 Duarte Loreto <[email protected]>
+
+ * pt.po: Updated Portuguese translation.
+
+2007-02-14 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+ * POTFILES.in: Added missing file.
+
+2007-02-12 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Updated Dutch translation by Wouter Bolsterlee.
+
+2007-02-12 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2007-02-11 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Vladimir Petkov <[email protected]>
+
+2007-02-11 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2007-02-11 David Lodge <[email protected]>
+
+ * en_GB.po: Updated English (British) translation
+
+2007-02-11 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2007-02-11 Stéphane Raimbault <[email protected]>
+
+ * fr.po: Updated French translation.
+
+2007-02-10 Duarte Loreto <[email protected]>
+
+ * pt.po: Updated Portuguese translation.
+
+2007-02-09 David Lodge <[email protected]>
+
+ * en_GB.po: Updated English (British) translation
+
+2007-02-8 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2007-02-07 Changwoo Ryu <[email protected]>
+
+ * ko.po: Updated Korean translation.
+
+2007-02-06 Stéphane Raimbault <[email protected]>
+
+ * fr.po: Updated French translation by Jonathan Ernst and Claude
+ Paroz.
+
+2007-02-05 Priit Laes <[email protected]>
+
+ * et.po: Updated Estonian translation by Ivar Smolin <[email protected]>.
+
+2007-02-05 Pema Geyleg <[email protected]>
+
+ * dz.po: Updated Dzongkha Translation.
+
+2007-02-03 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2007-02-03 Ihar Hrachyshka <[email protected]>
+
+ * be.po: Updated Belarusian translation.
+
+2007-02-02 Dimitris Glezos <[email protected]>
+
+ * el.po: Updated Greek translation.
+
+2007-01-30 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2007-01-30 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Updated Dutch translation by Wouter Bolsterlee.
+
+2007-01-29 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2007-01-28 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2007-01-27 Priit Laes <[email protected]>
+
+ * et.po: Updated Estonian translation by Ivar Smolin <[email protected]>.
+
+2007-01-27 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2007-01-25 Nickolay V. Shmyrev <[email protected]>
+
+ * POTFILES.in: Added impress-document to POTFILES.
+
+2007-01-23 David Lodge <[email protected]>
+
+ * en_GB.po: Updated English (British) translation
+
+2007-01-23 Stéphane Raimbault <[email protected]>
+
+ * fr.po: Updated French Translation.
+
+2007-01-23 Priit Laes <[email protected]>
+
+ * et.po: Updated Estonian translation by Ivar Smolin <[email protected]>.
+
+2007-01-20 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2007-01-18 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2007-01-17 Gabor Kelemen <[email protected]>
+
+ * hu.po: Translation updated.
+
+2007-01-16 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2007-01-15 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation.
+
+2007-01-15 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2007-01-14 Jovan Naumovski <[email protected]>
+
+ * mk.po: Updated Macedonian translation.
+
+2007-01-13 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2007-01-12 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+ * POTFILES.in: Added missing files.
+
+2007-01-12 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2007-01-11 Nickolay V. Shmyrev <[email protected]>
+
+ * be.po: Fixes bug #395105. Thanks to
+ Damien Carbery <[email protected]>.
+
+2007-01-11 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2007-01-10 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2007-01-10 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2007-01-09 Priit Laes <[email protected]>
+
+ * et.po: Estonian translation update by Ivar Smolin <[email protected]>.
+
+2007-01-09 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2007-01-08 Nickolay V. Shmyrev <[email protected]>
+
+ * POTFILES.in:
+
+2007-01-08 David Lodge <[email protected]>
+
+ * en_GB.po: Updated English (British) translation
+
+2007-01-07 Priit Laes <[email protected]>
+
+ * et.po: Updated Estonian translation.
+
+2007-01-06 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2007-01-05 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2007-01-05 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Vladimir Petkov <[email protected]>
+
+2007-01-03 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation by Khaled Hosny.
+
+2006-12-31 Jovan Naumovski <[email protected]>
+
+ * mk.po: Updated Macedonian translation.
+
+2006-12-29 David Lodge <[email protected]>
+
+ * en_GB.po: Updated English (British) translation
+
+2006-12-28 Kjartan Maraas <[email protected]>
+
+ * POTFILES.in: Add missing files.
+ * POTFILES.skip: Here too.
+ * nb.po: Updated Norwegian bokmål translation.
+
+2006-12-28 David Lodge <[email protected]>
+
+ * en_GB.po: Updated English (British) translation
+
+2006-12-28 Josep Puigdemont i Casamajó <[email protected]>
+
+ * ca.po: Updated Catalan translation by
+ Gil Forcada <[email protected]>.
+
+2006-12-27 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation.
+
+2006-12-26 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2006-12-25 Jovan Naumovski <[email protected]>
+
+ * mk.po: Updated Macedonian translation.
+
+2006-12-25 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2006-12-24 Djihed Afifi <[email protected]>
+
+ * ar.po: Updated Arabic Translation.
+
+2006-12-24 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Updated Dutch translation by Wouter Bolsterlee.
+
+2006-12-22 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-12-20 Raivis Dejus <[email protected]>
+
+ * lv.po: Updated Latvian Translation.
+
+2006-12-20 Ales Nyakhaychyk <[email protected]>
+
+ * be.po: Updated Belarusian Translation by Ihar Hrachyshka.
+
+2006-12-19 Matic Žgur <[email protected]>
+
+ * sl.po: Updated Slovenian translation.
+
+2006-12-18 Djihed Afifi <[email protected]>
+
+ * ar.po: Added Arabic Translation.
+ * LINGUAS: Added ar.
+
+2006-12-17 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2006-12-17 Gabor Kelemen <[email protected]>
+
+ * hu.po: Translation updated.
+
+2006-12-15 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2006-12-15 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2006-12-15 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-12-14 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2006-12-13 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Updated Dutch translation by Wouter Bolsterlee.
+
+2006-12-11 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-12-11 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2006-12-11 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2006-12-09 Thierry Randrianiriana <[email protected]>
+
+ * mg.po: Updated Malagasy translation.
+
+2006-12-09 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2006-12-07 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-12-05 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Updated Dutch translation by Wouter Bolsterlee.
+
+2006-11-29 Dimitris Glezos <[email protected]>
+
+ * el.po: Updated Greek translation
+
+2006-11-19 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2006-11-19 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2006-11-17 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Updated Dutch translation by Wouter Bolsterlee.
+
+2006-11-04 Josep Puigdemont i Casamajó <[email protected]>
+
+ * ca.po: Updated Catalan translation by
+ Gil Forcada <[email protected]>.
+
+2006-10-30 Jakub Friedl <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2006-10-29 Satoru SATOH <[email protected]>
+
+ * ja.po: Fixed mismatched plural forms.
+
+2006-10-26 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2006-10-20 Thierry Randrianiriana <[email protected]>
+
+ * mg.po: Added Malagasy translation.
+ * LINGUAS: Added 'mg'.
+
+2006-10-17 Kjartan Maraas <[email protected]>
+
+ * POTFILES.in: Add impress/zip.c
+ * nb.po: Updated Norwegian bokmål translation.
+
+2006-10-04 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-09-28 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2006-09-20 Alessio Frusciante <[email protected]>
+
+ * it.po: Updated Italian translation by
+ Francesco Marletta <[email protected]>.
+
+2006-09-12 Kostas Papadimas <[email protected]>
+
+ * el.po: Fixed typos by Dimitris Glezos <[email protected]>
+
+2006-09-10 Ole Laursen <[email protected]>
+
+ * da.po: Updated Danish translation.
+
+2006-09-10 Vladimer Sichinava <[email protected]>
+
+ * ka.po: Updated Georgian translation.
+
+2006-09-10 David Lodge <[email protected]>
+
+ * en_GB.po: Updated English (British) translation.
+
+2006-09-06 Pema Geyleg <[email protected]>
+
+ * dz.po: Updated Dzongkha translation
+
+2006-09-05 Åsmund Skjæveland <[email protected]>
+
+ * nn.po: Updated Norwegian Nynorsk translation.
+
+2006-09-04 Roozbeh Pournader <[email protected]>
+
+ * fa.po: Update Persian translation by Meelad Zakaria.
+
+2006-09-04 Mugurel Tudor <[email protected]>
+
+ * ro.po: Updated Romanian translation by
+ Mişu Moldovan <[email protected]>
+
+2006-09-03 Lucas Rocha <[email protected]>
+
+ * pt_BR.po: Updated Brazilian Portuguese translation
+ by Leonardo Ferreira Fontenelle <[email protected]>
+
+2006-09-03 Abel Cheung <[email protected]>
+
+ * zh_HK.po: Updated Chinese (Hong Kong) translation.
+ * zh_TW.po: Updated Chinese (Taiwan) translation.
+
+2006-09-01 Nikos Charonitakis <[email protected]>
+
+ * el.po: Updated Greek translation.
+
+2006-08-31 Chao-Hsiung Liao <[email protected]>
+
+ * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+ * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2006-08-30 Josep Puigdemont i Casamajó <[email protected]>
+
+ * ca.po: Updated Catalan translation.
+
+2006-08-30 Gabor Kelemen <[email protected]>
+
+ * hu.po: Translation updated.
+
+2006-08-29 Duarte Loreto <[email protected]>
+
+ * pt.po: Updated Portuguese translation.
+
+2006-08-29 Raivis Dejus <[email protected]>
+
+ * lv.po: Updated Latvian translation.
+
+2006-08-29 Rajesh Ranjan <[email protected]>
+
+ * hi.po: Updated Hindi Translation.
+
+2006-08028 Rahul Bhalerao <[email protected]>
+
+ * mr.po: Updated Marathi translation.
+
+2006-08-28 Rahul Bhalerao <[email protected]>
+
+ * mr.po: Added the file and updated Marathi translation.
+ * LINGUAS: Added an entry for Marathi(mr).
+
+2006-08-27 Christophe Merlet <[email protected]>
+
+ * fr.po: Updated french translation from
+ Claude Paroz <[email protected]>.
+
+2006-08-27 Khandakar Mujahidul Islam <[email protected]>
+
+ * bn.po: Updated Bengali translation
+
+2006-08-27 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2006-08-25 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2006-08-24 Leonid Kanter <[email protected]>
+
+ * ru.po: Updated Russian translation
+
+2006-08-24 Matic Žgur <[email protected]>
+
+ * sl.po: Updated Slovenian translation.
+
+2003-08-24 Subhransu Behera <[email protected]>
+
+ * or.po: Updated Oriya Translation.
+
+2003-08-23 Subhransu Behera <[email protected]>
+
+ * or.po: Added and Updated Oriya Translation.
+ * LINGUAS: Added Oriya (or) to The List of Languages.
+
+2006-08-22 Runa Bhattacharjee <[email protected]>
+
+ * bn_IN.po: Updated Bengali India Translation.
+
+2006-08-19 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Alexander Shopov <[email protected]>
+
+2006-08-18 Ani Peter <[email protected]>
+
+ * ml.po: Added and Updated the Malayalam translation
+ * LINGUAS: Added Malayalam(ml) to the list of Languages
+
+2006-08-17 Baris Cicek <[email protected]>
+
+ * tr.po: Updated Turkish Translation
+
+2006-08-17 Satoru SATOH <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2006-08-16 Žygimantas Beručka <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2006-08-16 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2006-08-16 Gabor Kelemen <[email protected]>
+
+ * hu.po: Translation updated.
+
+2006-08-15 Hendrik Richter <[email protected]>
+
+ * de.po: Updated German translation.
+
+2006-08-15 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2006-08-15 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-08-14 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated Simplified Chinese translation.
+
+2006-08-13 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2006-08-13 Jovan Naumovski <[email protected]>
+
+ * mk.po: Updated Macedonian translation.
+
+2006-08-13 Changwoo Ryu <[email protected]>
+
+ * ko.po: Updated Korean translation.
+
+2006-08-10 Runa Bhattacharjee <[email protected]>
+
+ * bn_IN.po: Updated Bengali India Translation.
+
+2006-08-10 Guntupalli Karunakar <[email protected]>
+
+ * dz.po: Updated Dzongkha translation by
+ Dzongkhalinux team, DIT
+
+2006-08-09 Jovan Naumovski <[email protected]>
+
+ * mk.po: Fixed/Updated Macedonian translation.
+
+2006-08-09 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2006-08-07 Inaki Larranaga <[email protected]>
+
+ * eu.po: Updated Basque translation.
+
+2006-08-05 Chao-Hsiung Liao <[email protected]>
+
+ * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+ * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2006-08-05 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2006-08-04 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-08-04 Jakub Friedl <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2006-08-04 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Translation updated by Wouter Bolsterlee.
+
+2006-08-01 Jovan Naumovski <[email protected]>
+
+ * mk.po: Updated/Fixed Macedonian Translation
+
+2006-07-31 Jakub Friedl <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2006-07-31 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-07-30 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-07-30 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2006-07-30 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2006-07-30 Arangel Angov <[email protected]>
+
+ * sl.po: Added Slovenian translation.
+
+2006-07-28 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-07-27 Hendrik Richter <[email protected]>
+
+ * de.po: Updated German translation.
+
+2006-07-27 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2006-07-26 Nikos Charonitakis <[email protected]>
+
+ * el.po: Updated Greek translation.
+
+2006-07-25 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-07-25 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2006-07-24 Josep Puigdemont i Casamajó <[email protected]>
+
+ * ca.po: Updated Catalan translation by
+ Gil Forcada <[email protected]>
+
+2006-07-24 Jakub Friedl <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2006-07-24 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-07-23 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2006-07-23 Changwoo Ryu <[email protected]>
+
+ * ko.po: Updated Korean translation.
+
+2006-07-21 Christophe Merlet <[email protected]>
+
+ * fr.po: Updated french translation.
+
+2006-07-21 Josep Puigdemont i Casamajó <[email protected]>
+
+ * ca.po: Fixed plurals in Catalan translation by Gil Forcada.
+
+2006-07-20 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2006-07-19 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-07-18 Guntupalli Karunakar <[email protected]>
+
+ * dz.po: Updated Dzongkha translation by
+ Dzongkhalinux team, DIT
+
+2006-07-18 Jakub Friedl <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2006-07-18 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-07-17 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-07-17 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-07-17 Benoît Dejean <[email protected]>
+
+ * fr.po: Updated French translation.
+
+2006-07-16 Daniel Nylander <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2006-07-14 Priit Laes <[email protected]>
+
+ * et.po: Translation updated.
+
+2006-07-11 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2006-07-11 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2006-07-10 Ahmad Riza H Nst <[email protected]>
+
+ * id.po: Updated.
+
+2006-07-09 Chao-Hsiung Liao <[email protected]>
+
+ * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+ * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2006-07-08 Benoît Dejean <[email protected]>
+
+ * fr.po: Updated French translation.
+
+2006-07-09 Changwoo Ryu <[email protected]>
+
+ * ko.po: Updated Korean translation by Young-Ho Cha.
+
+2006-07-07 Ales Nyakhaychyk <[email protected]>
+
+ * be.po: Updated Belarusian translation.
+
+2006-07-07 Inaki Larranaga <[email protected]>
+
+ * eu.po: Updated Basque translation.
+
+2006-07-05 Jovan Naumovski <[email protected]>
+
+ * mk.po: Updated Macedonian translation.
+
+2006-07-05 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Rostislav Raykov <[email protected]>
+
+2006-07-03 Runa Bhattacharjee <[email protected]>
+
+ * bn_IN.po: Added Bengali India Translation
+ * LINGUAS: Added Bengali India (bn_IN) to the list of languages.
+
+2006-07-02 Benoît Dejean <[email protected]>
+
+ * fr.po: Updated French translation.
+
+2006-07-02 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2006-07-01 Pawan Chitrakar <[email protected]>
+
+ * ne.po: Updated Nepali Translation
+
+2006-06-27 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation.
+
+2006-06-20 Priit Laes <[email protected]>
+
+ * et.po: Translation updated.
+
+2006-06-19 I. Felix <[email protected]>
+
+ * ta.po: Updated Tamil translation.
+
+2006-06-15 Hendrik Richter <[email protected]>
+
+ * de.po: Updated German translation.
+
+2006-06-14 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Translation updated by Wouter Bolsterlee.
+
+2006-06-11 Jakub Friedl <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2006-06-10 Josep Puigdemont Casamajó <[email protected]>
+
+ * ca.po: Updated Catalan translation by
+ Gil Forcada <[email protected]>
+
+2006-06-09 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2006-06-07 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2006-06-06 Jayaradha <[email protected]>
+
+ * ta.po: Updated Tamil translation.
+
+2006-06-04 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated Simplified Chinese translation.
+
+2006-05-30 Pema Geyleg <[email protected]>
+
+ * dz.po: Updated Dzongkha translation.
+
+2006-05-30 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2006-05-29 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-05-29 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-05-28 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2006-05-27 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2006-05-27 Pema Geyleg <[email protected]>
+
+ * dz.po: Updated Dzongkha translation.
+
+2006-05-27 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2006-05-26 Inaki Larranaga <[email protected]>
+
+ * eu.po: Updated Basque translation.
+
+2006-05-25 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2006-05-25 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2006-05-25 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2006-05-25 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2006-05-21 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2006-05-18 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2006-05-16 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2006-05-15 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-05-15 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-05-13 Chao-Hsiung Liao <[email protected]>
+
+ * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+ * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+
+2006-05-11 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-05-10 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-05-09 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-05-06 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-05-05 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated Simplified Chinese translation.
+
+2006-05-05 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-05-04 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2006-05-03 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Vladimir Petkov <[email protected]>
+
+2006-05-03 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-04-30 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2006-04-29 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2006-04-24 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-04-23 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2006-04-21 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2006-04-21 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-04-21 Wouter Bolsterlee <[email protected]>
+
+ * nl.po: Translation updated by Wouter Bolsterlee.
+
+2006-04-18 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-04-17 Kjartan Maraas <[email protected]>
+
+ * LINGUAS: Remove obsolete entry for no_NO.
+ * no.po: And the translation.
+
+2006-04-17 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2006-04-16 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2006-04-14 Åsmund Skjæveland <[email protected]>
+
+ * nn.po: Added Norwegian Nynorsk translation.
+ * LINGUAS: Added nn.
+
+2006-04-13 Funda Wang <[email protected]>
+
+ * POTFILES.in: Removed obsolete files.
+
+2006-04-12 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2006-03-22 Tommi Vainikainen <[email protected]>
+
+ * dz.po: Added Dzongkha translation from Pema Geyleg.
+
+2006-03-19 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2006-03-18 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2006-03-16 Jérémy Ar Floc'h <[email protected]>
+
+ * br.po: Added Breton translation.
+
+2006-03-14 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2006-03-13 Mugurel Tudor <[email protected]>
+
+ * ro.po: Updated Romanian translation by
+ Mişu Moldovan <[email protected]
+
+2006-03-13 Runa Bhattacharjee <[email protected]>
+
+ * bn.po: Updated Bengali (bn) Translation by Progga.
+
+2006-03-13 Priit Laes <[email protected]>
+
+ * et.po: Translation updated.
+
+2006-03-12 Benoît Dejean <[email protected]>
+
+ * fr.po: Updated French translation.
+
+2006-03-12 Roozbeh Pournader <[email protected]>
+
+ * fa.po: Updated Persian translation by Elnaz Sarbar and reviewed by
+ Farzaneh Sarafraz.
+
+2006-03-11 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2006-03-11 Guilherme de S. Pastore <[email protected]>
+
+ * pt_BR.po: Updated Brazilian Portuguese translation.
+
+2006-03-10 Duarte Loreto <[email protected]>
+
+ * pt.po: Updated Portuguese translation.
+
+2006-03-06 Rajesh Ranjan <[email protected]>
+
+ * hi.po: Updated Hindi Translation.
+
+2006-03-08 Daniel Nylander <[email protected]>
+
+ * sv.po: Swedish translation updated.
+
+2006-03-08 Gabor Kelemen <[email protected]>
+
+ * hu.po: Hungarian translation updated.
+
+2006-03-08 Ole Laursen <[email protected]>
+
+ * da.po: Updated Danish translation.
+
+2006-03-07 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2006-03-05 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Alexander Shopov <[email protected]>
+
+2006-03-04 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2006-03-02 Hendrik Richter <[email protected]>
+
+ * de.po: Updated German translation.
+
+2006-03-02 Maxim Dziumanenko <[email protected]>
+
+ * uk.po: Updated Ukrainian translation.
+
+2006-03-01 Vladimer Sichinava <[email protected]>
+
+ * ka.po: Added Georgian translation.
+
+2006-02-28 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2006-02-28 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2006-02-28 Clytie Siddall <[email protected]>
+
+ * vi.po: Added Latvian translation.
+
+2006-02-26 Artur Flinta <[email protected]>
+
+ * pl.po: Updated Polish translation by MATE PL Team.
+
+2006-02-25 Rhys Jones <[email protected]>
+
+ * cy.po: Updated Welsh translation.
+
+2006-02-25 Chao-Hsiung Liao <[email protected]>
+
+ * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+ * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+
+2006-02-23 Laurent Dhima <[email protected]>
+
+ * sq.po: Updated Albanian translation.
+
+2006-02-23 Satoru SATOH <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2006-02-21 Slobodan D. Sredojevic <[email protected]>
+
+ * sr.po, [email protected]: Updated Serbian translation
+
+2006-02-21 Inaki Larranaga <[email protected]>
+
+ * eu.po: Updated Basque translation.
+
+2006-02-01 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2006-02-19 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+ * no.po: Same.
+
+2006-02-19 Josep Puigdemont i Casamajó <[email protected]>
+
+ * ca.po: Updated Catalan translation.
+
+2006-02-18 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-02-18 Josep Puigdemont i Casamajó <[email protected]>
+
+ * ca.po: Updated Catalan translation.
+
+2006-02-17 Žygimantas Beručka <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2006-02-17 Kostas Papadimas <[email protected]>
+
+ * el.po: Updated Greek Translation by Stylianos Papanastasiou <[email protected]>
+
+2006-02-15 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated Simplified Chinese translation.
+
+2006-02-15 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2006-02-14 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Reinout en Tino.
+
+2006-02-14 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2006-02-14 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2006-02-13 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2006-02-13 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2006-02-13 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2006-02-07 Raphael Higino <[email protected]>
+
+ * pt_BR.po: Updated Brazilian Portuguese translation.
+
+2006-02-04 Ole Laursen <[email protected]>
+
+ * da.po: Fixed some bugs in the Danish translation based on
+ comments by Martin Willemoes Hansen.
+
+2006-02-02 Laurent Dhima <[email protected]>
+
+ * sq.po: Updated Albanian translation.
+
+2006-02-01 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation.
+
+2006-01-30 Žygimantas Beručka <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2006-01-30 Slobodan D. Sredojevic <[email protected]>
+
+ * sr.po, [email protected]: Updated Serbian translation
+
+2006-01-29 Ole Laursen <[email protected]>
+
+ * da.po: Updated Danish translation.
+
+2006-01-28 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2006-01-28 Duarte Loreto <[email protected]>
+
+ * pt.po: Updated Portuguese translation.
+
+2006-01-27 Evandro Fernandes Giovanini <[email protected]>
+
+ * pt_BR.po: Updated Brazilian Portuguese translation.
+
+2006-01-27 Chao-Hsiung Liao <[email protected]>
+
+ * zh_TW.po: Updated Traditional Chinese translation(Taiwan).
+ * zh_HK.po: Updated Traditional Chinese translation(Hong Kong).
+
+2006-01-24 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation by <[email protected]>
+
+2006-01-23 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated Simplified Chinese translation.
+
+2006-01-21 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2006-01-20 Satoru SATOH <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2006-01-12 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2006-01-11 Gabor Kelemen <[email protected]>
+
+ * hu.po: Hungarian translation updated.
+
+2006-01-09 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2006-01-09 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Vladimir Petkov <[email protected]>
+
+2006-01-07 Chao-Hsiung Liao <[email protected]>
+
+ * zh_TW.po: Updated Traditional Chinese Translation.(Taiwan)
+ * zh_HK.po: Updated Traditional Chinese Translation.(Hong Kong)
+
+2006-01-04 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2006-01-02 Josep Puigdemont i Casamajó <josep.puigdemont.gmail.com>
+
+ * ca.po: Updated Catalan translation by Gil Forcada
+
+2005-12-31 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2005-12-31 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2005-12-29 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2005-12-29 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-12-28 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+ * no.po: Same.
+
+2005-12-28 Abel Cheung <[email protected]>
+
+ * zh_HK.po: New Chinese (Hong Kong) translation from MATE HK Team
+
+2005-12-28 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2005-12-28 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2005-12-28 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-12-26 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2005-12-26 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-12-26 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2005-12-21 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2005-12-21 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2005-12-21 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-12-20 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2005-12-15 Ales Nyakhaychyk <[email protected]>
+
+ * be.po: Updated Belarusian translation.
+
+2005-12-13 Christophe Merlet <[email protected]>
+
+ * fr.po: Updated french translation.
+
+2005-12-11 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-12-11 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2005-12-02 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-12-02 Žygimantas Beručka <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2005-11-27 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated SPanish translation. (QA Team)
+
+2005-11-26 Frank Arnold <[email protected]>
+
+ * de.po: Fixed wrong translation of "Properties".
+ Closes #322163 reported by Jürg Billeter.
+
+2005-11-25 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish tranlation (QA Team)
+
+2005-11-23 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Vladimir Petkov <[email protected]>
+
+2005-11-19 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-11-19 Chao-Hsiung Liao <[email protected]>
+
+ * zh_TW.po: Updated Traditional Chinese translation.
+
+2005-11-18 Ales Nyakhaychyk <[email protected]>
+
+ * be.po: Added Belarusian translation.
+
+2005-11-18 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+ * no.po: Same
+
+2005-11-17 Adam Weinberger <[email protected]>
+
+ * POTFILES.in: Added missing file.
+ * en_CA.po: Updated Canadian English translation.
+
+2005-11-16 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2005-11-15 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2005-11-15 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2005-11-15 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+ * no.po: Same.
+
+2005-11-06 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation.
+
+2005-11-02 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-11-01 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-11-01 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Reinout van Schouwen.
+
+2005-10-29 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-10-27 Erdal Ronahi <[email protected]>
+
+ * ku.po: Added Kurdish translation.
+
+2005-10-27 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated Simplified Chinese translation.
+
+2005-10-26 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2005-10-25 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2005-10-22 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-10-20 Runa Bhattacharjee <[email protected]>
+
+ * bn.po: Added Bengali (bn) Translation
+ by Progga <[email protected]>
+
+2005-10-15 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated.
+
+2005-09-30 Adam Weinberger <[email protected]>
+
+ * POTFILES.in: Added missing files.
+ * en_CA.po: Updated Canadian English translation.
+
+2005-09-18 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Updated Thai translation (merge from mate-2-12 branch).
+
+2005-09-17 Christian Rose <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2005-09-12 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2005-09-05 Iñaki Larrañaga <[email protected]>
+
+ * eu.po: Updated Basque translation.
+
+2005-09-05 Alessio Frusciante <[email protected]>
+
+ * it.po: Added Italian translation by
+ Francesco Marletta <[email protected]>.
+
+2005-09-03 Danilo Šegan <[email protected]>
+
+ * sr.po, [email protected]: Updated.
+
+2005-09-02 Dan Damian <[email protected]>
+
+ * ro.po: Added Romanian translation by Misu Moldovan.
+
+2005-08-31 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Vladimir Petkov <[email protected]>
+
+2005-08-30 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Vladimir Petkov <[email protected]>
+
+2005-08-29 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-08-29 Telsa Gwynne <[email protected]>
+
+ * cy.po: Updated Welsh translation.
+
+2005-08-29 Christophe Merlet <[email protected]>
+
+ * fr.po: Updated french translation from
+ Vincent Untz <[email protected]>
+
+2005-08-29 Duarte Loreto <[email protected]>
+
+ * pt.po: Added Portuguese translation.
+
+2005-08-28 Mohammad DAMT <[email protected]>
+
+ * id.po: Updated Indonesian translation.
+
+2005-08-28 Yair Hershkovitz <[email protected]>
+
+ * he.po: Updated Hebrew translation.
+
+2005-08-27 Mohammad DAMT <[email protected]>
+
+ * id.po: Added Indonesian translation
+
+2005-08-27 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-08-27 Evandro Fernandes Giovanini <[email protected]>
+
+ * pt_BR.po: Updated Brazilian Portuguese translation.
+
+2005-08-25 Jordi Mallach <[email protected]>
+
+ * ca.po: Updated Catalan translation.
+
+2005-08-23 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2005-08-23 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2005-08-22 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-08-22 Changwoo Ryu <[email protected]>
+
+ * ko.po: Updated Korean translation by Young-Ho Cha.
+
+2005-08-20 Roozbeh Pournader <[email protected]>
+
+ * fa.po: Updated Persian translation by Meelad Zakaria
+ <[email protected]> and myself.
+
+2005-08-20 Artur Flinta <[email protected]>
+
+ * pl.po: Updated Polish translation by MATE PL Team.
+
+2005-08-19 Tommi Vainikainen <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2005-08-19 Terance Sola <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+ * no.po: Same.
+
+2005-08-19 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2005-08-19 Žygimantas Beručka <[email protected]>
+
+ * lt.po: Updated Lithuanian translation, forgot some stuff.
+
+2005-08-19 Žygimantas Beručka <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2005-08-18 Maxim Dziumanenko <[email protected]>
+
+ * uk.po: Updated Ukrainian translation.
+
+2005-08-18 Gabor Kelemen <[email protected]>
+
+ * hu.po: Hungarian translation updated.
+
+2005-08-18 Chao-Hsiung Liao <[email protected]>
+
+ * zh_TW.po: Updated Traditional Chinese translation.
+
+2005-08-18 Hendrik Brandt <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-08-18 Nikos Charonitakis <[email protected]>
+
+ * el.po: Updated Greek translation.
+
+2005-08-17 Laurent Dhima <[email protected]>
+
+ * sq.po: Updated Albanian translation.
+
+2005-08-17 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2005-08-17 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2005-08-16 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-08-16 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-08-16 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2005-08-16 Laurent Dhima <[email protected]>
+
+ * sq.po: Updated Albanian translation.
+
+2005-08-16 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-08-16 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated Simplified Chinese translation.
+
+2005-08-15 Hendrik Brandt <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-08-14 Baris Cicek <[email protected]>
+
+ * tr.po: Updated Turkish Translation from Bulen Sener
+
+2005-08-12 Chao-Hsiung Liao <[email protected]>
+
+ * zh_TW.po: Updated Traditional Chinese translation.
+
+2005-08-09 Hendrik Brandt <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-08-06 Yair Hershkovitz <[email protected]>
+
+ * he.po: Added Hebrew translation.
+
+2005-08-06 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2005-08-05 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-08-04 Abel Cheung <[email protected]>
+
+ * zh_TW.po: Fix language team reference and my email address.
+
+2005-08-04 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+ * no.po: Same
+
+2005-08-04 Gabor Kelemen <[email protected]>
+
+ * hu.po: Hungarian translation updated.
+
+2005-08-03 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2005-08-02 Terance Sola <[email protected]>
+
+ * nb.po: Updated Norwegian Bokmål translation.
+ * no.po: Same.
+
+2005-08-01 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2005-07-30 Nikos Charonitakis <[email protected]>
+
+ * el.po: Updated Greek translation by
+ Stylianos Papanastasiou <[email protected]>
+
+2005-07-30 Clytie Siddall <[email protected]>
+
+ * vi.po: Updated Vietnamese translation.
+
+2005-07-30 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-07-29 James Ogley <[email protected]>
+
+ * en_GB.po: Updated British English translation.
+
+2005-07-28 Ilkka Tuohela <[email protected]>
+
+ * fi.po: Bulk change to some Finnish translations.
+
+2005-07-28 Laurent Dhima <[email protected]>
+
+ * sq.po: Added Albanian translation.
+
+2005-07-28 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Vladimir Petkov <[email protected]>
+
+2005-07-27 Raphael Higino <[email protected]>
+
+ * pt_BR.po: Updated Brazilian Portuguese translation.
+
+2005-07-27 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-07-27 Priit Laes <[email protected]>
+
+ * et.po: Translation updated by Ivar Smolin.
+
+2005-07-27 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated Simplified Chinese translation.
+
+2005-07-27 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2005-07-27 Priit Laes <[email protected]>
+
+ * et.po: Translation updated.
+
+2005-07-27 Priit Laes <[email protected]>
+
+ * et.po: Translation added by Sven Sapelson.
+
+2005-07-26 Tommi Vainikainen <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2005-07-26 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-07-26 Artur Flinta <[email protected]>
+
+ * pl.po: Updated Polish translation by MATE PL Team.
+
+2005-07-26 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-07-25 Jordi Mallach <[email protected]>
+
+ * ca.po: Updated Catalan translation by
+ Gil Forcada <[email protected]>.
+
+2005-07-25 Artur Flinta <[email protected]>
+
+ * pl.po: Updated Polish translation by MATE PL Team.
+
+2005-07-25 Ankit Patel <[email protected]>
+
+ * gu.po: Updated Gujarati Translation.
+
+2005-07-24 Christian Rose <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2005-07-24 Hendrik Brandt <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-07-24 Tommi Vainikainen <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2005-07-24 Artur Flinta <[email protected]>
+
+ * pl.po: Updated Polish translation by MATE PL Team.
+
+2005-07-24 Danilo Šegan <[email protected]>
+
+ * sr.po, [email protected]: Added Serbian translation.
+
+2005-07-22 Ignacio Casal Quinteiro <[email protected]>
+
+ * gl.po: Updated Galician Translation.
+
+2005-07-22 Pawan Chitrakar <[email protected]>
+
+ * ne.po: Added Nepali Translation
+
+2005-07-22 Žygimantas Beručka <[email protected]>
+
+ * lt.po: Updated Lithuanian translation by Justina Klingaitė.
+
+2005-07-21 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-07-20 Ankit Patel <[email protected]>
+
+ * gu.po: Gujarati Translation Added.
+
+2005-07-19 James Ogley <[email protected]>
+
+ * en_GB.po: Updated British English translation.
+
+2005-07-18 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated Simplified Chinese translation.
+
+2005-07-17 Christophe Merlet <[email protected]>
+
+ * fr.po: Updated french translation from
+ Vincent Carriere <[email protected]>.
+
+2005-07-17 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+20055-07-15 Rajesh Ranjan <[email protected]>
+
+ * hi.po: Hindi translation added
+
+2005-07-15 Amanpreet Singh Brar <[email protected]>
+
+ * pa.po: Punjabi Translation is added
+
+2005-07-14 Guilherme de S. Pastore <[email protected]>
+
+ * pt_BR.po: fixed Brazilian Portuguese menu name, so
+ that it's consistent with the English version and also
+ HIG-compliant.
+
+2005-07-14 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-07-12 Gabor Kelemen <[email protected]>
+
+ * hu.po: Hungarian translation updated.
+
+2005-07-12 Tommi Vainikainen <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2005-07-10 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-07-09 Hendrik Brandt <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-07-09 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-07-08 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-07-08 Kjartan Maraas <[email protected]>
+
+ * POTFILES.in: Add ev-properties.c
+ * nb.po: Update
+ * no.po: Same
+
+2005-07-07 Jordi Mallach <[email protected]>
+
+ * ca.po: Updated Catalan translation by
+ Gil Forcada <[email protected]>.
+
+2005-07-07 Iñaki Larrañaga <[email protected]>
+
+ * eu.po: Added Basque translation.
+
+2005-07-04 Christian Rose <[email protected]>
+
+ * POTFILES.in: Sorted and added missing files, and removed no longer
+ existing ones.
+ * sv.po: Updated Swedish translation.
+
+2005-07-04 Hendrik Richter <[email protected]>
+
+ * de.po: Fixed German translation by
+ Jens Seidel <[email protected]>.
+
+2005-06-30 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian bokmål translation.
+ * no.po: Same
+
+2005-06-25 Marcel Telka <[email protected]>
+
+ * sk.po: Added Slovak translation by Mário VrablanskÜ.
+
+2005-06-25 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2005-06-23 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-06-24 Gabor Kelemen <[email protected]>
+
+ * hu.po: Hungarian translation updated.
+
+2005-06-22 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2005-06-22 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-06-19 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Cleaned up some copied translations.
+
+2005-06-18 Chao-Hsiung Liao <[email protected]>
+
+ * zh_TW.po: Updated Traditional Chinese translation.
+
+2005-06-17 Theppitak Karoonboonyanan <[email protected]>
+
+ * th.po: Added Thai translation by
+ Isriya Paireepairit <[email protected]>.
+
+2005-06-17 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-06-14 Chao-Hsiung Liao <[email protected]>
+
+ * zh_TW.po: Updated Traditional Chinese translation
+
+2005-06-12 Kjartan Maraas <[email protected]>
+
+ * nb.po: Update Norwegian bokmål translation
+ * no.po: Update Norwegian bokmål translation
+
+2005-06-12 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-06-10 Nickolay V. Shmyrev <[email protected]>
+
+ * POTFILES.in, POTFILES.skip:
+
+ Doesn't translate mdvi library. It's not ready yet.
+
+2005-06-10 Martin Kretzschmar <[email protected]>
+
+ * POTFILES.in: update.
+
+2005-06-08 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-06-05 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-06-03 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-06-01 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-05-29 Funda Wang <[email protected]>
+
+ * zh_CN.po: Updated Simplified Chinese translation.
+
+2005-05-24 Maxim Dziumanenko <[email protected]>
+
+ * uk.po: Ukrainian translation added.
+
+2005-05-23 Gabor Kelemen <[email protected]>
+
+ * hu.po: Hungarian translation updated.
+
+2005-05-23 Gabor Kelemen <[email protected]>
+
+ * hu.po: Hungarian translation added by "Last-Translator: \n".
+
+2005-05-22 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-05-22 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2005-05-19 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-05-18 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Updated Russian translation.
+
+2005-05-18 Kjartan Maraas <[email protected]>
+
+ * nb.po: Update
+ * no.po: Update
+
+2005-05-17 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-05-17 Kostas Papadimas <[email protected]>
+
+ *el.po: Updated Greek translation by
+ Stylianos Papanastasiou <[email protected]>
+
+2005-05-15 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-05-14 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Vladimir Petkov <[email protected]>
+
+2005-05-14 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-05-12 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-05-11 Kostas Papadimas <[email protected]>
+
+ *el.po Updated Greek Translation
+
+2005-05-07 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2005-05-06 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-05-05 Kostas Papadimas <[email protected]>
+
+ *el.po: Updated Greek translation by
+ Stylianos Papanastasiou <[email protected]>
+
+2005-05-05 Josep Puigdemont <[email protected]>
+
+ * ca.po: Updated Catalan translation by Gil Forcada
+
+2005-05-04 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-05-03 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-05-02 James Bowes <[email protected]>
+
+ * POTFILES.in: Add cut-n-paste/zoom-control/ephy-zoom.h
+
+2005-05-01 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-04-30 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-04-28 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-04-26 Takeshi AIHANA <[email protected]>
+
+ * ja.po: Updated Japanese translation.
+
+2005-04-25 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-04-24 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-04-24 Christopher Orr <[email protected]>
+
+ * en_GB.po: Updated British English translation.
+
+2005-04-24 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-04-22 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-04-22 Adam Weinberger <[email protected]>
+
+ * POTFILES.in: Add files in the dvi/mdvi-lib directory.
+
+2005-04-22 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-04-21 Gareth Owen <[email protected]>
+
+ * en_GB.po: Updated British English translation.
+
+2005-04-21 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Vladimir Petkov <[email protected]>
+
+2005-04-20 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-04-19 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-04-19 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-04-17 Christopher Orr <[email protected]>
+
+ * en_GB.po: Updated British English translation.
+
+2005-04-17 Francisco Javier Fernandez <[email protected]>
+
+ * es.po: Updated Spanish translation.
+
+2005-04-15 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-04-15 Christian Rose <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2005-04-15 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-04-12 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-04-13 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-04-13 Åœygimantas Beručka <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2005-04-11 Kjartan Maraas <[email protected]>
+
+ * nb.po: Update these
+ * no.po: ....
+
+2005-04-11 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Vladimir Petkov <[email protected]>
+
+2005-04-11 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-04-09 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-04-08 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-04-05 Nickolay V. Shmyrev <[email protected]>
+
+ * ru.po: Created Russian translation.
+
+2005-04-06 Christian Rose <[email protected]>
+
+ * sv.po: Updated Swedish translation.
+
+2005-04-05 Åœygimantas Beručka <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2005-04-04 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-04-03 Raphael Higino <[email protected]>
+
+ * pt_BR.po: Updated Brazilian Portuguese translation.
+
+2005-04-02 Abel Cheung <[email protected]>
+
+ * zh_TW.po: Updated traditional Chinese translation from MATE HK Team
+
+2005-04-02 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-04-01 Steve Murphy <[email protected]>
+
+ * rw.po: Added Kinyarwanda translation.
+
+2005-04-01 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-04-01 Tommi Vainikainen <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2005-04-01 Pablo Saratxaga <[email protected]>
+
+ * wa.po: Added Walloon file
+
+2005-03-30 Åœygimantas Beručka <[email protected]>
+
+ * lt.po: Updated Lithuanian translation.
+
+2005-03-30 Abel Cheung <[email protected]>
+
+ * zh_TW.po: Updated traditional Chinese translation from MATE HK Team
+ * bg.po: Mark wrong entry as fuzzy (msgfmt check failed).
+
+2005-03-27 Josep Puigdemont <[email protected]>
+
+ * ca.po: Updated Catalan translation.
+
+2005-03-26 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Authoritative update of Evince Spanish translation.
+
+2005-03-26 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-03-25 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-03-25 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-03-24 Kjartan Maraas <[email protected]>
+
+ * POTFILES.in: Add ev-sidebar-links.c
+ * nb.po: Update
+
+2005-03-18 Josep Puigdemont <[email protected]>
+
+ * ca.po: Updated Catalan translation by
+ Gil Forcada <[email protected]>
+
+2005-03-17 Kostas Papadimas <[email protected]>
+
+ * el.po: Updated Greek translation by
+ Stylianos Papanastasiou <[email protected]>
+
+2005-03-16 Åœygimantas Beručka <[email protected]>
+
+ * lt.po: Added Lithuanian translation.
+
+2005-03-14 Tommi Vainikainen <[email protected]>
+
+ * fi.po: Updated Finnish translation.
+
+2005-03-12 Changwoo Ryu <[email protected]>
+
+ * ko.po: Added Korean translation.
+
+2005-03-05 Christophe Merlet <[email protected]>
+
+ * fr.po: Updated French translation.
+
+2005-03-05 Alexander Shopov <[email protected]>
+
+ * bg.po: Updated Bulgarian translation by
+ Vladimir Petkov <[email protected]>
+
+2005-03-04 Kjartan Maraas <[email protected]>
+
+ * nb.po: Update
+ * no.po: Update
+
+2005-03-03 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-02-28 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-02-28 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-02-28 Kostas Papadimas <[email protected]>
+
+ * el.po: Updated the Greek translation>
+
+2005-02-26 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-02-26 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-02-25 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-02-25 Sebastien Bacher <[email protected]>
+
+ * fr.po:
+ french translation by Vincent Carriere <[email protected]>.
+
+2005-02-25 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-02-24 Wei-Lun Chao <[email protected]>
+
+ * zh_TW.po: Added Traditional Chinese translation.
+
+2005-02-25 Jordi Mallach <[email protected]>
+
+ * ca.po: Updated Catalan translation by
+ Gil Forcada <[email protected]>.
+
+2005-02-24 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-02-23 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-02-23 Tommi Vainikainen <[email protected]>
+
+ * fi.po: Updated Finnish translation, fixed keybindings in Finnish
+ translation.
+
+2005-02-20 Kostas Papadimas <[email protected]>
+
+ * el.po: Added the Greek translation by
+ Stylianos Papanastasiou <[email protected]>
+
+2005-02-19 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-02-18 Kjartan Maraas <[email protected]>
+
+ * nb.po: Update
+ * no.po: Update
+
+2005-02-18 Tommi Vainikainen <[email protected]>
+
+ * fi.po: Added Finnish translation.
+
+2005-02-17 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-02-17 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-02-17 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-02-17 Alexander Shopov <[email protected]>
+
+ * bg.po: Added Bulgarian translation by
+ Rostislav Raykov <[email protected]>
+
+2005-02-15 David Lodge <[email protected]>
+
+ * en_GB.po: Added English (British) translation.
+
+2005-02-14 Jordi Mallach <[email protected]>
+
+ * ca.po: Updated Catalan translation by
+ Gil Forcada <[email protected]>.
+
+2005-02-14 Kjartan Maraas <[email protected]>
+
+ * nb.po: Update
+ * no.po: Update
+
+2005-02-13 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-02-12 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-02-12 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-02-11 Jordi Mallach <[email protected]>
+
+ * ca.po: Updated Catalan translation by
+ Gil Forcada <[email protected]>.
+
+2005-02-10 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-02-09 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-02-08 Kjartan Maraas <[email protected]>
+
+ * nb.po: Update
+ * no.po: Update
+
+2005-02-08 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-02-08 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-02-08 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-02-06 Ole Laursen <[email protected]>
+
+ * da.po: Updated Danish translation.
+
+2005-02-04 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-02-03 Jordi Mallach <[email protected]>
+
+ * ca.po: Added Catalan translation by
+ Gil Forcada <[email protected]>.
+
+2005-02-03 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-02-02 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-02-02 Kjartan Maraas <[email protected]>
+
+ * nb.po: Update
+ * no.po: Update
+
+2005-01-31 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-01-30 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Updated Spanish translation by Daniel Fernandez.
+
+2005-01-28 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-01-27 Adam Weinberger <[email protected]>
+
+ * POTFILES.in: Remove reference to removed file.
+ * en_CA.po: Updated Canadian English translation.
+
+
+2005-01-27 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-01-27 Christian Rose <[email protected]>
+
+ * POTFILES.in: Added missing file entries.
+ * sv.po: Updated Swedish translation.
+
+2005-01-26 Ole Laursen <[email protected]>
+
+ * da.po: Added Danish translation.
+
+2005-01-26 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-01-26 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-01-23 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-01-22 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-01-21 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-01-21 Francisco Javier F. Serrador <[email protected]>
+
+ * es.po: Added Spanish translation contributed by Antonio Ognio.
+
+2005-01-21 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation updated by Tino Meinen.
+
+2005-01-20 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-01-19 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-01-19 Kjartan Maraas <[email protected]>
+
+ * nb.po: Updated Norwegian translation.
+
+2005-01-19 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-01-16 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-01-16 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-01-15 Kjartan Maraas <[email protected]>
+
+ * POTFILES.in: Add shell/ev-history.c
+ * nb.po: Update
+
+2005-01-13 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-01-11 Frank Arnold <[email protected]>
+
+ * de.po: Updated German translation.
+
+2005-01-11 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-01-11 Kjartan Maraas <[email protected]>
+
+ * nb.po: Add this.
+
+2005-01-10 Frank Arnold <[email protected]>
+
+ * de.po: Merged translations from ggv and gpdf, minor updates.
+
+2005-01-09 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-01-08 Martin Kretzschmar <[email protected]>
+
+ * POTFILES.in: Added ev-print-job.c.
+
+2005-01-08 Satoru SATOH <[email protected]>
+
+ * ja.po: Added Japanese translation.
+
+2005-01-07 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-01-07 Christian Rose <[email protected]>
+
+ * POTFILES.in: Added missing files reported by
+ 'intltool-update --maintain".
+ * sv.po: Updated Swedish translation.
+
+2005-01-06 Miloslav Trmac <[email protected]>
+
+ * cs.po: Updated Czech translation.
+
+2005-01-05 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Updated Canadian English translation.
+
+2005-01-02 Raphael Higino <[email protected]>
+
+ * pt_BR.po: Updated Brazilian Portuguese translation.
+
+2005-01-02 Miloslav Trmac <[email protected]>
+
+ * cs.po: Added Czech translation.
+
+2004-12-28 Vincent van Adrighem <[email protected]>
+
+ * nl.po: Translation added by Tino Meinen.
+
+2004-12-25 Raphael Higino <[email protected]>
+
+ * pt_BR.po: Added Brazilian Portuguese translation.
+
+2004-12-23 Adam Weinberger <[email protected]>
+
+ * en_CA.po: Added Canadian English translation.
+
+2004-12-23 Funda Wang <[email protected]>
+
+ * zh_CN.po: Added Simplified Chinese translation.
+
+2004-12-22 Christian Rose <[email protected]>
+
+ * sv.po: Added Swedish translation.
+
+2004-12-22 Christian Rose <[email protected]>
+
+ * POTFILES.in: Added files that were missing according to
+ 'intltool-update --maintain'.
+ * .cvsignore: Added more files.
+
+2004-12-22 Martin Kretzschmar <[email protected]>
+
+ * evince.pot: remove from cvs.
+ * de.po: update a little.
+ * POTFILES.in: update.
+ * .cvsignore: add *.mo, *.pot.
diff --git a/po/LINGUAS b/po/LINGUAS
new file mode 100644
index 00000000..0434f8ac
--- /dev/null
+++ b/po/LINGUAS
@@ -0,0 +1,85 @@
+# please keep this list sorted alphabetically
+af
+ar
+as
+ast
+be
+be@latin
+bg
+bn
+bn_IN
+br
+ca
+ca@valencia
+cs
+cy
+da
+de
+dz
+el
+en_CA
+en_GB
+en@shaw
+eo
+es
+et
+eu
+fa
+fi
+fr
+ga
+gl
+gu
+he
+hi
+hu
+id
+it
+ja
+ka
+kk
+kn
+ko
+ks
+ku
+lt
+lv
+mai
+mg
+mk
+ml
+mn
+mr
+ms
+nb
+nds
+ne
+nl
+nn
+oc
+or
+pa
+pl
+ps
+pt
+pt_BR
+ro
+ru
+rw
+si
+sk
+sl
+sq
+sr
+sr@latin
+sv
+ta
+te
+th
+tr
+uk
+vi
+wa
+zh_CN
+zh_HK
+zh_TW
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 00000000..cd27f4fd
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,66 @@
+# List of source files containing translatable strings.
+# Please keep this file sorted alphabetically.
+[encoding: UTF-8]
+backend/comics/comics-document.c
+[type: gettext/ini] backend/comics/comicsdocument.evince-backend.in
+backend/djvu/djvu-document.c
+[type: gettext/ini] backend/djvu/djvudocument.evince-backend.in
+backend/dvi/dvi-document.c
+[type: gettext/ini] backend/dvi/dvidocument.evince-backend.in
+backend/pdf/ev-poppler.cc
+[type: gettext/ini] backend/pdf/pdfdocument.evince-backend.in
+backend/impress/impress-document.c
+[type: gettext/ini] backend/impress/impressdocument.evince-backend.in
+backend/impress/zip.c
+backend/ps/ev-spectre.c
+[type: gettext/ini] backend/ps/psdocument.evince-backend.in
+backend/tiff/tiff-document.c
+libdocument/ev-attachment.c
+libdocument/ev-document-factory.c
+libdocument/ev-file-helpers.c
+cut-n-paste/smclient/eggdesktopfile.c
+cut-n-paste/smclient/eggsmclient.c
+cut-n-paste/toolbar-editor/egg-editable-toolbar.c
+cut-n-paste/toolbar-editor/egg-toolbar-editor.c
+cut-n-paste/zoom-control/ephy-zoom.h
+data/evince.desktop.in.in
+data/org.mate.Evince.gschema.xml.in
+previewer/ev-previewer.c
+previewer/ev-previewer-window.c
+properties/ev-properties-main.c
+properties/ev-properties-view.c
+libmisc/ev-page-action.c
+libmisc/ev-page-action-widget.c
+libview/ev-loading-window.c
+libview/ev-print-operation.c
+libview/ev-jobs.c
+libview/ev-view-accessible.c
+libview/ev-view-presentation.c
+libview/ev-view.c
+shell/eggfindbar.c
+shell/ev-annotation-properties-dialog.c
+shell/ev-application.c
+shell/ev-history.c
+shell/ev-keyring.c
+shell/ev-convert-metadata.c
+shell/ev-navigation-action.c
+shell/ev-navigation-action-widget.c
+shell/ev-open-recent-action.c
+shell/ev-password-view.c
+shell/ev-properties-dialog.c
+shell/ev-properties-fonts.c
+shell/ev-properties-license.c
+shell/ev-sidebar-annotations.c
+shell/ev-sidebar-attachments.c
+shell/ev-sidebar-layers.c
+shell/ev-sidebar-links.c
+shell/ev-sidebar-thumbnails.c
+shell/ev-window.c
+shell/ev-window-title.c
+shell/ev-utils.c
+shell/main.c
+thumbnailer/evince-thumbnailer-comics.schemas.in
+thumbnailer/evince-thumbnailer-djvu.schemas.in
+thumbnailer/evince-thumbnailer-dvi.schemas.in
+thumbnailer/evince-thumbnailer-ps.schemas.in
+thumbnailer/evince-thumbnailer.schemas.in
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
new file mode 100644
index 00000000..637a7486
--- /dev/null
+++ b/po/POTFILES.skip
@@ -0,0 +1,16 @@
+data/evince.desktop.in
+backend/dvi/mdvi-lib/dviread.c
+backend/dvi/mdvi-lib/font.c
+backend/dvi/mdvi-lib/fontmap.c
+backend/dvi/mdvi-lib/gf.c
+backend/dvi/mdvi-lib/pagesel.c
+backend/dvi/mdvi-lib/paper.c
+backend/dvi/mdvi-lib/pk.c
+backend/dvi/mdvi-lib/sp-epsf.c
+backend/dvi/mdvi-lib/special.c
+backend/dvi/mdvi-lib/t1.c
+backend/dvi/mdvi-lib/tfm.c
+backend/dvi/mdvi-lib/tfmfile.c
+backend/dvi/mdvi-lib/tt.c
+backend/dvi/mdvi-lib/util.c
+backend/dvi/mdvi-lib/vf.c
diff --git a/po/af.po b/po/af.po
new file mode 100644
index 00000000..20175bca
--- /dev/null
+++ b/po/af.po
@@ -0,0 +1,1423 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Walter <[email protected]>, 2009
+# F Wolff <[email protected]>, 2009
+msgid ""
+msgstr ""
+"Project-Id-Version: 2.26\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2009-03-15 16:41+0000\n"
+"PO-Revision-Date: 2009-03-16 00:33+0200\n"
+"Last-Translator: F Wolff <[email protected]>\n"
+"Language-Team: [email protected]\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: af\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.3.1\n"
+
+#: ../backend/comics/comics-document.c:131
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Onbekende MIME-tipe"
+
+#: ../backend/comics/comics-document.c:165
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Nie 'n strokiesprent MIME-tipe nie: %s"
+
+#: ../backend/comics/comics-document.c:186
+msgid "File corrupted."
+msgstr "Lêer korrup."
+
+#: ../backend/comics/comics-document.c:198
+msgid "No files in archive."
+msgstr "Geen lêers in argief nie."
+
+#: ../backend/comics/comics-document.c:230
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Geen beelde in argief %s gevind nie"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Strokiesprente"
+
+#: ../backend/djvu/djvu-document.c:174
+msgid "DJVU document has incorrect format"
+msgstr "DJVU-dokument het 'n ongeldige formaat"
+
+#: ../backend/djvu/djvu-document.c:251
+msgid ""
+"The document is composed of several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+"Die dokument bestaan uit verskeie lêers. Kon nie toegang kry na een of meer "
+"van die lêers nie."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Djvu-dokumente"
+
+#: ../backend/dvi/dvi-document.c:106
+msgid "DVI document has incorrect format"
+msgstr "DVI-dokument het 'n ongeldige formaat"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI-dokumente"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:706
+msgid "Yes"
+msgstr "Ja"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:709
+msgid "No"
+msgstr "Nee"
+
+#: ../backend/pdf/ev-poppler.cc:783
+msgid "Type 1"
+msgstr "Tipe 1"
+
+#: ../backend/pdf/ev-poppler.cc:785
+msgid "Type 1C"
+msgstr "Tipe 1C"
+
+#: ../backend/pdf/ev-poppler.cc:787
+msgid "Type 3"
+msgstr "Tipe 3"
+
+#: ../backend/pdf/ev-poppler.cc:789
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:791
+msgid "Type 1 (CID)"
+msgstr "Tipe 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:793
+msgid "Type 1C (CID)"
+msgstr "Tipe 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:795
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:797
+msgid "Unknown font type"
+msgstr "Onbekende skriftipe"
+
+#: ../backend/pdf/ev-poppler.cc:823
+msgid "No name"
+msgstr "Geen naam"
+
+#: ../backend/pdf/ev-poppler.cc:831
+msgid "Embedded subset"
+msgstr "Ingebedde substel"
+
+#: ../backend/pdf/ev-poppler.cc:833
+msgid "Embedded"
+msgstr "Ingebed"
+
+#: ../backend/pdf/ev-poppler.cc:835
+msgid "Not embedded"
+msgstr "Nie ingebed nie"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF-dokumente"
+
+#: ../backend/impress/impress-document.c:303
+#: ../backend/tiff/tiff-document.c:114
+msgid "Invalid document"
+msgstr "Ongeldige dokument"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress-skyfies"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Geen fout nie"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Nie genoeg geheue nie"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "Kan nie zip-handtekening vind nie"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "Ongeldige zip-lêer"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr "Multi-lêer zips word nie ondersteun nie"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Kan nie die lêer oopmaak nie"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Kan nie data uit die lêer lees nie"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "Kan nie lêer in die zip-argief vind nie"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Onbekende probleem"
+
+#: ../backend/ps/ev-spectre.c:113
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Kon nie dokument “%s” oopmaak nie"
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Kon nie dokument “%s” stoor nie"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript-dokument"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Kon nie aanhegsel “%s” stoor nie: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Kon nie aanhegsel “%s” oopmaak nie: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Kon nie aanhegsel “%s” oopmaak nie"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Lêertipe %s (%s) word nie ondersteun nie"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Alle dokumente"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Alle lêers"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:439
+msgid "Co_nnect"
+msgstr "Ko_ppel"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:483
+msgid "Connect _anonymously"
+msgstr "Koppel _anoniem"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:492
+msgid "Connect as u_ser:"
+msgstr "Koppel as gebr_uiker:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:529
+msgid "_Username:"
+msgstr "Gebr_uikernaam:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:533
+msgid "_Domain:"
+msgstr "_Domein:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:538
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Wagwoord:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:553
+msgid "_Forget password immediately"
+msgstr "_Vergeet wagwoord dadelik"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:561
+msgid "_Remember password until you logout"
+msgstr "_Onthou wagwoord tot by afmelding"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:569
+msgid "_Remember forever"
+msgstr "_Onthou vir altyd"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Lêer is nie 'n geldige .desktop-lêer nie"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Nieherkende \"desktop\"-lêerweergawe '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Begin tans %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Toepassing aanvaar nie dokumente op die opdraglyn nie"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Nieherkende lanseeropsie: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"Kan nie dokument URI's na 'n 'Type=Link' \"desktop\"-inskrywing aangee nie"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Nie 'n loopbare item nie"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:224
+msgid "Disable connection to session manager"
+msgstr "Deaktiveer konneksie na sessiebestuurder"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:227
+msgid "Specify file containing saved configuration"
+msgstr "Spesifiseer lêer wat gestoorde konfigurasie bevat"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:227
+msgid "FILE"
+msgstr "LÊER"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:230
+msgid "Specify session management ID"
+msgstr "Spesifiseer sessiebestuurs-ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:230
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:244
+msgid "Session management options:"
+msgstr "Sessiebestuurskeuses:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:245
+msgid "Show session management options"
+msgstr "Wys keuses vir sessiebestuur"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:918
+#, c-format
+msgid "Show “_%s”"
+msgstr "Wys “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1381
+msgid "_Move on Toolbar"
+msgstr "_Skuif op nutsbalk"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1382
+msgid "Move the selected item on the toolbar"
+msgstr "Skuif die geselekteerde item op die nutsbalk"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1383
+msgid "_Remove from Toolbar"
+msgstr "Sk_rap vanaf nutsbalk"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1384
+msgid "Remove the selected item from the toolbar"
+msgstr "Skrap die geselekteerde item vanaf die nutsbalk"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1385
+msgid "_Delete Toolbar"
+msgstr "_Skrap nutsbalk"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1386
+msgid "Remove the selected toolbar"
+msgstr "Skrap die geselekteerde nutsbalk"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Skeier"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:117
+msgid "Running in presentation mode"
+msgstr "Hardloop in voorleggingsmodus"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5296
+msgid "Best Fit"
+msgstr "Beste passing"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Pas na bladsywydte"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4274
+#: ../shell/ev-window-title.c:149
+#, c-format
+msgid "Document Viewer"
+msgstr "Dokumentbekyker"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "Kyk na multibladsydokumente"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Oorheers dokumentbeperkings"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Oorheers dokumentbeperkings soos beperkings op kopiëring en druk."
+
+#: ../properties/ev-properties-main.c:113
+msgid "Document"
+msgstr "Dokument"
+
+#: ../properties/ev-properties-view.c:59
+msgid "Title:"
+msgstr "Titel:"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Location:"
+msgstr "Ligging:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Subject:"
+msgstr "Onderwerp:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Author:"
+msgstr "Outeur:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Keywords:"
+msgstr "Sleutelwoorde:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Producer:"
+msgstr "Vervaardiger:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Creator:"
+msgstr "Skepper:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Created:"
+msgstr "Geskep:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Modified:"
+msgstr "Gewysig:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Number of Pages:"
+msgstr "Aantal bladsye:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Optimized:"
+msgstr "Geoptimeer:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Format:"
+msgstr "Formaat:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Security:"
+msgstr "Sekuriteit:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Paper Size:"
+msgstr "Papiergrootte:"
+
+#: ../properties/ev-properties-view.c:202
+msgid "None"
+msgstr "Geen"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:227
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:271
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:275
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f duim"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:299
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, portret (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:306
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, landskap (%s)"
+
+#: ../libview/ev-jobs.c:949
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "Kon nie lêer “%s” skep nie: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Rol op"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Rol af"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Rol aansig op"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Rol aansig af"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Dokumentaansig"
+
+#: ../libview/ev-view.c:1417
+msgid "Go to first page"
+msgstr "Gaan na eerste bladsy"
+
+#: ../libview/ev-view.c:1419
+msgid "Go to previous page"
+msgstr "Gaan na vorige bladsy"
+
+#: ../libview/ev-view.c:1421
+msgid "Go to next page"
+msgstr "Gaan na volgende bladsy"
+
+#: ../libview/ev-view.c:1423
+msgid "Go to last page"
+msgstr "Gaan na laaste bladsy"
+
+#: ../libview/ev-view.c:1425
+msgid "Go to page"
+msgstr "Gaan na bladsy"
+
+#: ../libview/ev-view.c:1427
+msgid "Find"
+msgstr "Vind"
+
+#: ../libview/ev-view.c:1455
+#, c-format
+msgid "Go to page %s"
+msgstr "Gaan na bladsy %s"
+
+#: ../libview/ev-view.c:1461
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Gaan na %s in lêer “%s”"
+
+#: ../libview/ev-view.c:1464
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Gaan na lêer “%s”"
+
+#: ../libview/ev-view.c:1472
+#, c-format
+msgid "Launch %s"
+msgstr "Lanseer %s"
+
+#: ../libview/ev-view.c:2387
+msgid "End of presentation. Press Escape to exit."
+msgstr "Einde van voorlegging. Druk Escape om te verlaat."
+
+#: ../libview/ev-view.c:3280
+msgid "Jump to page:"
+msgstr "Spring na bladsy:"
+
+#: ../libview/ev-view.c:3543 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:267
+msgid "Loading..."
+msgstr "Laai tans..."
+
+#: ../shell/eggfindbar.c:146
+msgid "Search string"
+msgstr "Soekstring"
+
+#: ../shell/eggfindbar.c:147
+msgid "The name of the string to be found"
+msgstr "Die naam van die string om te vind"
+
+#: ../shell/eggfindbar.c:160
+msgid "Case sensitive"
+msgstr "Kassensitief"
+
+#: ../shell/eggfindbar.c:161
+msgid "TRUE for a case sensitive search"
+msgstr "WAAR vir 'n kassensitiewe soektog"
+
+#: ../shell/eggfindbar.c:168
+msgid "Highlight color"
+msgstr "Verligtingskleur"
+
+#: ../shell/eggfindbar.c:169
+msgid "Color of highlight for all matches"
+msgstr "Verligtingskleur vir alle passings"
+
+#: ../shell/eggfindbar.c:175
+msgid "Current color"
+msgstr "Huidige kleur"
+
+#: ../shell/eggfindbar.c:176
+msgid "Color of highlight for the current match"
+msgstr "Verligtingskleur vir die huidige passing"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Vind:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5030
+msgid "Find Pre_vious"
+msgstr "Vind vor_ige"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Vind vorige voorkoms van die soekstring"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5028
+msgid "Find Ne_xt"
+msgstr "Vind vo_lgende"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Vind volgende voorkoms van die soekstring"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "K_assensitief"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Wissel kassensitiewe soek"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Wagwoord vir dokument %s"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Open 'n onlangs gebruikte dokument"
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d van %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "van %d"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Hierdie dokument is gesluit en kan slegs gelees word deur die regte wagwoord "
+"in te tik."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "Sl_uit dokument oop"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Tik wagwoord in"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Wagwoord vereis"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"Die dokument “%s” is gesluit en vereis 'n wagwoord voordat dit oopgemaak kan "
+"word."
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "Vergeet wagwoord _dadelik"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _logout"
+msgstr "Onthou wagwoord tot by _afmelding"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "Onthou _vir altyd"
+
+#. Initial state
+#: ../shell/ev-print-operation.c:318
+msgid "Preparing to print ..."
+msgstr "Berei voor om te druk..."
+
+#: ../shell/ev-print-operation.c:320
+msgid "Finishing..."
+msgstr "Maak klaar..."
+
+#: ../shell/ev-print-operation.c:322
+#, c-format
+msgid "Printing page %d of %d..."
+msgstr "Druk tans bladsy %d van %d..."
+
+#: ../shell/ev-print-operation.c:1010
+msgid "Printing is not supported on this printer."
+msgstr "Druk word nie ondersteun op hierdie drukker nie."
+
+#: ../shell/ev-print-operation.c:1136 ../shell/ev-window.c:5081
+msgid "Print"
+msgstr "Druk"
+
+#: ../shell/ev-properties-dialog.c:57
+msgid "Properties"
+msgstr "Eienskappe"
+
+#: ../shell/ev-properties-dialog.c:91
+msgid "General"
+msgstr "Algemeen"
+
+#: ../shell/ev-properties-dialog.c:101
+msgid "Fonts"
+msgstr "Fonts"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Font"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "Vorder fontinligting in... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Aanhangsels"
+
+#: ../shell/ev-sidebar-layers.c:395
+msgid "Layers"
+msgstr "Lae"
+
+#: ../shell/ev-sidebar-links.c:340
+msgid "Print..."
+msgstr "Druk..."
+
+#: ../shell/ev-sidebar-links.c:720
+msgid "Index"
+msgstr "Indeks"
+
+#: ../shell/ev-sidebar-thumbnails.c:751
+msgid "Thumbnails"
+msgstr "Duimnaelskets"
+
+#: ../shell/ev-window.c:843
+#, c-format
+msgid "Page %s - %s"
+msgstr "Bladsy %s - %s"
+
+#: ../shell/ev-window.c:845
+#, c-format
+msgid "Page %s"
+msgstr "Bladsy %s"
+
+#: ../shell/ev-window.c:1267
+msgid "The document contains no pages"
+msgstr "Die dokument bevat geen bladsye nie"
+
+#: ../shell/ev-window.c:1491 ../shell/ev-window.c:1639
+msgid "Unable to open document"
+msgstr "Kan nie dokument oopmaak nie"
+
+#: ../shell/ev-window.c:1613
+#, c-format
+msgid "Loading document from %s"
+msgstr "Laai tans dokument vanaf %s"
+
+#: ../shell/ev-window.c:1751 ../shell/ev-window.c:1944
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Laai tans dokument af (%d%%)"
+
+#: ../shell/ev-window.c:1890
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Herlaai tans dokument vanaf %s"
+
+#: ../shell/ev-window.c:1923
+msgid "Failed to reload document."
+msgstr "Kon nie dokument “%s” herlaai nie."
+
+#: ../shell/ev-window.c:2072
+msgid "Open Document"
+msgstr "Open dokument"
+
+#: ../shell/ev-window.c:2133
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "Kon nie simboliese skakel “%s” skep nie: %s"
+
+#: ../shell/ev-window.c:2162
+msgid "Cannot open a copy."
+msgstr "Kan nie 'n kopie open nie."
+
+#: ../shell/ev-window.c:2402
+#, c-format
+msgid "Saving document to %s"
+msgstr "Stoor dokument na %s"
+
+#: ../shell/ev-window.c:2405
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Stoor aanhegsel na %s"
+
+#: ../shell/ev-window.c:2408
+#, c-format
+msgid "Saving image to %s"
+msgstr "Stoor beeld na %s"
+
+#: ../shell/ev-window.c:2453 ../shell/ev-window.c:2550
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Die lêer kon nie as “%s” gestoor word nie."
+
+#: ../shell/ev-window.c:2481
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Laai tans dokument op (%d%%)"
+
+#: ../shell/ev-window.c:2485
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Laai tans aanhegsel op (%d%%)"
+
+#: ../shell/ev-window.c:2489
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Laai tans beeld op (%d%%)"
+
+#: ../shell/ev-window.c:2596
+msgid "Save a Copy"
+msgstr "Stoor 'n kopie"
+
+#: ../shell/ev-window.c:2799
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d hangende taak in die ry"
+msgstr[1] "%d hangende take in die ry"
+
+#: ../shell/ev-window.c:2855 ../shell/ev-window.c:3965
+msgid "Failed to print document"
+msgstr "Druk van die dokument het gefaal"
+
+#: ../shell/ev-window.c:2912
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Druk tans taak “%s”"
+
+#: ../shell/ev-window.c:3109
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Wag totdat drukwerk “%s” klaarmaak voor afsluiting?"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Daar is %d druktake aktief. Wag totdat druktake klaar is voor afsluiting?"
+
+#: ../shell/ev-window.c:3124
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "As jy die venster toemaak, sal hangende druktake nie gedruk word nie."
+
+#: ../shell/ev-window.c:3128
+msgid "Cancel _print and Close"
+msgstr "Kanselleer _druk en maak toe"
+
+#: ../shell/ev-window.c:3132
+msgid "Close _after Printing"
+msgstr "Maak toe na druk"
+
+#: ../shell/ev-window.c:3735
+msgid "Toolbar Editor"
+msgstr "Nutsbalkredigeerder"
+
+#: ../shell/ev-window.c:3867
+msgid "There was an error displaying help"
+msgstr "Daar was 'n fout met die vertoon van die hulp"
+
+#: ../shell/ev-window.c:4270
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Dokumentbekyker.\n"
+"Gebruik poppler %s (%s)"
+
+#: ../shell/ev-window.c:4298
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince is Vry Sagteware; u kan dit herversprei en/of wysig onderhewig\n"
+"aan die voorwaardes vna die GNU Algemene Publieke Lisensie soos\n"
+"gepubliseer deur die Stigting vir Vry Sagteware; óf weergawe 2 van die\n"
+"Lisensie, óf (indien u verkies) enige latere weergawe.\n"
+
+#: ../shell/ev-window.c:4302
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince word versprei in die hoop dat dit nuttig sal wees, maar\n"
+"SONDER ENIGE WAARBORG; sonder selfs die geïmpliseerde waarborg\n"
+"van VERHANDELBAARHEID of GESKIKTHEID VIR 'N SPESIFIEKE DOEL.\n"
+"Sien die GNU Algemene Publieke Lisensie vir meer detail.\n"
+
+#: ../shell/ev-window.c:4306
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"U moes 'n kopie van die GNU Algemene Publieke Lisensie ontvang het saam met "
+"hierdie program; indien nie, skryf aan Free Software Foundation, Inc., 51 "
+"Franklin Street, Fifth Floor, Boston, MA 02110-1307, USA\n"
+
+#. Manually set name and icon in win32
+#: ../shell/ev-window.c:4330 ../shell/main.c:382
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4333
+msgid "© 1996-2007 The Evince authors"
+msgstr "© 1996-2007 Die outeurs van Evince"
+
+#: ../shell/ev-window.c:4339
+msgid "translator-credits"
+msgstr ""
+"Walter Leibbrandt\n"
+"Translate.org.za"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4557
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d gevind op hierdie bladsy"
+msgstr[1] "%d gevind op hierdie bladsy"
+
+#: ../shell/ev-window.c:4565
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% oor om te soek"
+
+#: ../shell/ev-window.c:4993
+msgid "_File"
+msgstr "_Lêer"
+
+#: ../shell/ev-window.c:4994
+msgid "_Edit"
+msgstr "R_edigeer"
+
+#: ../shell/ev-window.c:4995
+msgid "_View"
+msgstr "_Bekyk"
+
+#: ../shell/ev-window.c:4996
+msgid "_Go"
+msgstr "_Gaan"
+
+#: ../shell/ev-window.c:4997
+msgid "_Help"
+msgstr "_Hulp"
+
+#. File menu
+#: ../shell/ev-window.c:5000 ../shell/ev-window.c:5179
+#: ../shell/ev-window.c:5258
+msgid "_Open..."
+msgstr "_Open..."
+
+#: ../shell/ev-window.c:5001 ../shell/ev-window.c:5259
+msgid "Open an existing document"
+msgstr "Open 'n bestaande dokument"
+
+#: ../shell/ev-window.c:5003
+msgid "Op_en a Copy"
+msgstr "Op_en 'n kopie"
+
+#: ../shell/ev-window.c:5004
+msgid "Open a copy of the current document in a new window"
+msgstr "Open 'n kopie van die huidige dokument in 'n nuwe venster"
+
+#: ../shell/ev-window.c:5006 ../shell/ev-window.c:5181
+msgid "_Save a Copy..."
+msgstr "_Stoor 'n kopie..."
+
+#: ../shell/ev-window.c:5007
+msgid "Save a copy of the current document"
+msgstr "Stoor 'n kopie van die huidige dokument"
+
+#: ../shell/ev-window.c:5009
+msgid "Print Set_up..."
+msgstr "Druko_pstelling..."
+
+#: ../shell/ev-window.c:5010
+msgid "Setup the page settings for printing"
+msgstr "Stel die bladsyinstellings om te druk"
+
+#: ../shell/ev-window.c:5012
+msgid "_Print..."
+msgstr "_Druk..."
+
+#: ../shell/ev-window.c:5013 ../shell/ev-window.c:5082
+msgid "Print this document"
+msgstr "Druk hierdie dokument"
+
+#: ../shell/ev-window.c:5015
+msgid "P_roperties"
+msgstr "_Eienskappe"
+
+#: ../shell/ev-window.c:5023
+msgid "Select _All"
+msgstr "Selekteer _almal"
+
+#: ../shell/ev-window.c:5025
+msgid "_Find..."
+msgstr "_Vind..."
+
+#: ../shell/ev-window.c:5026
+msgid "Find a word or phrase in the document"
+msgstr "Vind 'n woord of frase in die dokument"
+
+#: ../shell/ev-window.c:5032
+msgid "T_oolbar"
+msgstr "N_utsbalk"
+
+#: ../shell/ev-window.c:5034
+msgid "Rotate _Left"
+msgstr "Roteer _linksom"
+
+#: ../shell/ev-window.c:5036
+msgid "Rotate _Right"
+msgstr "Roteer _regsom"
+
+#: ../shell/ev-window.c:5041
+msgid "Enlarge the document"
+msgstr "Vergroot die dokument"
+
+#: ../shell/ev-window.c:5044
+msgid "Shrink the document"
+msgstr "Verklein die dokument"
+
+#: ../shell/ev-window.c:5046
+msgid "_Reload"
+msgstr "He_rlaai"
+
+#: ../shell/ev-window.c:5047
+msgid "Reload the document"
+msgstr "Herlaai die dokument"
+
+#: ../shell/ev-window.c:5050
+msgid "Auto_scroll"
+msgstr "Outo-_rol"
+
+#. Go menu
+#: ../shell/ev-window.c:5054
+msgid "_Previous Page"
+msgstr "Vo_rige bladsy"
+
+#: ../shell/ev-window.c:5055
+msgid "Go to the previous page"
+msgstr "Gaan na die vorige bladsy"
+
+#: ../shell/ev-window.c:5057
+msgid "_Next Page"
+msgstr "Volge_nde bladsy"
+
+#: ../shell/ev-window.c:5058
+msgid "Go to the next page"
+msgstr "Gaan na die volgende bladsy"
+
+#: ../shell/ev-window.c:5060
+msgid "_First Page"
+msgstr "_Eerste bladsy"
+
+#: ../shell/ev-window.c:5061
+msgid "Go to the first page"
+msgstr "Gaan na die eerste bladsy"
+
+#: ../shell/ev-window.c:5063
+msgid "_Last Page"
+msgstr "_Laaste bladsy"
+
+#: ../shell/ev-window.c:5064
+msgid "Go to the last page"
+msgstr "Gaan na die laaste bladsy"
+
+#. Help menu
+#: ../shell/ev-window.c:5068
+msgid "_Contents"
+msgstr "_Inhoud"
+
+#: ../shell/ev-window.c:5071
+msgid "_About"
+msgstr "_Aangaande"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5075
+msgid "Leave Fullscreen"
+msgstr "Verlaat volskerm"
+
+#: ../shell/ev-window.c:5076
+msgid "Leave fullscreen mode"
+msgstr "Verlaat volskermmodus"
+
+#: ../shell/ev-window.c:5078
+msgid "Start Presentation"
+msgstr "Begin voorlegging"
+
+#: ../shell/ev-window.c:5079
+msgid "Start a presentation"
+msgstr "Begin 'n voorlegging"
+
+#. View Menu
+#: ../shell/ev-window.c:5135
+msgid "_Toolbar"
+msgstr "_Nutsbalk"
+
+#: ../shell/ev-window.c:5136
+msgid "Show or hide the toolbar"
+msgstr "Wys of verskuil die nutsbalk"
+
+#: ../shell/ev-window.c:5138
+msgid "Side _Pane"
+msgstr "Sy_paneel"
+
+#: ../shell/ev-window.c:5139
+msgid "Show or hide the side pane"
+msgstr "Wys of verskuil die sypaneel"
+
+#: ../shell/ev-window.c:5141
+msgid "_Continuous"
+msgstr "_Aaneenlopend"
+
+#: ../shell/ev-window.c:5142
+msgid "Show the entire document"
+msgstr "Wys die hele dokument"
+
+#: ../shell/ev-window.c:5144
+msgid "_Dual"
+msgstr "_Dubbel"
+
+#: ../shell/ev-window.c:5145
+msgid "Show two pages at once"
+msgstr "Wys twee bladsy tegelyk"
+
+#: ../shell/ev-window.c:5147
+msgid "_Fullscreen"
+msgstr "_Volskerm"
+
+#: ../shell/ev-window.c:5148
+msgid "Expand the window to fill the screen"
+msgstr "Brei die venster uit totdat dit die hele skerm volmaak"
+
+#: ../shell/ev-window.c:5150
+msgid "Pre_sentation"
+msgstr "Voo_rlegging"
+
+#: ../shell/ev-window.c:5151
+msgid "Run document as a presentation"
+msgstr "Hardloop dokument as 'n voorlegging"
+
+#: ../shell/ev-window.c:5153
+msgid "_Best Fit"
+msgstr "_Beste passing"
+
+#: ../shell/ev-window.c:5154
+msgid "Make the current document fill the window"
+msgstr "Laat die huidige dokument die venster volmaak"
+
+#: ../shell/ev-window.c:5156
+msgid "Fit Page _Width"
+msgstr "Pas na bladsy_wydte"
+
+#: ../shell/ev-window.c:5157
+msgid "Make the current document fill the window width"
+msgstr "Laat die huidige dokument die versterwydte volmaak"
+
+#. Links
+#: ../shell/ev-window.c:5164
+msgid "_Open Link"
+msgstr "_Open skakel"
+
+#: ../shell/ev-window.c:5166
+msgid "_Go To"
+msgstr "_Gaan na"
+
+#: ../shell/ev-window.c:5168
+msgid "Open in New _Window"
+msgstr "Open in nuwe _venster"
+
+#: ../shell/ev-window.c:5170
+msgid "_Copy Link Address"
+msgstr "Kopieer skakeladres"
+
+#: ../shell/ev-window.c:5172
+msgid "_Save Image As..."
+msgstr "_Stoor beeld as..."
+
+#: ../shell/ev-window.c:5174
+msgid "Copy _Image"
+msgstr "Kopieer _beeld"
+
+#: ../shell/ev-window.c:5220
+msgid "Page"
+msgstr "Bladsy"
+
+#: ../shell/ev-window.c:5221
+msgid "Select Page"
+msgstr "Selekteer bladsy"
+
+#: ../shell/ev-window.c:5232
+msgid "Zoom"
+msgstr "Zoem"
+
+#: ../shell/ev-window.c:5234
+msgid "Adjust the zoom level"
+msgstr "Pas die zoemvlak aan"
+
+#: ../shell/ev-window.c:5244
+msgid "Navigation"
+msgstr "Navigasie"
+
+#: ../shell/ev-window.c:5246
+msgid "Back"
+msgstr "Terug"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5249
+msgid "Move across visited pages"
+msgstr "Beweeg oor besoekte bladsye"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5279
+msgid "Previous"
+msgstr "Vorige"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5284
+msgid "Next"
+msgstr "Volgende"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5288
+msgid "Zoom In"
+msgstr "Zoem in"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5292
+msgid "Zoom Out"
+msgstr "Zoem uit"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5300
+msgid "Fit Width"
+msgstr "Pas badsywydte"
+
+#: ../shell/ev-window.c:5467 ../shell/ev-window.c:5485
+msgid "Unable to launch external application."
+msgstr "Kan nie eksterne toepassing lanseer nie."
+
+#: ../shell/ev-window.c:5528
+msgid "Unable to open external link"
+msgstr "Kan nie eksterne skakel oopmaak nie"
+
+#: ../shell/ev-window.c:5684
+msgid "Couldn't find appropriate format to save image"
+msgstr "Kon nie toepaslike formaat vind om beeld te stoor nie"
+
+#: ../shell/ev-window.c:5723
+msgid "The image could not be saved."
+msgstr "Die beeld kon nie gestoor word nie."
+
+#: ../shell/ev-window.c:5755
+msgid "Save Image"
+msgstr "Stoor beeld"
+
+#: ../shell/ev-window.c:5817
+msgid "Unable to open attachment"
+msgstr "Kan nie aanhegsel oopmaak nie"
+
+#: ../shell/ev-window.c:5868
+msgid "The attachment could not be saved."
+msgstr "Die aanhegsel kon nie gestoor word nie."
+
+#: ../shell/ev-window.c:5913
+msgid "Save Attachment"
+msgstr "Stoor aanhegsel"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - Wagwoord vereis"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "Volgens uitbreiding"
+
+#: ../shell/main.c:59 ../shell/main.c:347
+msgid "MATE Document Viewer"
+msgstr "MATE Dokumentbekyker"
+
+#: ../shell/main.c:67
+msgid "The page of the document to display."
+msgstr "Die bladsy van die dokument om te vertoon."
+
+#: ../shell/main.c:67
+msgid "PAGE"
+msgstr "BLADSY"
+
+#: ../shell/main.c:68
+msgid "Run evince in fullscreen mode"
+msgstr "Hardloop evince in volskermmodus"
+
+#: ../shell/main.c:69
+msgid "Run evince in presentation mode"
+msgstr "Hardloop evince in voorleggingsmodus"
+
+#: ../shell/main.c:70
+msgid "Run evince as a previewer"
+msgstr "Hardloop evince as voorskouer"
+
+#: ../shell/main.c:71
+msgid "The word or phrase to find in the document"
+msgstr "Die woord of frase om in die dokument te vind"
+
+#: ../shell/main.c:71
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:75
+msgid "[FILE...]"
+msgstr "[LÊER...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Boolese opsies beskikbaar, waar aktiveer duimnaelsketse en vals deaktiveer "
+"die skepping van nuwe duimnaelsketse"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Aktiveer duimnaelsketse van PDF-dokumente"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Duimnaelskets opdrag vir PDF-dokumente"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Geldige opdrag plus argumente vir die duimnaelsketser vir PDF-dokumente. "
+"Verwys na die dokumentasie vir caja se duimnaelsketser vir verdere "
+"inligting."
diff --git a/po/ar.po b/po/ar.po
new file mode 100644
index 00000000..1d25fd1c
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,1835 @@
+# translation of evince.HEAD.po to Arabic
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Yousef Raffah <[email protected]>, 2006.
+# Khaled Hosny <[email protected]>, 2006, 2007, 2008, 2009, 2010.
+# Usama Akkad <[email protected]>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-08-19 20:06+0200\n"
+"PO-Revision-Date: 2010-08-19 20:06+0300\n"
+"Last-Translator: Khaled Hosny <[email protected]>\n"
+"Language-Team: Arabic <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
+"X-Generator: Virtaal 0.7.0-beta1\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "خطأ أثناء تشغيل الأمر “%s” لفك ضغط القصة المصورة: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "فشل الأمر “%s” في فك ضغط القصة المصورة."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "لم ينته الأمر “%s” طبيعيا."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "ليس نوع MIME قصص مصوّرة: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "تعذر العثور على أمر مناسب لفك ضغط هذا النوع من القصص المصورة"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "نوع MIME غير معروف"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "الملف معطوب"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "لا ملفات في الأرشيف"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "لا توجد صور في الأرشيف %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "حدث خطأ أثناء حذف “%s”."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "خطأ %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "كتب فكاهية"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "هيئة مستند DjVu غير صحيحة"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"المستند مركب من ملفات عديدة. لم يمكن قراءة واحد أو أكثر من هذه الملفات."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "مستندات DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "هيئة مستند DVI غير صحيحة"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "مستندات DVI"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "هذا العمل ملكية عامة"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "نعم"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "لا"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 ‏(CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C ‏(CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType ‏(CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "نوع الخط غير معروف"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "بلا اسم"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "مدمج جزئيا"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "مدمج"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "غير مدمج"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "مستندات PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "مستند غير صالح"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "شرائح Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "لا خطأ"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "الذاكرة غير كافية"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "تعذّر العثور على توقيع ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "ملف ZIP غير سليم"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "لا يُدعم العديد من الملفات في أرشيف ZIPs واحد"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "لا يمكن فتح الملف"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "فشلت قراءة البيانات من الملف"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "تعذّر العثور على ملف في أرشيف ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "خطأ مجهول"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "تعذر تحميل المستند \"%s\""
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "تعذر حفظ المستند “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "مستندات PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "تعذر حفظ المرفق “%s”:‏ %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "تعذر فتح المرفق “%s”:‏ %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "تعذر فتح المرفق “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "نوع الملف %s ‏(%s) غير مدعوم"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "كل المستندات"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "كل الملفات"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "تعذّر إنشاء الملف المؤقت: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "تعذّر إنشاء الدليل المؤقت: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "الملف ليس ملف .desktop صالح"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "اصدارة غير معروفة لملف سطح المكتب '‏%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "يبدأ %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "التطبيق لا يقبل مستندات في سطر الأوامر"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "خيار إطلاق غير معروف: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "لا يمكن تمرير عناوين المستندات إلى مُدخل 'Type=Link' في ملف desktop"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "عنصر لا يُطلق"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "عطل الاتصال بمدير الجلسة"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "حدد ملفا يحوي التشكيل المحفوظ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "ملف"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "حدد معرف إدارة الجلسة"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "مُعرف"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "خيارات إدارة الجلسة:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "اعرض خيارات إدارة الجلسة"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "اعرض “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "ا_نقل على شريط الأدوات"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "انقل العنصر المحدد على شريط الأدوات"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "ا_حذف من شريط الأدوات"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "احذف العنصر المحدد من شريط الأدوات"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "ا_حذف شريط الأدوات"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "احذف شريط الأدوات المحدد"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "فاصل"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "أفضل ملائمة"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "ملائمة عرض الصفحة"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "عارض المستندات"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "اعرض المستندات متعددة الصفحات"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "تجاوز قيود المستند"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "تجاوز قيود المستند، مثل قيود النسخ أو إمكانية الطباعة."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "احذف الملف المؤقت"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "اطبع ملف الإعدادات"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "مُعاين مستندات جنوم"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "تعذر طبع المستند"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "تعذّر العثور على الطابعة '%s' المختارة"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "الصفحة ال_سابقة"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "اذهب إلى الصفحة السابقة"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "الصفحة ال_تالية"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "اذهب إلى الصفحة التالية"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "كبّر المستند"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "صغّر المستند"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "اطبع"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "اطبع هذا المستند"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "أ_فضل ملائمة"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "اجعل المستند الحالي يملأ النافذة"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "لائم عر_ض الصفحة"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "اجعل المستند الحالي يملأ النافذة بالعرض"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "صفحة"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "اختر صفحة"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "مستند"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "العنوان:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "المكان:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "الموضوع:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "المؤلف:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "كلمات مفتاحية:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "المنتِج:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "المنشئ:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "تاريخ الإنشاء:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "آخر تعديل:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "عدد الصفحات:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "محسّن:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "الهيئة:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "الأمن:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "مقاس الورق:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "لا شيء"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%I.0f × %I.0f مم"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%I.2f × %I.2f بوصة"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s، طولي (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s، عرضيّ (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%Id من %Id)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "من %Id"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "يحمّل…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "يحضّر للطباعة…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "يُنهي…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "يطبع الصفحة %Id من %Id…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "لا يمكن الطباعة من خلال هذه الطابعة"
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "اختيار صفحات غير سليم"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "تحذير"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "مدى الطباعة الذي اخترته لا يشمل أي صفحات"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "تحجيم الصفحة:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "قلّص إلى المنطقة المطبوعة"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "لائم المنطقة المطبوعة"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"تحجيم صفحات المستند لتناسب صفحة الطابعة المختارة. اختر واحدا من التالي:\n"
+"\n"
+"• \"لا\": لا تحجيم للصفحات.\n"
+"\n"
+"• \"قلّص إلى المنطقة المطبوعة\": صفحات المستند الأكبر من المنطقة القابلة "
+"للطباعة ستقلص لتناسب صفحة الطابعة.\n"
+"\n"
+"• \"لائم المنطقة المطبوعة\": ستكبر أو تصغر صفحات المستند بما يناسب المنطقة "
+"المطبوعة.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "دوّر تلقائيا ووسّط"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"دوّر اتجاه صفحة الطابعة ليطابق اتجاه كل صفحة في المستند. ستُوسّط صفحات المستند "
+"في صفحة الطابعة."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "اختر حجم الصفحة طبقا لحجم صفحة المستند"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr "عند تفعيله ستطبع كل صفحة على ورق من نفس حجم صفحة المستند."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "معالجة الصفحات"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "تعذر طبع الصفحة %d:‏ %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "لُف لأعلى"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "لُف لأسفل"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "لُف المشهد لأعلى"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "لُف المشهد لأسفل"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "مشهد المستند"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "اقفز إلى الصفحة:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "نهاية العرض. انقر لتخرج."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "اذهب إلى الصفحة الأولى"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "اذهب إلى الصفحة السابقة"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "اذهب إلى الصفحة التالية"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "اذهب إلى الصفحة الأخيرة"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "اذهب إلى الصفحة"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "ابحث"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "اذهب إلى الصفحة %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "اذهب إلى %s في الملف %s"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "اذهب إلى الملف \"%s\""
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "أطلِق %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "ابحث:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "ال_سابق"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "ابحث عن التواجد السابق لنص البحث"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "ال_تالي"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "ابحث عن التواجد التالي لنص البحث"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "ح_ساس لحالة الأحرف"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "بدّل البحث الحسّاس لحالة الأحرف"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "الأيقونة:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "ملاحظة"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "تعليق"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "مفتاح"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "مساعدة"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "فقرة جديدة"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "فقرة"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "إدراج"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "صليب"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "دائرة"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "مجهول"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "خصائص التعليقات"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "اللون:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "الطراز:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "شفاف"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "معتم"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "حالة النافذة الأولية:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "مفتوحة"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "مغلقة"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "يعمل في نمط العرض التقديمي"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "كلمة سر المستند %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "يُحوّل %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "تم تحويل %d من %d مستندات"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "يحول البيانات الفوقية"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"لقد تغير نسق البيانات الفوقية الذي يستخدمه جلاء، ولذا يحتاج لنقله. إذا ألغي "
+"النقل فن يعمل مخزن البيانات الفوقية."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "فتح مستند استخدما حديثا"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "هذا المستند مقفل ولا يمكن قراءته إلا بإدخال كلمة السر الصحيحة"
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "ا_فتح قفل المستند"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "أدخل كلمة السر"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "كلمة السر مطلوبة"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "المستند \"%s\" مقفل و يتطلب كلمة سر ليُفتح"
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_كلمة السر:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "ا_نْس كلمة السر فورا"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "ت_ذكر كلمة السر حتى خروجي"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "ت_ذكر للأبد"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "الخصائص"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "عام"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "خطوط"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "رخصة المستند"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "خط"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "يجمع معلومات الخط… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "شروط الاستخدام"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "رخصة النص"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "المزيد من المعلومات"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "قائمة"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "التعليقات"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "نص"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "أضف تعليقا نصيا"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "أضف"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "لا يحوي المستند أية تعليقات"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "صفحة %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "المرفقات"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "الطبقات"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "اطبع…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "فهرس"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "مُصغّرات"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "صفحة %s —‏ %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "صفحة %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "لا يحوي المستند أية صفحات"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "لا يحتوي المستند إلا صفحات فارغة"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "تعذر فتح المستند"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "يحمّل المستند من “%s”"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "ينزّل المستند (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "تعذر فتح ملف بعيد."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "يعيد تحميل المستند %s"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "تعذر إعادة تحميل المستند."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "افتح مستند"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "يحفظ المستند في %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "يحفظ المرفق في %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "يحفظ الصورة في %s"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "تعذر حفظ الملف باسم \"%s\""
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "يرفع المستند (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "يرفع المرفق (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "يرفع الصورة (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "احفظ نسخة"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "لا مهام منتظرة في الطابور"
+msgstr[1] "مهمة واحدة تنتظر في الطابور"
+msgstr[2] "مهمتين منتظرتين في الطابور"
+msgstr[3] "%Id مهام منتظرة في الطابور"
+msgstr[4] "%Id مهمة منتظرة في الطابور"
+msgstr[5] "%Id مهمة منتظرة في الطابور"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "مهمة الطبع “%s”"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr "يحتوي المستند على استمارة مُلئت، إذا لم تحفظ نسخة فستضيع هذه التعديلات."
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"يحتوي المستند على تعليقات جديدة أو معدلة، إذا لم تحفظ نسخة فستضيع هذه "
+"التعديلات."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "أأحفظ نسخة من المستند \"%s\" قبل غلقه؟"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "أغلق _دون حفظ"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "احفظ _نسخة"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "أأنتظر حتى تنتهي المهمة “%s” قبل الغلق؟"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "توجد %d مهام طباعة نشطة. أأنتظر حتى تنتهي الطباعة قبل الغلق؟"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "إذا أغلقت النافذة لن تُطبع المهام المنتظرة."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "ألغِ ال_طباعة وأغلق"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "أغلق ب_عد الطباعة"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "محرر شريط الأدوات"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "حدث خطأ أثناء عرض المساعدة"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"عارض المستندات\n"
+"باستخدام %s ‏(%s)"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"جلاء برنامج حر؛ بامكانك إعادة توزيعه و/أو تعديله تحت شروط الرخصة العامة لجنو "
+"والتي نشرتها منظمة البرمجيات الحرة؛ سواء كانت الإصدارة 2 للرخصة أو أي إصدارة "
+"بعدها حسب الرغبة. \n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"يوزّع جلاء على أمل أن يكون مفيدال لمن يستخدمه دون أدنى مسؤولية؛ ولا حتى ضمان "
+"صلاحية العرض في السوق أو توافقه مع أي استخدام محدد. يمكنم مراجعة الرخصة "
+"العامة لجنو لمزيد من التفاصيل. \n"
+
+#: ../shell/ev-window.c:4571
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"لابد من أن تكون قد استلمت نسخة من رخصة جنو العامة مع جلاء؛ في حال عدم "
+"استلامك لذلك، يمكنك مكاتبة:\n"
+"Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA "
+"02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "جلاء"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 لمؤلفي برنامج جلاء"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"فريق عربآيز للترجمة http://www.arabeyes.org :\n"
+"يوسف رفـه\t<[email protected]>\n"
+"خالد حسني\t<[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "لا يوجد في هذه الصفحة"
+msgstr[1] "واحد موجود في هذه الصفحة"
+msgstr[2] "اثنان موجودان في هذه الصفحة"
+msgstr[3] "%Id موجودة على هذه الصفحة"
+msgstr[4] "%Id موجودة على هذه الصفحة"
+msgstr[5] "%Id موجودة على هذه الصفحة"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "غير موجود"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%I3d%% متبقية للبحث"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "_ملف"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "_تحرير"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "_عرض"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "ا_ذهب"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "_مساعدة"
+
+#. File menu
+#: ../shell/ev-window.c:5402 ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "ا_فتح…"
+
+#: ../shell/ev-window.c:5403 ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "افتح مستند موجود"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "افتح _نسخة"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "افتح نسخة من المستند الحالي في نافذة جديدة"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "احفظ _نسخة…"
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "احفظ نسخة من المستند الحالي"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "ا_طبع…"
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "خ_صائص"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "اختر _الكل"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "ا_بحث…"
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "ابحث عن كلمة أو عبارة في المستند"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "ش_ريط الأدوات"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "استدر ي_سارًا"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "استدر ي_مينًا"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "اجعل الإعدادات الحالية ال_مبدئية"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "أ_عد التحميل"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "أعد تحميل المستند"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "لف _تلقائي"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "الصفحة الأ_ولى"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "اذهب إلى الصفحة الأولى"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "الصفحة الأ_خيرة"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "اذهب إلى الصفحة الأخيرة"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "الم_حتويات"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "_عنْ"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "غادِر نمط ملء الشاشة"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "غادِر نمط ملء الشاشة"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "ابدأ العرض التقديمي"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "ابدأ عرض تقديمي"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "_شريط الأدوات"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "اظهر أو اخفِ شريط الأدوات"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "ال_لوحة الجانبية"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "اظهر أو اخفِ اللوحة الجانبية"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "م_ستمر"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "اعرض كامل المستند"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "_مزدوج"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "اعرض صفحتين في كل مرة"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "_ملء الشاشة"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "مدّد النافذة لتملأ الشاشة"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "_عرض تقديمي"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "شغّل المستند كعرض تقديمي"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "ألوان _معكوسة"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "اعرض محتويات الصفحة بألوان معكوسة"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "ا_فتح الرابط"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "ا_ذهب إلى"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "افتح فى نافذة _جديدة"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "ا_نسخ عنوان الرابط"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "ا_حفظ الصورة ك‍…"
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "انسخ ال_صورة"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "خصائص التعليقات…"
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "ا_فتح المرفق"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "ا_حفظ المرفق باسم…"
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "قرّب"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "اضبط مستوى التقريب"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "إبحار"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "إلى الخلف"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "انتقل عبر الصفحات المُزارة"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "السابق"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "التالي"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "قرّب"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "بعّد"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "لائم العرض"
+
+#: ../shell/ev-window.c:5890 ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "تعذر تشغيل برنامج خارجي."
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "تعذر فتح وصلة خارجية"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "تعذّر تحديد تنسيق مناسب لحفظ الصورة"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "تعذر حفظ الصورة."
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "احفظ الصورة"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "تعذر فتح المرفق"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "تعذر حفظ المرفق."
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "احفظ الملف المرفق"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "‏%s — كلمة السر مطلوبة"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "بالامتداد"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "عارِض مستندات جنوم"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "عنوان صفحة المستند المطلوب عرضها."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "صفحة"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "رقم صفحة المستند المطلوب عرضها."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "رقم"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "شغّل جلاء في نمط ملء الشاشة"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "شغّل جلاء في نمط العرض التقديمي"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "شغّل جلاء كمعاين"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "الكلمة أو العبارة التي سيتم البحث عنها في المستند"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "نص"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[ملف…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"الخيارات المنطقية متوفرة، \"صحيح\" تمكن المُصغّرات و \"خطأ\" تعطل إنشاء مُصغّرات "
+"جديدة"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "مكّن إنشاء مُصغّرات من مستندات PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "أمر المُصغّرات لمستندات PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"أمر صالِح بالإضافة إلى متغيرات لمصغّر الصور الخاص بمستندات PDF. راجع توثيق "
+"مصغّر الصور لنوتلس للمزيد من المعلومات"
+
+#~ msgid "Page Set_up…"
+#~ msgstr "إ_عداد الصفحة…"
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "اضبط إعدادات طباعة الصفحة"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "هيئة مستند DJVU غير صحيحة"
+
+#~ msgid "Print..."
+#~ msgstr "اطبع..."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "ا_حفظ نسخة..."
+
+#~ msgid "_Print..."
+#~ msgstr "ا_طبع..."
+
+#~ msgid "_Find..."
+#~ msgstr "ا_بحث..."
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "تعذر إنشاء الملف “%s”: %s"
+
+#~ msgid "Search string"
+#~ msgstr "سلسلة البحث"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "اسم السلسلة المراد البحث عنها"
+
+#~ msgid "Case sensitive"
+#~ msgstr "حسّاس لحالة الأحرف"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "صحيح في حالة بحث حساس للأحرف"
+
+#~ msgid "Highlight color"
+#~ msgstr "لون التظليل"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "لون التظليل لكل النتائج"
+
+#~ msgid "Current color"
+#~ msgstr "اللون الحالي"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "لون التظليل للنتائج الحالية"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "أأستعيد المستند السابق؟"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "يبدو أن جلاء خرج بصورة غير طبيعية في التشغيل الأخير، يمكنك استعادة "
+#~ "المستندات المفتوحة."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_لا تستعِد"
+
+#~ msgid "_Recover"
+#~ msgstr "ا_ستعِد"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "التعافي من الانهيار"
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "تعذر إنشاء الرابط الرمزي “%s”:"
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "لا يمكن فتح نسخة."
+
+#~ msgid "Co_nnect"
+#~ msgstr "ات_صل"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "اتصل _مجهول الاسم"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "اتصل كالمست_خدم:"
+
+#~ msgid "_Username:"
+#~ msgstr "اسم المستخد_م:"
+
+#~ msgid "_Domain:"
+#~ msgstr "الم_جال:"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "ا_نْس كلمة السر فورا"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "ت_ذكر كلمة السر حتى خروجي"
+
+#~ msgid "_Remember forever"
+#~ msgstr "ت_ذكر للأبد"
+
+#~ msgid "File not available"
+#~ msgstr "الملف غير موجود"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "الملفات البعيدة غير مدعومة"
+
+#~ msgid "Password Entry"
+#~ msgstr "إدخال كلمة السر"
+
+#~ msgid "Remember password for this session"
+#~ msgstr "تذكّر كلمة السر لهذه الجلسة"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "احفظ كلمة السر في حلقة المفاتيح"
+
+#~ msgid "<b>Title:</b>"
+#~ msgstr "<b>العنوان:</b>"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%I.2f × %I.2f بوصة"
+
+#~ msgid "Find Previous"
+#~ msgstr "إيجاد السابق"
+
+#~ msgid "Find Next"
+#~ msgstr "إيجاد التالي"
+
+#~ msgid "Incorrect password"
+#~ msgstr "كلمة السر غير صحيحة"
diff --git a/po/as.po b/po/as.po
new file mode 100644
index 00000000..50eb3dd9
--- /dev/null
+++ b/po/as.po
@@ -0,0 +1,1624 @@
+# translation of as.po to Assamese
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Amitakhya Phukan <[email protected]>, 2008.
+# Amitakhya Phukan <[email protected]>, 2008.
+# Amitakhya Phukan <[email protected]>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: as\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug."
+"cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2009-09-15 18:39+0000\n"
+"PO-Revision-Date: 2009-09-21 10:13+0530\n"
+"Last-Translator: \n"
+"Language-Team: Assamese <>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1)\n"
+"X-Generator: Lokalize 0.2\n"
+
+#: ../backend/comics/comics-document.c:155
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "কমিক বহি ডিকম্প্ৰেছ কৰাৰ উদ্দেশ্যে “%s” আদেশ আৰম্ভ কৰিবলৈ সমস্যা: %s"
+
+#: ../backend/comics/comics-document.c:169
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "কমিক বহি ডিকম্প্ৰেছ কৰাৰ উদ্দেশ্যে “%s” আদেশ ব্যৰ্থ ।"
+
+#: ../backend/comics/comics-document.c:178
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "“%s” আদেশ সঠিকৰূপে সমাপ্ত নহয় ।"
+
+#: ../backend/comics/comics-document.c:225
+#, c-format
+msgid "Failed to create a temporary directory."
+msgstr "অস্থায়ী পঞ্জিকা নিৰ্মাণ কৰিবলৈ ব্যৰ্থ ।"
+
+#: ../backend/comics/comics-document.c:347
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "এটা কমিক কিতাপৰ MIME ধৰণ নহয়: %s"
+
+#: ../backend/comics/comics-document.c:354
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "এই প্ৰকৃতিৰ কমিক বহি ডিকম্প্ৰেছ কৰাৰ উদ্দেশ্যে যথাযত আদেশ পোৱা নাযায়"
+
+#: ../backend/comics/comics-document.c:385
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "অজ্ঞাত MIME'ৰ ধৰন"
+
+#: ../backend/comics/comics-document.c:412
+#| msgid "File corrupted."
+msgid "File corrupted"
+msgstr "ক্ষতিগ্ৰস্ত নথিপত্ৰ"
+
+#: ../backend/comics/comics-document.c:424
+#| msgid "No files in archive."
+msgid "No files in archive"
+msgstr "আৰ্কাইভ কোনো নথিপত্ৰ উপস্থিত নাই"
+
+#: ../backend/comics/comics-document.c:465
+#, c-format
+msgid "No images found in archive %s"
+msgstr "%s আৰ্কাইভে কোনো ছবি পোৱা নাযায়"
+
+#: ../backend/comics/comics-document.c:704
+#, c-format
+#| msgid "There was an error displaying help"
+msgid "There was an error deleting “%s”."
+msgstr "“%s” আঁতৰাবলৈ সমস্যা ।"
+
+#: ../backend/comics/comics-document.c:854
+#, c-format
+msgid "Error %s"
+msgstr "ত্ৰুটি: %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "কমিক-বই"
+
+#: ../backend/djvu/djvu-document.c:174
+msgid "DJVU document has incorrect format"
+msgstr "DVI ডকুমেন্টৰ বিন্যাস সঠিক নহয়"
+
+#: ../backend/djvu/djvu-document.c:251
+msgid ""
+"The document is composed of several files. One or more of such files cannot "
+"be accessed."
+msgstr "হলো এক সৰ্বমোট."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Djvu ডকুমেন্ট"
+
+#: ../backend/dvi/dvi-document.c:108
+msgid "DVI document has incorrect format"
+msgstr "DVI ডকুমেন্টৰ বিন্যাস সঠিক নহয়"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI ডকুমেন্ট"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:826
+msgid "Yes"
+msgstr "হয়"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:829
+msgid "No"
+msgstr "নহয়"
+
+#: ../backend/pdf/ev-poppler.cc:903
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:905
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:907
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:909
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:911
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:913
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:915
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:917
+msgid "Unknown font type"
+msgstr "ফন্টৰ ধৰন অজ্ঞাত"
+
+#: ../backend/pdf/ev-poppler.cc:943
+msgid "No name"
+msgstr "নামবিহীন"
+
+#: ../backend/pdf/ev-poppler.cc:951
+msgid "Embedded subset"
+msgstr "এমবেড কৰা সাব-সেট"
+
+#: ../backend/pdf/ev-poppler.cc:953
+msgid "Embedded"
+msgstr "এমবেড কৰা"
+
+#: ../backend/pdf/ev-poppler.cc:955
+msgid "Not embedded"
+msgstr "এমবেড কৰা নহয়"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF ডকুমেন্ট"
+
+#: ../backend/impress/impress-document.c:303
+#: ../backend/tiff/tiff-document.c:114
+msgid "Invalid document"
+msgstr "Invalid document"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress স্লাইড"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "কোনো ত্ৰুটি নাই"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Not enough memory"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "Cannot find zip signature"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "নথিপত্ৰ"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr "নথিপত্ৰ"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "নথিপত্ৰ"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "নথিপত্ৰ"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "নথিপত্ৰ"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "অজ্ঞাত সমস্যা"
+
+#: ../backend/ps/ev-spectre.c:113
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "“%s” ডকুমেন্ট লোড কৰিবলৈ ব্যৰ্থ"
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Failed to save document “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript ডকুমেন্ট"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "সংযুক্ত বস্তু “%s” সংৰক্ষণ কৰিবলৈ ব্যৰ্থ: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "সংয়ুক্ত বস্তু “%s” খুলতে ব্যৰ্থ: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "সংযুক্ত বস্তু “%s” খুলতে ব্যৰ্থ"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "%s (%s) ধৰনৰ নথিপত্ৰ সমৰ্থিত নহয়"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "সকলো ডকুমেন্ট"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "সৰ্বধৰনৰ নথিপত্ৰ"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "বৈধ .desktop নথিপত্ৰ নহয় "
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "ডেস্কটপ নথিপত্ৰৰ অজ্ঞাত সংস্কৰণ '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s আৰম্ভ কৰা হৈছে"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "এই অনুপ্ৰয়োগৰ দ্বাৰা আদেশ শাৰীৰ মাধ্যমে নথিপত্ৰ গ্ৰহণ কৰা নহয়"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "প্ৰাৰম্ভকালৰ বিকল্প পৰিচিত নহয় : %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "'Type=Link' ডেস্কটপ নিবেশলৈ নথিৰ URI উল্লেখ কৰা নাযাব"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "প্ৰাৰম্ভ কৰাৰ যোগ্য বস্তু নহয় "
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "অধিবেশন পৰিচালন ব্যৱস্থাৰ সৈতে সংযোগ বিচ্ছিন্ন কৰা হ'ব"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "সংৰক্ষিত বিন্যাস সহ নথিপত্ৰ চিহ্নিত কৰক"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:46
+#: ../previewer/ev-previewer.c:47
+msgid "FILE"
+msgstr "নথিপত্ৰ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "অধিবেশন পৰিচালনাৰ ID উল্লেখ কৰক"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "অধিবেশন পৰিচালনা সংক্ৰান্ত বিকল্প:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "অধিবেশন পৰিচালনা সংক্ৰান্ত বিকল্প প্ৰদৰ্শন কৰা হ'ব"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "Show “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "টুলবাৰে স্থানান্তৰ কৰক (_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "চিহ্নিত বস্তুকে টুলবাৰ-এ স্থানান্তৰ কৰেন"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "টুলবাৰৰ পৰা অপসাৰণ কৰক (_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "চিহ্নিত বস্তুকে টুলবাৰৰ পৰা অপসাৰণ কৰো"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "টুলবাৰ আঁতৰাওক (_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "চিহ্নিত টুলবাৰ অপসাৰণ কৰো"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "বিভাজক"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:117
+msgid "Running in presentation mode"
+msgstr "চলমান"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5227
+msgid "Best Fit"
+msgstr "সৰ্বোত্তম মাপ"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "পৃষ্ঠাৰ প্ৰস্থ অনুযায়ী মাপ নিৰ্ধাৰণ"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "৫০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "৭০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "১০০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "১২৫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "১৫০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "১৭৫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "২০০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "৩০০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "৪০০%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4149
+#: ../shell/ev-window-title.c:150 ../shell/main.c:484
+#, c-format
+msgid "Document Viewer"
+msgstr "ডকুমেন্ট প্ৰদৰ্শন ব্যৱস্থা"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "একাধিক পৃষ্ঠাবিশিষ্ট ডকুমেন্ট দেখুন"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "ডকুমেন্টৰ ক্ষেত্ৰ ধাৰ্য নিষেধাজ্ঞা অগ্ৰাহ্য কৰা হ'ব"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"ডকুমেন্টৰ ক্ষেত্ৰ ধাৰ্য নিষেধাজ্ঞা যেমন কপি অথবা প্ৰিন্ট সংক্ৰান্ত, অগ্ৰাহ্য কৰা হ'ব ।"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Delete the temporary file"
+msgstr "অস্থায়ী নথিপত্ৰ আঁতৰাওক"
+
+#: ../previewer/ev-previewer.c:46
+msgid "Print settings file"
+msgstr "প্ৰিন্টৰ বৈশিষ্ট্য সম্বলিত নথিপত্ৰ"
+
+#: ../previewer/ev-previewer.c:141 ../previewer/ev-previewer.c:175
+#| msgid "MATE Document Viewer"
+msgid "MATE Document Previewer"
+msgstr "MATE Document Previewer"
+
+#: ../previewer/ev-previewer-window.c:122 ../shell/ev-window.c:2891
+msgid "Failed to print document"
+msgstr "ডকুমেন্ট প্ৰিন্ট কৰিবলৈ ব্যৰ্থ"
+
+#: ../previewer/ev-previewer-window.c:242
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "নিৰ্বাচিত প্ৰিন্টাৰ '%s' পোৱা নাযায়"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:286 ../shell/ev-window.c:4986
+msgid "_Previous Page"
+msgstr "পূৰ্ববৰ্তী পৃষ্ঠা (_P)"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:4987
+msgid "Go to the previous page"
+msgstr "পূৰ্ববৰ্তী পৃষ্ঠায় যাও"
+
+#: ../previewer/ev-previewer-window.c:289 ../shell/ev-window.c:4989
+msgid "_Next Page"
+msgstr "পৰবৰ্তী পৃষ্ঠা (_N"
+
+#: ../previewer/ev-previewer-window.c:290 ../shell/ev-window.c:4990
+msgid "Go to the next page"
+msgstr "পৰবৰ্তী পৃষ্ঠায় চলুন"
+
+#: ../previewer/ev-previewer-window.c:293 ../shell/ev-window.c:4973
+msgid "Enlarge the document"
+msgstr "ডকুমেন্টৰ মাপ বৃদ্ধি কৰক"
+
+#: ../previewer/ev-previewer-window.c:296 ../shell/ev-window.c:4976
+msgid "Shrink the document"
+msgstr "ডকুমেন্টৰ মাপ হ্ৰাস কৰক"
+
+#: ../previewer/ev-previewer-window.c:299 ../shell/ev-print-operation.c:1294
+msgid "Print"
+msgstr "প্ৰিন্ট কৰক"
+
+#: ../previewer/ev-previewer-window.c:300 ../shell/ev-window.c:4945
+msgid "Print this document"
+msgstr "এই ডকুমেন্ট প্ৰিন্ট কৰক"
+
+#: ../previewer/ev-previewer-window.c:306 ../shell/ev-window.c:5084
+msgid "_Best Fit"
+msgstr "সৰ্বোত্তম মাপ (_B)"
+
+#: ../previewer/ev-previewer-window.c:307 ../shell/ev-window.c:5085
+msgid "Make the current document fill the window"
+msgstr "সম্পূৰ্ণ উইন্ডোত প্ৰদৰ্শনৰ জন্য ডকুমেন্টৰ মাপ বৃদ্ধি কৰক"
+
+#: ../previewer/ev-previewer-window.c:309 ../shell/ev-window.c:5087
+msgid "Fit Page _Width"
+msgstr "পৃষ্ঠাৰ প্ৰস্থ অনুযায়ী মাপ নিৰ্ধাৰণ (_W)"
+
+#: ../previewer/ev-previewer-window.c:310 ../shell/ev-window.c:5088
+msgid "Make the current document fill the window width"
+msgstr "উইন্ডোৰ সম্পূৰ্ণ প্ৰস্থেৰ মাপ অনুসাৰে প্ৰদৰ্শনৰ জন্য ডকুমেন্টৰ মাপ বৃদ্ধি কৰক"
+
+#: ../previewer/ev-previewer-window.c:441 ../shell/ev-window.c:5151
+msgid "Page"
+msgstr "পৃষ্ঠা"
+
+#: ../previewer/ev-previewer-window.c:442 ../shell/ev-window.c:5152
+msgid "Select Page"
+msgstr "পৃষ্ঠা নিৰ্বাচন কৰক"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "ডকুমেন্ট"
+
+#: ../properties/ev-properties-view.c:59
+msgid "Title:"
+msgstr "শিৰোনাম:"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Location:"
+msgstr "স্থান:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Subject:"
+msgstr "বিষয়:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Author:"
+msgstr "লেখক:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Keywords:"
+msgstr "<b>অভিব্যক্ত:</b>"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Producer:"
+msgstr "<b>প্ৰকাশক:</b>"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Creator:"
+msgstr "<b>প্ৰস্তুতকাৰক:</b>"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Created:"
+msgstr "নিমাৰ্ণৰ সময়কাল:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Modified:"
+msgstr "পৰিবৰ্তনৰ সময়:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Number of Pages:"
+msgstr "<b>পৃষ্ঠা সংখ্যা:</b>"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Optimized:"
+msgstr "<b>সৰ্বোত্তম:</b>"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Format:"
+msgstr "আকৃতি:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Security:"
+msgstr "সুৰক্ষা:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Paper Size:"
+msgstr "<b> কাগজ মাপ</b>"
+
+#: ../properties/ev-properties-view.c:202
+msgid "None"
+msgstr "শূণ্য"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:227
+msgid "default:mm"
+msgstr "ডিফল্ট"
+
+#: ../properties/ev-properties-view.c:271
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:275
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:299
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Portrait (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:306
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Landscape (%s)"
+
+#: ../libmisc/ev-page-action.c:72
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d, সৰ্বমোট %d)"
+
+#: ../libmisc/ev-page-action.c:74
+#, c-format
+msgid "of %d"
+msgstr "সৰ্বমোট %d"
+
+#: ../libview/ev-jobs.c:958
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "Failed to create file “%s”: %s"
+
+#: ../libview/ev-jobs.c:1435
+#, c-format
+#| msgid "Failed to print document"
+msgid "Failed to print page %d: %s"
+msgstr "%d পৃষ্ঠা প্ৰিন্ট কৰিবলৈ ব্যৰ্থ: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "উপৰে চলুন"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "নীচে চলুন"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "প্ৰদৰ্শন ক্ষেত্ৰেৰ উপৰেৰ অংশে চলুন"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "প্ৰদৰ্শন ক্ষেত্ৰেৰ নীচেৰ অংশে চলুন"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "ডকুমেন্ট অনুসাৰে প্ৰদৰ্শন"
+
+#: ../libview/ev-view.c:1466
+msgid "Go to first page"
+msgstr "প্ৰথম পৃষ্ঠায় চলুন"
+
+#: ../libview/ev-view.c:1468
+msgid "Go to previous page"
+msgstr "পূৰ্ববৰ্তী পৃষ্ঠায় চলুন"
+
+#: ../libview/ev-view.c:1470
+msgid "Go to next page"
+msgstr "পৰবৰ্তী পৃষ্ঠায় যাও"
+
+#: ../libview/ev-view.c:1472
+msgid "Go to last page"
+msgstr "সৰ্বশেষ পৃষ্ঠায় চলুন"
+
+#: ../libview/ev-view.c:1474
+msgid "Go to page"
+msgstr "চিহ্নিত পৃষ্ঠায় চলুন"
+
+#: ../libview/ev-view.c:1476
+msgid "Find"
+msgstr "অনুসন্ধান"
+
+#: ../libview/ev-view.c:1504
+#, c-format
+msgid "Go to page %s"
+msgstr "পৃষ্ঠা %s'এ চলুন"
+
+#: ../libview/ev-view.c:1510
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "%s'এ চলুন, “%s”'ত"
+
+#: ../libview/ev-view.c:1513
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” নথিপত্ৰে চলুন"
+
+#: ../libview/ev-view.c:1521
+#, c-format
+msgid "Launch %s"
+msgstr "%s আৰম্ভ কৰক"
+
+#: ../libview/ev-view.c:2783
+msgid "End of presentation. Press Escape to exit."
+msgstr "সমাপ্তি সৰ্বমোট."
+
+#: ../libview/ev-view.c:3722
+msgid "Jump to page:"
+msgstr "Jump to page:"
+
+#: ../libview/ev-view.c:4004 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:267
+msgid "Loading..."
+msgstr "লোড কৰা হৈছে..."
+
+#: ../shell/eggfindbar.c:146
+msgid "Search string"
+msgstr "পংক্তি অনুসন্ধান"
+
+#: ../shell/eggfindbar.c:147
+msgid "The name of the string to be found"
+msgstr "অনুসন্ধানৰ উদ্দেশ্যে চিহ্নিত পংক্তি"
+
+#: ../shell/eggfindbar.c:160
+msgid "Case sensitive"
+msgstr "হৰফেৰ ছাঁদ সম্পৰ্কে সচেতন"
+
+#: ../shell/eggfindbar.c:161
+msgid "TRUE for a case sensitive search"
+msgstr "মান TRUE (সত্য) হলে অনুসন্ধানৰ সময় হৰফেৰ ছাঁদ গণ্য কৰা হ'ব"
+
+#: ../shell/eggfindbar.c:168
+msgid "Highlight color"
+msgstr "ঔজ্জ্বল্যেৰ ৰং"
+
+#: ../shell/eggfindbar.c:169
+msgid "Color of highlight for all matches"
+msgstr "সব মিল উজ্জ্বল কৰে দৰ্শানোৰ জন্য ব্যৱহৃত ৰং"
+
+#: ../shell/eggfindbar.c:175
+msgid "Current color"
+msgstr "বৰ্তমানৰ নিৰ্বাচিত ৰং"
+
+#: ../shell/eggfindbar.c:176
+msgid "Color of highlight for the current match"
+msgstr "বৰ্তমান মিল উজ্জ্বল কৰে দৰ্শানোৰ জন্য ব্যৱহৃত ৰং"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "অনুসন্ধান:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:4962
+msgid "Find Pre_vious"
+msgstr "পূৰ্ববৰ্তী উপস্থিতি অনুসন্ধান কৰক (_v)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "শব্দ বা পংক্তিৰ পূৰ্ববৰ্তী উপস্থিতি অনুসন্ধান কৰক"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:4960
+msgid "Find Ne_xt"
+msgstr "পৰবৰ্তী উপস্থিতি অনুসন্ধান কৰক (_x)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "অনুসন্ধানৰ জন্য চিহ্নিত পংক্তিৰ পৰবৰ্তী উপস্থিতি অনুসন্ধান কৰক"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "হৰফেৰ ছাঁদ সম্পৰ্কে সচেতন (_a)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "অনুসন্ধানৰ সময় হৰফেৰ ছাঁদ গণ্য কৰা হ'ব অথবা ন'হ'ব"
+
+#: ../shell/ev-application.c:309
+#| msgid "Reload the document"
+msgid "Recover previous documents?"
+msgstr "পূৰ্ববৰ্তী নথিপত্ৰ পুনৰুদ্ধাৰ কৰা হ'ব নেকি ?"
+
+#: ../shell/ev-application.c:312
+msgid ""
+"Evince appears to have exited unexpectedly the last time it was run. You can "
+"recover the opened documents."
+msgstr ""
+"সৰ্বশেষ Evince সঞ্চালনাৰ সময় সম্ভবত এটি অপ্ৰত্যাশিতভাবে বন্ধ হৈছিল আৰু প্ৰদৰ্শিত "
+"ডকুমেন্টসমূহ পুনৰুদ্ধাৰ কৰা যাব ।"
+
+#: ../shell/ev-application.c:316
+msgid "_Don't Recover"
+msgstr "পুনৰুদ্ধাৰ কৰা ন'হ'ব (_D)"
+
+#: ../shell/ev-application.c:319
+msgid "_Recover"
+msgstr "উদ্ধাৰ কৰক(_R)"
+
+#: ../shell/ev-application.c:322
+msgid "Crash Recovery"
+msgstr "বিপৰ্যয়ৰ পৰা পুনৰুদ্ধাৰ"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s ডকুমেন্টৰ গুপ্তশব্দ"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "খুলুন"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "ডকুমেন্ট বৰ্তমানে লক কৰা আছে ও অকল গুপ্তশব্দ উল্লেখ কৰা হলে সেটি মুক্ত কৰা হ'ব ।"
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "ডকুমেন্ট মুক্ত কৰা হ'ব(_U)"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "গুপ্তশব্দ লিখুন"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "গুপ্তশব্দ প্ৰয়োজন"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"“%s” ডকুমেন্ট বৰ্তমানে লক কৰা আছে ও মুক্ত কৰাৰ জন্য গুপ্তশব্দ উল্লেখ কৰা আবশ্যক ।"
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "গুপ্তশব্দ: (_P)"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "গুপ্তশব্দ তৎক্ষনাৎ আঁতৰুৱা হ'ব (_i)"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _logout"
+msgstr "বাহিৰ হোৱা লৈকে গুপ্তশব্দ মনত ৰাখিব (_l)"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "গুপ্তশব্দ স্থায়ীৰূপে সংৰক্ষণ কৰা হ'ব ( _f)"
+
+#. Initial state
+#: ../shell/ev-print-operation.c:316
+msgid "Preparing to print ..."
+msgstr "মূদ্ৰণ কাৰ্য্যৰ প্ৰস্তুতি..."
+
+#: ../shell/ev-print-operation.c:318
+msgid "Finishing..."
+msgstr "শেষ কৰি আছে (_F)..."
+
+#: ../shell/ev-print-operation.c:320
+#, c-format
+msgid "Printing page %d of %d..."
+msgstr "পৃষ্ঠা %d, %d ৰ মূদ্ৰণ কৰা হৈছে..."
+
+#: ../shell/ev-print-operation.c:1143
+msgid "Printing is not supported on this printer."
+msgstr "এই প্ৰিন্টাৰে প্ৰিন্ট কৰা সম্ভব নহয় ।"
+
+#: ../shell/ev-print-operation.c:1208
+#| msgid "Invalid zip file"
+msgid "Invalid page selection"
+msgstr "পৃষ্ঠা নিৰ্বাচন বৈধ নহয়"
+
+#: ../shell/ev-print-operation.c:1209
+msgid "Warning"
+msgstr "সতৰ্কবাৰ্তা"
+
+#: ../shell/ev-print-operation.c:1211
+msgid "Your print range selection does not include any page"
+msgstr "প্ৰিন্টৰ উদ্দেশ্যে আপোনাৰ নিৰ্বাচিত পৃষ্ঠাৰ সীমাত কোনো পৃষ্ঠা উপস্থিত নাই"
+
+#: ../shell/ev-properties-dialog.c:57
+msgid "Properties"
+msgstr "বৈশিষ্ট্যাবলী"
+
+#: ../shell/ev-properties-dialog.c:91
+msgid "General"
+msgstr "সাধাৰণ"
+
+#: ../shell/ev-properties-dialog.c:101
+msgid "Fonts"
+msgstr "ফন্ট"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "ফন্ট"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "ফন্ট সংক্ৰান্ত তথ্য সংগ্ৰহ কৰা হৈছে... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "সংযুক্ত বস্তু"
+
+#: ../shell/ev-sidebar-layers.c:395
+msgid "Layers"
+msgstr "স্তৰবোৰ "
+
+#: ../shell/ev-sidebar-links.c:340
+msgid "Print..."
+msgstr "প্ৰিন্ট কৰক."
+
+#: ../shell/ev-sidebar-links.c:720
+msgid "Index"
+msgstr "সূচিপত্ৰ"
+
+#: ../shell/ev-sidebar-thumbnails.c:756
+msgid "Thumbnails"
+msgstr "থাম্ব-নাইল"
+
+#: ../shell/ev-window.c:829
+#, c-format
+msgid "Page %s - %s"
+msgstr "Page %s - %s"
+
+#: ../shell/ev-window.c:831
+#, c-format
+msgid "Page %s"
+msgstr "Page %s"
+
+#: ../shell/ev-window.c:1256
+msgid "The document contains no pages"
+msgstr "ডকুমেন্টত কোনো পৃষ্ঠা উপস্থিত নাই"
+
+#: ../shell/ev-window.c:1259
+#| msgid "The document contains no pages"
+msgid "The document contains only empty pages"
+msgstr "ডকুমেন্টত অকল ৰিক্ত পৃষ্ঠা উপস্থিত আছে"
+
+#: ../shell/ev-window.c:1488 ../shell/ev-window.c:1647
+msgid "Unable to open document"
+msgstr "ডকুমেন্ট খুলতে ব্যৰ্থ"
+
+#: ../shell/ev-window.c:1618
+#, c-format
+#| msgid "Loading document from %s"
+msgid "Loading document from “%s”"
+msgstr "“%s”ৰ পৰা ডকুমেন্ট লোড কৰা হৈছে"
+
+#: ../shell/ev-window.c:1756 ../shell/ev-window.c:1939
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "নথি ডাউন্‌লোড কৰা হৈছে (%d%%)"
+
+#: ../shell/ev-window.c:1886
+#, c-format
+msgid "Reloading document from %s"
+msgstr "%s ৰ পৰা ডকুমেন্ট পুনৰায় লোড কৰক"
+
+#: ../shell/ev-window.c:1918
+msgid "Failed to reload document."
+msgstr "ডকুমেন্ট প্ৰিন্ট কৰিবলৈ ব্যৰ্থ"
+
+#: ../shell/ev-window.c:2071
+msgid "Open Document"
+msgstr "ডকুমেন্ট খুলুন"
+
+#: ../shell/ev-window.c:2150
+#, c-format
+#| msgid "Couldn't create symlink “%s”: %s"
+msgid "Couldn't create symlink “%s”: "
+msgstr "“%s” ছিম-লিংক নিৰ্মাণ কৰা নাযায়: "
+
+#: ../shell/ev-window.c:2177
+msgid "Cannot open a copy."
+msgstr "Cannot open a copy."
+
+#: ../shell/ev-window.c:2413
+#, c-format
+msgid "Saving document to %s"
+msgstr "%s লৈ ডকুমেন্ট ৰক্ষা কৰা হৈছে"
+
+#: ../shell/ev-window.c:2416
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "%s লৈ সংযুক্ত বস্তু সংৰক্ষণ কৰক"
+
+#: ../shell/ev-window.c:2419
+#, c-format
+msgid "Saving image to %s"
+msgstr "%s লৈ ইমেজ ৰক্ষা কৰা হৈছে"
+
+#: ../shell/ev-window.c:2463 ../shell/ev-window.c:2560
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "“%s”ৰূপে নথিপত্ৰ সংৰক্ষণ কৰিবলৈ ব্যৰ্থ ।"
+
+#: ../shell/ev-window.c:2491
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "নথি আপ-ল'ড কৰা হৈছে (%d%%)"
+
+#: ../shell/ev-window.c:2495
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "সংলগ্ন নথি আপ-ল'ড কৰা হৈছে (%d%%)"
+
+#: ../shell/ev-window.c:2499
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "ছবি আপ-ল'ড কৰা হৈছে (%d%%)"
+
+#: ../shell/ev-window.c:2621
+msgid "Save a Copy"
+msgstr "একটি প্ৰতিলিপি সংৰক্ষণ কৰক"
+
+#: ../shell/ev-window.c:2835
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d ৰখি থকা কাৰ্য্য শাৰীত আছে"
+msgstr[1] "%d ৰখি থকা কাৰ্য্য শাৰীত আছে"
+
+#: ../shell/ev-window.c:2948
+#, c-format
+msgid "Printing job “%s”"
+msgstr "“%s” কাৰ্য্য মূদ্ৰণ কৰা হৈছে"
+
+#: ../shell/ev-window.c:3155
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "বন্ধ কৰাৰ আগতে “%s” মূদ্ৰণ কাৰ্য্য শেষ হোৱালৈ ৰখক ?"
+
+#: ../shell/ev-window.c:3158
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "এতিয়া %d মূদ্ৰণ কাৰ্য্য সক্ৰিয় । বন্ধ কৰাৰ আগতে মূদ্ৰণ কাৰ্য্য শেষ হোৱালৈ ৰখক ?"
+
+#: ../shell/ev-window.c:3170
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "এই সংযোগক্ষেত্ৰ বন্ধ কৰিলে, ৰখি থকা মূদ্ৰণ কাৰ্য্য মূদ্ৰণ কৰা ন'হ'ব । "
+
+#: ../shell/ev-window.c:3174
+msgid "Cancel _print and Close"
+msgstr "মূদ্ৰণ বাতিল কৰক আৰু বন্ধ কৰক (_p)"
+
+#: ../shell/ev-window.c:3178
+msgid "Close _after Printing"
+msgstr "মূদ্ৰণৰ পিছত বন্ধ কৰক (_a)"
+
+#: ../shell/ev-window.c:3784
+msgid "Toolbar Editor"
+msgstr "টুলবাৰ সম্পাদক"
+
+#: ../shell/ev-window.c:3915
+msgid "There was an error displaying help"
+msgstr "সহায়িকা প্ৰদৰ্শনত সমস্যা"
+
+#: ../shell/ev-window.c:4145
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+
+#: ../shell/ev-window.c:4174
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince একটি মুক্ত সফ্টওয়্যাৰ; Free Software Foundation দ্বাৰা প্ৰকাশিত GNU General "
+"Public License'ৰ শৰ্তানুযায়ী এটি বিতৰণ ও পৰিবৰ্তন কৰা যাব; লাইনসেন্সেৰ সংস্কৰণ ২ "
+"অথবা (আপোনাৰ সুবিধানুযায়ী) ঊৰ্ধ্বতন কোনো সংস্কৰণেৰ অধীন ।\n"
+
+#: ../shell/ev-window.c:4178
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince বিতৰণ কৰাৰ মূল উদ্দেশ্য যে ব্যৱহাৰকৰ্তাৰা এৰ দ্বাৰা উপকৃত হ'বন, কিন্তু এটিৰ "
+"জন্য কোনো সুস্পষ্ট ৱৰেন্টি উপস্থিত নাই; বাণিজ্যিক ও কোনো সুনিৰ্দিষ্ট কৰ্ম সাধনৰ জন্য "
+"অন্তৰ্নিহীত ৱৰেন্টিও অনুপস্থিত । অধিক জানতে GNU General Public License পড়ুন ।\n"
+
+#: ../shell/ev-window.c:4182
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Evince'ৰ সাথে GNU General Public License'ৰ একটি প্ৰতিলিপি উপলব্ধ হৱ উচিত; না "
+"থাকলে নিম্নলিখিত ঠিকানায় লিখে তা সংগ্ৰহ কৰক Free Software Foundation, Inc., 51 "
+"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\n"
+
+#: ../shell/ev-window.c:4206
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4209
+#| msgid "© 1996-2007 The Evince authors"
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 The Evince authors"
+
+#: ../shell/ev-window.c:4215
+msgid "translator-credits"
+msgstr "অমিতাক্ষ ফুকন ([email protected])"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4433
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "এই পৃষ্ঠায় %d-টি মিল সনাক্ত কৰা হৈছে"
+msgstr[1] "এই পৃষ্ঠায় %d-টি মিল সনাক্ত কৰা হৈছে"
+
+#: ../shell/ev-window.c:4441
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% অনুসন্ধান অবশিষ্ট আছে"
+
+#: ../shell/ev-window.c:4925
+msgid "_File"
+msgstr "নথিপত্ৰ (_F)"
+
+#: ../shell/ev-window.c:4926
+msgid "_Edit"
+msgstr "সম্পাদনা (_E)"
+
+#: ../shell/ev-window.c:4927
+msgid "_View"
+msgstr "প্ৰদৰ্শন (_V)"
+
+#: ../shell/ev-window.c:4928
+msgid "_Go"
+msgstr "গন্তব্য (_G)"
+
+#: ../shell/ev-window.c:4929
+msgid "_Help"
+msgstr "সাহায্য (_H)"
+
+#. File menu
+#: ../shell/ev-window.c:4932 ../shell/ev-window.c:5110
+#: ../shell/ev-window.c:5189
+msgid "_Open..."
+msgstr "খুলুন(_O)..."
+
+#: ../shell/ev-window.c:4933 ../shell/ev-window.c:5190
+msgid "Open an existing document"
+msgstr "কোনো উপস্থিত ডকুমেন্ট খুলুন"
+
+#: ../shell/ev-window.c:4935
+msgid "Op_en a Copy"
+msgstr "কপি কৰক"
+
+#: ../shell/ev-window.c:4936
+msgid "Open a copy of the current document in a new window"
+msgstr "খুলুন সৰ্বমোট"
+
+#: ../shell/ev-window.c:4938 ../shell/ev-window.c:5112
+msgid "_Save a Copy..."
+msgstr "প্ৰতিলিপি সংৰক্ষণ কৰক...(_S)"
+
+#: ../shell/ev-window.c:4939
+msgid "Save a copy of the current document"
+msgstr "বৰ্তমান ডকুমেন্টৰ একটি প্ৰতিলিপি সংৰক্ষণ কৰক"
+
+#: ../shell/ev-window.c:4941
+#| msgid "Print Set_up..."
+msgid "Page Set_up..."
+msgstr "পৃষ্ঠা নিৰ্ধাৰণ...(_u)"
+
+#: ../shell/ev-window.c:4942
+msgid "Setup the page settings for printing"
+msgstr "বৈশিষ্ট্য উল্লিখিত সময় অবধি"
+
+#: ../shell/ev-window.c:4944
+msgid "_Print..."
+msgstr "প্ৰিন্ট কৰক (_P)..."
+
+#: ../shell/ev-window.c:4947
+msgid "P_roperties"
+msgstr "বৈশিষ্ট (_r)"
+
+#: ../shell/ev-window.c:4955
+msgid "Select _All"
+msgstr "সমস্ত নিৰ্বাচন কৰক (_A)"
+
+#: ../shell/ev-window.c:4957
+msgid "_Find..."
+msgstr "অনুসন্ধান (_F)..."
+
+#: ../shell/ev-window.c:4958
+msgid "Find a word or phrase in the document"
+msgstr "ডকুমেন্টত একটি শব্দ অথবা পংক্তি অনুসন্ধান কৰক"
+
+#: ../shell/ev-window.c:4964
+msgid "T_oolbar"
+msgstr "টুল-বাৰ(_o)"
+
+#: ../shell/ev-window.c:4966
+msgid "Rotate _Left"
+msgstr "বাঁদিকে ঘোৰানো হ'ব (_L)"
+
+#: ../shell/ev-window.c:4968
+msgid "Rotate _Right"
+msgstr "ডানদিকে ঘোৰানো হ'ব (_R)"
+
+#: ../shell/ev-window.c:4978
+msgid "_Reload"
+msgstr "পুনৰায় লোড (_R)"
+
+#: ../shell/ev-window.c:4979
+msgid "Reload the document"
+msgstr "ডকুমেন্ট পুনৰায় লোড কৰক"
+
+#: ../shell/ev-window.c:4982
+msgid "Auto_scroll"
+msgstr "স্বয়ংক্ৰিয়"
+
+#: ../shell/ev-window.c:4992
+msgid "_First Page"
+msgstr "প্ৰথম পৃষ্ঠা (_F)"
+
+#: ../shell/ev-window.c:4993
+msgid "Go to the first page"
+msgstr "প্ৰথম পৃষ্ঠায় যাও"
+
+#: ../shell/ev-window.c:4995
+msgid "_Last Page"
+msgstr "সৰ্বশেষ পৃষ্ঠা (_L)"
+
+#: ../shell/ev-window.c:4996
+msgid "Go to the last page"
+msgstr "শেষ পৃষ্ঠায় যাও"
+
+#. Help menu
+#: ../shell/ev-window.c:5000
+msgid "_Contents"
+msgstr "বিষয়বস্তু (_C)"
+
+#: ../shell/ev-window.c:5003
+msgid "_About"
+msgstr "পৰিচিতি (_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5007
+msgid "Leave Fullscreen"
+msgstr "পূৰ্ণপৰ্দা মোড ত্যাগ কৰো"
+
+#: ../shell/ev-window.c:5008
+msgid "Leave fullscreen mode"
+msgstr "পূৰ্ণপৰ্দা মোডৰ পৰা প্ৰস্থান কৰো"
+
+#: ../shell/ev-window.c:5010
+msgid "Start Presentation"
+msgstr "আৰম্ভ"
+
+#: ../shell/ev-window.c:5011
+msgid "Start a presentation"
+msgstr "আৰম্ভ"
+
+#. View Menu
+#: ../shell/ev-window.c:5066
+msgid "_Toolbar"
+msgstr "টুল-বাৰ(_T)"
+
+#: ../shell/ev-window.c:5067
+msgid "Show or hide the toolbar"
+msgstr "টুলবাৰ প্ৰদৰ্শন কৰা হোক বা গুটিয়ে নেৱ হোক"
+
+#: ../shell/ev-window.c:5069
+msgid "Side _Pane"
+msgstr "পাৰ্শ্ববৰ্তী পেইন (_P)"
+
+#: ../shell/ev-window.c:5070
+msgid "Show or hide the side pane"
+msgstr "পাৰ্শ্ববৰ্তী পেইন প্ৰদৰ্শন অথবা আড়াল কৰা হ'ব"
+
+#: ../shell/ev-window.c:5072
+msgid "_Continuous"
+msgstr "অনবৰত (_C)"
+
+#: ../shell/ev-window.c:5073
+msgid "Show the entire document"
+msgstr "সম্পূৰ্ণ ডকুমেন্ট প্ৰদৰ্শন কৰা হ'ব"
+
+#: ../shell/ev-window.c:5075
+msgid "_Dual"
+msgstr "দ্বৈত (_D)"
+
+#: ../shell/ev-window.c:5076
+msgid "Show two pages at once"
+msgstr "একযোগে দুটি পৃষ্ঠা প্ৰদৰ্শিত হ'ব"
+
+#: ../shell/ev-window.c:5078
+msgid "_Fullscreen"
+msgstr "সম্পূৰ্ণ পৰ্দাজুড়ে প্ৰদৰ্শন (_F)"
+
+#: ../shell/ev-window.c:5079
+msgid "Expand the window to fill the screen"
+msgstr "পৰ্দাৰ সম্পূৰ্ণ মাপ অনুযায়ী প্ৰদৰ্শনৰ জন্য উইন্ডোৰ মাপ বৃদ্ধি কৰক"
+
+#: ../shell/ev-window.c:5081
+msgid "Pre_sentation"
+msgstr "Pre_sentation"
+
+#: ../shell/ev-window.c:5082
+msgid "Run document as a presentation"
+msgstr "প্ৰেসেন্টেশন ৰূপে ডকুমেন্ট প্ৰদৰ্শিত হ'ব"
+
+#. Links
+#: ../shell/ev-window.c:5095
+msgid "_Open Link"
+msgstr "লিঙ্ক খুলুন (_O)"
+
+#: ../shell/ev-window.c:5097
+msgid "_Go To"
+msgstr "এখানে যাও (_G)"
+
+#: ../shell/ev-window.c:5099
+msgid "Open in New _Window"
+msgstr "নতুন উইন্ডোতে প্ৰদৰ্শন কৰো (_W)"
+
+#: ../shell/ev-window.c:5101
+msgid "_Copy Link Address"
+msgstr "লিঙ্ক দ্বাৰা চিহ্নিত অবস্থান কপি কৰক (_C)"
+
+#: ../shell/ev-window.c:5103
+msgid "_Save Image As..."
+msgstr "নতুন নামে ছবি সংৰক্ষণ কৰক... (_S)"
+
+#: ../shell/ev-window.c:5105
+msgid "Copy _Image"
+msgstr "কপি কৰক চিত্ৰ"
+
+#: ../shell/ev-window.c:5163
+msgid "Zoom"
+msgstr "জুম"
+
+#: ../shell/ev-window.c:5165
+msgid "Adjust the zoom level"
+msgstr "প্ৰদৰ্শনৰ মাত্ৰা পৰিবৰ্তন কৰক"
+
+#: ../shell/ev-window.c:5175
+msgid "Navigation"
+msgstr "Navigation"
+
+#: ../shell/ev-window.c:5177
+msgid "Back"
+msgstr "পিছলৈ"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5180
+msgid "Move across visited pages"
+msgstr "Move across visited pages"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5210
+msgid "Previous"
+msgstr "পূৰ্বাবস্থা"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5215
+msgid "Next"
+msgstr "পৰবৰ্তী"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5219
+msgid "Zoom In"
+msgstr "বড় কৰে দেখানো"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5223
+msgid "Zoom Out"
+msgstr "ছোট কৰে দেখানো"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5231
+msgid "Fit Width"
+msgstr "প্ৰস্থ অনুযায়ী নিৰ্ধাৰণ"
+
+#: ../shell/ev-window.c:5398 ../shell/ev-window.c:5414
+msgid "Unable to launch external application."
+msgstr "Unable to open external link"
+
+#: ../shell/ev-window.c:5453
+msgid "Unable to open external link"
+msgstr "Unable to open external link"
+
+#: ../shell/ev-window.c:5618
+msgid "Couldn't find appropriate format to save image"
+msgstr "Couldn't find appropriate format to save image"
+
+#: ../shell/ev-window.c:5657
+msgid "The image could not be saved."
+msgstr "The image could not be saved."
+
+#: ../shell/ev-window.c:5689
+msgid "Save Image"
+msgstr "ছবি সংৰক্ষণ কৰো"
+
+#: ../shell/ev-window.c:5756
+msgid "Unable to open attachment"
+msgstr "সংযুক্ত বস্তু খুলতে ব্যৰ্থ"
+
+#: ../shell/ev-window.c:5807
+msgid "The attachment could not be saved."
+msgstr "সংযুক্ত বস্তু সংৰক্ষণ কৰিবলৈ ব্যৰ্থ ।"
+
+#: ../shell/ev-window.c:5852
+msgid "Save Attachment"
+msgstr "সংৰক্ষণ কৰক সংযুক্ত বস্তু"
+
+#: ../shell/ev-window-title.c:163
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - গুপ্তশব্দ আবশ্যক"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "By extension"
+
+#: ../shell/main.c:73 ../shell/main.c:436
+msgid "MATE Document Viewer"
+msgstr "MATE Document Viewer"
+
+#: ../shell/main.c:81
+msgid "The page of the document to display."
+msgstr "প্ৰদৰ্শনৰ উদ্দেশ্যে চিহ্নিত ডকুমেন্টৰ পৃষ্ঠা সংখ্যা ।"
+
+#: ../shell/main.c:81
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr "সম্পূৰ্ণ পৰ্দায় evince চালানো হ'ব"
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr "প্ৰেসেন্টেশন মোডে evince চালানো হ'ব"
+
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr "পূৰ্বৰূপ প্ৰদৰ্শনৰ মোডে evince চালানো হ'ব"
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr "The word or phrase to find in the document"
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:89
+msgid "[FILE...]"
+msgstr "[FILE...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"বুলিয়াল মান প্ৰযোজ্য, true (সত্য) হলে থাম্ব-নাইল সক্ৰিয় কৰা হ'ব ও মান false (সত্য "
+"নহয়) হলে নতুন থাম্ব-নাইল নিৰ্মাণ বন্ধ কৰা হ'ব"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF ডকুমেন্টৰ থাম্ব-নাইল নিৰ্মাণ সক্ৰিয় কৰা হ'ব"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF ডকুমেন্টৰ জন্য ব্যৱহাৰযোগ্য থাম্ব-নাইল আদেশ"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF ডকুমেন্টৰৰ জন্য থাম্ব-নাইল নিৰ্মাণে ব্যৱহৃত বৈধ আদেশ ও আৰ্গুমেন্ট । অধিক জানতে "
+"caja thumbnailer সংক্ৰান্ত নথিপত্ৰ পড়ুন ।"
+
+#~ msgid "Co_nnect"
+#~ msgstr "সংযোগ কৰক (_n)"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "অজ্ঞাত ৰূপে সংযোগ কৰক (_a)"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "চিহ্নিত ব্যৱহাৰকৰ্তাৰ পৰিচয়ে সংযোগ কৰক: (_s)"
+
+#~ msgid "_Username:"
+#~ msgstr "ব্যৱহাৰকৰ্তাৰ নাম (_U):"
+
+#~ msgid "_Domain:"
+#~ msgstr "ডোমেইন (_D):"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "গুপ্তশব্দ মনত ৰখা ন'হ'ব (_F)"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "প্ৰস্থান নকৰা অবধিত গুপ্তশব্দ মনত ৰখা হ'ব (_R)"
+
+#~ msgid "_Remember forever"
+#~ msgstr "গুপ্তশব্দ স্থায়ীৰূপে মনত ৰখা হ'ব (_R)"
+
+#~ msgid "File not available"
+#~ msgstr "নথিপত্ৰ উপলব্ধ নয়"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "দূৰবৰ্তী"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "চিঠি"
+
+#~ msgid "Tabloid"
+#~ msgstr "ট্যাবলয়েড"
+
+#~ msgid "Ledger"
+#~ msgstr "লেজাৰ"
+
+#~ msgid "Legal"
+#~ msgstr "লিগাল"
+
+#~ msgid "Statement"
+#~ msgstr "স্টেটমেন্ট"
+
+#~ msgid "Executive"
+#~ msgstr "এক্সিকিউটিভ"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "ফোলিও"
+
+#~ msgid "Quarto"
+#~ msgstr "কোয়াৰ্তো"
+
+#~ msgid "10x14"
+#~ msgstr "১০x১৪"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "Cannot open file “%s”."
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "“%s” ডকুমেন্ট লোড কৰতে ব্যৰ্থ । পাথেৰ মধ্যে Ghostscript ইন্টাৰপ্ৰেটাৰ পোৱা নাযায়"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "এনক্যাপসুলেটেড PostScript"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "ইন্টাৰপ্ৰেটাৰ ব্যৰ্থ ।"
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "MIME ধৰনেৰ ব্যবস্থাপনা কৰা হয়নি: “%s”"
+
+#~ msgid "Password Entry"
+#~ msgstr "Password Entry"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "কি-ৰং'ৰ মধ্যে পাসওয়াৰ্ড সংৰক্ষণ কৰা হবে"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f in"
+
+#~ msgid "Find Previous"
+#~ msgstr "পূৰ্ববৰ্তী উপস্থিতি অনুসন্ধান"
+
+#~ msgid "Find Next"
+#~ msgstr "পৰবৰ্তী উপস্থিতি অনুসন্ধান"
+
+#~ msgid "Incorrect password"
+#~ msgstr "ভুল পাসওয়াৰ্ড"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "PDF নিৰ্মাণ ব্যবস্থা সমৰ্থিত নয়"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "“%s” ড্ৰাইভাৰ সহযোগে আপনি একটি প্ৰিন্টাৰে প্ৰিন্ট কৰাৰ প্ৰচেষ্টা কৰেছেন । এই "
+#~ "প্ৰোগ্ৰামেৰ ক্ষেত্ৰে PostScript প্ৰিন্টাৰ ড্ৰাইভাৰ আবশ্যক ।"
+
+#~ msgid "Pages"
+#~ msgstr "পৃষ্ঠা"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Evince Document Viewer"
+
diff --git a/po/ast.po b/po/ast.po
new file mode 100644
index 00000000..986328e4
--- /dev/null
+++ b/po/ast.po
@@ -0,0 +1,1813 @@
+# Asturian translation for evince.
+# Copyright (C) 2009 evince's COPYRIGHT HOLDER
+# This file is distributed under the same license as the evince package.
+# Xandru Armesto <[email protected]>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince mate-2-28\n"
+"Report-Msgid-Bugs-To: "
+"http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-07-23 07:59+0000\n"
+"PO-Revision-Date: 2010-07-23 15:54+0200\n"
+"Last-Translator: Xandru Armesto <[email protected]>\n"
+"Language-Team: Softastur [email protected]\n"
+"Language: ast\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Virtaal 0.5.2\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Fallu al llanzar el comandu «%s» pa descomprimir el cómic nel direutoriu "
+"temporal: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "El comandu “%s” falló al descomprimir el cómic nel direutoriu temporal."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "El comandu “%s” nun acabó de forma normal."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Nun ye un tipu MIME de llibru de cómic: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Nun se puede atopar un comandu afayadizu pa descomprimir el ficheru de cómic"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Tipu MIME desconocíu"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Ficheru tollíu"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Nun hai ficheros nel archivador"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Nun s'alcontraron imáxenes nel ficheru %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Hebo un fallu al desaniciar “%s”."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Fallu %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Llibros de cómics"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "El documentu DjVu tien un formatu incorreutu"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"El documentu ta compuestu por dellos ficheros. Nun se puede acceder a ún o "
+"más d'ellos."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Documentos DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "El documentu DVI tien un formatu incorreutu"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Documentos DVI"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr "Esti trabayu ye de Dominiu Públicu"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "Sí"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "Non"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "Tipu 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "Tipu 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "Tipu 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "Tipu 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "Tipu 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "Tipu de fonte desconocida"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "Ensin nome"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "Soconxuntu incrustáu"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "Incrustáu"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "Non incrustáu"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Documentos PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Documentu non válidu"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Diapositives Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Ensin fallu"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Nun hai memoria abonda"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Nun se puede alcontrar la robla ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Ficheru ZIP inválidu"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Los ZIP multificheru nun tán sofitaos"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Nun se pue abrir el ficheru"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Nun se puen lleer los datos del ficheru"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Nun se puede alcontrar el ficheru nel archivador ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Fallu desconocíu"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Nun se pudo cargar el documentu “%s”"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Fallu al guardar el documentu “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Documentos PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Nun se pudo guardar l'axuntu “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Nun se pudo abrir l'axuntu “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Nun se pudo abrir l'axuntu “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "El tipu de ficheru %s (%s) nun ta sofitáu"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Tolos Documentos"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Tolos Ficheros"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Nun se pudo crear un direutoriu temporal: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Nun se pudo crear un direutoriu temporal: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "El ficheru nun ye un ficheru .desktop válidu"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Versión '%s' del ficheru desktop non reconocida"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Aniciando %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "L'aplicación nun aceuta documentos na llinia de comandos"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Opción de llanzamientu non reconocida: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"Nun se puen pasar los URIs de documentos a entraes d'escritoriu 'Type=Link'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Nun ye un elementu llanzable"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Desactivar la conexón al remanador de sesiones"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Especificar el ficheru que contién la configuración guardada"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "FICHERU"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Especificar la ID del remanamientu de sesión"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opciones de remanamientu de la sesión:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Ver les opciones de remanamientu de la sesión"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "Amosar “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "_Mover a la Barra de Ferramientes"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "Mueve l'elementu seleicionáu a la barra de ferramientes"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "_Quitar de la Barra de Ferramientes"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "Quita l'elementu seleicionáu de la barra de ferramientes"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "_Esborrar Barra de Ferramientes"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "Quitar la barra de ferramientes seleicionada"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Separtador"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+msgid "Running in presentation mode"
+msgstr "Executar en mou presentación"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5379
+msgid "Best Fit"
+msgstr "Axuste Óptimu"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Axustar al anchor de páxina"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4235
+#: ../shell/ev-window-title.c:149 ../shell/main.c:308
+#, c-format
+msgid "Document Viewer"
+msgstr "Visor de Documentos"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Ver documentos multipáxina"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Saltase les restricciones del documentu"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Saltase les restricciones del documentu, como restricción pa copiar o "
+"imprentar."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "Esborrar el ficheru temporal"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "Ficheru d'axustes d'imprentación"
+
+#: ../previewer/ev-previewer.c:147 ../previewer/ev-previewer.c:181
+msgid "MATE Document Previewer"
+msgstr "Visor de Documentos de MATE"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3031
+msgid "Failed to print document"
+msgstr "Nun se pudo imprentar el documentu"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Nun se pudo atopar la imprentadora actual '%s'"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5128
+msgid "_Previous Page"
+msgstr "_Páxina Anterior"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5129
+msgid "Go to the previous page"
+msgstr "Dir a la páxina anterior"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5131
+msgid "_Next Page"
+msgstr "Páxi_na Siguiente"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5132
+msgid "Go to the next page"
+msgstr "Dir a la páxina siguiente"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5115
+msgid "Enlarge the document"
+msgstr "Allargar el documentu"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5118
+msgid "Shrink the document"
+msgstr "Amenorgar el documentu"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1315
+msgid "Print"
+msgstr "Imprentar"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5086
+msgid "Print this document"
+msgstr "Imprentar esti documentu"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5230
+msgid "_Best Fit"
+msgstr "Axus_te Óptimu"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5231
+msgid "Make the current document fill the window"
+msgstr "Fai que'l documentu actual enllene la ventana"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5233
+msgid "Fit Page _Width"
+msgstr "Axustar al A_nchor de Páxina"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5234
+msgid "Make the current document fill the window width"
+msgstr "Fai que'l documentu actual enllene l'anchor de la ventana"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5301
+msgid "Page"
+msgstr "Páxina"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5302
+msgid "Select Page"
+msgstr "Seleiciona la páxina"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Documentu"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Títulu:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Allugamientu:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Asuntu:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "Autor:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Pallabres clave:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Productor:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Creador:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Creáu:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Camudáu:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Númberu de Páxines:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimizáu:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Formatu:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Seguridá:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Tamañu del Papel:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1896
+msgid "None"
+msgstr "Dengún"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:284
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:288
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f pulgaes"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Vertical (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Apaisáu (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d de %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "de %d"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:341
+msgid "Preparing to print…"
+msgstr "Tresnando pa imprentar..."
+
+#: ../libview/ev-print-operation.c:343
+msgid "Finishing…"
+msgstr "Finando…"
+
+#: ../libview/ev-print-operation.c:345
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Imprentando páxina %d de %d…"
+
+#: ../libview/ev-print-operation.c:1169
+msgid "Printing is not supported on this printer."
+msgstr "La impresión nun ta sofitada nesta imprentadora."
+
+#: ../libview/ev-print-operation.c:1234
+msgid "Invalid page selection"
+msgstr "Seleición de páxina inválida"
+
+#: ../libview/ev-print-operation.c:1235
+msgid "Warning"
+msgstr "Avisu"
+
+#: ../libview/ev-print-operation.c:1237
+msgid "Your print range selection does not include any pages"
+msgstr "La escoyeta d'intervalu nun inclúi denguna páxina"
+
+#: ../libview/ev-print-operation.c:1891
+msgid "Page Scaling:"
+msgstr "Escaláu de Páxina:"
+
+#: ../libview/ev-print-operation.c:1897
+msgid "Shrink to Printable Area"
+msgstr "Encoyer a un Área Imprentable"
+
+#: ../libview/ev-print-operation.c:1898
+msgid "Fit to Printable Area"
+msgstr "Axustar a un Área Imprentable"
+
+#: ../libview/ev-print-operation.c:1901
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Escalar les páxines del documentu p'axustales a la páxina d'imprentación. "
+"Esbilla una de les siguientes:\n"
+"\n"
+"• «Dengún»: Nun se fai escaláu de páxina.\n"
+"\n"
+"• «Encoyer a un área imprentable»: Les páxines del documentu más grandes que "
+"l'área d'imprentación amenórguense p'axustase al área d'imprentación de "
+"páxina de la imprentadora.\n"
+"\n"
+"• «Axustar a un área imprentable»: Les páxines del documentu auméntense o "
+"amenórguense según se requiera p'axustase al área d'imprentación de páxina "
+"de la imprentadora.\n"
+
+#: ../libview/ev-print-operation.c:1913
+msgid "Auto Rotate and Center"
+msgstr "Auto Voltiar y Centrar"
+
+#: ../libview/ev-print-operation.c:1916
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Voltiar la orientación d'imprentación de páxina de cada páxina que concase "
+"con cada páxina del documentu. Les páxines del documentu, van centrase na "
+"páxina d'imprentación."
+
+#: ../libview/ev-print-operation.c:1921
+msgid "Select page size using document page size"
+msgstr "Seleicionar el tamañu de páxina usando tamaños de páxines de documentos"
+
+#: ../libview/ev-print-operation.c:1923
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Cuando ta activáu, cada páxina va imprentase nel mesmu tamañu de papel que "
+"la páxina del documentu."
+
+#: ../libview/ev-print-operation.c:2005
+msgid "Page Handling"
+msgstr "Manexu de Páxines"
+
+#: ../libview/ev-jobs.c:1438
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Falló al imprentar la páxina %d: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Mover arriba"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Mover abaxo"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Mover la Vista Arriba"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Mover la Vista Abaxo"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Vista de Documentu"
+
+#: ../libview/ev-view-presentation.c:673
+msgid "Jump to page:"
+msgstr "Saltar a la páxina:"
+
+#: ../libview/ev-view-presentation.c:975
+msgid "End of presentation. Click to exit."
+msgstr "Fin de la presentación. Calca pa colar."
+
+#: ../libview/ev-view.c:1727
+msgid "Go to first page"
+msgstr "Dir a la primer páxina"
+
+#: ../libview/ev-view.c:1729
+msgid "Go to previous page"
+msgstr "Dir a la páxina anterior"
+
+#: ../libview/ev-view.c:1731
+msgid "Go to next page"
+msgstr "Dir a la páxina siguiente"
+
+#: ../libview/ev-view.c:1733
+msgid "Go to last page"
+msgstr "Dir a la páxina cabera"
+
+#: ../libview/ev-view.c:1735
+msgid "Go to page"
+msgstr "Dir a la páxina"
+
+#: ../libview/ev-view.c:1737
+msgid "Find"
+msgstr "Alcontrar"
+
+#: ../libview/ev-view.c:1765
+#, c-format
+msgid "Go to page %s"
+msgstr "Dir a la páxina %s"
+
+#: ../libview/ev-view.c:1771
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Dir a %s nel ficheru “%s”"
+
+#: ../libview/ev-view.c:1774
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Dir al ficheru “%s”"
+
+#: ../libview/ev-view.c:1782
+#, c-format
+msgid "Launch %s"
+msgstr "Llanzar %s"
+
+#: ../libview/ev-view.c:3949 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Cargando…"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Atopar:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5103
+msgid "Find Pre_vious"
+msgstr "Atopar Anter_ior"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Atopar l'apaición anterior de la cadena"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5101
+msgid "Find Ne_xt"
+msgstr "Atopar Sig_uiente"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Atopar la siguiente apaición de la cadena"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Sensible _a Mayúscules"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Alternar a gueta sensible a mayúscules"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Contraseña pal documentu %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Convirtiendo %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "Convirtiéronse %d de %d documentos"
+
+#: ../shell/ev-convert-metadata.c:164 ../shell/ev-convert-metadata.c:179
+msgid "Converting metadata"
+msgstr "Convirtiendo metadatos"
+
+#: ../shell/ev-convert-metadata.c:185
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"El formatu de metadatos usáu por Evince camudó, poro, necesita migrase. Si "
+"la migración s'encaboxa, nun funcionará l'atroxu de los metadatos."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Abrir un documentu recién usáu"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Esti documentu ta bloquiáu y namái se pue lleer conseñando la contraseña "
+"correuta."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "Desbloq_uiar Documentu"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Conseñe la contraseña"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Necesítase contraseña"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"El documentu “%s” ta bloquiáu y requier d'una contraseña enantes de poder "
+"abrilu."
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Contraseña:"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "Escaecer la contraseña _darréu"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _log out"
+msgstr "Remembra la contraseña hasta que _salgas de la sesión"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "Remembrar pa _siempre"
+
+#: ../shell/ev-properties-dialog.c:58
+msgid "Properties"
+msgstr "Propiedaes"
+
+#: ../shell/ev-properties-dialog.c:92
+msgid "General"
+msgstr "Xeneral"
+
+#: ../shell/ev-properties-dialog.c:102
+msgid "Fonts"
+msgstr "Fontes"
+
+#: ../shell/ev-properties-dialog.c:115
+msgid "Document License"
+msgstr "Llicencia del documentu"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Fonte"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Obteniendo información tipográfica… %3d%%"
+
+#: ../shell/ev-properties-license.c:138
+msgid "Usage terms"
+msgstr "Términos d'usu"
+
+#: ../shell/ev-properties-license.c:144
+msgid "Text License"
+msgstr "Testu de la Llicencia"
+
+#: ../shell/ev-properties-license.c:150
+msgid "Further Information"
+msgstr "Más Información"
+
+#: ../shell/ev-sidebar-attachments.c:712
+msgid "Attachments"
+msgstr "Axuntos"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Capes"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Imprentar…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Índiz"
+
+#: ../shell/ev-sidebar-thumbnails.c:956
+msgid "Thumbnails"
+msgstr "Miniatures"
+
+#: ../shell/ev-window.c:840
+#, c-format
+msgid "Page %s — %s"
+msgstr "Páxina %s — %s"
+
+#: ../shell/ev-window.c:842
+#, c-format
+msgid "Page %s"
+msgstr "Páxina %s"
+
+#: ../shell/ev-window.c:1288
+msgid "The document contains no pages"
+msgstr "El documentu nun contién páxina denguna"
+
+#: ../shell/ev-window.c:1291
+msgid "The document contains only empty pages"
+msgstr "El documentu namás tien páxines baleres"
+
+#: ../shell/ev-window.c:1491 ../shell/ev-window.c:1657
+msgid "Unable to open document"
+msgstr "Nun se pudo abrir el documentu"
+
+#: ../shell/ev-window.c:1628
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Cargando documentu dende “%s”"
+
+#: ../shell/ev-window.c:1770 ../shell/ev-window.c:2047
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Descargando documentu (%d%%)"
+
+#: ../shell/ev-window.c:1803
+msgid "Failed to load remote file."
+msgstr "Falló al recargar el documentu remotu."
+
+#: ../shell/ev-window.c:1991
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Recargando'l documentu dende %s"
+
+#: ../shell/ev-window.c:2023
+msgid "Failed to reload document."
+msgstr "Falló al recargar el documentu."
+
+#: ../shell/ev-window.c:2178
+msgid "Open Document"
+msgstr "Abrir Documentu"
+
+#: ../shell/ev-window.c:2442
+#, c-format
+msgid "Saving document to %s"
+msgstr "Guardando'l documentu en %s"
+
+#: ../shell/ev-window.c:2445
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Guardando l'axuntu en %s"
+
+#: ../shell/ev-window.c:2448
+#, c-format
+msgid "Saving image to %s"
+msgstr "Guardando la imaxe en %s"
+
+#: ../shell/ev-window.c:2492 ../shell/ev-window.c:2592
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "El ficheru nun se pudo guardar como “%s”."
+
+#: ../shell/ev-window.c:2523
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Xubiendo'l documentu (%d%%)"
+
+#: ../shell/ev-window.c:2527
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Xubiendo l'axuntu (%d%%)"
+
+#: ../shell/ev-window.c:2531
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Xubiendo la imaxe (%d%%)"
+
+#: ../shell/ev-window.c:2653
+msgid "Save a Copy"
+msgstr "Guardar una Copia"
+
+#: ../shell/ev-window.c:2975
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d trabayu pendiente na cola"
+msgstr[1] "%d trabayos pendientes na cola"
+
+#: ../shell/ev-window.c:3088
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Imprentando trabayu “%s”"
+
+#: ../shell/ev-window.c:3300
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr ""
+"¿Esperar hasta que fine'l trabayu d'imprentación “%s” enantes de zarrar?"
+
+#: ../shell/ev-window.c:3303
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Esisten %d trabayos d'impresión activos. ¿Quies esperar a que fine la "
+"imprentadora enantes de zarrar?"
+
+#: ../shell/ev-window.c:3315
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Si zarres la ventana, los trabayos d'imprentación pendientes nun se van "
+"imprentar."
+
+#: ../shell/ev-window.c:3319
+msgid "Cancel _print and Close"
+msgstr "Encaboxar la _imprentación y Zarrar"
+
+#: ../shell/ev-window.c:3323
+msgid "Close _after Printing"
+msgstr "Zarrar _dempués d'Imprentar"
+
+#: ../shell/ev-window.c:3888
+msgid "Toolbar Editor"
+msgstr "Editor de la Barra de Ferramientes"
+
+#: ../shell/ev-window.c:4020
+msgid "There was an error displaying help"
+msgstr "Hebo un fallu al amosar l'aida"
+
+#: ../shell/ev-window.c:4231
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Visor de Documentos.\n"
+"Usando %s (%s)"
+
+#: ../shell/ev-window.c:4262
+msgid ""
+"Evince 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.\n"
+msgstr "Evince ye software llibre; pues redistribuyilu y/o camudalu baxo los "
+"términos de la Llicencia Pública Xeneral de GNU asoleyada pola Free Software "
+"Foundation; yá seya na so versión 2 ó (al so criteriu) nuna versión "
+"postrera.\n"
+
+#: ../shell/ev-window.c:4266
+msgid ""
+"Evince 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.\n"
+msgstr "Evince distribúise col enfotu de que seya útil, pero ENSIN GARANTÍA; ensin "
+"nenguna garantía implícita de COMERCIALIDÁ o IDONEIDÁ PA UN FIN DETERMINÁU. "
+" Adique la Llicencia General GNU pa más detáis.\n"
+
+#: ../shell/ev-window.c:4270
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr "Deberíes tener recibío una copia de la Llicencia Pública Xeneral de GNU "
+"xunto con Evince; si nun ye'l casu, escribi a Free Software Foundation, "
+"Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:4295
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4298
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Los autores d'Evince"
+
+#: ../shell/ev-window.c:4304
+msgid "translator-credits"
+msgstr ""
+"Xandru Armesto: [email protected]\n"
+"Launchpad Contributions:\n"
+" Dangerous Piper https://launchpad.net/~dangerouspiper\n"
+" Iñigo Varela https://launchpad.net/~malditoastur\n"
+" Xandru Martino https://launchpad.net/~xandru-martino\n"
+" Xuacu https://launchpad.net/~xuacusk8"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4576
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d alcontráu nesta páxina"
+msgstr[1] "%d alcontraos nesta páxina"
+
+#: ../shell/ev-window.c:4584
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% restante pa guetar"
+
+#: ../shell/ev-window.c:5066
+msgid "_File"
+msgstr "_Ficheru"
+
+#: ../shell/ev-window.c:5067
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../shell/ev-window.c:5068
+msgid "_View"
+msgstr "_Ver"
+
+#: ../shell/ev-window.c:5069
+msgid "_Go"
+msgstr "_Dir"
+
+#: ../shell/ev-window.c:5070
+msgid "_Help"
+msgstr "_Aida"
+
+#. File menu
+#: ../shell/ev-window.c:5073 ../shell/ev-window.c:5341
+msgid "_Open…"
+msgstr "_Abrir…"
+
+#: ../shell/ev-window.c:5074 ../shell/ev-window.c:5342
+msgid "Open an existing document"
+msgstr "Abre un documentu esistente"
+
+#: ../shell/ev-window.c:5076
+msgid "Op_en a Copy"
+msgstr "A_brir una Copia"
+
+#: ../shell/ev-window.c:5077
+msgid "Open a copy of the current document in a new window"
+msgstr "Abre una copia del documentu actual nuna ventana nueva"
+
+#: ../shell/ev-window.c:5079
+msgid "_Save a Copy…"
+msgstr "Guardar una C_opia…"
+
+#: ../shell/ev-window.c:5080
+msgid "Save a copy of the current document"
+msgstr "Guarda una copia del documentu actual"
+
+#: ../shell/ev-window.c:5082
+msgid "Page Set_up…"
+msgstr "_Configurar Páxina…"
+
+#: ../shell/ev-window.c:5083
+msgid "Set up the page settings for printing"
+msgstr "Configura los axustes de páxina pa imprentar"
+
+#: ../shell/ev-window.c:5085
+msgid "_Print…"
+msgstr "Im_prentar..."
+
+#: ../shell/ev-window.c:5088
+msgid "P_roperties"
+msgstr "P_ropiedaes"
+
+#: ../shell/ev-window.c:5096
+msgid "Select _All"
+msgstr "Seleicion_ar Too"
+
+#: ../shell/ev-window.c:5098
+msgid "_Find…"
+msgstr "At_opar…"
+
+#: ../shell/ev-window.c:5099
+msgid "Find a word or phrase in the document"
+msgstr "Guetar una pallabra o fras nel documentu"
+
+#: ../shell/ev-window.c:5105
+msgid "T_oolbar"
+msgstr "_Barra de ferramientes"
+
+#: ../shell/ev-window.c:5107
+msgid "Rotate _Left"
+msgstr "Voltiar a la _Esquierda"
+
+#: ../shell/ev-window.c:5109
+msgid "Rotate _Right"
+msgstr "Voltiar a la D_recha"
+
+#: ../shell/ev-window.c:5120
+msgid "_Reload"
+msgstr "_Recargar"
+
+#: ../shell/ev-window.c:5121
+msgid "Reload the document"
+msgstr "Recarga'l documentu"
+
+#: ../shell/ev-window.c:5124
+msgid "Auto_scroll"
+msgstr "Autode_splazar"
+
+#: ../shell/ev-window.c:5134
+msgid "_First Page"
+msgstr "_Primer Páxina"
+
+#: ../shell/ev-window.c:5135
+msgid "Go to the first page"
+msgstr "Dir a la primer páxina"
+
+#: ../shell/ev-window.c:5137
+msgid "_Last Page"
+msgstr "Páxina C_abera"
+
+#: ../shell/ev-window.c:5138
+msgid "Go to the last page"
+msgstr "Dir a la páxina cabera"
+
+#. Help menu
+#: ../shell/ev-window.c:5142
+msgid "_Contents"
+msgstr "_Conteníos"
+
+#: ../shell/ev-window.c:5145
+msgid "_About"
+msgstr "Tocante _a"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5149
+msgid "Leave Fullscreen"
+msgstr "Dexar Pantalla Completa"
+
+#: ../shell/ev-window.c:5150
+msgid "Leave fullscreen mode"
+msgstr "Dexar mou pantalla completa"
+
+#: ../shell/ev-window.c:5152
+msgid "Start Presentation"
+msgstr "Aniciar presentación"
+
+#: ../shell/ev-window.c:5153
+msgid "Start a presentation"
+msgstr "Aniciar una presentación"
+
+#. View Menu
+#: ../shell/ev-window.c:5212
+msgid "_Toolbar"
+msgstr "_Barra Ferramientes"
+
+#: ../shell/ev-window.c:5213
+msgid "Show or hide the toolbar"
+msgstr "Amuesa o anubre la barra de ferramientes"
+
+#: ../shell/ev-window.c:5215
+msgid "Side _Pane"
+msgstr "Barra _Llateral"
+
+#: ../shell/ev-window.c:5216
+msgid "Show or hide the side pane"
+msgstr "Amuesa o anubre'l panel llateral"
+
+#: ../shell/ev-window.c:5218
+msgid "_Continuous"
+msgstr "_Continuu"
+
+#: ../shell/ev-window.c:5219
+msgid "Show the entire document"
+msgstr "Amosar el documentu completu"
+
+#: ../shell/ev-window.c:5221
+msgid "_Dual"
+msgstr "_Dual"
+
+#: ../shell/ev-window.c:5222
+msgid "Show two pages at once"
+msgstr "Amosar dos páxines al empar"
+
+#: ../shell/ev-window.c:5224
+msgid "_Fullscreen"
+msgstr "_Pantalla completa:"
+
+#: ../shell/ev-window.c:5225
+msgid "Expand the window to fill the screen"
+msgstr "Espurrir la ventana hasta enllenar la pantalla"
+
+#: ../shell/ev-window.c:5227
+msgid "Pre_sentation"
+msgstr "Pre_sentación"
+
+#: ../shell/ev-window.c:5228
+msgid "Run document as a presentation"
+msgstr "Ver el documentu como una presentación"
+
+#: ../shell/ev-window.c:5236
+msgid "_Inverted Colors"
+msgstr "Colores _Invertíos"
+
+#: ../shell/ev-window.c:5237
+msgid "Show page contents with the colors inverted"
+msgstr "Amosar los conteníos de la páxina con colores invertíos"
+
+#. Links
+#: ../shell/ev-window.c:5245
+msgid "_Open Link"
+msgstr "_Abrir Enllaz"
+
+#: ../shell/ev-window.c:5247
+msgid "_Go To"
+msgstr "_Dir a"
+
+#: ../shell/ev-window.c:5249
+msgid "Open in New _Window"
+msgstr "Abrir nuna _Ventana Nueva"
+
+#: ../shell/ev-window.c:5251
+msgid "_Copy Link Address"
+msgstr "_Copiar Direición del Enllaz"
+
+#: ../shell/ev-window.c:5253
+msgid "_Save Image As…"
+msgstr "Guardar imaxe _como…"
+
+#: ../shell/ev-window.c:5255
+msgid "Copy _Image"
+msgstr "Copiar _Imaxe"
+
+#: ../shell/ev-window.c:5260
+msgid "_Open Attachment"
+msgstr "Guardar A_xuntos"
+
+#: ../shell/ev-window.c:5262
+msgid "_Save Attachment As…"
+msgstr "Guard_ar Axuntu Como…"
+
+#: ../shell/ev-window.c:5315
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../shell/ev-window.c:5317
+msgid "Adjust the zoom level"
+msgstr "Axustar el nivel de zoom"
+
+#: ../shell/ev-window.c:5327
+msgid "Navigation"
+msgstr "Navegación"
+
+#: ../shell/ev-window.c:5329
+msgid "Back"
+msgstr "Volver"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5332
+msgid "Move across visited pages"
+msgstr "Movese a traviés de les páxines visitaes"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5362
+msgid "Previous"
+msgstr "Previu"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5367
+msgid "Next"
+msgstr "Siguiente"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5371
+msgid "Zoom In"
+msgstr "Aumentar zoom"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5375
+msgid "Zoom Out"
+msgstr "Amenorgar zoom"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5383
+msgid "Fit Width"
+msgstr "Axustar Anchor"
+
+#: ../shell/ev-window.c:5544 ../shell/ev-window.c:5561
+msgid "Unable to launch external application."
+msgstr "Nun pudo llanzase l'aplicación esterna."
+
+#: ../shell/ev-window.c:5618
+msgid "Unable to open external link"
+msgstr "Nun se pudo abrir l'enllaz esternu"
+
+#: ../shell/ev-window.c:5785
+msgid "Couldn't find appropriate format to save image"
+msgstr "Nun se pudo alcontrar el formatu afayadizu pa guardar la imaxe"
+
+#: ../shell/ev-window.c:5827
+msgid "The image could not be saved."
+msgstr "La imaxe nun se pudo guardar."
+
+#: ../shell/ev-window.c:5859
+msgid "Save Image"
+msgstr "Guardar Imaxe"
+
+#: ../shell/ev-window.c:5926
+msgid "Unable to open attachment"
+msgstr "Nun se pudo abrir l'axuntu"
+
+#: ../shell/ev-window.c:5979
+msgid "The attachment could not be saved."
+msgstr "L'axuntu nun se pudo guardar."
+
+#: ../shell/ev-window.c:6024
+msgid "Save Attachment"
+msgstr "Guardar Axuntos"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Requierse una contraseña"
+
+#: ../shell/ev-utils.c:315
+msgid "By extension"
+msgstr "Per estensión"
+
+#: ../shell/main.c:70 ../shell/main.c:272
+msgid "MATE Document Viewer"
+msgstr "Visor de Documentos de MATE"
+
+#: ../shell/main.c:78
+msgid "The page of the document to display."
+msgstr "La páxina del documentu a amosar."
+
+#: ../shell/main.c:78
+msgid "PAGE"
+msgstr "PÁXINA"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Executar Evince en mou de pantalla completa"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Executar Evince en mou de presentación"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Executar Evince como un previsualizador"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "La pallabra o fras que atopar nel documentu"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "CADENA"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FICHERU…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Hai opciones Booleanes: braero habilita entever, y falso deshabilita la "
+"creación de vistes en miniatura nueves"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Activar miniatures de Documentos PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Comandu de miniatures pa los Documentos PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Comandu válidu y argumentos pal miniaturizador de documentos PDF. Llei la "
+"documentación pal miniaturizador de Caja pa más información."
+
+#~ msgid "800%"
+#~ msgstr "800%"
+
+#~ msgid "1600%"
+#~ msgstr "1600%"
+
+#~ msgid "3200%"
+#~ msgstr "3200%"
+
+#~ msgid "6400%"
+#~ msgstr "6400%"
+
+#~ msgid "Icon:"
+#~ msgstr "Iconu:"
+
+#~ msgid "Note"
+#~ msgstr "Nota"
+
+#~ msgid "Comment"
+#~ msgstr "Comentariu"
+
+#~ msgid "Key"
+#~ msgstr "Tecla"
+
+#~ msgid "Help"
+#~ msgstr "Aida"
+
+#~ msgid "New Paragraph"
+#~ msgstr "Párrafu Nuevu"
+
+#~ msgid "Paragraph"
+#~ msgstr "Párrafu"
+
+#~ msgid "Insert"
+#~ msgstr "Inxertar"
+
+#~ msgid "Cross"
+#~ msgstr "Cruz"
+
+#~ msgid "Circle"
+#~ msgstr "Círculu"
+
+#~ msgid "Unknown"
+#~ msgstr "Desconocíu"
+
+#~ msgid "Annotation Properties"
+#~ msgstr "Propiedaes de l'Anotación"
+
+#~ msgid "Color:"
+#~ msgstr "Color:"
+
+#~ msgid "Style:"
+#~ msgstr "Estilu:"
+
+#~ msgid "Transparent"
+#~ msgstr "Tresparente"
+
+#~ msgid "Opaque"
+#~ msgstr "Opacu"
+
+#~ msgid "Initial window state:"
+#~ msgstr "Estáu de la ventana nel aniciu:"
+
+#~ msgid "Open"
+#~ msgstr "Abrir"
+
+#~ msgid "Close"
+#~ msgstr "Zarrar"
+
+#~ msgid "List"
+#~ msgstr "Llista"
+
+#~ msgid "Annotations"
+#~ msgstr "Anotaciones"
+
+#~ msgid "Text"
+#~ msgstr "Testu"
+
+#~ msgid "Add text annotation"
+#~ msgstr "Amestar anotación de testu"
+
+#~ msgid "Add"
+#~ msgstr "Amestar"
+
+#~ msgid "Document contains no annotations"
+#~ msgstr "El documentu nun tien anotaciones"
+
+#, c-format
+#~ msgid "Page %d"
+#~ msgstr "Páxina %d"
+
+#~ msgid "You should have received a copy of the GNU General Public License along with "
+#~ "Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+#~ "Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+#~ msgstr "Deberíes tener recibío una copia de la Llicencia Pública Xeneral de GNU "
+#~ "xunto con Evince; si nun ye'l casu, escribi a Free Software Foundation, "
+#~ "Inc., 51 Franklin Streer, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#~ msgid "Annotation Properties…"
+#~ msgstr "Propiedaes de l'Anotación…"
+
+#~ msgid "The page label of the document to display."
+#~ msgstr "La etiqueta de páxina a amosar."
+
+#~ msgid "The page number of the document to display."
+#~ msgstr "El númberu de páxina a amosar."
+
+#~ msgid "NUMBER"
+#~ msgstr "NÚMBERU"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "El documentu DJVU tien formatu incorreutu"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "Nun se pudo criar el ficheru «%s»: %s"
+
+#~ msgid "Search string"
+#~ msgstr "Guetar cadena"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "Nome de la cadena a guetar"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Coincidir con capitalización"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "BRAERO pa una gueta sensible a les mayúscules"
+
+#~ msgid "Highlight color"
+#~ msgstr "Color de resaltáu"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Color de resaltáu pa toles coincidencies"
+
+#~ msgid "Current color"
+#~ msgstr "Color autual"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Color de resaltáu pa la coincidencia autual"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "¿Recuperar los documentos anteriores?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Evince paez que salió de manera inesperada la cabera vegada que "
+#~ "s'executó. Puedes recuperar los documentos que taben abiertos."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_Non recuperar"
+
+#~ msgid "_Recover"
+#~ msgstr "_Recuperar"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Recuperación de cuelgue"
+
+#~ msgid "Print..."
+#~ msgstr "Imprentar…"
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Guardar una copia…"
+
+#~ msgid "_Print..."
+#~ msgstr "Im_prentar..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Guetar..."
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "Nun se pudo crear l'enllaz simbólicu «%s»: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "Nun se pue abrir una copia."
+
+#~ msgid "_Remember forever"
+#~ msgstr "_Remembrar siempres"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_Remembrar clave fasta te desconeutes"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "_Escaecer clave darréu"
+
+#~ msgid "_Domain:"
+#~ msgstr "_Dominiu:"
+
+#~ msgid "_Username:"
+#~ msgstr "_Usuariu:"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Coneutar como u_suariu:"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "Coneutar _anónimamente"
+
+#~ msgid "Co_nnect"
+#~ msgstr "Co_neutar"
+
+#~ msgid "Couldn't create symlink “%s”: %s"
+#~ msgstr "Nun se pudo criar l'enllaz simbólicu «%s»: %s"
+
+#~ msgid "File corrupted."
+#~ msgstr "Ficheru corruptu."
+
+#~ msgid "© 1996-2007 The Evince authors"
+#~ msgstr "© 1996-2007 Los autores d'Evince"
+
+#~ msgid "Print Set_up..."
+#~ msgstr "Configuración d'imprentación…"
+
+#~ msgid "Title"
+#~ msgstr "Títulu"
+
+#~ msgid "Location"
+#~ msgstr "Llocalización"
+
+#~ msgid "Subject"
+#~ msgstr "Asuntu"
+
+#~ msgid "Author"
+#~ msgstr "Autor"
+
+#~ msgid "Keywords"
+#~ msgstr "Pallabres clave"
+
+#~ msgid "Producer"
+#~ msgstr "Productor"
+
+#~ msgid "Creator"
+#~ msgstr "Criador"
+
+#~ msgid "Created"
+#~ msgstr "Criáu"
+
+#~ msgid "Modified"
+#~ msgstr "Modificáu"
+
+#~ msgid "Number of Pages"
+#~ msgstr "Númberu de páxines"
+
+#~ msgid "Optimized"
+#~ msgstr "Optimizáu"
+
+#~ msgid "Format"
+#~ msgstr "Formatu"
+
+#~ msgid "Security"
+#~ msgstr "Seguridá"
+
+#~ msgid "Paper Size"
+#~ msgstr "Tamañu Papel"
diff --git a/po/be.po b/po/be.po
new file mode 100644
index 00000000..bc019f01
--- /dev/null
+++ b/po/be.po
@@ -0,0 +1,1354 @@
+# Belarusian translation of evince.
+# Copyright (C) 2005 THE evince'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the evince package.
+# Ales Nyakhaychyk <[email protected]>, 2005, 2008
+# Ihar Hrachyshka <[email protected]>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-02-10 13:27+0000\n"
+"PO-Revision-Date: 2008-03-15 03:39+0200\n"
+"Last-Translator: Alexander Nyakhaychyk <[email protected]>\n"
+"Language-Team: Belarusian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../backend/comics/comics-document.c:163
+msgid "File corrupted."
+msgstr "Файл пашкоджаны."
+
+#: ../backend/comics/comics-document.c:197
+#, c-format
+msgid "No images found in archive %s"
+msgstr "У архіве %s малюнкі ня знойдзеныя"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Коміксы"
+
+#: ../backend/djvu/djvu-document.c:167
+msgid ""
+"The document is composed by several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+"Дакумэнт складзены зь некалькіх файлаў. Немагчыма атрымаць доступ да аднаго "
+"ці некалькіх файлаў."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Djvu дакумэнты"
+
+#: ../backend/dvi/dvi-document.c:98
+msgid "File not available"
+msgstr "Файл недаступны"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI дакумэнт няправільнага фармату"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI дакумэнты"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:674
+msgid "Yes"
+msgstr "Так"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:677
+msgid "No"
+msgstr "Не"
+
+#: ../backend/pdf/ev-poppler.cc:750
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:752
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:754
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:756
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:758
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:760
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:762
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:764
+msgid "Unknown font type"
+msgstr "Невядомы тып шрыфта"
+
+#: ../backend/pdf/ev-poppler.cc:790
+msgid "No name"
+msgstr "Бяз назвы"
+
+#: ../backend/pdf/ev-poppler.cc:798
+msgid "Embedded subset"
+msgstr "Убудаванае падмноства"
+
+#: ../backend/pdf/ev-poppler.cc:800
+msgid "Embedded"
+msgstr "Убудаваны"
+
+#: ../backend/pdf/ev-poppler.cc:802
+msgid "Not embedded"
+msgstr "Не ўбудаваны"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF Дакумэнты"
+
+#: ../backend/impress/impress-document.c:296
+msgid "Remote files aren't supported"
+msgstr "Аддаленыя файлы не падтрымліваюцца"
+
+#: ../backend/impress/impress-document.c:307
+msgid "Invalid document"
+msgstr "Няправільны дакумэнт"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Слайды Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Без памылак"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Не хапае вольнае памяці"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "Немагчыма знайсьці подпіс zip"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "Няправільны файл zip"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr "Архівы zip зь некалькімі файламі не падтрымліваюцца"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Немагчыма адкрыць файл"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Немагчыма прачытаць даньні з файла"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "Немагчыма знайсьці файл у архіўным файле zip"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Невядомая памылка"
+
+#: ../backend/ps/ev-spectre.c:113 ../backend/ps/ps-document.c:248
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Немагчыма адкрыць дакумэнт “%s”"
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Немагчыма захаваць дакумэнт “%s”"
+
+#: ../backend/ps/gsdefaults.c:30
+msgid "BBox"
+msgstr "BBox"
+
+#: ../backend/ps/gsdefaults.c:31
+msgid "Letter"
+msgstr "Letter"
+
+#: ../backend/ps/gsdefaults.c:32
+msgid "Tabloid"
+msgstr "Таблоід"
+
+#: ../backend/ps/gsdefaults.c:33
+msgid "Ledger"
+msgstr "Ledger"
+
+#: ../backend/ps/gsdefaults.c:34
+msgid "Legal"
+msgstr "Legal"
+
+#: ../backend/ps/gsdefaults.c:35
+msgid "Statement"
+msgstr "Statement"
+
+#: ../backend/ps/gsdefaults.c:36
+msgid "Executive"
+msgstr "Executive"
+
+#: ../backend/ps/gsdefaults.c:37
+msgid "A0"
+msgstr "A0"
+
+#: ../backend/ps/gsdefaults.c:38
+msgid "A1"
+msgstr "A1"
+
+#: ../backend/ps/gsdefaults.c:39
+msgid "A2"
+msgstr "A2"
+
+#: ../backend/ps/gsdefaults.c:40
+msgid "A3"
+msgstr "A3"
+
+#: ../backend/ps/gsdefaults.c:41
+msgid "A4"
+msgstr "A4"
+
+#: ../backend/ps/gsdefaults.c:42
+msgid "A5"
+msgstr "A5"
+
+#: ../backend/ps/gsdefaults.c:43
+msgid "B4"
+msgstr "B4"
+
+#: ../backend/ps/gsdefaults.c:44
+msgid "B5"
+msgstr "B5"
+
+#: ../backend/ps/gsdefaults.c:45
+msgid "Folio"
+msgstr "Folio"
+
+#: ../backend/ps/gsdefaults.c:46
+msgid "Quarto"
+msgstr "Quarto"
+
+#: ../backend/ps/gsdefaults.c:47
+msgid "10x14"
+msgstr "10x14"
+
+#: ../backend/ps/ps-document.c:170 ../backend/ps/ps-document.c:184
+#, c-format
+msgid "Cannot open file “%s”."
+msgstr "Немагчыма адкрыць файл “%s”."
+
+#: ../backend/ps/ps-document.c:231
+#, c-format
+msgid ""
+"Failed to load document “%s”. Ghostscript interpreter was not found in path"
+msgstr "Немагчыма адкрыць дакумэнт \"%s\". Няма інтэрпрэтатара Ghostscript"
+
+#: ../backend/ps/ps-document.c:431
+msgid "Encapsulated PostScript"
+msgstr "Encapsulated PostScript"
+
+#: ../backend/ps/ps-document.c:432
+msgid "PostScript"
+msgstr "PostScript"
+
+#: ../backend/ps/ps-interpreter.c:543
+msgid "Interpreter failed."
+msgstr "Збой інтэрпрэтатара."
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript дакумэнты"
+
+#: ../libdocument/ev-attachment.c:303 ../libdocument/ev-attachment.c:324
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Немагчыма захаваць укладаньне \"%s\": %s"
+
+#: ../libdocument/ev-attachment.c:360
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Немагчыма адкрыць укладаньне \"%s\": %s"
+
+#: ../libdocument/ev-attachment.c:393
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Немагчыма адкрыць укладаньне \"%s\""
+
+#: ../libdocument/ev-document-factory.c:177
+#: ../libdocument/ev-document-factory.c:295
+msgid "Unknown MIME Type"
+msgstr "Невядомы MIME-тып"
+
+#: ../libdocument/ev-document-factory.c:196
+#, c-format
+msgid "Unhandled MIME type: “%s”"
+msgstr "Неапрацаваны MIME-тып: \"%s\""
+
+#: ../libdocument/ev-document-factory.c:350
+msgid "All Documents"
+msgstr "Усе дакумэнты"
+
+#: ../libdocument/ev-document-factory.c:382
+msgid "All Files"
+msgstr "Усе файлы"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:938
+#, c-format
+msgid "Show “_%s”"
+msgstr "Паказаць \"_%s\""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Move on Toolbar"
+msgstr "Пера_мясьціць на панэль"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Move the selected item on the toolbar"
+msgstr "Перамясьціць вылучаны элемэнт на панэль сродкаў"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1403
+msgid "_Remove from Toolbar"
+msgstr "Вы_даліць з панэлі"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1404
+msgid "Remove the selected item from the toolbar"
+msgstr "Выдаліць вылучаны элемэнт з панэлі сродкаў"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1405
+msgid "_Delete Toolbar"
+msgstr "Выдал_іць панэль"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1406
+msgid "Remove the selected toolbar"
+msgstr "Выдаліць гэтую панэль"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:441
+msgid "Separator"
+msgstr "Падзяляльнік"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+msgid "Running in presentation mode"
+msgstr "Рэжым прэзэнтацыі"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:4390
+msgid "Best Fit"
+msgstr "Найлепшы выгляд"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Па шырыні старонкі"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:3517
+#: ../shell/ev-window-title.c:132
+msgid "Document Viewer"
+msgstr "Праглядальнік дакумэнтаў"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "Прагляд разнастайных дакумэнтаў"
+
+#: ../data/evince-password.glade.h:1
+msgid "Password Entry"
+msgstr "Пароль"
+
+#: ../data/evince-password.glade.h:2
+msgid "Remember password for this session"
+msgstr "Запомніць пароль для гэтага сэанса"
+
+#: ../data/evince-password.glade.h:3
+msgid "Save password in keyring"
+msgstr "Захаваць пароль у зьвязцы ключоў"
+
+#: ../data/evince-password.glade.h:4
+msgid "_Password:"
+msgstr "_Пароль:"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>Аўтар:</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>Створаны:</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>Стваральнік:</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>Фармат:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b>Ключавыя словы:</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>Зьменены:</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b>Колькасьць старонак:</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr "<b>Аптымізаваны:</b>"
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Paper Size:</b>"
+msgstr "<b>Памер аркуша:</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Producer:</b>"
+msgstr "<b>Вытворца:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Security:</b>"
+msgstr "<b>Бясьпека:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Subject:</b>"
+msgstr "<b>Тэма:</b>"
+
+#: ../data/evince-properties.glade.h:13
+msgid "<b>Title:</b>"
+msgstr "<b>Назва:</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Не зважаць на абмежаваньні дакумэнта"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Не зважаць на абмежаваньні дакумэнта, напр., забарону на друк альбо "
+"капіяваньне."
+
+#: ../properties/ev-properties-main.c:111
+msgid "Document"
+msgstr "Дакумэнт"
+
+#: ../properties/ev-properties-view.c:182
+msgid "None"
+msgstr "Няма"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:207
+#: ../properties/ev-properties-view.c:367
+msgid "default:mm"
+msgstr "default:mm"
+
+#. Metric measurement (millimeters)
+#: ../properties/ev-properties-view.c:249
+#: ../properties/ev-properties-view.c:404
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f мм"
+
+#: ../properties/ev-properties-view.c:253
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f цаляў"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:277
+#: ../properties/ev-properties-view.c:415
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Партрэт (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:284
+#: ../properties/ev-properties-view.c:422
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Альбом (%s)"
+
+#. Imperial measurement (inches)
+#: ../properties/ev-properties-view.c:399
+#, c-format
+msgid "%.2f x %.2f in"
+msgstr "%.2f x %.2f цаляў"
+
+#: ../shell/eggfindbar.c:158
+msgid "Search string"
+msgstr "Пошук тэксту"
+
+#: ../shell/eggfindbar.c:159
+msgid "The name of the string to be found"
+msgstr "Тэкст, які трэба знайсьці"
+
+#: ../shell/eggfindbar.c:172
+msgid "Case sensitive"
+msgstr "З улікам рэгістру"
+
+#: ../shell/eggfindbar.c:173
+msgid "TRUE for a case sensitive search"
+msgstr "true: шукаць з улікам рэгістру"
+
+#: ../shell/eggfindbar.c:180
+msgid "Highlight color"
+msgstr "Колер фарбаванага тэксту"
+
+#: ../shell/eggfindbar.c:181
+msgid "Color of highlight for all matches"
+msgstr "Колер фарбаваньня супадзеньняў"
+
+#: ../shell/eggfindbar.c:187
+msgid "Current color"
+msgstr "Актыўны колер"
+
+#: ../shell/eggfindbar.c:188
+msgid "Color of highlight for the current match"
+msgstr "Колер фарбаваньня актыўнага супадзеньня"
+
+#: ../shell/eggfindbar.c:321
+msgid "Find:"
+msgstr "Пошук:"
+
+#: ../shell/eggfindbar.c:330
+msgid "Find Previous"
+msgstr "Шукаць раней"
+
+#: ../shell/eggfindbar.c:334 ../shell/eggfindbar.c:337
+msgid "Find previous occurrence of the search string"
+msgstr "Шукаць супадзеньне раней"
+
+#: ../shell/eggfindbar.c:343
+msgid "Find Next"
+msgstr "Шукаць далей"
+
+#: ../shell/eggfindbar.c:347 ../shell/eggfindbar.c:350
+msgid "Find next occurrence of the search string"
+msgstr "Шукаць супадзеньне пазьней"
+
+#: ../shell/eggfindbar.c:359
+msgid "C_ase Sensitive"
+msgstr "З _улікам рэгістру"
+
+#: ../shell/eggfindbar.c:363 ../shell/eggfindbar.c:366
+msgid "Toggle case sensitive search"
+msgstr "Зьмяніць рэжым уліку рэгістру"
+
+#: ../shell/ev-jobs.c:650
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "Памылка стварэньня файла \"%s\": %s"
+
+#: ../shell/ev-open-recent-action.c:71
+msgid "Open a recently used document"
+msgstr "Адкрыць ранейшы дакумэнт"
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d з %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "з %d"
+
+#: ../shell/ev-password.c:88
+msgid "Password required"
+msgstr "Трэба вызначыць пароль"
+
+#: ../shell/ev-password.c:89
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "Дакумэнт \"%s\" закрыты і патрабуе пароль, каб яго адкрыць."
+
+#: ../shell/ev-password.c:154
+msgid "Enter password"
+msgstr "Вызначце пароль"
+
+#: ../shell/ev-password.c:260
+#, c-format
+msgid "Password for document %s"
+msgstr "Пароль для дакумэнта %s"
+
+#: ../shell/ev-password.c:347
+msgid "Incorrect password"
+msgstr "Няправільны пароль"
+
+#: ../shell/ev-password-view.c:111
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "Гэты дакумэнт закрыты і патрабуе пароль, каб прачытаць яго."
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "Раз_блякаваць дакумэнт"
+
+#: ../shell/ev-properties-dialog.c:61
+msgid "Properties"
+msgstr "Уласьцівасьці"
+
+#: ../shell/ev-properties-dialog.c:94
+msgid "General"
+msgstr "Агульныя"
+
+#: ../shell/ev-properties-dialog.c:104
+msgid "Fonts"
+msgstr "Шрыфты"
+
+#: ../shell/ev-properties-fonts.c:141
+msgid "Font"
+msgstr "Шрыфт"
+
+#: ../shell/ev-properties-fonts.c:152
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "Збор зьвестак аб шрыфтах... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:675
+msgid "Attachments"
+msgstr "Укладаньні"
+
+#: ../shell/ev-sidebar-links.c:266 ../shell/ev-view.c:3642
+msgid "Loading..."
+msgstr "Чытаньне..."
+
+#: ../shell/ev-sidebar-links.c:339
+msgid "Print..."
+msgstr "Друк..."
+
+#: ../shell/ev-sidebar-links.c:719
+msgid "Index"
+msgstr "Зьмест"
+
+#: ../shell/ev-sidebar-thumbnails.c:728
+msgid "Thumbnails"
+msgstr "Мініятуры"
+
+#: ../shell/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Пракруціць угору"
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Пракруціць долу"
+
+#: ../shell/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Пракруціць дакумэнт угору"
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Пракруціць дакумэнт долу"
+
+#: ../shell/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Выгляд дакумэнта"
+
+#: ../shell/ev-view.c:1442
+msgid "Go to first page"
+msgstr "Перайсьці на першую старонку"
+
+#: ../shell/ev-view.c:1444
+msgid "Go to previous page"
+msgstr "Перайсьці на папярэднюю старонку"
+
+#: ../shell/ev-view.c:1446
+msgid "Go to next page"
+msgstr "Перайсьці на наступную старонку"
+
+#: ../shell/ev-view.c:1448
+msgid "Go to last page"
+msgstr "Перайсьці на апошнюю старонку"
+
+#: ../shell/ev-view.c:1450
+msgid "Go to page"
+msgstr "Перайсьці на старонку"
+
+#: ../shell/ev-view.c:1452
+msgid "Find"
+msgstr "Пошук"
+
+#: ../shell/ev-view.c:1480
+#, c-format
+msgid "Go to page %s"
+msgstr "Перайсьці на %s старонку"
+
+#: ../shell/ev-view.c:1486
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Перайсьці на %s у файле \"%s\""
+
+#: ../shell/ev-view.c:1489
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Перайсьці ў файл \"%s\""
+
+#: ../shell/ev-view.c:1497
+#, c-format
+msgid "Launch %s"
+msgstr "Стартаваць %s"
+
+#: ../shell/ev-view.c:2448
+msgid "End of presentation. Press Escape to exit."
+msgstr "Канец прэзэнтацыі. Націсьніце Escape, каб выйсьці з гэтага рэжыму."
+
+#: ../shell/ev-view.c:3371
+msgid "Jump to page:"
+msgstr "Перайсьці на старонку:"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:5149
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d супадзеньне знойдзена на гэтай старонцы"
+msgstr[1] "%d супадзеньні знойдзеныя на гэтай старонцы"
+msgstr[2] "%d супадзеньняў знойдзеныя на гэтай старонцы"
+
+#: ../shell/ev-view.c:5158
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Засталося шукаць %3d%%"
+
+#: ../shell/ev-window.c:750
+#, c-format
+msgid "Page %s - %s"
+msgstr "Старонка %s - %s"
+
+#: ../shell/ev-window.c:752
+#, c-format
+msgid "Page %s"
+msgstr "Старонка %s"
+
+#: ../shell/ev-window.c:1381
+msgid "Unable to open document"
+msgstr "Немагчыма адкрыць дакумэнт"
+
+#: ../shell/ev-window.c:1542
+msgid "Open Document"
+msgstr "Адкрыць дакумэнт"
+
+#: ../shell/ev-window.c:1603
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "Немагчыма стварыць сымбалічную спасылку \"%s\": %s"
+
+#: ../shell/ev-window.c:1632
+msgid "Cannot open a copy."
+msgstr "Немагчыма адкрыць копію."
+
+#: ../shell/ev-window.c:1876 ../shell/ev-window.c:1926
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Немагчыма захаваць файл як \"%s\"."
+
+#: ../shell/ev-window.c:1971
+msgid "Save a Copy"
+msgstr "Захаваць копію"
+
+#: ../shell/ev-window.c:2092 ../shell/ev-window.c:3218
+msgid "Failed to print document"
+msgstr "Немагчыма надрукаваць дакумэнт"
+
+#: ../shell/ev-window.c:2256
+msgid "Printing is not supported on this printer."
+msgstr "Друк на гэтай друкарцы не падтрымліваецца."
+
+#: ../shell/ev-window.c:2382 ../shell/ev-window.c:4184
+msgid "Print"
+msgstr "Друк"
+
+#: ../shell/ev-window.c:2996
+msgid "Toolbar Editor"
+msgstr "Рэдактар панэлі сродкаў"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Праглядальнік дакумэнтаў.\n"
+"Выкарыстоўвае poppler %s (%s)"
+
+#: ../shell/ev-window.c:3541
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince - гэта свабодная праграма; вы можаце распаўсюджваць яе і/альбо "
+"зьмяняць згодна з умовамі ліцэнзіі GNU General Public License, выдадзенай "
+"Free Software Foundation; любая вэрсія ліцэнзіі (2 і вышэй) можа быць "
+"выкарыстана на ваш выбар.\n"
+
+#: ../shell/ev-window.c:3545
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Праграма Evince распаўсюджваецца з надзеяй, што яна будзе карыснай, але БЕЗ "
+"ГАРАНТЫІ на тое, што яна будзе КАРЫСНАЙ ці ПРЫДАТНАЙ ДЛЯ ПРАКТЫЧНАГА "
+"ЎЖЫВАНЬНЯ. Глядзіце падрабязнасьці ў GNU General Public License.\n"
+
+#: ../shell/ev-window.c:3549
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Вы павінны былі атрымаць копію GNU General Public License разам з Evince; "
+"калі не - лістуйце ў Free Software Foundation, Inc., 59 Temple Place, Suite "
+"330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:3573 ../shell/main.c:349
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:3576
+msgid "© 1996-2007 The Evince authors"
+msgstr "© 1996-2005 Аўтары Evince"
+
+#: ../shell/ev-window.c:3582
+msgid "translator-credits"
+msgstr ""
+"Ales Nyakhaychyk <[email protected]>\n"
+"Ігар Грачышка <[email protected]>"
+
+#: ../shell/ev-window.c:4096
+msgid "_File"
+msgstr "_Файл"
+
+#: ../shell/ev-window.c:4097
+msgid "_Edit"
+msgstr "_Рэдагаваньне"
+
+#: ../shell/ev-window.c:4098
+msgid "_View"
+msgstr "_Выгляд"
+
+#: ../shell/ev-window.c:4099
+msgid "_Go"
+msgstr "_Перайсьці"
+
+#: ../shell/ev-window.c:4100
+msgid "_Help"
+msgstr "_Даведка"
+
+#. File menu
+#: ../shell/ev-window.c:4103 ../shell/ev-window.c:4280
+#: ../shell/ev-window.c:4352
+msgid "_Open..."
+msgstr "_Адкрыць..."
+
+#: ../shell/ev-window.c:4104 ../shell/ev-window.c:4353
+msgid "Open an existing document"
+msgstr "Адкрыць існуючы дакумэнт"
+
+#: ../shell/ev-window.c:4106
+msgid "Op_en a Copy"
+msgstr "Адкрыць _копію"
+
+#: ../shell/ev-window.c:4107
+msgid "Open a copy of the current document in a new window"
+msgstr "Адкрыць копію гэтага дакумэнта ў новым вакне"
+
+#: ../shell/ev-window.c:4109 ../shell/ev-window.c:4282
+msgid "_Save a Copy..."
+msgstr "За_хаваць копію..."
+
+#: ../shell/ev-window.c:4110
+msgid "Save a copy of the current document"
+msgstr "Захаваць копію гэтага дакумэнта"
+
+#: ../shell/ev-window.c:4112
+msgid "Print Set_up..."
+msgstr "_Наладка друку..."
+
+#: ../shell/ev-window.c:4113
+msgid "Setup the page settings for printing"
+msgstr "Зьмена настаўленьняў старонак для друку"
+
+#: ../shell/ev-window.c:4115
+msgid "_Print..."
+msgstr "_Друк..."
+
+#: ../shell/ev-window.c:4116 ../shell/ev-window.c:4185
+msgid "Print this document"
+msgstr "Друкаваць гэты дакумэнт"
+
+#: ../shell/ev-window.c:4118
+msgid "P_roperties"
+msgstr "_Уласьцівасьці"
+
+#: ../shell/ev-window.c:4126
+msgid "Select _All"
+msgstr "Вылучыць _усё"
+
+#: ../shell/ev-window.c:4128
+msgid "_Find..."
+msgstr "По_шук..."
+
+#: ../shell/ev-window.c:4129
+msgid "Find a word or phrase in the document"
+msgstr "Пошук слова / выраза ў дакумэнце"
+
+#: ../shell/ev-window.c:4131
+msgid "Find Ne_xt"
+msgstr "Шукаць да_лей"
+
+#: ../shell/ev-window.c:4133
+msgid "Find Pre_vious"
+msgstr "Шукаць ра_ней"
+
+#: ../shell/ev-window.c:4135
+msgid "T_oolbar"
+msgstr "Панэль _сродкаў"
+
+#: ../shell/ev-window.c:4137
+msgid "Rotate _Left"
+msgstr "Павярнуць на_лева"
+
+#: ../shell/ev-window.c:4139
+msgid "Rotate _Right"
+msgstr "Павярнуць на_права"
+
+#: ../shell/ev-window.c:4144
+msgid "Enlarge the document"
+msgstr "Павялічыць дакумэнт"
+
+#: ../shell/ev-window.c:4147
+msgid "Shrink the document"
+msgstr "Паменшыць дакумэнт"
+
+#: ../shell/ev-window.c:4149
+msgid "_Reload"
+msgstr "Пера_чытаць"
+
+#: ../shell/ev-window.c:4150
+msgid "Reload the document"
+msgstr "Перачытаць дакумэнт"
+
+#: ../shell/ev-window.c:4153
+msgid "Auto_scroll"
+msgstr "Аўтапра_крутка"
+
+#. Go menu
+#: ../shell/ev-window.c:4157
+msgid "_Previous Page"
+msgstr "_Папярэдняя старонка"
+
+#: ../shell/ev-window.c:4158
+msgid "Go to the previous page"
+msgstr "Перайсьці на папярэднюю старонку"
+
+#: ../shell/ev-window.c:4160
+msgid "_Next Page"
+msgstr "_Наступная старонка"
+
+#: ../shell/ev-window.c:4161
+msgid "Go to the next page"
+msgstr "Перайсьці на наступную старонку"
+
+#: ../shell/ev-window.c:4163
+msgid "_First Page"
+msgstr "П_ершая старонка"
+
+#: ../shell/ev-window.c:4164
+msgid "Go to the first page"
+msgstr "Перайсьці на першую старонку"
+
+#: ../shell/ev-window.c:4166
+msgid "_Last Page"
+msgstr "Ап_ошняя старонка"
+
+#: ../shell/ev-window.c:4167
+msgid "Go to the last page"
+msgstr "Перайсьці на апошнюю старонку"
+
+#. Help menu
+#: ../shell/ev-window.c:4171
+msgid "_Contents"
+msgstr "_Зьмест"
+
+#: ../shell/ev-window.c:4174
+msgid "_About"
+msgstr "_Аб праграме"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4178
+msgid "Leave Fullscreen"
+msgstr "Вярнуцца ў звычайны рэжым"
+
+#: ../shell/ev-window.c:4179
+msgid "Leave fullscreen mode"
+msgstr "Выйсьці з поўнаэкраннага рэжыму"
+
+#: ../shell/ev-window.c:4181
+msgid "Start Presentation"
+msgstr "Запуск прэзэнтацыі"
+
+#: ../shell/ev-window.c:4182
+msgid "Start a presentation"
+msgstr "Запусьціць прэзэнтацыю"
+
+#. View Menu
+#: ../shell/ev-window.c:4236
+msgid "_Toolbar"
+msgstr "_Панэль сродкаў"
+
+#: ../shell/ev-window.c:4237
+msgid "Show or hide the toolbar"
+msgstr "Паказаць / схаваць панэль сродкаў"
+
+#: ../shell/ev-window.c:4239
+msgid "Side _Pane"
+msgstr "Бакавая _панэль"
+
+#: ../shell/ev-window.c:4240
+msgid "Show or hide the side pane"
+msgstr "Паказаць / схаваць бакавую панэль"
+
+#: ../shell/ev-window.c:4242
+msgid "_Continuous"
+msgstr "Па _чарзе"
+
+#: ../shell/ev-window.c:4243
+msgid "Show the entire document"
+msgstr "Паказаць увесь дакумэнт"
+
+#: ../shell/ev-window.c:4245
+msgid "_Dual"
+msgstr "_Падвоены"
+
+#: ../shell/ev-window.c:4246
+msgid "Show two pages at once"
+msgstr "Паказваць па дзьве старонкі"
+
+#: ../shell/ev-window.c:4248
+msgid "_Fullscreen"
+msgstr "_Поўны экран"
+
+#: ../shell/ev-window.c:4249
+msgid "Expand the window to fill the screen"
+msgstr "Пашырыць вакно на ўвесь экран"
+
+#: ../shell/ev-window.c:4251
+msgid "Pre_sentation"
+msgstr "_Прэзэнтацыя"
+
+#: ../shell/ev-window.c:4252
+msgid "Run document as a presentation"
+msgstr "Адкрыць дакумэнт у рэжыме прэзэнтацыі"
+
+#: ../shell/ev-window.c:4254
+msgid "_Best Fit"
+msgstr "Най_лепшы выгляд"
+
+#: ../shell/ev-window.c:4255
+msgid "Make the current document fill the window"
+msgstr "Запоўніць гэтым дакумэнтам вакно"
+
+#: ../shell/ev-window.c:4257
+msgid "Fit Page _Width"
+msgstr "Расьцягнуць па _шырыні"
+
+#: ../shell/ev-window.c:4258
+msgid "Make the current document fill the window width"
+msgstr "Расьцягнуць гэты дакумэнт па шырыні вакна"
+
+#. Links
+#: ../shell/ev-window.c:4265
+msgid "_Open Link"
+msgstr "Ад_крыць спасылку"
+
+#: ../shell/ev-window.c:4267
+msgid "_Go To"
+msgstr "_Перайсьці"
+
+#: ../shell/ev-window.c:4269
+msgid "Open in New _Window"
+msgstr "Адкрыць у _новым вакне"
+
+#: ../shell/ev-window.c:4271
+msgid "_Copy Link Address"
+msgstr "_Скапіяваць адрас спасылкі"
+
+#: ../shell/ev-window.c:4273
+msgid "_Save Image As..."
+msgstr "_Запісаць малюнак як..."
+
+#: ../shell/ev-window.c:4275
+msgid "Copy _Image"
+msgstr "Скапіяваць _малюнак"
+
+#: ../shell/ev-window.c:4314
+msgid "Page"
+msgstr "Старонка"
+
+#: ../shell/ev-window.c:4315
+msgid "Select Page"
+msgstr "Вылучыць старонку"
+
+#: ../shell/ev-window.c:4326
+msgid "Zoom"
+msgstr "Маштаб"
+
+#: ../shell/ev-window.c:4328
+msgid "Adjust the zoom level"
+msgstr "Зьмяніць маштабаваньне"
+
+#: ../shell/ev-window.c:4338
+msgid "Navigation"
+msgstr "Навігацыя"
+
+#: ../shell/ev-window.c:4340
+msgid "Back"
+msgstr "Назад"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:4343
+msgid "Move across visited pages"
+msgstr "Пераход паміж наведанымі старонкамі"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4373
+msgid "Previous"
+msgstr "Папярэдняя"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4378
+msgid "Next"
+msgstr "Наступная"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4382
+msgid "Zoom In"
+msgstr "Наблізіць"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4386
+msgid "Zoom Out"
+msgstr "Аддаліць"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4394
+msgid "Fit Width"
+msgstr "Па шырыні"
+
+#: ../shell/ev-window.c:4607
+msgid "Unable to open external link"
+msgstr "Немагчыма адкрыць вонкавую спасылку"
+
+#: ../shell/ev-window.c:4777
+msgid "Couldn't find appropriate format to save image"
+msgstr "Немагчыма адшукаць адпаведны файрмат каб захаваць відарыс"
+
+#: ../shell/ev-window.c:4813
+msgid "The image could not be saved."
+msgstr "Немагчыма запісаць малюнак."
+
+#: ../shell/ev-window.c:4845
+msgid "Save Image"
+msgstr "Запісаць малюнак"
+
+#: ../shell/ev-window.c:4904
+msgid "Unable to open attachment"
+msgstr "Немагчыма адкрыць укладаньне"
+
+#: ../shell/ev-window.c:4956
+msgid "The attachment could not be saved."
+msgstr "Немагчыма захаваць укладаньне."
+
+#: ../shell/ev-window.c:5001
+msgid "Save Attachment"
+msgstr "Запісаць укладаньне"
+
+#: ../shell/ev-window-title.c:145
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - трэба вызначыць пароль"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "Па-пашырэньню"
+
+#: ../shell/main.c:58
+msgid "The page of the document to display."
+msgstr "Адлюстраваць гэтую старонку дакумэнта."
+
+#: ../shell/main.c:58
+msgid "PAGE"
+msgstr "Старонка"
+
+#: ../shell/main.c:59
+msgid "Run evince in fullscreen mode"
+msgstr "Стартаваць Evince у поўнаэкранным рэжыме"
+
+#: ../shell/main.c:60
+msgid "Run evince in presentation mode"
+msgstr "Стартаваць Evince у рэжыме прэзэнтацыі"
+
+#: ../shell/main.c:61
+msgid "Run evince as a previewer"
+msgstr "Стартаваць Evince у рэжыме перадаглядніка"
+
+#: ../shell/main.c:62
+msgid "The word or phrase to find in the document"
+msgstr "Слова ці выраз для пошуку ў дакумэнце"
+
+#: ../shell/main.c:62
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:65
+msgid "[FILE...]"
+msgstr "[Файл...]"
+
+#: ../shell/main.c:332
+msgid "MATE Document Viewer"
+msgstr "Праглядальнік дакумэнтаў для MATE"
+
+#: ../shell/main.c:392
+msgid "Evince Document Viewer"
+msgstr "Праглядальнік дакумэнтаў Evince"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Дазволеныя лягічныя значэньні, true: ствараць мініятуры,false: не ствараць."
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Ствараць мініятуры для PDF дакумэнтаў"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Загад стварэньня мініатураў для PDF дакумэнтаў"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Рэчаісны загад і аргумэнты для стваральніка мініятураў для PDF дакумэнтаў. "
+"Гл. дакумэнтацыю для caja thumbnailer."
+
+#~ msgid "No document loaded."
+#~ msgstr "Дакумэнт не адкрыты."
+
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "Памылка распакоўваньня файла \"%s\":\n"
+
+#~ msgid "File is not readable."
+#~ msgstr "Немагчыма прачытаць файл."
+
+#~ msgid "Document loaded."
+#~ msgstr "Дакумэнт адкрыты."
+
+#~ msgid "Images"
+#~ msgstr "Малюнкі"
+
+#~ msgid "Open “%s”"
+#~ msgstr "Адкрыць \"%s\""
+
+#~ msgid "Empty"
+#~ msgstr "Пуста"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "Няма падтрымкі стварэньня файлаў PDF"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "Вы спрабуеце надрукаваць дакумэнт на друкарцы праз драйвэр \"%s\". Гэтая "
+#~ "праграма патрабуе наяўнасьці драйвэра PostScript."
+
+#~ msgid "Pages"
+#~ msgstr "Старонкі"
+
+#~ msgid "Broken pipe."
+#~ msgstr "Зламаны трубаправод."
diff --git a/po/[email protected] b/po/[email protected]
new file mode 100644
index 00000000..77bfb03d
--- /dev/null
+++ b/po/[email protected]
@@ -0,0 +1,1428 @@
+# Biełaruski pierakład evince
+# Copyright (C) 2007 Ihar Hrachyshka
+# This file is distributed under the same license as the evince package.
+# Ihar Hrachyshka <[email protected]>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-02-18 02:02+0200\n"
+"PO-Revision-Date: 2009-02-18 02:04+0200\n"
+"Last-Translator: Ihar Hrachyshka <[email protected]>\n"
+"Language-Team: Belarusian Latin <http://be-latin.open-tran.eu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../backend/comics/comics-document.c:131
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:284
+msgid "Unknown MIME Type"
+msgstr "Nieviadomy typ MIME"
+
+#: ../backend/comics/comics-document.c:165
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Hety fajł nia maje typu MIME, aznačanaha dla komiksaŭ: %s"
+
+#: ../backend/comics/comics-document.c:186
+msgid "File corrupted."
+msgstr "Fajł sapsavany."
+
+#: ../backend/comics/comics-document.c:198
+msgid "No files in archive."
+msgstr "U archivie niama fajłaŭ."
+
+#: ../backend/comics/comics-document.c:230
+#, c-format
+msgid "No images found in archive %s"
+msgstr "U archivie %s nia znojdziena vyjavaŭ"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Knihi komiksaŭ"
+
+#: ../backend/djvu/djvu-document.c:174
+msgid "DJVU document has incorrect format"
+msgstr "Dakument DJVU maje niapravilny farmat"
+
+#: ../backend/djvu/djvu-document.c:251
+msgid ""
+"The document is composed of several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+"Dakument składajecca ź niekalkich fajłaŭ. Prynamsi adzin ź ich niedastupny."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Dakumenty Djvu"
+
+#: ../backend/dvi/dvi-document.c:106
+msgid "DVI document has incorrect format"
+msgstr "Dakument DVI maje niapravilny farmat"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Dakumenty DVI"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:700
+msgid "Yes"
+msgstr "Tak"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:703
+msgid "No"
+msgstr "Nie"
+
+#: ../backend/pdf/ev-poppler.cc:777
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:781
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:783
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:785
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:787
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:789
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:791
+msgid "Unknown font type"
+msgstr "Nieviadomy typ šryftu"
+
+#: ../backend/pdf/ev-poppler.cc:817
+msgid "No name"
+msgstr "Biaz nazvy"
+
+#: ../backend/pdf/ev-poppler.cc:825
+msgid "Embedded subset"
+msgstr "Ubudavanaje padmnostva"
+
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "Embedded"
+msgstr "Ubudavana"
+
+#: ../backend/pdf/ev-poppler.cc:829
+msgid "Not embedded"
+msgstr "Nie ŭbudavana"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Dakumenty PDF"
+
+#: ../backend/impress/impress-document.c:303
+#: ../backend/tiff/tiff-document.c:114
+msgid "Invalid document"
+msgstr "Niapravilny dakument"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Słajdy Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Biez pamyłak"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Nie staje pamiaci"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "Niemahčyma znajści syhnaturu zip"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "Niapravilny zip-fajł"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr "Šmatfajłavyja zip-archivy nie padtrymvajucca"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Niemahčyma adčynić fajł"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Niemahčyma pračytać źviestki z fajłu"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "Niemahčyma znajści fajł u zip-archivie"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Nieviadomaja pamyłka"
+
+#: ../backend/ps/ev-spectre.c:113
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Padčas adčynieńnia dakumentu “%s” adbyłasia pamyłka"
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Nie ŭdałosia zapisać dakument “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Dakumenty PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Niemahčyma zapisać dałučeńnie “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Niemahčyma było adčynić dałučeńnie “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Niemahčyma było adčynić dałučeńnie “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Typ fajłaŭ %s (%s) nie absłuhoŭvajecca"
+
+#: ../libdocument/ev-document-factory.c:357
+msgid "All Documents"
+msgstr "Usie dakumenty"
+
+#: ../libdocument/ev-document-factory.c:389
+msgid "All Files"
+msgstr "Usie fajły"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:439
+msgid "Co_nnect"
+msgstr "_Spałučy"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:483
+msgid "Connect _anonymously"
+msgstr "Spałučy _ananimna"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:492
+msgid "Connect as u_ser:"
+msgstr "Spałučy _karystalnika:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:529
+msgid "_Username:"
+msgstr "_Karystalnik:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:533
+msgid "_Domain:"
+msgstr "_Damen:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:538
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Parol:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:553
+msgid "_Forget password immediately"
+msgstr "_Adrazu zabudźsia pra parol"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:561
+msgid "_Remember password until you logout"
+msgstr "_Zapaminaj parol dla sesii"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:569
+msgid "_Remember forever"
+msgstr "_Zapaminaj nazaŭždy"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Fajł nia jość sapraŭdnym fajłam stała (.desktop)"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Nieviadomaja versija fajła stała „%s”"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Uklučeńnie %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Aplikacyja nie pryjmaje dakumentaŭ z zahadnaha radka"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Nieviadomaja opcyja ŭklučeńnia: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"Nie ŭdałosia pieradać adrasoŭ dakumentaŭ dla fajła stała z typam „Link”"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Niemahčyma ŭklučać"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:224
+msgid "Disable connection to session manager"
+msgstr "Vyklučy spałučeńnie z kiraŭnikom sesijaŭ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:227
+msgid "Specify file containing saved configuration"
+msgstr "Vyznačy fajł z zachavanymi naładami"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:227
+msgid "FILE"
+msgstr "FAJŁ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:230
+msgid "Specify session management ID"
+msgstr "Vyznačy identyfikatar sesii"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:230
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:244
+msgid "Session management options:"
+msgstr "Opcyi kiravańnia sesijaj:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:245
+msgid "Show session management options"
+msgstr "Pakažy opcyi kiravańnia sesijaj"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:918
+#, c-format
+msgid "Show “_%s”"
+msgstr "Pakažy “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1381
+msgid "_Move on Toolbar"
+msgstr "Pieraniasi na panel pryładździa"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1382
+msgid "Move the selected item on the toolbar"
+msgstr "Pieraniasi abrany element na panel pryładździa"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1383
+msgid "_Remove from Toolbar"
+msgstr "_Vydal z paneli pryładździa"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1384
+msgid "Remove the selected item from the toolbar"
+msgstr "Vydal abrany element z paneli pryładździa"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1385
+msgid "_Delete Toolbar"
+msgstr "_Vydal panel pryładździa"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1386
+msgid "Remove the selected toolbar"
+msgstr "Vydal abranuju panel pryładździa"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Separatar"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:117
+msgid "Running in presentation mode"
+msgstr "Pracuje ŭ režymie prezentacyi"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5293
+msgid "Best Fit"
+msgstr "Najlepiej dapasuj"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Dapasuj da šyryni staronki"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4271
+#: ../shell/ev-window-title.c:149
+#, c-format
+msgid "Document Viewer"
+msgstr "Ahladalnik dakumentaŭ"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "Čytaje šmatstaronkavyja dakumenty"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Nie zvažaj na abmiežavańni dakumentu"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Nie zvažaj na abmiežavańni dakumentu, napr., na abmiežavańni mahčymaści "
+"kapijavańnia albo druku."
+
+#: ../properties/ev-properties-main.c:113
+msgid "Document"
+msgstr "Dakument"
+
+#: ../properties/ev-properties-view.c:59
+msgid "Title:"
+msgstr "Nazva:"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Location:"
+msgstr "Miesca:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Subject:"
+msgstr "Tema:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Author:"
+msgstr "Aŭtar:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Keywords:"
+msgstr "Klučavyja słovy:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Producer:"
+msgstr "Vytvorca:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Creator:"
+msgstr "Stvaralnik:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Created:"
+msgstr "Stvorany:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Modified:"
+msgstr "Źmienieny:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Number of Pages:"
+msgstr "Kolkaść staronak:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Optimized:"
+msgstr "Aptymizavany:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Format:"
+msgstr "Farmat:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Security:"
+msgstr "Biaśpieka:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Paper Size:"
+msgstr "Pamier arkušu:"
+
+#: ../properties/ev-properties-view.c:202
+msgid "None"
+msgstr "Niama"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:227
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:271
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:275
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f calaŭ"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:299
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, vertykalny (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:306
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, haryzantalny (%s)"
+
+#: ../libview/ev-jobs.c:949
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "Pamyłka stvareńnia fajłu “%s”: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Prakruci vyšej"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Prakruci nižej"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Prakruci abšar ahladu vyšej"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Prakruci abšar ahladu nižej"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Ahlad dakumentu"
+
+#: ../libview/ev-view.c:1417
+msgid "Go to first page"
+msgstr "Idzi da pieršaj staronki"
+
+#: ../libview/ev-view.c:1419
+msgid "Go to previous page"
+msgstr "Idzi da papiaredniaj staronki"
+
+#: ../libview/ev-view.c:1421
+msgid "Go to next page"
+msgstr "Idzi da nastupnaj staronki"
+
+#: ../libview/ev-view.c:1423
+msgid "Go to last page"
+msgstr "Idzi da apošniaj staronki"
+
+#: ../libview/ev-view.c:1425
+msgid "Go to page"
+msgstr "Idzi da staronki"
+
+#: ../libview/ev-view.c:1427
+msgid "Find"
+msgstr "Šukaj"
+
+#: ../libview/ev-view.c:1455
+#, c-format
+msgid "Go to page %s"
+msgstr "Idzi da staronki %s"
+
+#: ../libview/ev-view.c:1461
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Idzi da %s z fajłu “%s”"
+
+#: ../libview/ev-view.c:1464
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Idzi da fajłu “%s”"
+
+#: ../libview/ev-view.c:1472
+#, c-format
+msgid "Launch %s"
+msgstr "Startuj %s"
+
+#: ../libview/ev-view.c:2387
+msgid "End of presentation. Press Escape to exit."
+msgstr "Kaniec prezentacyi. Naciśni Escape, kab vyjści."
+
+#: ../libview/ev-view.c:3278
+msgid "Jump to page:"
+msgstr "Skoč da staronki:"
+
+#: ../libview/ev-view.c:3541 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:267
+msgid "Loading..."
+msgstr "Zahruzka..."
+
+#: ../shell/eggfindbar.c:146
+msgid "Search string"
+msgstr "Radok pošuku"
+
+#: ../shell/eggfindbar.c:147
+msgid "The name of the string to be found"
+msgstr "Nazva šukanaha radka"
+
+#: ../shell/eggfindbar.c:160
+msgid "Case sensitive"
+msgstr "Z ulikam rehistru"
+
+#: ../shell/eggfindbar.c:161
+msgid "TRUE for a case sensitive search"
+msgstr "PRAŬDA dla pošuku z ulikam rehistru"
+
+#: ../shell/eggfindbar.c:168
+msgid "Highlight color"
+msgstr "Koler padśviatleńnia"
+
+#: ../shell/eggfindbar.c:169
+msgid "Color of highlight for all matches"
+msgstr "Koler padśviatleńnia dla ŭsich supadzieńniaŭ"
+
+#: ../shell/eggfindbar.c:175
+msgid "Current color"
+msgstr "Dziejny koler"
+
+#: ../shell/eggfindbar.c:176
+msgid "Color of highlight for the current match"
+msgstr "Koler padścietki dla dziejnaha supadzieńnia"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Šukaj:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5027
+msgid "Find Pre_vious"
+msgstr "Šukaj _raniej"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Znajdzi papiaredniaje supadzieńnie z šukanym radkom"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5025
+msgid "Find Ne_xt"
+msgstr "Šukaj _dalej"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Znajdzi nastupnaje supadzieńnie z šukanym radkom"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Z ulikam rehistru"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Pieraklučy režym uliku rehistru"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Parol dla dakumentu %s"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Adčyni niadaŭni dakument"
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d z %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "z %d"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Hety dakument začynieny, i jaho možna pračytać, tolki ŭvioŭšy pravilny parol."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "_Adčyni dakument"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Uviadzi parol"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Patrebny parol"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "Dakument “%s” začynieny j patrabuje parol, kab adčynić jaho."
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "_Adrazu zabudźsia pra parol"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _logout"
+msgstr "_Zapaminaj parol dla sesii"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "Zapaminaj _nazaŭždy"
+
+#. Initial state
+#: ../shell/ev-print-operation.c:318
+msgid "Preparing to print ..."
+msgstr "Padrychtoŭka da druku..."
+
+#: ../shell/ev-print-operation.c:320
+msgid "Finishing..."
+msgstr "Zakančeńnie..."
+
+#: ../shell/ev-print-operation.c:322
+#, c-format
+msgid "Printing page %d of %d..."
+msgstr "Drukavańnie staronki %d z %d..."
+
+#: ../shell/ev-print-operation.c:1010
+msgid "Printing is not supported on this printer."
+msgstr "Hetaja drukarka nie padtrymvaje druku."
+
+#: ../shell/ev-print-operation.c:1136 ../shell/ev-window.c:5078
+msgid "Print"
+msgstr "Drukuj"
+
+#: ../shell/ev-properties-dialog.c:57
+msgid "Properties"
+msgstr "Ułaścivaści"
+
+#: ../shell/ev-properties-dialog.c:91
+msgid "General"
+msgstr "Ahulnaje"
+
+#: ../shell/ev-properties-dialog.c:101
+msgid "Fonts"
+msgstr "Šryfty"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Šryft"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "Źbirajucca źviestki ab šryftach... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Dałučeńni"
+
+#: ../shell/ev-sidebar-layers.c:395
+msgid "Layers"
+msgstr "Płasty"
+
+#: ../shell/ev-sidebar-links.c:340
+msgid "Print..."
+msgstr "Druk..."
+
+#: ../shell/ev-sidebar-links.c:720
+msgid "Index"
+msgstr "Indeks"
+
+#: ../shell/ev-sidebar-thumbnails.c:751
+msgid "Thumbnails"
+msgstr "Minijatury"
+
+#: ../shell/ev-window.c:843
+#, c-format
+msgid "Page %s - %s"
+msgstr "Staronka %s - %s"
+
+#: ../shell/ev-window.c:845
+#, c-format
+msgid "Page %s"
+msgstr "Staronka %s"
+
+#: ../shell/ev-window.c:1255
+msgid "The document contains no pages"
+msgstr "U dakumencie niama staronak"
+
+#: ../shell/ev-window.c:1479 ../shell/ev-window.c:1636
+msgid "Unable to open document"
+msgstr "Niemahčyma adčynić dakument"
+
+#: ../shell/ev-window.c:1610
+#, c-format
+msgid "Loading document from %s"
+msgstr "Čytańnie dakumentu z %s"
+
+#: ../shell/ev-window.c:1748 ../shell/ev-window.c:1941
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Zahruzka dakumentu (%d%%)"
+
+#: ../shell/ev-window.c:1887
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Pieračytvańnie dakumentu z %s"
+
+#: ../shell/ev-window.c:1920
+msgid "Failed to reload document."
+msgstr "Nie ŭdałosia pieračytać dakument."
+
+#: ../shell/ev-window.c:2069
+msgid "Open Document"
+msgstr "Adčyni dakument"
+
+#: ../shell/ev-window.c:2130
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "Niemahčyma stvaryć symbaličnuju spasyłku “%s”: %s"
+
+#: ../shell/ev-window.c:2159
+msgid "Cannot open a copy."
+msgstr "Niemahčyma adčynić kopiju."
+
+#: ../shell/ev-window.c:2399
+#, c-format
+msgid "Saving document to %s"
+msgstr "Zapis dakumentu ŭ %s"
+
+#: ../shell/ev-window.c:2402
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Zapis dałučeńnia ŭ %s"
+
+#: ../shell/ev-window.c:2405
+#, c-format
+msgid "Saving image to %s"
+msgstr "Zapis vyjavy ŭ %s"
+
+#: ../shell/ev-window.c:2450 ../shell/ev-window.c:2547
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Niemahčyma zapisać fajł jak “%s”."
+
+#: ../shell/ev-window.c:2478
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Pierasyłańnie dakumentu (%d%%)"
+
+#: ../shell/ev-window.c:2482
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Pierasyłańnie dałučeńnia (%d%%)"
+
+#: ../shell/ev-window.c:2486
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Pierasyłańnie vyjavy (%d%%)"
+
+#: ../shell/ev-window.c:2593
+msgid "Save a Copy"
+msgstr "Zapišy kopiju"
+
+#: ../shell/ev-window.c:2796
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d zadańnie ŭ čarzie"
+msgstr[1] "%d zadańni ŭ čarzie"
+msgstr[2] "%d zadańniaŭ u čarzie"
+
+#: ../shell/ev-window.c:2852 ../shell/ev-window.c:3962
+msgid "Failed to print document"
+msgstr "Pamyłka druku dakumentu"
+
+#: ../shell/ev-window.c:2909
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Drukavańnie zadańnia \"%s\""
+
+#: ../shell/ev-window.c:3106
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Sčakać, pakul zadańnie \"%s\" zakončycca, pierad začynieńniem?"
+
+#: ../shell/ev-window.c:3109
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Jość %d dziejnyja zadańni dla vydruku. Pačakać, pakul skončycca druk, pierad "
+"začynieńniem?"
+
+#: ../shell/ev-window.c:3121
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Kali ty začyniš hetaje akno, zadańni na druk, jakija stajać u čarzie, nia "
+"buduć vykananyja."
+
+#: ../shell/ev-window.c:3125
+msgid "Cancel _print and Close"
+msgstr "Anuluj _druk i začyni akno"
+
+#: ../shell/ev-window.c:3129
+msgid "Close _after Printing"
+msgstr "Začyni _paśla druku"
+
+#: ../shell/ev-window.c:3732
+msgid "Toolbar Editor"
+msgstr "Redaktar panelaŭ pryładździa"
+
+#: ../shell/ev-window.c:3864
+msgid "There was an error displaying help"
+msgstr "Uźnikła pamyłka pry pakazie dapamohi"
+
+#: ../shell/ev-window.c:4267
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Ahladalnik dakumentaŭ.\n"
+"Užyvaje poppler %s (%s)"
+
+#: ../shell/ev-window.c:4295
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince - heta volnaje prahramnaje zabieśpiačeńnie; ty možaš raspaŭsiudžvać "
+"jaho i/ci źmianiać zhodna z umovami Ahulnaj Publičnaj Licenzii GNU (GPL), "
+"apublikavanaj Fondam Volnaha Prahramnaha Zabieśpiačeńnia (Free Software "
+"Foundation); versii 2 albo (pa tvaim vybary) luboj paźniejšaj.\n"
+
+#: ../shell/ev-window.c:4299
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince raspaŭsiudžvajecca z nadziejaj, što hetaja prahrama budzie karysnaj, "
+"ale my ANIČOHA NIE HARANTUJEM, navat HANDLOVAJ PRYDATNAŚCI ci PRYDATNAŚCI "
+"CHOĆ BY DLA JAKICH METAŬ. Hladzi Ahulnuju Publičnuju Licenziju GNU (GPL) dla "
+"padrabiaznaściaŭ.\n"
+
+#: ../shell/ev-window.c:4303
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Ty pavinny byŭ atrymać kopiju Ahulnaj Publičnaj Licenzii GNU (GPL) razam z "
+"Evincam; kali nie, napišy pra heta (pa-anhielsku) na adras: Free Software "
+"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#. Manually set name and icon in win32
+#: ../shell/ev-window.c:4327 ../shell/main.c:382
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4330
+msgid "© 1996-2007 The Evince authors"
+msgstr "© 1996-2007 Aŭtary Evinca"
+
+#: ../shell/ev-window.c:4336
+msgid "translator-credits"
+msgstr "Ihar Hračyška <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4554
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d znojdziena na hetaj staroncy"
+msgstr[1] "%d znojdzienyja na hetaj staroncy"
+msgstr[2] "%d znojdzienyja na hetaj staroncy"
+
+#: ../shell/ev-window.c:4562
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "zastałosia %3d%%, kab šukać"
+
+#: ../shell/ev-window.c:4990
+msgid "_File"
+msgstr "_Fajł"
+
+#: ../shell/ev-window.c:4991
+msgid "_Edit"
+msgstr "_Redahuj"
+
+#: ../shell/ev-window.c:4992
+msgid "_View"
+msgstr "_Vyhlad"
+
+#: ../shell/ev-window.c:4993
+msgid "_Go"
+msgstr "_Idzi"
+
+#: ../shell/ev-window.c:4994
+msgid "_Help"
+msgstr "_Dapamoha"
+
+#. File menu
+#: ../shell/ev-window.c:4997 ../shell/ev-window.c:5176
+#: ../shell/ev-window.c:5255
+msgid "_Open..."
+msgstr "_Adčyni..."
+
+#: ../shell/ev-window.c:4998 ../shell/ev-window.c:5256
+msgid "Open an existing document"
+msgstr "Adčyni isny dakument"
+
+#: ../shell/ev-window.c:5000
+msgid "Op_en a Copy"
+msgstr "A_dčyni kopiju"
+
+#: ../shell/ev-window.c:5001
+msgid "Open a copy of the current document in a new window"
+msgstr "Adčyni kopiju dziejnaha dakumentu ŭ novym aknie"
+
+#: ../shell/ev-window.c:5003 ../shell/ev-window.c:5178
+msgid "_Save a Copy..."
+msgstr "_Zapišy kopiju..."
+
+#: ../shell/ev-window.c:5004
+msgid "Save a copy of the current document"
+msgstr "Zapišy kopiju dziejnaha dakumentu"
+
+#: ../shell/ev-window.c:5006
+msgid "Print Set_up..."
+msgstr "_Nałady druku..."
+
+#: ../shell/ev-window.c:5007
+msgid "Setup the page settings for printing"
+msgstr "Naładź arkuš dziela druku"
+
+#: ../shell/ev-window.c:5009
+msgid "_Print..."
+msgstr "_Nadrukuj..."
+
+#: ../shell/ev-window.c:5010 ../shell/ev-window.c:5079
+msgid "Print this document"
+msgstr "Nadrukuj hety dakument"
+
+#: ../shell/ev-window.c:5012
+msgid "P_roperties"
+msgstr "_Ułaścivaści"
+
+#: ../shell/ev-window.c:5020
+msgid "Select _All"
+msgstr "A_biary ŭsio"
+
+#: ../shell/ev-window.c:5022
+msgid "_Find..."
+msgstr "Š_ukaj..."
+
+#: ../shell/ev-window.c:5023
+msgid "Find a word or phrase in the document"
+msgstr "Šukaj słova albo vyraz u dakumencie"
+
+#: ../shell/ev-window.c:5029
+msgid "T_oolbar"
+msgstr "_Panel pryładździa"
+
+#: ../shell/ev-window.c:5031
+msgid "Rotate _Left"
+msgstr "Paviarni ŭ_leva"
+
+#: ../shell/ev-window.c:5033
+msgid "Rotate _Right"
+msgstr "Paviarni ŭ_prava"
+
+#: ../shell/ev-window.c:5038
+msgid "Enlarge the document"
+msgstr "Pavialič dakument"
+
+#: ../shell/ev-window.c:5041
+msgid "Shrink the document"
+msgstr "Pamienš dakument"
+
+#: ../shell/ev-window.c:5043
+msgid "_Reload"
+msgstr "_Pieračytaj"
+
+#: ../shell/ev-window.c:5044
+msgid "Reload the document"
+msgstr "Pieračytaj dakument"
+
+#: ../shell/ev-window.c:5047
+msgid "Auto_scroll"
+msgstr "_Aŭtamatyčna prakručvaj"
+
+#. Go menu
+#: ../shell/ev-window.c:5051
+msgid "_Previous Page"
+msgstr "_Papiaredniaja staronka"
+
+#: ../shell/ev-window.c:5052
+msgid "Go to the previous page"
+msgstr "Idzi da papiaredniaj staronki"
+
+#: ../shell/ev-window.c:5054
+msgid "_Next Page"
+msgstr "_Nastupnaja staronka"
+
+#: ../shell/ev-window.c:5055
+msgid "Go to the next page"
+msgstr "Idzi da nastupnaj staronki"
+
+#: ../shell/ev-window.c:5057
+msgid "_First Page"
+msgstr "_Pieršaja staronka"
+
+#: ../shell/ev-window.c:5058
+msgid "Go to the first page"
+msgstr "Idzi da pieršaj staronki"
+
+#: ../shell/ev-window.c:5060
+msgid "_Last Page"
+msgstr "_Apošniaja staronka"
+
+#: ../shell/ev-window.c:5061
+msgid "Go to the last page"
+msgstr "Idzi da apošniaj staronki"
+
+#. Help menu
+#: ../shell/ev-window.c:5065
+msgid "_Contents"
+msgstr "_Źmieściva"
+
+#: ../shell/ev-window.c:5068
+msgid "_About"
+msgstr "_Ab prahramie"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5072
+msgid "Leave Fullscreen"
+msgstr "Pakiń poŭny ekran"
+
+#: ../shell/ev-window.c:5073
+msgid "Leave fullscreen mode"
+msgstr "Pakiń poŭnaekranny režym"
+
+#: ../shell/ev-window.c:5075
+msgid "Start Presentation"
+msgstr "Pačni prezentacyju"
+
+#: ../shell/ev-window.c:5076
+msgid "Start a presentation"
+msgstr "Pačni prezentacyju"
+
+#. View Menu
+#: ../shell/ev-window.c:5132
+msgid "_Toolbar"
+msgstr "_Panel pryładździa"
+
+#: ../shell/ev-window.c:5133
+msgid "Show or hide the toolbar"
+msgstr "Pakažy albo schavaj panel pryładździa"
+
+#: ../shell/ev-window.c:5135
+msgid "Side _Pane"
+msgstr "_Bakavaja panel"
+
+#: ../shell/ev-window.c:5136
+msgid "Show or hide the side pane"
+msgstr "Pakažy albo schavaj bakavuju panel"
+
+#: ../shell/ev-window.c:5138
+msgid "_Continuous"
+msgstr "_Bieśpierapynny"
+
+#: ../shell/ev-window.c:5139
+msgid "Show the entire document"
+msgstr "Pakazvaj uvieś dakument"
+
+#: ../shell/ev-window.c:5141
+msgid "_Dual"
+msgstr "_Zdvojeny"
+
+#: ../shell/ev-window.c:5142
+msgid "Show two pages at once"
+msgstr "Pakazvaj adrazu dźvie staronki"
+
+#: ../shell/ev-window.c:5144
+msgid "_Fullscreen"
+msgstr "_Poŭny ekran"
+
+#: ../shell/ev-window.c:5145
+msgid "Expand the window to fill the screen"
+msgstr "Razharni vakno, kab zapoŭnić ekran"
+
+#: ../shell/ev-window.c:5147
+msgid "Pre_sentation"
+msgstr "Pre_zentacyja"
+
+#: ../shell/ev-window.c:5148
+msgid "Run document as a presentation"
+msgstr "Pakažy dakument jak prezentacyju"
+
+#: ../shell/ev-window.c:5150
+msgid "_Best Fit"
+msgstr "_Najlepiej dapasuj"
+
+#: ../shell/ev-window.c:5151
+msgid "Make the current document fill the window"
+msgstr "Zapoŭni vakno dziejnym dakumentam"
+
+#: ../shell/ev-window.c:5153
+msgid "Fit Page _Width"
+msgstr "_Dapasuj da šyryni staronki"
+
+#: ../shell/ev-window.c:5154
+msgid "Make the current document fill the window width"
+msgstr "Zapoŭni šyryniu vakna dziejnym dakumentam"
+
+#. Links
+#: ../shell/ev-window.c:5161
+msgid "_Open Link"
+msgstr "_Adčyni spasyłku"
+
+#: ../shell/ev-window.c:5163
+msgid "_Go To"
+msgstr "_Idzi da"
+
+#: ../shell/ev-window.c:5165
+msgid "Open in New _Window"
+msgstr "Adčyni ŭ novym _aknie"
+
+#: ../shell/ev-window.c:5167
+msgid "_Copy Link Address"
+msgstr "_Skapijuj adras spasyłki"
+
+#: ../shell/ev-window.c:5169
+msgid "_Save Image As..."
+msgstr "_Zapišy vyjavu jak..."
+
+#: ../shell/ev-window.c:5171
+msgid "Copy _Image"
+msgstr "Skapijuj _vyjavu"
+
+#: ../shell/ev-window.c:5217
+msgid "Page"
+msgstr "Staronka"
+
+#: ../shell/ev-window.c:5218
+msgid "Select Page"
+msgstr "Abiary staronku"
+
+#: ../shell/ev-window.c:5229
+msgid "Zoom"
+msgstr "Pavieličeńnie"
+
+#: ../shell/ev-window.c:5231
+msgid "Adjust the zoom level"
+msgstr "Nastaŭ uzrovień pavieličeńnia"
+
+#: ../shell/ev-window.c:5241
+msgid "Navigation"
+msgstr "Navihacyja"
+
+#: ../shell/ev-window.c:5243
+msgid "Back"
+msgstr "Nazad"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5246
+msgid "Move across visited pages"
+msgstr "Pierachodź pa naviedanych staronkach"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5276
+msgid "Previous"
+msgstr "Nazad"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5281
+msgid "Next"
+msgstr "Napierad"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5285
+msgid "Zoom In"
+msgstr "Pavialič"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5289
+msgid "Zoom Out"
+msgstr "Pamienš"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5297
+msgid "Fit Width"
+msgstr "Da šyryni"
+
+#: ../shell/ev-window.c:5464 ../shell/ev-window.c:5482
+msgid "Unable to launch external application."
+msgstr "Nie ŭdałosia ŭruchomić aplikacyju."
+
+#: ../shell/ev-window.c:5525
+msgid "Unable to open external link"
+msgstr "Niemahčyma adčynić vonkavuju spasyłku"
+
+#: ../shell/ev-window.c:5681
+msgid "Couldn't find appropriate format to save image"
+msgstr "Niemahčyma znajści prydatnaha farmatu dla zapisu vyjavy"
+
+#: ../shell/ev-window.c:5720
+msgid "The image could not be saved."
+msgstr "Niemahčyma zapisać vyjavu."
+
+#: ../shell/ev-window.c:5752
+msgid "Save Image"
+msgstr "Zapišy vyjavu"
+
+#: ../shell/ev-window.c:5814
+msgid "Unable to open attachment"
+msgstr "Niemahčyma adčynić dałučeńnie"
+
+#: ../shell/ev-window.c:5865
+msgid "The attachment could not be saved."
+msgstr "Niemahčyma zapisać dałučeńnie."
+
+#: ../shell/ev-window.c:5910
+msgid "Save Attachment"
+msgstr "Zapišy dałučeńnie"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - Patrebny parol"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "Pavodle pašyreńnia"
+
+#: ../shell/main.c:59 ../shell/main.c:347
+msgid "MATE Document Viewer"
+msgstr "Ahladalnik dakumentaŭ dla MATE"
+
+#: ../shell/main.c:67
+msgid "The page of the document to display."
+msgstr "Staronka dakumentu, kab pakazać."
+
+#: ../shell/main.c:67
+msgid "PAGE"
+msgstr "STARONKA"
+
+#: ../shell/main.c:68
+msgid "Run evince in fullscreen mode"
+msgstr "Startuj Evinca ŭ poŭnaekrannym režymie"
+
+#: ../shell/main.c:69
+msgid "Run evince in presentation mode"
+msgstr "Startuj Evinca ŭ režymie prezentacyi"
+
+#: ../shell/main.c:70
+msgid "Run evince as a previewer"
+msgstr "Startuj Evinca jak pieradahladalnika"
+
+#: ../shell/main.c:71
+msgid "The word or phrase to find in the document"
+msgstr "Słova ci vyraz, kab šukać u dakumencie"
+
+#: ../shell/main.c:71
+msgid "STRING"
+msgstr "RADOK"
+
+#: ../shell/main.c:75
+msgid "[FILE...]"
+msgstr "[FAJŁ...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Dastupnyja lohikavyja opcyi: true ŭklučaje stvareńnie minijaturaŭ, false "
+"adklučaje"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Uklučy minijatury dla dakumentaŭ PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Zahad stvareńnia minijaturaŭ dla dakumentaŭ PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Pravilny zahad i arhumenty dla stvareńnia minijaturaŭ dla dakumentaŭ PDF. "
+"Hladzi dakumentacyju na stvareńnie minijaturaŭ dla Cajaa dziela "
+"padrabiaznaściaŭ."
+
+#~ msgid "File not available"
+#~ msgstr "Fajł niedastupny"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "Addalenyja fajły nie padtrymvajucca"
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 00000000..3c06c26b
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,1723 @@
+# Bulgarian translation of evince po-file.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2009 Krasimir "Bfaf" Chonov <[email protected]>.
+# This file is distributed under the same license as the evince package.
+# Rostislav "zbrox" Raykov <[email protected]>, 2005.
+# Vladimir "kaladan" Petkov <[email protected]>, 2005, 2006, 2007.
+# Alexander Shopov <[email protected]>, 2006, 2007, 2008, 2009.
+# Krasimir "Bfaf" Chonov <[email protected]>, 2009.
+# Yavor Doganov <[email protected]>, 2008.
+# Ivaylo Valkov <[email protected]>, 2010.
+# Damyan Ivanov <[email protected]>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince mate-2-32\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-09-27 13:40+0300\n"
+"PO-Revision-Date: 2010-09-27 13:40+0300\n"
+"Last-Translator: Damyan Ivanov <[email protected]>\n"
+"Language-Team: Bulgarian <[email protected]>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Грешка при стартиране на командата „%s“, да разархивира комикса: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Командата „%s“ не успя да разархивира комикса."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Командата „%s“ не завърши нормално."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Видът на MIME не е на комикс: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Не може да се намери подходяща команда за разархивиране на този тип комикс"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Неясен/непознат вид MIME"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Файлът е повреден"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "В архива няма файлове"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "В архива %s няма намерени изображения"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Възникна грешка при изтриването на „%s“."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Грешка %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Комикси"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "Документът DjVu е в некоректен формат"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr "Документът е изграден от няколко файла. Някои от тях не са достъпни."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Документи DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Документът DVI е в некоректен формат"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Документи DVI"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Тази творба е обществено достояние"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Да"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Не"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Неизвестен вид шрифт"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Без име"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Вградени подмножества"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Вградени"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Не е вграден"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Документи PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Невалиден документ"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Кадри от Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Няма грешка"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Недостатъчно памет"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Неуспех при намиране на подписа в ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Лош формат за ZIP"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Не се поддържат архиви ZIP, съставени от поредица файлове"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Файлът не може да бъде отворен"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Неуспех при четене на данни от файла"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Неуспех при намиране на файла в архива ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Неизвестна грешка"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Документът „%s“ не може да бъде зареден"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Документът „%s“ не може да бъде запазен"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Документи PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Неуспех при запазването на прикрепения файл „%s“: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Неуспех при отварянето на прикрепения файл „%s“: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Неуспех при отварянето на прикрепения файл „%s“"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Не се поддържат файлове от вида %s (%s) "
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Всички документи"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Всички файлове"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Неуспешно създаване на временен файл: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Неуспешно създаване на временна папка: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Файлът не е във формат .desktop"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Непозната версия на файла: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Стартиране на %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Програмата не приема документи през командния ред"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Непозната опция при стартиране: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "В обекти от вида „Type=Link“ не може да се подават адреси на документи"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Не е обект за стартиране"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Изключване на връзката с управлението на сесиите"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Указване на файла със запазените настройки"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "ФАЙЛ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Указване на идентификатор за управлението на сесии"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ИДЕНТИФИКАТОР"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Опции на управлението на сесии:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Показване на настройките за управлението на сесиите"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Показване на “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "П_оставяне в лентата с инструменти"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Преместване на избрания обект в лентата с инструменти"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "Пр_емахване от лентата с инструменти"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Премахване на избрания обект от лентата с инструменти"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "П_ремахване на лентата с инструменти"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Премахване на лентата с инструменти"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Разделител"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5761
+msgid "Best Fit"
+msgstr "Напасване по екрана"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Напасване по широчина"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4554
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Преглед на документи"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Преглед на документи с много страници"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Пренебрегване ограниченията на документа"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Пренебрегване на ограниченията на документа, като ограничения за копиране и "
+"печат."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Изтриване на временен файл"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Файл с настройки за печат"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Преглед на документи"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3185
+msgid "Failed to print document"
+msgstr "Документът не може да бъде отпечатан"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Избраният принтер „%s“ не може да бъде открит"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5476
+msgid "_Previous Page"
+msgstr "_Предишна страница"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5477
+msgid "Go to the previous page"
+msgstr "Отиване на предишната страница"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5479
+msgid "_Next Page"
+msgstr "_Следваща страница"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5480
+msgid "Go to the next page"
+msgstr "Отиване на следващата страница"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5463
+msgid "Enlarge the document"
+msgstr "Увеличаване на документа"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5466
+msgid "Shrink the document"
+msgstr "Смаляване на документа"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Печат"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5432
+msgid "Print this document"
+msgstr "Печатане на този документ"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5578
+msgid "_Best Fit"
+msgstr "Напасване по _екрана"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5579
+msgid "Make the current document fill the window"
+msgstr "Текущия документ да запълни прозореца"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5581
+msgid "Fit Page _Width"
+msgstr "Напасване по _широчина"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5582
+msgid "Make the current document fill the window width"
+msgstr "Текущият документ да запълни прозореца по широчина"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5683
+msgid "Page"
+msgstr "Страница"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5684
+msgid "Select Page"
+msgstr "Избор на страница"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Документ"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Заглавие:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Местоположение:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Тема:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Автор:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Ключови думи:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Производител:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Автор:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Създаден:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Променян:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Брой страници:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Оптимизиран:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Формат:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Сигурност:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Размер на хартията:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Без"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f инча"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, вертикално (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, хоризонтално (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d от %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "от %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Зареждане…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Подготовка за печат…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Завършване…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Печатане на страница № %d от общо %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Разпечатването чрез този принтер не се поддържа."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Неправилен избор на страница"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Предупреждение"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Обхватът за печат не включва нито една страница"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Мащабиране на страница:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Свиване към областта за печат"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Напасване към областта за печат"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Мащабиране на документите към избрания размер на листите. Изберете една от "
+"следните възможности:\n"
+"\n"
+"• „Без“: не се извършва мащабиране;\n"
+"\n"
+"• „Свиване към областта за печат“: страниците по-големи от областта за печат "
+"върху листите се свиват, за да се вместят в нея;\n"
+"\n"
+"• „Напасване към областта за печат“: страниците се свиват или увеличават, за "
+"да напаснат към областта за печат върху листите.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Автоматично завъртане и центриране"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Завъртане на всяка страница, за да съвпадне с ориентацията на листите на "
+"принтера. Страниците се центрират върху листите."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Избор на размер на листите според размера на страниците на документа"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Когато е избрано, всяка страница се разпечатва на лист със същия размер."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Управление на страниците"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Страница %d не може да бъде отпечатана: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Придвижване нагоре"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Придвижване надолу"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Придвижване на изгледа нагоре"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Придвижване на изгледа надолу"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Преглед на документи"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Отиване на страница:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Край на презентацията. Натиснете, за да излезете."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Първа страница"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Предишна страница"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Следваща страница"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Последна страница"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Отиване на страница"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Търсене"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Отиване на страница %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Отиване при %s във файла „%s“"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Отиване при файла „%s“"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Стартиране на %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Търсене:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5449
+msgid "Find Pre_vious"
+msgstr "_Предишна поява"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Откриване на предишната поява на търсения низ"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5447
+msgid "Find Ne_xt"
+msgstr "_Следваща поява"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Откриване на следващата поява на търсения низ"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Има р_азлика между главни/малки букви"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Превключване на разлика главни/малки букви"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Икона:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Бележка"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Коментар"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Ключ"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Помощ"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Нов абзац"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Абзац"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Вмъкване"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Кръст"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Кръг"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Непознато"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Свойства на анотацията"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Цвят:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Стил:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Прозрачен"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Непрозрачен"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Начално състояние на прозореца:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Отворен"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Затворен"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Работа в режим на презентация"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Парола за документа %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Преобразуване на %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "Преобразувани са %d от %d документа"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Преобразуване на метаданните"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Форматът на мета-данните на Evince е променен, затова е необходима миграция. "
+"Ако тя не бъде извършена, запазването на метаданните няма да работи."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Отваряне на скоро използван документ"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Този документ е заключен и може да бъде прочетен, само ако се подаде вярната "
+"парола."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Отключване на документа"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Въведете парола"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Изисква се парола"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "Документът „%s“ е заключен и изисква парола, за да бъде отворен."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Парола:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "_Незабавно забравяне на паролата"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Запомняне на паролата за тази _сесия"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "_Запомняне завинаги"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Свойства"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Основни"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Шрифтове"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Лиценз на документа"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Шрифт"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Събиране на информация за шрифтовете… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Условия за ползване"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Текст на лиценза"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Допълнителна информация"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Списък"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Анотации:"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Текст"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Добавяне на текстова анотация"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Добавяне"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Документът не съдържа анотации"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Страница %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Прикачени файлове"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Слоеве"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Печат…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Съдържание"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Мини изображения"
+
+#: ../shell/ev-window.c:875
+#, c-format
+msgid "Page %s — %s"
+msgstr "Страница %s — %s"
+
+#: ../shell/ev-window.c:877
+#, c-format
+msgid "Page %s"
+msgstr "Страница %s"
+
+#: ../shell/ev-window.c:1436
+msgid "The document contains no pages"
+msgstr "Документът не съдържа страници"
+
+#: ../shell/ev-window.c:1439
+msgid "The document contains only empty pages"
+msgstr "Документът съдържа само празни страници"
+
+#: ../shell/ev-window.c:1644 ../shell/ev-window.c:1810
+msgid "Unable to open document"
+msgstr "Документът не може да бъде отворен"
+
+#: ../shell/ev-window.c:1781
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Зареждане на документ от „%s“"
+
+#: ../shell/ev-window.c:1923 ../shell/ev-window.c:2202
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Изтегляне на документ (%d%%)"
+
+#: ../shell/ev-window.c:1956
+msgid "Failed to load remote file."
+msgstr "Отдалеченият файл не може да бъде зареден."
+
+#: ../shell/ev-window.c:2146
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Презареждане на документа от %s"
+
+#: ../shell/ev-window.c:2178
+msgid "Failed to reload document."
+msgstr "Документът не може да бъде презареден."
+
+#: ../shell/ev-window.c:2333
+msgid "Open Document"
+msgstr "Отваряне на документ"
+
+#: ../shell/ev-window.c:2631
+#, c-format
+msgid "Saving document to %s"
+msgstr "Запазване на документа като %s"
+
+#: ../shell/ev-window.c:2634
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Запазване на прикрепения файл като %s"
+
+#: ../shell/ev-window.c:2637
+#, c-format
+msgid "Saving image to %s"
+msgstr "Запазване на изображението като %s"
+
+#: ../shell/ev-window.c:2681 ../shell/ev-window.c:2781
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Файлът не може да бъде запазен като „%s“."
+
+#: ../shell/ev-window.c:2712
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Качване на документ (%d%%)"
+
+#: ../shell/ev-window.c:2716
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Качване на прикрепен файл (%d%%)"
+
+#: ../shell/ev-window.c:2720
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Качване на изображение (%d%%)"
+
+#: ../shell/ev-window.c:2844
+msgid "Save a Copy"
+msgstr "Запазване на копие"
+
+#: ../shell/ev-window.c:3129
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d задача в опашката"
+msgstr[1] "%d задачи в опашката"
+
+#: ../shell/ev-window.c:3242
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Отпечатване на задача „%s“"
+
+#: ../shell/ev-window.c:3420
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Документът съдържа формуляри с попълнени полета. Ако не запазите копие, "
+"промените ще бъдат безвъзвратно загубени."
+
+#: ../shell/ev-window.c:3424
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Документът съдържа нови или променени анотации. Ако не запазите копие, "
+"промените ще бъдат безвъзвратно загубени."
+
+#: ../shell/ev-window.c:3431
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Да се запази ли копие на документа „%s“ преди спирането на програмата?"
+
+#: ../shell/ev-window.c:3450
+msgid "Close _without Saving"
+msgstr "_Без запазване"
+
+#: ../shell/ev-window.c:3454
+msgid "Save a _Copy"
+msgstr "Запазване на _копие"
+
+#: ../shell/ev-window.c:3528
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr ""
+"Да се изчака ли приключването на задача „%s“ преди спирането на програмата?"
+
+#: ../shell/ev-window.c:3531
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Има %d активни задачи за печат. Да се изчака ли приключването им преди "
+"спирането на програмата?"
+
+#: ../shell/ev-window.c:3543
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Ако затворите прозореца, предстоящите задачи няма да бъдат отпечатани."
+
+#: ../shell/ev-window.c:3547
+msgid "Cancel _print and Close"
+msgstr "_Отказване на печатането и затваряне"
+
+#: ../shell/ev-window.c:3551
+msgid "Close _after Printing"
+msgstr "Затваряне _след отпечатване"
+
+#: ../shell/ev-window.c:4171
+msgid "Toolbar Editor"
+msgstr "Редактор на лентата с инструменти"
+
+#: ../shell/ev-window.c:4338
+msgid "There was an error displaying help"
+msgstr "Грешка при показването на помощ"
+
+#: ../shell/ev-window.c:4550
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Програма за преглед на документи.\n"
+"Използва се %s (%s)"
+
+#: ../shell/ev-window.c:4581
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Тази програма (Evince) е свободен софтуер. Можете да я разпространявате и/"
+"или променяте под условията на Общия публичен лиценз на GNU (GNU GPL), както "
+"е публикуван от Фондацията за свободен софтуер — версия 2 на лиценза или (по "
+"ваше решение) по-късна версия.\n"
+
+#: ../shell/ev-window.c:4585
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Тази програма се разпространява с надеждата, че ще бъде полезна, но БЕЗ "
+"НИКАКВИ ГАРАНЦИИ, дори и косвените за ПРОДАЖБА или СЪОТВЕТСТВИЕ С КАКВАТО И "
+"ДА Е УПОТРЕБА. За подробности погледнете Общия публичен лиценз на GNU.\n"
+
+#: ../shell/ev-window.c:4589
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Трябва да сте получили копие от Общия публичен лиценз на GNU (GNU GPL) "
+"заедно с тази програма. Ако не сте, пишете до Free Software Foundation, "
+"Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.\n"
+
+#: ../shell/ev-window.c:4614
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4617
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Авторите на Evince"
+
+#: ../shell/ev-window.c:4623
+msgid "translator-credits"
+msgstr ""
+"Владимир „Kaladan“ Петков <[email protected]>\n"
+"Ростислав „zbrox“ Райков <[email protected]>\n"
+"Александър Шопов <[email protected]>\n"
+"Красимир „bfaf“ Чонов <[email protected]>\n"
+"Дамян Иванов <[email protected]>\n"
+"\n"
+"Проектът за превод на MATE има нужда от подкрепа.\n"
+"Научете повече за нас на http://mate.cult.bg\n"
+"Докладвайте за грешки на http://mate.cult.bg/bugs"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4889
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d открит на тази страница"
+msgstr[1] "%d открити на тази страница"
+
+#: ../shell/ev-window.c:4894
+msgid "Not found"
+msgstr "Търсеният текст не е намерен"
+
+#: ../shell/ev-window.c:4900
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% остават да бъдат претърсени"
+
+#: ../shell/ev-window.c:5415
+msgid "_File"
+msgstr "_Файл"
+
+#: ../shell/ev-window.c:5416
+msgid "_Edit"
+msgstr "_Редактиране"
+
+#: ../shell/ev-window.c:5417
+msgid "_View"
+msgstr "_Изглед"
+
+#: ../shell/ev-window.c:5418
+msgid "_Go"
+msgstr "_Отиване"
+
+#: ../shell/ev-window.c:5419
+msgid "_Help"
+msgstr "Помо_щ"
+
+#. File menu
+#: ../shell/ev-window.c:5422 ../shell/ev-window.c:5723
+msgid "_Open…"
+msgstr "_Отваряне…"
+
+#: ../shell/ev-window.c:5423 ../shell/ev-window.c:5724
+msgid "Open an existing document"
+msgstr "Отваряне на съществуващ документ"
+
+#: ../shell/ev-window.c:5425
+msgid "Op_en a Copy"
+msgstr "Отваряне на _копие"
+
+#: ../shell/ev-window.c:5426
+msgid "Open a copy of the current document in a new window"
+msgstr "Отваряне на копие на текущия документ в нов прозорец"
+
+#: ../shell/ev-window.c:5428
+msgid "_Save a Copy…"
+msgstr "_Запазване на копие…"
+
+#: ../shell/ev-window.c:5429
+msgid "Save a copy of the current document"
+msgstr "Запазване на копие на текущия документ"
+
+#: ../shell/ev-window.c:5431
+msgid "_Print…"
+msgstr "_Печат…"
+
+#: ../shell/ev-window.c:5434
+msgid "P_roperties"
+msgstr "_Свойства"
+
+#: ../shell/ev-window.c:5442
+msgid "Select _All"
+msgstr "Избор на _всичко"
+
+#: ../shell/ev-window.c:5444
+msgid "_Find…"
+msgstr "_Търсене…"
+
+#: ../shell/ev-window.c:5445
+msgid "Find a word or phrase in the document"
+msgstr "Търсене на дума или фраза в документа"
+
+#: ../shell/ev-window.c:5451
+msgid "T_oolbar"
+msgstr "Лента с _инструменти"
+
+#: ../shell/ev-window.c:5453
+msgid "Rotate _Left"
+msgstr "Завъртане на_ляво"
+
+#: ../shell/ev-window.c:5455
+msgid "Rotate _Right"
+msgstr "Завъртане на_дясно"
+
+#: ../shell/ev-window.c:5457
+msgid "Save Current Settings as _Default"
+msgstr "Използване на тези настройки по _подразбиране"
+
+#: ../shell/ev-window.c:5468
+msgid "_Reload"
+msgstr "П_резареждане"
+
+#: ../shell/ev-window.c:5469
+msgid "Reload the document"
+msgstr "Презареждане на документа"
+
+#: ../shell/ev-window.c:5472
+msgid "Auto_scroll"
+msgstr "_Автоматично придвижване"
+
+#: ../shell/ev-window.c:5482
+msgid "_First Page"
+msgstr "Пър_ва страница"
+
+#: ../shell/ev-window.c:5483
+msgid "Go to the first page"
+msgstr "Отиване на първата страница"
+
+#: ../shell/ev-window.c:5485
+msgid "_Last Page"
+msgstr "Пос_ледна страница"
+
+#: ../shell/ev-window.c:5486
+msgid "Go to the last page"
+msgstr "Отиване на последната страница"
+
+#. Help menu
+#: ../shell/ev-window.c:5490
+msgid "_Contents"
+msgstr "_Ръководство"
+
+#: ../shell/ev-window.c:5493
+msgid "_About"
+msgstr "_Относно"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5497
+msgid "Leave Fullscreen"
+msgstr "Напускане на режим „Цял екран“"
+
+#: ../shell/ev-window.c:5498
+msgid "Leave fullscreen mode"
+msgstr "Напускане на режима за цял екран"
+
+#: ../shell/ev-window.c:5500
+msgid "Start Presentation"
+msgstr "Презентация"
+
+#: ../shell/ev-window.c:5501
+msgid "Start a presentation"
+msgstr "Започване на презентация с документа"
+
+#. View Menu
+#: ../shell/ev-window.c:5560
+msgid "_Toolbar"
+msgstr "Лента с _инструменти"
+
+#: ../shell/ev-window.c:5561
+msgid "Show or hide the toolbar"
+msgstr "Показване или скриване на лентата с инструментите"
+
+#: ../shell/ev-window.c:5563
+msgid "Side _Pane"
+msgstr "Страничен _панел"
+
+#: ../shell/ev-window.c:5564
+msgid "Show or hide the side pane"
+msgstr "Показване или скриване на страничния панел"
+
+#: ../shell/ev-window.c:5566
+msgid "_Continuous"
+msgstr "_Без прекъсване"
+
+#: ../shell/ev-window.c:5567
+msgid "Show the entire document"
+msgstr "Показване на целия документ"
+
+#: ../shell/ev-window.c:5569
+msgid "_Dual"
+msgstr "_Двойно"
+
+#: ../shell/ev-window.c:5570
+msgid "Show two pages at once"
+msgstr "Показване на две страници едновременно"
+
+#: ../shell/ev-window.c:5572
+msgid "_Fullscreen"
+msgstr "_Цял екран"
+
+#: ../shell/ev-window.c:5573
+msgid "Expand the window to fill the screen"
+msgstr "Разширяване на прозореца, така че да запълни екрана"
+
+#: ../shell/ev-window.c:5575
+msgid "Pre_sentation"
+msgstr "Пре_зентация"
+
+#: ../shell/ev-window.c:5576
+msgid "Run document as a presentation"
+msgstr "Отваряне на документа като презентация"
+
+#: ../shell/ev-window.c:5584
+msgid "_Inverted Colors"
+msgstr "_Обратни цветове"
+
+#: ../shell/ev-window.c:5585
+msgid "Show page contents with the colors inverted"
+msgstr "Показване на съдържанието на страниците с обратни цветове"
+
+#. Links
+#: ../shell/ev-window.c:5593
+msgid "_Open Link"
+msgstr "_Отваряне на връзка"
+
+#: ../shell/ev-window.c:5595
+msgid "_Go To"
+msgstr "_Отиване"
+
+#: ../shell/ev-window.c:5597
+msgid "Open in New _Window"
+msgstr "Отваряне в нов _прозорец"
+
+#: ../shell/ev-window.c:5599
+msgid "_Copy Link Address"
+msgstr "_Копиране на адреса на връзката"
+
+#: ../shell/ev-window.c:5601
+msgid "_Save Image As…"
+msgstr "_Запазване на изображението като…"
+
+#: ../shell/ev-window.c:5603
+msgid "Copy _Image"
+msgstr "Копиране на _изображението"
+
+#: ../shell/ev-window.c:5605
+msgid "Annotation Properties…"
+msgstr "Свойства на анотацията…"
+
+#: ../shell/ev-window.c:5610
+msgid "_Open Attachment"
+msgstr "_Отваряне на прикрепения файл"
+
+#: ../shell/ev-window.c:5612
+msgid "_Save Attachment As…"
+msgstr "_Запазване на прикрепения файл като…"
+
+#: ../shell/ev-window.c:5697
+msgid "Zoom"
+msgstr "Мащаб"
+
+#: ../shell/ev-window.c:5699
+msgid "Adjust the zoom level"
+msgstr "Настройване на мащаба"
+
+#: ../shell/ev-window.c:5709
+msgid "Navigation"
+msgstr "Навигация"
+
+#: ../shell/ev-window.c:5711
+msgid "Back"
+msgstr "Назад"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5714
+msgid "Move across visited pages"
+msgstr "Придвижване през посетените страници"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5744
+msgid "Previous"
+msgstr "Предишна"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5749
+msgid "Next"
+msgstr "Следваща"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5753
+msgid "Zoom In"
+msgstr "Увеличаване"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5757
+msgid "Zoom Out"
+msgstr "Намаляване"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5765
+msgid "Fit Width"
+msgstr "Напасване по широчина"
+
+#: ../shell/ev-window.c:5910 ../shell/ev-window.c:5927
+msgid "Unable to launch external application."
+msgstr "Неуспех при отварянето на външна програма"
+
+#: ../shell/ev-window.c:5984
+msgid "Unable to open external link"
+msgstr "Неуспех при отварянето на външна връзка"
+
+#: ../shell/ev-window.c:6151
+msgid "Couldn't find appropriate format to save image"
+msgstr ""
+"Неуспех при намирането на подходящ формат за запазване на изображението"
+
+#: ../shell/ev-window.c:6193
+msgid "The image could not be saved."
+msgstr "Неуспех при запазването на изображението."
+
+#: ../shell/ev-window.c:6225
+msgid "Save Image"
+msgstr "Запазване на изображение"
+
+#: ../shell/ev-window.c:6353
+msgid "Unable to open attachment"
+msgstr "Неуспех при отварянето на прикрепения файл"
+
+#: ../shell/ev-window.c:6406
+msgid "The attachment could not be saved."
+msgstr "Прикрепеният файл не може да бъде запазен."
+
+#: ../shell/ev-window.c:6451
+msgid "Save Attachment"
+msgstr "Запазване на прикрепения файл"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — изисква се парола"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "По разширение"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Преглед на документи"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Текст за страница."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "СТРАНИЦА"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Текст за номер на страница."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "НОМЕР"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Пускане на Evince в режим цял екран"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Пускане на Evince в режим на презентация"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Пускане на Evince за преглед"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Търсене на дума или фраза в документа"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "НИЗ"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[ФАЙЛ…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Налични булеви опции — „true“ включва създаването на мини изображения, а "
+"„false“ го изключва"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Мини изображения за документите от вид PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Команда за създаване на мини изображения в документите от вид PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Валидна команда заедно с аргументите си за създаването на мини изображения "
+"от документи от вид PDF. За повече информация прегледайте документацията на "
+"Caja за мини изображенията."
diff --git a/po/bn.po b/po/bn.po
new file mode 100644
index 00000000..9d78966c
--- /dev/null
+++ b/po/bn.po
@@ -0,0 +1,1813 @@
+# Bangla translation of Evince.
+# Copyright (C) 1996-2006 The Evince authors.
+# This file is distributed under the same license as the Evince package.
+# Progga <[email protected]>, 2005-2006.
+# Jamil Ahmed <[email protected]>, 2006
+# Khandakar Mujahidul Islam <[email protected]>, 2006
+# Maruf Ovee <[email protected]>, 2009.
+# Sadia Afroz <[email protected]>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: bn\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-02-24 17:13+0000\n"
+"PO-Revision-Date: 2010-03-25 18:02+0600\n"
+"Last-Translator: Sadia Afroz <[email protected]>\n"
+"Language-Team: Bengali <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "কমিক বই ডিকম্প্রেস করার জন্য কমান্ড “%1$s” চালু করতে ত্রুটি হয়েছে: %2$s"
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "কমান্ড “%s\" কমিক বই ডিকম্প্রেস করতে ব্যর্থ হয়েছে।"
+
+#: ../backend/comics/comics-document.c:183
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "কমান্ড “%s\" স্বাভাবিকভাবে শেষ হয়নি।"
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "একটি MIME ধরনের কমিক বই নয়: %s"
+
+# Translated by sadia
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "এ ধরনের কমিক বই ডিকম্প্রেস করার জন্য উপযুক্ত কমান্ড খুঁজে পাওয়া যায়নি "
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "অজানা MIME-এর ধরন"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "ত্রুটিপূর্ণ ফাইল"
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "%s আর্কাইভে কোনো ফাইল পাওয়া যায় নি"
+
+#: ../backend/comics/comics-document.c:474
+#, c-format
+msgid "No images found in archive %s"
+msgstr "%s আর্কাইভে কোন ছবি পাওয়া যায় নি"
+
+#: ../backend/comics/comics-document.c:718
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "“%s” মুছে ফেলার সময় একটি ত্রুটি ছিল।"
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr "ত্রুটি %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "কমিক-এর বই"
+
+#: ../backend/djvu/djvu-document.c:173
+#| msgid "DVI document has incorrect format"
+msgid "DjVu document has incorrect format"
+msgstr "DjVu নথিতে ভুল বিন্যাস রয়েছে"
+
+#: ../backend/djvu/djvu-document.c:250
+#| msgid ""
+#| "The document is composed of several files. One or more of such files "
+#| "cannot be accessed."
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"এই নথিটি একাধিক ফাইল দিয়ে গঠিত। এগুলোর এক বা একাধিক ফাইলে প্রবেশ করা "
+"যাচ্ছেনা।"
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+#| msgid "Djvu Documents"
+msgid "DjVu Documents"
+msgstr "Djvu নথি"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "ত্রুটিপূর্ণ DVI নথি"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI নথি"
+
+# Translated by sadia
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr "এই কাজটি সর্বজনীন ডোমেইনের অধীনে"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "হ্যাঁ"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "না"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "ধরন ১"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "ধরন ১C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "ধরন ৩"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "ধরন ১ (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "ধরন ১C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "অজানা ফন্টের ধরন"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "নামহীন"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "সন্নিবেশিত সাবসেট"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "সন্নিবেশিত"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "সন্নিবেশিত নয়"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF নথি"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "অকার্যকর নথি"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "ইমপ্রেস স্লাইড"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "কোনো ত্রুটি নেই"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "পর্যাপ্ত মেমরি নেই"
+
+#: ../backend/impress/zip.c:59
+#| msgid "Cannot find zip signature"
+msgid "Cannot find ZIP signature"
+msgstr "ZIP স্বাক্ষর পাওয়া যাচ্ছেনা"
+
+#: ../backend/impress/zip.c:62
+#| msgid "Invalid zip file"
+msgid "Invalid ZIP file"
+msgstr "অকার্যকর ZIP ফাইল"
+
+#: ../backend/impress/zip.c:65
+#| msgid "Multi file zips are not supported"
+msgid "Multi file ZIPs are not supported"
+msgstr "একাধিক ফাইল ZIP করা সমর্থিত নয়"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "ফাইল খুলতে ব্যর্থ"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "ফাইল থেকে ডাটা পড়া যায়নি"
+
+#: ../backend/impress/zip.c:74
+#| msgid "Cannot find file in the zip archive"
+msgid "Cannot find file in the ZIP archive"
+msgstr "ZIP আর্কাইভে ফাইল খুঁজে পাওয়া যাচ্ছেনা"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "অজানা ত্রুটি"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "“%s” নথি লোড করতে ব্যর্থ"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "“%s” নথি সংরক্ষণ করতে ব্যর্থ"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript নথি"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "সংযুক্তি “%1$s” সংরক্ষণ করতে ব্যর্থ: %2$s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "সংযুক্তি “%1$s” খুলতে ব্যর্থ: %2$s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "সংযুক্তি “%s” খুলতে ব্যর্থ"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "ফাইল ধরন %1$s (%2$s) সমর্থিত নয়"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "সকল নথি"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "সকল ফাইল"
+
+# Translated by sadia
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "অস্থায়ী ফাইল তৈরি করতে ব্যর্থ: %s"
+
+# Translated by sadia
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "অস্থায়ী ডিরেক্টরী তৈরি করতে ব্যর্থ: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "ফাইলটি একটি বৈধ .desktop file নয়"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "শনাক্ত করা হয়নি এমন ডেস্কটপ ফাইল সংস্করণ '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s আরম্ভ হচ্ছে"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "অ্যাপ্লিকেশন কমান্ড লাইনে নথি গ্রহণ করেনা"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "শনাক্ত করা হয়নি এমন চালু করার অপশন: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "একটি 'Type=Link' ডেস্কটপ এন্ট্রিতে নথি URI পাঠানো যায়নি"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "চালু করা যায় এমন আইটেম নয়"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "সেশন ব্যবস্থাপকের সাথে সংযোগ বিছিন্ন করুন"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "সংরক্ষিত কনফিগারেশন ধারণকারী ফাইল সুনির্দিষ্টভাবে উল্লেখ করুন"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "সেশন ব্যবস্থাপনা ID সুনির্দিষ্টভাবে উল্লেখ করুন"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "সেশন ব্যবস্থাপনা অপশন:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "সেশন ব্যবস্থাপনা অপশন দেখান"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s” প্রদর্শন করুন"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "টুল-বারের মধ্যে স্থান পরিবর্তন করুন (_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "টুল-বারের মধ্যে নির্বাচিত বস্তুর স্থান পরিবর্তন করুন"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "টুলবার থেকে মুছে ফেলুন (_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "টুল-বার থেকে নির্বাচিত বস্তু মুছে ফেলুন"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "টুলবার মুছে ফেলুন (_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "নির্বাচিত টুলবার মুছে ফেলুন"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "বিভাজক"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+msgid "Running in presentation mode"
+msgstr "উপস্থাপনা মোডে চলছে"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5329
+msgid "Best Fit"
+msgstr "সেরা আকার"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "পৃষ্ঠার প্রস্থ"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "৫০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "৭০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "৮৫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "১০০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "১২৫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "১৫০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "১৭৫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "২০০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "৩০০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "৪০০%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4193
+#: ../shell/ev-window-title.c:149 ../shell/main.c:282
+#, c-format
+msgid "Document Viewer"
+msgstr "নথি প্রদর্শক"
+
+#: ../data/evince.desktop.in.in.h:2
+#| msgid "View multipage documents"
+msgid "View multi-page documents"
+msgstr "বহুপৃষ্ঠা সম্বলিত নথি প্রদর্শন"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "নথিতে আরোপিত নিষেধাজ্ঞা অগ্রাহ্য করুন"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "নথিতে আরোপিত নিষেধাজ্ঞা, যেমন কপি বা মুদ্রণের উপর, অগ্রাহ্য করুন"
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "অস্থায়ী ফাইল মুছে ফেলুন"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "সেটিং ফাইল মুদ্রণ করুন"
+
+#: ../previewer/ev-previewer.c:143 ../previewer/ev-previewer.c:177
+msgid "MATE Document Previewer"
+msgstr "MATE নথি প্রদর্শক"
+
+#: ../previewer/ev-previewer-window.c:90 ../shell/ev-window.c:3005
+msgid "Failed to print document"
+msgstr "নথি মুদ্রণ করতে ব্যর্থ"
+
+#: ../previewer/ev-previewer-window.c:204
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "নির্বাচিত মুদ্রণযন্ত্র '%s' খুঁজে পাওয়া যায়নি"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:248 ../shell/ev-window.c:5078
+msgid "_Previous Page"
+msgstr "পূর্ববর্তী পৃষ্ঠা (_P)"
+
+#: ../previewer/ev-previewer-window.c:249 ../shell/ev-window.c:5079
+msgid "Go to the previous page"
+msgstr "পূর্ববর্তী পৃষ্ঠায় যান"
+
+#: ../previewer/ev-previewer-window.c:251 ../shell/ev-window.c:5081
+msgid "_Next Page"
+msgstr "পরবর্তী পৃষ্ঠা (_N)"
+
+#: ../previewer/ev-previewer-window.c:252 ../shell/ev-window.c:5082
+msgid "Go to the next page"
+msgstr "পরবর্তী পৃষ্ঠায় যান"
+
+#: ../previewer/ev-previewer-window.c:255 ../shell/ev-window.c:5065
+msgid "Enlarge the document"
+msgstr "নথি বিবর্ধিত করুন"
+
+#: ../previewer/ev-previewer-window.c:258 ../shell/ev-window.c:5068
+msgid "Shrink the document"
+msgstr "নথি সঙ্কোচন করুন"
+
+#: ../previewer/ev-previewer-window.c:261 ../libview/ev-print-operation.c:1315
+msgid "Print"
+msgstr "মুদ্রণ"
+
+#: ../previewer/ev-previewer-window.c:262 ../shell/ev-window.c:5036
+msgid "Print this document"
+msgstr "এই ডকুমেন্টটি মুদ্রণ করুন"
+
+#: ../previewer/ev-previewer-window.c:268 ../shell/ev-window.c:5180
+msgid "_Best Fit"
+msgstr "সেরা মাপসইকরণ (_B)"
+
+#: ../previewer/ev-previewer-window.c:269 ../shell/ev-window.c:5181
+msgid "Make the current document fill the window"
+msgstr "বর্তমান ডকুমেন্ট দিয়ে সম্পূর্ণ উইন্ডো দখল করো"
+
+#: ../previewer/ev-previewer-window.c:271 ../shell/ev-window.c:5183
+msgid "Fit Page _Width"
+msgstr "পৃষ্ঠার প্রস্থের মাপসইকরণ (_W)"
+
+#: ../previewer/ev-previewer-window.c:272 ../shell/ev-window.c:5184
+msgid "Make the current document fill the window width"
+msgstr "বর্তমান নথিটি উইন্ডোর সম্পূর্ণ প্রস্থ জুড়ে থাকবে "
+
+#: ../previewer/ev-previewer-window.c:455 ../shell/ev-window.c:5251
+msgid "Page"
+msgstr "পৃষ্ঠা"
+
+#: ../previewer/ev-previewer-window.c:456 ../shell/ev-window.c:5252
+msgid "Select Page"
+msgstr "পৃষ্ঠা নির্বাচন করুন"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "নথি"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "শিরোনাম:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "অবস্থান:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "বিষয়:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "লেখক:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "মূলশব্দ:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "প্রস্তুতকারক:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "তৈরিকারক:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "তৈরি করা হয়েছে:"
+
+# FIXME
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "পরিবর্তিত:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "পৃষ্ঠার সংখ্যা:"
+
+# FIXME
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "সেরা-অনুকূলকৃত:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "বিন্যাস:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "নিরাপত্তা:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "কাগজের আকার:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1896
+msgid "None"
+msgstr "একটিও নয়"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "ডিফল্ট:মিমি"
+
+#: ../properties/ev-properties-view.c:284
+#| msgid "%.0f x %.0f mm"
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:288
+#| msgid "%.2f x %.2f inch"
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%1$s, লম্বালম্বি (%2$s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%1$s, আড়াআড়ি (%2$s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%2$d এর %1$d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "%d এর"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:341
+#| msgid "Preparing to print ..."
+msgid "Preparing to print…"
+msgstr "মুদ্রণ করার জন্য প্রস্তুত করা হচ্ছে…"
+
+#: ../libview/ev-print-operation.c:343
+#| msgid "Finishing..."
+msgid "Finishing…"
+msgstr "শেষ করা হচ্ছে…"
+
+#: ../libview/ev-print-operation.c:345
+#| msgid "Printing page %d of %d..."
+msgid "Printing page %d of %d…"
+msgstr "%1$d-টির %2$d টি পৃষ্ঠা মুদ্রণ করা হচ্ছে…"
+
+#: ../libview/ev-print-operation.c:1169
+msgid "Printing is not supported on this printer."
+msgstr "এই প্রিন্টারে মুদ্রণের ব্যবস্থা নেই।"
+
+#: ../libview/ev-print-operation.c:1234
+msgid "Invalid page selection"
+msgstr "অকার্যকর পৃষ্ঠা নির্বাচন"
+
+#: ../libview/ev-print-operation.c:1235
+msgid "Warning"
+msgstr "সতর্কতা"
+
+#: ../libview/ev-print-operation.c:1237
+#| msgid "Your print range selection does not include any page"
+msgid "Your print range selection does not include any pages"
+msgstr "আপনার মুদ্রণ পরিসর নির্বাচন কোনো পৃষ্ঠা অন্তর্ভুক্ত করেনা"
+
+#: ../libview/ev-print-operation.c:1891
+msgid "Page Scaling:"
+msgstr "পৃষ্ঠার আকার পরিবর্তন:"
+
+#: ../libview/ev-print-operation.c:1897
+msgid "Shrink to Printable Area"
+msgstr "মুদ্রণযোগ্য ক্ষেত্রটুকুতে সংকুচিত করা হবে"
+
+#: ../libview/ev-print-operation.c:1898
+msgid "Fit to Printable Area"
+msgstr "মুদ্রণযোগ্য ক্ষেত্রটুকুতে মানানসই করা হবে"
+
+#: ../libview/ev-print-operation.c:1901
+#| msgid ""
+#| "Scale document pages to fit the selected printer page. Select from one of "
+#| "the following:\n"
+#| "\n"
+#| "• \"None\": No page scaling is performed.\n"
+#| "\n"
+#| "• \"Shrink to Printable Area\": Document pages larger than the printable "
+#| "area are reduced fit the printable area of the printer page.\n"
+#| "\n"
+#| "• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+#| "required to fit the printable area of the printer page.\n"
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"নির্বাচিত মুদ্রণ পৃষ্ঠার সাথে মানানসই করার জন্য নথি পৃষ্ঠার আকার পরিবর্তন করুন। নিম্নে "
+"উল্লিখিত একটি নির্বাচন করুন:\n"
+"\n"
+"• \"None\": পৃষ্ঠার আকার পরিবর্তন করা হয়নি।\n"
+"\n"
+"• \"Shrink to Printable Area\": মুদ্রণযোগ্য ক্ষেত্রের চাইতে বড় নথি পৃষ্ঠার আকার "
+"কমানো হয় যাতে মুদ্রণ পৃষ্ঠার মুদ্রণযোগ্য ক্ষেত্রের সাথে মানানসই হয়।\n"
+"\n"
+"• \"Fit to Printable Area\": মুদ্রণ পৃষ্ঠার মুদ্রণযোগ্য ক্ষেত্রের সাথে মানানসই করার "
+"জন্য নথি পৃষ্ঠাকে প্রয়োজন অনুযায়ী বর্ধিত বা হ্রাস করা হয়।\n"
+
+#: ../libview/ev-print-operation.c:1913
+msgid "Auto Rotate and Center"
+msgstr "স্বয়ংক্রিয়ভাবে আবর্তন ও কেন্দ্র"
+
+#: ../libview/ev-print-operation.c:1916
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"প্রতিটি নথি পৃষ্ঠার স্থিতিবিন্যাস মিলানোর জন্য প্রতিটি মুদ্রণ পৃষ্ঠার স্থিতিবিন্যাস আবর্তন "
+"করা হবে। নথি পৃষ্ঠাগুলো মুদ্রণ পৃষ্ঠার কেন্দ্রস্থিত করা হবে।"
+
+#: ../libview/ev-print-operation.c:1921
+msgid "Select page size using document page size"
+msgstr "নথি পৃষ্ঠার আকার ব্যবহার করে পৃষ্ঠার আকার নির্বাচন করুন"
+
+#: ../libview/ev-print-operation.c:1923
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"সক্রিয় করা হলে, প্রতিটি পৃষ্ঠা একই আকারের কাগজে নথি পৃষ্ঠা হিসেবে মুদ্রণ করা হবে।"
+
+#: ../libview/ev-print-operation.c:2005
+msgid "Page Handling"
+msgstr "পৃষ্ঠা হ্যান্ডলিং"
+
+#: ../libview/ev-jobs.c:1434
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "পৃষ্ঠা “%1$d” মুদ্রণ করতে ব্যর্থ: %2$s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "উপরে স্ক্রল করুন"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "নিচে স্ক্রল করুন"
+
+# FIXME: দৃশ্য
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "দৃশ্যকে উপরে স্ক্রল করুন"
+
+# FIXME: দৃশ্য
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "দৃশ্যকে নিচে স্ক্রল করুন"
+
+# FIXME: দৃশ্য
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "নথি ভিউ"
+
+#: ../libview/ev-view-presentation.c:669
+msgid "Jump to page:"
+msgstr "পৃষ্ঠায় যান:"
+
+#: ../libview/ev-view-presentation.c:979
+msgid "End of presentation. Click to exit."
+msgstr "উপস্থাপনার সমাপ্তি। প্রস্থান-এ ক্লিক করুন।"
+
+#: ../libview/ev-view.c:1724
+msgid "Go to first page"
+msgstr "প্রথম পৃষ্ঠায় যান"
+
+#: ../libview/ev-view.c:1726
+msgid "Go to previous page"
+msgstr "পূর্ববর্তী পৃষ্ঠায় যান"
+
+#: ../libview/ev-view.c:1728
+msgid "Go to next page"
+msgstr "পরবর্তী পৃষ্ঠায় যান"
+
+#: ../libview/ev-view.c:1730
+msgid "Go to last page"
+msgstr "শেষ পৃষ্ঠায় যান"
+
+#: ../libview/ev-view.c:1732
+msgid "Go to page"
+msgstr "পৃষ্ঠায় যান"
+
+#: ../libview/ev-view.c:1734
+msgid "Find"
+msgstr "খুঁজুন"
+
+#: ../libview/ev-view.c:1762
+#, c-format
+msgid "Go to page %s"
+msgstr "%s পৃষ্ঠায় যান"
+
+#: ../libview/ev-view.c:1768
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "ফাইল %2$s এর, “%1$s” এ যান"
+
+#: ../libview/ev-view.c:1771
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” ফাইলে যান"
+
+#: ../libview/ev-view.c:1779
+#, c-format
+msgid "Launch %s"
+msgstr "%s আরম্ভ করুন"
+
+#: ../libview/ev-view.c:3923 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+#| msgid "Loading..."
+msgid "Loading…"
+msgstr "লোড করা হচ্ছে…"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "খুঁজুন:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5053
+msgid "Find Pre_vious"
+msgstr "পূর্ববর্তীটি খুঁজুন"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "অনুসন্ধান ষ্ট্রিং এর পূর্ববর্তী উপস্থিতি খুঁজুন"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5051
+msgid "Find Ne_xt"
+msgstr "পরবর্তীটি খুঁজুন (_x)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "অনুসন্ধানের জন্য চিহ্নিত পংক্তির পরবর্তী উপস্থিতি অনুসন্ধান করো"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "অক্ষরের ছাঁদ সংবেদনশীল (_a)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "অক্ষরের ছাঁদ সংবেদনশীল সন্ধান টগল করুন"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s নথির পাসওয়ার্ড"
+
+# Translated by sadia
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "%s রূপান্তর করা হচ্ছে"
+
+# Translated by sadia
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d ডকুমেন্টের %d রূপান্তর করা হয়েছে"
+
+# Translated by sadia
+#: ../shell/ev-convert-metadata.c:164 ../shell/ev-convert-metadata.c:179
+msgid "Converting metadata"
+msgstr "মেটাডাটা রূপান্তর করা হচ্ছে"
+
+# Translated by sadia
+#: ../shell/ev-convert-metadata.c:185
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"এভিন্সের ব্যবহৃত মেটাডাটা বিন্যাস পরিবর্তন করা হয়েছে, এজন্য এটার অভিবাসন প্রয়োজন। "
+"অভিবাসন প্রক্রিয়া বাতিল করা হলে মেটাডাটা সংগ্রহশালা কাজ করবে না।"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "একটি সাম্প্রতিক ব্যবহৃত নথি খুলুন"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"এই নথিটি আটকানো রয়েছে এবং শুধুমাত্র সঠিক পাসওয়ার্ড প্রদানের পরই এটি পড়া যাবে।"
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "নথি মুক্ত করুন (_U)"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "পাসওয়ার্ড প্রবেশ করান"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "পাসওয়ার্ড প্রয়োজন"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "“%s” নথি বর্তমানে আটকানো আছে ও মুক্ত করার জন্য পাসওয়ার্ড উল্লেখ করা আবশ্যক।"
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "পাসওয়ার্ড (_P):"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "তাৎক্ষনিকভাবে পাসওয়ার্ড ভুলে যান (_i)"
+
+#: ../shell/ev-password-view.c:377
+#| msgid "Remember password until you _logout"
+msgid "Remember password until you _log out"
+msgstr "লগআউট না করা পর্যন্ত পাসওয়ার্ড মনে রাখা হবে (_l)"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "সবসময় মনে রাখুন (_f)"
+
+#: ../shell/ev-properties-dialog.c:58
+msgid "Properties"
+msgstr "বৈশিষ্ট্য"
+
+#: ../shell/ev-properties-dialog.c:92
+msgid "General"
+msgstr "সাধারণ"
+
+#: ../shell/ev-properties-dialog.c:102
+msgid "Fonts"
+msgstr "ফন্ট"
+
+# Translated by sadia
+#: ../shell/ev-properties-dialog.c:115
+msgid "Document License"
+msgstr "ডকুমেন্ট লাইসেন্স"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "ফন্ট"
+
+#: ../shell/ev-properties-fonts.c:162
+#| msgid "Gathering font information... %3d%%"
+msgid "Gathering font information… %3d%%"
+msgstr "ফন্ট সংক্রান্ত তথ্য সংগ্রহ করা হচ্ছে… %3d%%"
+
+# Translated by sadia
+#: ../shell/ev-properties-license.c:138
+msgid "Usage terms"
+msgstr "ব্যবহার শর্তসমূহ"
+
+# Translated by sadia
+#: ../shell/ev-properties-license.c:144
+msgid "Text License"
+msgstr "পাঠ্য লাইসেন্স"
+
+# Translated by sadia
+#: ../shell/ev-properties-license.c:150
+msgid "Further Information"
+msgstr "আরও তথ্য"
+
+#: ../shell/ev-sidebar-attachments.c:712
+msgid "Attachments"
+msgstr "সংযুক্তি"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "স্তর"
+
+#: ../shell/ev-sidebar-links.c:335
+#| msgid "Print"
+msgid "Print…"
+msgstr "মুদ্রণ…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "সূচিপত্র"
+
+#: ../shell/ev-sidebar-thumbnails.c:956
+msgid "Thumbnails"
+msgstr "থাম্বনেইল"
+
+#: ../shell/ev-window.c:839
+#| msgid "Page %s - %s"
+msgid "Page %s — %s"
+msgstr "পৃষ্ঠা %1$s — %2$s"
+
+#: ../shell/ev-window.c:841
+#, c-format
+msgid "Page %s"
+msgstr "পৃষ্ঠা %s"
+
+#: ../shell/ev-window.c:1285
+msgid "The document contains no pages"
+msgstr "নথিটি কোনো পৃষ্ঠা ধারণ করেনা"
+
+#: ../shell/ev-window.c:1288
+msgid "The document contains only empty pages"
+msgstr "নথিটি শুধুমাত্র ফাঁকা পৃষ্ঠা ধারণ করে"
+
+#: ../shell/ev-window.c:1482 ../shell/ev-window.c:1648
+msgid "Unable to open document"
+msgstr "নথি খোলা যায় নি"
+
+#: ../shell/ev-window.c:1619
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "“%s” থেকে নথি লোড করা হচ্ছে"
+
+#: ../shell/ev-window.c:1761 ../shell/ev-window.c:2038
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "নথি ডাউনলোড হচ্ছে (%d%%)"
+
+# Translated by sadia
+#: ../shell/ev-window.c:1794
+msgid "Failed to load remote file."
+msgstr "দূরবর্তী ফাইল লোড করতে ব্যর্থ।"
+
+#: ../shell/ev-window.c:1982
+#, c-format
+msgid "Reloading document from %s"
+msgstr "“%s” থেকে নথি পুনরায় লোড করা হচ্ছে"
+
+#: ../shell/ev-window.c:2014
+msgid "Failed to reload document."
+msgstr "নথি পুনরায় লোড করতে ব্যর্থ"
+
+#: ../shell/ev-window.c:2169
+msgid "Open Document"
+msgstr "নথি খুলুন"
+
+#: ../shell/ev-window.c:2433
+#, c-format
+msgid "Saving document to %s"
+msgstr "%s এ নথি সংরক্ষণ করা হচ্ছে"
+
+#: ../shell/ev-window.c:2436
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "%s এ সংযুক্তি সংরক্ষণ করা হচ্ছে"
+
+#: ../shell/ev-window.c:2439
+#, c-format
+msgid "Saving image to %s"
+msgstr "%s এ চিত্র সংরক্ষণ করা হচ্ছে"
+
+#: ../shell/ev-window.c:2483 ../shell/ev-window.c:2583
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "“%s”রূপে ফাইল সংরক্ষণ করতে ব্যর্থ।"
+
+#: ../shell/ev-window.c:2514
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "নথি আপলোড করা হচ্ছে (%d%%)"
+
+#: ../shell/ev-window.c:2518
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "সংযুক্তি আপলোড করা হচ্ছে (%d%%)"
+
+#: ../shell/ev-window.c:2522
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "চিত্র আপলোড করা হচ্ছে (%d%%)"
+
+#: ../shell/ev-window.c:2644
+msgid "Save a Copy"
+msgstr "একটি প্রতিলিপি সংরক্ষণ করুন"
+
+#: ../shell/ev-window.c:2949
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "কিউতে %d অপেক্ষমান কাজ"
+
+#: ../shell/ev-window.c:3062
+#, c-format
+msgid "Printing job “%s”"
+msgstr "“%s” মুদ্রণ কাজ"
+
+#: ../shell/ev-window.c:3265
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "বন্ধ করার আগে মুদ্রণ কাজ “%s” শেষ না হওয়া পর্যন্ত কি অপেক্ষা করবেন?"
+
+#: ../shell/ev-window.c:3268
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"এখানে %d মুদ্রণ কাজ সক্রিয়, বন্ধ করার আগে মুদ্রণ কাজ শেষ না হওয়া পর্যন্ত কি অপেক্ষা "
+"করবেন?"
+
+#: ../shell/ev-window.c:3280
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "যদি আপনি উইন্ডো বন্ধ করেন, অপেক্ষমান মুদ্রণ কাজ মুদ্রিত হবেনা।"
+
+#: ../shell/ev-window.c:3284
+msgid "Cancel _print and Close"
+msgstr "মুদ্রণ বাতিল করে বন্ধ করুন (_p)"
+
+#: ../shell/ev-window.c:3288
+msgid "Close _after Printing"
+msgstr "মুদ্রণের পরে বন্ধ করুন (_a)"
+
+#: ../shell/ev-window.c:3846
+msgid "Toolbar Editor"
+msgstr "টুলবার সম্পাদক"
+
+#: ../shell/ev-window.c:3978
+msgid "There was an error displaying help"
+msgstr "সহায়তা প্রদর্শন করার সময় একটি ত্রুটি ছিল"
+
+#: ../shell/ev-window.c:4189
+#| msgid ""
+#| "Document Viewer.\n"
+#| "Using poppler %s (%s)"
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr "নথি প্রদর্শক\n%1$s (%2$s) ব্যবহার করা হচ্ছে"
+
+#: ../shell/ev-window.c:4220
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"এভিন্স একটি মুক্ত সফটওয়্যার; মুক্ত সফটওয়্যার ফাউন্ডেশন কর্তৃক প্রকাশিত GNU সাধারণ "
+"পাবলিক লাইসেন্সের শর্ত মেনে আপনি একে পুনঃবিতরণ এবং/অথবা পরিবর্তন করতে পারেন; \n"
+"এক্ষেত্রে উল্লিখিত লাইসেন্সের ২য় বা তার পরবর্তী কোন সংস্করণ (আপনার ইচ্ছানুসারে) "
+"অনুসরণ করতে হবে।\n"
+
+#: ../shell/ev-window.c:4224
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"এভিন্সকে এই আশায় বিতরণ করা হচ্ছে যে এটি আপনার উপকারে আসবে, তবে এ ব্যাপারে কোন "
+"নিশ্চয়তা দেওয়া হচ্ছে না; এক্ষেত্রে এমনকি এর বিক্রয়যোগ্যতা বা নির্দিষ্ট কোন কাজের "
+"উপযোগীতা সম্পর্কেও কোন নিশ্চয়তাও দেওয়া হচ্ছে না। বিস্তারিত জানার জন্য GNU সাধারণ "
+"পাবলিক লাইসেন্স দেখুন।\n"
+
+#: ../shell/ev-window.c:4228
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"এভিন্স-এর সাথে আপনার GNU সাধারণ পাবলিক লাইসেন্সের একটি অনুলিপি \n"
+"পাওয়ার কথা; না পেয়ে থাকলে এই ঠিকানায় লিখুন - Free Software Foundation, Inc., "
+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:4253
+msgid "Evince"
+msgstr "এভিন্স"
+
+#: ../shell/ev-window.c:4256
+msgid "© 1996–2009 The Evince authors"
+msgstr "© ১৯৯৬-২০০৯ এভিন্স-এর লেখকগণ"
+
+#: ../shell/ev-window.c:4262
+msgid "translator-credits"
+msgstr ""
+"অঙ্কুর প্রকল্পের পক্ষে, প্রজ্ঞা [ [email protected] ]\n"
+"জামিল আহমেদ <[email protected]>\n"
+"খন্দকার মুজাহিদুল ইসলাম <[email protected]>\n"
+"মারুফ অভি <[email protected]>\n"
+"সাদিয়া আফরোজ <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4531
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "এই পৃষ্ঠায় %dটি মিল পাওয়া গিয়েছে"
+
+#: ../shell/ev-window.c:4539
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%%টি খুঁজতে বাকি আছে"
+
+#: ../shell/ev-window.c:5016
+msgid "_File"
+msgstr "ফাইল (_F)"
+
+#: ../shell/ev-window.c:5017
+msgid "_Edit"
+msgstr "সম্পাদনা (_E)"
+
+#: ../shell/ev-window.c:5018
+msgid "_View"
+msgstr "দৃশ্য (_V)"
+
+#: ../shell/ev-window.c:5019
+msgid "_Go"
+msgstr "যান (_G)"
+
+#: ../shell/ev-window.c:5020
+msgid "_Help"
+msgstr "সহায়িকা (_H)"
+
+#. File menu
+#: ../shell/ev-window.c:5023 ../shell/ev-window.c:5291
+#| msgid "_Open..."
+msgid "_Open…"
+msgstr "খুলুন… (_O)"
+
+#: ../shell/ev-window.c:5024 ../shell/ev-window.c:5292
+msgid "Open an existing document"
+msgstr "বিদ্যমান কোন নথি খুলুন"
+
+#: ../shell/ev-window.c:5026
+msgid "Op_en a Copy"
+msgstr "একটি অনুলিপি খুলুন (_e)"
+
+#: ../shell/ev-window.c:5027
+msgid "Open a copy of the current document in a new window"
+msgstr "একটি নতুন উইন্ডোতে বর্তমান নথির একটি অনুলিপি খুলুন"
+
+#: ../shell/ev-window.c:5029
+#| msgid "Save a Copy"
+msgid "_Save a Copy…"
+msgstr "একটি অনুলিপি সংরক্ষণ করুন… (_S)"
+
+#: ../shell/ev-window.c:5030
+msgid "Save a copy of the current document"
+msgstr "বর্তমান নথির একটি অনুলিপি সংরক্ষণ করুন"
+
+#: ../shell/ev-window.c:5032
+#| msgid "Page Set_up..."
+msgid "Page Set_up…"
+msgstr "পৃষ্ঠা সেটআপ… (_u)"
+
+#: ../shell/ev-window.c:5033
+#| msgid "Setup the page settings for printing"
+msgid "Set up the page settings for printing"
+msgstr "মুদ্রণের জন্য পৃষ্ঠার সেটিংস সেটআপ করুন"
+
+#: ../shell/ev-window.c:5035
+#| msgid "Print"
+msgid "_Print…"
+msgstr "মুদ্রণ… (_P)"
+
+#: ../shell/ev-window.c:5038
+msgid "P_roperties"
+msgstr "বৈশিষ্ট্য (_r)"
+
+#: ../shell/ev-window.c:5046
+msgid "Select _All"
+msgstr "সবকিছু নির্বাচন করুন (_A)"
+
+#: ../shell/ev-window.c:5048
+#| msgid "Find"
+msgid "_Find…"
+msgstr "খুঁজুন… (_F)"
+
+#: ../shell/ev-window.c:5049
+msgid "Find a word or phrase in the document"
+msgstr "নথির মধ্যে কোন একটি শব্দ বা শব্দসমষ্টি খুঁজুন"
+
+#: ../shell/ev-window.c:5055
+msgid "T_oolbar"
+msgstr "টুলবার (_o)"
+
+#: ../shell/ev-window.c:5057
+msgid "Rotate _Left"
+msgstr "বামে ঘুরান (_L)"
+
+#: ../shell/ev-window.c:5059
+msgid "Rotate _Right"
+msgstr "ডানে ঘুরান (_R)"
+
+#: ../shell/ev-window.c:5070
+msgid "_Reload"
+msgstr "পুনরায় লোড করুন (_R)"
+
+#: ../shell/ev-window.c:5071
+msgid "Reload the document"
+msgstr "নথিটি পুনরায় লোড করুন"
+
+#: ../shell/ev-window.c:5074
+msgid "Auto_scroll"
+msgstr "স্বয়ংক্রিয়_স্ক্রুল"
+
+#: ../shell/ev-window.c:5084
+msgid "_First Page"
+msgstr "প্রথম পৃষ্ঠা (_F)"
+
+#: ../shell/ev-window.c:5085
+msgid "Go to the first page"
+msgstr "প্রথম পৃষ্ঠায় যান"
+
+#: ../shell/ev-window.c:5087
+msgid "_Last Page"
+msgstr "শেষ পৃষ্ঠা (_L)"
+
+#: ../shell/ev-window.c:5088
+msgid "Go to the last page"
+msgstr "শেষ পৃষ্ঠায় যান"
+
+#. Help menu
+#: ../shell/ev-window.c:5092
+msgid "_Contents"
+msgstr "সূচি (_C)"
+
+#: ../shell/ev-window.c:5095
+msgid "_About"
+msgstr "পরিচিতি (_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5099
+msgid "Leave Fullscreen"
+msgstr "পূর্ণপর্দা ত্যাগ করুন"
+
+#: ../shell/ev-window.c:5100
+msgid "Leave fullscreen mode"
+msgstr "পূর্ণপর্দা মোড ত্যাগ করুন"
+
+#: ../shell/ev-window.c:5102
+msgid "Start Presentation"
+msgstr "উপস্থাপনা শুরু করুন"
+
+#: ../shell/ev-window.c:5103
+msgid "Start a presentation"
+msgstr "উপস্থাপনা শুরু করুন"
+
+#. View Menu
+#: ../shell/ev-window.c:5162
+msgid "_Toolbar"
+msgstr "টুলবার (_T)"
+
+#: ../shell/ev-window.c:5163
+msgid "Show or hide the toolbar"
+msgstr "টুলবারকে প্রদর্শন করুন বা লুকান"
+
+#: ../shell/ev-window.c:5165
+msgid "Side _Pane"
+msgstr "সাইড পেন (_P)"
+
+#: ../shell/ev-window.c:5166
+msgid "Show or hide the side pane"
+msgstr "সাইড পেনকে প্রদর্শন করুন বা লুকান"
+
+#: ../shell/ev-window.c:5168
+msgid "_Continuous"
+msgstr "অবিরাম (_C)"
+
+#: ../shell/ev-window.c:5169
+msgid "Show the entire document"
+msgstr "সম্পূর্ণ নথি প্রদর্শন করুন"
+
+#: ../shell/ev-window.c:5171
+msgid "_Dual"
+msgstr "দ্বৈত (_D)"
+
+#: ../shell/ev-window.c:5172
+msgid "Show two pages at once"
+msgstr "একত্রে দুই পৃষ্ঠা দেখান"
+
+#: ../shell/ev-window.c:5174
+msgid "_Fullscreen"
+msgstr "পূর্ণপর্দা (_F)"
+
+#: ../shell/ev-window.c:5175
+msgid "Expand the window to fill the screen"
+msgstr "সম্পূর্ণ পর্দা দখল করার জন্য উইন্ডোকে বর্ধিত করুন"
+
+#: ../shell/ev-window.c:5177
+msgid "Pre_sentation"
+msgstr "উপস্থাপনা (_s)"
+
+#: ../shell/ev-window.c:5178
+msgid "Run document as a presentation"
+msgstr "নথিকে উপস্থাপনা হিসেবে চালান"
+
+# Translated by sadia
+#: ../shell/ev-window.c:5186
+msgid "_Inverted Colors"
+msgstr "বিপরীত অবস্থায় আনা রং (_I)"
+
+# Translated by sadia
+#: ../shell/ev-window.c:5187
+msgid "Show page contents with the colors inverted"
+msgstr "বিপরীত অবস্থায় আনা রংসহ পৃষ্ঠার বিষয়বস্তু প্রদর্শন করা হবে"
+
+#. Links
+#: ../shell/ev-window.c:5195
+msgid "_Open Link"
+msgstr "লিঙ্ক খুলুন (_O)"
+
+#: ../shell/ev-window.c:5197
+msgid "_Go To"
+msgstr "এই পৃষ্ঠায় যান (_G)"
+
+#: ../shell/ev-window.c:5199
+msgid "Open in New _Window"
+msgstr "নতুন উইন্ডোতে খুলুন (_W)"
+
+#: ../shell/ev-window.c:5201
+msgid "_Copy Link Address"
+msgstr "লিঙ্ক-এর ঠিকানা কপি করুন (_C)"
+
+#: ../shell/ev-window.c:5203
+#| msgid "_Save Image As..."
+msgid "_Save Image As…"
+msgstr "নতুনভাবে ছবি সংরক্ষণ করুন… (_S)"
+
+#: ../shell/ev-window.c:5205
+msgid "Copy _Image"
+msgstr "চিত্র অনুলিপি করুন (_I)"
+
+# Translated by sadia
+#: ../shell/ev-window.c:5210
+msgid "_Open Attachment"
+msgstr "সংযুক্তি খুলুন (_O)"
+
+# Translated by sadia
+#: ../shell/ev-window.c:5212
+#| msgid "_Save Attachment As..."
+msgid "_Save Attachment As…"
+msgstr "নতুনভাবে সংযুক্তি সংরক্ষণ করুন… (_S)"
+
+#: ../shell/ev-window.c:5265
+msgid "Zoom"
+msgstr "বড় করে দেখা"
+
+#: ../shell/ev-window.c:5267
+msgid "Adjust the zoom level"
+msgstr "বড় করে দেখার মাত্রা সমন্বয় করুন"
+
+#: ../shell/ev-window.c:5277
+msgid "Navigation"
+msgstr "ন্যাভিগেশন"
+
+#: ../shell/ev-window.c:5279
+msgid "Back"
+msgstr "পিছনে"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5282
+msgid "Move across visited pages"
+msgstr "পরিদর্শিত পাতা জুড়ে সরান"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5312
+msgid "Previous"
+msgstr "পূর্ববর্তী"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5317
+msgid "Next"
+msgstr "পরবর্তী"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5321
+msgid "Zoom In"
+msgstr "বড় করে দেখা"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5325
+msgid "Zoom Out"
+msgstr "ছোট করে দেখা"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5333
+msgid "Fit Width"
+msgstr "প্রস্থ বরাবর মাপসই করুন"
+
+#: ../shell/ev-window.c:5494 ../shell/ev-window.c:5511
+msgid "Unable to launch external application."
+msgstr "বহিঃস্থ অ্যাপ্লিকেশন চালু করতে সক্ষম নয়"
+
+#: ../shell/ev-window.c:5568
+msgid "Unable to open external link"
+msgstr "বহিঃস্থ সংযোগ খুলতে পারেনি"
+
+#: ../shell/ev-window.c:5735
+msgid "Couldn't find appropriate format to save image"
+msgstr "চিত্র সংরক্ষণ করার জন্য যথাযথ বিন্যাস খুঁজে পাওয়া যায়নি"
+
+#: ../shell/ev-window.c:5777
+msgid "The image could not be saved."
+msgstr "চিত্রটি সংরক্ষণ করা যায়নি।"
+
+#: ../shell/ev-window.c:5809
+msgid "Save Image"
+msgstr "চিত্রটি সংরক্ষণ করুন"
+
+#: ../shell/ev-window.c:5876
+msgid "Unable to open attachment"
+msgstr "সংযুক্ত বস্তু খুলতে ব্যর্থ"
+
+#: ../shell/ev-window.c:5929
+msgid "The attachment could not be saved."
+msgstr "সংযুক্ত বস্তু সংরক্ষণ করতে ব্যর্থ।"
+
+#: ../shell/ev-window.c:5974
+msgid "Save Attachment"
+msgstr "সংযুক্তি সংরক্ষণ করুন"
+
+#: ../shell/ev-window-title.c:162
+#| msgid "%s - Password Required"
+msgid "%s — Password Required"
+msgstr "%s — পাসওয়ার্ড আবশ্যক"
+
+#: ../shell/ev-utils.c:315
+msgid "By extension"
+msgstr "এক্সটেনশন এর মাধ্যমে"
+
+#: ../shell/main.c:70 ../shell/main.c:246
+msgid "MATE Document Viewer"
+msgstr "MATE নথি প্রদর্শক"
+
+#: ../shell/main.c:78
+msgid "The page of the document to display."
+msgstr "নথির যে পৃষ্ঠাকে প্রদর্শন করা হবে।"
+
+#: ../shell/main.c:78
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "পূর্ণপর্দা মোডে এভিন্স চালান"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "প্রেজেন্টেশন মোডে এভিন্স চালান"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "পূর্বরূপ প্রদর্শনের মোডে evince চালানো হবে"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "নথিরর মধ্যে কোন একটি শব্দ বা শব্দসমষ্টি খুঁজুন"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:86
+#| msgid "[FILE...]"
+msgid "[FILE…]"
+msgstr "[FILE…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+#| msgid ""
+#| "Boolean options available, true enables thumbnailing and false disables "
+#| "the creation of new thumbnails"
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"বুলিয়ান অপশন বিদ্যমান: true হলে থাম্বলেইল সক্রিয় করা হবে এবং false হলে নতুন "
+"থাম্বনেইল তৈরি নিষ্ক্রিয় করা হবে"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF নথি থাম্বনেইল তৈরির প্রক্রিয়া সক্রিয় করুন"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF নথির থাম্বনেইল তৈরির কমান্ড"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+#| msgid ""
+#| "Valid command plus arguments for the PDF Document thumbnailer. See "
+#| "caja thumbnailer documentation for more information."
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF নথির থাম্বনেইলের জন্য কার্যকর কমান্ড ও কমান্ড-আর্গুমেন্ট। আরও বিস্তারিত "
+"তথ্যের জন্য নটিলাস-এর থাম্বনেইল প্রস্তুত প্রক্রিয়ার নথিটি দেখুন।"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU নথির ভুল বিন্যাস আছে"
+
+#~ msgid "Print..."
+#~ msgstr "মুদ্রণ..."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "অনুলিপি সংরক্ষণ করুন... (_S)"
+
+#~ msgid "_Print..."
+#~ msgstr "মুদ্রণ... (_P)"
+
+#~ msgid "_Find..."
+#~ msgstr "খুঁজুন... (_F)"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "ফাইল “%1$s” তৈরি করতে ব্যর্থ: %2$s"
+
+#~ msgid "Search string"
+#~ msgstr "স্ট্রিং সন্ধান করুন"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "যে স্ট্রিংটি পাওয়া যাবে, তার নাম"
+
+#~ msgid "Case sensitive"
+#~ msgstr "অক্ষরের ছাঁদ সংবেদনশীল"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "অক্ষরের ছাঁদ সংবেদনশীল সন্ধানের জন্য TRUE"
+
+#~ msgid "Highlight color"
+#~ msgstr "রং হাইলাইট করুন"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "সকল মিলের জন্য হাইলাইটের রং"
+
+#~ msgid "Current color"
+#~ msgstr "বর্তমান রং"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "বর্তমান মিলের জন্য চিহ্নিতকরণের রং"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "পূর্ববর্তী নথি কি পুনরুদ্ধার করতে চান?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "শেষবার চলার সময় ইভিন্স অপ্রত্যাশিতভাবে প্রস্থান করেছিল। আপনি খোলা নথি পুনরুদ্ধার "
+#~ "করতে পারবেন।"
+
+#~ msgid "_Don't Recover"
+#~ msgstr "পুনরুদ্ধার করবেন না (_D)"
+
+#~ msgid "_Recover"
+#~ msgstr "পুনরুদ্ধার করুন (_R)"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "ক্র্যাশ পুনরুদ্ধার"
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "“%s” symlink তৈরি করা সম্ভব হয়নি:"
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "কোনো অনুলিপি খুলতে পারেনি।"
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "MIME ধরনের ব্যবস্থাপনা করা হয়নি: “%s”"
+
+#~ msgid "Open “%s”"
+#~ msgstr "“%s” খুলুন"
+
+#~ msgid "Empty"
+#~ msgstr "ফাঁকা"
+
+#~ msgid "75%"
+#~ msgstr "৭৫%"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "কী-রিং -এ পাসওয়ার্ড সংরক্ষণ করুন"
+
+#~ msgid "File not available"
+#~ msgstr "ফাইল পাওয়া যাচ্ছে না"
+
+#~ msgid "BBox"
+#~ msgstr "বি-বক্স"
+
+#~ msgid "Letter"
+#~ msgstr "লেটার"
+
+#~ msgid "Tabloid"
+#~ msgstr "ট্যাবলয়েড"
+
+#~ msgid "Ledger"
+#~ msgstr "লেজার"
+
+#~ msgid "Legal"
+#~ msgstr "লিগাল"
+
+#~ msgid "Statement"
+#~ msgstr "স্টেটমেন্ট"
+
+#~ msgid "Executive"
+#~ msgstr "এক্সিকিউটিভ"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "ফোলিও"
+
+#~ msgid "Quarto"
+#~ msgstr "কোয়ার্টো"
+
+#~ msgid "10x14"
+#~ msgstr "১০x১৪"
+
+#~ msgid "No document loaded."
+#~ msgstr "কোন নথি লোড করা হয় নি।"
+
+#~ msgid "Broken pipe."
+#~ msgstr "ত্রুটিপূর্ণ পাইপ।"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "ইন্টারপ্রেটার ব্যর্থ হয়েছে।"
+
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "“%s” ফাইল ডিকম্প্রেস করতে ব্যর্থ:\n"
+
+#~ msgid "File is not readable."
+#~ msgstr "পড়ার অযোগ্য ফাইল।"
+
+#~ msgid "Document loaded."
+#~ msgstr "নথি লোড করা হয়েছে।"
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "“%s” ডকুমেন্ট লোড করতে ব্যর্থ। পাথের মধ্যে ঘোস্টস্ক্রিপ্ট ইন্টারপ্রেটার পাওয়া যায়নি"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "এনক্যাপসুলেটেড পোস্টস্ক্রিপ্ট"
+
+#~ msgid "PostScript"
+#~ msgstr "পোস্টস্ক্রিপ্ট"
+
+#~ msgid "Find Previous"
+#~ msgstr "পূর্ববর্তীটি খুঁজুন"
+
+#~ msgid "Find Next"
+#~ msgstr "পরবর্তীটি খুঁজুন"
+
+#~ msgid "Incorrect password"
+#~ msgstr "ভুল পাসওয়ার্ড"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "“%s” ড্রাইভার সহযোগে আপনি একটি মুদ্রণযন্ত্রে মুদ্রন করার প্রচেষ্টা করেছেন। এই "
+#~ "\"\"প্রোগ্রামের ক্ষেত্রে পোস্টস্ক্রিপ্ট প্রিন্টার ড্রাইভার আবশ্যক।"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "এভিন্স নথি প্রদর্শক"
+
+#~ msgid "_Previous"
+#~ msgstr "পূর্ববর্তী (_P)"
+
+#~ msgid "_Next"
+#~ msgstr "পরবর্তী (_N)"
+
+#~ msgid "The \"Find\" feature will not work with this document"
+#~ msgstr "এই নথিতে \"অনুসন্ধান\" প্রক্রিয়া কাজ করবে না"
+
+#~ msgid "Searching for text is only supported for PDF documents."
+#~ msgstr "টেক্সট অনুসন্ধান শুধুমাত্র PDF নথির ক্ষেত্রেই প্রযোজ্য।"
+
+#~ msgid "Not found"
+#~ msgstr "পাওয়া যায় নি"
diff --git a/po/bn_IN.po b/po/bn_IN.po
new file mode 100644
index 00000000..c7eb5ced
--- /dev/null
+++ b/po/bn_IN.po
@@ -0,0 +1,1647 @@
+# translation of bn_IN.po to Bengali INDIA
+# Bengali India translation of Evince.
+# Copyright (C) 1996-2006 The Evince authors.
+# This file is distributed under the same license as the Evince package.
+#
+# Progga <[email protected]>, 2005-2006.
+# Runa Bhattacharjee <[email protected]>, 2006.
+# Runa Bhattacharjee <[email protected]>, 2008.
+# Runa Bhattacharjee <[email protected]>, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: bn_IN\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-04-13 04:33+0000\n"
+"PO-Revision-Date: 2010-04-13 12:43+0530\n"
+"Last-Translator: Runa Bhattacharjee <[email protected]>\n"
+"Language-Team: Bengali INDIA <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"\n"
+"\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "কমিক বই ডিকম্প্রেস করার উদ্দেশ্যে “%s” কমান্ড আরম্ভ করতে সমস্যা: %s"
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "কমিক বই ডিকম্প্রেস করার উদ্দেশ্যে “%s” কমান্ড ব্যর্থ।"
+
+#: ../backend/comics/comics-document.c:183
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "“%s” কমান্ডটি সঠিকরূপে সমাপ্ত হয়নি।"
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "কমিক বইয়ের ধরনের MIME type নয়: %s"
+
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "এই প্রকৃতির কমিক বই ডিকম্প্রেস করার উদ্দেশ্যে যথাযত কমান্ড পাওয়া যায়নি"
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "অজানা MIME'র ধরন"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "ক্ষতিগ্রস্ত ফাইল"
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "আর্কাইভে কোনো ফাইল উপস্থিত নেই"
+
+#: ../backend/comics/comics-document.c:474
+#, c-format
+msgid "No images found in archive %s"
+msgstr "%s আর্কাইভে কোনো ছবি পাওয়া যায়নি"
+
+#: ../backend/comics/comics-document.c:718
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "“%s” মুছে ফেলতে সমস্যা।"
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr "ত্রুটি %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "কমিক-বই"
+
+#: ../backend/djvu/djvu-document.c:173
+#, fuzzy
+msgid "DjVu document has incorrect format"
+msgstr "DVI ডকুমেন্টের বিন্যাস সঠিক নয়"
+
+#: ../backend/djvu/djvu-document.c:250
+#, fuzzy
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"একাধিক ফাইল একত্রিত করে এই ডকুমেন্ট নির্মিত হয়েছে ও এর মধ্যে এক অথবা একাধিক ফাইল "
+"ব্যবহার করা সম্ভব নয়।"
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+#, fuzzy
+msgid "DjVu Documents"
+msgstr "Djvu ডকুমেন্ট"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI ডকুমেন্টের বিন্যাস সঠিক নয়"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI ডকুমেন্ট"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr ""
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "হ্যাঁ"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "না"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "ফন্টের ধরন অজানা"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "নামবিহীন"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "এমবেড করা সাব-সেট"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "এমবেড করা"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "এমবেড করা নয়"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF ডকুমেন্ট"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "ডকুমেন্ট বৈধ নয়"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress স্লাইড"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "ত্রুটিমুক্ত"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "পর্যাপ্ত মেমরি অনুপস্থি"
+
+#: ../backend/impress/zip.c:59
+#, fuzzy
+msgid "Cannot find ZIP signature"
+msgstr "zip স্বাক্ষর পাওয়া যায়নি"
+
+#: ../backend/impress/zip.c:62
+#, fuzzy
+msgid "Invalid ZIP file"
+msgstr "অবৈধ zip ফাইল"
+
+#: ../backend/impress/zip.c:65
+#, fuzzy
+msgid "Multi file ZIPs are not supported"
+msgstr "একাধিক ফাইল zip সমর্থিত নয়"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "ফাইল খুলতে ব্যর্থ"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "ফাইল থেকে তথ্য পড়তে ব্যর্থ"
+
+#: ../backend/impress/zip.c:74
+#, fuzzy
+msgid "Cannot find file in the ZIP archive"
+msgstr "zip আর্কাইভের মধ্যে ফাইল সনাক্ত করতে ব্যর্থ"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "অজানা ত্রুটি"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "“%s” ডকুমেন্ট লোড করতে ব্যর্থ"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "“%s” ডকুমেন্ট সংরক্ষণ করতে ব্যর্থ"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript ডকুমেন্ট"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "সংযুক্ত বস্তু “%s” সংরক্ষণ করতে ব্যর্থ: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "সংয়ুক্ত বস্তু “%s” খুলতে ব্যর্থ: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "সংযুক্ত বস্তু “%s” খুলতে ব্যর্থ"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "%s (%s) ধরনের ফাইল সমর্থিত নয়"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "সকল ডকুমেন্ট"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "সকল ফাইল"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, fuzzy, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "অস্থায়ী ডিরেক্টরি নির্মাণ করতে ব্যর্থ।"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, fuzzy, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "অস্থায়ী ডিরেক্টরি নির্মাণ করতে ব্যর্থ।"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "ফাইলটি বৈধ .desktop ফাইল নয়"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "ডেস্কটপ ফাইলের অজানা সংস্করণ '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s আরম্ভ করা হচ্ছে"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "অ্যাপ্লিকেশন দ্বারা কমান্ড-লাইনের মাধ্যমে নথিপত্র গ্রহণ করা হয় না"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "প্রারম্ভিক বিকল্প অজানা: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "'Type=Link' ডেস্কটপ এনট্রির ক্ষেত্রে নথিপত্রের URI উল্লেখ করা সম্ভব নয়"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "প্রারম্ভ করার যোগ্য বস্তু নয়"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "সেশান পরিচালনব্যবস্থার সাথে সংযোগ বিচ্ছিন্ন করা হবে"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "সংরক্ষিত কনফিগারেশন ধারণকারী ফাইল উল্লেখ করুন"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "সেশান পরিচালনার ID উল্লেখ করুন"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "সেশান পরিচালনা সংক্রান্ত বিকল্প"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "সেশান পরিচালনা সংক্রান্ত বিকল্প প্রদর্শন করা হবে"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "“%s” প্রদর্শন করা হবে"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "টুল-বারের মধ্যে স্থান পরিবর্তন করুন (_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "টুল-বারের মধ্যে নির্বাচিত বস্তুর স্থান পরিবর্তন করুন"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "টুল-বার থেকে মুছে ফেলুন (_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "টুল-বার থেকে নির্বাচিত বস্তু মুছে ফেলুন"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "টুল-বার মুছে ফেলুন (_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "নির্বাচিত টুল-বার মুছে ফেলুন"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "বিভাজক"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+msgid "Running in presentation mode"
+msgstr "প্রেসেন্টেশন মোডে চলছে"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5301
+msgid "Best Fit"
+msgstr "সর্বোত্তম মাপ"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "পৃষ্ঠার প্রস্থ অনুযায়ী মাপ নির্ধারণ"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "৫০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "৭০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "৮৫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "১০০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "১২৫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "১৫০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "১৭৫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "২০০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "৩০০%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "৪০০%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4167
+#: ../shell/ev-window-title.c:149 ../shell/main.c:287
+#, c-format
+msgid "Document Viewer"
+msgstr "ডকুমেন্ট প্রদর্শন ব্যবস্থা"
+
+#: ../data/evince.desktop.in.in.h:2
+#, fuzzy
+msgid "View multi-page documents"
+msgstr "একাধিক পৃষ্ঠাবিশিষ্ট ডকুমেন্ট দেখুন"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "ডকুমেন্টের ক্ষেত্র ধার্য নিষেধাজ্ঞা অগ্রাহ্য করা হবে"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"ডকুমেন্টের ক্ষেত্র ধার্য নিষেধাজ্ঞা যেমন কপি অথবা প্রিন্ট সংক্রান্ত, অগ্রাহ্য করা হবে।"
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "অস্থায়ী ফাইল মুছে ফেলুন"
+
+# প্রিন্টের বৈশিষ্ট্য সম্বলিত ফাইল
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "প্রিন্টের বৈশিষ্ট্য সম্বলিত ফাইল"
+
+#: ../previewer/ev-previewer.c:143 ../previewer/ev-previewer.c:177
+msgid "MATE Document Previewer"
+msgstr "MATE Document Previewer"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:2965
+msgid "Failed to print document"
+msgstr "ডকুমেন্ট প্রিন্ট করতে ব্যর্থ"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "নির্বাচিত প্রিন্টার '%s' পাওয়া যায়নি"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5050
+msgid "_Previous Page"
+msgstr "পূর্ববর্তী পৃষ্ঠা (_P)"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5051
+msgid "Go to the previous page"
+msgstr "পূর্ববর্তী পৃষ্ঠায় চলুন"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5053
+msgid "_Next Page"
+msgstr "পরবর্তী পৃষ্ঠা (_N"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5054
+msgid "Go to the next page"
+msgstr "পরবর্তী পৃষ্ঠায় চলুন"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5037
+msgid "Enlarge the document"
+msgstr "ডকুমেন্টের মাপ বৃদ্ধি করুন"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5040
+msgid "Shrink the document"
+msgstr "ডকুমেন্টের মাপ হ্রাস করুন"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "প্রিন্ট করুন"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5008
+msgid "Print this document"
+msgstr "এই ডকুমেন্ট প্রিন্ট করুন"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5152
+msgid "_Best Fit"
+msgstr "সর্বোত্তম মাপ (_B)"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5153
+msgid "Make the current document fill the window"
+msgstr "সম্পূর্ণ উইন্ডোর মধ্যে প্রদর্শনের জন্য ডকুমেন্টের মাপ বৃদ্ধি করুন"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5155
+msgid "Fit Page _Width"
+msgstr "পৃষ্ঠার প্রস্থ অনুযায়ী মাপ নির্ধারণ (_W)"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5156
+msgid "Make the current document fill the window width"
+msgstr "উইন্ডোর সম্পূর্ণ প্রস্থের মাপ অনুসারে প্রদর্শনের জন্য ডকুমেন্টের মাপ বৃদ্ধি করুন"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5223
+msgid "Page"
+msgstr "পৃষ্ঠা"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5224
+msgid "Select Page"
+msgstr "পৃষ্ঠা নির্বাচন করুন"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "ডকুমেন্ট"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "শিরোনাম:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "অবস্থান:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "বিষয়:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "লেখক:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "অভিব্যক্তি:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "প্রকাশক:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "প্রস্তুতকারক:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "নির্মাণের তারিখ:"
+
+# FIXME
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "পরিবর্তনের তারিখ:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "পৃষ্ঠা সংখ্যা:"
+
+# FIXME
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "সর্বোত্তম:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "বিন্যাস:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "নিরাপত্তা:"
+
+# FIXME
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "কাগজের মাপ:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1868
+msgid "None"
+msgstr "শূণ্য"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:284
+#, fuzzy, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:288
+#, fuzzy, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, প্রতিকৃতি (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, ভূদৃশ্য (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d, সর্বমোট %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "সর্বমোট %d"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+#, fuzzy
+msgid "Preparing to print…"
+msgstr "প্রিন্টের প্রস্তুতি ..."
+
+#: ../libview/ev-print-operation.c:336
+#, fuzzy
+msgid "Finishing…"
+msgstr "সমাপ্তি..."
+
+#: ../libview/ev-print-operation.c:338
+#, fuzzy, c-format
+msgid "Printing page %d of %d…"
+msgstr "%d পৃষ্ঠা প্রদর্শন করা হচ্ছে, সর্বমোট %d..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "এই প্রিন্টারে প্রিন্ট করা সম্ভব নয়।"
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "পৃষ্ঠা নির্বাচন বৈধ নয়"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "সতর্কবার্তা"
+
+#: ../libview/ev-print-operation.c:1229
+#, fuzzy
+msgid "Your print range selection does not include any pages"
+msgstr "প্রিন্টের উদ্দেশ্যে আপনার নির্বাচিত পৃষ্ঠার সীমার মধ্যে কোনো পৃষ্ঠা উপস্থিত নেই"
+
+#: ../libview/ev-print-operation.c:1863
+msgid "Page Scaling:"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1869
+msgid "Shrink to Printable Area"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1870
+msgid "Fit to Printable Area"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1873
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1885
+msgid "Auto Rotate and Center"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1888
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1893
+msgid "Select page size using document page size"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1895
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1977
+msgid "Page Handling"
+msgstr ""
+
+#: ../libview/ev-jobs.c:1438
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "%d পৃষ্ঠা প্রিন্ট করতে ব্যর্থ: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "উপরে চলুন"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "নীচে চলুন"
+
+# FIXME: দৃশ্য
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "প্রদর্শন ক্ষেত্রের উপরের অংশে চলুন"
+
+# FIXME: দৃশ্য
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "প্রদর্শন ক্ষেত্রের নীচের অংশে চলুন"
+
+# FIXME: দৃশ্য
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "ডকুমেন্ট অনুসারে প্রদর্শন"
+
+#: ../libview/ev-view-presentation.c:668
+msgid "Jump to page:"
+msgstr "চিহ্নিত পৃষ্ঠায় চলুন:"
+
+#: ../libview/ev-view-presentation.c:970
+#, fuzzy
+msgid "End of presentation. Click to exit."
+msgstr "উপস্থাপনার সমাপ্তি। Escape টিপে প্রস্থান করুন।"
+
+#: ../libview/ev-view.c:1724
+msgid "Go to first page"
+msgstr "প্রথম পৃষ্ঠায় চলুন"
+
+#: ../libview/ev-view.c:1726
+msgid "Go to previous page"
+msgstr "পূর্ববর্তী পৃষ্ঠায় চলুন"
+
+#: ../libview/ev-view.c:1728
+msgid "Go to next page"
+msgstr "পরবর্তী পৃষ্ঠায় চলুন"
+
+#: ../libview/ev-view.c:1730
+msgid "Go to last page"
+msgstr "সর্বশেষ পৃষ্ঠায় চলুন"
+
+#: ../libview/ev-view.c:1732
+msgid "Go to page"
+msgstr "চিহ্নিত পৃষ্ঠায় চলুন"
+
+#: ../libview/ev-view.c:1734
+msgid "Find"
+msgstr "অনুসন্ধান"
+
+#: ../libview/ev-view.c:1762
+#, c-format
+msgid "Go to page %s"
+msgstr "পৃষ্ঠা %s'এ চলুন"
+
+#: ../libview/ev-view.c:1768
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "%s'এ চলুন, “%s”'র মধ্যে"
+
+#: ../libview/ev-view.c:1771
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” ফাইলে চলুন"
+
+#: ../libview/ev-view.c:1779
+#, c-format
+msgid "Launch %s"
+msgstr "%s আরম্ভ করুন"
+
+#: ../libview/ev-view.c:3923 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+#, fuzzy
+msgid "Loading…"
+msgstr "লোড করা হচ্ছে..."
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "অনুসন্ধান:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5025
+msgid "Find Pre_vious"
+msgstr "পূর্ববর্তী উপস্থিতি অনুসন্ধান (_v)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "অনুসন্ধানের জন্য চিহ্নিত পংক্তির পূর্ববর্তী উপস্থিতি অনুসন্ধান করুন"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5023
+msgid "Find Ne_xt"
+msgstr "পরবর্তী উপস্থিতি অনুসন্ধান (_x)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "অনুসন্ধানের জন্য চিহ্নিত পংক্তির পরবর্তী উপস্থিতি অনুসন্ধান করুন"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "হরফের ছাঁদ সম্পর্কে সচেতন (_a)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "অনুসন্ধানের সময় হরফের ছাঁদ গণ্য করা হবে অথবা হবে না"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s ডকুমেন্টের পাসওয়ার্ড"
+
+#: ../shell/ev-convert-metadata.c:88
+#, fuzzy, c-format
+msgid "Converting %s"
+msgstr "%s আরম্ভ করা হচ্ছে"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "সম্প্রতি ব্যবহৃত ডকুমেন্ট খুলুন"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"ডকুমেন্ট বর্তমানে লক করা আছে ও শুধুমাত্র পাসওয়ার্ড উল্লেখ করা হলে সেটি মুক্ত করা হবে।"
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "ডকুমেন্ট মুক্ত করা হবে(_U)"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "পাসওয়ার্ড লিখুন"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "পাসওয়ার্ড প্রয়োজন"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"“%s” ডকুমেন্ট বর্তমানে লক করা আছে ও মুক্ত করার জন্য পাসওয়ার্ড উল্লেখ করা আবশ্যক।"
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "পাসওয়ার্ড:(_P)"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "পাসওয়ার্ড মনে রাখা হবে না (_i)"
+
+#: ../shell/ev-password-view.c:380
+#, fuzzy
+msgid "Remember password until you _log out"
+msgstr "লগ-আউট না করা অবধি পাসওয়ার্ড মনে রাখা হবে (_l)"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "পাসওয়ার্ড স্থায়ীরূপে মনে রাখা হবে (_f)"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "বিবিধ বৈশিষ্ট্য"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "সাধারণ"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "ফন্ট"
+
+#: ../shell/ev-properties-dialog.c:118
+#, fuzzy
+msgid "Document License"
+msgstr "ডকুমেন্ট প্রদর্শন ব্যবস্থা"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "ফন্ট"
+
+#: ../shell/ev-properties-fonts.c:162
+#, fuzzy, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "ফন্ট সংক্রান্ত তথ্য সংগ্রহ করা হচ্ছে... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr ""
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "সংযুক্ত বস্তু"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "স্তর"
+
+#: ../shell/ev-sidebar-links.c:335
+#, fuzzy
+msgid "Print…"
+msgstr "প্রিন্ট করুন"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "সূচিপত্র"
+
+#: ../shell/ev-sidebar-thumbnails.c:962
+msgid "Thumbnails"
+msgstr "থাম্ব-নেইল"
+
+#: ../shell/ev-window.c:836
+#, fuzzy, c-format
+msgid "Page %s — %s"
+msgstr "পৃষ্ঠা %s - %s"
+
+#: ../shell/ev-window.c:838
+#, c-format
+msgid "Page %s"
+msgstr "পৃষ্ঠা %s"
+
+#: ../shell/ev-window.c:1282
+msgid "The document contains no pages"
+msgstr "ডকুমেন্টের মধ্যে কোনো পৃষ্ঠা উপস্থিত নেই"
+
+#: ../shell/ev-window.c:1285
+msgid "The document contains only empty pages"
+msgstr "ডকুমেন্টের মধ্যে শুধুমাত্র ফাঁকা পৃষ্ঠা উপস্থিত রয়েছে"
+
+#: ../shell/ev-window.c:1479 ../shell/ev-window.c:1645
+msgid "Unable to open document"
+msgstr "ডকুমেন্ট খুলতে ব্যর্থ"
+
+#: ../shell/ev-window.c:1616
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "“%s” থেকে ডকুমেন্ট লোড করা হচ্ছে"
+
+#: ../shell/ev-window.c:1758 ../shell/ev-window.c:2035
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "ডকুমেন্ট ডাউনলোড করা হচ্ছে (%d%%)"
+
+#: ../shell/ev-window.c:1791
+#, fuzzy
+msgid "Failed to load remote file."
+msgstr "ডকুমেন্ট পুনরায় লোড করতে ব্যর্থ"
+
+#: ../shell/ev-window.c:1979
+#, c-format
+msgid "Reloading document from %s"
+msgstr "%s থেকে ডকুমেন্ট পুনরায় লোড করুন"
+
+#: ../shell/ev-window.c:2011
+msgid "Failed to reload document."
+msgstr "ডকুমেন্ট পুনরায় লোড করতে ব্যর্থ"
+
+#: ../shell/ev-window.c:2166
+msgid "Open Document"
+msgstr "ডকুমেন্ট খুলুন"
+
+#: ../shell/ev-window.c:2430
+#, c-format
+msgid "Saving document to %s"
+msgstr "%s-এ ডকুমেন্ট সংরক্ষণ করা হচ্ছে"
+
+#: ../shell/ev-window.c:2433
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "সংযুক্ত বস্তুটি %s-এ সংরক্ষণ করুন"
+
+#: ../shell/ev-window.c:2436
+#, c-format
+msgid "Saving image to %s"
+msgstr "%s-এ ছবিটি সংরক্ষণ করুন"
+
+#: ../shell/ev-window.c:2480 ../shell/ev-window.c:2580
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "“%s”রূপে ফাইল সংরক্ষণ করতে ব্যর্থ।"
+
+#: ../shell/ev-window.c:2511
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "ডকুমেন্ট আপলোড করা হচ্ছে (%d%%)"
+
+#: ../shell/ev-window.c:2515
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "সংযুক্ত বস্তু আপলোড করা হচ্ছে (%d%%)"
+
+#: ../shell/ev-window.c:2519
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "ছবি আপলোড করা হচ্ছে (%d%%)"
+
+#: ../shell/ev-window.c:2641
+msgid "Save a Copy"
+msgstr "একটি প্রতিলিপি সংরক্ষণ করুন"
+
+#: ../shell/ev-window.c:2909
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "সারির মধ্যে %d-টি অপেক্ষারত কর্ম উপস্থিত"
+msgstr[1] "সারির মধ্যে %d-টি অপেক্ষারত কর্ম উপস্থিত"
+
+#: ../shell/ev-window.c:3022
+#, c-format
+msgid "Printing job “%s”"
+msgstr "কর্ম “%s” প্রিন্ট করা হচ্ছে"
+
+#: ../shell/ev-window.c:3234
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "বন্ধ করার পূর্বে “%s” প্রিন্টের কাজ সমাপ্তি পর্যন্ত অপেক্ষা করা হবে কি?"
+
+#: ../shell/ev-window.c:3237
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"%d-টি প্রিন্টের কাজ বর্তমানে সক্রিয় রয়েছে। বন্ধ করার পূর্বে এইগুলির সমাপ্তি পর্যন্ত "
+"অপেক্ষা করা হবে কি?"
+
+#: ../shell/ev-window.c:3249
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "উইন্ডো বন্ধ করা হলে, প্রিন্টের জন্য অপেক্ষারত কাজগুলি প্রিন্ট করা হবে না।"
+
+#: ../shell/ev-window.c:3253
+msgid "Cancel _print and Close"
+msgstr "প্রিন্টের কাজ বাতিল করে বন্ধ করুন (_p)"
+
+#: ../shell/ev-window.c:3257
+msgid "Close _after Printing"
+msgstr "প্রিন্টের কাজ সঞ্চালনার পরে বন্ধ করুন (_a)"
+
+#: ../shell/ev-window.c:3819
+msgid "Toolbar Editor"
+msgstr "টুল-বার সম্পাদন ব্যবস্থা"
+
+#: ../shell/ev-window.c:3952
+msgid "There was an error displaying help"
+msgstr "সহায়তার তথ্য প্রদর্শন করতে সমস্যা"
+
+#: ../shell/ev-window.c:4163
+#, fuzzy, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"ডকুমেন্ট ফাইল প্রদর্শন ব্যবস্থা।\n"
+"poppler %s (%s) ব্যবহৃত হয়"
+
+#: ../shell/ev-window.c:4194
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince একটি মুক্ত সফ্টওয়্যার; Free Software Foundation দ্বারা প্রকাশিত GNU General "
+"Public License'র শর্তানুযায়ী এটি বিতরণ ও পরিবর্তন করা যাবে; লাইনসেন্সের সংস্করণ ২ "
+"অথবা (আপনার সুবিধানুযায়ী) ঊর্ধ্বতন কোনো সংস্করণের অধীন।\n"
+
+#: ../shell/ev-window.c:4198
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince বিতরণ করার মূল উদ্দেশ্য যে ব্যবহারকারীরা এর দ্বারা উপকৃত হবেন, কিন্তু এটির "
+"জন্য কোনো সুস্পষ্ট ওয়ারেন্টি উপস্থিত নেই; বাণিজ্যিক ও কোনো সুনির্দিষ্ট কর্ম সাধনের জন্য "
+"অন্তর্নিহীত ওয়ারেন্টিও অনুপস্থিত। অধিক জানতে GNU General Public License পড়ুন।\n"
+
+#: ../shell/ev-window.c:4202
+#, fuzzy
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Evince'র সাথে GNU General Public License'র একটি প্রতিলিপি উপলব্ধ হওয়া উচিত; না "
+"থাকলে নিম্নলিখিত ঠিকানায় লিখে তা সংগ্রহ করুন Free Software Foundation, Inc., 51 "
+"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\n"
+
+#: ../shell/ev-window.c:4227
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4230
+msgid "© 1996–2009 The Evince authors"
+msgstr "© ১৯৯৬-২০০৯ Evince নির্মাতাবৃন্দ"
+
+#: ../shell/ev-window.c:4236
+msgid "translator-credits"
+msgstr ""
+"অঙ্কুর প্রকল্পের পক্ষে, \n"
+"প্রজ্ঞা [ [email protected] ] \n"
+"রুণা ভট্টাচার্য্য <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4506
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "এই পৃষ্ঠায় %d-টি মিল সনাক্ত করা হয়েছে"
+msgstr[1] "এই পৃষ্ঠায় %d-টি মিল সনাক্ত করা হয়েছে"
+
+#: ../shell/ev-window.c:4514
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% অনুসন্ধান অবশিষ্ট রয়েছে"
+
+#: ../shell/ev-window.c:4991
+msgid "_File"
+msgstr "ফাইল (_F)"
+
+#: ../shell/ev-window.c:4992
+msgid "_Edit"
+msgstr "সম্পাদনা (_E)"
+
+#: ../shell/ev-window.c:4993
+msgid "_View"
+msgstr "প্রদর্শন (_V)"
+
+#: ../shell/ev-window.c:4994
+msgid "_Go"
+msgstr "গন্তব্য (_G)"
+
+#: ../shell/ev-window.c:4995
+msgid "_Help"
+msgstr "সহায়তা (_H)"
+
+#. File menu
+#: ../shell/ev-window.c:4998 ../shell/ev-window.c:5263
+#, fuzzy
+msgid "_Open…"
+msgstr "খুলুন...(_O)"
+
+#: ../shell/ev-window.c:4999 ../shell/ev-window.c:5264
+msgid "Open an existing document"
+msgstr "কোনো উপস্থিত ডকুমেন্ট খুলুন"
+
+#: ../shell/ev-window.c:5001
+msgid "Op_en a Copy"
+msgstr "একটি প্রতিলিপি সংরক্ষণ করুন (_e)"
+
+#: ../shell/ev-window.c:5002
+msgid "Open a copy of the current document in a new window"
+msgstr "বর্তমান ডকুমেন্টের একটি প্রতিলিপি পৃথক উইন্ডোর মধ্যে প্রদর্শন করা হবে"
+
+#: ../shell/ev-window.c:5004
+#, fuzzy
+msgid "_Save a Copy…"
+msgstr "একটি প্রতিলিপি সংরক্ষণ করুন"
+
+#: ../shell/ev-window.c:5005
+msgid "Save a copy of the current document"
+msgstr "বর্তমান ডকুমেন্টের একটি প্রতিলিপি সংরক্ষণ করুন"
+
+#: ../shell/ev-window.c:5007
+#, fuzzy
+msgid "_Print…"
+msgstr "প্রিন্ট করুন"
+
+#: ../shell/ev-window.c:5010
+msgid "P_roperties"
+msgstr "বৈশিষ্ট্যাবলী (_r)"
+
+#: ../shell/ev-window.c:5018
+msgid "Select _All"
+msgstr "সমগ্র নির্বাচন করুন (_A)"
+
+#: ../shell/ev-window.c:5020
+#, fuzzy
+msgid "_Find…"
+msgstr "অনুসন্ধান"
+
+#: ../shell/ev-window.c:5021
+msgid "Find a word or phrase in the document"
+msgstr "ডকুমেন্টের মধ্যে একটি শব্দ অথবা পংক্তি অনুসন্ধান করুন"
+
+#: ../shell/ev-window.c:5027
+msgid "T_oolbar"
+msgstr "টুল-বার(_o)"
+
+#: ../shell/ev-window.c:5029
+msgid "Rotate _Left"
+msgstr "বাঁদিকে ঘোরানো হবে (_L)"
+
+#: ../shell/ev-window.c:5031
+msgid "Rotate _Right"
+msgstr "ডানদিকে ঘোরানো হবে (_R)"
+
+#: ../shell/ev-window.c:5042
+msgid "_Reload"
+msgstr "পুনরায় লোড করুন (_R)"
+
+#: ../shell/ev-window.c:5043
+msgid "Reload the document"
+msgstr "ডকুমেন্ট পুনরায় লোড করুন"
+
+#: ../shell/ev-window.c:5046
+msgid "Auto_scroll"
+msgstr "স্বয়ংক্রিয় স্ক্রোল (_s)"
+
+#: ../shell/ev-window.c:5056
+msgid "_First Page"
+msgstr "প্রথম পৃষ্ঠা (_F)"
+
+#: ../shell/ev-window.c:5057
+msgid "Go to the first page"
+msgstr "প্রথম পৃষ্ঠায় চলুন"
+
+#: ../shell/ev-window.c:5059
+msgid "_Last Page"
+msgstr "সর্বশেষ পৃষ্ঠা (_L)"
+
+#: ../shell/ev-window.c:5060
+msgid "Go to the last page"
+msgstr "সর্বশেষ পৃষ্ঠায় চলুন"
+
+#. Help menu
+#: ../shell/ev-window.c:5064
+msgid "_Contents"
+msgstr "সূচি (_C)"
+
+#: ../shell/ev-window.c:5067
+msgid "_About"
+msgstr "পরিচিতি (_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5071
+msgid "Leave Fullscreen"
+msgstr "সম্পূর্ণ পর্দায় প্রদর্শন বন্ধ করা হবে"
+
+#: ../shell/ev-window.c:5072
+msgid "Leave fullscreen mode"
+msgstr "সম্পূর্ণ পর্দায় প্রদর্শন বন্ধ করুন"
+
+#: ../shell/ev-window.c:5074
+msgid "Start Presentation"
+msgstr "উপস্থাপনা প্রারম্ভ করা হবে"
+
+#: ../shell/ev-window.c:5075
+msgid "Start a presentation"
+msgstr "উপস্থাপনা প্রারম্ভ করা হবে"
+
+#. View Menu
+#: ../shell/ev-window.c:5134
+msgid "_Toolbar"
+msgstr "টুল-বার (_T)"
+
+#: ../shell/ev-window.c:5135
+msgid "Show or hide the toolbar"
+msgstr "টুল-বার প্রদর্শন অথবা আড়াল করা হবে"
+
+#: ../shell/ev-window.c:5137
+msgid "Side _Pane"
+msgstr "পার্শ্ববর্তী পেইন (_P)"
+
+#: ../shell/ev-window.c:5138
+msgid "Show or hide the side pane"
+msgstr "পার্শ্ববর্তী পেইন প্রদর্শন অথবা আড়াল করা হবে"
+
+#: ../shell/ev-window.c:5140
+msgid "_Continuous"
+msgstr "নিরবিচ্ছিন্ন (_C)"
+
+#: ../shell/ev-window.c:5141
+msgid "Show the entire document"
+msgstr "সম্পূর্ণ ডকুমেন্ট প্রদর্শন করা হবে"
+
+#: ../shell/ev-window.c:5143
+msgid "_Dual"
+msgstr "দ্বৈত (_D)"
+
+#: ../shell/ev-window.c:5144
+msgid "Show two pages at once"
+msgstr "একযোগে দুটি পৃষ্ঠা প্রদর্শিত হবে"
+
+#: ../shell/ev-window.c:5146
+msgid "_Fullscreen"
+msgstr "সম্পূর্ণ পর্দায় প্রদর্শন (_F)"
+
+#: ../shell/ev-window.c:5147
+msgid "Expand the window to fill the screen"
+msgstr "পর্দার সম্পূর্ণ মাপ অনুযায়ী প্রদর্শনের জন্য উইন্ডোর মাপ বৃদ্ধি করুন"
+
+#: ../shell/ev-window.c:5149
+msgid "Pre_sentation"
+msgstr "উপস্থাপনা (_P)"
+
+#: ../shell/ev-window.c:5150
+msgid "Run document as a presentation"
+msgstr "উপস্থাপনা রূপে ডকুমেন্ট প্রদর্শিত হবে"
+
+#: ../shell/ev-window.c:5158
+msgid "_Inverted Colors"
+msgstr ""
+
+#: ../shell/ev-window.c:5159
+msgid "Show page contents with the colors inverted"
+msgstr ""
+
+#. Links
+#: ../shell/ev-window.c:5167
+msgid "_Open Link"
+msgstr "লিঙ্ক খুলুন (_O)"
+
+#: ../shell/ev-window.c:5169
+msgid "_Go To"
+msgstr "গন্তব্য (_G)"
+
+#: ../shell/ev-window.c:5171
+msgid "Open in New _Window"
+msgstr "নতুন উইন্ডোর মধ্যে প্রদর্শন করা হবে (_W)"
+
+#: ../shell/ev-window.c:5173
+msgid "_Copy Link Address"
+msgstr "লিঙ্কের ঠিকানা কপি করুন (_C)"
+
+#: ../shell/ev-window.c:5175
+#, fuzzy
+msgid "_Save Image As…"
+msgstr "নতুন রূপে ছবি সংরক্ষণ করুন...(_S)"
+
+#: ../shell/ev-window.c:5177
+msgid "Copy _Image"
+msgstr "ছবি কপি করুন (_I)"
+
+#: ../shell/ev-window.c:5182
+#, fuzzy
+msgid "_Open Attachment"
+msgstr "সংযুক্ত বস্তু সংরক্ষণ করুন"
+
+#: ../shell/ev-window.c:5184
+#, fuzzy
+msgid "_Save Attachment As…"
+msgstr "সংযুক্ত বস্তু সংরক্ষণ করুন"
+
+#: ../shell/ev-window.c:5237
+msgid "Zoom"
+msgstr "প্রদর্শনের মাপ"
+
+#: ../shell/ev-window.c:5239
+msgid "Adjust the zoom level"
+msgstr "প্রদর্শনের মাত্রা পরিবর্তন করুন"
+
+#: ../shell/ev-window.c:5249
+msgid "Navigation"
+msgstr "পরিদর্শন"
+
+#: ../shell/ev-window.c:5251
+msgid "Back"
+msgstr "পূর্ববর্তী"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5254
+msgid "Move across visited pages"
+msgstr "পরিদর্শিত পৃষ্ঠাগুলির মধ্যে চলাচল করুন"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5284
+msgid "Previous"
+msgstr "পূর্ববর্তী"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5289
+msgid "Next"
+msgstr "পরবর্তী"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5293
+msgid "Zoom In"
+msgstr "বড় করে প্রদর্শন"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5297
+msgid "Zoom Out"
+msgstr "ছোট করে প্রদর্শন"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5305
+msgid "Fit Width"
+msgstr "প্রস্থ অনুযায়ী নির্ধারণ"
+
+#: ../shell/ev-window.c:5466 ../shell/ev-window.c:5483
+msgid "Unable to launch external application."
+msgstr "বহিস্থিত অ্যাপ্লিকেশন আরম্ভ করতে ব্যর্থ।"
+
+#: ../shell/ev-window.c:5540
+msgid "Unable to open external link"
+msgstr "বহিস্থিত লিঙ্ক খুলতে ব্যর্থ"
+
+#: ../shell/ev-window.c:5707
+msgid "Couldn't find appropriate format to save image"
+msgstr "ছবি সংরক্ষণের জন্য যথাযত বিন্যাস পাওয়া যায়নি"
+
+#: ../shell/ev-window.c:5749
+msgid "The image could not be saved."
+msgstr "ছবি সংরক্ষণ করতে ব্যর্থ।"
+
+#: ../shell/ev-window.c:5781
+msgid "Save Image"
+msgstr "ছবি সংরক্ষণ করুন"
+
+#: ../shell/ev-window.c:5848
+msgid "Unable to open attachment"
+msgstr "সংযুক্ত বস্তু খুলতে ব্যর্থ"
+
+#: ../shell/ev-window.c:5901
+msgid "The attachment could not be saved."
+msgstr "সংযুক্ত বস্তু সংরক্ষণ করতে ব্যর্থ।"
+
+#: ../shell/ev-window.c:5946
+msgid "Save Attachment"
+msgstr "সংযুক্ত বস্তু সংরক্ষণ করুন"
+
+#: ../shell/ev-window-title.c:162
+#, fuzzy, c-format
+msgid "%s — Password Required"
+msgstr "%s - পাসওয়ার্ড আবশ্যক"
+
+#: ../shell/ev-utils.c:317
+msgid "By extension"
+msgstr "এক্সটেনশন অনুযায়ী"
+
+#: ../shell/main.c:72 ../shell/main.c:251
+msgid "MATE Document Viewer"
+msgstr "MATE Document Viewer"
+
+#: ../shell/main.c:80
+#, fuzzy
+msgid "The page label of the document to display."
+msgstr "প্রদর্শনের উদ্দেশ্যে চিহ্নিত ডকুমেন্টের পৃষ্ঠা সংখ্যা।"
+
+#: ../shell/main.c:80
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:81
+#, fuzzy
+msgid "The page number of the document to display."
+msgstr "প্রদর্শনের উদ্দেশ্যে চিহ্নিত ডকুমেন্টের পৃষ্ঠা সংখ্যা।"
+
+#: ../shell/main.c:81
+msgid "NUMBER"
+msgstr ""
+
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr "সম্পূর্ণ পর্দায় evince চালানো হবে"
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr "প্রেসেন্টেশন মোডে evince চালানো হবে"
+
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr "পূর্বরূপ প্রদর্শনের মোডে evince চালানো হবে"
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr "ডকুমেন্টের মধ্যে অনুসন্ধানের জন্য চিহ্নিত একটি শব্দ অথবা পংক্তি"
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:89
+#, fuzzy
+msgid "[FILE…]"
+msgstr "[FILE...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+#, fuzzy
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"বুলিয়াল মান প্রযোজ্য, true (সত্য) হলে থাম্ব-নেইল সক্রিয় করা হবে ও মান false (সত্য "
+"নয়) হলে নতুন থাম্ব-নেইল নির্মাণ বন্ধ করা হবে"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF ডকুমেন্টের থাম্ব-নেইল নির্মাণ সক্রিয় করা হবে"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF ডকুমেন্টের জন্য ব্যবহারযোগ্য থাম্ব-নেইল কমান্ড"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+#, fuzzy
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF ডকুমেন্টেরর জন্য থাম্ব-নেইল নির্মাণে ব্যবহৃত বৈধ কমান্ড ও আর্গুমেন্ট। অধিক জানতে "
+"caja thumbnailer সংক্রান্ত নথিপত্র পড়ুন।"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU ডকুমেন্টের বিন্যাস সঠিক নয়"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "“%s” ফাইল নির্মাণ করতে ব্যর্থ: %s"
+
+#~ msgid "Search string"
+#~ msgstr "পংক্তি অনুসন্ধান"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "অনুসন্ধানের উদ্দেশ্যে চিহ্নিত পংক্তি"
+
+#~ msgid "Case sensitive"
+#~ msgstr "হরফের ছাঁদ সম্পর্কে সচেতন"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "মান TRUE (সত্য) হলে অনুসন্ধানের সময় হরফের ছাঁদ গণ্য করা হবে"
+
+#~ msgid "Highlight color"
+#~ msgstr "ঔজ্জ্বল্যের রং"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "সব মিল উজ্জ্বল করে দর্শানোর জন্য ব্যবহৃত রং"
+
+#~ msgid "Current color"
+#~ msgstr "বর্তমানের নির্বাচিত রং"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "বর্তমান মিল উজ্জ্বল করে দর্শানোর জন্য ব্যবহৃত রং"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "পূর্ববর্তী নথিপত্র পুনরুদ্ধার করা হবে কি?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "সর্বশেষ Evince সঞ্চালনার সময় সম্ভবত এটি অপ্রত্যাশিতভাবে বন্ধ হয়েছিল এবং প্রদর্শিত "
+#~ "ডকুমেন্টগুলি পুনরুদ্ধার করা যাবে।"
+
+#~ msgid "_Don't Recover"
+#~ msgstr "পুনরুদ্ধার করা হবে না (_D)"
+
+#~ msgid "_Recover"
+#~ msgstr "পুনরুদ্ধার করুন (_R)"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "বিপর্যয় থেকে পুনরুদ্ধার"
+
+#~ msgid "Print..."
+#~ msgstr "প্রিন্ট করুন..."
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "“%s” সিম-লিংক নির্মাণ করা যায়নি: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "প্রতিলিপি খুলতে ব্যর্থ।"
+
+#~ msgid "The document doesn't support search"
+#~ msgstr "এই ডকুমেন্টের অনুসন্ধানের কোনো ব্যবস্থা নেই"
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "প্রতিলিপি সংরক্ষণ করুন...(_S)"
+
+#~ msgid "Page Set_up..."
+#~ msgstr "পৃষ্ঠার প্রস্তুতি...(_u)"
+
+#~ msgid "Setup the page settings for printing"
+#~ msgstr "প্রিন্ট করার জন্য পৃষ্ঠার বৈশিষ্ট্য নির্ধারণ করুন"
+
+#~ msgid "_Print..."
+#~ msgstr "প্রিন্ট করুন...(_P)"
+
+#~ msgid "_Find..."
+#~ msgstr "অনুসন্ধান...(_F)"
diff --git a/po/br.po b/po/br.po
new file mode 100644
index 00000000..63a80bb5
--- /dev/null
+++ b/po/br.po
@@ -0,0 +1,1475 @@
+# Breton translation for Evince
+# Copyright (C) 2006 Free Software Foundation, Inc.
+# This file is distributed under the GNU General Public License Version 2.
+# Jérémy Ar Floc'h <[email protected]>, 2006
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Evince 2.14\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2009-07-31 05:12+0000\n"
+"PO-Revision-Date: 2009-07-31 08:32+0100\n"
+"Last-Translator: Denis <[email protected]>\n"
+"Language-Team: Breton\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+#: ../backend/comics/comics-document.c:155
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:169
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:178
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:225
+#, c-format
+msgid "Failed to create a temporary directory."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:347
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:354
+msgid "Can't find an appropiate command to decompress this type of comic book"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:385
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Rizh MIME dianav"
+
+#: ../backend/comics/comics-document.c:412
+msgid "File corrupted"
+msgstr "Restr kontron"
+
+#: ../backend/comics/comics-document.c:424
+msgid "No files in archive"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:465
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Skeudenn ebet kavet e-barzh an teul %s"
+
+#: ../backend/comics/comics-document.c:704
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:854
+#, c-format
+msgid "Error %s"
+msgstr "Fazi %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Bannoù-treset"
+
+#: ../backend/djvu/djvu-document.c:174
+#, fuzzy
+msgid "DJVU document has incorrect format"
+msgstr "An teul DJVU en deus un mentrezh direizh"
+
+#: ../backend/djvu/djvu-document.c:251
+msgid "The document is composed of several files. One or more of such files cannot be accessed."
+msgstr ""
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Teulioù Djvu"
+
+#: ../backend/dvi/dvi-document.c:108
+#, fuzzy
+msgid "DVI document has incorrect format"
+msgstr "An teul DVI en deus un mentrezh direizh"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Teulieù DVI"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:826
+msgid "Yes"
+msgstr "Ya"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:829
+msgid "No"
+msgstr "Nann"
+
+#: ../backend/pdf/ev-poppler.cc:903
+msgid "Type 1"
+msgstr "Rizh 1"
+
+#: ../backend/pdf/ev-poppler.cc:905
+msgid "Type 1C"
+msgstr "Rizh 1C"
+
+#: ../backend/pdf/ev-poppler.cc:907
+msgid "Type 3"
+msgstr "Rizh 3"
+
+#: ../backend/pdf/ev-poppler.cc:909
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:911
+msgid "Type 1 (CID)"
+msgstr "Rizh 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:913
+msgid "Type 1C (CID)"
+msgstr "Rizh 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:915
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:917
+msgid "Unknown font type"
+msgstr "Dianav eo rizh an nodrezh"
+
+#: ../backend/pdf/ev-poppler.cc:943
+msgid "No name"
+msgstr "Anv ebet"
+
+#: ../backend/pdf/ev-poppler.cc:951
+msgid "Embedded subset"
+msgstr ""
+
+#: ../backend/pdf/ev-poppler.cc:953
+msgid "Embedded"
+msgstr "Enkorfet"
+
+#: ../backend/pdf/ev-poppler.cc:955
+msgid "Not embedded"
+msgstr "N'eo ket enkorfet"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Teulioù PDF"
+
+#: ../backend/impress/impress-document.c:303
+#: ../backend/tiff/tiff-document.c:114
+msgid "Invalid document"
+msgstr "Didalvoudek eo an teul"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr ""
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Fazi ebet"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr ""
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr ""
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "Didalvoudek eo ar restr zip"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr ""
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "N'haller ket digeriñ ar restr"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr ""
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr ""
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Fazi dianav"
+
+#: ../backend/ps/ev-spectre.c:113
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr ""
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr ""
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Teulioù PostScript"
+
+#: ../libdocument/ev-attachment.c:304
+#: ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr ""
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr ""
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr ""
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Anskoret eo rizh restr %s (%s)"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "An holl teulioù"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "An holl restroù"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "N'eo ket ur restr mod .desktop talvoudek"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Handelv '%s' restr ar burev n'eo ket bet anavezet"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "O kregiñ gant %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "An arload ne zedegemer ket an teulioù dre arroudennoù arc'had"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Dibarzh lañsañ dianavezet : %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "N'haller lakaat URIoù an teul da dremen d'un enankad war ar burev evel 'Type=Link'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "N'eo ket un dra a c'haller lañsañ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Lazhañ kennask ouzh ardoer an estez"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Erspizit ar restr gant ar c'hefluniadur enrollet enni"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+#: ../previewer/ev-previewer.c:46
+#: ../previewer/ev-previewer.c:47
+msgid "FILE"
+msgstr "RESTR"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Dibab ID ardoadur an estez"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "Hennader (ID)"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Dibarzhioù ardeiñ an estez :"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Diskouez dibarzhioù ardeiñ an estez"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "Diskouez “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Disranner"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:117
+msgid "Running in presentation mode"
+msgstr ""
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48
+#: ../shell/ev-window.c:5213
+msgid "Best Fit"
+msgstr "Ment peurvat"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Aozañ hervez ledander ar bajenn"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1
+#: ../shell/ev-window.c:4135
+#: ../shell/ev-window-title.c:150
+#: ../shell/main.c:484
+#, c-format
+msgid "Document Viewer"
+msgstr "Lenner teulioù"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "Gwelout teulioù gant meur a bajenn"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr ""
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+
+#: ../previewer/ev-previewer.c:45
+msgid "Delete the temporary file"
+msgstr ""
+
+#: ../previewer/ev-previewer.c:46
+msgid "Print settings file"
+msgstr "Restr an arventennoù moullañ"
+
+#: ../previewer/ev-previewer.c:141
+#: ../previewer/ev-previewer.c:175
+msgid "MATE Document Previewer"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:122
+#: ../shell/ev-window.c:2877
+msgid "Failed to print document"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:242
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr ""
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:286
+#: ../shell/ev-window.c:4972
+msgid "_Previous Page"
+msgstr "_Pajenn a-raok"
+
+#: ../previewer/ev-previewer-window.c:287
+#: ../shell/ev-window.c:4973
+msgid "Go to the previous page"
+msgstr "Mont da pajenn a-raok"
+
+#: ../previewer/ev-previewer-window.c:289
+#: ../shell/ev-window.c:4975
+msgid "_Next Page"
+msgstr "_Pajenn war lerc'h"
+
+#: ../previewer/ev-previewer-window.c:290
+#: ../shell/ev-window.c:4976
+msgid "Go to the next page"
+msgstr "Mont da pajenn war lerc'h"
+
+#: ../previewer/ev-previewer-window.c:293
+#: ../shell/ev-window.c:4959
+msgid "Enlarge the document"
+msgstr "Brasaat an teul"
+
+#: ../previewer/ev-previewer-window.c:296
+#: ../shell/ev-window.c:4962
+msgid "Shrink the document"
+msgstr "Bihanaat an teul"
+
+#: ../previewer/ev-previewer-window.c:299
+#: ../shell/ev-print-operation.c:1294
+msgid "Print"
+msgstr "Moullañ"
+
+#: ../previewer/ev-previewer-window.c:300
+#: ../shell/ev-window.c:4931
+msgid "Print this document"
+msgstr "Moullañ an teul-mañ"
+
+#: ../previewer/ev-previewer-window.c:306
+#: ../shell/ev-window.c:5070
+msgid "_Best Fit"
+msgstr "_Ment peurvat"
+
+#: ../previewer/ev-previewer-window.c:307
+#: ../shell/ev-window.c:5071
+msgid "Make the current document fill the window"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:309
+#: ../shell/ev-window.c:5073
+msgid "Fit Page _Width"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:310
+#: ../shell/ev-window.c:5074
+msgid "Make the current document fill the window width"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:441
+#: ../shell/ev-window.c:5137
+msgid "Page"
+msgstr "Pajenn"
+
+#: ../previewer/ev-previewer-window.c:442
+#: ../shell/ev-window.c:5138
+msgid "Select Page"
+msgstr "Diuz pajenn"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Teul"
+
+#: ../properties/ev-properties-view.c:59
+msgid "Title:"
+msgstr "Titl :"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Location:"
+msgstr "Lec'hiadur :"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Subject:"
+msgstr "Ergorenn :"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Author:"
+msgstr "Aozer :"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Keywords:"
+msgstr ""
+
+#: ../properties/ev-properties-view.c:64
+msgid "Producer:"
+msgstr ""
+
+#: ../properties/ev-properties-view.c:65
+msgid "Creator:"
+msgstr "Krouer :"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Created:"
+msgstr "Krouet :"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Modified:"
+msgstr "Kemmet :"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Number of Pages:"
+msgstr "Niver a bajennoù :"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Optimized:"
+msgstr "Gwellekaet :"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Format:"
+msgstr "Mentrezh :"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Security:"
+msgstr "Diogelroez :"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Paper Size:"
+msgstr "Ment ar baperenn :"
+
+#: ../properties/ev-properties-view.c:202
+msgid "None"
+msgstr "Tra ebet"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:227
+msgid "default:mm"
+msgstr ""
+
+#: ../properties/ev-properties-view.c:271
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr ""
+
+#: ../properties/ev-properties-view.c:275
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr ""
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:299
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Poltred (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:306
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Gweledva (%s)"
+
+#: ../libmisc/ev-page-action.c:72
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d eus %d)"
+
+#: ../libmisc/ev-page-action.c:74
+#, c-format
+msgid "of %d"
+msgstr "eus %d"
+
+#: ../libview/ev-jobs.c:958
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr ""
+
+#: ../libview/ev-jobs.c:1435
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr ""
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Dibunadur sevel"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Dibunadur diskenn"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr ""
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr ""
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr ""
+
+#: ../libview/ev-view.c:1466
+msgid "Go to first page"
+msgstr ""
+
+#: ../libview/ev-view.c:1468
+msgid "Go to previous page"
+msgstr ""
+
+#: ../libview/ev-view.c:1470
+msgid "Go to next page"
+msgstr ""
+
+#: ../libview/ev-view.c:1472
+msgid "Go to last page"
+msgstr ""
+
+#: ../libview/ev-view.c:1474
+msgid "Go to page"
+msgstr ""
+
+#: ../libview/ev-view.c:1476
+msgid "Find"
+msgstr "Kavout"
+
+#: ../libview/ev-view.c:1504
+#, c-format
+msgid "Go to page %s"
+msgstr "Mont da bajenn %s"
+
+#: ../libview/ev-view.c:1510
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr ""
+
+#: ../libview/ev-view.c:1513
+#, c-format
+msgid "Go to file “%s”"
+msgstr ""
+
+#: ../libview/ev-view.c:1521
+#, c-format
+msgid "Launch %s"
+msgstr "Lañsañ %s"
+
+#: ../libview/ev-view.c:2781
+msgid "End of presentation. Press Escape to exit."
+msgstr ""
+
+#: ../libview/ev-view.c:3720
+msgid "Jump to page:"
+msgstr ""
+
+#: ../libview/ev-view.c:4002
+#: ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:267
+msgid "Loading..."
+msgstr "O kargañ..."
+
+#: ../shell/eggfindbar.c:146
+msgid "Search string"
+msgstr "Klask an testenn"
+
+#: ../shell/eggfindbar.c:147
+msgid "The name of the string to be found"
+msgstr ""
+
+#: ../shell/eggfindbar.c:160
+msgid "Case sensitive"
+msgstr "Doujañs d'ar pennlizherenn"
+
+#: ../shell/eggfindbar.c:161
+msgid "TRUE for a case sensitive search"
+msgstr ""
+
+#: ../shell/eggfindbar.c:168
+msgid "Highlight color"
+msgstr ""
+
+#: ../shell/eggfindbar.c:169
+msgid "Color of highlight for all matches"
+msgstr ""
+
+#: ../shell/eggfindbar.c:175
+msgid "Current color"
+msgstr "Liv bremanel"
+
+#: ../shell/eggfindbar.c:176
+msgid "Color of highlight for the current match"
+msgstr ""
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Kavout :"
+
+#: ../shell/eggfindbar.c:329
+#: ../shell/ev-window.c:4948
+msgid "Find Pre_vious"
+msgstr "Klask an hini _kent"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr ""
+
+#: ../shell/eggfindbar.c:337
+#: ../shell/ev-window.c:4946
+msgid "Find Ne_xt"
+msgstr "Klask war lerc'h"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr ""
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Doujañs d'ar p_ennlizherenn"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr ""
+
+#: ../shell/ev-application.c:305
+msgid "Recover previous documents?"
+msgstr ""
+
+#: ../shell/ev-application.c:308
+msgid "Evince appears to have exited unexpectedly the last time it was run. You can recover the opened documents."
+msgstr ""
+
+#: ../shell/ev-application.c:312
+msgid "_Don't Recover"
+msgstr "_N'atoriñ ket"
+
+#: ../shell/ev-application.c:315
+msgid "_Recover"
+msgstr "Ato_riñ"
+
+#: ../shell/ev-application.c:318
+msgid "Crash Recovery"
+msgstr "Sac'het gant an atoradur"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Ger-tremen evit an teul %s"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr ""
+
+#: ../shell/ev-password-view.c:144
+msgid "This document is locked and can only be read by entering the correct password."
+msgstr ""
+
+#: ../shell/ev-password-view.c:153
+#: ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "_Dibrennañ an teul"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Roit ar ger-tremen"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Ger-tremen rekis"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Ger-tremen :"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "Disoñjal ar ger-tremen d_iouzhtu"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _logout"
+msgstr "Derc'hel soñj er _ger-tremen betek ma tikennaskot"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "De_rc'hel soñj da viken"
+
+#. Initial state
+#: ../shell/ev-print-operation.c:316
+msgid "Preparing to print ..."
+msgstr "Prientiñ ar moullañ..."
+
+#: ../shell/ev-print-operation.c:318
+msgid "Finishing..."
+msgstr "Oc'h echuiñ..."
+
+#: ../shell/ev-print-operation.c:320
+#, c-format
+msgid "Printing page %d of %d..."
+msgstr ""
+
+#: ../shell/ev-print-operation.c:1143
+msgid "Printing is not supported on this printer."
+msgstr ""
+
+#: ../shell/ev-print-operation.c:1208
+msgid "Invalid page selection"
+msgstr "Didalvoudek eo diuzad ar bajenn"
+
+#: ../shell/ev-print-operation.c:1209
+msgid "Warning"
+msgstr "Diwall"
+
+#: ../shell/ev-print-operation.c:1211
+msgid "Your print range selection does not include any page"
+msgstr ""
+
+#: ../shell/ev-properties-dialog.c:57
+msgid "Properties"
+msgstr "Perzhioù"
+
+#: ../shell/ev-properties-dialog.c:91
+msgid "General"
+msgstr "Hollek"
+
+#: ../shell/ev-properties-dialog.c:101
+msgid "Fonts"
+msgstr "Nodrezhoù"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Nodrezh"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr ""
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr ""
+
+#: ../shell/ev-sidebar-layers.c:395
+msgid "Layers"
+msgstr "Treuzfollennoù"
+
+#: ../shell/ev-sidebar-links.c:340
+msgid "Print..."
+msgstr "O moullañ..."
+
+#: ../shell/ev-sidebar-links.c:720
+msgid "Index"
+msgstr "Index"
+
+#: ../shell/ev-sidebar-thumbnails.c:756
+msgid "Thumbnails"
+msgstr "Skeudennigoù"
+
+#: ../shell/ev-window.c:828
+#, c-format
+msgid "Page %s - %s"
+msgstr "Pajenn %s-%s"
+
+#: ../shell/ev-window.c:830
+#, c-format
+msgid "Page %s"
+msgstr "Pajenn %s"
+
+#: ../shell/ev-window.c:1255
+msgid "The document contains no pages"
+msgstr ""
+
+#: ../shell/ev-window.c:1258
+msgid "The document contains only empty pages"
+msgstr ""
+
+#: ../shell/ev-window.c:1481
+#: ../shell/ev-window.c:1634
+msgid "Unable to open document"
+msgstr "Dic'houest da zigeriñ an teul"
+
+#: ../shell/ev-window.c:1605
+#, c-format
+msgid "Loading document from “%s”"
+msgstr ""
+
+#: ../shell/ev-window.c:1743
+#: ../shell/ev-window.c:1926
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:1873
+#, c-format
+msgid "Reloading document from %s"
+msgstr ""
+
+#: ../shell/ev-window.c:1905
+msgid "Failed to reload document."
+msgstr ""
+
+#: ../shell/ev-window.c:2057
+msgid "Open Document"
+msgstr "Digeriñ un teul"
+
+#: ../shell/ev-window.c:2136
+#, c-format
+msgid "Couldn't create symlink “%s”: "
+msgstr ""
+
+#: ../shell/ev-window.c:2163
+msgid "Cannot open a copy."
+msgstr ""
+
+#: ../shell/ev-window.c:2399
+#, c-format
+msgid "Saving document to %s"
+msgstr ""
+
+#: ../shell/ev-window.c:2402
+#, c-format
+msgid "Saving attachment to %s"
+msgstr ""
+
+#: ../shell/ev-window.c:2405
+#, c-format
+msgid "Saving image to %s"
+msgstr ""
+
+#: ../shell/ev-window.c:2449
+#: ../shell/ev-window.c:2546
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Ar restr n'hall ket bezañ enrollet evel “%s”."
+
+#: ../shell/ev-window.c:2477
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "O pellgas an teul (%d%%)"
+
+#: ../shell/ev-window.c:2481
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:2485
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "O pellgas ar skeudenn (%d%%)"
+
+#: ../shell/ev-window.c:2607
+msgid "Save a Copy"
+msgstr "Enrollañ an eilad"
+
+#: ../shell/ev-window.c:2821
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../shell/ev-window.c:2934
+#, c-format
+msgid "Printing job “%s”"
+msgstr ""
+
+#: ../shell/ev-window.c:3141
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr ""
+
+#: ../shell/ev-window.c:3144
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+
+#: ../shell/ev-window.c:3156
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+
+#: ../shell/ev-window.c:3160
+msgid "Cancel _print and Close"
+msgstr ""
+
+#: ../shell/ev-window.c:3164
+msgid "Close _after Printing"
+msgstr ""
+
+#: ../shell/ev-window.c:3770
+msgid "Toolbar Editor"
+msgstr "Embanner ar varrenn ostilhoù"
+
+#: ../shell/ev-window.c:3901
+msgid "There was an error displaying help"
+msgstr "Bez e oa ur fazi en ur ziskouez ar skoazell"
+
+#: ../shell/ev-window.c:4131
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+
+#: ../shell/ev-window.c:4160
+msgid "Evince 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.\n"
+msgstr "Ur meziant digor eo Evince ; dasparzhet pe/ha daskemmet e vez dindan termenoù al Lañvaz Foran Hollek GNU evel ma'z eo bet embannet gant Diazezadenn ar Meziantoù Digor ; da lâret eo handelv 2 eus al lañvaz pe (evel ma plij deoc'h) ne vern pe handelv nevesoc'h.\n"
+
+#: ../shell/ev-window.c:4164
+msgid "Evince 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.\n"
+msgstr "Dasparzhet eo Evince gant ar spi e vo talvoudus met GANT GWARANT EBET ; hep ar gwarant enpleg a-fet TALVOUDEGEZH KENWERZHEL pe VARREGEZH EVIT UR PAL PERSONEL. Taolit ur sell war Lañvaz Foran Hollek GNU evit gouzout hiroc'h.\n"
+
+#: ../shell/ev-window.c:4168
+msgid "You should have received a copy of the GNU General Public License along with Evince; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr "Moarvat hoc'h eus bet un eilad eus al Lañvaz Foran Hollek GNU gant Evince ; ma n'hoc'h eus ket bet,skrivit da : Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA\n"
+
+#: ../shell/ev-window.c:4192
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4195
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 Aozerion Evince"
+
+#: ../shell/ev-window.c:4201
+msgid "translator-credits"
+msgstr ""
+"Jérémy Ar Floc'h <[email protected]>\n"
+"\n"
+"Launchpad Contributions:\n"
+" Denis https://launchpad.net/~bibar\n"
+" Jérémy Le Floc'h https://launchpad.net/~jeremy-lefloch"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4419
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d kavet ouzh ar bajenn-mañ"
+msgstr[1] "%d kavet ouzh ar bajenn-mañ"
+
+#: ../shell/ev-window.c:4427
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr ""
+
+#: ../shell/ev-window.c:4911
+msgid "_File"
+msgstr "_Restr"
+
+#: ../shell/ev-window.c:4912
+msgid "_Edit"
+msgstr "_Kemmañ"
+
+#: ../shell/ev-window.c:4913
+msgid "_View"
+msgstr "_Gwelout"
+
+#: ../shell/ev-window.c:4914
+msgid "_Go"
+msgstr "_Mont"
+
+#: ../shell/ev-window.c:4915
+msgid "_Help"
+msgstr "_Skoazell"
+
+#. File menu
+#: ../shell/ev-window.c:4918
+#: ../shell/ev-window.c:5096
+#: ../shell/ev-window.c:5175
+msgid "_Open..."
+msgstr "_Digeriñ..."
+
+#: ../shell/ev-window.c:4919
+#: ../shell/ev-window.c:5176
+msgid "Open an existing document"
+msgstr "Digeriñ un teul o vezañ anezhañ"
+
+#: ../shell/ev-window.c:4921
+msgid "Op_en a Copy"
+msgstr "Dig_eriñ an eilad"
+
+#: ../shell/ev-window.c:4922
+msgid "Open a copy of the current document in a new window"
+msgstr ""
+
+#: ../shell/ev-window.c:4924
+#: ../shell/ev-window.c:5098
+msgid "_Save a Copy..."
+msgstr "En_rollañ an eilad..."
+
+#: ../shell/ev-window.c:4925
+msgid "Save a copy of the current document"
+msgstr ""
+
+#: ../shell/ev-window.c:4927
+msgid "Page Set_up..."
+msgstr "Arventenniñ ar bajennad..."
+
+#: ../shell/ev-window.c:4928
+msgid "Setup the page settings for printing"
+msgstr ""
+
+#: ../shell/ev-window.c:4930
+msgid "_Print..."
+msgstr "_Moullañ"
+
+#: ../shell/ev-window.c:4933
+msgid "P_roperties"
+msgstr "Perzhioù"
+
+#: ../shell/ev-window.c:4941
+msgid "Select _All"
+msgstr "Diuz pep tra"
+
+#: ../shell/ev-window.c:4943
+msgid "_Find..."
+msgstr "_Kavout..."
+
+#: ../shell/ev-window.c:4944
+msgid "Find a word or phrase in the document"
+msgstr "Klask ur gêr pe ur gomzenn en teul-mañ"
+
+#: ../shell/ev-window.c:4950
+msgid "T_oolbar"
+msgstr "Barenn ostilhoù"
+
+#: ../shell/ev-window.c:4952
+msgid "Rotate _Left"
+msgstr ""
+
+#: ../shell/ev-window.c:4954
+msgid "Rotate _Right"
+msgstr ""
+
+#: ../shell/ev-window.c:4964
+msgid "_Reload"
+msgstr "_Adkargañ"
+
+#: ../shell/ev-window.c:4965
+msgid "Reload the document"
+msgstr "Adkargañ an teul"
+
+#: ../shell/ev-window.c:4968
+msgid "Auto_scroll"
+msgstr "em_zibunañ"
+
+#: ../shell/ev-window.c:4978
+msgid "_First Page"
+msgstr "_Pajenn gentañ"
+
+#: ../shell/ev-window.c:4979
+msgid "Go to the first page"
+msgstr "Mont da pajenn gentañ"
+
+#: ../shell/ev-window.c:4981
+msgid "_Last Page"
+msgstr "Pajennad diwe_zhañ"
+
+#: ../shell/ev-window.c:4982
+msgid "Go to the last page"
+msgstr "Mont d'ar bajenn diwezhañ"
+
+#. Help menu
+#: ../shell/ev-window.c:4986
+msgid "_Contents"
+msgstr "_Endalc'hadoù"
+
+#: ../shell/ev-window.c:4989
+msgid "_About"
+msgstr "_A-zivout"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4993
+msgid "Leave Fullscreen"
+msgstr ""
+
+#: ../shell/ev-window.c:4994
+msgid "Leave fullscreen mode"
+msgstr ""
+
+#: ../shell/ev-window.c:4996
+#, fuzzy
+msgid "Start Presentation"
+msgstr "Kregiñ gant ar kinnigadenn"
+
+#: ../shell/ev-window.c:4997
+#, fuzzy
+msgid "Start a presentation"
+msgstr "Kregiñ gant ur kinnigadenn"
+
+#. View Menu
+#: ../shell/ev-window.c:5052
+msgid "_Toolbar"
+msgstr "_Barrenn ostilhoù"
+
+#: ../shell/ev-window.c:5053
+msgid "Show or hide the toolbar"
+msgstr "Diskouez pe kuzhat ar barrenn ostilhoù"
+
+#: ../shell/ev-window.c:5055
+msgid "Side _Pane"
+msgstr "Barrenn gostez"
+
+#: ../shell/ev-window.c:5056
+msgid "Show or hide the side pane"
+msgstr "Diskouez pe kuzhat ar barrenn gostez"
+
+#: ../shell/ev-window.c:5058
+msgid "_Continuous"
+msgstr "_Kenderc'hel"
+
+#: ../shell/ev-window.c:5059
+msgid "Show the entire document"
+msgstr "Diskouez an teul a-bezh"
+
+#: ../shell/ev-window.c:5061
+msgid "_Dual"
+msgstr ""
+
+#: ../shell/ev-window.c:5062
+msgid "Show two pages at once"
+msgstr ""
+
+#: ../shell/ev-window.c:5064
+msgid "_Fullscreen"
+msgstr "_Skrammad a-bezh"
+
+#: ../shell/ev-window.c:5065
+msgid "Expand the window to fill the screen"
+msgstr ""
+
+#: ../shell/ev-window.c:5067
+msgid "Pre_sentation"
+msgstr "Kinni_gadenn"
+
+#: ../shell/ev-window.c:5068
+msgid "Run document as a presentation"
+msgstr ""
+
+#. Links
+#: ../shell/ev-window.c:5081
+msgid "_Open Link"
+msgstr "_Digeriñ an ere"
+
+#: ../shell/ev-window.c:5083
+msgid "_Go To"
+msgstr "_Mont da"
+
+#: ../shell/ev-window.c:5085
+msgid "Open in New _Window"
+msgstr "Digeriñ er pr_enestr nevez"
+
+#: ../shell/ev-window.c:5087
+msgid "_Copy Link Address"
+msgstr "_Eilañ lec'hiadur an ere"
+
+#: ../shell/ev-window.c:5089
+msgid "_Save Image As..."
+msgstr "_Enrollañ ar skeudenn dindan..."
+
+#: ../shell/ev-window.c:5091
+msgid "Copy _Image"
+msgstr "Eilañ ar skeudenn"
+
+#: ../shell/ev-window.c:5149
+msgid "Zoom"
+msgstr "Zoum"
+
+#: ../shell/ev-window.c:5151
+msgid "Adjust the zoom level"
+msgstr "Kempenn live ar zoumañ"
+
+#: ../shell/ev-window.c:5161
+msgid "Navigation"
+msgstr "Merdeiñ"
+
+#: ../shell/ev-window.c:5163
+msgid "Back"
+msgstr "Kein"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5166
+msgid "Move across visited pages"
+msgstr ""
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5196
+msgid "Previous"
+msgstr "A-raok"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5201
+msgid "Next"
+msgstr "War lerc'h"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5205
+msgid "Zoom In"
+msgstr "Zoum brasaat"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5209
+msgid "Zoom Out"
+msgstr "Zoum bihanaat"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5217
+msgid "Fit Width"
+msgstr ""
+
+#: ../shell/ev-window.c:5384
+#: ../shell/ev-window.c:5400
+msgid "Unable to launch external application."
+msgstr ""
+
+#: ../shell/ev-window.c:5439
+msgid "Unable to open external link"
+msgstr ""
+
+#: ../shell/ev-window.c:5595
+msgid "Couldn't find appropriate format to save image"
+msgstr ""
+
+#: ../shell/ev-window.c:5634
+msgid "The image could not be saved."
+msgstr ""
+
+#: ../shell/ev-window.c:5666
+msgid "Save Image"
+msgstr "Enrollañ ar skeudenn"
+
+#: ../shell/ev-window.c:5733
+msgid "Unable to open attachment"
+msgstr ""
+
+#: ../shell/ev-window.c:5784
+msgid "The attachment could not be saved."
+msgstr ""
+
+#: ../shell/ev-window.c:5829
+msgid "Save Attachment"
+msgstr ""
+
+#: ../shell/ev-window-title.c:163
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - Ger-tremen·rekis"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "Dre an askouezhadenn"
+
+#: ../shell/main.c:73
+#: ../shell/main.c:436
+msgid "MATE Document Viewer"
+msgstr "Alberzer teulioù MATE"
+
+#: ../shell/main.c:81
+msgid "The page of the document to display."
+msgstr ""
+
+#: ../shell/main.c:81
+msgid "PAGE"
+msgstr "PAJENN"
+
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr "Loc'h Evince e mod skrammad a-bezh"
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr "Loc'h Evince e mod kinngadenn"
+
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr ""
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr ""
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "HEDAD"
+
+#: ../shell/main.c:89
+msgid "[FILE...]"
+msgstr "[RESTR...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid "Boolean options available, true enables thumbnailing and false disables the creation of new thumbnails"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid "Valid command plus arguments for the PDF Document thumbnailer. See caja thumbnailer documentation for more information."
+msgstr ""
+
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 00000000..10241743
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,2211 @@
+# Catalan translation of evince.
+# Copyright © 2005, 2006 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince package.
+# Gil Forcada <[email protected]>, 2005, 2006, 2007, 2008, 2009, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-06 13:32+0100\n"
+"PO-Revision-Date: 2010-04-01 21:47+0200\n"
+"Last-Translator: Gil Forcada <[email protected]>\n"
+"Language-Team: Catalan <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"S'ha produït un error en executar l'ordre «%s» per poder descomprimir el "
+"còmic: %s"
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "No s'ha pogut descomprimir el còmic amb l'ordre «%s»."
+
+#: ../backend/comics/comics-document.c:183
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "L'ordre «%s» no ha finalitzat correctament."
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "El tipus MIME no és d'un còmic: %s"
+
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"No es pot trobar una ordre adequada per descomprimir aquest tipus de còmic"
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Tipus MIME desconegut"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "El fitxer està malmès"
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "No hi ha cap fitxer a l'arxiu"
+
+#: ../backend/comics/comics-document.c:474
+#, c-format
+msgid "No images found in archive %s"
+msgstr "No s'han trobat imatges a l'arxiu %s"
+
+#: ../backend/comics/comics-document.c:718
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "S'ha produït un error en suprimir «%s»."
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr "Error %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Còmics"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "El document DjVu té un format incorrecte"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"El document és format per diversos fitxers, un o més dels quals són "
+"inaccessibles."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Documents DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "El document DVI té un format incorrecte"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Documents DVI"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr "Aquest treball és de domini públic"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "Sí"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "No"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "Tipus 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "Tipus 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "Tipus 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "Tipus 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "Tipus 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "Tipus de lletra desconegut"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "Sense nom"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "Subconjunt incrustat"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "Incrustat"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "No incrustat"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Documents PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Document invàlid"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Diapositives de l'Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Cap error"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "No hi ha prou memòria"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "No s'ha pogut trobar la signatura ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Fitxer ZIP no vàlid"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Encara no es poden fer servir arxius ZIP amb múltiples fitxers"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "No s'ha pogut obrir el fitxer"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "No s'han pogut llegir les dades del fitxer"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "No s'ha pogut trobar el fitxer a l'arxiu ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Error desconegut"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "No s'ha pogut carregar el document «%s»"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "No s'ha pogut desar el document «%s»"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Documents PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "No s'ha pogut desar l'adjunció «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "No s'ha pogut obrir l'adjunció «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "No s'ha pogut obrir l'adjunció «%s»"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Encara no es pot gestionar el tipus de fitxer %s (%s)"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Tots els documents"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Tots els fitxers"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "No s'ha pogut crear el fitxer temporal: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "No s'ha pogut crear el directori temporal: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "El fitxer no és un fitxer .desktop vàlid"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Es desconeix la versió «%s» del fitxer d'escriptori"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "S'està iniciant %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "L'aplicació no accepta documents des de la línia d'ordres"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Opció d'execució desconeguda: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"No es pot passar els URI del document a una entrada d'escriptori del tipus "
+"«Type=Link»"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "No és un element executable"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Inhabilita la connexió al gestor de sessions"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Especifica el fitxer que conté la configuració desada"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "FITXER"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Especifica l'identificador de gestió de sessió"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "Identificador"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opcions de gestió de la sessió:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Mostra les opcions de gestió de la sessió"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "Mostra «_%s»"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "_Mou a la barra d'eines"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "Mou l'element seleccionat a la barra d'eines"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "Sup_rimeix de la barra d'eines"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "Suprimeix l'element seleccionat de la barra d'eines"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "Sup_rimeix la barra d'eines"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "Suprimeix la barra d'eines seleccionada"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Separador"
+
+# FIXME
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+msgid "Running in presentation mode"
+msgstr "S'està executant en mode de presentació"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5329
+msgid "Best Fit"
+msgstr "Millor ajust"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Ajusta a l'amplada de la pàgina"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4193
+#: ../shell/ev-window-title.c:149 ../shell/main.c:282
+#, c-format
+msgid "Document Viewer"
+msgstr "Visualitzador de documents"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Visualitzeu documents multi-pàgina"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "No facis cas de les restriccions del document"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"No facis cas de les restriccions del document, com les de còpia o "
+"d'impressió."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "Suprimeix el fitxer temporal"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "Imprimeix el fitxer de configuració"
+
+#: ../previewer/ev-previewer.c:143 ../previewer/ev-previewer.c:177
+msgid "MATE Document Previewer"
+msgstr "Visualitzador de documents del MATE"
+
+#: ../previewer/ev-previewer-window.c:90 ../shell/ev-window.c:3005
+msgid "Failed to print document"
+msgstr "No s'ha pogut imprimir el document"
+
+#: ../previewer/ev-previewer-window.c:204
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "No s'ha pogut trobar la impressora «%s»"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:248 ../shell/ev-window.c:5078
+msgid "_Previous Page"
+msgstr "Pàgina _anterior"
+
+#: ../previewer/ev-previewer-window.c:249 ../shell/ev-window.c:5079
+msgid "Go to the previous page"
+msgstr "Vés a la pàgina anterior"
+
+#: ../previewer/ev-previewer-window.c:251 ../shell/ev-window.c:5081
+msgid "_Next Page"
+msgstr "Pàgina _següent"
+
+#: ../previewer/ev-previewer-window.c:252 ../shell/ev-window.c:5082
+msgid "Go to the next page"
+msgstr "Vés a la pàgina següent"
+
+#: ../previewer/ev-previewer-window.c:255 ../shell/ev-window.c:5065
+msgid "Enlarge the document"
+msgstr "Amplia el document"
+
+#: ../previewer/ev-previewer-window.c:258 ../shell/ev-window.c:5068
+msgid "Shrink the document"
+msgstr "Encongeix el document"
+
+#: ../previewer/ev-previewer-window.c:261 ../libview/ev-print-operation.c:1315
+msgid "Print"
+msgstr "Imprimeix"
+
+#: ../previewer/ev-previewer-window.c:262 ../shell/ev-window.c:5036
+msgid "Print this document"
+msgstr "Imprimeix el document"
+
+#: ../previewer/ev-previewer-window.c:268 ../shell/ev-window.c:5180
+msgid "_Best Fit"
+msgstr "_Millor ajust"
+
+#: ../previewer/ev-previewer-window.c:269 ../shell/ev-window.c:5181
+msgid "Make the current document fill the window"
+msgstr "Fes que el document ompli la finestra"
+
+#: ../previewer/ev-previewer-window.c:271 ../shell/ev-window.c:5183
+msgid "Fit Page _Width"
+msgstr "Aj_usta a l'amplada de la pàgina"
+
+#: ../previewer/ev-previewer-window.c:272 ../shell/ev-window.c:5184
+msgid "Make the current document fill the window width"
+msgstr "Fes que el document encaixi a l'amplada de la finestra"
+
+#: ../previewer/ev-previewer-window.c:455 ../shell/ev-window.c:5251
+msgid "Page"
+msgstr "Pàgina"
+
+#: ../previewer/ev-previewer-window.c:456 ../shell/ev-window.c:5252
+msgid "Select Page"
+msgstr "Selecciona la pàgina"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Document"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Títol:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Ubicació:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Assumpte:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "Autor:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Paraules clau:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Productor:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Creador:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Creat:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Modificat:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Nombre de pàgines:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimitzat:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Format:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Seguretat:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Mida del paper:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1896
+msgid "None"
+msgstr "Cap"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:284
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:288
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f polzades"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, vertical (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, apaïsat (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d de %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "de %d"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:341
+msgid "Preparing to print…"
+msgstr "S'està preparant per imprimir…"
+
+#: ../libview/ev-print-operation.c:343
+msgid "Finishing…"
+msgstr "S'està acabant…"
+
+#: ../libview/ev-print-operation.c:345
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "S'està imprimint la pàgina %d de %d…"
+
+#: ../libview/ev-print-operation.c:1169
+msgid "Printing is not supported on this printer."
+msgstr "No es pot imprimir en aquesta impressora."
+
+#: ../libview/ev-print-operation.c:1234
+msgid "Invalid page selection"
+msgstr "La selecció de pàgines no és vàlida"
+
+#: ../libview/ev-print-operation.c:1235
+msgid "Warning"
+msgstr "Avís"
+
+#: ../libview/ev-print-operation.c:1237
+msgid "Your print range selection does not include any pages"
+msgstr "No hi ha cap pàgina en el rang d'impressió"
+
+#: ../libview/ev-print-operation.c:1891
+msgid "Page Scaling:"
+msgstr "Escalat de la pàgina:"
+
+#: ../libview/ev-print-operation.c:1897
+msgid "Shrink to Printable Area"
+msgstr "Redueix a l'àrea d'impressió"
+
+#: ../libview/ev-print-operation.c:1898
+msgid "Fit to Printable Area"
+msgstr "Ajusta a l'àrea d'impressió"
+
+#: ../libview/ev-print-operation.c:1901
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Escala les pàgines del document per ajustar-les a la pàgina d'impressió "
+"seleccionada. Seleccioneu una de les opcions següents:\n"
+"\n"
+"• «Cap»: No es fa cap escalat.\n"
+"\n"
+"• «Redueix a l'àrea d'impressió»: Es redueixen les pàgines més grans que "
+"l'àrea d'impressió per ajustar-se a l'àrea de la pàgina d'impressió.\n"
+"\n"
+"• «Ajusta a l'àrea d'impressió»: S'amplien o es redueixen segons convingui "
+"per ajustar-se a l'àrea de la pàgina d'impressió.\n"
+
+#: ../libview/ev-print-operation.c:1913
+msgid "Auto Rotate and Center"
+msgstr "Gira automàticament i centra"
+
+#: ../libview/ev-print-operation.c:1916
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Gira l'orientació de la pàgina d'impressió de cada pàgina perquè coincideixi "
+"amb cada pàgina del document. Es centraran les pàgines respecte la pàgina "
+"d'impressió."
+
+#: ../libview/ev-print-operation.c:1921
+msgid "Select page size using document page size"
+msgstr "Seleccioneu la mida de la pàgina amb la mida de la pàgina del document"
+
+#: ../libview/ev-print-operation.c:1923
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Quan s'habiliti cada pàgina s'imprimirà amb la mateixa mida de paper que la "
+"pàgina del document."
+
+#: ../libview/ev-print-operation.c:2005
+msgid "Page Handling"
+msgstr "Gestió de la pàgina"
+
+#: ../libview/ev-jobs.c:1434
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "No s'ha pogut imprimir la pàgina %d: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Desplaça cap amunt"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Desplaça cap avall"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Desplaça la visualització cap amunt"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Desplaça la visualització cap avall"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Visualització del document"
+
+#: ../libview/ev-view-presentation.c:669
+msgid "Jump to page:"
+msgstr "Salta a la pàgina:"
+
+#: ../libview/ev-view-presentation.c:979
+msgid "End of presentation. Click to exit."
+msgstr "Final de la presentació. Feu clic per sortir."
+
+#: ../libview/ev-view.c:1724
+msgid "Go to first page"
+msgstr "Vés a la primera pàgina"
+
+#: ../libview/ev-view.c:1726
+msgid "Go to previous page"
+msgstr "Vés a la pàgina anterior"
+
+#: ../libview/ev-view.c:1728
+msgid "Go to next page"
+msgstr "Vés a la pàgina següent"
+
+#: ../libview/ev-view.c:1730
+msgid "Go to last page"
+msgstr "Vés a l'última pàgina"
+
+#: ../libview/ev-view.c:1732
+msgid "Go to page"
+msgstr "Vés a la pàgina"
+
+#: ../libview/ev-view.c:1734
+msgid "Find"
+msgstr "Cerca"
+
+#: ../libview/ev-view.c:1762
+#, c-format
+msgid "Go to page %s"
+msgstr "Vés a la pàgina %s"
+
+#: ../libview/ev-view.c:1768
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Vés a %s en el fitxer «%s»"
+
+#: ../libview/ev-view.c:1771
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Vés al fitxer «%s»"
+
+#: ../libview/ev-view.c:1779
+#, c-format
+msgid "Launch %s"
+msgstr "Engega %s"
+
+#: ../libview/ev-view.c:3923 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "S'està carregant…"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Cerca:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5053
+msgid "Find Pre_vious"
+msgstr "Cerca l'_anterior"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Cerca l'anterior ocurrència de la cadena de cerca"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5051
+msgid "Find Ne_xt"
+msgstr "Cerca el _següent"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Cerca la següent ocurrència de cadena de cerca"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Distingeix entre majúscules i minúscules"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Commuta a una cerca que distingeixi entre majúscules i minúscules"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Contrasenya per al document %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "S'està convertint %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "S'han convertit %d de %d documents"
+
+#: ../shell/ev-convert-metadata.c:164 ../shell/ev-convert-metadata.c:179
+msgid "Converting metadata"
+msgstr "S'estan convertint les metadades"
+
+#: ../shell/ev-convert-metadata.c:185
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"L'Evince ha canviat el format de les metadades que utilitzava i s'han de "
+"migrar. Si cancel·leu la migració el magatzem de metadades no funcionarà."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Obre un document utilitzat recentment"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Aquest document està protegit i només es pot llegir si s'introdueix la "
+"contrasenya correcta."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "_Desbloca el document"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Introduïu la contrasenya"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Cal una contrasenya"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"El document «%s» està protegit i cal una contrasenya per poder-lo obrir."
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Contrasenya:"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "Oblida la contrasenya _immediatament"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _log out"
+msgstr "Recorda la contrasenya durant aquesta _sessió"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "_Recorda-la per sempre"
+
+#: ../shell/ev-properties-dialog.c:58
+msgid "Properties"
+msgstr "Propietats"
+
+#: ../shell/ev-properties-dialog.c:92
+msgid "General"
+msgstr "General"
+
+#: ../shell/ev-properties-dialog.c:102
+msgid "Fonts"
+msgstr "Tipus de lletra"
+
+#: ../shell/ev-properties-dialog.c:115
+msgid "Document License"
+msgstr "Llicència del document"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Tipus de lletra"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "S'està recollint informació del tipus de lletra… %3d%%"
+
+#: ../shell/ev-properties-license.c:138
+msgid "Usage terms"
+msgstr "Termes d'ús"
+
+#: ../shell/ev-properties-license.c:144
+msgid "Text License"
+msgstr "Llicència del text"
+
+#: ../shell/ev-properties-license.c:150
+msgid "Further Information"
+msgstr "Més informació"
+
+#: ../shell/ev-sidebar-attachments.c:712
+msgid "Attachments"
+msgstr "Adjuncions"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Capes"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Imprimeix…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Índex"
+
+#: ../shell/ev-sidebar-thumbnails.c:956
+msgid "Thumbnails"
+msgstr "Miniatures"
+
+#: ../shell/ev-window.c:839
+#, c-format
+msgid "Page %s — %s"
+msgstr "Pàgina %s — %s"
+
+#: ../shell/ev-window.c:841
+#, c-format
+msgid "Page %s"
+msgstr "Pàgina %s"
+
+#: ../shell/ev-window.c:1285
+msgid "The document contains no pages"
+msgstr "El document no conté cap pàgina"
+
+#: ../shell/ev-window.c:1288
+msgid "The document contains only empty pages"
+msgstr "El document només conté pàgines buides"
+
+#: ../shell/ev-window.c:1482 ../shell/ev-window.c:1648
+msgid "Unable to open document"
+msgstr "No es pot obrir el document"
+
+#: ../shell/ev-window.c:1619
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "S'està carregant el document des de «%s»"
+
+#: ../shell/ev-window.c:1761 ../shell/ev-window.c:2038
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "S'està baixant el document (%d%%)"
+
+#: ../shell/ev-window.c:1794
+msgid "Failed to load remote file."
+msgstr "No s'ha pogut carregar el fitxer remot."
+
+#: ../shell/ev-window.c:1982
+#, c-format
+msgid "Reloading document from %s"
+msgstr "S'està tornant a carregar el document des de %s"
+
+#: ../shell/ev-window.c:2014
+msgid "Failed to reload document."
+msgstr "No s'ha pogut tornar a carregar el document."
+
+#: ../shell/ev-window.c:2169
+msgid "Open Document"
+msgstr "Obre un document"
+
+#: ../shell/ev-window.c:2433
+#, c-format
+msgid "Saving document to %s"
+msgstr "S'està desant el document a %s"
+
+#: ../shell/ev-window.c:2436
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "S'està desant l'adjunció a %s"
+
+#: ../shell/ev-window.c:2439
+#, c-format
+msgid "Saving image to %s"
+msgstr "S'està desant la imatge %s"
+
+#: ../shell/ev-window.c:2483 ../shell/ev-window.c:2583
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "No s'ha pogut desar el fitxer com a «%s»."
+
+#: ../shell/ev-window.c:2514
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "S'està pujant el document (%d%%)"
+
+#: ../shell/ev-window.c:2518
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "S'està pujant l'adjunció (%d%%)"
+
+#: ../shell/ev-window.c:2522
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "S'està pujant la imatge (%d%%)"
+
+#: ../shell/ev-window.c:2644
+msgid "Save a Copy"
+msgstr "Desa'n una còpia"
+
+#: ../shell/ev-window.c:2949
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d tasca pendent a la cua"
+msgstr[1] "%d tasques pendents a la cua"
+
+#: ../shell/ev-window.c:3062
+#, c-format
+msgid "Printing job “%s”"
+msgstr "S'està imprimint la tasca «%s»"
+
+#: ../shell/ev-window.c:3265
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Voleu esperar per tancar fins que s'acabi la tasca d'impressió «%s»?"
+
+#: ../shell/ev-window.c:3268
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Hi ha %d tasques d'impressió actives. Voleu esperar per tancar fins que "
+"s'acabi d'imprimir?"
+
+#: ../shell/ev-window.c:3280
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Si tanqueu la finestra, no s'imprimiran les tasques pendents."
+
+#: ../shell/ev-window.c:3284
+msgid "Cancel _print and Close"
+msgstr "Cancel·la la im_pressió i tanca"
+
+#: ../shell/ev-window.c:3288
+msgid "Close _after Printing"
+msgstr "Tanca després d'im_primir"
+
+#: ../shell/ev-window.c:3846
+msgid "Toolbar Editor"
+msgstr "Editor de la barra d'eines"
+
+#: ../shell/ev-window.c:3978
+msgid "There was an error displaying help"
+msgstr "S'ha produït un error en mostrar l'ajuda"
+
+#: ../shell/ev-window.c:4189
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Visualitzador de documents.\n"
+"S'utilitza el %s (%s)"
+
+#: ../shell/ev-window.c:4220
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"L'Evince és programari lliure; podeu redistribuir-lo i/o modificar-lo sota "
+"els termes de la Llicència Pública General GNU tal com ha estat publicada "
+"per la Free Software Foundation; ja sigui la versió 2 de la Llicència o bé "
+"(si ho preferiu) qualsevol altra versió posterior.\n"
+
+#: ../shell/ev-window.c:4224
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"L'Evince es distribueix amb l'expectativa que serà útil, però SENSE CAP "
+"GARANTIA; ni tan sols la garantia implícita de COMERCIABILITAT o ADEQUACIÓ "
+"PER UN PROPÒSIT PARTICULAR. Vegeu la Llicència Pública General GNU per "
+"obtenir-ne més detalls.\n"
+
+#: ../shell/ev-window.c:4228
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Hauríeu d'haver rebut una còpia de la Llicència Pública General GNU "
+"juntament amb l'Evince; en cas contrari, escriviu a la Free Software "
+"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:4253
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4256
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Els autors de l'Evince"
+
+#: ../shell/ev-window.c:4262
+msgid "translator-credits"
+msgstr "Gil Forcada <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4531
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "N'hi ha %d en aquesta pàgina"
+msgstr[1] "N'hi ha %d en aquesta pàgina"
+
+#: ../shell/ev-window.c:4539
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Manca el %3d%% per cercar"
+
+#: ../shell/ev-window.c:5016
+msgid "_File"
+msgstr "_Fitxer"
+
+#: ../shell/ev-window.c:5017
+msgid "_Edit"
+msgstr "_Edita"
+
+#: ../shell/ev-window.c:5018
+msgid "_View"
+msgstr "_Visualitza"
+
+#: ../shell/ev-window.c:5019
+msgid "_Go"
+msgstr "Vé_s"
+
+#: ../shell/ev-window.c:5020
+msgid "_Help"
+msgstr "A_juda"
+
+#. File menu
+#: ../shell/ev-window.c:5023 ../shell/ev-window.c:5291
+msgid "_Open…"
+msgstr "_Obre…"
+
+#: ../shell/ev-window.c:5024 ../shell/ev-window.c:5292
+msgid "Open an existing document"
+msgstr "Obre un document existent"
+
+#: ../shell/ev-window.c:5026
+msgid "Op_en a Copy"
+msgstr "Obre'n una _còpia"
+
+#: ../shell/ev-window.c:5027
+msgid "Open a copy of the current document in a new window"
+msgstr "Obre una còpia del document actual en una finestra nova"
+
+#: ../shell/ev-window.c:5029
+msgid "_Save a Copy…"
+msgstr "Desa'n una còpia…"
+
+#: ../shell/ev-window.c:5030
+msgid "Save a copy of the current document"
+msgstr "Desa una còpia del document actual"
+
+#: ../shell/ev-window.c:5032
+msgid "Page Set_up…"
+msgstr "_Configuració de la pàgina…"
+
+#: ../shell/ev-window.c:5033
+msgid "Set up the page settings for printing"
+msgstr "Configureu els paràmetres de pàgina per a la impressió"
+
+#: ../shell/ev-window.c:5035
+msgid "_Print…"
+msgstr "_Imprimeix…"
+
+#: ../shell/ev-window.c:5038
+msgid "P_roperties"
+msgstr "_Propietats"
+
+#: ../shell/ev-window.c:5046
+msgid "Select _All"
+msgstr "Selecciona-ho _tot"
+
+#: ../shell/ev-window.c:5048
+msgid "_Find…"
+msgstr "_Cerca…"
+
+#: ../shell/ev-window.c:5049
+msgid "Find a word or phrase in the document"
+msgstr "Cerca una paraula o frase al document"
+
+#: ../shell/ev-window.c:5055
+msgid "T_oolbar"
+msgstr "_Barra d'eines"
+
+#: ../shell/ev-window.c:5057
+msgid "Rotate _Left"
+msgstr "Gira a l'_esquerra"
+
+#: ../shell/ev-window.c:5059
+msgid "Rotate _Right"
+msgstr "Gira a la _dreta"
+
+#: ../shell/ev-window.c:5070
+msgid "_Reload"
+msgstr "Ac_tualitza"
+
+#: ../shell/ev-window.c:5071
+msgid "Reload the document"
+msgstr "Actualitza el document"
+
+#: ../shell/ev-window.c:5074
+msgid "Auto_scroll"
+msgstr "Desplaça _automàticament"
+
+#: ../shell/ev-window.c:5084
+msgid "_First Page"
+msgstr "_Primera pàgina"
+
+#: ../shell/ev-window.c:5085
+msgid "Go to the first page"
+msgstr "Vés a la primera pàgina"
+
+#: ../shell/ev-window.c:5087
+msgid "_Last Page"
+msgstr "Úl_tima pàgina"
+
+#: ../shell/ev-window.c:5088
+msgid "Go to the last page"
+msgstr "Vés a l'última pàgina"
+
+#. Help menu
+#: ../shell/ev-window.c:5092
+msgid "_Contents"
+msgstr "_Continguts"
+
+#: ../shell/ev-window.c:5095
+msgid "_About"
+msgstr "_Quant a"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5099
+msgid "Leave Fullscreen"
+msgstr "Surt de la pantalla completa"
+
+#: ../shell/ev-window.c:5100
+msgid "Leave fullscreen mode"
+msgstr "Surt de la pantalla completa"
+
+#: ../shell/ev-window.c:5102
+msgid "Start Presentation"
+msgstr "Inicia la presentació"
+
+#: ../shell/ev-window.c:5103
+msgid "Start a presentation"
+msgstr "Inicia una presentació"
+
+#. View Menu
+#: ../shell/ev-window.c:5162
+msgid "_Toolbar"
+msgstr "Barra d'_eines"
+
+#: ../shell/ev-window.c:5163
+msgid "Show or hide the toolbar"
+msgstr "Mostra o amaga la barra d'eines"
+
+#: ../shell/ev-window.c:5165
+msgid "Side _Pane"
+msgstr "Barra _lateral"
+
+#: ../shell/ev-window.c:5166
+msgid "Show or hide the side pane"
+msgstr "Mostra o amaga la barra lateral"
+
+#: ../shell/ev-window.c:5168
+msgid "_Continuous"
+msgstr "C_ontinu"
+
+#: ../shell/ev-window.c:5169
+msgid "Show the entire document"
+msgstr "Mostra el document sencer"
+
+#: ../shell/ev-window.c:5171
+msgid "_Dual"
+msgstr "_Dual"
+
+#: ../shell/ev-window.c:5172
+msgid "Show two pages at once"
+msgstr "Mostra dues pàgines alhora"
+
+#: ../shell/ev-window.c:5174
+msgid "_Fullscreen"
+msgstr "Pantalla _completa"
+
+#: ../shell/ev-window.c:5175
+msgid "Expand the window to fill the screen"
+msgstr "Expandeix la finestra fins a omplir la pantalla"
+
+#: ../shell/ev-window.c:5177
+msgid "Pre_sentation"
+msgstr "_Presentació"
+
+# FIXME
+#: ../shell/ev-window.c:5178
+msgid "Run document as a presentation"
+msgstr "Mostra el document com a una presentació"
+
+#: ../shell/ev-window.c:5186
+msgid "_Inverted Colors"
+msgstr "_Inverteix els colors"
+
+#: ../shell/ev-window.c:5187
+msgid "Show page contents with the colors inverted"
+msgstr "Mostra el contingut de la pàgina amb els colors invertits"
+
+#. Links
+#: ../shell/ev-window.c:5195
+msgid "_Open Link"
+msgstr "_Obre l'enllaç"
+
+#: ../shell/ev-window.c:5197
+msgid "_Go To"
+msgstr "Vé_s a"
+
+#: ../shell/ev-window.c:5199
+msgid "Open in New _Window"
+msgstr "Obre en una _finestra nova"
+
+#: ../shell/ev-window.c:5201
+msgid "_Copy Link Address"
+msgstr "_Copia l'adreça de l'enllaç"
+
+#: ../shell/ev-window.c:5203
+msgid "_Save Image As…"
+msgstr "_Anomena i desa la imatge…"
+
+#: ../shell/ev-window.c:5205
+msgid "Copy _Image"
+msgstr "Copia la _imatge"
+
+#: ../shell/ev-window.c:5210
+msgid "_Open Attachment"
+msgstr "_Obre l'adjunció"
+
+#: ../shell/ev-window.c:5212
+msgid "_Save Attachment As…"
+msgstr "_Desa l'adjunció com a…"
+
+#: ../shell/ev-window.c:5265
+msgid "Zoom"
+msgstr "Ampliació"
+
+#: ../shell/ev-window.c:5267
+msgid "Adjust the zoom level"
+msgstr "Ajusta el nivell de l'ampliació"
+
+#: ../shell/ev-window.c:5277
+msgid "Navigation"
+msgstr "Navegació"
+
+#: ../shell/ev-window.c:5279
+msgid "Back"
+msgstr "Enrere"
+
+# "Salta't les pàgines visitades"? (josep)
+#. translators: this is the history action
+#: ../shell/ev-window.c:5282
+msgid "Move across visited pages"
+msgstr "Creua les pàgines visitades"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5312
+msgid "Previous"
+msgstr "Anterior"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5317
+msgid "Next"
+msgstr "Següent"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5321
+msgid "Zoom In"
+msgstr "Apropa"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5325
+msgid "Zoom Out"
+msgstr "Allunya"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5333
+msgid "Fit Width"
+msgstr "Encaixa a l'amplada"
+
+#: ../shell/ev-window.c:5494 ../shell/ev-window.c:5511
+msgid "Unable to launch external application."
+msgstr "No s'ha pogut executar l'aplicació externa."
+
+#: ../shell/ev-window.c:5568
+msgid "Unable to open external link"
+msgstr "No s'ha pogut obrir l'enllaç extern"
+
+#: ../shell/ev-window.c:5735
+msgid "Couldn't find appropriate format to save image"
+msgstr "No s'ha trobat cap format adequat per desar la imatge"
+
+#: ../shell/ev-window.c:5777
+msgid "The image could not be saved."
+msgstr "No s'ha pogut desar la imatge."
+
+#: ../shell/ev-window.c:5809
+msgid "Save Image"
+msgstr "Desa la imatge"
+
+#: ../shell/ev-window.c:5876
+msgid "Unable to open attachment"
+msgstr "No s'ha pogut obrir l'adjunció"
+
+#: ../shell/ev-window.c:5929
+msgid "The attachment could not be saved."
+msgstr "No s'ha pogut desar l'adjunció."
+
+#: ../shell/ev-window.c:5974
+msgid "Save Attachment"
+msgstr "Desa l'adjunció"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Necessita contrasenya"
+
+#: ../shell/ev-utils.c:315
+msgid "By extension"
+msgstr "Per extensió"
+
+#: ../shell/main.c:70 ../shell/main.c:246
+msgid "MATE Document Viewer"
+msgstr "Visualitzador de documents del MATE"
+
+#: ../shell/main.c:78
+msgid "The page of the document to display."
+msgstr "La pàgina del document a mostrar."
+
+#: ../shell/main.c:78
+msgid "PAGE"
+msgstr "PÀGINA"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Executa l'Evince en mode pantalla completa"
+
+# FIXME
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Executa l'Evince en mode presentació"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Executa l'Evince com a previsualitzador"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "La paraula o frase que es vol cercar en el document"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "CADENA"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FITXER…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Opcions booleanes disponibles: «true» (cert) habilita les miniatures i "
+"«false» (fals) inhabilita la creació de noves miniatures"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Habilita les miniatures per als documents PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Ordre de miniatura per als documents PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Ordre vàlida amb arguments addicionals per al miniaturitzador de documents "
+"PDF. Per a més informació vegeu la documentació del miniaturitzador del "
+"Caja."
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "El document DJVU té un format incorrecte"
+
+#~ msgid "Print..."
+#~ msgstr "Imprimeix..."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Desa'n una còpia..."
+
+#~ msgid "_Print..."
+#~ msgstr "_Imprimeix..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Cerca..."
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "No s'ha pogut crear el fitxer «%s»: %s"
+
+#~ msgid "Search string"
+#~ msgstr "Cerca una cadena"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "El nom de la cadena a cercar"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Distingeix entre majúscules i minúscules"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "Cert per a una cerca que distingeixi majúscules de minúscules"
+
+#~ msgid "Highlight color"
+#~ msgstr "Color del ressaltat"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Color del ressaltat per a totes les coincidències"
+
+#~ msgid "Current color"
+#~ msgstr "Color actual"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Color del ressaltat de la coincidència actual"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "Voleu recuperar els documents que tenieu oberts?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Sembla que l'última vegada que es va executar l'Evince va finalitzar "
+#~ "sobtadament. Tot i així, podeu recuperar els documents oberts."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_No els recuperis"
+
+#~ msgid "_Recover"
+#~ msgstr "_Recupera'ls"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Recuperació de documents"
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "No s'ha pogut crear l'enllaç simbòlic «%s»: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "No se n'ha pogut obrir una còpia."
+
+#~ msgid "Co_nnect"
+#~ msgstr "Co_nnecta"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "Connecta _anònimament"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Connecta com a u_suari:"
+
+#~ msgid "_Username:"
+#~ msgstr "Nom d'_usuari:"
+
+#~ msgid "_Domain:"
+#~ msgstr "_Domini:"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "_Oblida la contrasenya immediatament"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_Recorda la contrasenya durant aquesta sessió"
+
+#~ msgid "_Remember forever"
+#~ msgstr "_Recorda-la per sempre"
+
+#~ msgid "File not available"
+#~ msgstr "El fitxer no està disponible"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "La gestió de fitxers remots no està implementada"
+
+#~ msgid "Find Previous"
+#~ msgstr "Cerca l'anterior"
+
+#~ msgid "Find Next"
+#~ msgstr "Cerca la següent"
+
+#~ msgid "Password Entry"
+#~ msgstr "Entrada de la contrasenya"
+
+#~ msgid "Remember password for this session"
+#~ msgstr "Recorda la contrasenya durant aquesta sessió"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "Desa la contrasenya a l'anell de claus"
+
+#~ msgid "<b>Title:</b>"
+#~ msgstr "<b>Títol:</b>"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f in"
+
+#~ msgid "Incorrect password"
+#~ msgstr "Contrasenya errònia"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Visualitzador de documents Evince"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "Carta"
+
+#~ msgid "Tabloid"
+#~ msgstr "Tabloide"
+
+#~ msgid "Ledger"
+#~ msgstr "Llibre de comptes"
+
+#~ msgid "Legal"
+#~ msgstr "Legal"
+
+#~ msgid "Statement"
+#~ msgstr "Declaració"
+
+#~ msgid "Executive"
+#~ msgstr "Executiu"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Foli"
+
+#~ msgid "Quarto"
+#~ msgstr "En quart"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "No s'ha pogut obrir el fitxer «%s»."
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "No s'ha pogut carregar el document «%s». No s'ha trobat l'intèrpret "
+#~ "Ghostscript en el camí"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "PostScript encapsulat"
+
+#~ msgid "PostScript"
+#~ msgstr "PostScript"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "L'intèrpret ha fallat."
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "Tipus MIME no gestionat: «%s»"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "La generació de PDF no està implementada"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "Esteu intentant imprimir a una impressora amb el controlador «%s». Aquest "
+#~ "programa requereix un controlador d'impressió PostScript."
+
+#~ msgid "Pages"
+#~ msgstr "Pàgines"
+
+#~ msgid "Invalid URI: “%s”"
+#~ msgstr "URI invàlid: «%s»"
+
+#~ msgid "Unsupported URI: “%s”"
+#~ msgstr "No es sap gestionar l'URI: «%s»"
+
+#~ msgid "Images"
+#~ msgstr "Imatges"
+
+#~ msgid "Open “%s”"
+#~ msgstr "Obre «%s»"
+
+#~ msgid "Empty"
+#~ msgstr "Buit"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "No document loaded."
+#~ msgstr "No hi ha cap document carregat."
+
+#~ msgid "Broken pipe."
+#~ msgstr "Conducte trencat."
+
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "S'ha produït un error en descomprimir el fitxer «%s»:\n"
+
+#~ msgid "File is not readable."
+#~ msgstr "El fitxer no és llegible."
+
+#~ msgid "Document loaded."
+#~ msgstr "S'ha carregat el document."
+
+#~ msgid "_Previous"
+#~ msgstr "_Anterior"
+
+#~ msgid "_Next"
+#~ msgstr "_Següent"
+
+#~ msgid "Hide attachments bar"
+#~ msgstr "Amaga la barra d'adjuncions"
+
+#~ msgid "Not found"
+#~ msgstr "No s'ha trobat"
+
+#~ msgid "The \"Find\" feature will not work with this document"
+#~ msgstr "La característica de «Cerca» no funcionarà en aquest document"
+
+#~ msgid "Searching for text is only supported for PDF documents."
+#~ msgstr "Només es pot cercar text en els documents PDF."
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "Default sidebar size"
+#~ msgstr "Mida per defecte de la barra lateral"
+
+#~ msgid "Show sidebar by default"
+#~ msgstr "Mostra la barra lateral per defecte"
+
+#~ msgid "Show statusbar by default"
+#~ msgstr "Mostra la barra d'estat per defecte"
+
+#~ msgid "Show toolbar by default"
+#~ msgstr "Mostra la barra d'eines per defecte"
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. The "
+#~ "default size sets the sidebar's width in pixels based from the side of "
+#~ "the window. Any integer will be accepted. The sidebar will never shrink "
+#~ "smaller than the size of the text required to display Thumbnails or "
+#~ "Index. Large values will cause the sidebar to take up as much of the page "
+#~ "display area as possible relative to the window's size."
+#~ msgstr ""
+#~ "La barra lateral és l'element lateral que conté les llistes d'índex i "
+#~ "miniatures. La mida per defecte estableix l'amplada en píxels de la barra "
+#~ "lateral basada en el lateral de la finestra. Qualsevol enter s'acceptarà. "
+#~ "La barra lateral mai serà més petita que la mida del text que necessita "
+#~ "per mostrar les miniatures o els índexs. Valors alts faran que la barra "
+#~ "lateral agafi bona part de l'àrea per mostrar la pàgina relatiu a la mida "
+#~ "de la finestra."
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. Two "
+#~ "boolean options, true makes sidebar visible by default while false makes "
+#~ "sidebar not visible by default"
+#~ msgstr ""
+#~ "La barra lateral és l'element lateral que conté les llistes d'índexs i "
+#~ "miniatures. Admet dues opcions booleanes, cert fa que la barra lateral "
+#~ "sigui visible per defecte, mentre que fals farà que per defecte no sigui "
+#~ "visible."
+
+#~ msgid ""
+#~ "Statusbar is the standard bottom bar that display additional information "
+#~ "about links and other actions. Two boolean options, true makes the "
+#~ "statusbar visible by default while false makes sidebar not visible by "
+#~ "default."
+#~ msgstr ""
+#~ "La barra d'estat és la barra estàndard de baix de tot que mostra "
+#~ "informació addicional sobre els enllaços i altres accions. Admet dues "
+#~ "opcions booleanes, cert fa que la barra d'estat sigui visible per "
+#~ "defecte, mentre que fals farà que per defecte no sigui visible."
+
+#~ msgid ""
+#~ "Toolbar is the top bar that contains navigation and zoom controls. Two "
+#~ "boolean options, true makes toolbar visible by default while false makes "
+#~ "toolbar not visible by default."
+#~ msgstr ""
+#~ "La barra d'eines és la barra de dalt de tot que conté els controls de "
+#~ "navegació i d'ampliació. Admet dues opcions boolenaes, cert fa que la "
+#~ "barra d'eines sigui visible per defecte, mentre que fals farà que per "
+#~ "defecte no sigui visible."
+
+#~ msgid "Unable to find glade file"
+#~ msgstr "No s'ha trobat el fitxer glade"
+
+#~ msgid ""
+#~ "The glade file, %s, cannot be found. Please check that your installation "
+#~ "is complete."
+#~ msgstr ""
+#~ "El fitxer glade, %s, no s'ha trobat. Comproveu que la instal·lació "
+#~ "estigui completa."
+
+#~ msgid "Document Viewer - Password Required"
+#~ msgstr "Visualitzador de documents - Es necessita contrasenya"
+
+#~ msgid "Save the current document with a new filename"
+#~ msgstr "Desa el document actual amb un nom nou"
+
+#~ msgid "View the properties of this document"
+#~ msgstr "Mostra les propietats d'aquest document"
+
+#~ msgid "Close this window"
+#~ msgstr "Tanca aquesta finestra"
+
+#~ msgid "Copy text from the document"
+#~ msgstr "Copia el text del document"
+
+#~ msgid "Select the entire page"
+#~ msgstr "Selecciona la pàgina sencera"
+
+#~ msgid "Customize the toolbar"
+#~ msgstr "Personalitza la barra d'eines"
+
+#~ msgid "Rotate the document to the left"
+#~ msgstr "Gira el document cap a l'esquerra"
+
+#~ msgid "Rotate the document to the right"
+#~ msgstr "Gira el document cap a la dreta"
+
+#~ msgid "Display help for the viewer application"
+#~ msgstr "Mostra l'ajuda del visualitzador"
+
+#~ msgid "Display credits for the document viewer creators"
+#~ msgstr "Mostra els crèdits dels creadors del visualitzador de documents"
+
+#~ msgid "Scroll one page forward"
+#~ msgstr "Vés una pàgina endevant"
+
+#~ msgid "Scroll one page backward"
+#~ msgstr "Vés una pàgina enrere"
+
+#~ msgid "Focus the page selector"
+#~ msgstr "Enfoca el selector de pàgina"
+
+#~ msgid "Go ten pages backward"
+#~ msgstr "Vés deu pàgines enrere"
+
+#~ msgid "Go ten pages forward"
+#~ msgstr "Vés deu pàgines endevant"
+
+#~ msgid "_Statusbar"
+#~ msgstr "Barra d'e_stat"
+
+#~ msgid "Show or hide the statusbar"
+#~ msgstr "Mostra o amaga la barra d'estat"
+
+#~ msgid "Name"
+#~ msgstr "Nom"
+
+#~ msgid "<span size=\"smaller\"> </span>"
+#~ msgstr "<span size=\"smaller\"> </span>"
+
+#~ msgid "unexpected EOF\n"
+#~ msgstr "EOF inesperat\n"
+
+#~ msgid "could not load font `%s'\n"
+#~ msgstr "no s'ha pogut carregar la font '%s'\n"
+
+#~ msgid "could not reload `%s'\n"
+#~ msgstr "no s'ha pogut recarregar '%s'\n"
+
+#~ msgid "%s: unsupported DVI format (version %u)\n"
+#~ msgstr "%s: el format DVI no està implementat (versió %u)\n"
+
+#~ msgid "%s: File corrupted, or not a DVI file\n"
+#~ msgstr "%s: El fitxer està malmès, o no és un fitxer DVI\n"
+
+#~ msgid "%s: vf macro had errors\n"
+#~ msgstr "%s: la macro vf conté errors\n"
+
+#~ msgid "%s: stack not empty after vf macro\n"
+#~ msgstr "%s: la pila no és buida després de la macro vf\n"
+
+#~ msgid "%s: could not reopen file (%s)\n"
+#~ msgstr "%s: no es pot tornar a obrir el fitxer (%s)\n"
+
+#~ msgid "%s: page %d out of range\n"
+#~ msgstr "%s: la pàgina %d està fora del rang\n"
+
+#~ msgid "%s: bad offset at page %d\n"
+#~ msgstr "%s: compensació incorrecta a la pàgina %d\n"
+
+#~ msgid "stack not empty at end of page\n"
+#~ msgstr "la pila no és buida al final de la pàgina\n"
+
+#~ msgid "no default font set yet\n"
+#~ msgstr "encara no s'ha establert cap tipus de lletra per defecte\n"
+
+#~ msgid "requested character %d does not exist in `%s'\n"
+#~ msgstr "el caràcter demanat %d no existeix a '%s'\n"
+
+#~ msgid "enlarging stack\n"
+#~ msgstr "s'està engrandint la pila\n"
+
+#~ msgid "font %d is not defined\n"
+#~ msgstr "el tipus de lletra %d no està definit\n"
+
+#~ msgid "unexpected opcode %d\n"
+#~ msgstr "no s'esperava el codi d'operació %d\n"
+
+#~ msgid "undefined opcode %d\n"
+#~ msgstr "el codi d'operació %d no està definit\n"
+
+#~ msgid "%s: no fonts defined\n"
+#~ msgstr "%s: no hi ha cap tipus de lletra definit\n"
+
+#~ msgid "%s: %d: [%s] requested encoding `%s' does not match vector `%s'\n"
+#~ msgstr ""
+#~ "%s: %d: [%s] la codificació sol·licitada '%s' no coincideix amb el vector "
+#~ "'%s'\n"
+
+#~ msgid "%s: could not load fontmap\n"
+#~ msgstr "%s: no s'ha pogut carregar el mapa del tipus de lletra\n"
+
+#~ msgid "%s: could not set as default encoding\n"
+#~ msgstr "%s: no s'ha pogut posar com a codificació per defecte\n"
+
+#~ msgid "encoding vector `%s' is in use\n"
+#~ msgstr "s'està utilitzant el vector de codificació '%s'\n"
+
+#~ msgid "GF: invalid opcode %d in character %d\n"
+#~ msgstr "GF: el codi d'operació %d no és vàlid en el caràcter %d\n"
+
+#~ msgid "(gf) Character %d: invalid opcode %d\n"
+#~ msgstr "(gf) Caràcter %d: el codi d'operació %d no és vàlid\n"
+
+#~ msgid "(gf) character %d has an incorrect bounding box\n"
+#~ msgstr "(gf) el caràcter %d té una caixa de limitació incorrecte\n"
+
+#~ msgid "%s: bad checksum (expected %u, found %u)\n"
+#~ msgstr "%s: suma de verificació errònia (s'esperava %u, s'ha trobat %u)\n"
+
+#~ msgid "%s: File corrupted, or not a GF file\n"
+#~ msgstr "%s: El fitxer està malmès, o no és un fitxer GF\n"
+
+#~ msgid "more than 10 counters in page specification\n"
+#~ msgstr "més de 10 contadors en l'especificació de pàgina\n"
+
+#~ msgid "custom"
+#~ msgstr "personalitzat"
+
+#~ msgid "Bad PK file: More bits than required\n"
+#~ msgstr "Fiter PK erroni: més bits dels requerits\n"
+
+#~ msgid "%s: checksum mismatch (expected %u, got %u)\n"
+#~ msgstr ""
+#~ "%s: la suma de comprovació no coincideix (s'esperava %u, s'ha obtingut %"
+#~ "u)\n"
+
+#~ msgid "%s: unexpected preamble\n"
+#~ msgstr "%s: no s'esperava el preàmbul\n"
+
+#~ msgid "%s: File corrupted, or not a PK file\n"
+#~ msgstr "%s: El fitxer està malmès, o no és un fitxer PK\n"
+
+#~ msgid "%s: malformed value for key `%s'\n"
+#~ msgstr "%s: valor malformat per a la clau '%s'\n"
+
+#~ msgid "%s: unknown key `%s' ignored\n"
+#~ msgstr "%s: s'ha ignorat la clau desconeguda '%s'\n"
+
+#~ msgid "%s: no argument for key `%s', using defaults\n"
+#~ msgstr ""
+#~ "%s: no hi ha argument per a la clau '%s', s'utilitzarà allò per defecte\n"
+
+#~ msgid "%s: argument `%s' ignored for key `%s'\n"
+#~ msgstr "%s: s'ha ignorat l'argument '%s' per a la clau '%s'\n"
+
+#~ msgid "%s: tried to pop top level layer\n"
+#~ msgstr "%s: s'ha provat de desempilar la capa superior\n"
+
+#~ msgid "(t1) failed to reset device resolution\n"
+#~ msgstr "(t1) error al reiniciar la resolució del dispositiu\n"
+
+#~ msgid "%s: could not encode font\n"
+#~ msgstr "%s: no s'ha pogut codificar el tipus de lletra\n"
+
+#~ msgid "(t1) unsupported bitmap pad size %d\n"
+#~ msgstr "(t1) la mida %d del coixí del mapa de bits no està implementada\n"
+
+#~ msgid "%s: Checksum mismatch (got %u, expected %u)\n"
+#~ msgstr ""
+#~ "%s: La suma de comprovació no coincideix (s'ha obtingut %u, s'esperava %"
+#~ "u)\n"
+
+#~ msgid "%s: Error reading AFM data\n"
+#~ msgstr "%s: S'ha produït un error en llegir dades AFM\n"
+
+#~ msgid "Warning: TFM file `%s' has suspicious size\n"
+#~ msgstr "Avís: el fitxer TFM '%s' té una mida sospitosa\n"
+
+#~ msgid "%s: font coding scheme truncated to 40 bytes\n"
+#~ msgstr ""
+#~ "%s: s'ha truncat l'esquema de codificació del tipus de lletra a 40 bytes\n"
+
+#~ msgid "%s: File corrupted, or not a TFM file\n"
+#~ msgstr "%s: El fitxer està malmès, o no és un fitxer TFM\n"
+
+#~ msgid "(tt) %s: no acceptable map found, using #0\n"
+#~ msgstr "(tt) %s: el mapa trobat no és acceptable, s'utilitza #0\n"
+
+#~ msgid "(tt) %s: could not set resolution: %s\n"
+#~ msgstr "(tt) %s: no s'ha pogut establir la resolució: %s\n"
+
+#~ msgid "(tt) %s: could not set point size: %s\n"
+#~ msgstr "(tt) %s: no s'ha pogut establir la mida del punter: %s\n"
+
+#~ msgid "(tt) %s: could not load PS name table\n"
+#~ msgstr "(tt) %s: no s'ha pogut carregar el nom de la taula PS\n"
+
+#~ msgid "%s: no encoding vector found, expect bad output\n"
+#~ msgstr ""
+#~ "%s: no s'ha trobat vector de codificació, excepte una sortida errònia\n"
+
+#~ msgid "Crashing"
+#~ msgstr "Fallant"
+
+#~ msgid "%s: Warning: "
+#~ msgstr "%s: Avís: "
+
+#~ msgid "%s: Fatal: "
+#~ msgstr "%s: Fatal: "
+
+#~ msgid "Fatal"
+#~ msgstr "Fatal"
+
+# FIXME
+#~ msgid "out of memory allocating %u bytes\n"
+#~ msgstr "fora de memòria ubicant %u bytes\n"
+
+#~ msgid "attempted to reallocate with zero size\n"
+#~ msgstr "intentat reassignar amb mida zero\n"
+
+#~ msgid "failed to reallocate %u bytes\n"
+#~ msgstr "s'ha produït un error en reubicar %u bytes\n"
+
+#~ msgid "failed to allocate %ux%u bytes\n"
+#~ msgstr "no s'ha pogut ubicar %ux%u bytes\n"
+
+#~ msgid "attempted to free NULL pointer\n"
+#~ msgstr "s'ha intentat alliberar un punter NULL\n"
+
+#~ msgid "%s: Checksum mismatch (expected %u, got %u)\n"
+#~ msgstr ""
+#~ "%s: la suma de verificació no coincideix (s'esperava %u, s'ha obtingut %"
+#~ "u)\n"
+
+#~ msgid "(vf) %s: could not load font `%s'\n"
+#~ msgstr "(vf) %s: no s'ha pogut carregar el tipus de lletra '%s'\n"
+
+#~ msgid "(vf) %s: character %d redefined\n"
+#~ msgstr "(vf) %s: el caràcter %d s'ha redefinit\n"
+
+#~ msgid "(vf) %s: no postamble\n"
+#~ msgstr "(vf) %s: no hi ha postàmbul\n"
+
+#~ msgid "%s: File corrupted, or not a VF file.\n"
+#~ msgstr "%s: El fitxer està corruput, o no és un fitxer VF.\n"
+
+#~ msgid "Error while scanning file %s\n"
+#~ msgstr "S'ha produït un error en analitzar el fitxer %s\n"
+
+#~ msgid "The file is not a PostScript document."
+#~ msgstr "El fitxer no és un document PostScript."
+
+#~ msgid "Many..."
+#~ msgstr "Molts..."
+
+#~ msgid "Not so many..."
+#~ msgstr "No tants..."
+
+#~ msgid "Reset the zoom level to the default value"
+#~ msgstr "Reinicia el zoom al valor per defecte"
+
+#~ msgid "Selection Caret"
+#~ msgstr "Cursor de selecció"
+
+#~ msgid "Single"
+#~ msgstr "Una a una"
+
+#~ msgid "Show the document one page at a time"
+#~ msgstr "Mostra el document pàgina a pàgina"
+
+#~ msgid "Multi"
+#~ msgstr "Totes"
+
+#~ msgid "Show the full document at once"
+#~ msgstr "Mostra tot el document alhora"
+
+#~ msgid "Show sidebar by default."
+#~ msgstr "Per defecte mostra la barra lateral."
+
+#~ msgid "Show statusbar by default."
+#~ msgstr "Per defecte mostra la barra d'estat."
+
+#~ msgid "Show toolbar by default."
+#~ msgstr "Per defecte mostra la barra d'eines."
+
+#~ msgid "The default sidebar size."
+#~ msgstr "La mida per defecte de la barra lateral."
+
+#~ msgid "Error while converting pdf file %s:\n"
+#~ msgstr "S'ha produït un error en convertir el pdf %s:\n"
+
+#~ msgid "Exit Fullscreen"
+#~ msgstr "Surt de pantalla completa"
+
+#~ msgid "Open a file"
+#~ msgstr "Obre un fitxer"
+
+#~ msgid "_Close"
+#~ msgstr "_Tanca"
diff --git a/po/[email protected] b/po/[email protected]
new file mode 100644
index 00000000..25a86eb2
--- /dev/null
+++ b/po/[email protected]
@@ -0,0 +1,2211 @@
+# Catalan translation of evince.
+# Copyright © 2005, 2006 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince package.
+# Gil Forcada <[email protected]>, 2005, 2006, 2007, 2008, 2009, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-22 00:11+0200\n"
+"PO-Revision-Date: 2010-04-01 21:46+0200\n"
+"Last-Translator: Gil Forcada <[email protected]>\n"
+"Language-Team: Catalan <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"S'ha produït un error en executar l'orde «%s» per poder descomprimir el "
+"còmic: %s"
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "No s'ha pogut descomprimir el còmic amb l'orde «%s»."
+
+#: ../backend/comics/comics-document.c:183
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "L'orde «%s» no ha finalitzat correctament."
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "El tipus MIME no és d'un còmic: %s"
+
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"No es pot trobar una orde adequada per descomprimir este tipus de còmic"
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Tipus MIME desconegut"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "El fitxer està malmés"
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "No hi ha cap fitxer a l'arxiu"
+
+#: ../backend/comics/comics-document.c:474
+#, c-format
+msgid "No images found in archive %s"
+msgstr "No s'han trobat imatges a l'arxiu %s"
+
+#: ../backend/comics/comics-document.c:718
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "S'ha produït un error en suprimir «%s»."
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr "Error %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Còmics"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "El document DjVu té un format incorrecte"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"El document és format per diversos fitxers, un o més dels quals són "
+"inaccessibles."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Documents DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "El document DVI té un format incorrecte"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Documents DVI"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr "Este treball és de domini públic"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "Sí"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "No"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "Tipus 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "Tipus 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "Tipus 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "Tipus 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "Tipus 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "Tipus de lletra desconegut"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "Sense nom"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "Subconjunt incrustat"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "Incrustat"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "No incrustat"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Documents PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Document invàlid"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Diapositives de l'Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Cap error"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "No hi ha prou memòria"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "No s'ha pogut trobar la signatura ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Fitxer ZIP no vàlid"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Encara no es poden fer servir arxius ZIP amb múltiples fitxers"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "No s'ha pogut obrir el fitxer"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "No s'han pogut llegir les dades del fitxer"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "No s'ha pogut trobar el fitxer a l'arxiu ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Error desconegut"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "No s'ha pogut carregar el document «%s»"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "No s'ha pogut alçar el document «%s»"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Documents PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "No s'ha pogut alçar l'adjunció «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "No s'ha pogut obrir l'adjunció «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "No s'ha pogut obrir l'adjunció «%s»"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Encara no es pot gestionar el tipus de fitxer %s (%s)"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Tots els documents"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Tots els fitxers"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "No s'ha pogut crear el fitxer temporal: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "No s'ha pogut crear el directori temporal: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "El fitxer no és un fitxer .desktop vàlid"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Es desconeix la versió «%s» del fitxer d'escriptori"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "S'està iniciant %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "L'aplicació no accepta documents des de la línia d'ordes"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Opció d'execució desconeguda: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"No es pot passar els URI del document a una entrada d'escriptori del tipus "
+"«Type=Link»"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "No és un element executable"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Inhabilita la connexió al gestor de sessions"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Especifica el fitxer que conté la configuració alçada"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "FITXER"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Especifica l'identificador de gestió de sessió"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "Identificador"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opcions de gestió de la sessió:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Mostra les opcions de gestió de la sessió"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "Mostra «_%s»"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "_Mou a la barra d'eines"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "Mou l'element seleccionat a la barra d'eines"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "Sup_rimeix de la barra d'eines"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "Suprimeix l'element seleccionat de la barra d'eines"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "Sup_rimeix la barra d'eines"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "Suprimeix la barra d'eines seleccionada"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Separador"
+
+# FIXME
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+msgid "Running in presentation mode"
+msgstr "S'està executant en mode de presentació"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5352
+msgid "Best Fit"
+msgstr "Millor ajust"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Ajusta a l'amplada de la pàgina"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4208
+#: ../shell/ev-window-title.c:149 ../shell/main.c:282
+#, c-format
+msgid "Document Viewer"
+msgstr "Visualitzador de documents"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Visualitzeu documents multi-pàgina"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "No faces cas de les restriccions del document"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"No faces cas de les restriccions del document, com les de còpia o "
+"d'impressió."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "Suprimeix el fitxer temporal"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "Imprimeix el fitxer de configuració"
+
+#: ../previewer/ev-previewer.c:143 ../previewer/ev-previewer.c:177
+msgid "MATE Document Previewer"
+msgstr "Visualitzador de documents del MATE"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3008
+msgid "Failed to print document"
+msgstr "No s'ha pogut imprimir el document"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "No s'ha pogut trobar la impressora «%s»"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5101
+msgid "_Previous Page"
+msgstr "Pàgina _anterior"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5102
+msgid "Go to the previous page"
+msgstr "Vés a la pàgina anterior"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5104
+msgid "_Next Page"
+msgstr "Pàgina _següent"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5105
+msgid "Go to the next page"
+msgstr "Vés a la pàgina següent"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5088
+msgid "Enlarge the document"
+msgstr "Amplia el document"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5091
+msgid "Shrink the document"
+msgstr "Encongeix el document"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1315
+msgid "Print"
+msgstr "Imprimeix"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5059
+msgid "Print this document"
+msgstr "Imprimeix el document"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5203
+msgid "_Best Fit"
+msgstr "_Millor ajust"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5204
+msgid "Make the current document fill the window"
+msgstr "Fes que el document òmpliga la finestra"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5206
+msgid "Fit Page _Width"
+msgstr "Aj_usta a l'amplada de la pàgina"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5207
+msgid "Make the current document fill the window width"
+msgstr "Fes que el document encaixi a l'amplada de la finestra"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5274
+msgid "Page"
+msgstr "Pàgina"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5275
+msgid "Select Page"
+msgstr "Selecciona la pàgina"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Document"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Títol:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Ubicació:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Assumpte:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "Autor:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Paraules clau:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Productor:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Creador:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Creat:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Modificat:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Nombre de pàgines:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimitzat:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Format:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Seguretat:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Mida del paper:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1896
+msgid "None"
+msgstr "Cap"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:284
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:288
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f polzades"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, vertical (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, apaïsat (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d de %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "de %d"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:341
+msgid "Preparing to print…"
+msgstr "S'està preparant per imprimir…"
+
+#: ../libview/ev-print-operation.c:343
+msgid "Finishing…"
+msgstr "S'està acabant…"
+
+#: ../libview/ev-print-operation.c:345
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "S'està imprimint la pàgina %d de %d…"
+
+#: ../libview/ev-print-operation.c:1169
+msgid "Printing is not supported on this printer."
+msgstr "No es pot imprimir en esta impressora."
+
+#: ../libview/ev-print-operation.c:1234
+msgid "Invalid page selection"
+msgstr "La selecció de pàgines no és vàlida"
+
+#: ../libview/ev-print-operation.c:1235
+msgid "Warning"
+msgstr "Avís"
+
+#: ../libview/ev-print-operation.c:1237
+msgid "Your print range selection does not include any pages"
+msgstr "No hi ha cap pàgina en el rang d'impressió"
+
+#: ../libview/ev-print-operation.c:1891
+msgid "Page Scaling:"
+msgstr "Escalat de la pàgina:"
+
+#: ../libview/ev-print-operation.c:1897
+msgid "Shrink to Printable Area"
+msgstr "Redueix a l'àrea d'impressió"
+
+#: ../libview/ev-print-operation.c:1898
+msgid "Fit to Printable Area"
+msgstr "Ajusta a l'àrea d'impressió"
+
+#: ../libview/ev-print-operation.c:1901
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Escala les pàgines del document per ajustar-les a la pàgina d'impressió "
+"seleccionada. Seleccioneu una de les opcions següents:\n"
+"\n"
+"• «Cap»: No es fa cap escalat.\n"
+"\n"
+"• «Redueix a l'àrea d'impressió»: Es redueixen les pàgines més grans que "
+"l'àrea d'impressió per ajustar-se a l'àrea de la pàgina d'impressió.\n"
+"\n"
+"• «Ajusta a l'àrea d'impressió»: S'amplien o es redueixen segons convingui "
+"per ajustar-se a l'àrea de la pàgina d'impressió.\n"
+
+#: ../libview/ev-print-operation.c:1913
+msgid "Auto Rotate and Center"
+msgstr "Gira automàticament i centra"
+
+#: ../libview/ev-print-operation.c:1916
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Gira l'orientació de la pàgina d'impressió de cada pàgina perquè coincidisca "
+"amb cada pàgina del document. Es centraran les pàgines respecte la pàgina "
+"d'impressió."
+
+#: ../libview/ev-print-operation.c:1921
+msgid "Select page size using document page size"
+msgstr "Seleccioneu la mida de la pàgina amb la mida de la pàgina del document"
+
+#: ../libview/ev-print-operation.c:1923
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Quan s'habiliti cada pàgina s'imprimirà amb la mateixa mida de paper que la "
+"pàgina del document."
+
+#: ../libview/ev-print-operation.c:2005
+msgid "Page Handling"
+msgstr "Gestió de la pàgina"
+
+#: ../libview/ev-jobs.c:1438
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "No s'ha pogut imprimir la pàgina %d: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Desplaça cap amunt"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Desplaça cap avall"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Desplaça la visualització cap amunt"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Desplaça la visualització cap avall"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Visualització del document"
+
+#: ../libview/ev-view-presentation.c:668
+msgid "Jump to page:"
+msgstr "Salta a la pàgina:"
+
+#: ../libview/ev-view-presentation.c:970
+msgid "End of presentation. Click to exit."
+msgstr "Final de la presentació. Feu clic per eixir."
+
+#: ../libview/ev-view.c:1727
+msgid "Go to first page"
+msgstr "Vés a la primera pàgina"
+
+#: ../libview/ev-view.c:1729
+msgid "Go to previous page"
+msgstr "Vés a la pàgina anterior"
+
+#: ../libview/ev-view.c:1731
+msgid "Go to next page"
+msgstr "Vés a la pàgina següent"
+
+#: ../libview/ev-view.c:1733
+msgid "Go to last page"
+msgstr "Vés a l'última pàgina"
+
+#: ../libview/ev-view.c:1735
+msgid "Go to page"
+msgstr "Vés a la pàgina"
+
+#: ../libview/ev-view.c:1737
+msgid "Find"
+msgstr "Cerca"
+
+#: ../libview/ev-view.c:1765
+#, c-format
+msgid "Go to page %s"
+msgstr "Vés a la pàgina %s"
+
+#: ../libview/ev-view.c:1771
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Vés a %s en el fitxer «%s»"
+
+#: ../libview/ev-view.c:1774
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Vés al fitxer «%s»"
+
+#: ../libview/ev-view.c:1782
+#, c-format
+msgid "Launch %s"
+msgstr "Engega %s"
+
+#: ../libview/ev-view.c:3926 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "S'està carregant…"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Cerca:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5076
+msgid "Find Pre_vious"
+msgstr "Cerca l'_anterior"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Cerca l'anterior ocurrència de la cadena de cerca"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5074
+msgid "Find Ne_xt"
+msgstr "Cerca el _següent"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Cerca la següent ocurrència de cadena de cerca"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Distingeix entre majúscules i minúscules"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Commuta a una cerca que distingisca entre majúscules i minúscules"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Contrasenya per al document %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "S'està convertint %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "S'han convertit %d de %d documents"
+
+#: ../shell/ev-convert-metadata.c:164 ../shell/ev-convert-metadata.c:179
+msgid "Converting metadata"
+msgstr "S'estan convertint les metadades"
+
+#: ../shell/ev-convert-metadata.c:185
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"L'Evince ha canviat el format de les metadades que utilitzava i s'han de "
+"migrar. Si cancel·leu la migració el magatzem de metadades no funcionarà."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Obri un document utilitzat recentment"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Este document està protegit i només es pot llegir si s'introdueix la "
+"contrasenya correcta."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "_Desbloca el document"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Introduïu la contrasenya"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Cal una contrasenya"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"El document «%s» està protegit i cal una contrasenya per poder-lo obrir."
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Contrasenya:"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "Oblida la contrasenya _immediatament"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _log out"
+msgstr "Recorda la contrasenya durant esta _sessió"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "_Recorda-la per sempre"
+
+#: ../shell/ev-properties-dialog.c:58
+msgid "Properties"
+msgstr "Propietats"
+
+#: ../shell/ev-properties-dialog.c:92
+msgid "General"
+msgstr "General"
+
+#: ../shell/ev-properties-dialog.c:102
+msgid "Fonts"
+msgstr "Tipus de lletra"
+
+#: ../shell/ev-properties-dialog.c:115
+msgid "Document License"
+msgstr "Llicència del document"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Tipus de lletra"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "S'està recollint informació del tipus de lletra… %3d%%"
+
+#: ../shell/ev-properties-license.c:138
+msgid "Usage terms"
+msgstr "Termes d'ús"
+
+#: ../shell/ev-properties-license.c:144
+msgid "Text License"
+msgstr "Llicència del text"
+
+#: ../shell/ev-properties-license.c:150
+msgid "Further Information"
+msgstr "Més informació"
+
+#: ../shell/ev-sidebar-attachments.c:712
+msgid "Attachments"
+msgstr "Adjuncions"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Capes"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Imprimeix…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Índex"
+
+#: ../shell/ev-sidebar-thumbnails.c:956
+msgid "Thumbnails"
+msgstr "Miniatures"
+
+#: ../shell/ev-window.c:840
+#, c-format
+msgid "Page %s — %s"
+msgstr "Pàgina %s — %s"
+
+#: ../shell/ev-window.c:842
+#, c-format
+msgid "Page %s"
+msgstr "Pàgina %s"
+
+#: ../shell/ev-window.c:1288
+msgid "The document contains no pages"
+msgstr "El document no conté cap pàgina"
+
+#: ../shell/ev-window.c:1291
+msgid "The document contains only empty pages"
+msgstr "El document només conté pàgines buides"
+
+#: ../shell/ev-window.c:1485 ../shell/ev-window.c:1651
+msgid "Unable to open document"
+msgstr "No es pot obrir el document"
+
+#: ../shell/ev-window.c:1622
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "S'està carregant el document des de «%s»"
+
+#: ../shell/ev-window.c:1764 ../shell/ev-window.c:2041
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "S'està baixant el document (%d%%)"
+
+#: ../shell/ev-window.c:1797
+msgid "Failed to load remote file."
+msgstr "No s'ha pogut carregar el fitxer remot."
+
+#: ../shell/ev-window.c:1985
+#, c-format
+msgid "Reloading document from %s"
+msgstr "S'està tornant a carregar el document des de %s"
+
+#: ../shell/ev-window.c:2017
+msgid "Failed to reload document."
+msgstr "No s'ha pogut tornar a carregar el document."
+
+#: ../shell/ev-window.c:2172
+msgid "Open Document"
+msgstr "Obri un document"
+
+#: ../shell/ev-window.c:2436
+#, c-format
+msgid "Saving document to %s"
+msgstr "S'està desant el document a %s"
+
+#: ../shell/ev-window.c:2439
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "S'està desant l'adjunció a %s"
+
+#: ../shell/ev-window.c:2442
+#, c-format
+msgid "Saving image to %s"
+msgstr "S'està desant la imatge %s"
+
+#: ../shell/ev-window.c:2486 ../shell/ev-window.c:2586
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "No s'ha pogut alçar el fitxer com a «%s»."
+
+#: ../shell/ev-window.c:2517
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "S'està pujant el document (%d%%)"
+
+#: ../shell/ev-window.c:2521
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "S'està pujant l'adjunció (%d%%)"
+
+#: ../shell/ev-window.c:2525
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "S'està pujant la imatge (%d%%)"
+
+#: ../shell/ev-window.c:2647
+msgid "Save a Copy"
+msgstr "Alça'n una còpia"
+
+#: ../shell/ev-window.c:2952
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d tasca pendent a la cua"
+msgstr[1] "%d tasques pendents a la cua"
+
+#: ../shell/ev-window.c:3065
+#, c-format
+msgid "Printing job “%s”"
+msgstr "S'està imprimint la tasca «%s»"
+
+#: ../shell/ev-window.c:3277
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Voleu esperar per tancar fins que s'acabi la tasca d'impressió «%s»?"
+
+#: ../shell/ev-window.c:3280
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Hi ha %d tasques d'impressió actives. Voleu esperar per tancar fins que "
+"s'acabi d'imprimir?"
+
+#: ../shell/ev-window.c:3292
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Si tanqueu la finestra, no s'imprimiran les tasques pendents."
+
+#: ../shell/ev-window.c:3296
+msgid "Cancel _print and Close"
+msgstr "Cancel·la la im_pressió i tanca"
+
+#: ../shell/ev-window.c:3300
+msgid "Close _after Printing"
+msgstr "Tanca després d'im_primir"
+
+#: ../shell/ev-window.c:3861
+msgid "Toolbar Editor"
+msgstr "Editor de la barra d'eines"
+
+#: ../shell/ev-window.c:3993
+msgid "There was an error displaying help"
+msgstr "S'ha produït un error en mostrar l'ajuda"
+
+#: ../shell/ev-window.c:4204
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Visualitzador de documents.\n"
+"S'utilitza el %s (%s)"
+
+#: ../shell/ev-window.c:4235
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"L'Evince és programari lliure; podeu redistribuir-lo i/o modificar-lo sota "
+"els termes de la Llicència Pública General GNU tal com ha estat publicada "
+"per la Free Software Foundation; ja siga la versió 2 de la Llicència o bé "
+"(si ho preferiu) qualsevol altra versió posterior.\n"
+
+#: ../shell/ev-window.c:4239
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"L'Evince es distribueix amb l'expectativa que serà útil, però SENSE CAP "
+"GARANTIA; ni tan sols la garantia implícita de COMERCIABILITAT o ADEQUACIÓ "
+"PER UN PROPÒSIT PARTICULAR. Vegeu la Llicència Pública General GNU per "
+"obtindre'n més detalls.\n"
+
+#: ../shell/ev-window.c:4243
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Hauríeu d'haver rebut una còpia de la Llicència Pública General GNU "
+"juntament amb l'Evince; en cas contrari, escriviu a la Free Software "
+"Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:4268
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4271
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Els autors de l'Evince"
+
+#: ../shell/ev-window.c:4277
+msgid "translator-credits"
+msgstr "Gil Forcada <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4549
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "N'hi ha %d en esta pàgina"
+msgstr[1] "N'hi ha %d en esta pàgina"
+
+#: ../shell/ev-window.c:4557
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Manca el %3d%% per cercar"
+
+#: ../shell/ev-window.c:5039
+msgid "_File"
+msgstr "_Fitxer"
+
+#: ../shell/ev-window.c:5040
+msgid "_Edit"
+msgstr "_Edita"
+
+#: ../shell/ev-window.c:5041
+msgid "_View"
+msgstr "_Visualitza"
+
+#: ../shell/ev-window.c:5042
+msgid "_Go"
+msgstr "Vé_s"
+
+#: ../shell/ev-window.c:5043
+msgid "_Help"
+msgstr "A_juda"
+
+#. File menu
+#: ../shell/ev-window.c:5046 ../shell/ev-window.c:5314
+msgid "_Open…"
+msgstr "_Obri…"
+
+#: ../shell/ev-window.c:5047 ../shell/ev-window.c:5315
+msgid "Open an existing document"
+msgstr "Obri un document existent"
+
+#: ../shell/ev-window.c:5049
+msgid "Op_en a Copy"
+msgstr "Obri'n una _còpia"
+
+#: ../shell/ev-window.c:5050
+msgid "Open a copy of the current document in a new window"
+msgstr "Obri una còpia del document actual en una finestra nova"
+
+#: ../shell/ev-window.c:5052
+msgid "_Save a Copy…"
+msgstr "Alça'n una còpia…"
+
+#: ../shell/ev-window.c:5053
+msgid "Save a copy of the current document"
+msgstr "Alça una còpia del document actual"
+
+#: ../shell/ev-window.c:5055
+msgid "Page Set_up…"
+msgstr "_Configuració de la pàgina…"
+
+#: ../shell/ev-window.c:5056
+msgid "Set up the page settings for printing"
+msgstr "Configureu els paràmetres de pàgina per a la impressió"
+
+#: ../shell/ev-window.c:5058
+msgid "_Print…"
+msgstr "_Imprimeix…"
+
+#: ../shell/ev-window.c:5061
+msgid "P_roperties"
+msgstr "_Propietats"
+
+#: ../shell/ev-window.c:5069
+msgid "Select _All"
+msgstr "Selecciona-ho _tot"
+
+#: ../shell/ev-window.c:5071
+msgid "_Find…"
+msgstr "_Cerca…"
+
+#: ../shell/ev-window.c:5072
+msgid "Find a word or phrase in the document"
+msgstr "Cerca una paraula o frase al document"
+
+#: ../shell/ev-window.c:5078
+msgid "T_oolbar"
+msgstr "_Barra d'eines"
+
+#: ../shell/ev-window.c:5080
+msgid "Rotate _Left"
+msgstr "Gira a l'_esquerra"
+
+#: ../shell/ev-window.c:5082
+msgid "Rotate _Right"
+msgstr "Gira a la _dreta"
+
+#: ../shell/ev-window.c:5093
+msgid "_Reload"
+msgstr "Ac_tualitza"
+
+#: ../shell/ev-window.c:5094
+msgid "Reload the document"
+msgstr "Actualitza el document"
+
+#: ../shell/ev-window.c:5097
+msgid "Auto_scroll"
+msgstr "Desplaça _automàticament"
+
+#: ../shell/ev-window.c:5107
+msgid "_First Page"
+msgstr "_Primera pàgina"
+
+#: ../shell/ev-window.c:5108
+msgid "Go to the first page"
+msgstr "Vés a la primera pàgina"
+
+#: ../shell/ev-window.c:5110
+msgid "_Last Page"
+msgstr "Úl_tima pàgina"
+
+#: ../shell/ev-window.c:5111
+msgid "Go to the last page"
+msgstr "Vés a l'última pàgina"
+
+#. Help menu
+#: ../shell/ev-window.c:5115
+msgid "_Contents"
+msgstr "_Continguts"
+
+#: ../shell/ev-window.c:5118
+msgid "_About"
+msgstr "_Quant a"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5122
+msgid "Leave Fullscreen"
+msgstr "Ix de la pantalla completa"
+
+#: ../shell/ev-window.c:5123
+msgid "Leave fullscreen mode"
+msgstr "Ix de la pantalla completa"
+
+#: ../shell/ev-window.c:5125
+msgid "Start Presentation"
+msgstr "Inicia la presentació"
+
+#: ../shell/ev-window.c:5126
+msgid "Start a presentation"
+msgstr "Inicia una presentació"
+
+#. View Menu
+#: ../shell/ev-window.c:5185
+msgid "_Toolbar"
+msgstr "Barra d'_eines"
+
+#: ../shell/ev-window.c:5186
+msgid "Show or hide the toolbar"
+msgstr "Mostra o amaga la barra d'eines"
+
+#: ../shell/ev-window.c:5188
+msgid "Side _Pane"
+msgstr "Barra _lateral"
+
+#: ../shell/ev-window.c:5189
+msgid "Show or hide the side pane"
+msgstr "Mostra o amaga la barra lateral"
+
+#: ../shell/ev-window.c:5191
+msgid "_Continuous"
+msgstr "C_ontinu"
+
+#: ../shell/ev-window.c:5192
+msgid "Show the entire document"
+msgstr "Mostra el document sencer"
+
+#: ../shell/ev-window.c:5194
+msgid "_Dual"
+msgstr "_Dual"
+
+#: ../shell/ev-window.c:5195
+msgid "Show two pages at once"
+msgstr "Mostra dues pàgines alhora"
+
+#: ../shell/ev-window.c:5197
+msgid "_Fullscreen"
+msgstr "Pantalla _completa"
+
+#: ../shell/ev-window.c:5198
+msgid "Expand the window to fill the screen"
+msgstr "Expandeix la finestra fins a omplir la pantalla"
+
+#: ../shell/ev-window.c:5200
+msgid "Pre_sentation"
+msgstr "_Presentació"
+
+# FIXME
+#: ../shell/ev-window.c:5201
+msgid "Run document as a presentation"
+msgstr "Mostra el document com a una presentació"
+
+#: ../shell/ev-window.c:5209
+msgid "_Inverted Colors"
+msgstr "_Inverteix els colors"
+
+#: ../shell/ev-window.c:5210
+msgid "Show page contents with the colors inverted"
+msgstr "Mostra el contingut de la pàgina amb els colors invertits"
+
+#. Links
+#: ../shell/ev-window.c:5218
+msgid "_Open Link"
+msgstr "_Obri l'enllaç"
+
+#: ../shell/ev-window.c:5220
+msgid "_Go To"
+msgstr "Vé_s a"
+
+#: ../shell/ev-window.c:5222
+msgid "Open in New _Window"
+msgstr "Obri en una _finestra nova"
+
+#: ../shell/ev-window.c:5224
+msgid "_Copy Link Address"
+msgstr "_Copia l'adreça de l'enllaç"
+
+#: ../shell/ev-window.c:5226
+msgid "_Save Image As…"
+msgstr "_Anomena i alça la imatge…"
+
+#: ../shell/ev-window.c:5228
+msgid "Copy _Image"
+msgstr "Copia la _imatge"
+
+#: ../shell/ev-window.c:5233
+msgid "_Open Attachment"
+msgstr "_Obri l'adjunció"
+
+#: ../shell/ev-window.c:5235
+msgid "_Save Attachment As…"
+msgstr "Al_ça l'adjunció com a…"
+
+#: ../shell/ev-window.c:5288
+msgid "Zoom"
+msgstr "Ampliació"
+
+#: ../shell/ev-window.c:5290
+msgid "Adjust the zoom level"
+msgstr "Ajusta el nivell de l'ampliació"
+
+#: ../shell/ev-window.c:5300
+msgid "Navigation"
+msgstr "Navegació"
+
+#: ../shell/ev-window.c:5302
+msgid "Back"
+msgstr "Arrere"
+
+# "Salta't les pàgines visitades"? (josep)
+#. translators: this is the history action
+#: ../shell/ev-window.c:5305
+msgid "Move across visited pages"
+msgstr "Creua les pàgines visitades"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5335
+msgid "Previous"
+msgstr "Anterior"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5340
+msgid "Next"
+msgstr "Següent"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5344
+msgid "Zoom In"
+msgstr "Apropa"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5348
+msgid "Zoom Out"
+msgstr "Allunya"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5356
+msgid "Fit Width"
+msgstr "Encaixa a l'amplada"
+
+#: ../shell/ev-window.c:5517 ../shell/ev-window.c:5534
+msgid "Unable to launch external application."
+msgstr "No s'ha pogut executar l'aplicació externa."
+
+#: ../shell/ev-window.c:5591
+msgid "Unable to open external link"
+msgstr "No s'ha pogut obrir l'enllaç extern"
+
+#: ../shell/ev-window.c:5758
+msgid "Couldn't find appropriate format to save image"
+msgstr "No s'ha trobat cap format adequat per alçar la imatge"
+
+#: ../shell/ev-window.c:5800
+msgid "The image could not be saved."
+msgstr "No s'ha pogut alçar la imatge."
+
+#: ../shell/ev-window.c:5832
+msgid "Save Image"
+msgstr "Alça la imatge"
+
+#: ../shell/ev-window.c:5899
+msgid "Unable to open attachment"
+msgstr "No s'ha pogut obrir l'adjunció"
+
+#: ../shell/ev-window.c:5952
+msgid "The attachment could not be saved."
+msgstr "No s'ha pogut alçar l'adjunció."
+
+#: ../shell/ev-window.c:5997
+msgid "Save Attachment"
+msgstr "Alça l'adjunció"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Necessita contrasenya"
+
+#: ../shell/ev-utils.c:315
+msgid "By extension"
+msgstr "Per extensió"
+
+#: ../shell/main.c:70 ../shell/main.c:246
+msgid "MATE Document Viewer"
+msgstr "Visualitzador de documents del MATE"
+
+#: ../shell/main.c:78
+msgid "The page of the document to display."
+msgstr "La pàgina del document a mostrar."
+
+#: ../shell/main.c:78
+msgid "PAGE"
+msgstr "PÀGINA"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Executa l'Evince en mode pantalla completa"
+
+# FIXME
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Executa l'Evince en mode presentació"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Executa l'Evince com a previsualitzador"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "La paraula o frase que es vol cercar en el document"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "CADENA"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FITXER…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Opcions booleanes disponibles: «true» (cert) habilita les miniatures i "
+"«false» (fals) inhabilita la creació de noves miniatures"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Habilita les miniatures per als documents PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Orde de miniatura per als documents PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Orde vàlida amb arguments addicionals per al miniaturitzador de documents "
+"PDF. Per a més informació vegeu la documentació del miniaturitzador del "
+"Caja."
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "El document DJVU té un format incorrecte"
+
+#~ msgid "Print..."
+#~ msgstr "Imprimeix..."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Desa'n una còpia..."
+
+#~ msgid "_Print..."
+#~ msgstr "_Imprimeix..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Cerca..."
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "No s'ha pogut crear el fitxer «%s»: %s"
+
+#~ msgid "Search string"
+#~ msgstr "Cerca una cadena"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "El nom de la cadena a cercar"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Distingeix entre majúscules i minúscules"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "Cert per a una cerca que distingeixi majúscules de minúscules"
+
+#~ msgid "Highlight color"
+#~ msgstr "Color del ressaltat"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Color del ressaltat per a totes les coincidències"
+
+#~ msgid "Current color"
+#~ msgstr "Color actual"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Color del ressaltat de la coincidència actual"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "Voleu recuperar els documents que tenieu oberts?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Sembla que l'última vegada que es va executar l'Evince va finalitzar "
+#~ "sobtadament. Tot i així, podeu recuperar els documents oberts."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_No els recuperis"
+
+#~ msgid "_Recover"
+#~ msgstr "_Recupera'ls"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Recuperació de documents"
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "No s'ha pogut crear l'enllaç simbòlic «%s»: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "No se n'ha pogut obrir una còpia."
+
+#~ msgid "Co_nnect"
+#~ msgstr "Co_nnecta"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "Connecta _anònimament"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Connecta com a u_suari:"
+
+#~ msgid "_Username:"
+#~ msgstr "Nom d'_usuari:"
+
+#~ msgid "_Domain:"
+#~ msgstr "_Domini:"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "_Oblida la contrasenya immediatament"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_Recorda la contrasenya durant aquesta sessió"
+
+#~ msgid "_Remember forever"
+#~ msgstr "_Recorda-la per sempre"
+
+#~ msgid "File not available"
+#~ msgstr "El fitxer no està disponible"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "La gestió de fitxers remots no està implementada"
+
+#~ msgid "Find Previous"
+#~ msgstr "Cerca l'anterior"
+
+#~ msgid "Find Next"
+#~ msgstr "Cerca la següent"
+
+#~ msgid "Password Entry"
+#~ msgstr "Entrada de la contrasenya"
+
+#~ msgid "Remember password for this session"
+#~ msgstr "Recorda la contrasenya durant aquesta sessió"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "Desa la contrasenya a l'anell de claus"
+
+#~ msgid "<b>Title:</b>"
+#~ msgstr "<b>Títol:</b>"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f in"
+
+#~ msgid "Incorrect password"
+#~ msgstr "Contrasenya errònia"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Visualitzador de documents Evince"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "Carta"
+
+#~ msgid "Tabloid"
+#~ msgstr "Tabloide"
+
+#~ msgid "Ledger"
+#~ msgstr "Llibre de comptes"
+
+#~ msgid "Legal"
+#~ msgstr "Legal"
+
+#~ msgid "Statement"
+#~ msgstr "Declaració"
+
+#~ msgid "Executive"
+#~ msgstr "Executiu"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Foli"
+
+#~ msgid "Quarto"
+#~ msgstr "En quart"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "No s'ha pogut obrir el fitxer «%s»."
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "No s'ha pogut carregar el document «%s». No s'ha trobat l'intèrpret "
+#~ "Ghostscript en el camí"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "PostScript encapsulat"
+
+#~ msgid "PostScript"
+#~ msgstr "PostScript"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "L'intèrpret ha fallat."
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "Tipus MIME no gestionat: «%s»"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "La generació de PDF no està implementada"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "Esteu intentant imprimir a una impressora amb el controlador «%s». Aquest "
+#~ "programa requereix un controlador d'impressió PostScript."
+
+#~ msgid "Pages"
+#~ msgstr "Pàgines"
+
+#~ msgid "Invalid URI: “%s”"
+#~ msgstr "URI invàlid: «%s»"
+
+#~ msgid "Unsupported URI: “%s”"
+#~ msgstr "No es sap gestionar l'URI: «%s»"
+
+#~ msgid "Images"
+#~ msgstr "Imatges"
+
+#~ msgid "Open “%s”"
+#~ msgstr "Obre «%s»"
+
+#~ msgid "Empty"
+#~ msgstr "Buit"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "No document loaded."
+#~ msgstr "No hi ha cap document carregat."
+
+#~ msgid "Broken pipe."
+#~ msgstr "Conducte trencat."
+
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "S'ha produït un error en descomprimir el fitxer «%s»:\n"
+
+#~ msgid "File is not readable."
+#~ msgstr "El fitxer no és llegible."
+
+#~ msgid "Document loaded."
+#~ msgstr "S'ha carregat el document."
+
+#~ msgid "_Previous"
+#~ msgstr "_Anterior"
+
+#~ msgid "_Next"
+#~ msgstr "_Següent"
+
+#~ msgid "Hide attachments bar"
+#~ msgstr "Amaga la barra d'adjuncions"
+
+#~ msgid "Not found"
+#~ msgstr "No s'ha trobat"
+
+#~ msgid "The \"Find\" feature will not work with this document"
+#~ msgstr "La característica de «Cerca» no funcionarà en aquest document"
+
+#~ msgid "Searching for text is only supported for PDF documents."
+#~ msgstr "Només es pot cercar text en els documents PDF."
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "Default sidebar size"
+#~ msgstr "Mida per defecte de la barra lateral"
+
+#~ msgid "Show sidebar by default"
+#~ msgstr "Mostra la barra lateral per defecte"
+
+#~ msgid "Show statusbar by default"
+#~ msgstr "Mostra la barra d'estat per defecte"
+
+#~ msgid "Show toolbar by default"
+#~ msgstr "Mostra la barra d'eines per defecte"
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. The "
+#~ "default size sets the sidebar's width in pixels based from the side of "
+#~ "the window. Any integer will be accepted. The sidebar will never shrink "
+#~ "smaller than the size of the text required to display Thumbnails or "
+#~ "Index. Large values will cause the sidebar to take up as much of the page "
+#~ "display area as possible relative to the window's size."
+#~ msgstr ""
+#~ "La barra lateral és l'element lateral que conté les llistes d'índex i "
+#~ "miniatures. La mida per defecte estableix l'amplada en píxels de la barra "
+#~ "lateral basada en el lateral de la finestra. Qualsevol enter s'acceptarà. "
+#~ "La barra lateral mai serà més petita que la mida del text que necessita "
+#~ "per mostrar les miniatures o els índexs. Valors alts faran que la barra "
+#~ "lateral agafi bona part de l'àrea per mostrar la pàgina relatiu a la mida "
+#~ "de la finestra."
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. Two "
+#~ "boolean options, true makes sidebar visible by default while false makes "
+#~ "sidebar not visible by default"
+#~ msgstr ""
+#~ "La barra lateral és l'element lateral que conté les llistes d'índexs i "
+#~ "miniatures. Admet dues opcions booleanes, cert fa que la barra lateral "
+#~ "sigui visible per defecte, mentre que fals farà que per defecte no sigui "
+#~ "visible."
+
+#~ msgid ""
+#~ "Statusbar is the standard bottom bar that display additional information "
+#~ "about links and other actions. Two boolean options, true makes the "
+#~ "statusbar visible by default while false makes sidebar not visible by "
+#~ "default."
+#~ msgstr ""
+#~ "La barra d'estat és la barra estàndard de baix de tot que mostra "
+#~ "informació addicional sobre els enllaços i altres accions. Admet dues "
+#~ "opcions booleanes, cert fa que la barra d'estat sigui visible per "
+#~ "defecte, mentre que fals farà que per defecte no sigui visible."
+
+#~ msgid ""
+#~ "Toolbar is the top bar that contains navigation and zoom controls. Two "
+#~ "boolean options, true makes toolbar visible by default while false makes "
+#~ "toolbar not visible by default."
+#~ msgstr ""
+#~ "La barra d'eines és la barra de dalt de tot que conté els controls de "
+#~ "navegació i d'ampliació. Admet dues opcions boolenaes, cert fa que la "
+#~ "barra d'eines sigui visible per defecte, mentre que fals farà que per "
+#~ "defecte no sigui visible."
+
+#~ msgid "Unable to find glade file"
+#~ msgstr "No s'ha trobat el fitxer glade"
+
+#~ msgid ""
+#~ "The glade file, %s, cannot be found. Please check that your installation "
+#~ "is complete."
+#~ msgstr ""
+#~ "El fitxer glade, %s, no s'ha trobat. Comproveu que la instal·lació "
+#~ "estigui completa."
+
+#~ msgid "Document Viewer - Password Required"
+#~ msgstr "Visualitzador de documents - Es necessita contrasenya"
+
+#~ msgid "Save the current document with a new filename"
+#~ msgstr "Desa el document actual amb un nom nou"
+
+#~ msgid "View the properties of this document"
+#~ msgstr "Mostra les propietats d'aquest document"
+
+#~ msgid "Close this window"
+#~ msgstr "Tanca aquesta finestra"
+
+#~ msgid "Copy text from the document"
+#~ msgstr "Copia el text del document"
+
+#~ msgid "Select the entire page"
+#~ msgstr "Selecciona la pàgina sencera"
+
+#~ msgid "Customize the toolbar"
+#~ msgstr "Personalitza la barra d'eines"
+
+#~ msgid "Rotate the document to the left"
+#~ msgstr "Gira el document cap a l'esquerra"
+
+#~ msgid "Rotate the document to the right"
+#~ msgstr "Gira el document cap a la dreta"
+
+#~ msgid "Display help for the viewer application"
+#~ msgstr "Mostra l'ajuda del visualitzador"
+
+#~ msgid "Display credits for the document viewer creators"
+#~ msgstr "Mostra els crèdits dels creadors del visualitzador de documents"
+
+#~ msgid "Scroll one page forward"
+#~ msgstr "Vés una pàgina endevant"
+
+#~ msgid "Scroll one page backward"
+#~ msgstr "Vés una pàgina enrere"
+
+#~ msgid "Focus the page selector"
+#~ msgstr "Enfoca el selector de pàgina"
+
+#~ msgid "Go ten pages backward"
+#~ msgstr "Vés deu pàgines enrere"
+
+#~ msgid "Go ten pages forward"
+#~ msgstr "Vés deu pàgines endevant"
+
+#~ msgid "_Statusbar"
+#~ msgstr "Barra d'e_stat"
+
+#~ msgid "Show or hide the statusbar"
+#~ msgstr "Mostra o amaga la barra d'estat"
+
+#~ msgid "Name"
+#~ msgstr "Nom"
+
+#~ msgid "<span size=\"smaller\"> </span>"
+#~ msgstr "<span size=\"smaller\"> </span>"
+
+#~ msgid "unexpected EOF\n"
+#~ msgstr "EOF inesperat\n"
+
+#~ msgid "could not load font `%s'\n"
+#~ msgstr "no s'ha pogut carregar la font '%s'\n"
+
+#~ msgid "could not reload `%s'\n"
+#~ msgstr "no s'ha pogut recarregar '%s'\n"
+
+#~ msgid "%s: unsupported DVI format (version %u)\n"
+#~ msgstr "%s: el format DVI no està implementat (versió %u)\n"
+
+#~ msgid "%s: File corrupted, or not a DVI file\n"
+#~ msgstr "%s: El fitxer està malmès, o no és un fitxer DVI\n"
+
+#~ msgid "%s: vf macro had errors\n"
+#~ msgstr "%s: la macro vf conté errors\n"
+
+#~ msgid "%s: stack not empty after vf macro\n"
+#~ msgstr "%s: la pila no és buida després de la macro vf\n"
+
+#~ msgid "%s: could not reopen file (%s)\n"
+#~ msgstr "%s: no es pot tornar a obrir el fitxer (%s)\n"
+
+#~ msgid "%s: page %d out of range\n"
+#~ msgstr "%s: la pàgina %d està fora del rang\n"
+
+#~ msgid "%s: bad offset at page %d\n"
+#~ msgstr "%s: compensació incorrecta a la pàgina %d\n"
+
+#~ msgid "stack not empty at end of page\n"
+#~ msgstr "la pila no és buida al final de la pàgina\n"
+
+#~ msgid "no default font set yet\n"
+#~ msgstr "encara no s'ha establert cap tipus de lletra per defecte\n"
+
+#~ msgid "requested character %d does not exist in `%s'\n"
+#~ msgstr "el caràcter demanat %d no existeix a '%s'\n"
+
+#~ msgid "enlarging stack\n"
+#~ msgstr "s'està engrandint la pila\n"
+
+#~ msgid "font %d is not defined\n"
+#~ msgstr "el tipus de lletra %d no està definit\n"
+
+#~ msgid "unexpected opcode %d\n"
+#~ msgstr "no s'esperava el codi d'operació %d\n"
+
+#~ msgid "undefined opcode %d\n"
+#~ msgstr "el codi d'operació %d no està definit\n"
+
+#~ msgid "%s: no fonts defined\n"
+#~ msgstr "%s: no hi ha cap tipus de lletra definit\n"
+
+#~ msgid "%s: %d: [%s] requested encoding `%s' does not match vector `%s'\n"
+#~ msgstr ""
+#~ "%s: %d: [%s] la codificació sol·licitada '%s' no coincideix amb el vector "
+#~ "'%s'\n"
+
+#~ msgid "%s: could not load fontmap\n"
+#~ msgstr "%s: no s'ha pogut carregar el mapa del tipus de lletra\n"
+
+#~ msgid "%s: could not set as default encoding\n"
+#~ msgstr "%s: no s'ha pogut posar com a codificació per defecte\n"
+
+#~ msgid "encoding vector `%s' is in use\n"
+#~ msgstr "s'està utilitzant el vector de codificació '%s'\n"
+
+#~ msgid "GF: invalid opcode %d in character %d\n"
+#~ msgstr "GF: el codi d'operació %d no és vàlid en el caràcter %d\n"
+
+#~ msgid "(gf) Character %d: invalid opcode %d\n"
+#~ msgstr "(gf) Caràcter %d: el codi d'operació %d no és vàlid\n"
+
+#~ msgid "(gf) character %d has an incorrect bounding box\n"
+#~ msgstr "(gf) el caràcter %d té una caixa de limitació incorrecte\n"
+
+#~ msgid "%s: bad checksum (expected %u, found %u)\n"
+#~ msgstr "%s: suma de verificació errònia (s'esperava %u, s'ha trobat %u)\n"
+
+#~ msgid "%s: File corrupted, or not a GF file\n"
+#~ msgstr "%s: El fitxer està malmès, o no és un fitxer GF\n"
+
+#~ msgid "more than 10 counters in page specification\n"
+#~ msgstr "més de 10 contadors en l'especificació de pàgina\n"
+
+#~ msgid "custom"
+#~ msgstr "personalitzat"
+
+#~ msgid "Bad PK file: More bits than required\n"
+#~ msgstr "Fiter PK erroni: més bits dels requerits\n"
+
+#~ msgid "%s: checksum mismatch (expected %u, got %u)\n"
+#~ msgstr ""
+#~ "%s: la suma de comprovació no coincideix (s'esperava %u, s'ha obtingut %"
+#~ "u)\n"
+
+#~ msgid "%s: unexpected preamble\n"
+#~ msgstr "%s: no s'esperava el preàmbul\n"
+
+#~ msgid "%s: File corrupted, or not a PK file\n"
+#~ msgstr "%s: El fitxer està malmès, o no és un fitxer PK\n"
+
+#~ msgid "%s: malformed value for key `%s'\n"
+#~ msgstr "%s: valor malformat per a la clau '%s'\n"
+
+#~ msgid "%s: unknown key `%s' ignored\n"
+#~ msgstr "%s: s'ha ignorat la clau desconeguda '%s'\n"
+
+#~ msgid "%s: no argument for key `%s', using defaults\n"
+#~ msgstr ""
+#~ "%s: no hi ha argument per a la clau '%s', s'utilitzarà allò per defecte\n"
+
+#~ msgid "%s: argument `%s' ignored for key `%s'\n"
+#~ msgstr "%s: s'ha ignorat l'argument '%s' per a la clau '%s'\n"
+
+#~ msgid "%s: tried to pop top level layer\n"
+#~ msgstr "%s: s'ha provat de desempilar la capa superior\n"
+
+#~ msgid "(t1) failed to reset device resolution\n"
+#~ msgstr "(t1) error al reiniciar la resolució del dispositiu\n"
+
+#~ msgid "%s: could not encode font\n"
+#~ msgstr "%s: no s'ha pogut codificar el tipus de lletra\n"
+
+#~ msgid "(t1) unsupported bitmap pad size %d\n"
+#~ msgstr "(t1) la mida %d del coixí del mapa de bits no està implementada\n"
+
+#~ msgid "%s: Checksum mismatch (got %u, expected %u)\n"
+#~ msgstr ""
+#~ "%s: La suma de comprovació no coincideix (s'ha obtingut %u, s'esperava %"
+#~ "u)\n"
+
+#~ msgid "%s: Error reading AFM data\n"
+#~ msgstr "%s: S'ha produït un error en llegir dades AFM\n"
+
+#~ msgid "Warning: TFM file `%s' has suspicious size\n"
+#~ msgstr "Avís: el fitxer TFM '%s' té una mida sospitosa\n"
+
+#~ msgid "%s: font coding scheme truncated to 40 bytes\n"
+#~ msgstr ""
+#~ "%s: s'ha truncat l'esquema de codificació del tipus de lletra a 40 bytes\n"
+
+#~ msgid "%s: File corrupted, or not a TFM file\n"
+#~ msgstr "%s: El fitxer està malmès, o no és un fitxer TFM\n"
+
+#~ msgid "(tt) %s: no acceptable map found, using #0\n"
+#~ msgstr "(tt) %s: el mapa trobat no és acceptable, s'utilitza #0\n"
+
+#~ msgid "(tt) %s: could not set resolution: %s\n"
+#~ msgstr "(tt) %s: no s'ha pogut establir la resolució: %s\n"
+
+#~ msgid "(tt) %s: could not set point size: %s\n"
+#~ msgstr "(tt) %s: no s'ha pogut establir la mida del punter: %s\n"
+
+#~ msgid "(tt) %s: could not load PS name table\n"
+#~ msgstr "(tt) %s: no s'ha pogut carregar el nom de la taula PS\n"
+
+#~ msgid "%s: no encoding vector found, expect bad output\n"
+#~ msgstr ""
+#~ "%s: no s'ha trobat vector de codificació, excepte una sortida errònia\n"
+
+#~ msgid "Crashing"
+#~ msgstr "Fallant"
+
+#~ msgid "%s: Warning: "
+#~ msgstr "%s: Avís: "
+
+#~ msgid "%s: Fatal: "
+#~ msgstr "%s: Fatal: "
+
+#~ msgid "Fatal"
+#~ msgstr "Fatal"
+
+# FIXME
+#~ msgid "out of memory allocating %u bytes\n"
+#~ msgstr "fora de memòria ubicant %u bytes\n"
+
+#~ msgid "attempted to reallocate with zero size\n"
+#~ msgstr "intentat reassignar amb mida zero\n"
+
+#~ msgid "failed to reallocate %u bytes\n"
+#~ msgstr "s'ha produït un error en reubicar %u bytes\n"
+
+#~ msgid "failed to allocate %ux%u bytes\n"
+#~ msgstr "no s'ha pogut ubicar %ux%u bytes\n"
+
+#~ msgid "attempted to free NULL pointer\n"
+#~ msgstr "s'ha intentat alliberar un punter NULL\n"
+
+#~ msgid "%s: Checksum mismatch (expected %u, got %u)\n"
+#~ msgstr ""
+#~ "%s: la suma de verificació no coincideix (s'esperava %u, s'ha obtingut %"
+#~ "u)\n"
+
+#~ msgid "(vf) %s: could not load font `%s'\n"
+#~ msgstr "(vf) %s: no s'ha pogut carregar el tipus de lletra '%s'\n"
+
+#~ msgid "(vf) %s: character %d redefined\n"
+#~ msgstr "(vf) %s: el caràcter %d s'ha redefinit\n"
+
+#~ msgid "(vf) %s: no postamble\n"
+#~ msgstr "(vf) %s: no hi ha postàmbul\n"
+
+#~ msgid "%s: File corrupted, or not a VF file.\n"
+#~ msgstr "%s: El fitxer està corruput, o no és un fitxer VF.\n"
+
+#~ msgid "Error while scanning file %s\n"
+#~ msgstr "S'ha produït un error en analitzar el fitxer %s\n"
+
+#~ msgid "The file is not a PostScript document."
+#~ msgstr "El fitxer no és un document PostScript."
+
+#~ msgid "Many..."
+#~ msgstr "Molts..."
+
+#~ msgid "Not so many..."
+#~ msgstr "No tants..."
+
+#~ msgid "Reset the zoom level to the default value"
+#~ msgstr "Reinicia el zoom al valor per defecte"
+
+#~ msgid "Selection Caret"
+#~ msgstr "Cursor de selecció"
+
+#~ msgid "Single"
+#~ msgstr "Una a una"
+
+#~ msgid "Show the document one page at a time"
+#~ msgstr "Mostra el document pàgina a pàgina"
+
+#~ msgid "Multi"
+#~ msgstr "Totes"
+
+#~ msgid "Show the full document at once"
+#~ msgstr "Mostra tot el document alhora"
+
+#~ msgid "Show sidebar by default."
+#~ msgstr "Per defecte mostra la barra lateral."
+
+#~ msgid "Show statusbar by default."
+#~ msgstr "Per defecte mostra la barra d'estat."
+
+#~ msgid "Show toolbar by default."
+#~ msgstr "Per defecte mostra la barra d'eines."
+
+#~ msgid "The default sidebar size."
+#~ msgstr "La mida per defecte de la barra lateral."
+
+#~ msgid "Error while converting pdf file %s:\n"
+#~ msgstr "S'ha produït un error en convertir el pdf %s:\n"
+
+#~ msgid "Exit Fullscreen"
+#~ msgstr "Surt de pantalla completa"
+
+#~ msgid "Open a file"
+#~ msgstr "Obre un fitxer"
+
+#~ msgid "_Close"
+#~ msgstr "_Tanca"
diff --git a/po/cs.po b/po/cs.po
new file mode 100644
index 00000000..fdd5b72d
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,1562 @@
+# Czech translation of evince.
+# Copyright (C) 2005, 2006, 2008, 2009, 2010 the author(s) of evince.
+# Copyright (C) 2005, 2006 Miloslav Trmac <[email protected]>.
+# Copyright (C) 2009 Martin Picek <[email protected]>.
+# This file is distributed under the same license as the evince package.
+# Miloslav Trmac <[email protected]>, 2005, 2006.
+# Jakub Friedl <[email protected]>, 2006, 2007.
+# Kamil Páral <[email protected]>, 2008.
+# Petr Kovar <[email protected]>, 2008, 2009.
+# Adrian Guniš <[email protected]>, 2008, 2009.
+# Martin Picek <[email protected]>, 2009.
+# Jan Drábek <[email protected]>, 2009.
+# Marek Černocký <[email protected]>, 2009.
+# Lucas Lommer <[email protected]>, 2010
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince mate-2-28\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-28 20:24+0200\n"
+"PO-Revision-Date: 2010-03-28 17:09+0100\n"
+"Last-Translator: Lucas Lommer <[email protected]>\n"
+"Language-Team: Czech <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Poedit-Language: Czech\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Při rozbalování (pomocí %s) knihy komiksů %s nastala chyba"
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Příkaz %s pro rozbalení knihy komiksů selhal."
+
+#: ../backend/comics/comics-document.c:183
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Příkaz %s neskončil normálně."
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Nejedná se o typ MIME pro komiks: %s"
+
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Nelze najít příslušný příkaz pro rozbalení této komiksové knihy."
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Neznámý typ MIME"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "Soubor je poškozen."
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "V archivu nebyly nalezeny žádné soubory."
+
+#: ../backend/comics/comics-document.c:474
+#, c-format
+msgid "No images found in archive %s"
+msgstr "V archivu %s nebyly nalezeny žádné obrázky"
+
+#: ../backend/comics/comics-document.c:718
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Při mazání %s se vyskytla chyba."
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr "Chyba %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Komiksy"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "Dokument DjVu nemá správný formát"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Dokument se skládá z několika souborů. K jednomu nebo více souborům se "
+"nepodařilo přistoupit."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Dokumenty DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Dokument DVI nemá správný formát"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Dokumenty DVI"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr "Toto je volné dílo (Public Domain)"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "Ano"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "Ne"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "Typ 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "Typ 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "Typ 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "Typ 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "Typ 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "Neznámý řez písma"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "Žádný název"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "Vložená podmnožina"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "Vložené"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "Nevložené"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Dokumenty PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Neplatný dokument"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Snímky Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Bez chyby"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Nedostatek paměti"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Nepodařilo se najít podpis ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Neplatný soubor ZIP"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Vícesouborové ZIPy nejsou podporovány"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Nepodařilo se otevřít soubor"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Ze souboru se nepodařilo přečíst data"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "V archivu ZIP se nepodařilo najít soubor"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Neznámá chyba"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Nepodařilo se načíst dokument „%s“"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Nepodařilo se uložit dokument „%s“"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Dokumenty PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Nepodařilo se uložit přílohu „%s“: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Nepodařilo se otevřít přílohu „%s“: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Nepodařilo se otevřít přílohu „%s“"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Typ souboru %s (%s) není podporován"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Všechny dokumenty"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Všechny soubory"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Nepodařilo se vytvořit dočasný soubor: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Nepodařilo se vytvořit dočasný adresář: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Soubor není platným souborem .desktop"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Nerozpoznaný soubor typu .desktop ve verzi „%s“"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Spouští se %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Aplikace nepřijímá dokumenty z příkazové řádky"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Nerozpoznaná volba spouštění: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Nelze předat URI dokumentu položce .desktop „Type=Link“"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Není spustitelnou položkou"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Zakázat spojení se správcem sezení"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Zadejte soubor obsahující uložené nastavení"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "SOUBOR"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Zadejte ID správce sezení"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Volby správce sezení:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Zobrazit volby správce sezení"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "Zobrazit „_%s“"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "_Přesunout na lištu nástrojů"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "Přesunout vybranou položku na nástrojovou lištu"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "_Odstranit z nástrojové lišty"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "Odstranit vybranou položku z nástrojové lišty"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "_Odstranit nástrojovou lištu"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "Odstranit vybranou nástrojovou lištu"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Oddělovač"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+msgid "Running in presentation mode"
+msgstr "Běží v režimu prezentace"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5341
+msgid "Best Fit"
+msgstr "Přizpůsobit"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Přizpůsobit šířce stránky"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400 %"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4205
+#: ../shell/ev-window-title.c:149 ../shell/main.c:282
+#, c-format
+msgid "Document Viewer"
+msgstr "Prohlížeč dokumentů"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Zobrazovat dokumenty po více stránkách"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Ignorovat omezení dokumentu"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Ignorovat omezení dokumentu, například zákaz kopírování nebo tisku."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "Smazat dočasný soubor"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "Soubor s nastavením tisku"
+
+#: ../previewer/ev-previewer.c:143 ../previewer/ev-previewer.c:177
+msgid "MATE Document Previewer"
+msgstr "Prohlížeč dokumentů pro pracovní prostředí MATE"
+
+#: ../previewer/ev-previewer-window.c:90 ../shell/ev-window.c:3005
+msgid "Failed to print document"
+msgstr "Nepodařilo se vytisknout dokument"
+
+#: ../previewer/ev-previewer-window.c:204
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Vybraná tiskárna '%s' nebyla nalezena"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:248 ../shell/ev-window.c:5090
+msgid "_Previous Page"
+msgstr "_Předchozí stránka"
+
+#: ../previewer/ev-previewer-window.c:249 ../shell/ev-window.c:5091
+msgid "Go to the previous page"
+msgstr "Přejít na předchozí stránku"
+
+#: ../previewer/ev-previewer-window.c:251 ../shell/ev-window.c:5093
+msgid "_Next Page"
+msgstr "_Následující stránka"
+
+#: ../previewer/ev-previewer-window.c:252 ../shell/ev-window.c:5094
+msgid "Go to the next page"
+msgstr "Přejít na následující stránku"
+
+#: ../previewer/ev-previewer-window.c:255 ../shell/ev-window.c:5077
+msgid "Enlarge the document"
+msgstr "Zvětšit dokument"
+
+#: ../previewer/ev-previewer-window.c:258 ../shell/ev-window.c:5080
+msgid "Shrink the document"
+msgstr "Zmenšit dokument"
+
+#: ../previewer/ev-previewer-window.c:261 ../libview/ev-print-operation.c:1315
+msgid "Print"
+msgstr "Tisk"
+
+#: ../previewer/ev-previewer-window.c:262 ../shell/ev-window.c:5048
+msgid "Print this document"
+msgstr "Vytisknout tento dokument"
+
+#: ../previewer/ev-previewer-window.c:268 ../shell/ev-window.c:5192
+msgid "_Best Fit"
+msgstr "Přizpůsob_it"
+
+#: ../previewer/ev-previewer-window.c:269 ../shell/ev-window.c:5193
+msgid "Make the current document fill the window"
+msgstr "Nechat aktuální dokument vyplnit okno"
+
+#: ../previewer/ev-previewer-window.c:271 ../shell/ev-window.c:5195
+msgid "Fit Page _Width"
+msgstr "Přizpůsobi_t šířce strany"
+
+#: ../previewer/ev-previewer-window.c:272 ../shell/ev-window.c:5196
+msgid "Make the current document fill the window width"
+msgstr "Nechat aktuální dokument vyplnit šířku okna"
+
+#: ../previewer/ev-previewer-window.c:455 ../shell/ev-window.c:5263
+msgid "Page"
+msgstr "Stránka"
+
+#: ../previewer/ev-previewer-window.c:456 ../shell/ev-window.c:5264
+msgid "Select Page"
+msgstr "Zvolit stranu"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokument"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Název:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Umístění:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Předmět:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "Autor:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Klíčová slova:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Producent:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Tvůrce:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Vytvořeno:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Změněno:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Počet stránek:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimalizace:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Formát:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Zabezpečení:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Velikost papíru:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1896
+msgid "None"
+msgstr "Žádné"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:284
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:288
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f palců"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, na výšku (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, na šířku (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d z %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "z %d"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:341
+msgid "Preparing to print…"
+msgstr "Připravuje se tisk…"
+
+#: ../libview/ev-print-operation.c:343
+msgid "Finishing…"
+msgstr "Probíhá dokončování…"
+
+#: ../libview/ev-print-operation.c:345
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Tiskne se stránka %d z %d…"
+
+#: ../libview/ev-print-operation.c:1169
+msgid "Printing is not supported on this printer."
+msgstr "Tisk není touto tiskárnou podporován."
+
+#: ../libview/ev-print-operation.c:1234
+msgid "Invalid page selection"
+msgstr "Neplatný výběr stran"
+
+#: ../libview/ev-print-operation.c:1235
+msgid "Warning"
+msgstr "Varování"
+
+#: ../libview/ev-print-operation.c:1237
+msgid "Your print range selection does not include any pages"
+msgstr "Snažíte se vytisknout výběr, který nezahrnuje žádné stránky"
+
+#: ../libview/ev-print-operation.c:1891
+msgid "Page Scaling:"
+msgstr "Změna velikosti stránky:"
+
+#: ../libview/ev-print-operation.c:1897
+msgid "Shrink to Printable Area"
+msgstr "Zmenšit na tisknutelnou oblast"
+
+#: ../libview/ev-print-operation.c:1898
+msgid "Fit to Printable Area"
+msgstr "Přizpůsobit tisknutelné oblasti"
+
+#: ../libview/ev-print-operation.c:1901
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Přizpůsobení stránky dokumentu tak, aby odpovídaly velikosti dle zvolené "
+"tiskárny. Vyberte jednu z následujících možností:\n"
+"\n"
+"• „Žádná“: Nebude provedena žádná změna velikosti.\n"
+"\n"
+"• „Zmenšit na tisknutelnou oblast“: Stránky dokumentu, které jsou větší než "
+"tisknutelná oblast budou zmenšeny tak, aby se vešly do tisknutelné oblasti "
+"tiskárny.\n"
+"\n"
+"• „Přizpůsobit tisknutelné oblasti“: Stránky dokumentu budou podle potřeby "
+"zvětšeny nebo zmenšeny tak, aby odpovídaly tisknutelné oblasti tiskárny.\n"
+
+#: ../libview/ev-print-operation.c:1913
+msgid "Auto Rotate and Center"
+msgstr "Automaticky otočit a centrovat"
+
+#: ../libview/ev-print-operation.c:1916
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Otočí každou tisknutou stranu tak, aby odpovídala orientaci stránky v "
+"dokumentu. Stránky dokumentu budou vycentrovány."
+
+#: ../libview/ev-print-operation.c:1921
+msgid "Select page size using document page size"
+msgstr "Velikost stránky dle velikosti stránky dokumentu"
+
+#: ../libview/ev-print-operation.c:1923
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Pokud je povoleno, bude každá stránka vytištěna na papír o velikosti, jakou "
+"má v dokumentu."
+
+#: ../libview/ev-print-operation.c:2005
+msgid "Page Handling"
+msgstr "Nastavení stránky"
+
+#: ../libview/ev-jobs.c:1434
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Nepodařilo se vytisknout stranu %d z dokumentu %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Posunout nahoru"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Posunout dolů"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Posunout pohled nahoru"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Posunout pohled dolů"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Pohled na dokument"
+
+#: ../libview/ev-view-presentation.c:668
+msgid "Jump to page:"
+msgstr "Přejít na stránku:"
+
+#: ../libview/ev-view-presentation.c:970
+msgid "End of presentation. Click to exit."
+msgstr "Konec prezentace. Prezentaci opustíte klepnutím myši."
+
+#: ../libview/ev-view.c:1724
+msgid "Go to first page"
+msgstr "Přejít na první stránku"
+
+#: ../libview/ev-view.c:1726
+msgid "Go to previous page"
+msgstr "Přejít na předchozí stránku"
+
+#: ../libview/ev-view.c:1728
+msgid "Go to next page"
+msgstr "Přejít na následující stránku"
+
+#: ../libview/ev-view.c:1730
+msgid "Go to last page"
+msgstr "Přejít na poslední stránku"
+
+#: ../libview/ev-view.c:1732
+msgid "Go to page"
+msgstr "Přejít na stránku"
+
+#: ../libview/ev-view.c:1734
+msgid "Find"
+msgstr "Najít"
+
+#: ../libview/ev-view.c:1762
+#, c-format
+msgid "Go to page %s"
+msgstr "Přejít na stránku %s"
+
+#: ../libview/ev-view.c:1768
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Přejít na %s v souboru „%s“"
+
+#: ../libview/ev-view.c:1771
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Přejít na soubor “%s”"
+
+#: ../libview/ev-view.c:1779
+#, c-format
+msgid "Launch %s"
+msgstr "Spustit %s"
+
+#: ../libview/ev-view.c:3923 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Probíhá načítání…"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Najít:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5065
+msgid "Find Pre_vious"
+msgstr "Najít _předchozí"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Najít předchozí výskyt hledaného řetězce"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5063
+msgid "Find Ne_xt"
+msgstr "Najít _následující"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Najít následující výskyt hledaného řetězce"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Rozlišovat velikost písmen"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Přepnout rozlišování velikosti písmen při hledání"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Heslo dokumentu %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Převádí se %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d z %d dokumentů převedeno"
+
+#: ../shell/ev-convert-metadata.c:164 ../shell/ev-convert-metadata.c:179
+msgid "Converting metadata"
+msgstr "Převod metadat"
+
+#: ../shell/ev-convert-metadata.c:185
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Formát metadat, který Evince požívá, se změnil, a proto musí být proveden "
+"převod. Pokud převod přerušíte, úložiště metadat nebude fungovat."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Otevřít nedávno použitý dokument"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Tento dokument je uzamčen a lze jej číst jen po zadání správného hesla."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "_Odemknout dokument"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Zadejte heslo"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Je vyžadováno heslo"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "Dokument „%s“ je uzamčen a před otevřením vyžaduje zadání hesla."
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Heslo:"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "Zapomenout heslo _okamžitě"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _log out"
+msgstr "_Pamatovat si heslo, dokud se neodhlásíte"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "Zapamatovat si _napořád"
+
+#: ../shell/ev-properties-dialog.c:58
+msgid "Properties"
+msgstr "Vlastnosti"
+
+#: ../shell/ev-properties-dialog.c:92
+msgid "General"
+msgstr "Obecné"
+
+#: ../shell/ev-properties-dialog.c:102
+msgid "Fonts"
+msgstr "Písma"
+
+#: ../shell/ev-properties-dialog.c:115
+msgid "Document License"
+msgstr "Licence dokumentu"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Písmo"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Získávají se informace o písmech… %3d %%"
+
+#: ../shell/ev-properties-license.c:138
+msgid "Usage terms"
+msgstr "Podmínky užívání"
+
+#: ../shell/ev-properties-license.c:144
+msgid "Text License"
+msgstr "Licence textu"
+
+#: ../shell/ev-properties-license.c:150
+msgid "Further Information"
+msgstr "Další informace"
+
+#: ../shell/ev-sidebar-attachments.c:712
+msgid "Attachments"
+msgstr "Přílohy"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Vrstvy"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Tisk…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Rejstřík"
+
+#: ../shell/ev-sidebar-thumbnails.c:956
+msgid "Thumbnails"
+msgstr "Náhledy"
+
+#: ../shell/ev-window.c:839
+#, c-format
+msgid "Page %s — %s"
+msgstr "Stránka %s — %s"
+
+#: ../shell/ev-window.c:841
+#, c-format
+msgid "Page %s"
+msgstr "Stránka %s"
+
+#: ../shell/ev-window.c:1285
+msgid "The document contains no pages"
+msgstr "Dokument neobsahuje žádné stránky"
+
+#: ../shell/ev-window.c:1288
+msgid "The document contains only empty pages"
+msgstr "Dokument obsahuje pouze prázdné stránky"
+
+#: ../shell/ev-window.c:1482 ../shell/ev-window.c:1648
+msgid "Unable to open document"
+msgstr "Nepodařilo se otevřít dokument"
+
+#: ../shell/ev-window.c:1619
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Načítá se dokument z %s"
+
+#: ../shell/ev-window.c:1761 ../shell/ev-window.c:2038
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Stahuje se dokument (%d %%)"
+
+#: ../shell/ev-window.c:1794
+msgid "Failed to load remote file."
+msgstr "Nepodařilo se nahrát vzdálený soubor"
+
+#: ../shell/ev-window.c:1982
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Obnovuje se dokument z %s"
+
+#: ../shell/ev-window.c:2014
+msgid "Failed to reload document."
+msgstr "Nepodařilo se obnovit dokument"
+
+#: ../shell/ev-window.c:2169
+msgid "Open Document"
+msgstr "Otevřít dokument"
+
+#: ../shell/ev-window.c:2433
+#, c-format
+msgid "Saving document to %s"
+msgstr "Dokument se ukládá do %s"
+
+#: ../shell/ev-window.c:2436
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Příloha se ukládá do %s"
+
+#: ../shell/ev-window.c:2439
+#, c-format
+msgid "Saving image to %s"
+msgstr "Obrázek se ukládá do %s"
+
+#: ../shell/ev-window.c:2483 ../shell/ev-window.c:2583
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Soubor nelze uložit jako „%s“."
+
+#: ../shell/ev-window.c:2514
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Nahrává se dokument (%d %%)"
+
+#: ../shell/ev-window.c:2518
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Nahrává se příloha (%d %%)"
+
+#: ../shell/ev-window.c:2522
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Nahrává se obrázek (%d %%)"
+
+#: ../shell/ev-window.c:2644
+msgid "Save a Copy"
+msgstr "Uložit kopii"
+
+#: ../shell/ev-window.c:2949
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d nevyřízená úloha ve frontě"
+msgstr[1] "%d nevyřízené úlohy ve frontě"
+msgstr[2] "%d nevyřízených úloh ve frontě"
+
+#: ../shell/ev-window.c:3062
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Tiskne se úloha „%s“"
+
+#: ../shell/ev-window.c:3274
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Odložit uzavření, dokud se nedokončí tisková úloha „%s“?"
+
+#: ../shell/ev-window.c:3277
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"%d tiskové úlohy jsou aktivní. Odložit uzavření, dokud se nedokončí tisk?"
+
+#: ../shell/ev-window.c:3289
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Pokud zavřete okno, nebudou vytištěny nevyřízené tiskové úlohy."
+
+#: ../shell/ev-window.c:3293
+msgid "Cancel _print and Close"
+msgstr "Zrušit _tisk a zavřít"
+
+#: ../shell/ev-window.c:3297
+msgid "Close _after Printing"
+msgstr "Zavřít _po vytištění"
+
+#: ../shell/ev-window.c:3858
+msgid "Toolbar Editor"
+msgstr "Editor nástrojové lišty"
+
+#: ../shell/ev-window.c:3990
+msgid "There was an error displaying help"
+msgstr "Při zobrazování nápovědy se vyskytla chyba"
+
+#: ../shell/ev-window.c:4201
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Prohlížeč dokumentů.\n"
+"Použivá se %s (%s)"
+
+#: ../shell/ev-window.c:4232
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince je svobodný software; můžete jej šířit a/nebo modifikovat podle "
+"ustanovení GNU General Public License, vydávané Free Software Foundation; a "
+"to buď verze 2 této licence anebo (podle vlastního uvážení) kterékoliv "
+"pozdější verze.\n"
+
+#: ../shell/ev-window.c:4236
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince je rozšiřován v naději, že bude užitečný, avšak BEZ JAKÉKOLIV ZÁRUKY; "
+"neposkytují se ani odvozené záruky PRODEJNOSTI anebo VHODNOSTI PRO URČITÝ "
+"ÚČEL. Další podrobnosti hledejte v GNU General Public License.\n"
+
+#: ../shell/ev-window.c:4240
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Kopii GNU General Public License byste měli obdržet spolu s tímto programem; "
+"pokud se tak nestalo, napište o ni Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA.\n"
+
+#: ../shell/ev-window.c:4265
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4268
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 Autoři Evince"
+
+#: ../shell/ev-window.c:4274
+msgid "translator-credits"
+msgstr ""
+"Miloslav Trmač <[email protected]>\n"
+"Jakub Friedl <[email protected]>\n"
+"Kamil Páral <[email protected]>\n"
+"Petr Kovář <[email protected]>\n"
+"Adrian Guniš <[email protected]>\n"
+"Martin Picek <[email protected]>\n"
+"Jan Drábek <[email protected]>\n"
+"Marek Černocký <[email protected]>\n"
+"Lucas Lommer <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4543
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d výsledek na této stránce"
+msgstr[1] "%d výsledky na této stránce"
+msgstr[2] "%d výsledků na této stránce"
+
+#: ../shell/ev-window.c:4551
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Zbývá prohledat %3d %%"
+
+#: ../shell/ev-window.c:5028
+msgid "_File"
+msgstr "_Soubor"
+
+#: ../shell/ev-window.c:5029
+msgid "_Edit"
+msgstr "_Upravit"
+
+#: ../shell/ev-window.c:5030
+msgid "_View"
+msgstr "_Zobrazit"
+
+#: ../shell/ev-window.c:5031
+msgid "_Go"
+msgstr "Pře_jít"
+
+#: ../shell/ev-window.c:5032
+msgid "_Help"
+msgstr "_Nápověda"
+
+#. File menu
+#: ../shell/ev-window.c:5035 ../shell/ev-window.c:5303
+msgid "_Open…"
+msgstr "_Otevřít…"
+
+#: ../shell/ev-window.c:5036 ../shell/ev-window.c:5304
+msgid "Open an existing document"
+msgstr "Otevřít existující dokument"
+
+#: ../shell/ev-window.c:5038
+msgid "Op_en a Copy"
+msgstr "Otevřít _kopii"
+
+#: ../shell/ev-window.c:5039
+msgid "Open a copy of the current document in a new window"
+msgstr "Otevřít kopii aktuálního dokumentu v novém okně"
+
+#: ../shell/ev-window.c:5041
+msgid "_Save a Copy…"
+msgstr "_Uložit kopii…"
+
+#: ../shell/ev-window.c:5042
+msgid "Save a copy of the current document"
+msgstr "Uložit kopii aktuálního dokumentu"
+
+#: ../shell/ev-window.c:5044
+msgid "Page Set_up…"
+msgstr "Vlastnosti tisk_u…"
+
+#: ../shell/ev-window.c:5045
+msgid "Set up the page settings for printing"
+msgstr "Nastavit stránku pro tisk"
+
+#: ../shell/ev-window.c:5047
+msgid "_Print…"
+msgstr "_Tisk…"
+
+#: ../shell/ev-window.c:5050
+msgid "P_roperties"
+msgstr "_Vlastnosti"
+
+#: ../shell/ev-window.c:5058
+msgid "Select _All"
+msgstr "Vy_brat vše"
+
+#: ../shell/ev-window.c:5060
+msgid "_Find…"
+msgstr "_Najít…"
+
+#: ../shell/ev-window.c:5061
+msgid "Find a word or phrase in the document"
+msgstr "Najít v dokumentu slovo nebo frázi"
+
+#: ../shell/ev-window.c:5067
+msgid "T_oolbar"
+msgstr "Nás_trojová lišta"
+
+#: ../shell/ev-window.c:5069
+msgid "Rotate _Left"
+msgstr "Otočit do_leva"
+
+#: ../shell/ev-window.c:5071
+msgid "Rotate _Right"
+msgstr "Otočit dop_rava"
+
+#: ../shell/ev-window.c:5082
+msgid "_Reload"
+msgstr "_Obnovit"
+
+#: ../shell/ev-window.c:5083
+msgid "Reload the document"
+msgstr "Obnovit dokument"
+
+#: ../shell/ev-window.c:5086
+msgid "Auto_scroll"
+msgstr "Automaticky po_sunovat"
+
+#: ../shell/ev-window.c:5096
+msgid "_First Page"
+msgstr "P_rvní stránka"
+
+#: ../shell/ev-window.c:5097
+msgid "Go to the first page"
+msgstr "Přejít na první stránku"
+
+#: ../shell/ev-window.c:5099
+msgid "_Last Page"
+msgstr "Po_slední stránka"
+
+#: ../shell/ev-window.c:5100
+msgid "Go to the last page"
+msgstr "Přejít na poslední stránku"
+
+#. Help menu
+#: ../shell/ev-window.c:5104
+msgid "_Contents"
+msgstr "_Obsah"
+
+#: ../shell/ev-window.c:5107
+msgid "_About"
+msgstr "O _aplikaci"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5111
+msgid "Leave Fullscreen"
+msgstr "Opustit celou obrazovku"
+
+#: ../shell/ev-window.c:5112
+msgid "Leave fullscreen mode"
+msgstr "Opustit režim přes celou obrazovku"
+
+#: ../shell/ev-window.c:5114
+msgid "Start Presentation"
+msgstr "Spustit prezentaci"
+
+#: ../shell/ev-window.c:5115
+msgid "Start a presentation"
+msgstr "Spustit prezentaci"
+
+#. View Menu
+#: ../shell/ev-window.c:5174
+msgid "_Toolbar"
+msgstr "_Nástrojová lišta"
+
+#: ../shell/ev-window.c:5175
+msgid "Show or hide the toolbar"
+msgstr "Zobrazit nebo skrýt nástrojovou lištu"
+
+#: ../shell/ev-window.c:5177
+msgid "Side _Pane"
+msgstr "_Postranní lišta"
+
+#: ../shell/ev-window.c:5178
+msgid "Show or hide the side pane"
+msgstr "Zobrazit nebo skrýt postranní lištu"
+
+#: ../shell/ev-window.c:5180
+msgid "_Continuous"
+msgstr "_Souvislé"
+
+#: ../shell/ev-window.c:5181
+msgid "Show the entire document"
+msgstr "Zobrazovat celý dokument"
+
+#: ../shell/ev-window.c:5183
+msgid "_Dual"
+msgstr "_Duální"
+
+#: ../shell/ev-window.c:5184
+msgid "Show two pages at once"
+msgstr "Zobrazovat po dvou stránkách"
+
+#: ../shell/ev-window.c:5186
+msgid "_Fullscreen"
+msgstr "Přes _celou obrazovku"
+
+#: ../shell/ev-window.c:5187
+msgid "Expand the window to fill the screen"
+msgstr "Zvětšit okno, aby vyplnilo obrazovku"
+
+#: ../shell/ev-window.c:5189
+msgid "Pre_sentation"
+msgstr "Pr_ezentace"
+
+#: ../shell/ev-window.c:5190
+msgid "Run document as a presentation"
+msgstr "Spustit dokument jako prezentaci"
+
+#: ../shell/ev-window.c:5198
+msgid "_Inverted Colors"
+msgstr "_Invertovat barvy"
+
+#: ../shell/ev-window.c:5199
+msgid "Show page contents with the colors inverted"
+msgstr "Zobrazí obsah stránky s invertovanými barvami"
+
+#. Links
+#: ../shell/ev-window.c:5207
+msgid "_Open Link"
+msgstr "_Otevřít odkaz"
+
+#: ../shell/ev-window.c:5209
+msgid "_Go To"
+msgstr "_Přejít na"
+
+#: ../shell/ev-window.c:5211
+msgid "Open in New _Window"
+msgstr "Otevřít v novém _okně"
+
+#: ../shell/ev-window.c:5213
+msgid "_Copy Link Address"
+msgstr "_Kopírovat adresu odkazu"
+
+#: ../shell/ev-window.c:5215
+msgid "_Save Image As…"
+msgstr "_Uložit obrázek jako…"
+
+#: ../shell/ev-window.c:5217
+msgid "Copy _Image"
+msgstr "Kopí_rovat obrázek"
+
+#: ../shell/ev-window.c:5222
+msgid "_Open Attachment"
+msgstr "_Otevřít přílohu"
+
+#: ../shell/ev-window.c:5224
+msgid "_Save Attachment As…"
+msgstr "_Uložit přílohu jako…"
+
+#: ../shell/ev-window.c:5277
+msgid "Zoom"
+msgstr "Zvětšení"
+
+#: ../shell/ev-window.c:5279
+msgid "Adjust the zoom level"
+msgstr "Upravit úroveň zvětšení"
+
+#: ../shell/ev-window.c:5289
+msgid "Navigation"
+msgstr "Navigace"
+
+#: ../shell/ev-window.c:5291
+msgid "Back"
+msgstr "Zpět"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5294
+msgid "Move across visited pages"
+msgstr "Procházení navštívených stránek"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5324
+msgid "Previous"
+msgstr "Předchozí"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5329
+msgid "Next"
+msgstr "Následující"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5333
+msgid "Zoom In"
+msgstr "Zvětšit"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5337
+msgid "Zoom Out"
+msgstr "Zmenšit"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5345
+msgid "Fit Width"
+msgstr "Přizpůsobit šířce"
+
+#: ../shell/ev-window.c:5506 ../shell/ev-window.c:5523
+msgid "Unable to launch external application."
+msgstr "Nepodařilo se spustit externí aplikaci."
+
+#: ../shell/ev-window.c:5580
+msgid "Unable to open external link"
+msgstr "Nepodařilo se otevřít externí odkaz"
+
+#: ../shell/ev-window.c:5747
+msgid "Couldn't find appropriate format to save image"
+msgstr "Nepodařilo se najít vhodný formát pro uložení obrázku"
+
+#: ../shell/ev-window.c:5789
+msgid "The image could not be saved."
+msgstr "Nepodařilo se uložit obrázek."
+
+#: ../shell/ev-window.c:5821
+msgid "Save Image"
+msgstr "Uložit obrázek"
+
+#: ../shell/ev-window.c:5888
+msgid "Unable to open attachment"
+msgstr "Nepodařilo se otevřít přílohu"
+
+#: ../shell/ev-window.c:5941
+msgid "The attachment could not be saved."
+msgstr "Nepodařilo se uložit přílohu."
+
+#: ../shell/ev-window.c:5986
+msgid "Save Attachment"
+msgstr "Uložit přílohu"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s – Vyžadováno heslo"
+
+#: ../shell/ev-utils.c:315
+msgid "By extension"
+msgstr "Podle přípony"
+
+#: ../shell/main.c:70 ../shell/main.c:246
+msgid "MATE Document Viewer"
+msgstr "Prohlížeč dokumentů pro pracovní prostředí MATE"
+
+#: ../shell/main.c:78
+msgid "The page of the document to display."
+msgstr "Stránka dokumentu, kterou chcete zobrazit."
+
+#: ../shell/main.c:78
+msgid "PAGE"
+msgstr "STRÁNKA"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Spustit Evince v celoobrazovkovém režimu"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Spustit Evince v prezentačním režimu"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Spustit Evince v náhledovém režimu"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Hledané slovo nebo fráze v dokumentu"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "ŘETĚZEC"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[SOUBOR…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Dostupné logické hodnoty: pravdivá hodnota povoluje tvorbu náhledů a "
+"nepravdivá hodnota zakazuje tvorbu nových náhledů."
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Povolit tvorbu náhledů dokumentů PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Příkaz náhledů pro dokumenty PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Platný příkaz a argumenty pro tvůrce náhledů dokumentu PDF. Chcete-li se "
+"dovědět více informací, podívejte se do dokumentace tvůrce náhledů Nautilu."
diff --git a/po/cy.po b/po/cy.po
new file mode 100644
index 00000000..65bb6f72
--- /dev/null
+++ b/po/cy.po
@@ -0,0 +1,1115 @@
+# Cyfieithiad o evince i'r Gymraeg
+# Translation of evince to Welsh
+# Copyright (C) 2005 Gareth Bowker
+# This file is distributed under the same license as the evince package.
+# Gareth Bowker <[email protected]>, 2005.
+# Rhys Jones <[email protected]>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-02-25 12:29+0000\n"
+"PO-Revision-Date: 2006-02-21 22:22-0000\n"
+"Last-Translator: Rhys Jones <[email protected]>\n"
+"Language-Team: Cymraeg <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../comics/comics-document.c:148
+msgid "File corrupted."
+msgstr "Ffeil wedi llygru."
+
+#: ../comics/comics-document.c:184
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Dim delweddau wedi'u canfod yn yr archif %s"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:534
+msgid "_Remove Toolbar"
+msgstr "Tynnu'r Bar Gweithrediadau"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:555
+msgid "Separator"
+msgstr "Gwahanydd"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:3066
+msgid "Best Fit"
+msgstr "Ffit Orau"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Ffitio Lled y Tudalen"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "75%"
+msgstr "75%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window-title.c:126
+msgid "Document Viewer"
+msgstr "Gwelydd Dogfennau"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "Gweld dogfennau aml-dudalen"
+
+#: ../data/evince-password.glade.h:1
+msgid "Remember password for this session"
+msgstr "Cofio'r cyfrinair ar gyfer y sesiwn hwn"
+
+#: ../data/evince-password.glade.h:2
+msgid "Save password in keyring"
+msgstr "Cadw cyfrinair yn y cylch allweddi"
+
+#: ../data/evince-password.glade.h:3
+msgid "_Password:"
+msgstr "_Cyfrinair"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>Awdur:</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>Crëwyd:</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>Crëwr:</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>Fformat:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b>Allweddeiriau:</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>Newidiwyd:</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b>Nifer o Dudalennau:</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr "<b>Optimeiddiwyd:</b>"
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Producer:</b>"
+msgstr "<b>Cynhyrchydd:</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Security:</b>"
+msgstr "<b>Diogelwch:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Subject:</b>"
+msgstr "<b>Pwnc:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Title:</b>"
+msgstr "<b>Teitl:</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Gwrthwneud cyfyngiadau'r ddogfen"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Gwrthwneud cyfyngiadau'r ddogfen, er enghraifft, cyfyngiad rhag copïo neu "
+"brintio."
+
+#: ../dvi/dvi-document.c:91
+msgid "File not available"
+msgstr "Ffeil ddim ar gael"
+
+#: ../dvi/dvi-document.c:104
+msgid "DVI document has incorrect format"
+msgstr "Mae fformat y ffeil DVI yn anghywir"
+
+#. translators: this is the document security state
+#: ../pdf/ev-poppler.cc:511
+msgid "Yes"
+msgstr "Ie"
+
+#. translators: this is the document security state
+#: ../pdf/ev-poppler.cc:514
+msgid "No"
+msgstr "Na"
+
+#: ../pdf/ev-poppler.cc:614
+msgid "Type 1"
+msgstr "Math 1"
+
+#: ../pdf/ev-poppler.cc:616
+msgid "Type 1C"
+msgstr "Math 1C"
+
+#: ../pdf/ev-poppler.cc:618
+msgid "Type 3"
+msgstr "Math 3"
+
+#: ../pdf/ev-poppler.cc:620
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../pdf/ev-poppler.cc:622
+msgid "Type 1 (CID)"
+msgstr "Math 1 (CID)"
+
+#: ../pdf/ev-poppler.cc:624
+msgid "Type 1C (CID)"
+msgstr "Math 1C (CID)"
+
+#: ../pdf/ev-poppler.cc:626
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../pdf/ev-poppler.cc:628
+msgid "Unknown font type"
+msgstr "Math ffont anhysbys"
+
+#: ../pdf/ev-poppler.cc:654
+msgid "No name"
+msgstr "Dim enw"
+
+#: ../pdf/ev-poppler.cc:662
+msgid "Embedded subset"
+msgstr "Is-set Ymgorfforol"
+
+#: ../pdf/ev-poppler.cc:664
+msgid "Embedded"
+msgstr "Wedi Ymgorffori"
+
+#: ../pdf/ev-poppler.cc:666
+msgid "Not embedded"
+msgstr "Heb ei Ymgorffori"
+
+#: ../properties/ev-properties-main.c:114
+msgid "Document"
+msgstr "Dogfen"
+
+#: ../properties/ev-properties-view.c:173
+msgid "None"
+msgstr "Dim"
+
+#: ../ps/gsdefaults.c:30
+msgid "BBox"
+msgstr "BBox"
+
+#: ../ps/gsdefaults.c:31
+msgid "Letter"
+msgstr "Llythyr"
+
+#: ../ps/gsdefaults.c:32
+msgid "Tabloid"
+msgstr "Tabloid"
+
+#: ../ps/gsdefaults.c:33
+msgid "Ledger"
+msgstr "Ledger"
+
+#: ../ps/gsdefaults.c:34
+msgid "Legal"
+msgstr "Cyfreithiol"
+
+#: ../ps/gsdefaults.c:35
+msgid "Statement"
+msgstr "Statement"
+
+#: ../ps/gsdefaults.c:36
+msgid "Executive"
+msgstr "Executive"
+
+#: ../ps/gsdefaults.c:37
+msgid "A0"
+msgstr "A0"
+
+#: ../ps/gsdefaults.c:38
+msgid "A1"
+msgstr "A1"
+
+#: ../ps/gsdefaults.c:39
+msgid "A2"
+msgstr "A2"
+
+#: ../ps/gsdefaults.c:40
+msgid "A3"
+msgstr "A3"
+
+#: ../ps/gsdefaults.c:41
+msgid "A4"
+msgstr "A4"
+
+#: ../ps/gsdefaults.c:42
+msgid "A5"
+msgstr "A5"
+
+#: ../ps/gsdefaults.c:43
+msgid "B4"
+msgstr "B4"
+
+#: ../ps/gsdefaults.c:44
+msgid "B5"
+msgstr "B5"
+
+#: ../ps/gsdefaults.c:45
+msgid "Folio"
+msgstr "Ffolio"
+
+#: ../ps/gsdefaults.c:46
+msgid "Quarto"
+msgstr "Quarto"
+
+#: ../ps/gsdefaults.c:47
+msgid "10x14"
+msgstr "10x14"
+
+#: ../ps/ps-document.c:136
+msgid "No document loaded."
+msgstr "Dim dogfen wedi'i lwytho."
+
+#: ../ps/ps-document.c:590
+msgid "Broken pipe."
+msgstr "Torrwyd y Bibell."
+
+#: ../ps/ps-document.c:774
+msgid "Interpreter failed."
+msgstr "Methodd y dehonglydd."
+
+#: ../ps/ps-document.c:900
+#, c-format
+msgid "Error while decompressing file %s:\n"
+msgstr "Nam wrth ddatgywasgu’r ffeil %s:\n"
+
+#: ../ps/ps-document.c:960
+#, c-format
+msgid "Cannot open file %s.\n"
+msgstr "Methwyd agor y ffeil %s.\n"
+
+#: ../ps/ps-document.c:965
+msgid "File is not readable."
+msgstr "Methwyd darllen y ffeil."
+
+#: ../ps/ps-document.c:985
+msgid "Document loaded."
+msgstr "Llwythwyd y ddogfen."
+
+#: ../ps/ps-document.c:1082
+#, c-format
+msgid ""
+"Failed to load document '%s'. Ghostscript interpreter was not found in path"
+msgstr ""
+"Methu llwytho'r ddogfen '%s'. Dehonglydd Ghostscript heb ei ganfod yn y "
+"llwybr"
+
+#: ../ps/ps-document.c:1094
+#, c-format
+msgid "Failed to load document '%s'"
+msgstr "Methwyd llwytho’r ddogfen '%s'"
+
+#: ../ps/ps-document.c:1267
+msgid "Encapsulated PostScript"
+msgstr "PostScript Amgaëdig"
+
+#: ../ps/ps-document.c:1268
+msgid "PostScript"
+msgstr "PostScript"
+
+#: ../shell/eggfindbar.c:158
+msgid "Search string"
+msgstr "Chwilio am destun"
+
+#: ../shell/eggfindbar.c:159
+msgid "The name of the string to be found"
+msgstr "Enw'r testun i'w ddarganfod"
+
+#: ../shell/eggfindbar.c:172
+msgid "Case sensitive"
+msgstr "Prif lythrennau o bwys"
+
+#: ../shell/eggfindbar.c:173
+msgid "TRUE for a case sensitive search"
+msgstr "GWIR i gael chwiliad lle bo prif lythrennau o bwys"
+
+#: ../shell/eggfindbar.c:180
+msgid "Highlight color"
+msgstr "Lliw Amlygu"
+
+#: ../shell/eggfindbar.c:181
+msgid "Color of highlight for all matches"
+msgstr "Lliw amlygu'r cydweddion"
+
+#: ../shell/eggfindbar.c:187
+msgid "Current color"
+msgstr "Lliw cyfredol"
+
+#: ../shell/eggfindbar.c:188
+msgid "Color of highlight for the current match"
+msgstr "Lliw amlygu i'r cydwedd cyfredol"
+
+#: ../shell/eggfindbar.c:319
+msgid "F_ind:"
+msgstr "_Chwilio:"
+
+#: ../shell/eggfindbar.c:325
+msgid "_Previous"
+msgstr "_Blaenorol"
+
+#: ../shell/eggfindbar.c:329
+msgid "_Next"
+msgstr "_Nesaf"
+
+#: ../shell/eggfindbar.c:343
+msgid "C_ase Sensitive"
+msgstr "_Prif lythrennau o bwys"
+
+#: ../shell/ev-document-types.c:60
+msgid "Unknown MIME Type"
+msgstr "Math MIME anhysbys"
+
+#: ../shell/ev-document-types.c:71
+#, c-format
+msgid "Unhandled MIME type: '%s'"
+msgstr "Math MIME heb ei drin: '%s'"
+
+#: ../shell/ev-document-types.c:133
+msgid "All Documents"
+msgstr "Pob Dogfen"
+
+#: ../shell/ev-document-types.c:141
+msgid "PostScript Documents"
+msgstr "Dogfennau PostScript"
+
+#: ../shell/ev-document-types.c:150
+msgid "PDF Documents"
+msgstr "Dogfennau PDF"
+
+#: ../shell/ev-document-types.c:159
+msgid "Images"
+msgstr "Delweddau"
+
+#: ../shell/ev-document-types.c:169
+msgid "DVI Documents"
+msgstr "Dogfennau DVI"
+
+#: ../shell/ev-document-types.c:179
+msgid "Djvu Documents"
+msgstr "Dogfennau Djvu"
+
+#: ../shell/ev-document-types.c:189
+msgid "Comic Books"
+msgstr "Llyfrau Comig"
+
+#: ../shell/ev-document-types.c:197
+msgid "All Files"
+msgstr "Pob Ffeil"
+
+#: ../shell/ev-page-action.c:168
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d o %d)"
+
+#: ../shell/ev-page-action.c:170
+#, c-format
+msgid "of %d"
+msgstr "o %d"
+
+#: ../shell/ev-password.c:83
+msgid "Password required"
+msgstr "Rhaid cael cyfrinair"
+
+#: ../shell/ev-password.c:84
+#, c-format
+msgid ""
+"The document <i>%s</i> is locked and requires a password before it can be "
+"opened."
+msgstr ""
+"Mae'r ddogfen <i>%s</i> wedi'i gloi a rhaid mewnbynnu cyfrinair cyn y medrir "
+"ei agor."
+
+#: ../shell/ev-password.c:149
+msgid "Enter password"
+msgstr "Rhowch y cyfrinair"
+
+#: ../shell/ev-password.c:252
+#, c-format
+msgid "Password for document %s"
+msgstr "Cyfrinair ar gyfer y ddogfen %s"
+
+#: ../shell/ev-password.c:334
+msgid "Incorrect password"
+msgstr "Cyfrinair anghywir"
+
+#: ../shell/ev-password-view.c:111
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Mae'r ddogfen wedi'i gloi a medrir ei agor ond drwy fewnbynnu cyfrinair "
+"cywir."
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "_Datgloi Dogfen"
+
+#: ../shell/ev-properties-dialog.c:61
+msgid "Properties"
+msgstr "Priodweddau"
+
+#: ../shell/ev-properties-dialog.c:94
+msgid "General"
+msgstr "Cyffredinol"
+
+#: ../shell/ev-properties-dialog.c:104
+msgid "Fonts"
+msgstr "Ffontiau"
+
+#: ../shell/ev-properties-fonts.c:123
+msgid "Font"
+msgstr "Ffont"
+
+#: ../shell/ev-properties-fonts.c:134
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "Casglu gwybodaeth ffontiau... %3d%%"
+
+#: ../shell/ev-sidebar-links.c:254 ../shell/ev-view.c:2080
+msgid "Loading..."
+msgstr "Llwytho..."
+
+#: ../shell/ev-sidebar-links.c:318
+msgid "Print..."
+msgstr "Print..."
+
+#: ../shell/ev-sidebar-links.c:686
+msgid "Index"
+msgstr "Mynegai"
+
+#: ../shell/ev-sidebar-thumbnails.c:669
+msgid "Thumbnails"
+msgstr "Rhagolygon"
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Up"
+msgstr "Sgrolio i Fyny"
+
+#: ../shell/ev-view-accessible.c:43
+msgid "Scroll Down"
+msgstr "Sgrolio i Lawr"
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Up"
+msgstr "Sgrolio'r Olwg i Fyny"
+
+#: ../shell/ev-view-accessible.c:50
+msgid "Scroll View Down"
+msgstr "Sgrolio'r Olwg i Lawr"
+
+#: ../shell/ev-view-accessible.c:536
+msgid "Document View"
+msgstr "Golwg Dogfen"
+
+#: ../shell/ev-view.c:1249
+#, c-format
+msgid "Go to page %s"
+msgstr "Mynd i dudalen %s"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:3282
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "Darganfyddwyd %d ar y dudalen hon"
+
+#: ../shell/ev-view.c:3291
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% yn dal i chwilio"
+
+#: ../shell/ev-window.c:585
+msgid "Unable to open document"
+msgstr "Methwyd agor y ddogfen"
+
+#: ../shell/ev-window.c:1123
+msgid "Open Document"
+msgstr "Agor Dogfen"
+
+#: ../shell/ev-window.c:1202
+#, c-format
+msgid "The file could not be saved as \"%s\"."
+msgstr "Methwyd cadw'r ffeil fel \"%s\"."
+
+#: ../shell/ev-window.c:1246
+msgid "Save a Copy"
+msgstr "Cadw Copi"
+
+#: ../shell/ev-window.c:1311
+msgid "Generating PDF is not supported"
+msgstr "Nid yw allbynnu PDF wedi'i gynorthwyo"
+
+# Pam yn y byd byddai'r neges yma byth yn dod lan?
+# Atebion ar gerdyn post i [email protected] plîs!
+#: ../shell/ev-window.c:1320
+msgid "Printing is not supported on this printer."
+msgstr "Nid yw argraffu wedi'i gynorthwyo ar yr argraffydd yma."
+
+#: ../shell/ev-window.c:1323
+#, c-format
+msgid ""
+"You were trying to print to a printer using the \"%s\" driver. This program "
+"requires a PostScript printer driver."
+msgstr ""
+"Roeddech yn ceisio argraffu i argraffydd yn defnyddio'r gyrrwr \"%s\". Mae "
+"angen gyrrwr PostScript ar y rhaglen yma i argraffu."
+
+#: ../shell/ev-window.c:1368
+msgid "Print"
+msgstr "Argraffu"
+
+#: ../shell/ev-window.c:1374
+msgid "Pages"
+msgstr "Tudalennau"
+
+#: ../shell/ev-window.c:1435
+msgid "The \"Find\" feature will not work with this document"
+msgstr "Nid yw'r nodwedd \"Chwilio\" yn gweithio gyda'r ddogfen hon"
+
+#: ../shell/ev-window.c:1437
+msgid "Searching for text is only supported for PDF documents."
+msgstr "Mae chwilio am destun ond wedi'i gefnogi ar gyfer dogfennau PDF."
+
+#. Toolbar-only
+#: ../shell/ev-window.c:1668 ../shell/ev-window.c:2870
+msgid "Leave Fullscreen"
+msgstr "Peidio Llenwi'r sgrin"
+
+#: ../shell/ev-window.c:1997
+msgid "Toolbar Editor"
+msgstr "Golygydd Bar Offer"
+
+#: ../shell/ev-window.c:2373
+#, c-format
+msgid ""
+"PostScript and PDF File Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Gwelydd ffeiliau PostScript a PDF.\n"
+"Defnyddio poppler %s (%s)"
+
+#: ../shell/ev-window.c:2396
+msgid ""
+"Evince is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+msgstr ""
+"Mae Evince yn feddalwedd rhydd; gallwch ei hailddosbarthu a/neu ei\n"
+"haddasu dan delerau Trwydded Gyhoeddus Gyffredinol GNU fel y'i\n"
+"cyhoeddwyd gan y Free Software Foundation; naill ai fersiwn 2 y\n"
+"Drwydded, neu (yn ôl eich dewis) unrhyw fersiwn diweddarach.\n"
+
+#: ../shell/ev-window.c:2400
+msgid ""
+"Evince is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+msgstr ""
+"Mae Evince yn cael ei dosbarthu yn y gobaith y bydd yn\n"
+"ddefnyddiol, ond HEB UNRHYW WARANT; heb hyd yn oed y warant\n"
+"oblygedig o FARSIANDÏAETH neu FFITRWYDD AT BWRPAS ARBENNIG.\n"
+"Gweler Trwydded Gyhoeddus Gyffredinol GNU am ragor o fanylion.\n"
+
+#: ../shell/ev-window.c:2404
+msgid ""
+"You should have received a copy of the GNU General Public License\n"
+"along with Evince; if not, write to the Free Software Foundation, Inc.,\n"
+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Dylech fod wedi derbyn copi o Drwydded Gyhoeddus Gyffredinol GNU ynghyd\n"
+"â'r rhaglen hon; os na, ysgrifennwch at y Free Software Foundation, Inc.,\n"
+"59 Temple Place, Suite 330, Boston MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:2428 ../shell/main.c:259
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:2431
+msgid "© 1996-2005 The Evince authors"
+msgstr "© 1996-2005 Awduron Evince"
+
+#: ../shell/ev-window.c:2437
+msgid "translator-credits"
+msgstr ""
+"Gareth Bowker <[email protected]>\n"
+"Rhys Jones <[email protected]>"
+
+#: ../shell/ev-window.c:2799
+msgid "_File"
+msgstr "_Ffeil"
+
+#: ../shell/ev-window.c:2800
+msgid "_Edit"
+msgstr "_Golygu"
+
+#: ../shell/ev-window.c:2801
+msgid "_View"
+msgstr "G_olwg"
+
+#: ../shell/ev-window.c:2802
+msgid "_Go"
+msgstr "_Mynd"
+
+#: ../shell/ev-window.c:2803
+msgid "_Help"
+msgstr "_Cymorth"
+
+#. File menu
+#: ../shell/ev-window.c:2806
+msgid "_Open..."
+msgstr "_Agor..."
+
+#: ../shell/ev-window.c:2807
+msgid "Open an existing document"
+msgstr "Agor dogfen sy'n bodoli'n barod"
+
+#: ../shell/ev-window.c:2809
+msgid "_Save a Copy..."
+msgstr "_Cadw copi..."
+
+#: ../shell/ev-window.c:2810
+msgid "Save a copy of the current document"
+msgstr "Cadw copi o'r ddogfen bresennol"
+
+#: ../shell/ev-window.c:2812
+msgid "_Print..."
+msgstr "_Argraffu..."
+
+#: ../shell/ev-window.c:2813
+msgid "Print this document"
+msgstr "Argraffu'r ddogfen hon"
+
+#: ../shell/ev-window.c:2815
+msgid "P_roperties"
+msgstr "P_riodweddau"
+
+#: ../shell/ev-window.c:2823
+msgid "Select _All"
+msgstr "Dewis _Popeth"
+
+#: ../shell/ev-window.c:2826
+msgid "Find a word or phrase in the document"
+msgstr "Chwilio am air neu eiriau yn y ddogfen"
+
+#: ../shell/ev-window.c:2828
+msgid "Find Ne_xt"
+msgstr "Chwilio am y N_esaf"
+
+#: ../shell/ev-window.c:2830
+msgid "T_oolbar"
+msgstr "_Bar Gweithrediadau"
+
+#: ../shell/ev-window.c:2832
+msgid "Rotate _Left"
+msgstr "Troi i'r _Chwith"
+
+#: ../shell/ev-window.c:2834
+msgid "Rotate _Right"
+msgstr "Troi i'r _Dde"
+
+#: ../shell/ev-window.c:2839
+msgid "Enlarge the document"
+msgstr "Chwyddo'r ddogfen"
+
+#: ../shell/ev-window.c:2842
+msgid "Shrink the document"
+msgstr "Lleihau'r ddogfen"
+
+#: ../shell/ev-window.c:2844
+msgid "_Reload"
+msgstr "_Ail-lwytho"
+
+#: ../shell/ev-window.c:2845
+msgid "Reload the document"
+msgstr "Ail-lwytho'r ddogfen"
+
+#. Go menu
+#: ../shell/ev-window.c:2849
+msgid "_Previous Page"
+msgstr "Tudalen _Blaenorol"
+
+#: ../shell/ev-window.c:2850
+msgid "Go to the previous page"
+msgstr "Mynd i'r dudalen flaenorol"
+
+#: ../shell/ev-window.c:2852
+msgid "_Next Page"
+msgstr "Tudalen _Nesaf"
+
+#: ../shell/ev-window.c:2853
+msgid "Go to the next page"
+msgstr "Mynd i'r dudalen nesaf"
+
+#: ../shell/ev-window.c:2855
+msgid "_First Page"
+msgstr "Tudalen _Gyntaf"
+
+#: ../shell/ev-window.c:2856
+msgid "Go to the first page"
+msgstr "Mynd i'r dudalen gyntaf"
+
+#: ../shell/ev-window.c:2858
+msgid "_Last Page"
+msgstr "Tudalen _Olaf"
+
+#: ../shell/ev-window.c:2859
+msgid "Go to the last page"
+msgstr "Mynd i'r dudalen olaf"
+
+#. Help menu
+#: ../shell/ev-window.c:2863
+msgid "_Contents"
+msgstr "_Cynnwys"
+
+#: ../shell/ev-window.c:2866
+msgid "_About"
+msgstr "_Ynghylch"
+
+#: ../shell/ev-window.c:2871
+msgid "Leave fullscreen mode"
+msgstr "Gadael Modd Sgrin Lawn"
+
+#. View Menu
+#: ../shell/ev-window.c:2922
+msgid "_Toolbar"
+msgstr "Bar _Dewis"
+
+#: ../shell/ev-window.c:2923
+msgid "Show or hide the toolbar"
+msgstr "Dangos neu guddio'r bar dewis"
+
+#: ../shell/ev-window.c:2925
+msgid "Side _Pane"
+msgstr "Bar _Ochr"
+
+#: ../shell/ev-window.c:2926
+msgid "Show or hide the side pane"
+msgstr "Dangos neu guddio'r bar ochr"
+
+#: ../shell/ev-window.c:2928
+msgid "_Continuous"
+msgstr "_Parhaol"
+
+#: ../shell/ev-window.c:2929
+msgid "Show the entire document"
+msgstr "Dangos yr holl ddogfen"
+
+#: ../shell/ev-window.c:2931
+msgid "_Dual"
+msgstr "_Deuol"
+
+#: ../shell/ev-window.c:2932
+msgid "Show two pages at once"
+msgstr "Dangos dau dudalen ar unwaith"
+
+#: ../shell/ev-window.c:2934
+msgid "_Fullscreen"
+msgstr "_Modd Sgrin Lawn"
+
+#: ../shell/ev-window.c:2935
+msgid "Expand the window to fill the screen"
+msgstr "Ehangu'r ffenest i lenwi'r sgrin"
+
+#: ../shell/ev-window.c:2937
+msgid "_Presentation"
+msgstr "_Arddangos"
+
+#: ../shell/ev-window.c:2938
+msgid "Run document as a presentation"
+msgstr "Rhedeg y ddogfen fel arddangosfa"
+
+#: ../shell/ev-window.c:2940
+msgid "_Best Fit"
+msgstr "Ffit _Orau"
+
+#: ../shell/ev-window.c:2941
+msgid "Make the current document fill the window"
+msgstr "Achosi i'r ddogfen lenwi'r ffenest"
+
+#: ../shell/ev-window.c:2943
+msgid "Fit Page _Width"
+msgstr "Ffitio _Lled y Dudalen"
+
+#: ../shell/ev-window.c:2944
+msgid "Make the current document fill the window width"
+msgstr "Achosi i'r ddogfen lenwi lled y ffenest"
+
+#. Links
+#: ../shell/ev-window.c:2951
+msgid "_Open Link"
+msgstr "_Agor Cyswllt"
+
+#: ../shell/ev-window.c:2953
+msgid "_Go To"
+msgstr "_Mynd I"
+
+#: ../shell/ev-window.c:2955
+msgid "_Copy Link Address"
+msgstr "_Copïo Cyfeiriad Cyswllt"
+
+#: ../shell/ev-window.c:3015
+msgid "Page"
+msgstr "Tudalen"
+
+#: ../shell/ev-window.c:3016
+msgid "Select Page"
+msgstr "Dewis Tudalen"
+
+#: ../shell/ev-window.c:3028
+msgid "Zoom"
+msgstr "Ehangu"
+
+#: ../shell/ev-window.c:3030
+msgid "Adjust the zoom level"
+msgstr "Newid lefel yr ehangiad"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3046
+msgid "Previous"
+msgstr "Blaenorol"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3052
+msgid "Next"
+msgstr "Nesaf"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3056
+msgid "Zoom In"
+msgstr "Ehangu"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3061
+msgid "Zoom Out"
+msgstr "Crebachu"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3071
+msgid "Fit Width"
+msgstr "Ffitio Lled"
+
+#: ../shell/ev-window-title.c:140
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - Angen Cyfrinair"
+
+#: ../shell/main.c:50
+msgid "The page of the document to display."
+msgstr "Tudalen y ddogfen i'w dangos"
+
+#: ../shell/main.c:50
+msgid "PAGE"
+msgstr "TUDALEN"
+
+#: ../shell/main.c:286
+msgid "Evince Document Viewer"
+msgstr "Gwelydd Dogfennau Evince"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Opsiynau Boole ar gael, gwir yn galluogi creu lluniau cryno a ffug yn "
+"analluogi creu lluniau cryno"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Galluogi lluniau cryno o ddogfennau PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Gorchymyn rhaglen creu lluniau cryno i ddogfennau PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Gorchymyn dilys ag ymresymiadau i'r rhaglen creu lluniau cryno i ddogfennau "
+"PDF. Gweler dogfennau \"caja thumbnailer\" am wybodaeth bellach."
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "Default sidebar size"
+#~ msgstr "Maint rhagosodol y bar ochr"
+
+#~ msgid "Show sidebar by default"
+#~ msgstr "Dangos y bar ochr yn ragosodol"
+
+#~ msgid "Show statusbar by default"
+#~ msgstr "Dangos y bar statws yn ragosodol"
+
+#~ msgid "Show toolbar by default"
+#~ msgstr "Dangos y bar gweithrediadau yn ragosodol"
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. The "
+#~ "default size sets the sidebar's width in pixels based from the side of "
+#~ "the window. Any integer will be accepted. The sidebar will never shrink "
+#~ "smaller than the size of the text required to display Thumbnails or "
+#~ "Index. Large values will cause the sidebar to take up as much of the page "
+#~ "display area as possible relative to the window's size."
+#~ msgstr ""
+#~ "Y Bar Ochr yw'r eitem ochrol sy'n cynnwys y mynegai a'r lluniau cryno. "
+#~ "Mae'r maint rhagosodiadol yn setio's lled mewn picseli o ochr y ffenest. "
+#~ "Cymerir unrhyw gyfanrif. Ni fydd y bar ochr byth yn mynd o dan y maint "
+#~ "sydd ei angen er mwyn dangos y testyn ar gyfer y lluniau cryno neu'r "
+#~ "mynegai. Mi fydd cyfanrifoedd anferth yn achosi i'r bar ochr gymeryd "
+#~ "gymaint o'r dudalen a phosib yn gymharol a maint y ffenest."
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. Two "
+#~ "boolean options, true makes sidebar visible by default while false makes "
+#~ "sidebar not visible by default"
+#~ msgstr ""
+#~ "Y Bar Ochr yw'r eitem ochrol sy'n cynnwys y mynegai a'r lluniau cryno. "
+#~ "Dau werth boolaidd sydd iddo, gwir yn achosi i'r bar ochr fod yn weladwy, "
+#~ "tra bod ffug yn achosi i'r bar ochr gael ei guddio"
+
+#~ msgid ""
+#~ "Statusbar is the standard bottom bar that display additional information "
+#~ "about links and other actions. Two boolean options, true makes the "
+#~ "statusbar visible by default while false makes sidebar not visible by "
+#~ "default."
+#~ msgstr ""
+#~ "Y Bar Statws yw'r bar cyfredol ar y gwaelod sy'n dangos unrhyw wybodaeth "
+#~ "ychwanegol ynghylch a cysylltiadau a gweithredoedd eraill. Dau werth "
+#~ "boolaidd sydd iddo, gwir yn achosi i'r bar statws fod yn weladwy, tra bod "
+#~ "ffug yn achosi i'r bar gael ei guddio."
+
+#~ msgid ""
+#~ "Toolbar is the top bar that contains navigation and zoom controls. Two "
+#~ "boolean options, true makes toolbar visible by default while false makes "
+#~ "toolbar not visible by default."
+#~ msgstr ""
+#~ "Y Bar Gweithrediadau yw'r bar ar hyd gopa'r ffenest sy'n cynnwys y "
+#~ "gorchmynion rheoli llywio ac ehangu. Dau werth boolaidd sydd iddo, gwir "
+#~ "yn achosi i'r bar gweithrediadau gael ei ddangos, tra bod ffug yn achosi "
+#~ "i'r bar gael ei guddio."
+
+#~ msgid "Unable to find glade file"
+#~ msgstr "Methu darganfod ffeil glade"
+
+#~ msgid ""
+#~ "The glade file, %s, cannot be found. Please check that your installation "
+#~ "is complete."
+#~ msgstr ""
+#~ "Methwyd dod o hyd i'r ffeil glade %s. Sicrhewch bod eich gosodiad yn "
+#~ "gyflawn."
+
+#~ msgid "Not found"
+#~ msgstr "Heb ei ddarganfod"
+
+#~ msgid "Document Viewer - Password Required"
+#~ msgstr "Gwelydd Dogfennau - Angen Cyfrinair"
+
+#~ msgid "Loading document. Please wait"
+#~ msgstr "Llwytho'r ddogfen. Arhoswch os gwelwch yn dda"
+
+#~ msgid "Save the current document with a new filename"
+#~ msgstr "Cadw'r dogfen cyfredol gyda enw newydd"
+
+#~ msgid "View the properties of this document"
+#~ msgstr "Edrych ar briodweddau'r ddogfen hon"
+
+#~ msgid "Close this window"
+#~ msgstr "Cau'r ffenest yma"
+
+#~ msgid "Copy text from the document"
+#~ msgstr "Copïo'r testyn o'r ddogfen hon"
+
+#~ msgid "Select the entire page"
+#~ msgstr "Dewis y dudalen gyfan"
+
+#~ msgid "Find next occurrence of the word or phrase"
+#~ msgstr "Chwilio am yr enghraifft nesaf o'r gair neu eiriau"
+
+#~ msgid "Customize the toolbar"
+#~ msgstr "Newid y Bar Gweithredau"
+
+#~ msgid "Rotate the document to the left"
+#~ msgstr "Troi'r ddogfen i'r chwith"
+
+#~ msgid "Rotate the document to the right"
+#~ msgstr "Troi'r ddogfen i'r dde"
+
+#~ msgid "Display help for the viewer application"
+#~ msgstr "Dangos cymorth ar gyfer y rhaglen golygu"
+
+#~ msgid "Display credits for the document viewer creators"
+#~ msgstr "Dangos clodion ar gyfer crewyr y rhaglen golygu"
+
+#~ msgid "Scroll one page forward"
+#~ msgstr "Sgrolio ymlaen un tudalen"
+
+#~ msgid "Scroll one page backward"
+#~ msgstr "Sgrolio yn ôl un tudalen"
+
+#~ msgid "Focus the page selector"
+#~ msgstr "Ffocysu'r dewisydd tudalennau"
+
+#~ msgid "Go ten pages backward"
+#~ msgstr "Mynd yn ôl deg tudalen"
+
+#~ msgid "Go ten pages forward"
+#~ msgstr "Mynd ymlaen deg tudalen"
+
+#~ msgid "_Statusbar"
+#~ msgstr "Bar _Statws"
+
+#~ msgid "Show or hide the statusbar"
+#~ msgstr "Dangos neu cuddio'r bar statws"
diff --git a/po/da.po b/po/da.po
new file mode 100644
index 00000000..f05c2023
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,2155 @@
+# Danish translation of evince.
+# Copyright (C) 2005-2009 Free Software Foundation, Inc.
+# This file is distributed under the same licence as the evince package.
+# Ole Laursen <[email protected]>, 2005, 06.
+# Peter Bach <[email protected]>, 2007.
+# Kenneth Nielsen <[email protected]>, 2008-2010, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-08-22 15:20+0200\n"
+"PO-Revision-Date: 2010-08-22 15:18+0200\n"
+"Last-Translator: Kenneth Nielsen <[email protected]>\n"
+"Language-Team: Danish <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Fejl ved kørsel af kommandoen “%s”, med henblik på at dekomprimere "
+"tegneserien: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Kommandoen “%s” fejlede under dekomprimering af tegneserien."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Kommandoen “%s” afsluttedes ikke normalt."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Ikke en MIME-type for en tegneserie: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Kan ikke finde en kommando som kan dekomprimere denne type af tegneserie"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Ukendt MIME-type"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Fil ødelagt"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Ingen filer i arkivet"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Ingen billeder fundet i arkivet %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Der opstod en fejl under sletning af “%s”."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Fejl %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Tegneserier"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu-dokument har ugyldigt format"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Dokumentet er sammensat af adskillige filer. En eller flere af disse filer "
+"kan ikke tilgås."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu-dokumenter"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI-dokument har ugyldigt format"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI-dokumenter"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Dette værk er placeret i det åndelige fælleseje (Public Domain)"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Ja"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Nej"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Ukendt skrifttype"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Intet navn"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Indlejret delmængde"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Indlejret"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Ikke indlejret"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF-dokumenter"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Ugyldig dokument"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress-slides"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Ingen fejl"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Ikke tilstrækkelig hukommelse"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Kan ikke finde ZIP-signatur"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Ugyldig ZIP-fil"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Flerfils-ZIP understøttes ikke"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Kan ikke åbne filen"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Kan ikke læse data fra fil"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Kan ikke finde fil i ZIP-arkivet"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Ukendt fejl"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Kunne ikke indlæse dokumentet “%s”"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Kunne ikke gemme dokumentet “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Postscript-dokumenter"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Kunne ikke gemme bilaget “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Kunne ikke åbne bilaget “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Kunne ikke åbne bilaget “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Filtype %s (%s) er ikke understøttet"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Alle dokumenter"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Alle filer"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Kunne ikke oprette en midlertidig fil: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Kunne ikke oprette et midlertidigt katalog: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Filen er ikke en gyldig .desktop-fil"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Ikke genkendt desktop-filversion \"%s\""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Starter %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Programmet accepterer ikke dokumenter givet ved kommandolinjen"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Opstartstilvalg blev ikke genkendt : %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Kan ikke give dokument-URI'er til et \"Type=Link\" desktop-felt"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Ikke et startbart element"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Frakobl forbindelse til sessionshåndtering"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Specificér fil som indeholder gemt konfiguration"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FIL"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Specificér sessionshåndterings-ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Indstillinger for sessionshåndtering:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Vis indstillinger for sessionshåndtering"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Vis “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Flyt på værktøjslinje"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Flyt det valgte element på værktøjslinjen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Fjern fra værktøjslinje"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Fjern det valgte element på værktøjslinjen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Fjern værktøjslinje"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Fjern den valgte værktøjslinje"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Adskiller"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "Bedste tilpasning"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Zoom sidebredde"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Dokumentfremviser"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Vis dokumenter med flere sider"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Ignorér dokumentbegrænsninger"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Ignorér dokumentbegrænsninger såsom begrænsninger på at kopiere eller "
+"udskrive."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Slet den midlertidige fil"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Printer-indstillingsfil"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Dokumentforhåndsviser til MATE"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "Kunne ikke udskrive dokument"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Den valgte printer \"%s\" kunne ikke findes"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "_Foregående side"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "Gå til den foregående side"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "_Næste side"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "Gå til den næste side"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "Forstør dokumentet"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "Formindsk dokumentet"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Udskriv"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "Udskriv dette dokument"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "Zoom _vindue"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "Lad det aktuelle dokument udfylde vinduet"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "Zoom vindues_bredde"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "Lad det aktuelle dokument udfylde vinduesbredden"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "Side"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "Vælg side"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokument"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Titel:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Placering:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Emne:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Forfatter:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Nøgleord:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Producent:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Ophavsmand:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Oprettet:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Ændret:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Antal sider:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimeret:"
+
+# (v) eller (n)
+#
+# Ud af koden ses det at denne står sammen med en hel række af egenskaber som ligner dokumentegenskaber, derfor antages det at det er (n).
+#
+# static const PropertyInfo properties_info[] = {
+# { TITLE_PROPERTY, N_("Title") },
+# { URI_PROPERTY, N_("Location") },
+# { SUBJECT_PROPERTY, N_("Subject") },
+# { AUTHOR _PROPERTY, N_("Author") },
+# { KEYWORDS _PROPERTY, N_("Keywords") },
+# { PRODUCER_PROPERTY, N_("Producer") },
+# { CREATOR_PROPERTY, N_("Creator") },
+# { CREATION_DATE_PROPERTY, N_("Created") },
+# { MOD_DATE_PROPERTY, N_("Modified") },
+# { N_PAGES_PROPERTY, N_("Number of Pages") },
+# { LINEARIZED_PROPERTY, N_("Optimized") },
+# { FORMAT_PROPERTY, N_("Format") },
+# { SECURITY_PROPERTY, N_("Security") },
+# { PAPER_SIZE_PROPERTY, N_("Paper Size") }
+# };
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Format:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Sikkerhed:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Papirstørrelse:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Ingen"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f tommer"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Portræt (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Landskab (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d af %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "af %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Indlæser…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Forbereder udskrift…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Færdiggør…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Udskriver side %d af %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Udskrivning understøttes ikke for denne printer."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Ugyldigt sidevalg"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Advarsel"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Det valgte udskriftsinterval indeholder ingen sider"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Sideskalering:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Formindsk til printbart område"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Tilpas til printbart område"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Skalér sider i dokumentet, således at de passer til den valgte printerside. "
+"Vælg en af følgende muligheder:\n"
+"\n"
+"• \"Ingen\": Der udføres ikke nogen sideskalering.\n"
+"\n"
+"• \"Formindsk til printbart område\": Dokumentsider som er større end det "
+"printbare område reduceres, således at de passer til printersidens printbare "
+"område.\n"
+"\n"
+"• \"Tilpas til printbart område\": Dokumentsider bliver forstørret eller "
+"formindsket i passende grad, således at de passer til printersidens "
+"printbare område.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Autorotér og centrér"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Rotér printerside-orientering for hver enkelt side, således at den passer "
+"til hver enkelt dokumentside. Dokumentsider vil blive centreret inden for "
+"printersiden."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Vælg sidestørrelse ved hjælp af dokumentsidestørrelsen"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Når dette er slået til, vil hver enkelt side blive udskrevet på den samme "
+"papirstørrelse som dokumentsiden."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Sidehåndtering"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Kunne ikke udskrive side %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Rul op"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Rul ned"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Rul visning op"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Rul visning ned"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Dokumentvisning"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Gå til side:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Slut på præsentation. Klik for at afslutte."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Gå til første side"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Gå til foregående side"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Gå til næste side"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Gå til sidste side"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Gå til side"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Find"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Gå til side %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Gå til %s i filen “%s”"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Gå til filen “%s”"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Start %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Find:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "Find _forrige"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Find foregående forekomst af søgeteksten"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "Find _næste"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Find næste forekomst af søgeteksten"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Skeln mellem store/små bogstaver"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Skift mellem versalfølsom søgning"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Ikon:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Note"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Kommentar"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Nøgle"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Hjælp"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Nyt afsnit"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Afsnit"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Indsæt"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Kryds"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Cirkel"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Ukendt"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Annotationsegenskaber"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Farve:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Stil:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Gennemsigtig"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Ugennemsigtig"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Indledende vinduestilstand:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Åbn"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Luk"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Kører i præsentationstilstand"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Adgangskode for dokumentet %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Konverterer %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d af %d dokumenter konverteret"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Konverterer metadata"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Evinces metadataformat er blevet ændret og det vil derfor være nødvendigt at "
+"udføre en konvertering. Hvis konverteringsprocessen afbrydes vil "
+"metadatalageret ikke virke."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Åbn et af de seneste dokumenter"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Dette dokument er låst og kan kun læses ved at indtaste den korrekte "
+"adgangskode."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "Lås dokument _op"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Indtast adgangskode"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Adgangskode påkrævet"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "Dokumentet “%s” er låst og kræver en adgangskode før det kan læses."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Adgangskode:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Glem adgangskode _øjeblikkeligt"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Husk adgangskode indtil du _logger ud"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "_Husk altid"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Egenskaber"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Generelt"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Skrifttyper"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Dokumentlicens"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Skrifttype"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Indsamler oplysninger om skrifttype… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Brugervilkår"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Tekstlicens"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Yderligere information"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Liste"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Annotationer"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Tekst"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Tilføj tekstannotationer"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Tilføj"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Dokumentet indeholder ingen annotationer"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Side %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Bilag"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Lag"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Udskriv…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Indeks"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Miniaturer"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "Side %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "Side %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "Dokumentet indeholder ingen sider"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "Dokumentet indeholder kun tomme sider"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "Kan ikke åbne dokument"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Indlæser dokument fra “%s”"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Henter dokument (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "Kunne ikke genindlæse fjernfil."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Genindlæser dokumentet fra %s"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "Kunne ikke genindlæse dokument."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "Åbn dokument"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "Gemmer dokument til %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Gemmer bilag til %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "Gemmer billede til %s"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Filen kunne ikke gemmes som “%s”."
+
+# Uf
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Lægger dokument op (%d%%)"
+
+# Dobbelt uf
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Lægger bilag op (%d%%)"
+
+# Ahh
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Lægger billede op (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "Gem en kopi"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d ventende job i køen"
+msgstr[1] "%d ventende job i køen"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Udskriver job “%s”"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Dokumentet indeholder formularfelter, som er blevet udfyldt. Hvis du ikke "
+"gemmer en kopi, vil disse ændringer gå tabt."
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Dokumentet indeholder nye eller modificerede annotationer. Hvis du ikke "
+"gemmer en kopi, vil disse ændringer gå tabt."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Gem en kopi af dokumentet “%s” før der lukkes?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "Luk _uden at gemme"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "Gem en _kopi"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Vent indtil udskriftsjob “%s” færdiggøres, før der lukkes?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Der er %d aktive udskriftsjob. Vent indtil udskrivning færdiggøres før der "
+"lukkes?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Hvis du lukker vinduet, vil ventende job ikke blive udskrevet."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "Annuller _udskrivning og luk"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "Luk _efter udskrivning"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "Redigér værktøjslinje"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "Der opstod en fejl ved visning af hjælp"
+
+# Dette er i "Om"-dialogen, så vi har lidt frihed i formuleringen, derfor oversat til "Gør brug af .."
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Dokumentfremviser.\n"
+"Gør brug af %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince er fri software. Du kan redistribuere og/eller ændre programmet under "
+"betingelserne givet i GNU General Public License som udgives af Free "
+"Software Foundation; enten version 2 af licensen, eller (hvis du ønsker det) "
+"enhver senere version.\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Gossip distribueres i håb om at programmet er nyttigt, men uden NOGEN "
+"GARANTI, ikke engang underforstået garanti om at det er SALGBART eller "
+"PASSER TIL ET BESTEMT FORMÅL. Se GNU General Public License for detaljer.\n"
+
+#: ../shell/ev-window.c:4571
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Du bør have modtaget en kopi af GNU General Public License sammen med "
+"Evince. Hvis du ikke har det, kan du skrive til Free Software Foundation, "
+"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 Evince-forfatterne"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"Ole Laursen\n"
+"Peter Bach\n"
+"Kenneth Nielsen\n"
+"\n"
+"Dansk-gruppen <[email protected]>\n"
+"Mere info: http://www.dansk-gruppen.dk"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d fundet på denne side"
+msgstr[1] "%d fundet på denne side"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "Ikke fundet"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% tilbage at søge"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "_Fil"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "_Redigér"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "_Vis"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "_Navigering"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "_Hjælp"
+
+#. File menu
+#: ../shell/ev-window.c:5402 ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "_Åbn…"
+
+#: ../shell/ev-window.c:5403 ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "Åbn et eksisterende dokument"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "Åbn en _kopi"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "Åbn en kopi af det aktuelle dokument i et nyt vindue"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "_Gem en kopi…"
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "Gem en kopi af det aktuelle dokument"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "_Udskriv…"
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "_Egenskaber"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "Markér _alt"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "_Find…"
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "Søg efter noget tekst i dokumentet"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "_Værktøjslinje"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "Rotér _venstre"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "Rotér _højre"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "Gem de nuværende indstillinger som _standardindstillinger"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "_Genindlæs"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "Genindlæs dokumentet"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "Auto_rul"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "_Første side"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "Gå til den første side"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "_Sidste side"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "Gå til den sidste side"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "_Indhold"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "_Om"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "Forlad fuldskærm"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "Forlad fuldskærmstilstand"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "Start præsentation"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "Start en præsentation"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "_Værktøjslinje"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "Vis eller skjul værktøjslinjen"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "Side_panel"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "Vis eller skjul sidepanelet"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "_Fortløbende"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "Vis hele dokumentet"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "_Dobbelt"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "Vis to sider samtidigt"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "_Fuldskærm"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "Udvid vinduet så det fylder hele skærmen"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "Præ_sentation"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "Vis dokumentet som en præsentation"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "_Invertér farver"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "Vis sideindhold med farverne inverteret"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "_Åbn henvisning"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "_Gå til"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "Åben i ny _vindue"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "_Kopiér adresse"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "_Gem billede som…"
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "Kopiér _billede"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "Annotationsegenskaber…"
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "_Åbn bilag"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "_Gem bilag som…"
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "Justér zoomniveauet"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "Navigation"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "Tilbage"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "Flyt henover besøgte sider"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "Foregående"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "Næste"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "Zoom ind"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "Zoom ud"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "Tilpas bredde"
+
+#: ../shell/ev-window.c:5890 ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "Kan ikke åbne ekstern applikation."
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "Kan ikke åbne eksternt link"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "Kunne ikke finde passende format at gemme billede i"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "Billedet kunne ikke gemmes."
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "Gem billede"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "Kan ikke åbne bilag"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "Kunne ikke gemme bilaget."
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "Gem bilag"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — adgangskode påkrævet"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Efter filtype"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Mate Dokumentfremviser"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Sidemærkaten fra dokumentet som skal vises."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "SIDE"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Sidenummeret fra dokumentet som skal vises."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMMER"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Start evince i fuldskærmstilstand"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Start evince i præsentationstilstand"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Start evince som forhåndsvisning"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Ordet eller teksten der skal søges efter i dokumentet"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "STRENG"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FIL…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Booleske valgmuligheder: Hvis sand aktiveres generering af miniaturer, hvis "
+"falsk deaktiveres genereringen af nye miniaturer"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Aktivér miniaturer for PDF-dokumenter"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Miniature-kommando til PDF-dokumenter"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Gyldig kommando plus parametre til miniaturegenerering af PDF-dokumenter. Se "
+"dokumentationen for Caja' miniaturegenerering for flere oplysninger."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "Side_opsætning…"
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Opsæt sideindstillingerne for udskrivning"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU-dokument har ugyldigt format"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "Kunne ikke oprette fil “%s”: %s"
+
+#~ msgid "Search string"
+#~ msgstr "Søgetekst"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "Navnet på teksten som skal findes"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Skeln mellem store/små bogstaver"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "SAND for en søgning der skelner mellem store og små bogstaver"
+
+#~ msgid "Highlight color"
+#~ msgstr "Fremhævningsfarve"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Farve til fremhævning af fundne forekomster"
+
+#~ msgid "Current color"
+#~ msgstr "Aktuel farve"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Farve til fremhævning af den aktuelle forekomst"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "Gendán tidligere dokumenter?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Evince har tilsyneladende lukket uventet ned sidste gang det blev brugt. "
+#~ "Du kan gendanne de åbnede dokumenter."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "Gendán _ikke"
+
+#~ msgid "_Recover"
+#~ msgstr "_Gendán"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Nedbrudsgendannelse"
+
+#~ msgid "Print..."
+#~ msgstr "Udskriv..."
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "Kunne ikke oprette symlink “%s”: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "Kan ikke åbne en kopi."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Gem en kopi..."
+
+#~ msgid "_Print..."
+#~ msgstr "_Udskriv..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Find..."
+
+#~ msgid "Co_nnect"
+#~ msgstr "Til_slut"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "Tilslut _anonymt"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Tilslut som b_ruger:"
+
+#~ msgid "_Username:"
+#~ msgstr "_Brugernavn:"
+
+#~ msgid "_Domain:"
+#~ msgstr "_Domæne:"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "_Glem adgangskode øjeblikkeligt"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_Husk adgangskode indtil du logger ud"
+
+#~ msgid "_Remember forever"
+#~ msgstr "_Husk altid"
+
+#~ msgid "File not available"
+#~ msgstr "Filen er ikke tilgængelig"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "Fjern-filer er ikke understøttet"
+
+#~ msgid "Password Entry"
+#~ msgstr "Adgangskode indtastning"
+
+#~ msgid "Remember password for this session"
+#~ msgstr "Husk adgangskode i denne session"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "Gem adgangskode i nøglering"
+
+#~ msgid "<b>Format:</b>"
+#~ msgstr "<b>Format:</b>"
+
+#~ msgid "<b>Title:</b>"
+#~ msgstr "<b>Titel:</b>"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f in"
+
+#~ msgid "Find Previous"
+#~ msgstr "Find foregående"
+
+#~ msgid "Find Next"
+#~ msgstr "Find næste"
+
+#~ msgid "Incorrect password"
+#~ msgstr "Forkert adgangskode"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "Letter"
+
+#~ msgid "Tabloid"
+#~ msgstr "Tabloid"
+
+#~ msgid "Ledger"
+#~ msgstr "Ledger"
+
+#~ msgid "Legal"
+#~ msgstr "Legal"
+
+#~ msgid "Statement"
+#~ msgstr "Statement"
+
+#~ msgid "Executive"
+#~ msgstr "Executive"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Folio"
+
+#~ msgid "Quarto"
+#~ msgstr "Quarto"
+
+#~ msgid "10x14"
+#~ msgstr "10×14"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "Kan ikke åbne filen “%s”."
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "Kunne ikke indlæse dokumentet “%s”. Ghostscript-fortolkeren blev ikke "
+#~ "fundet i søgestien"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "Indkapslet PostScript"
+
+#~ msgid "PostScript"
+#~ msgstr "PostScript"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "Fortolker fejlede."
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "Ikke-håndteret MIME-type: “%s”"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Evince - dokumentfremviser"
+
+#~ msgid "Images"
+#~ msgstr "Billeder"
+
+#~ msgid "Open “%s”"
+#~ msgstr "Åbn “%s”"
+
+#~ msgid "Empty"
+#~ msgstr "Tom"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "Generering af PDF er ikke understøttet"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "Du forsøgte at udskrive til en printer med driveren “%s”. Dette program "
+#~ "kræver en Postscript-printerdriver."
+
+#~ msgid "Pages"
+#~ msgstr "Sider"
+
+#~ msgid "Invalid URI: “%s”"
+#~ msgstr "Ugyldig URI: “%s”"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "No document loaded."
+#~ msgstr "Intet dokument indlæst."
+
+#~ msgid "Broken pipe."
+#~ msgstr "Brudt dataledning."
+
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "Fejl ved udpakning af filen “%s”:\n"
+
+#~ msgid "File is not readable."
+#~ msgstr "Filen kan ikke læses."
+
+#~ msgid "Document loaded."
+#~ msgstr "Dokument indlæst."
+
+#~ msgid "_Previous"
+#~ msgstr "_Foregående"
+
+#~ msgid "_Next"
+#~ msgstr "_Næste"
+
+#~ msgid "The \"Find\" feature will not work with this document"
+#~ msgstr "Søgefunktionen virker ikke for dette dokument"
+
+#~ msgid "Searching for text is only supported for PDF documents."
+#~ msgstr "Søgning efter tekst er kun understøttet for PDF-dokumenter."
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "<span size=\"smaller\"> </span>"
+#~ msgstr "<span size=\"smaller\"> </span>"
+
+#~ msgid "Show sidebar by default"
+#~ msgstr "Vis sidepanel som standard"
+
+#~ msgid "Show sidebar by default."
+#~ msgstr "Vis sidepanel som standard."
+
+#~ msgid "Show statusbar by default"
+#~ msgstr "Vis statuslinje som standard"
+
+#~ msgid "Show statusbar by default."
+#~ msgstr "Vis statuslinje som standard."
+
+#~ msgid "Show toolbar by default"
+#~ msgstr "Vis værktøjslinje som standard"
+
+#~ msgid "Show toolbar by default."
+#~ msgstr "Vis værktøjslinje som standard."
+
+#~ msgid "Sidebar size by default"
+#~ msgstr "Forvalgt størrelse af sidepanel"
+
+#~ msgid "Sidebar size by default."
+#~ msgstr "Forvalgt størrelse af sidepanel."
+
+#~ msgid "Error while converting pdf file %s:\n"
+#~ msgstr "Fejl ved konvertering af PDF-filen %s:\n"
+
+#~ msgid "Error while scanning file %s\n"
+#~ msgstr "Fejl ved gennemsøgning af filen %s\n"
+
+#~ msgid "The file is not a PostScript document."
+#~ msgstr "Filen er ikke et Postscript-dokument."
+
+#~ msgid "Unable to find glade file"
+#~ msgstr "Kunne ikke finde Glade-fil"
+
+#~ msgid ""
+#~ "The glade file, %s, cannot be found. Please check that your installation "
+#~ "is complete."
+#~ msgstr ""
+#~ "Gladefilen \"%s\" blev ikke fundet. Kontrollér at din installation er "
+#~ "korrekt."
+
+#~ msgid "Document Viewer - Password Required"
+#~ msgstr "Dokumentfremviser - adgangskode påkrævet"
+
+#~ msgid "Many..."
+#~ msgstr "Mange..."
+
+#~ msgid "Not so many..."
+#~ msgstr "Ikke så mange..."
+
+#~ msgid "Close this window"
+#~ msgstr "Luk dette vindue"
+
+#~ msgid "Copy text from the document"
+#~ msgstr "Kopiér tekst fra dokumentet"
+
+#~ msgid "Select the entire page"
+#~ msgstr "Markér hele siden"
+
+#~ msgid "Reset the zoom level to the default value"
+#~ msgstr "Nulstil zoomniveauet til standardværdien"
+
+#~ msgid "Display help for the viewer application"
+#~ msgstr "Vis hjælpen for fremvisningsprogrammet"
+
+#~ msgid "Display credits for the document viewer creators"
+#~ msgstr "Vis bidragyderne til dokumentfremviseren"
+
+#~ msgid "_Statusbar"
+#~ msgstr "_Statuslinje"
+
+#~ msgid "Show or hide the statusbar"
+#~ msgstr "Vis eller skjul statuslinjen"
+
+#~ msgid "Single"
+#~ msgstr "Enkelt"
+
+#~ msgid "Show the document one page at a time"
+#~ msgstr "Vis dokumentet en side af gangen"
+
+#~ msgid "Multi"
+#~ msgstr "Flere"
+
+#~ msgid "Exit Fullscreen"
+#~ msgstr "Afslut fuldskærm"
+
+#~ msgid "Open a file"
+#~ msgstr "Åbn en fil"
+
+#~ msgid "_Copy"
+#~ msgstr "_Kopiér"
+
+#~ msgid "_Normal Size"
+#~ msgstr "_Normal størrelse"
+
+#~ msgid "Zoom to the normal size"
+#~ msgstr "Zoom til den normal størrelse"
+
+#~ msgid "Zoom to fit the document to the current window"
+#~ msgstr "Zoom så dokumentet passer i vinduet"
+
+#~ msgid "Zoom to fit the width of the current window "
+#~ msgstr "Zoom så dokumentet passer til bredden af vinduet"
+
+#~ msgid "_Page Up"
+#~ msgstr "_Side op"
+
+#~ msgid "_Page Down"
+#~ msgstr "_Side ned"
+
+#~ msgid "Up"
+#~ msgstr "Op"
+
+#~ msgid "Down"
+#~ msgstr "Ned"
+
+#~ msgid "Found on page %d"
+#~ msgstr "Fundet på %d"
+
+#~ msgid "_Back"
+#~ msgstr "_Tilbage"
+
+#~ msgid "Go to the page viewed before this one"
+#~ msgstr "Gå til den side som blev vist før denne"
+
+#~ msgid "Fo_rward"
+#~ msgstr "_Fremad"
+
+#~ msgid "Go back"
+#~ msgstr "Gå tilbage"
+
+#~ msgid "Back history"
+#~ msgstr "Tilbagehistorik"
+
+#~ msgid "Go forward"
+#~ msgstr "Gå fremad"
+
+#~ msgid "Forward history"
+#~ msgstr "Fremadhistorik"
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 00000000..dc22352e
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,1812 @@
+# Copyright (C) Martin Kretzschmar
+# This file is distributed under the same license as the Evince package.
+#
+# Based on German GPdf and GGv translations.
+#
+# Copyright on GPdf and GGv translations is held by its translators.
+# Please keep in sync with GPdf and GGv translations.
+#
+# printer page - Druckseite
+# printable area - Druckbereich
+#
+# Martin Kretzschmar <[email protected]>, 2004.
+# Frank Arnold <[email protected]>, 2005.
+# Hendrik Richter <[email protected]>, 2005, 2006.
+# Hendrik Brandt <[email protected]>, 2005.
+# Christian Kintner <[email protected]>, 2007.
+# Mario Blättermann <[email protected]>, 2008-2010.
+# Christian Kirbach <[email protected]>, 2009, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Evince master\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-09-02 10:23+0200\n"
+"PO-Revision-Date: 2010-09-02 10:24+0200\n"
+"Last-Translator: Christian Kirbach <[email protected]>\n"
+"Language-Team: Deutsch <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-Language: German\n"
+"X-Poedit-Country: GERMANY\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Fehler beim Aufruf des Befehls »%s« zum Entpacken des Comicbuchs: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Mit dem Befehl »%s« konnte das Comicbuch nicht entpackt werden."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Der Befehl »%s« wurde nicht normal beendet."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Kein MIME-Typ eines Comicbuchs: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Der entsprechende Befehl zum Entpacken eines Comicbuchs dieses Typs konnte "
+"nicht gefunden werden"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Unbekannter MIME-Typ"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Datei ist beschädigt"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Keine Dateien im Archiv"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Im Archiv »%s« konnten keine Bilder gefunden werden"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Beim Löschen von »%s« ist ein Fehler aufgetreten."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Fehler %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Comicbücher"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "Das DjVu-Dokument besitzt ein ungültiges Format"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Das Dokument besteht aus mehreren Dateien. Auf eine oder mehrere Dateien "
+"kann nicht zugegriffen werden."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu-Dokumente"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Das DVI-Dokument besitzt ein ungültiges Format"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI-Dokumente"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Dieses Werk ist Gemeinfrei"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Ja"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Nein"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Unbekannter Schrifttyp"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Kein Name"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Eingebetteter Teilsatz"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Eingebettet"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Nicht eingebettet"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF-Dokumente"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Ungültiges Dokument"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress-Präsentationen"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Kein Fehler"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Nicht genug Speicher"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Keine ZIP-Signatur gefunden"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Ungültige ZIP-Datei"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "ZIP-Archive mit mehreren Dateien werden nicht unterstützt"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Die Datei konnte nicht geöffnet werden"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Die Daten der Datei konnten nicht gelesen werden"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Datei im ZIP-Archiv nicht gefunden"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Unbekannter Fehler"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Dokument »%s« konnte nicht geladen werden"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Dokument »%s« konnte nicht gespeichert werden"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript-Dokumente"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Anlage »%s« konnte nicht gespeichert werden: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Anlage »%s« konnte nicht geöffnet werden: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Anlage »%s« konnte nicht geöffnet werden"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Der Dateityp %s (%s) wird nicht unterstützt."
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Alle Dokumente"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Alle Dateien"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Erstellung einer temporären Datei ist gescheitert: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Erstellung eines temporären Ordners ist gescheitert: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Datei ist keine gültige *.desktop-Datei"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Version der Desktop-Datei »%s« wurde nicht erkannt"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s wird gestartet"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Anwendung akzeptiert keine Dokumente als Befehlszeilenargumente"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Nicht erkannte Startoption: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "URIs können nicht an »Type=Link«-Desktop-Dateien weitergegeben werden"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Kein ausführbarer Eintrag"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Verbindung zur Sitzungsverwaltung deaktivieren"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Datei auswählen, die eine gespeicherte Konfiguration enthält"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "DATEI"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "ID der Sitzungsverwaltung angeben"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "Kennung"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Optionen der Sitzungsverwaltung:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Optionen der Sitzungsverwaltung anzeigen"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "»_%s« anzeigen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "Auf Werkzeugleiste _verschieben"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Das gewählte Objekt auf der Werkzeugleiste verschieben"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "Aus Werkzeugleiste _entfernen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Das gewählte Objekt aus der Werkzeugleise entfernen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "Werkzeugleiste _entfernen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Die gewählte Werkzeugleiste entfernen"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Trennlinie"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "Einpassen"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Auf Seitenbreite einpassen"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Dokumentenbetrachter"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Mehrseitige Dokumente anzeigen"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Restriktionen des Dokuments übergehen"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Restriktionen des Dokuments, wie das Verbot zum Kopieren oder Drucken, "
+"übergehen."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Temporäre Datei löschen"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Einstellungsdatei drucken"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "MATE Dokumentenvorschau"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "Dokument konnte nicht gedruckt werden"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Der gewählte Drucker »%s« konnte nicht gefunden werden"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "_Vorherige Seite"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "Zur vorherigen Seite gehen"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "_Nächste Seite"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "Zur nächsten Seite gehen"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "Ansicht vergrößern"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "Ansicht verkleinern"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Drucken"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "Dieses Dokument drucken"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "_Einpassen"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "Das momentan angezeigte Dokument in das Fenster einpassen"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "_Seitenbreite einpassen"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr ""
+"Die Seitenbreite des momentan angezeigten Dokuments an die Fensterbreite "
+"anpassen"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "Seite"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "Seite auswählen"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokument"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Titel:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Ort:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Betreff:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Verfasser:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Schlüsselwörter:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Hersteller:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Ersteller:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Erstellt:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Bearbeitet:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Seitenanzahl:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimiert:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Format:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Sicherheit:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Papiergröße:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Kein"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f Zoll"
+
+# CHECK
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Hochformat (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Querformat (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d von %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "von %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Wird geladen …"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Drucken wird vorbereitet …"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Abschließen …"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Seite %d von %d wird gedruckt …"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Dieser Drucker wird nicht unterstützt."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Ungültige Seitenauswahl"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Warnung"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Ihre Druckbereichsauswahl enthält keine Seiten"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Seitenskalierung:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Auf Druckbereich verkleinern"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Auf Druckbereich anpassen"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Die Dokumentseiten skalieren, so dass sie auf die gewählte Druckseite "
+"passen. Wählen Sie eine der folgenden Optionen:\n"
+"\n"
+"• »Kein«: Es wird keine Skalierung durchgeführt.\n"
+"\n"
+"• »Auf Druckbereich verkleinern«: Dokumentseiten werden auf den Druckbereich "
+"der Seite verkleinert, wenn sie größer als dieser sind.\n"
+"\n"
+"• »Auf Druckbereich anpassen«: Dokumentseiten werden bei Bedarf vergrößert "
+"oder verkleinert, um in den Druckbereich der Seite zu passen.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Automatisch drehen und zentrieren"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Druckseiten auf das Hoch-/Querformat jeder Dokumentseite anpassen. Die "
+"Dokumentseiten werden in der Druckseite zentriert."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Die Seitengröße anhand der Größe der Dokumentseite wählen"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Legt fest, ob jede Seite auf der gleichen Papiergröße wie die Dokumentseite "
+"gedruckt werden soll."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Seitenverarbeitung"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Fehler beim Drucken der Seite %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Hoch scrollen"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Runter scrollen"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Ansicht nach oben verschieben"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Ansicht nach unten verschieben"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Dokumentenansicht"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Zu folgender Seite gehen:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Ende der Präsentation. Klicken Sie zum Schließen."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Zur ersten Seite gehen"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Zur vorherigen Seite gehen"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Zur nächsten Seite gehen"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Zur letzten Seite gehen"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Zu Seite gehen"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Suchen"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Zu Seite %s gehen"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Zu %s in Datei »%s« gehen"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Zu Datei »%s« gehen"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "%s starten"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Suchen:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "_Rückwärts suchen"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Das vorherige Vorkommen dieser Zeichenkette suchen"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "_Weitersuchen"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Das nächste Vorkommen dieser Zeichenkette suchen"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Groß-/Kleinschreibung be_achten"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr ""
+"Legt fest, ob bei der Suche die Groß-/Kleinschreibung berücksichtigt wird"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Symbol:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Notiz"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Kommentar"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Schlüssel"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Hilfe"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Neuer Absatz"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Absatz"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Einfügen"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Kreuz"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Kreis"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Eigenschaften für Anmerkungen"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Farbe:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Stil:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Transparent"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Deckend"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Anfänglicher Fensterzustand:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Öffnen"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Schließen"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Derzeit im Präsentationsmodus"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Passwort für Dokument »%s«"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "%s wird umgewandelt"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d von %d Dokumenten umgewandelt"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Metadaten werden umgewandelt"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Das von Evince verwendete Metadaten-Format wurde geändert. Nun muss eine "
+"Migration vorgenommen werden. Wenn diese Migration abgebrochen wird, dann "
+"wird die Speicherung von Metadaten nicht funktionieren."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Eines der zuletzt geöffneten Dokumente öffnen"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Dieses Dokument ist gesperrt und kann nur nach Eingabe des korrekten "
+"Passworts gelesen werden."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "Dokument _freigeben"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Passwort eingeben"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Passwort erforderlich"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"Das Dokument »%s« ist gesperrt und benötigt ein Passwort, bevor es geöffnet "
+"werden kann."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Passwort:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Passwort sofort _vergessen"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "_Innerhalb dieser Sitzung an Passwort erinnern"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Für immer e_rinnern"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Eigenschaften"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Allgemein"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Schrift"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Lizenz des Dokuments"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Schrift"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Schriftinformationen werden gesammelt … %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Nutzungsbedingungen"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Lizenztext"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Weitere Informationen"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Liste"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Anmerkungen"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Text"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Textanmerkung hinzufügen"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Das Dokument enthält keine Anmerkungen"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Seite %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Anlagen"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Ebenen"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Drucken …"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Inhalt"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Vorschaubilder"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "Seite %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "Seite %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "Das Dokument enthält keine Seiten"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "Das Dokument enthält nur leere Seiten"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "Dokument konnte nicht geöffnet werden"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Dokument wird von »%s« geladen"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Dokument wird heruntergeladen (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "Laden der entfernten Datei ist fehlgeschlagen."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Dokument wird erneut von %s geladen"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "Dokument konnte nicht erneut geladen werden."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "Dokument öffnen"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "Dokument wird in %s gespeichert"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Anlage wird in %s gespeichert"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "Bild wird in %s gespeichert"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Die Datei konnte nicht als »%s« gespeichert werden."
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Dokument wird hochgeladen (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Anlage wird hochgeladen (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Bild wird hochgeladen (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "Eine Kopie speichern"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d ausstehender Auftrag in Warteschlange"
+msgstr[1] "%d ausstehende Aufträge in Warteschlange"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Druckauftrag »%s«"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Das Dokument enthält Formularfelder, die ausgefüllt wurden. Wenn keine Kopie "
+"gespeichert wird, gehen die Einträge dauerhaft verloren."
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Das Dokument enthält neue oder geänderte Anmerkungen. Wenn keine Kopie "
+"gespeichert wird, gehen die Einträge dauerhaft verloren."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Soll vor dem Schließen eine Kopie von »%s« gespeichert werden?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "Schließen _ohne zu speichern"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "Eine Kopie _speichern"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr ""
+"Soll vor dem Schließen auf das Beenden des Druckauftrages »%s« gewartet "
+"werden?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"%d Druckaufträge sind aktiv. Soll vor dem Schließen auf das Beenden des "
+"Druckens gewartet werden?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Wenn Sie das Fenster schließen, werden ausstehende Druckaufträge nicht "
+"ausgeführt."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "Drucken a_bbrechen und schließen"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "Nach dem Drucken _schließen"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "Werkzeugleisteneditor"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "Beim Anzeigen der Hilfe ist ein Fehler aufgetreten"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Dokumentenbetrachter\n"
+"Verwendet %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince ist freie Software. Sie können es unter den Bedingungen der GNU "
+"General Public License, wie von der Free Software Foundation veröffentlicht, "
+"weitergeben und/oder modifizieren, entweder gemäß Version 2 der Lizenz oder "
+"(nach Ihrer Option) jeder späteren Version.\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Die Veröffentlichung von Evince erfolgt in der Hoffnung, dass es Ihnen von "
+"Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite "
+"Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. "
+"Details finden Sie in der GNU General Public License.\n"
+
+#: ../shell/ev-window.c:4571
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Sie sollten ein Exemplar der GNU General Public License zusammen mit Evince "
+"erhalten haben. Falls nicht, schreiben Sie an die Free Software Foundation, "
+"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Die Evince-Autoren"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"Martin Kretzschmar <[email protected]>\n"
+"Frank Arnold <[email protected]>\n"
+"Hendrik Brandt <[email protected]>\n"
+"Mario Blättermann <[email protected]>\n"
+"Christian Kirbach <[email protected]>\n"
+"Paul Seyfert <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d Mal auf dieser Seite gefunden"
+msgstr[1] "%d Mal auf dieser Seite gefunden"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "Nicht gefunden"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Noch %3d%% zu durchsuchen"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "_Datei"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "_Bearbeiten"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "_Ansicht"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "_Gehe zu"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "_Hilfe"
+
+#. File menu
+#: ../shell/ev-window.c:5402 ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "Ö_ffnen …"
+
+#: ../shell/ev-window.c:5403 ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "Ein vorhandenes Dokument öffnen"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "Eine _Kopie öffnen"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr ""
+"Eine Kopie des momentan angezeigten Dokuments in einem neuen Fenster öffnen"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "Eine Kopie _speichern …"
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "Eine Kopie des momentan angezeigten Dokuments speichern"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "_Drucken …"
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "Ei_genschaften"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "_Alles auswählen"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "_Suchen …"
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "Ein Wort oder einen Ausdruck im Dokument suchen"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "_Werkzeugleiste"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "Nach _links drehen"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "Nach _rechts drehen"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "Momentane Einstellungen als Stan_dard speichern"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "Ak_tualisieren"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "Das Dokument aktualisieren"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "Automatischer _Bildlauf"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "_Erste Seite"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "Zur ersten Seite gehen"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "_Letzte Seite"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "Zur letzten Seite gehen"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "I_nhalt"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "_Info"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "Vollbild verlassen"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "Vollbildmodus verlassen"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "Präsentation starten"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "Eine Präsentation starten"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "_Werkzeugleiste"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "Die Werkzeugleiste anzeigen/verbergen"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "S_eitenleiste"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "Die Seitenleiste anzeigen/verbergen"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "_Fortlaufend"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "Das gesamte Dokument anzeigen"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "_Zweiseitig"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "Zwei Seiten auf einmal anzeigen"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "_Vollbild"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "Das Fenster bildschirmfüllend vergrößern"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "_Präsentation"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "Das Dokument als Präsentation anzeigen"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "_Invertierte Farben"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "Seiteninhalt mit invertierten Farben darstellen"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "Link ö_ffnen"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "_Gehe zu"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "In neuem _Fenster öffnen"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "Link-Adresse _kopieren"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "Bild _speichern unter …"
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "Bild _kopieren"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "Eigenschaften für Anmerkungen …"
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "Anlage ö_ffnen"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "Anlage _speichern als …"
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "Vergrößern"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "Die Vergrößerungsstufe anpassen"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "Navigation"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "Zurück"
+
+# CHECK
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "Durch die betrachteten Seiten bewegen"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "Vorherige"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "Nächste"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "Vergrößern"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "Verkleinern"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "Breite einpassen"
+
+#: ../shell/ev-window.c:5890 ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "Externe Anwendung konnte nicht geöffnet werden."
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "Externer Link konnte nicht geöffnet werden"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "Es wurde kein geeignetes Format zum Speichern des Bildes gefunden"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "Das Bild konnte nicht gespeichert werden."
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "Bild speichern"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "Anlage konnte nicht geöffnet werden"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "Die Anlage konnte nicht gespeichert werden."
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "Anlage speichern"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Passwort erforderlich"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Nach Endung"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATE Dokumentenbetrachter"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Die anzuzeigende Seitenbezeichnung des Dokuments."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "SEITE"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Die anzuzeigende Seitennummer des Dokuments."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMMER"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Evince im Vollbildmodus starten"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Evince im Präsentationsmodus starten"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Evince als Vorschaubetrachter starten"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Das Schlagwort welches im Dokument gesucht werden soll"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "ZEICHENKETTE"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[DATEI …]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Verfügbare boolesche Werte: Wahr (true) aktiviert die Erstellung von "
+"Vorschaubildern, während unwahr (false) das Erzeugen neuer Vorschaubilder "
+"deaktiviert."
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Vorschaubilder von PDF-Dokumenten aktivieren"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Vorschaubefehl für PDF-Dokumente"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Gültiger Befehl plus Argumente für die PDF-Dokumentenvorschau. Bitte schauen "
+"Sie für weiterführende Informationen in der Dokumentation der Caja-"
+"Dokumentvorschau nach."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "Seite einric_hten …"
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Die Seiteneinstellungen zum Drucken festlegen"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "Das DJVU-Dokument besitzt ein ungültiges Format"
+
+#~ msgid "Print..."
+#~ msgstr "Drucken …"
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "Eine Kopie _speichern …"
+
+#~ msgid "_Print..."
+#~ msgstr "_Drucken …"
+
+#~ msgid "_Find..."
+#~ msgstr "_Suchen …"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "Datei »%s« konnte nicht erstellt werden: %s"
+
+#~ msgid "Search string"
+#~ msgstr "Suchausdruck"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "Die zu suchende Zeichenkette"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Groß-/Kleinschreibung beachten"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "TRUE für Suche unter Beachtung der Groß-/Kleinschreibung"
+
+#~ msgid "Highlight color"
+#~ msgstr "Hervorhebungsfarbe"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Farbe zur Hervorhebung aller Übereinstimmungen"
+
+#~ msgid "Current color"
+#~ msgstr "Farbe für aktuelle Übereinstimmung"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Farbe zur Hervorhebung der aktuellen Übereinstimmung"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "Vorherige Dokumente wiederherstellen?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Evince scheint beim letzten Mal abgestürzt oder abgewürgt worden zu sein. "
+#~ "Sie können die geöffneten Dokumente wiederherstellen."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_Nicht wiederherstellen"
+
+#~ msgid "_Recover"
+#~ msgstr "_Wiederherstellen"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Absturz-Wiederherstellung"
diff --git a/po/dz.po b/po/dz.po
new file mode 100644
index 00000000..58e71d33
--- /dev/null
+++ b/po/dz.po
@@ -0,0 +1,1603 @@
+# Dzongkha translation of evince
+# Copyright @ 2006 Free Software Foundation,Inc.
+# Mindu Dorji
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.HEAD.dz\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-04-12 03:16+0100\n"
+"PO-Revision-Date: 2008-08-26 11:37+0530\n"
+"Last-Translator: Dawa pemo <[email protected]>\n"
+"Language-Team: DZONGKHA <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2;plural=(n!=1);\n"
+"X-Poedit-Language: Dzongkha\n"
+"X-Poedit-Country: Bhutan\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: ../backend/comics/comics-document.c:163
+#, c-format
+msgid "File corrupted."
+msgstr "ཡིག་སྣོད་ངན་ཅན་ལུ་གྱུར་ནུག"
+
+#: ../backend/comics/comics-document.c:197
+#, c-format
+msgid "No images found in archive %s"
+msgstr "ཡིག་མཛོད་%sནང་གཟུགས་བརྙན་མ་མཐོང་།"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "པར་སྲུང་ཀི་དེབ།"
+
+#: ../backend/djvu/djvu-document.c:167
+#, c-format
+msgid "The document is composed by several files. One or more of such files cannot be accessed."
+msgstr "ཡིག་ཆ་འདི་ཡིག་སྣོད་ལེ་ཤ་ཅིག་གིས་བརྩམ་ནུག། གཅིག་ཡང་ན་ལེ་ཤ་ཡོད་པའི་ཡིག་སྣོད་ཚུ་འཛུལ་སྤྱོད་འབད་མི་ཚུགས།"
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "ཌིཇི་བུ་ཡིག་ཆ།"
+
+#: ../backend/dvi/dvi-document.c:98
+#, c-format
+msgid "File not available"
+msgstr "ཡིག་སྣོད་འཐོབ་མི་ཚུགས་པས།"
+
+#: ../backend/dvi/dvi-document.c:113
+#, c-format
+msgid "DVI document has incorrect format"
+msgstr "ཌིི་ཝི་ཨའི་ཡིག་ཆ་དེ་ལུ་ བདེན་མེད་རྩ་སྒྲིག་འདུག"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "ཌི་ཝི་ཨའི་ཡིག་ཆ་ཚུ།"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:694
+msgid "Yes"
+msgstr "ཨིན།"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:697
+msgid "No"
+msgstr "མེན།"
+
+#: ../backend/pdf/ev-poppler.cc:770
+msgid "Type 1"
+msgstr "དབྱེ་བ་ ༡།"
+
+#: ../backend/pdf/ev-poppler.cc:772
+msgid "Type 1C"
+msgstr "དབྱེ་བ་ ༡སི།"
+
+#: ../backend/pdf/ev-poppler.cc:774
+msgid "Type 3"
+msgstr "དབྱེ་བ་ ༣།"
+
+#: ../backend/pdf/ev-poppler.cc:776
+msgid "TrueType"
+msgstr "ྟཊུ་ཊའིཔ།"
+
+#: ../backend/pdf/ev-poppler.cc:778
+msgid "Type 1 (CID)"
+msgstr "དབྱེ་བ་ ༡ (སི་ཨའི་ཌི)"
+
+#: ../backend/pdf/ev-poppler.cc:780
+msgid "Type 1C (CID)"
+msgstr "དབྱེ་བ་ ༡སི་ (སི་ཨའི་ཌི)"
+
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "TrueType (CID)"
+msgstr "ཊུ་ཊའིཔ་ (སི་ཨའི་ཌི)"
+
+#: ../backend/pdf/ev-poppler.cc:784
+msgid "Unknown font type"
+msgstr "མ་ཤེས་པའི་ཡིག་གཟུགས་དབྱེ་བ།"
+
+#: ../backend/pdf/ev-poppler.cc:810
+msgid "No name"
+msgstr "མིང་མིན་འདུག"
+
+#: ../backend/pdf/ev-poppler.cc:818
+msgid "Embedded subset"
+msgstr "གོམས་འདྲིས་ཚུད་པའི་ ཡན་ལག་ཆ་ཚན།"
+
+#: ../backend/pdf/ev-poppler.cc:820
+msgid "Embedded"
+msgstr "གོམས་འདྲིས་ཚུད་པའི།"
+
+#: ../backend/pdf/ev-poppler.cc:822
+msgid "Not embedded"
+msgstr "གོམས་འདྲིས་མ་ཚུདཔ།"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "པི་ཌི་ཨེཕ་ ཡིག་ཆ་ཚུ་ "
+
+#: ../backend/impress/impress-document.c:296
+#, c-format
+msgid "Remote files aren't supported"
+msgstr "ཐག་རིང་གི་ཡིག་སྣོད་ཚུ་ལུ་རྒྱབ་སྐྱོར་མ་འབད་བས་"
+
+#: ../backend/impress/impress-document.c:307
+#, c-format
+msgid "Invalid document"
+msgstr "ནུས་ཅན་མེད་པའི་ཡིག་ཆ་"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "ཨིམ་པེརེསི་ བཤུད་བརྙན།"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "འཛོལ་བ་མིན་འདུག་"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "དྲན་ཚད་ལངམ་སྦེ་མིན་འདུག་"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "གནས་ཡུལ་ མཚན་རྟགས་འཚོལ་མི་འཐོབ་"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "གནས་ཡུལ་ཡིག་སྣོད་ནུས་མེད་"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr "ཡིག་སྣོད་སྣ་མང་་གནས་ཡུལ་ཚུ་ལུ་རྒྱབ་སྐྱོར་མ་འབད་བ་ས། "
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "ཡིག་སྣོད་ཁ་ཕྱེ་མི་ཚུགས།"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "ཡིག་སྣོད་ནང་ལས་ གནད་སྡུད་ལྷག་མི་ཚུགས་"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "གནས་ཡུལ་དེ་ནང་ལུ་ ཡིག་སྣོད་འཚོལ་མི་འཐོབ་"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "མ་ཤེས་པའི་འཛོལ་བ་"
+
+#: ../backend/ps/ev-spectre.c:113
+#: ../backend/ps/ps-document.c:248
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "ཡིག་ཆ་“%s”མངོན་གསལ་འབད་མ་ཚུགས།"
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "ཡིག་ཆ་“%s” སྲུང་མ་ཚུགས་ "
+
+#: ../backend/ps/gsdefaults.c:30
+msgid "BBox"
+msgstr "བི་སྒྲོམ།"
+
+#: ../backend/ps/gsdefaults.c:31
+msgid "Letter"
+msgstr "ལེ་ཊར།"
+
+#: ../backend/ps/gsdefaults.c:32
+msgid "Tabloid"
+msgstr "ཊེབ་ལོའིཌི།"
+
+#: ../backend/ps/gsdefaults.c:33
+msgid "Ledger"
+msgstr "མ་དེབ།"
+
+#: ../backend/ps/gsdefaults.c:34
+msgid "Legal"
+msgstr "ལི་གཱལ།"
+
+#: ../backend/ps/gsdefaults.c:35
+msgid "Statement"
+msgstr "གསལ་བཤད།"
+
+#: ../backend/ps/gsdefaults.c:36
+msgid "Executive"
+msgstr "ཨེག་ཟི་ཀུས་ཊིབ།"
+
+#: ../backend/ps/gsdefaults.c:37
+msgid "A0"
+msgstr "ཨེ་༠།"
+
+#: ../backend/ps/gsdefaults.c:38
+msgid "A1"
+msgstr "ཨེ་༡།"
+
+#: ../backend/ps/gsdefaults.c:39
+msgid "A2"
+msgstr "ཨེ་༢།"
+
+#: ../backend/ps/gsdefaults.c:40
+msgid "A3"
+msgstr "ཨེ་༣།"
+
+#: ../backend/ps/gsdefaults.c:41
+msgid "A4"
+msgstr "ཨེ་༤།"
+
+#: ../backend/ps/gsdefaults.c:42
+msgid "A5"
+msgstr "ཨེ་༥།"
+
+#: ../backend/ps/gsdefaults.c:43
+msgid "B4"
+msgstr "བི་༤།"
+
+#: ../backend/ps/gsdefaults.c:44
+msgid "B5"
+msgstr "བི་༥།"
+
+#: ../backend/ps/gsdefaults.c:45
+msgid "Folio"
+msgstr "ཕོ་ལིའོ།"
+
+#: ../backend/ps/gsdefaults.c:46
+msgid "Quarto"
+msgstr "ཀོ་འར་ཊོ།"
+
+#: ../backend/ps/gsdefaults.c:47
+msgid "10x14"
+msgstr "༡༠x༡༤།"
+
+#: ../backend/ps/ps-document.c:170
+#: ../backend/ps/ps-document.c:184
+#, c-format
+msgid "Cannot open file “%s”."
+msgstr "ཡིག་སྣོད་ “%s”ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: ../backend/ps/ps-document.c:231
+#, c-format
+msgid "Failed to load document “%s”. Ghostscript interpreter was not found in path"
+msgstr "ཡིག་ཆ་“%s”མངོན་གསལ་འབད་མ་ཚུགས། འགྲུལ་ལམ་ནང་ལུ་ གྲིབ་ཡིག་ཁ་སྒྱུར་མི་འཚོལ་མ་ཐོབ།"
+
+#: ../backend/ps/ps-document.c:431
+msgid "Encapsulated PostScript"
+msgstr "བསྡུས་ཡོད་པའི་ པོསིཊི་སི་ཀོརིཔཊི།"
+
+#: ../backend/ps/ps-document.c:432
+msgid "PostScript"
+msgstr "པོསིཊི་སི་ཀོརིཔཊི།"
+
+#: ../backend/ps/ps-interpreter.c:543
+msgid "Interpreter failed."
+msgstr "དོ་རོ་ཁ་སྒྱིར་མི་མ་བཏུབ།"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "པོསཊི་སི་ཀིརིཔཊི་ཡིག་ཆ་ཚུ།"
+
+#: ../libdocument/ev-attachment.c:303
+#: ../libdocument/ev-attachment.c:324
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "མཉམ་སྦྲགས་ “%s”: %s བསྲུང་མ་ཚུགས།"
+
+#: ../libdocument/ev-attachment.c:360
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "མཉམ་སྦྲགས་“%s”: %sཁ་ཕྱེ་མ་ཚུགས།"
+
+#: ../libdocument/ev-attachment.c:393
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "མཉམ་སྦྲགས་ “%s”ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: ../libdocument/ev-document-factory.c:177
+#: ../libdocument/ev-document-factory.c:295
+#, c-format
+msgid "Unknown MIME Type"
+msgstr "མ་ཤེས་པའི་ མ་ཡིམ་དབྱེ་བ།"
+
+#: ../libdocument/ev-document-factory.c:196
+#, c-format
+msgid "Unhandled MIME type: “%s”"
+msgstr "ལེགས་སྐྱོང་མ་འཐབ་པའི་ མ་ཡིམ་དབྱེ་བ་:“%s”།"
+
+#: ../libdocument/ev-document-factory.c:350
+msgid "All Documents"
+msgstr "ཡིག་ཆ་ཆ་མཉམ།"
+
+#: ../libdocument/ev-document-factory.c:382
+msgid "All Files"
+msgstr "ཡིག་སྣོད་ཆ་མཉམ།"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:938
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s”སྟོན།"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Move on Toolbar"
+msgstr "ལག་ཆས་ཕྲ་རིང་གུ་སྤོ། (_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Move the selected item on the toolbar"
+msgstr "སེལ་འཐུ་འབད་མི་རྣམ་གྲངས་ ལག་ཆས་ཕྲ་རིང་གུ་སྤོ།"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1403
+msgid "_Remove from Toolbar"
+msgstr "ལག་ཆས་ཕྲ་རིང་གུ་ལས་ རྩ་བསྐྲད་གཏང་།(_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1404
+msgid "Remove the selected item from the toolbar"
+msgstr "ལག་ཆས་ཕྲ་རིང་གུ་ལས་ སེལ་འཐུ་འབད་མི་རྣམ་གྲངས་དེ་ རྩ་བསྐྲད་གཏང་།"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1405
+msgid "_Delete Toolbar"
+msgstr "ལག་ཆས་ཕྲ་རིང་བཏོན་གཏང་།(_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1406
+msgid "Remove the selected toolbar"
+msgstr "སེལ་འཐུ་འབད་མི་ ལག་ཆས་ཕྲ་རིང་རྩ་བསྐྲད་གཏང་།"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:441
+msgid "Separator"
+msgstr "དབྱེ་བྱེད།"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+msgid "Running in presentation mode"
+msgstr "གསལ་སྟོན་ཐབས་ལམ་ནང་ལུ་ གཡོག་བཀོལ་དོ།"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48
+#: ../shell/ev-window.c:4447
+msgid "Best Fit"
+msgstr "ལེགས་སྒྲིག"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "ཤོག་ལེབ་ཀྱི་རྒྱ་ཚད་ཚུད་སྒྲིག་འབད།"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "%༥༠"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "༥༠%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "༥༠%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "%༡༠༠"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "%༡༢༥"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "%༡༥༠"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "%༡༧༥"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "%༢༠༠"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "%༣༠༠"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "%༤༠༠"
+
+#: ../data/evince.desktop.in.in.h:1
+#: ../shell/ev-window.c:3573
+#: ../shell/ev-window-title.c:132
+#, c-format
+msgid "Document Viewer"
+msgstr "ཡིག་ཆ་མཐོང་བྱེད།"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "སྣ་མང་ཤོག་ལེབ་ཡིག་ཆ་ཚུ་སྟོན།"
+
+#: ../data/evince-password.glade.h:1
+msgid "Password Entry"
+msgstr "ཆོག་ཡིག་བཙུགས་ནི།"
+
+#: ../data/evince-password.glade.h:2
+msgid "Remember password for this session"
+msgstr "ལཱ་ཡུན་འདི་གི་དོན་ལུ་ ཆོག་ཡིག་སེམས་ཁར་བཞག"
+
+#: ../data/evince-password.glade.h:3
+msgid "Save password in keyring"
+msgstr "ལྡེ་འཁོར་ནང་ཆོག་ཡིག་སྲུངས།"
+
+#: ../data/evince-password.glade.h:4
+msgid "_Password:"
+msgstr "ཆོག་ཡིག་:(_P)"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>རྩོམ་པ་པོ་:</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>གསར་བསྐྲུན་འབད་ཡོདཔ་:</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>གསར་སྐྲུན་པ་:</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>རྩ་སྒྲིག་:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b>གཙོ་ཚིག་:</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>ལེགས་བཅོས་འབད་ཡོདཔ་:</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b>ཤོག་གྲངས་:</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr "<b>ལེགས་ལྡན་བཟོས་གྲུབ་པ་:</b>"
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Paper Size:</b>"
+msgstr "<b>ཤོག་ལེབ་ཀྱི་ཚད་:</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Producer:</b>"
+msgstr "<b>བཟོ་སྐྲུན་པ་:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Security:</b>"
+msgstr "<b>སྲུང་སྐྱོབ་:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Subject:</b>"
+msgstr "<b>དོན་ཚན་:</b>"
+
+#: ../data/evince-properties.glade.h:13
+msgid "<b>Title:</b>"
+msgstr "<b>མགོ་མིང་་:</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "ཡིག་ཆའི་དཀག་དམ་ཟུར་ཁར་བཞག"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "ཡིག་ཆའི་དཀག་དམ་ དཔེར་ན་འདྲ་བཤུས་བརྐྱབ་ནི་དང་ དཔར་བསྐྲུན་འབད་ནིའི་དཀག་དམ་ཚུ་ ཟུར་ཁར་བཞག"
+
+#: ../properties/ev-properties-main.c:111
+msgid "Document"
+msgstr "ཡིག་ཆ།"
+
+#: ../properties/ev-properties-view.c:182
+msgid "None"
+msgstr "ཅི་མེད།"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:207
+#: ../properties/ev-properties-view.c:367
+msgid "default:mm"
+msgstr "mm:སྔོན་སྒྲིག་འབད་"
+
+#. Metric measurement (millimeters)
+#: ../properties/ev-properties-view.c:249
+#: ../properties/ev-properties-view.c:404
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:253
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:277
+#: ../properties/ev-properties-view.c:415
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, ཡར་ཕྲང་ (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:284
+#: ../properties/ev-properties-view.c:422
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, ཀེ་ཀེ་ (%s)"
+
+#. Imperial measurement (inches)
+#: ../properties/ev-properties-view.c:399
+#, c-format
+msgid "%.2f x %.2f in"
+msgstr "%.2f x %.2f in"
+
+#: ../shell/eggfindbar.c:158
+msgid "Search string"
+msgstr "འཚོལ་ཞིབ་ཡིག་རྒྱུན།"
+
+#: ../shell/eggfindbar.c:159
+msgid "The name of the string to be found"
+msgstr "འཐོབ་དགོ་པའི་ ཡིག་རྒྱུན་གྱི་མིང་།"
+
+#: ../shell/eggfindbar.c:172
+msgid "Case sensitive"
+msgstr "གནད་དོན་ཉེན་ཅན།"
+
+#: ../shell/eggfindbar.c:173
+msgid "TRUE for a case sensitive search"
+msgstr "གནད་དོན་ཉེན་ཅན་ཅིག་ འཚོལ་ཞིབ་ཀྱི་དོན་ལུ་བདེན་པ།"
+
+#: ../shell/eggfindbar.c:180
+msgid "Highlight color"
+msgstr "ཚོས་གཞི་གཙོ་དམིགས་འབད།"
+
+#: ../shell/eggfindbar.c:181
+msgid "Color of highlight for all matches"
+msgstr "མཐུན་སྒྲིག་ཆ་མཉམ་གྱི་དོན་ལུ་ གཙོ་དམིགས་ཀྱི་ཚོས་གཞི།"
+
+#: ../shell/eggfindbar.c:187
+msgid "Current color"
+msgstr "ད་ལྟོའི་ཚོས་གཞི།"
+
+#: ../shell/eggfindbar.c:188
+msgid "Color of highlight for the current match"
+msgstr "ད་ལྟོའི་མཐུན་སྒྲིག་གི་དོན་ལུ་ གཙོ་དམིགས་ཀྱི་ཚོས་གཞི།"
+
+#: ../shell/eggfindbar.c:321
+msgid "Find:"
+msgstr "འཚོལ་:"
+
+#: ../shell/eggfindbar.c:330
+msgid "Find Previous"
+msgstr "ཧེ་མམ་འཚོལ།"
+
+#: ../shell/eggfindbar.c:334
+#: ../shell/eggfindbar.c:337
+msgid "Find previous occurrence of the search string"
+msgstr "འཚོལ་ཞིབ་ཡིག་རྒྱུན་གྱི་ འབྱུང་བ་ཧེ་མམ་འཚོལ།"
+
+#: ../shell/eggfindbar.c:343
+msgid "Find Next"
+msgstr "ཤུལ་མམ་འཚོལ།"
+
+#: ../shell/eggfindbar.c:347
+#: ../shell/eggfindbar.c:350
+msgid "Find next occurrence of the search string"
+msgstr "འཚོལ་ཞིབ་ཡིག་རྒྱུན་གྱི་ འབྱུང་བ་ཤུལ་མམ་འཚོལ།"
+
+#: ../shell/eggfindbar.c:359
+msgid "C_ase Sensitive"
+msgstr "གནད་དོན་ཉེན་ཅན།(_a)"
+
+#: ../shell/eggfindbar.c:363
+#: ../shell/eggfindbar.c:366
+msgid "Toggle case sensitive search"
+msgstr "ཡི་གུ་ཆེ་ཆུང་གི་གདོན་ཉེན་འཚོལ་ཞིབ་ སོར་སྟོན་འབད།"
+
+#: ../shell/ev-jobs.c:650
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "ཡིག་སྣོད་“%s”: %s གསར་བསྐྲུན་འབད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ནུག"
+
+#: ../shell/ev-open-recent-action.c:71
+msgid "Open a recently used document"
+msgstr "འཕྲལ་ཁམས་ཅིག་ཁར་ ལག་ལེན་འཐབ་ཡོད་པའི་་ཡིག་ཆ་ཅིག་ཁ་ཕྱེ་ "
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d གི་ %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "%d གི།"
+
+#: ../shell/ev-password.c:88
+msgid "Password required"
+msgstr "ཆོག་ཡིག་དགོ་པ།"
+
+#: ../shell/ev-password.c:89
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "ཡིག་ཆ་“%s”དེ་ལྡེ་མིག་བརྐྱབས་ཏེ་ཡོདཔ་ལས་ དེ་ཁ་མ་ཕྱེ་བའི་ཧེ་མར་ ཆོག་ཡིག་ཅིག་དགོ་པས།"
+
+#: ../shell/ev-password.c:154
+msgid "Enter password"
+msgstr "ཆོག་ཡིག་བཙུགས།"
+
+#: ../shell/ev-password.c:260
+#, c-format
+msgid "Password for document %s"
+msgstr "ཡིག་ཆ་ %s གི་དོན་ལུ་ཆོག་ཡིག"
+
+#: ../shell/ev-password.c:347
+msgid "Incorrect password"
+msgstr "ཆོག་ཡིག་ངེས་བདེན་མེན་པས།"
+
+#: ../shell/ev-password-view.c:111
+msgid "This document is locked and can only be read by entering the correct password."
+msgstr "ཡིག་ཆ་འདི་ ལྡེ་མིག་བརྐྱབས་ཏེ་ཡོདཔ་ལས་ ཆོག་ཡིག་ངེས་བདེན་བཙུགས་ཏེ་མ་གཏོགས་ ལྷག་མི་ཚུགས།"
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "ཡིག་ཆ་ལྡེ་མིག་ཕྱེ།(_u)"
+
+#: ../shell/ev-properties-dialog.c:61
+msgid "Properties"
+msgstr "རྒྱུ་དངོས་ཚུ།"
+
+#: ../shell/ev-properties-dialog.c:94
+msgid "General"
+msgstr "ཡོངས་ཁྱབ།"
+
+#: ../shell/ev-properties-dialog.c:104
+msgid "Fonts"
+msgstr "ཡིག་གཟུགས་ཚུ།"
+
+#: ../shell/ev-properties-fonts.c:141
+msgid "Font"
+msgstr "ཡིག་གཟུགས།"
+
+#: ../shell/ev-properties-fonts.c:152
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "ཡིག་གཟུགས་བརྡ་དོན་...%3d%%བསྡུ་ལེན་འབད་དོ།"
+
+#: ../shell/ev-sidebar-attachments.c:675
+msgid "Attachments"
+msgstr "མཉམ་སྦྲགས།"
+
+#: ../shell/ev-sidebar-links.c:266
+#: ../shell/ev-view.c:3643
+msgid "Loading..."
+msgstr "མངོན་གསལ་འབད་དོ་..."
+
+#: ../shell/ev-sidebar-links.c:339
+msgid "Print..."
+msgstr "དཔར་བསྐྲུན་..."
+
+#: ../shell/ev-sidebar-links.c:719
+msgid "Index"
+msgstr "ཟུར་ཐོ།"
+
+#: ../shell/ev-sidebar-thumbnails.c:728
+msgid "Thumbnails"
+msgstr "མཐེ་གཟེར།"
+
+#: ../shell/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "ཡར་སྒྲིལ།"
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "མར་སྒྲིལ།"
+
+#: ../shell/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "མཐོང་སྣང་ཡར་སྒྲིལ།"
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "མཐོང་སྣང་མར་སྒྲིལ།"
+
+#: ../shell/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "ཡིག་ཆའི་མཐོང་སྣང་།"
+
+#: ../shell/ev-view.c:1442
+msgid "Go to first page"
+msgstr "ཤོག་ལེབ་དང་པ་ལུ་འགྱོ།"
+
+#: ../shell/ev-view.c:1444
+msgid "Go to previous page"
+msgstr "ཤོག་ལེབ་ཧེ་མམ་ལུ་འགྱོ།"
+
+#: ../shell/ev-view.c:1446
+msgid "Go to next page"
+msgstr "ཤོག་ལེབ་ཤུལ་མམ་ལུ་འགྱོ།"
+
+#: ../shell/ev-view.c:1448
+msgid "Go to last page"
+msgstr "ཤོག་ལེབ་མཐའ་མཇུག་ལུ་འགྱོ།"
+
+#: ../shell/ev-view.c:1450
+msgid "Go to page"
+msgstr "ཤོག་ལེབ་ལུ་འགྱོ།"
+
+#: ../shell/ev-view.c:1452
+msgid "Find"
+msgstr "འཚོལ།"
+
+#: ../shell/ev-view.c:1480
+#, c-format
+msgid "Go to page %s"
+msgstr "ཤོག་ལེབ་%sལུ་འགྱོ།"
+
+#: ../shell/ev-view.c:1486
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "%sནང་ཡིག་སྣོད་ “%s”ལུ་འགྱོ།"
+
+#: ../shell/ev-view.c:1489
+#, c-format
+msgid "Go to file “%s”"
+msgstr "ཡིག་སྣོད་“%s”ལུ་འགྱོ།"
+
+#: ../shell/ev-view.c:1497
+#, c-format
+msgid "Launch %s"
+msgstr "%sགསར་བཙུགས་འབད།"
+
+#: ../shell/ev-view.c:2449
+msgid "End of presentation. Press Escape to exit."
+msgstr "གསལ་སྟོན་འབད་ནིའི་མཇུག། ཕྱིར་འཐོན་འབད་ནའི་དོན་ལུ་ ཐར་ལུ་ཨེབ།"
+
+#: ../shell/ev-view.c:3372
+msgid "Jump to page:"
+msgstr "ཤོག་ལེབ་ལུ་འགྱོ:"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:5153
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d ཤོག་ལེབ་འདི་གེ་ཐོབ་ཅི།"
+msgstr[1] "%d ཤོག་ལེབ་འདི་གེ་ཐོབ་ཅི།"
+
+#: ../shell/ev-view.c:5162
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "འཚོལ་ཞིབ་འབད་ནི་ %3d%% ལྷག་ལུས་ཡོད།"
+
+#: ../shell/ev-window.c:752
+#, c-format
+msgid "Page %s - %s"
+msgstr "ཤོག་ལེབ་ %s - %s"
+
+#: ../shell/ev-window.c:754
+#, c-format
+msgid "Page %s"
+msgstr "ཤོག་ལེབ་%s"
+
+#: ../shell/ev-window.c:1383
+#: ../shell/ev-window.c:1452
+msgid "Unable to open document"
+msgstr "ཡིག་ཆ་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: ../shell/ev-window.c:1574
+msgid "Open Document"
+msgstr "ཡིག་ཆ་ཁ་ཕྱེ།"
+
+#: ../shell/ev-window.c:1635
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "སིམ་ལིངཀི་ “%s”: %s གསར་སྐྲུན་འབད་མ་ཚུགས།"
+
+#: ../shell/ev-window.c:1664
+msgid "Cannot open a copy."
+msgstr "འདྲ་དཔར་ཅིག་ཁ་ཕྱེ་མི་ཚུགས།"
+
+#: ../shell/ev-window.c:1908
+#: ../shell/ev-window.c:1958
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "ཡིག་སྣོད་དེ་“%s”སྦེ་བསྲུང་མ་ཚུགས།"
+
+#: ../shell/ev-window.c:2003
+msgid "Save a Copy"
+msgstr "འདྲ་ཅིག་སྲུངས།"
+
+#: ../shell/ev-window.c:2124
+#: ../shell/ev-window.c:3274
+msgid "Failed to print document"
+msgstr "ཡིག་ཆ་དཔར་བསྐྲུན་འབད་མ་ཚུགས།"
+
+#: ../shell/ev-window.c:2289
+msgid "Printing is not supported on this printer."
+msgstr "དཔར་འཕྲུལ་འདི་གུ་ དཔར་བསྐྲུན་ལུ་ རྒྱབ་སྐྱོར་མིན་འདུག"
+
+#: ../shell/ev-window.c:2415
+#: ../shell/ev-window.c:4241
+msgid "Print"
+msgstr "དཔར་བསྐྲུན།"
+
+#: ../shell/ev-window.c:3053
+msgid "Toolbar Editor"
+msgstr "ལག་ཆས་ཕྲ་རིང་ཞུན་དགཔ།"
+
+#: ../shell/ev-window.c:3569
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"ཡིག་ཆ་མཐོང་བྱེད།\n"
+"པོཔ་ལར་%s (%s) དེ་ལག་ལེན་འཐབ་དོ།"
+
+#: ../shell/ev-window.c:3597
+msgid "Evince 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.\n"
+msgstr "ཨི་བིནསི་དེ་ སྟོང་མ་ཐོབ་པའི་མཉེན་ཆས་ཅིག་ཨིནམ་ལས་ ཕིརི་སོཕཊི་ཝེར་གཞི་ཚོགས་ཀྱིས་ དཔེ་བསྐྲུན་འབད་མི་ ཇི་ཨེན་ཡུ་ཡོངས་ཁྱབ་མི་མང་ཆོག་ཐམ་གྱི་ཁ་ཚིག་དང་འཁྲིལ་ཏེ་ ཁྱོད་ཀྱིས་ཆོག་ཐམ་ཐོན་རིམ་༢ ཡང་ན་ (ཁྱོད་རའི་གདམ་ཁ་བཞིན) ཤུལ་ལས་ཀྱི་ཐོན་རིམ་གང་རུང་ བསྐྱར་འགྲེམ་འབད་བའམ་ ལེགས་བཅོས་འབད་ཆོག\n"
+
+#: ../shell/ev-window.c:3601
+msgid "Evince 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.\n"
+msgstr "ཨི་བིནསི་དེ་ ཕན་ཐོགས་པའི་རེ་བ་གིས་ འགྲེམ་སྤེལ་འབད་ཡོད། དེ་འབདཝ་ད་ ཉེན་ལེན་ག་ནི་ཡང་མེད་པའི་ནང་ལས་ ཐ་ན་སྐྱེལ་འདྲེན་དང་ དམིགས་བསལ་དགོས་དོན་ཅིག་གི་དོན་ལུ་ ཚུད་སྒྲིག་ཡོད་མེད་ཀྱི་ཉེན་ལེན་ཙམ་ཡང་མེད། ཁ་གསལ་གྱི་དོན་ལུ་ ཇི་ཨེན་ཡུ་ མི་མང་ཆོག་ཐམ་ལུ་གཟིགས་གནང་།\n"
+
+#: ../shell/ev-window.c:3605
+msgid "You should have received a copy of the GNU General Public License along with Evince; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr "ཁྱོད་ཀྱིས་ཨི་བིནསི་དང་གཅིག་ཁར་ ཇི་ཨེན་ཡུ་ ཡོངས་ཁྱབ་མི་མང་ཆོག་ཐམ་གྱི་འདྲ་ཅིག་ཐོབ་ཐོབ་འོང་། གལ་སྲིད་མ་ཐོབ་པ་ཅིན་ Free Software Foundation, Inc.,59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ལུ་ཡི་གུ་སྐྱེལ་གནང་།\n"
+
+#: ../shell/ev-window.c:3629
+#: ../shell/main.c:349
+msgid "Evince"
+msgstr "ཨི་བིནསི།"
+
+#: ../shell/ev-window.c:3632
+msgid "© 1996-2007 The Evince authors"
+msgstr "© ༡༩༩༦-༢༠༠༧ བརྡ་མཚོན་ནིའི་རྩོམ་པ་པོ་"
+
+#: ../shell/ev-window.c:3638
+msgid "translator-credits"
+msgstr "\"ཨའི་ཌི་ཨར་སི་གི་མ་དངུལ་རྒྱབ་སྐྱོར་ཐོག་ལས་ བརྡ་དོན་འཕྲུལ་རིག་ལས་ཁུངས་ནང་ སྐད་བསྒྱུར་འབད་ཡི། ཁ་གསལ་གྱི་དོན་ལུ་ འབྲེལ་བ་འཐབ་ས་: <[email protected]>/<[email protected]>\"།"
+
+#: ../shell/ev-window.c:4153
+msgid "_File"
+msgstr "ཡིག་སྣོད།(_F)"
+
+#: ../shell/ev-window.c:4154
+msgid "_Edit"
+msgstr "ཞུན་དག(_E)"
+
+#: ../shell/ev-window.c:4155
+msgid "_View"
+msgstr "མཐོང་སྣང་།(_V)"
+
+#: ../shell/ev-window.c:4156
+msgid "_Go"
+msgstr "འགྱོ།(_G)"
+
+#: ../shell/ev-window.c:4157
+msgid "_Help"
+msgstr "གྲོགས་རམ།(_H)"
+
+#. File menu
+#: ../shell/ev-window.c:4160
+#: ../shell/ev-window.c:4337
+#: ../shell/ev-window.c:4409
+msgid "_Open..."
+msgstr "ཁ་ཕྱེ་...(_O)"
+
+#: ../shell/ev-window.c:4161
+#: ../shell/ev-window.c:4410
+msgid "Open an existing document"
+msgstr "གནས་བཞིན་པའི་ཡིག་ཆ་ཅིག་ཁ་ཕྱེ།"
+
+#: ../shell/ev-window.c:4163
+msgid "Op_en a Copy"
+msgstr "འདྲ་དཔར་ཅིག་ཁ་ཕྱེ་(_e)"
+
+#: ../shell/ev-window.c:4164
+msgid "Open a copy of the current document in a new window"
+msgstr "ད་ལྟོའི་ཡིག་ཆ་དེ་གི་འདྲ་དཔར་ཅིག་ སྒོ་སྒྲིག་གསར་པའི་ནང་ལུ་ཁ་ཕྱེ་"
+
+#: ../shell/ev-window.c:4166
+#: ../shell/ev-window.c:4339
+msgid "_Save a Copy..."
+msgstr "འདྲ་བཤུས་ཅིག་སྲུངས་...(_S)"
+
+#: ../shell/ev-window.c:4167
+msgid "Save a copy of the current document"
+msgstr "ད་ལྟོའི་ཡིག་ཆ་འདི་གི་འདྲ་ཅིག་སྲུངས།"
+
+#: ../shell/ev-window.c:4169
+msgid "Print Set_up..."
+msgstr "སྒྲིག་སྟངས་དཔར་བསྐྲུན་འབད་་་(u)"
+
+#: ../shell/ev-window.c:4170
+msgid "Setup the page settings for printing"
+msgstr "དཔར་བསྐྲུན་འབད་ནིའི་དོན་ལུ་ ཤོག་ལེབ་སྒྲིག་སྟངས་དེ་གཞི་སྒྲིག་འབད་"
+
+#: ../shell/ev-window.c:4172
+msgid "_Print..."
+msgstr "དཔར་བསྐྲུན་...(_P)"
+
+#: ../shell/ev-window.c:4173
+#: ../shell/ev-window.c:4242
+msgid "Print this document"
+msgstr "ཡིག་ཆ་འདི་དཔར་བསྐྲུན་འབད།"
+
+#: ../shell/ev-window.c:4175
+msgid "P_roperties"
+msgstr "རྒྱུ་དངོས་ཚུ།(_r)"
+
+#: ../shell/ev-window.c:4183
+msgid "Select _All"
+msgstr "ཆ་མཉམ་སེལ་འཐུ་འབད།(_A)"
+
+#: ../shell/ev-window.c:4185
+msgid "_Find..."
+msgstr "འཚོལ་...(_F)"
+
+#: ../shell/ev-window.c:4186
+msgid "Find a word or phrase in the document"
+msgstr "ཡིག་ཆའི་ནང་ མིང་ཚིག་ཅིག་ ཡང་ན་ ཚིག་ཚན་ཅིག་འཚོལ།"
+
+#: ../shell/ev-window.c:4188
+msgid "Find Ne_xt"
+msgstr "ཤུལ་མམ་འཚོལ།(_x)"
+
+#: ../shell/ev-window.c:4190
+msgid "Find Pre_vious"
+msgstr "ཧེ་མམ་འཚོལ།(_v)"
+
+#: ../shell/ev-window.c:4192
+msgid "T_oolbar"
+msgstr "ལག་ཆས་ཕྲ་རིང་།(_o)"
+
+#: ../shell/ev-window.c:4194
+msgid "Rotate _Left"
+msgstr "གཡོན་ལུ་བསྒྱིར།(_L)"
+
+#: ../shell/ev-window.c:4196
+msgid "Rotate _Right"
+msgstr "གཡས་ལུ་བསྒྱིར།(_R)"
+
+#: ../shell/ev-window.c:4201
+msgid "Enlarge the document"
+msgstr "ཡིག་ཆ་ཆེར་བསྐྱེད།"
+
+#: ../shell/ev-window.c:4204
+msgid "Shrink the document"
+msgstr "ཡིག་ཆ་སྐུམས།"
+
+#: ../shell/ev-window.c:4206
+msgid "_Reload"
+msgstr "སླར་མངོན་གསལ་འབད།(_R)"
+
+#: ../shell/ev-window.c:4207
+msgid "Reload the document"
+msgstr "ཡིག་ཆ་སླར་མངོན་གསལ་འབད།"
+
+#: ../shell/ev-window.c:4210
+msgid "Auto_scroll"
+msgstr "རང་བཞིན་ བཤུད་སྒྲིལ་ (_S)"
+
+#. Go menu
+#: ../shell/ev-window.c:4214
+msgid "_Previous Page"
+msgstr "ཤོག་ལེབ་ཧེ་མམ།(_P)"
+
+#: ../shell/ev-window.c:4215
+msgid "Go to the previous page"
+msgstr "ཤོག་ལེབ་ཧེ་མམ་ལུ་འགྱོ།"
+
+#: ../shell/ev-window.c:4217
+msgid "_Next Page"
+msgstr "ཤོག་ལེབ་ཤུལ་མམ།(_N)"
+
+#: ../shell/ev-window.c:4218
+msgid "Go to the next page"
+msgstr "ཤོག་ལེབ་ཤུལ་མམ་ལུ་འགྱོ།"
+
+#: ../shell/ev-window.c:4220
+msgid "_First Page"
+msgstr "ཤོག་ལེབ་དང་པ།(_F)"
+
+#: ../shell/ev-window.c:4221
+msgid "Go to the first page"
+msgstr "ཤོག་ལེབ་དང་པ་ལུ་འགྱོ།"
+
+#: ../shell/ev-window.c:4223
+msgid "_Last Page"
+msgstr "མཐའ་མཇུག་ཤོག་ལེབ།(_L)"
+
+#: ../shell/ev-window.c:4224
+msgid "Go to the last page"
+msgstr "མཐའ་མཇུག་ཤོག་ལེབ་ལུ་འགྱོ།"
+
+#. Help menu
+#: ../shell/ev-window.c:4228
+msgid "_Contents"
+msgstr "ནང་དོན་ཚུ།(_C)"
+
+#: ../shell/ev-window.c:4231
+msgid "_About"
+msgstr "སྐོར་ལས།(_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4235
+msgid "Leave Fullscreen"
+msgstr "གསལ་གཞང་གངམ་བཞག"
+
+#: ../shell/ev-window.c:4236
+msgid "Leave fullscreen mode"
+msgstr "གསལ་གཞི་གངམ་གི་ཐབས་ལམ་བཞག"
+
+#: ../shell/ev-window.c:4238
+msgid "Start Presentation"
+msgstr "གསལ་སྟོན་འགོ་བཙུགས"
+
+#: ../shell/ev-window.c:4239
+msgid "Start a presentation"
+msgstr "གསལ་སྟོན་ཅིག་འགོ་བཙུགས"
+
+#. View Menu
+#: ../shell/ev-window.c:4293
+msgid "_Toolbar"
+msgstr "ལག་ཆས་ཕྲ་རིང་།(_T)"
+
+#: ../shell/ev-window.c:4294
+msgid "Show or hide the toolbar"
+msgstr "ལག་ཆས་ཕྲ་རིང་སྟོན་ ཡང་ན་ སྦ་བཞག"
+
+#: ../shell/ev-window.c:4296
+msgid "Side _Pane"
+msgstr "ཟུར་ཁའི་པེན།"
+
+#: ../shell/ev-window.c:4297
+msgid "Show or hide the side pane"
+msgstr "ཟུར་ཁའི་པེན་སྟོན་ ཡང་ན་ སྦ་བཞག"
+
+#: ../shell/ev-window.c:4299
+msgid "_Continuous"
+msgstr "འཕྲོ་མཐུད་ཅན།(_C)"
+
+#: ../shell/ev-window.c:4300
+msgid "Show the entire document"
+msgstr "ཡིག་ཆ་ཧྲིལ་བུ་སྟོན།"
+
+#: ../shell/ev-window.c:4302
+msgid "_Dual"
+msgstr "ྒགཉིས་ལྡན།(_D)"
+
+#: ../shell/ev-window.c:4303
+msgid "Show two pages at once"
+msgstr "ཤོག་ལེབ་གཉིས་སྟབས་གཅིག་ཁར་སྟོན།"
+
+#: ../shell/ev-window.c:4305
+msgid "_Fullscreen"
+msgstr "གསལ་གཞི་གངམ།(_F)"
+
+#: ../shell/ev-window.c:4306
+msgid "Expand the window to fill the screen"
+msgstr "གསལ་གཞི་གང་ནིའི་དོན་ལུ་ སྒོ་སྒྲིག་རྒྱ་འཕར།"
+
+#: ../shell/ev-window.c:4308
+msgid "Pre_sentation"
+msgstr "གསལ་སྟོན་(_S)"
+
+#: ../shell/ev-window.c:4309
+msgid "Run document as a presentation"
+msgstr "ཡིག་ཆ་གསལ་སྟོན་བཟུམ་ཅིག་སྦེ་གཡོག་བཀོལ།"
+
+#: ../shell/ev-window.c:4311
+msgid "_Best Fit"
+msgstr "ལེགས་སྒྲིག(_B)"
+
+#: ../shell/ev-window.c:4312
+msgid "Make the current document fill the window"
+msgstr "ད་ལྟོའང་ཡིག་ཆ་དེ་གིས་ སྒོ་སྒྲིག་བཀང་།"
+
+#: ../shell/ev-window.c:4314
+msgid "Fit Page _Width"
+msgstr "ཤོག་ལེབ་ཀྱི་རྒྱ་ཚད་སྒྲིག(_W)"
+
+#: ../shell/ev-window.c:4315
+msgid "Make the current document fill the window width"
+msgstr "ད་ལྟོའི་ཡིག་ཆ་དེ་གིས་ སྒོ་སྒྲིག་གི་རྒྱ་ཚད་བཀང་།"
+
+#. Links
+#: ../shell/ev-window.c:4322
+msgid "_Open Link"
+msgstr "འབྲེལ་ལམ་ཁ་ཕྱེ།(_O)"
+
+#: ../shell/ev-window.c:4324
+msgid "_Go To"
+msgstr "ལུ་འགྱོ།(_G)"
+
+#: ../shell/ev-window.c:4326
+msgid "Open in New _Window"
+msgstr "སྒོ་སྒྲིག་གསརཔ་ནང་ལུ་ ཁ་ཕྱེ་(_W)"
+
+#: ../shell/ev-window.c:4328
+msgid "_Copy Link Address"
+msgstr "འབྲེལ་ལམ་ཁ་བྱང་འདྲ་བཤུས་རྐྱབས།(_C)"
+
+#: ../shell/ev-window.c:4330
+msgid "_Save Image As..."
+msgstr "གཟུགས་བརྙན་དེ་སྦེ་སྲུངས་་་(_S)"
+
+#: ../shell/ev-window.c:4332
+msgid "Copy _Image"
+msgstr "གཟུགས་བརྙན་འདྲ་བཤུས་རྐྱབས་(_I)"
+
+#: ../shell/ev-window.c:4371
+msgid "Page"
+msgstr "ཤོག་ལེབ།"
+
+#: ../shell/ev-window.c:4372
+msgid "Select Page"
+msgstr "ཤོག་ལེབ་སེལ་འཐུ་འབད།"
+
+#: ../shell/ev-window.c:4383
+msgid "Zoom"
+msgstr "རྒྱས་ཟུམ།"
+
+#: ../shell/ev-window.c:4385
+msgid "Adjust the zoom level"
+msgstr "རྒྱས་ཟུམ་གནས་རིམ་བདེ་སྒྲིག་འབད།"
+
+#: ../shell/ev-window.c:4395
+msgid "Navigation"
+msgstr "འགྲུལ་བསྐྱོདཔ་"
+
+#: ../shell/ev-window.c:4397
+msgid "Back"
+msgstr "རྒྱབ་ཁར་"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:4400
+msgid "Move across visited pages"
+msgstr "བལྟ་སྐོར་ཡོད་པའི་ཤོག་ལེབ་ཚུ་བསྒྱུད་དེ་ སྤོ་བཤུད་འབད་"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4430
+msgid "Previous"
+msgstr "ཧེ་མམ།"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4435
+msgid "Next"
+msgstr "ཤུལ་མམ།"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4439
+msgid "Zoom In"
+msgstr "ཕྱིར་རྒྱས།"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4443
+msgid "Zoom Out"
+msgstr "ནང་ན་ཟུམ།"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4451
+msgid "Fit Width"
+msgstr "རྒྱ་ཚད་སྒྲིགས།"
+
+#: ../shell/ev-window.c:4646
+msgid "Unable to open external link"
+msgstr "ཕྱིའི་འབྲེལ་ལམ་ཁ་ཕྱེ་མ་ཚུགས་"
+
+#: ../shell/ev-window.c:4812
+msgid "Couldn't find appropriate format to save image"
+msgstr "གཟུགས་བརྙན་ སྲུང་བཞག་འབད་ནིའི་དོན་ལུ་ རྩ་སྒྲིག་འོས་ལྡན་ཅིག་འཚོལ་མ་ཐོབ་ "
+
+#: ../shell/ev-window.c:4852
+msgid "The image could not be saved."
+msgstr "གཟུགས་བརྙན་དེ་སྲུང་བཞག་འབད་མི་ཚུགས།"
+
+#: ../shell/ev-window.c:4884
+msgid "Save Image"
+msgstr "གཟུགས་བརྙན་སྲུངས་"
+
+#: ../shell/ev-window.c:4943
+msgid "Unable to open attachment"
+msgstr "མཉམ་སྦྲགས་ཁ་ཕྱེ་མ་ཚུགས།"
+
+#: ../shell/ev-window.c:4995
+msgid "The attachment could not be saved."
+msgstr "མཉམ་སྦྲགས་དེ་ བསྲུང་མ་ཚུགས།"
+
+#: ../shell/ev-window.c:5040
+msgid "Save Attachment"
+msgstr "མཉམ་སྦྲགས་སྲུངས་"
+
+#: ../shell/ev-window-title.c:145
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - ལུ་ཆོག་ཡིག་དགོ་པས།"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "རྒྱ་བསྐྱེད་ཀྱིས་ "
+
+#: ../shell/main.c:58
+msgid "The page of the document to display."
+msgstr "བཀྲམ་སྟོན་འབད་ནིའི་ ཡིག་ཆའི་ཤོག་ལེབ།"
+
+#: ../shell/main.c:58
+msgid "PAGE"
+msgstr "ཤོག་ལེབ།"
+
+#: ../shell/main.c:59
+msgid "Run evince in fullscreen mode"
+msgstr "ཨི་བིནསི་ གསལ་གཞི་གངམ་གི་ཐབས་ལམ་ནང་གཡོག་བཀོལ།"
+
+#: ../shell/main.c:60
+msgid "Run evince in presentation mode"
+msgstr "ཨི་བིནསི་ གསལ་སྟོན་ཐབས་ལམ་ནང་གཡོག་བཀོལ།"
+
+#: ../shell/main.c:61
+msgid "Run evince as a previewer"
+msgstr "ཨི་བིནསི་ སྔོན་ལྟ་འབད་མི་བཟུམ་ཅིག་སྦེ་གཡོག་བཀོལ།"
+
+#: ../shell/main.c:62
+msgid "The word or phrase to find in the document"
+msgstr "ཡིག་ཆའི་ནང་ ནང་འཚོལ་ནི་ཨིན་པའི་ མིང་ཚིག་ཡང་ན་ ཚིག་ཚན་"
+
+#: ../shell/main.c:62
+msgid "STRING"
+msgstr "ཡིག་རྒྱུན་ "
+
+#: ../shell/main.c:65
+msgid "[FILE...]"
+msgstr "[ཡིག་སྣོད་...]"
+
+#: ../shell/main.c:332
+msgid "MATE Document Viewer"
+msgstr "ཇི་ནོམ་ཡིག་ཆ་མཐོང་བྱེད།"
+
+#: ../shell/main.c:392
+msgid "Evince Document Viewer"
+msgstr "ཨི་བིནསི་ཡིག་ཆ་མཐོང་བྱེད།"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid "Boolean options available, true enables thumbnailing and false disables the creation of new thumbnails"
+msgstr "འཐོབ་ཚུགས་པའི་བུ་ལིན་གྱི་གདམ་ཁ། བདེན་པ་གིས་མཐེ་གཟེར་བརྡབ་ཚུགསཔ་བཟོ་ནི་དང་ རྫུན་པ་གིས་མཐེ་གཟེར་གསར་བསྐྲུན་འབད་མ་ཚུགསཔ་བཟོཝ་ཨིན།"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "པི་ཌི་ཨེཕ་ཡིག་ཆ་ཚུ་ལུ་ མཐེ་གཟེར་བརྡབ་ནི་ལྕོགས་ཅན་བཟོ།"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "པི་ཌི་ཨེཕ་ཡིག་ཆ་ཚུ་གི་དོན་ལུ་ མཐེ་གཟེར་གྱི་བརྡ་བཀོད།"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid "Valid command plus arguments for the PDF Document thumbnailer. See caja thumbnailer documentation for more information."
+msgstr "པི་ཌི་ཨེཕ་ཡིག་ཆ་ལུ་མཐེ་གཟེར་བརྡབས་མིའི་ ནུས་ཅན་བརྡ་བཀོད་དང་སྒྲུབ་རྟགས་ཚུ། བརྡ་དོན་ཧེང་བཀལ་གྱི་དོན་ལུ་ ནའུ་ཊི་ལཱསི་མཐེ་གཟེར་བརྡབས་མིའི་ཡིག་ཆ་ལུ་བལྟ།"
+
+#~ msgid "Images"
+#~ msgstr "གཟུགས་བརྙན་ཚུ།"
+#~ msgid "Open “%s”"
+#~ msgstr "“%s”ཁ་ཕྱེ།"
+#~ msgid "Empty"
+#~ msgstr "སྟོངམ།"
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "པི་ཌི་ཨེཕ་བཟོ་བཏོན་འབད་ནི་ལུ་ རྒྱབ་སྐྱོར་མིན་འདུག"
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "ཁྱོད་ཀྱིས་འདྲེན་བྱེད་“%s”ལག་ལེན་འཐབ་ཐོག་ལས་ དཔར་བསྐྲུན་འབད་ནིའི་རྩིས་རྐྱབ་དོ། ལས་རིམ་འདི་ལུ་ པོསིཊི་"
+#~ "སི་ཀིརིཔཊི་ དཔར་འཕྲུལ་འདྲེན་བྱེད་ཅིག་དགོ"
+#~ msgid "Pages"
+#~ msgstr "ཤོག་གྲངས།"
+#~ msgid "Invalid URI: “%s”"
+#~ msgstr "ནུས་ཅན་མེད་པའི་ཡུ་ཨར་ཨའི: “%s”"
+#~ msgid "75%"
+#~ msgstr "%༧༥"
+#~ msgid "unexpected EOF\n"
+#~ msgstr "རེ་འདུན་མེད་པའི་ ཨི་ཨོ་ཨེཕ\n"
+#~ msgid "could not load font `%s'\n"
+#~ msgstr "ཡིག་གཟུགས་`%s' མངོན་གསལ་འབད་མ་ཚུགས་\n"
+#~ msgid "could not reload `%s'\n"
+#~ msgstr "`%s' ལོག་མངོན་གསལ་འབད་མ་ཚུགས་\n"
+#~ msgid "%s: unsupported DVI format (version %u)\n"
+#~ msgstr "%s:རྒྱབ་སྐྱོར་མེད་པའི་ ཌི་ཝི་ཨའི་ རྩ་སྒྲིག་(ཐོན་རིམ་ %u)\n"
+#~ msgid "no pages selected\n"
+#~ msgstr "ཤོག་ལེབ་སེལ་འཐུ་འབད་འབདཝ་མིན་འདུག\n"
+#~ msgid "%s: File corrupted, or not a DVI file\n"
+#~ msgstr "%s:ཡིག་སྣོད་ངན་ཅན་བཟོ་ཡོདཔ་ ཡང་ན་ ཌི་ཝི་ཨའི་ཡིག་སྣོད་མེན་མི་\n"
+#~ msgid "%s: vf macro had errors\n"
+#~ msgstr "%s: ཝི་ཨེཕ་ མེཀརོ་ལུ་འཛོལ་བ་བྱུང་ཡོདཔ་\n"
+#~ msgid "%s: stack not empty after vf macro\n"
+#~ msgstr "%s: ཝི་ཨེཕ་མེཀརོ་གི་ཤུལ་ལས་ བརྩེགས་ཕུང་སྣོངམ་མིན་འདུག་\n"
+#~ msgid "%s: could not reopen file (%s)\n"
+#~ msgstr "%s: ཡིག་སྣོད་(%s)ལོག་ཁ་ཕྱེ་མི་ཚུགས་པས་\n"
+#~ msgid "%s: page %d out of range\n"
+#~ msgstr "%s: ཤོག་ལེབ་%d ཁྱབ་ཚད་ལས་འགལ་སོང་ནུག\n"
+#~ msgid "%s: bad offset at page %d\n"
+#~ msgstr "%s: ཤོག་ལེབ་%d པར་ལེན་བྱང་ཉེས་\n"
+#~ msgid "stack not empty at end of page\n"
+#~ msgstr "ཤོགལེབ་དེ་གི་མཇུག་ལུ་ བརྩེགས་ཕུང་སྟོངམ་མིན་འདུག\n"
+#~ msgid "no default font set yet\n"
+#~ msgstr "སྔོན་སྒྲིག་ཡིག་གཟུགས་གཞི་སྒྲིག་ ད་ལྟོ་ཡང་མེད་\n"
+#~ msgid "requested character %d does not exist in `%s'\n"
+#~ msgstr "ཞུ་བ་འབད་ཡོད་པའི་ཡིག་འབྲུ་%d དེ་`%s'ནང་ལུ་མིན་འདུག\n"
+#~ msgid "enlarging stack\n"
+#~ msgstr "བརྩེགས་ཕུང་ཆེར་བསྐྱེད་འབད་དོ་་\n"
+#~ msgid "stack underflow\n"
+#~ msgstr "བརྩེགས་ཕུང་ འོག་རྒྱུན་\n"
+#~ msgid "font %d is not defined\n"
+#~ msgstr "ཡིག་གཟུགས་%d འདི་ངེས་འཛིན་མ་འབད་བས་\n"
+#~ msgid "font %d is not defined in postamble\n"
+#~ msgstr "ཡིག་གཟུགས་%d འདི་ པོསི་ཊེམ་བལི་ ནང་ལུ་ངེས་འཛིན་མ་འབད་བས་\n"
+#~ msgid "unexpected opcode %d\n"
+#~ msgstr "རེ་མདུན་མེད་པའི་ ཨོཔ་ཀོཊི་ %d\n"
+#~ msgid "undefined opcode %d\n"
+#~ msgstr "ངེས་ཛའིན་མ་འབད་བའི་ཨོཔ་ཀོཌི་%d\n"
+#~ msgid "%s: no fonts defined\n"
+#~ msgstr "%s:ཡིག་གཟུགས་ཅིག་ཡང་ངེས་འཛིན་མ་འབད་བས་\n"
+#~ msgid "%s: %d: [%s] requested encoding `%s' does not match vector `%s'\n"
+#~ msgstr ""
+#~ "%s: %d:[%s] ཞུ་བ་འབད་ཡོད་པའི་ཨིན་ཀོ་ཌིང་`%s' དེ་མཉམ་ཐིག་`%s' དང་གཅིག་ཁར་མཐུན་སྒྲིག་མིན་"
+#~ "འདུག\n"
+#~ msgid "%s: could not load fontmap\n"
+#~ msgstr "%s:དེ་གིས་ཡིག་གཟུགས་ས་ཁྲ་མངོན་གསལ་འབད་མི་ཚུགས་\n"
+#~ msgid "%s: could not set as default encoding\n"
+#~ msgstr "%s:དེ་ སྔོན་སྒྲིག་ཨེན་ཀོ་ཌིང་སྦེ་གཞི་སྒྲིག་འབད་མི་ཚུགས་\n"
+#~ msgid "encoding vector `%s' is in use\n"
+#~ msgstr "ཨེན་ཀོ་ཌིང་མཉམ་ཐིག་`%s' འདི་ལག་ལེན་འཐབ་པའི་སྒང་ཡོད་\n"
+#~ msgid "GF: invalid opcode %d in character %d\n"
+#~ msgstr "GF: ཡིག་འབྲུ་%d ནང་ལུ་ ནུས་མེད་ཨོཔ་ཀོཌི་%d ཡོདཔ་ཨིན་\n"
+#~ msgid "(gf) Character %d: invalid opcode %d\n"
+#~ msgstr "(gf) ཡིག་འབྲུ་ %d: ནུས་མེད་ཨོཔ་ཀོཌི་ %d\n"
+#~ msgid "(gf) character %d has an incorrect bounding box\n"
+#~ msgstr "(gf)ཡིག་འབྲུ་%d དེ་ལུ་ བདེན་མེད་བོན་ཌིང་སྒྲོམ་ཅིག་འདུག\n"
+#~ msgid "%s: bad checksum (expected %u, found %u)\n"
+#~ msgstr "%s: ཅེག་སམ་བྱང་ཉེས་(རེ་མདུན་མེད་མི་%u, འཐོབ་ཡོད་མི་%u)\n"
+#~ msgid "%s: junk in postamble\n"
+#~ msgstr "%s:པོསི་ཊེམ་བལི་ནང་ལུ་ཡོད་མི་ མཁོ་མེད་\n"
+#~ msgid "%s: File corrupted, or not a GF file\n"
+#~ msgstr "%s: ཡིག་སྣོད་ངན་ཅན་ ཡང་ན་ ཇི་ཨེཕ་ཡིག་སྣོད་མེན་པས་\n"
+#~ msgid "invalid page specification `%s'\n"
+#~ msgstr "ནུས་མེད་ཤོག་ལེབ་གསལ་བཀོད་`%s'\n"
+#~ msgid "garbage after DVI page specification ignored\n"
+#~ msgstr "ཌི་ཝི་ཨའི་ ཤོག་ལེབ་གསལ་བཀོད་ཀྱི་ཤུལ་ལས་ ཕྱགས་སྙིགས་སྣང་མེད་སྦེ་བཞག་ནུག\n"
+#~ msgid "more than 10 counters in page specification\n"
+#~ msgstr "ཤོག་ལེབ་གསལ་བཀོད་ནང་གི་ གདོང་ལན་༡༠་ལས་ལྷག་པའི་\n"
+#~ msgid "garbage after TeX page specification ignored\n"
+#~ msgstr "ཊེཀསི་ ཤོག་ལེབ་གསལ་བཀོད་ཀྱི་ཤུལ་ལས་ ཕྱགས་སྙིགས་སྣང་མེད་སྦེ་བཞག་ནུག\n"
+#~ msgid "custom"
+#~ msgstr "སྲོལ་སྒྲིག་"
+#~ msgid "Bad PK file: More bits than required\n"
+#~ msgstr "པི་ཀེ་ཡིག་སྣོད་བྱང་ཉེས་\n"
+#~ msgid "%s: checksum mismatch (expected %u, got %u)\n"
+#~ msgstr "%s: ཅེག་སམ་མ་མཐུནམ(རེ་འདུད་ཡོདཔ་%u ཐོབ་ཡོདཔ་%u)\n"
+#~ msgid "%s: unexpected preamble\n"
+#~ msgstr "%s:རེ་མདུན་མེད་པའི་ པིརི་ཨེམ་པཱལ་\n"
+#~ msgid "%s: unexpected end of file (no postamble)\n"
+#~ msgstr "%s: རེ་མདུན་མེད་པའི་ཡིག་སྣོད་ཀྱི་མཇུག་(པོསི་ཨེམ་བཱལ་མེད་)\n"
+#~ msgid "invalid PK file! (junk in postamble)\n"
+#~ msgstr "ནུས་མེད་ཀྱི་ པི་ཀེ་ཡིངག་སྣོད་ཡ!(པོསི་ཨེམ་བཱལ་ནང་གི་མཁོ་མེད་)\n"
+#~ msgid "%s: File corrupted, or not a PK file\n"
+#~ msgstr "%s:ཡིག་སྣོད་ངན་ཅན་བཟོ་ཡོདཔ་ཨིནམ་དང་ ཡང་ན་ པི་ཀེ་ཡིག་སྣོད་ཅིག་མེན་\n"
+#~ msgid "%s: malformed value for key `%s'\n"
+#~ msgstr "%s: ལྡེ་མིག་`%s' གི་དོན་ལུ་ བཟོ་ཉེས་གྱུར་བའི་གནས་གོང་\n"
+#~ msgid "%s: unknown key `%s' ignored\n"
+#~ msgstr "%s:མ་ཤེས་པའི་ལྡེ་མིག་`%s' སྣང་མེད་བཞག་ཡོད་\n"
+#~ msgid "%s: no argument for key `%s', using defaults\n"
+#~ msgstr "%s:ལྡེ་མིག་`%s' གི་དོན་ལུ་སྒྲུབ་རྟགས་མིན་མ་བཀོད། སྔོན་སྒྲིག་ལག་ལེན་འཐབ་དོ་\n"
+#~ msgid "%s: argument `%s' ignored for key `%s'\n"
+#~ msgstr "%s:ལྡེ་མིག་`%s'གི་དོན་ལུ་ སྒྲུབ་རྟགས་ `%s' སྣང་མེད་བཞག་ཡོདཔ་\n"
+#~ msgid "%s: tried to pop top level layer\n"
+#~ msgstr "%s:སྤྱི་ཏོག་གི་གནས་རིམ་གུ་ཡོད་མི་བང་རིམ་ པོཔ་འབད་ནི་ལུ་འབད་བརྩོལ་བསྐྱེད་ཅི་\n"
+#~ msgid "(t1) failed to reset device resolution\n"
+#~ msgstr "(t1)ཐབས་འཕྲུལ་ཧུམ་ཆ་བསྐྱར་སྒྲིག་འབད་ནི་ལུ་ འཐུས་ཤོར་བྱུང་ནུག\n"
+#~ msgid "%s: could not encode font\n"
+#~ msgstr "%s: ཡིག་གཟུགས་ ཨེན་ཀོདིའབད་མ་ཚུགས་\n"
+#~ msgid "(t1) unsupported bitmap pad size %d\n"
+#~ msgstr "(t1) རྒྱབ་སྐྱོར་མེད་པའི་ བིཊི་མེཔ་ པེཌི་གི་ཚད་%d\n"
+#~ msgid "%s: Checksum mismatch (got %u, expected %u)\n"
+#~ msgstr "%s:ཅེག་སམ་ མ་མཐུནམ་(ཐོབ་ཡོད་མི་%u, རེ་མདུན་ཡོད་མི་ %u)\n"
+#~ msgid "%s: Error reading AFM data\n"
+#~ msgstr "%s: ཨེ་ཨེཕ་ཨེམ་གནད་སྡུད་ལྷག་ནི་ལུ་འཛོལ་བ་བྱུང་ནུག་\n"
+#~ msgid "Warning: TFM file `%s' has suspicious size\n"
+#~ msgstr "ཉེན་བརྡ་:ཊི་ཨེཕ་ཨེམ་ ཡིག་སྣོད་ `%s' ལུ་དོགས་པ་ཅན་གྱི་ཚད་ཡོདཔ་ཨིན་\n"
+#~ msgid "%s: font coding scheme truncated to 40 bytes\n"
+#~ msgstr "%s: ཡིག་གཟུགས་ཀོ་ཌིང་འཆར་ལས་དེ་ བཱའིཊི་༤༠་ལུ་མར་ཕབ་འབད་ནུག་\n"
+#~ msgid "%s: File corrupted, or not a TFM file\n"
+#~ msgstr "%s: ཡིག་སྣོད་ངན་ཅན་བཟོ་ཡོདཔ་དང་ ཡང་ན་ ཊི་ཨེཕ་ཨེམ་ཡིག་སྣོད་ཅིག་མེན་པས་\n"
+#~ msgid "(tt) %s: could not load face: %s\n"
+#~ msgstr "(tt) %s: བཀོད་རྣམ་མངོན་གསལ་འབད་མ་ཚུགས་: %s\n"
+#~ msgid "(tt) %s: could not create face: %s\n"
+#~ msgstr "(tt) %s:བཀོད་རྣམ་གསར་བསྐྲུན་འབད་མ་ཚུགས:%s\n"
+#~ msgid "(tt) %s: could not create glyph: %s\n"
+#~ msgstr "(tt) %s: གིལིབ་གསར་བསྐྲུན་འབད་མ་ཚུགས་: %s\n"
+#~ msgid "(tt) %s: no acceptable map found, using #0\n"
+#~ msgstr "(tt) %s: དང་ལེན་འབད་བཏུབ་པའི་ ས་ཁྲ་མ་འཐོབ་།#0 ལག་ལེན་འཐབ་དོ་\n"
+#~ msgid "(tt) %s: could not set resolution: %s\n"
+#~ msgstr "(tt) %s: ཧུམ་ཆ་གཞི་སྒྲིག་འབད་མ་ཚུགས་: %s\n"
+#~ msgid "(tt) %s: could not set point size: %s\n"
+#~ msgstr "(tt) %s: ས་ཚིགས་ཀྱི་ཚད་གཞི་སྒྲིག་འབད་མ་ཚུགས་: %s\n"
+#~ msgid "(tt) %s: could not load PS name table\n"
+#~ msgstr "(tt) %s: པི་ཨེསི་མིང་གི་ཐིག་ཁྲམ་ མངོན་གསལ་འབད་མ་ཚུགས་\n"
+#~ msgid "%s: no encoding vector found, expect bad output\n"
+#~ msgstr "%s:ཨེན་ཀོ་ཌིང་མཉམ་ཐིག་ཅིག་ཡང་མ་ཐོབ། ཨའུཊི་པུཊི་ བྱང་ཉེས་ཅིག་རེ་འདོད་བསྐྱེད་སྡོད་\n"
+#~ msgid "(tt) %s: no font metric data\n"
+#~ msgstr "(tt) %s: ཡིག་གཟུགས་མེ་ཊིཀ་གནད་སྡུད་མེད་\n"
+#~ msgid "Crashing"
+#~ msgstr "བརྡབ་འཁྲུག་འབད་དོ་"
+#~ msgid "%s: Error: "
+#~ msgstr "%s:འཛོལ་བ་:"
+#~ msgid "Error"
+#~ msgstr "འཛོལ་བ་"
+#~ msgid "%s: Warning: "
+#~ msgstr "%s: ཉེན་བརྡ་: "
+#~ msgid "Warning"
+#~ msgstr "ཉེན་བརྡ་"
+#~ msgid "%s: Fatal: "
+#~ msgstr "%s:འཚུབ་ཆེན་: "
+#~ msgid "Fatal"
+#~ msgstr "འཚུབ་ཆེན་"
+#~ msgid "out of memory allocating %u bytes\n"
+#~ msgstr "%u བཱའིཊིསི་ སྤྲོད་ནི་ལུ་ དྲན་ཚད་ཀྱི་ལངས་མ་ཚུགས་པས་\n"
+#~ msgid "attempted to reallocate with zero size\n"
+#~ msgstr "ཀླད་ཀོར་གྱི་ཚད་ནང་ལུ་ ལོག་སྤྲོད་ནིའི་དཔའ་བཅམ་ནུག་\n"
+#~ msgid "failed to reallocate %u bytes\n"
+#~ msgstr "%u བཱའིཊིསི་ སྤྲོད་ནི་ལུ་ འཐུས་ཤོར་བྱུང་ནུག་\n"
+#~ msgid "attempted to callocate 0 members\n"
+#~ msgstr "འཐུས་མི་ ༠ འབད་མི་ཚུ་ ཀ་ལོ་ཀེདི་འབད་ནིའི་དཔའ་བཅམ་ཅི་\n"
+#~ msgid "attempted to callocate %u members with size 0\n"
+#~ msgstr "%u འཐུས་མི་ ཚད་༠་གྱི་ཐོག་ལས་ ཀ་ལོ་ཀེཌི་འབད་ནི་འི་ བཅམ་ཅི་\n"
+#~ msgid "failed to allocate %ux%u bytes\n"
+#~ msgstr "%ux%u བཱའིཊིསི་ སྤྲོད་ནི་ལུ་འཐུས་ཤོར་བྱུང་ནུག་\n"
+#~ msgid "attempted to free NULL pointer\n"
+#~ msgstr "ནཱལ་ དཔག་བྱད་དེ་ དལཝ་བཞག་ནིའི་དོན་ལུ་དཔའ་བཅམ་བཅམ་ཨིན་\n"
+#~ msgid "%s: Checksum mismatch (expected %u, got %u)\n"
+#~ msgstr "%s:ཅེག་སམ་ མ་མཐུནམ་ (དེ་མདུན་བསྐྱེད་ཡོདཔ་ %u, ཐོབ་ཡོདཔ་ %u)\n"
+#~ msgid "(vf) %s: could not load font `%s'\n"
+#~ msgstr "(vf) %s: ཡིག་གཟུགས་`%s' མངོན་གསལ་འབད་མ་ཚུགས་\n"
+#~ msgid "(vf) %s: character %d redefined\n"
+#~ msgstr "(vf) %s: ཡིག་འབྲུ་ %d ལོག་ངེས་འཛིན་འབད་ནུག་\n"
+#~ msgid "(vf) %s: no postamble\n"
+#~ msgstr "(vf) %s: པོསཊི་ཨེམ་བཱལ་མིན་འདུག་\n"
+#~ msgid "%s: File corrupted, or not a VF file.\n"
+#~ msgstr "%s: ཡིག་སྣོད་ངན་ཅན་བཟོ་ཡོདཔ་ཨིནམ་དང་ ཡང་ན་ ཝི་ཨེཕ་ཡིག་སྣོད་མེན་\n"
+#~ msgid "No document loaded."
+#~ msgstr "ཡིག་ཆ་ག་ནི་ཡང་ མངོན་གསལ་མ་འབད་བས།"
+#~ msgid "Broken pipe."
+#~ msgstr "རྒྱུན་ཆད་པའི་རྒྱུད་དུང་།"
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "ཡིག་སྣོད་“%s”:ཨེབ་བཙུགས་བཤོལ་བའི་སྐབས་འཛོལ་བ་བྱུང་ཡི།\n"
+#~ msgid "File is not readable."
+#~ msgstr "ཡིག་སྣོད་ལྷག་མི་བཏུབ་པས།"
+#~ msgid "Document loaded."
+#~ msgstr "ཡིག་ཆ་མངོན་གསལ་འབད་ཡི།"
+#~ msgid "_Previous"
+#~ msgstr "ཧེ་མམ།(_P)"
+#~ msgid "_Next"
+#~ msgstr "ཤུལ་མམ།(_N)"
+#~ msgid "Hide attachments bar"
+#~ msgstr "མཉམ་སྦྲགས་ཕྲ་རིང་སྦ་བཞག"
+#~ msgid "*"
+#~ msgstr "*"
+#~ msgid "Default sidebar size"
+#~ msgstr "ཟུར་ཁའི་ཕྲ་རིང་གི་ཚད་ སྔོན་སྒྲིག་འབད།"
+#~ msgid "Show sidebar by default"
+#~ msgstr "ཟུར་ཁའི་ཕྲ་རིང་ སྔོན་སྒྲིག་ཐོག་ལུ་སྟོན།"
+#~ msgid "Show statusbar by default"
+#~ msgstr "གནས་ཚད་ཕྲ་རིང་ སྔོན་སྒྲིག་ཐོག་ལས་སྟོན།"
+#~ msgid "Show toolbar by default"
+#~ msgstr "ལག་ཆས་ཕྲ་རིང་ སྔོན་སྒྲིག་ཐོག་ལས་སྟོན།"
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. The "
+#~ "default size sets the sidebar's width in pixels based from the side of "
+#~ "the window. Any integer will be accepted. The sidebar will never shrink "
+#~ "smaller than the size of the text required to display Thumbnails or "
+#~ "Index. Large values will cause the sidebar to take up as much of the page "
+#~ "display area as possible relative to the window's size."
+#~ msgstr ""
+#~ "ཟུར་ཁའི་ཕྲ་རིང་དེ་ ཟུར་ཐོ་དང་ མཐེ་གཟེར་ཐོ་ཡིག་ཚུ་ཡོད་པའི་ ཟུར་ཁའི་རྣམ་གྲངས་ཅིག་ཨིན། ཚད་སྔོན་སྒྲིག་"
+#~ "གིས་ སྒོ་སྒྲིག་གི་ཟུར་ལུ་ གཞི་བཞག་སྟེ་ ཟུར་ཁའི་གྲ་རིང་གི་རྒྱ་ཚད་ པིག་སེལསི་ནང་ གཞི་སྒྲིག་འབདཝ་ཨིན། "
+#~ "ཧྲིང་ཨང་ག་ཅི་ཨིན་རུང་ དང་ལེན་འབད་འོང་། ཟུར་ཁའི་ཕྲ་རིང་དེ་ མཐེ་གཟེར་དང་ ཟུར་ཐོ་བཀྲམ་སྟོན་འབད་"
+#~ "དགོ་པའི་ ཚིག་ཡིག་ལས་ཆུངམ་སྦེ་ ནམ་ཡང་མི་བསྐུམ། བེ་ལུ་ཆེ་བ་གིས་ སྒོ་སྒྲིག་གི་ཚད་དང་འཁྲིལ་ཏེ་ ཟུར་ཁའི་"
+#~ "ཕྲ་རིང་དེ་གིས་ ཤོག་ལེབ་བཀྲམ་སྟོན་འབད་ནིའི་མངའ་ཁོངས་ ག་དེ་མང་མང་བཟུང་ནི་ལུ་ རྒྱུ་རྐྱེན་འབདཝ་ཨིན།"
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. Two "
+#~ "boolean options, true makes sidebar visible by default while false makes "
+#~ "sidebar not visible by default"
+#~ msgstr ""
+#~ "ཟུར་ཁའི་ཕྲ་རིང་དེ་ ཟུར་ཐོ་དང་ མཐེ་གཟེར་ཐོ་ཡིག་ཚུ་ཡོད་པའི་ ཟུར་ཁའི་རྣམ་གྲངས་དེ་ཨིན། བུ་ལིན་གྱི་གདམ་"
+#~ "ཁ་གཉིས་ཡོད་མི་དེ་ཡང་ བདེན་པ་གིས་ ཟུར་ཁའི་ཕྲ་རིང་དེ་ སྔོན་སྒྲིག་ཐོག་ལས་ མཐོང་ཚུགསཔ་བཟོ་ནི་དང་ "
+#~ "རྫུན་པ་གིས་ སྔོན་སྒྲིག་ཐོག་ལས་ ཟུར་ཁའི་ཕྲ་རིང་ མཐོང་མ་ཚུགསཔ་བཟོཝ་ཨིན།"
+#~ msgid ""
+#~ "Statusbar is the standard bottom bar that display additional information "
+#~ "about links and other actions. Two boolean options, true makes the "
+#~ "statusbar visible by default while false makes sidebar not visible by "
+#~ "default."
+#~ msgstr ""
+#~ "ཟུར་ཁའི་ཕྲ་རིང་དེ་ འབྲེལ་ལམ་དང་ བྱ་བ་གཞན་ཚུ་གི་སྐོར་ལས་ བརྡ་དོན་ཁ་སྐོང་བཀྲམ་སྟོན་འབད་མི་ ཚད་"
+#~ "ལྡན་གཤམ་གྱི་ཕྲ རིང་དེ་ཨིན། བུ་ལིན་གྱི་གདམ་ཁ་གཉིས་ཡོད་མི་དེ་ཡང་ བདེན་པ་གིས་ ཟུར་ཁའི་ཕྲ་རིང་དེ་ "
+#~ "སྔོན་སྒྲིག་ཐོག་ལས་ མཐོང་ཚུགསཔ་བཟོ་ནི་དང་ རྫུན་པ་གིས་ སྔོན་སྒྲིག་ཐོག་ལས་ ཟུར་ཁའི་ཕྲ་རིང་ མཐོང་མ་"
+#~ "ཚུགསཔ་བཟོཝ་ཨིན།"
+#~ msgid ""
+#~ "Toolbar is the top bar that contains navigation and zoom controls. Two "
+#~ "boolean options, true makes toolbar visible by default while false makes "
+#~ "toolbar not visible by default."
+#~ msgstr ""
+#~ "ཟུར་ཁའི་ཕྲ་རིང་དེ་ འགྲུལ་བསྐྱོད་དང་ རྒྱས་ཟུམ་ཚད་འཛིན་ཡོད་མི་ མགོའི་ཕྲ་རིང་དེ་ཨིན། བུ་ལིན་གྱི་གདམ་ཁ་"
+#~ "གཉིས་ཡོད་མི་དེ་ཡང་ བདེན་པ་གིས་ ཟུར་ཁའི་ཕྲ་རིང་དེ་ སྔོན་སྒྲིག་ཐོག་ལས་ མཐོང་ཚུགསཔ་བཟོ་ནི་དང་ རྫུན་"
+#~ "པ་གིས་ སྔོན་སྒྲིག་ཐོག་ལས་ ཟུར་ཁའི་ཕྲ་རིང་ མཐོང་མ་ཚུགསཔ་བཟོཝ་ཨིན།"
+#~ msgid "Unable to find glade file"
+#~ msgstr "གེ་ལེཌི་ཡིག་སྣོད་འཚོལ་མ་ཐོབ།"
+#~ msgid ""
+#~ "The glade file, %s, cannot be found. Please check that your installation "
+#~ "is complete."
+#~ msgstr ""
+#~ "གེ་ལེཌི་ཡིག་སྣོད་%sའཚོལ་མི་འཐོབ་པས། ཁྱོད་རའི་གཞི་བཙུགས་ ཆ་ཚང་ཨིནམ་མེནམ་ ཞིབ་དཔྱད་འབད་གནང་།"
+#~ msgid "Not found"
+#~ msgstr "མ་ཐོབ།"
+#~ msgid "Document Viewer - Password Required"
+#~ msgstr "ཡིག་ཆ་མཐོང་བྱེད་ - ཆོག་ཡིག་དགོ་པས།"
+#~ msgid "Loading document. Please wait"
+#~ msgstr "ཡིག་ཆ་མངོན་གསལ་འབད་དོ། བསྒུག་གནང་།"
+#~ msgid "The \"Find\" feature will not work with this document"
+#~ msgstr "\"Find\" ཁྱད་རྣམ་དེ་གིས་ ཡིག་ཆ་འདི་དང་གཅིག་ཁར་ ལཱ་འབད་མི་བཏུབ།"
+#~ msgid "Searching for text is only supported for PDF documents."
+#~ msgstr "ཚིག་ཡིག་གི་དོན་ལུ་ འཚོལ་ཞིབ་འབད་ནི་དེ་ པི་ཌི་ཨེཕ་ཡིག་ཆའི་དོན་ལུ་རྐྱངམ་གཅིག་ རྒྱབ་སྐྱོར་ཡོད།"
+#~ msgid "Save the current document with a new filename"
+#~ msgstr "ད་ལྟོའི་ཡིག་ཆ་དེ་ ཡིག་སྣོད་མིང་གསརཔ་ཅིག་གི་ཐོག་ལས་སྲུངས།"
+#~ msgid "View the properties of this document"
+#~ msgstr "ཡིག་ཆ་འདི་གི་རྒྱུ་དངོས་ཚུ་སྟོན།"
+#~ msgid "Close this window"
+#~ msgstr "སྒོ་སྒྲིག་འདི་ཁ་བསྡམས།"
+#~ msgid "Copy text from the document"
+#~ msgstr "ཡིག་ཆ་ནང་ལས་ཚིག་ཡིག་འདྲ་བཤུས་རྐྱབས།"
+#~ msgid "Select the entire page"
+#~ msgstr "ཤོག་ལེབ་ཧྲིལ་བུ་སེལ་འཐུ་འབད།"
+#~ msgid "Customize the toolbar"
+#~ msgstr "ལག་ཆས་ཕྲ་རིང་སྲོལ་སྒྲིག་འབད།"
+#~ msgid "Rotate the document to the left"
+#~ msgstr "ཡིག་ཆ་དེ་གཡོན་ལུ་བསྒྱིར།"
+#~ msgid "Rotate the document to the right"
+#~ msgstr "ཡིག་ཆ་དེ་གཡས་ལུ་བསྒྱིར།"
+#~ msgid "Display help for the viewer application"
+#~ msgstr "མཐོང་བྱེད་གློག་རིམ་གྱི་དོན་ལུ་ གྲོགས་རམ་སྟོན།"
+#~ msgid "Display credits for the document viewer creators"
+#~ msgstr "ཡིག་ཆ་མཐོང་བྱེད་ གསར་སྐྲུན་པའི་དོན་ལུ་ ངོ་བསྟོད་བཀྲམ་སྟོན་འབད།"
+#~ msgid "Scroll one page forward"
+#~ msgstr "ཤོག་ལེབ་གཅིག་གདོང་ཕྱོགས་ལུ་སྒྲིལ།"
+#~ msgid "Scroll one page backward"
+#~ msgstr "ཤོག་ལེབ་གཅིག་རྒྱབ་ཕྱོགས་ལུ་སྒྲིལ།"
+#~ msgid "Go ten pages backward"
+#~ msgstr "ཤོག་ལེབ་བཅུ་ཐམ་གྱི་རྒྱབ་ཁར་སོང་།"
+#~ msgid "Go ten pages forward"
+#~ msgstr "ཤོག་ལེབ་བཅུ་ཐམ་གྱི་གདོང་ཁར་སོང་།"
+#~ msgid "_Statusbar"
+#~ msgstr "གནས་ཚད་ཕྲ་རིང་།(_S)"
+#~ msgid "Show or hide the statusbar"
+#~ msgstr "གནས་ཚད་ཕྲ་རིང་སྟོན་ ཡང་ན་ སྦ་བཞག"
+
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 00000000..8b33df59
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,1709 @@
+# translation of evince.HEAD.po to Greek
+# MATE evince Greek translation.
+# Copyright (C) 2000, 2001,2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+#
+# Stylianos Papanastasiou <[email protected]>, 2005.
+# Kostas Papadimas <[email protected]>, 2006.
+# Dimitris Glezos <[email protected]>, 2006, 2007.
+# Pierros Papadeas <[email protected]>, 2008.
+# Fotis Tsamis <[email protected]>, 2009.
+# Initial translation by Stelios
+# Μάριος Ζηντίλης <[email protected]>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.HEAD\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-08-19 07:59+0000\n"
+"PO-Revision-Date: 2010-08-22 21:04+0200\n"
+"Last-Translator: Michael Kotsarinis <[email protected]>\n"
+"Language-Team: Greek <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Σφάλμα κατά την εκκίνηση της εντολής “%s” με σκοπό την αποσυμπίεση του comic book: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Η εντολή “%s” απέτυχε στην αποποσυμπίεση του comic book."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Η εντολή “%s” δεν ολοκληρώθηκε κανονικά."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Δεν είναι τύπος comic book MIME: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Αδυναμία εύρεσης κατάλληλης εντολής για την αποσυμπίεση αυτού του τύπου του comic book"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Άγνωστος τύπος ΜΙΜΕ"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Το αρχείο είναι κατεστραμμένο"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Δεν βρέθηκαν αρχεία στην αρχειοθήκη"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Δεν βρέθηκαν εικόνες στο αρχείο %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Παρουσιάστηκε σφάλμα κατά την διαγραφή “%s”."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Σφάλμα %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Comic Books"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "Το έγγραφο DjVu έχει εσφαλμένη μορφή"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid "The document is composed of several files. One or more of these files cannot be accessed."
+msgstr "Το έγγραφο απαρτίζεται από διάφορα αρχεία. Δεν είναι δυνατή η πρόσβαση σε ένα ή περισσότερα από αυτά τα αρχεία."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Έγγραφα DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Το έγγραφο DVI έχει εσφαλμένη μορφή"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Έγγραφα DVI"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Αυτό το έργο είναι Δημόσιο"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Ναι"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Όχι"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Τύπος 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Τύπος 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Τύπος 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Τύπος 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Τύπος 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Άγνωστος τύπος γραμματοσειράς"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Χωρίς όνομα"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Ενσωματωμένο υποσύνολο"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Ενσωματωμένο"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Μη ενσωματωμένο"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Έγγραφα PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Άκυρο έγγραφο"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Σλάιντς Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Κανένα σφάλμα"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Ανεπαρκής μνήμη"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Αδυναμία εύρεσης υπογραφής ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Μη έγκυρο αρχείο ZIP"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Δεν υποστηρίζονται ZIP πολλαπλών αρχείων"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Αδυναμία ανοίγματος του αρχείου"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Αδυναμία ανάγνωσης δεδομένων από το αρχείο"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Αδυναμία εύρεσης αρχείου στο συμπιεσμένο αρχείο ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Άγνωστο σφάλμα"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Αδυναμία φόρτωσης εγγράφου “%s”"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Αδυναμία αποθήκευσης εγγράφου “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Έγγραφα PostScript"
+
+#: ../libdocument/ev-attachment.c:304
+#: ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Αδυναμία αποθήκευσης συνημμένου “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Αδυναμία ανοίγματος συνημμένου “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Αδυναμία ανοίγματος συνημμένου “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Δεν υποστηρίζεται η μορφή αρχείου %s (%s)"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Όλα τα έγγραφα"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Όλα τα αρχεία"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Αποτυχία δημιουργίας ενός προσωρινού αρχείου: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Αποτυχία δημιουργίας ενός προσωρινού φακέλου: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Το αρχείο δεν είναι έγκυρο αρχείο .desktop"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Μη αναγνωρίσιμο αρχείο επιφάνειας εργασίας έκδοσης '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Εκκίνηση %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Η εφαρμογή δεν δέχεται έγγραφα στη γραμμή εντολών"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Μη αναγνωρίσιμη επιλογή εκκίνησης: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Αδυναμία ορισμού URI εγγράφου σε 'Type=Link' εγγραφή επιφάνειας εργασίας"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Μη εκκινήσιμο αντικείμενο"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Απενεργοποίηση σύνδεσης στο διαχειριστή συνεδρίας"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Ορισμός αρχείου που περιέχει αποθηκευμένες επιλογές"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+#: ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "ΑΡΧΕΙΟ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Ορισμός ID διαχείρισης συνεδρίας"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Επιλογές διαχείρισης συνεδριών"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Εμφάνιση επιλογών διαχείρισης συνεδριών"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Προβολή “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Μετακίνηση σε εργαλειοθήκη"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Μετακίνηση του επιλεγμένου αντικειμένου στην εργαλειοθήκη"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "Α_φαίρεση από εργαλειοθήκη"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Αφαίρεση του επιλεγμένου αντικειμένου από την εργαλειοθήκη"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Αφαίρεση εργαλειοθήκης"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Αφαίρεση της επιλεγμένης εργαλειοθήκης"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Διαχωριστικό"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48
+#: ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "Καλύτερο ταίριασμα"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Ταίριασμα στο πλάτος της σελίδας"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+#| msgid "100%"
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+#| msgid "100%"
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+#| msgid "200%"
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+#| msgid "400%"
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1
+#: ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149
+#: ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Εφαρμογή προβολής εγγράφων"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Προβολή εγγράφων πολλαπλών σελίδων"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Παράκαμψη των περιορισμών του εγγράφου"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Παράκαμψη των περιορισμών του εγγράφου, όπως περιορισμών εκτύπωσης ή αντιγραφής."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Διαγραφή του προσωρινού αρχείου"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Εκτύπωση αρχείου ρυθμίσεων"
+
+#: ../previewer/ev-previewer.c:144
+#: ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Εφαρμογή προβολής εγγράφων του MATE"
+
+#: ../previewer/ev-previewer-window.c:91
+#: ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "Αδυναμία εκτύπωσης εγγράφου"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Ο επιλεγμένος εκτυπωτής '%s' δεν μπορεί να βρεθεί"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284
+#: ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "_Προηγούμενη σελίδα"
+
+#: ../previewer/ev-previewer-window.c:285
+#: ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "Μετάβαση στην προηγούμενη σελίδα"
+
+#: ../previewer/ev-previewer-window.c:287
+#: ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "Επόμε_νη σελίδα"
+
+#: ../previewer/ev-previewer-window.c:288
+#: ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "Μετάβαση στην επόμενη σελίδα"
+
+#: ../previewer/ev-previewer-window.c:291
+#: ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "Μεγέθυνση εγγράφου"
+
+#: ../previewer/ev-previewer-window.c:294
+#: ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "Σμίκρυνση εγγράφου"
+
+#: ../previewer/ev-previewer-window.c:297
+#: ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Εκτύπωση"
+
+#: ../previewer/ev-previewer-window.c:298
+#: ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "Εκτύπωση αυτού του εγγράφου"
+
+#: ../previewer/ev-previewer-window.c:342
+#: ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "_Καλύτερο ταίριασμα"
+
+#: ../previewer/ev-previewer-window.c:343
+#: ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "Μετατροπή του τρέχοντος εγγράφου ώστε να γεμίσει το παράθυρο"
+
+#: ../previewer/ev-previewer-window.c:345
+#: ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "Ταίριασμα στο π_λάτος σελίδας"
+
+#: ../previewer/ev-previewer-window.c:346
+#: ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "Μετατροπή του τρέχοντος εγγράφου ώστε να γεμίσει το πλάτος του παραθύρου"
+
+#: ../previewer/ev-previewer-window.c:558
+#: ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "Σελίδα"
+
+#: ../previewer/ev-previewer-window.c:559
+#: ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "Επιλογή σελίδας"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Έγγραφo"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Τίτλος:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Τοποθεσία:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Θέμα:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Συγγραφέας:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Λέξεις-κλειδί:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Παραγωγός:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Δημιουργός:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Δημιουργήθηκε:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Τροποποιήθηκε:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Αριθμός Σελίδων:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Βελτιώθηκε:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Μορφή:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Ασφάλεια:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Μέγεθος χαρτιού:"
+
+#: ../properties/ev-properties-view.c:188
+#: ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Κανένα"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "προεπιλογή:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f ίντσα"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Πορτραίτο (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Τοπίο (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d από %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "από %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76
+#: ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Φορτώνεται..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Προετοιμασία για εκτύπωση..."
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Ολοκλήρωση..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Εκτύπωση σελίδας %d από %d..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Η εκτύπωση δεν υποστηρίζεται σε αυτόν τον εκτυπωτή."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Μη έγκυρη επιλογή σελίδας"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Προειδοποίηση"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Η επιλογή του εύρους εκτύπωσης δεν περιέχει καμία σελίδα"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Κλιμάκωση σελίδας:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Σμίκρυνση στην εκτυπώσιμη περιοχή"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Προσαρμογή στην εκτυπώσιμη περιοχή"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as required to fit the printable area of the printer page.\n"
+msgstr ""
+"Κλιμάκωση των σελίδων του εγγράφου για προσαρμογή στην επιλεγμένη σελίδα εκτυπωτή. Επιλέξτε ένα από τα ακόλουθα:\n"
+"\n"
+"• \"Καμία\": Δεν εφαρμόζεται καμία κλιμάκωση.\n"
+"\n"
+"• \"Σμίκρυνση στην εκτυπώσιμη περιοχή\": Οι σελίδες του εγγράφου που είναι μεγαλύτερες από την εκτυπώσιμη περιοχή της σελίδας του εκτυπωτή σμικρύνονται για να χωρέσουν.\n"
+"\n"
+"• \"Προσαρμογή στην εκτυπώσιμη περιοχή\": Οι σελίδες του εγγράφουν μεγεθύνονται ή σμικρύνονται ανάλογα, για να χωρέσουν στην εκτυπώσιμη περιοχή της σελίδας του εκτυπωτή.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Αυτόματη περιστροφή και κεντράρισμα"
+
+#: ../libview/ev-print-operation.c:1885
+msgid "Rotate printer page orientation of each page to match orientation of each document page. Document pages will be centered within the printer page."
+msgstr "Περιστροφή της κάθε σελίδας εκτυπωτή ώστε να ταιριάζει με τον προσανατολισμό κάθε σελίδας του εγγράφου. "
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Επιλογή του μεγέθους της σελίδας βάσει του μεγέθους σελίδας του εγγράφου"
+
+#: ../libview/ev-print-operation.c:1892
+msgid "When enabled, each page will be printed on the same size paper as the document page."
+msgstr "Αν ενεργοποιηθεί, κάθε σελίδα θα εκτυπωθεί στο ίδιο μέγεθος χαρτιού με τη σελίδα του εγγράφου."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Διαχείριση σελίδας"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Αποτυχία εκτύπωσης σελίδας %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Κύλιση πάνω"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Κύλιση κάτω"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Κύλιση προβολής πάνω"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Κύλιση προβολής κάτω"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Προβολή εγγράφου"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Μετάβαση στη σελίδα:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Τέλος παρουσίασης. Κάντε κλικ για έξοδο."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Μετάβαση στην πρώτη σελίδα"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Μετάβαση στην προηγούμενη σελίδα"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Μετάβαση στην επόμενη σελίδα"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Μετάβαση στην τελευταία σελίδα"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Μετάβαση στη σελίδα"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Εύρεση"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Μετάβαση στη σελίδα %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Μετάβαση σε %s στο αρχείο “%s”"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Μετάβαση στο αρχείο “%s”"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Εκκίνηση %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Εύρεση:"
+
+#: ../shell/eggfindbar.c:329
+#: ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "Εύρεση προη_γουμένου"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Εύρεση της προηγούμενης εμφάνισης του αλφαριθμητικού αναζήτησης"
+
+#: ../shell/eggfindbar.c:337
+#: ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "Εύρεση ε_πομένου"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Εύρεση της επόμενης εμφάνισης του αλφαριθμητικού αναζήτησης"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Διάκριση πεζών από κεφαλαία"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Εναλλαγή αναζήτησης πεζών-κεφαλαίων "
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Εικονίδιο:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+#| msgid "None"
+msgid "Note"
+msgstr "Σημείωση"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+#| msgid "Document"
+msgid "Comment"
+msgstr "Σχολιασμός"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Κλειδί"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+#| msgid "_Help"
+msgid "Help"
+msgstr "Βοήθεια"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Νέα παράγραφος"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Παράγραφος"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Εισαγωγή"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Σταυρός"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Κύκλος"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+#| msgid "Unknown error"
+msgid "Unknown"
+msgstr "Άγνωστο"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+#| msgid "Properties"
+msgid "Annotation Properties"
+msgstr "Ιδιότητες σχολίων"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Χρώμα:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+#| msgid "Title:"
+msgid "Style:"
+msgstr "Πρότυπο:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Διαφανές"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Αδιαφάνεια"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Αρχική κατάσταση παραθύρου:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+#| msgid "_Open…"
+msgid "Open"
+msgstr "Άνοιγμα"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Κλείσιμο"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Εκτέλεση σε λειτουργία παρουσίασης"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Κωδικός για το έγγραφο %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Μετατροπή %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d από %d έγγραφα μετατράπηκαν"
+
+#: ../shell/ev-convert-metadata.c:165
+#: ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Μετατροπή μεταδεδομένων"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid "The metadata format used by Evince has changed, and hence it needs to be migrated. If the migration is cancelled the metadata storage will not work."
+msgstr "Η μορφή μεταδεδομένων που χρησιμοποιείται από το Evince έχει αλλάξει, και χρειάζεται να γίνει μετάβαση. Αν ακυρωθεί η μετάβαση δε θα λειτουργεί η αποθήκη μεταδεδομένων."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Άνοιγμα ενός πρόσφατα χρησιμοποιημένου εγγράφου"
+
+#: ../shell/ev-password-view.c:144
+msgid "This document is locked and can only be read by entering the correct password."
+msgstr "Το έγγραφο είναι κλειδωμένο και μπορεί να αναγνωστεί μόνο μετά από την εισαγωγή του σωστού κωδικού."
+
+#: ../shell/ev-password-view.c:153
+#: ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Ξεκλείδωμα εγγράφου"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Εισάγετε κωδικό"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Απαιτείται κωδικός."
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "Το έγγραφο “%s” είναι κλειδωμένο και απαιτείται κωδικός πριν το άνοιγμα."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Κωδικός:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "_Μη αποθήκευση του κωδικού"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Απομνημόνευση κωδικού μέχρι να α_ποσυνδεθήτε"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Μόνιμη αποθήκευση _στοιχείων"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Ιδιότητες"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Γενικά"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Γραμματοσειρές"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Άδεια εγγράφου"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Γραμματοσειρά"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Συλλογή πληροφοριών για τις γραμματοσειρές... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Όροι χρήσης"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Άδεια κειμένου"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Περισσότερες πληροφορίες"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Λίστα"
+
+#: ../shell/ev-sidebar-annotations.c:203
+#: ../shell/ev-sidebar-annotations.c:533
+#| msgid "Location:"
+msgid "Annotations"
+msgstr "Σχόλια"
+
+#: ../shell/ev-sidebar-annotations.c:209
+#| msgid "Next"
+msgid "Text"
+msgstr "Κείμενο"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Προσθήκη σχολίου κειμένου"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Προσθήκη"
+
+#: ../shell/ev-sidebar-annotations.c:364
+#| msgid "The document contains no pages"
+msgid "Document contains no annotations"
+msgstr "Το έγγραφο δεν περιέχει σχόλια"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+#| msgid "Page %s"
+msgid "Page %d"
+msgstr "Σελίδα %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Συνημμένα "
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Στρώματα"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Εκτύπωση..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Κατάλογος"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Μικρογραφίες"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "Σελίδα %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "Σελίδα %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "Το αρχείο δεν περιέχει σελίδες"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "Το έγγραφο περιέχει μόνο κενές σελίδες"
+
+#: ../shell/ev-window.c:1627
+#: ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "Αδυναμία ανοίγματος εγγράφου"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Φόρτωση εγγράφου από “%s”"
+
+#: ../shell/ev-window.c:1906
+#: ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Κατέβασμα εγγράφου (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "Αδυναμία φόρτωσης του απομακρυσμένου εγγράφου."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Επαναφόρτωση του εγγράφου από %s"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "Αδυναμία επαναφόρτωσης του εγγράφου."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "Άνοιγμα εγγράφου"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "Αποθήκευση εγγράφου σε %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Αποθήκευση συνημμένου σε %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "Αποθήκευση εικόνας σε %s"
+
+#: ../shell/ev-window.c:2664
+#: ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Το αρχείο δεν μπορεί να αποθηκευτεί ως “%s”."
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Ανέβασμα εγγράφου (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Ανέβασμα συνημμένου (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Ανέβασμα εικόνας (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "Αποθήκευση αντιγράφου"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "Εκκρεμεί %d εργασία στην σειρά αναμονής"
+msgstr[1] "Εκκρεμούν %d εργασίες στην σειρά αναμονής"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Εργασία εκτύπωσης “%s”"
+
+#: ../shell/ev-window.c:3402
+msgid "Document contains form fields that have been filled out. If you don't save a copy, changes will be permanently lost."
+msgstr "Το έγγραφο περιέχει πεδία φόρμας που έχουν συμπληρωθεί. Αν δεν αποθηκεύσετε ένα αντίγραφο, οι αλλαγές θα χαθούν οριστικά."
+
+#: ../shell/ev-window.c:3406
+msgid "Document contains new or modified annotations. If you don't save a copy, changes will be permanently lost."
+msgstr "Το έγγραφο περιέχει νέα η τροποποιημένα σχόλια. Αν δεν αποθηκεύσετε ένα αντίγραφο, οι αλλαγές θα χαθούν οριστικά."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+#| msgid "Wait until print job “%s” finishes before closing?"
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Αποθήκευση ενός αντιγράφου του εγγράφου «%s» πριν το κλείσιμο;"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "Κλείσιμο _χωρίς αποθήκευση"
+
+#: ../shell/ev-window.c:3436
+#| msgid "Save a Copy"
+msgid "Save a _Copy"
+msgstr "Απο_θήκευση αντιγράφου"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Αναμονή μέχρι η εργασία εκτύπωσης “%s” να ολοκληρωθεί πριν το κλείσιμο;"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "Υπάρχουν %d ενεργές εργασίες εκτύπωσης. Αναμονή μέχρι η εκτύπωση να τελειώσει πριν το κλείσιμο;"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Αν κλείσετε το παράθυρο, οι εκκρεμείς εργασίες εκτύπωσης δεν θα εκτυπωθούν."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "Ακύρωση _εκτύπωσης και κλείσιμο"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "Κλείσι_μο μετά την εκτύπωση"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "Επεξεργασία εργαλειοθήκης"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "Παρουσιάστηκε σφάλμα κατά την εμφάνιση της βοήθειας"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Προβολή Εγγράφων.\n"
+"Γίνεται χρήση του %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid "Evince 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.\n"
+msgstr "Το Evince είναι ελεύθερο λογισμικό. Επιτρέπεται η αναδιανομή ή/και τροποποίησή του υπό τους όρους της Γενικής Άδειας Δημόσιας Χρήσης GNU (GNU General Public License) όπως αυτή δημοσιεύεται από το Ίδρυμα Ελεύθερου Λογισμικού (Free Software Foundation) - είτε της έκδοσης 2 της άδειας, είτε (κατ' επιλογήν) οποιασδήποτε μεταγενέστερης έκδοσης.\n"
+
+#: ../shell/ev-window.c:4567
+msgid "Evince 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.\n"
+msgstr "Το Evince διανέμεται με την ελπίδα οτι θα είναι χρήσιμο, αλλά ΧΩΡΙΣ ΚΑΜΜΙΑ ΑΠΟΛΥΤΩΣ ΕΓΓΥΗΣΗ - χωρίς ακόμη και την έμμεση εγγύηση ΕΜΠΟΡΕΥΣΙΜΟΤΗΤΑΣ ήΚΑΤΑΛΛΗΛΟΤΗΤΑΣ ΓΙΑ ΣΥΓΚΕΚΡΙΜΕΝΟ ΣΚΟΠΟ. Δείτε για περισσότερες λεπτομέρειες την Γενική Άδεια Δημόσιας Χρήσης GNU (GNU General Public License).\n"
+
+#: ../shell/ev-window.c:4571
+#| msgid ""
+#| "You should have received a copy of the GNU General Public License along "
+#| "with Evince; if not, write to the Free Software Foundation, Inc., 59 "
+#| "Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgid "You should have received a copy of the GNU General Public License along with Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr "Θα πρέπει να έχετε λάβει ένα αντίγραφο της Γενικής Άδειας Δημόσιας Χρήσης GNU (GNU General Public License) μαζί με το Evince. Αν όχι, επικοινωνήστε γραπτώς με το Ίδρυμα Ελεύθερου Λογισμικού (Free Software Foundation, Inc.), 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Οι συγγραφείς του Evince"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"Ελληνική μεταφραστική ομάδα MATE\n"
+" Στυλιανός Παπαναστασίου <[email protected]>\n"
+" Δημήτρης Γλέζος <[email protected]>\n"
+" Φώτης Τσάμης <[email protected]>\n"
+" Μάριος Ζηντίλης <[email protected]\n"
+"\n"
+"Για περισσότερες πληροφορίες, επισκεφθείτε τη σελίδα http://www.mate.gr/"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d βρέθηκε σε αυτήν τη σελίδα"
+msgstr[1] "%d βρέθηκαν σε αυτήν τη σελίδα"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "Δεν βρέθηκε"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% απομένουν για αναζήτηση"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "_Αρχείο"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "_Επεξεργασία"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "_Προβολή"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "_Μετάβαση"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "_Βοήθεια"
+
+#. File menu
+#: ../shell/ev-window.c:5402
+#: ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "Άν_οιγμα..."
+
+#: ../shell/ev-window.c:5403
+#: ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "Άν_οιγμα υπάρχοντος εγγράφου"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "Ά_νοιγμα ενός αντίγραφου"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "Άνοιγμα ενός αντίγραφου του τρέχοντος εγγράφου σε ένα νέο παράθυρο"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "_Αποθήκευση αντιγράφου..."
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "Αποθήκευση ενός αντιγράφου του τρέχοντος εγγράφου"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "_Εκτύπωση..."
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "_Ιδιότητες"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "Επιλογή ό_λων"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "_Εύρεση..."
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "Εύρεση μίας λέξης ή μίας φράσης μέσα στη σελίδα"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "_Εργαλειοθήκη"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "Περιστροφή _αριστερά"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "Περιστροφή _δεξιά"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "Αποθήκευση τρεχουσών ρυθμίσεων ως _Προεπιλογή"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "_Επαναφόρτωση"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "Επαναφόρτωση του εγγράφου"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "Αυτόματη κύλιση"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "_Πρώτη σελίδα"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "Μετάβαση στην πρώτη σελίδα"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "_Τελευταία σελίδα"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "Μετάβαση στην τελευταία σελίδα"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "Περιε_χόμενα"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "_Περί"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "Έξοδος από πλήρη οθόνη"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "Έξοδος από λειτουργία πλήρους οθόνη"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "Έναρξη παρουσίασης"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "Έναρξη μιας παρουσίασης"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "_Εργαλειοθήκη"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "Προβολή ή απόκρυψη της εργαλειοθήκης"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "Πλευρικό _ταμπλώ"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "Προβολή ή απόκρυψη πλευρικού ταμπλώ"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "Συνε_χής"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "Εμφάνιση ολόκληρου του εγγράφου"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "_Διπλή"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "Εμφάνιση δύο σελίδων ταυτόχρονα"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "_Πλήρης οθόνη"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "Ανάπτυξη παραθύρου ώστε να γεμίσει την οθόνη"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "_Παρουσίαση"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "Χρήση του εγγράφου για παρουσίαση"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "_Αντιστραμμένα χρώματα"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "Εμφάνιση των περιεχομένων της σελίδας με τα χρώματα αντιστραμμένα"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "Ά_νοιγμα δεσμού"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "_Μετάβαση σε"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "Άνοιγμα σε νέο _παράθυρο"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "Αντι_γραφή διεύθυνσης δεσμού"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "Απο_θήκευση εικόνας ως..."
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "Αντι_γραφή εικόνας"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "Ιδιότητες σχολίων..."
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "Ά_νοιγμα συνημμένου"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "Αποθήκευ_ση συνημμένου ως..."
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "Μεγέθυνση"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "Προσαρμογή του επιπέδου μεγέθυνσης"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "Πλοήγηση"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "Πίσω"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "Μετακίνηση σε σελίδες που έχετε ήδη επισκεφτεί"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "Προηγούμενο"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "Επόμενο"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "Μεγέθυνση"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "Σμίκρυνση"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "Ταίριασμα στο πλάτος"
+
+#: ../shell/ev-window.c:5890
+#: ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "Αδυναμία εκκίνησης εξωτερικής εφαρμογής."
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "Αδυναμία ανοίγματος εξωτερικού συνδέσμου"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "Αδυναμία εύρεσης κατάλληλης μορφής αποθήκευσης για την εικόνα"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "Η εικόνα δεν μπορεί να αποθηκευτεί."
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "Αποθήκευση εικόνας"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "Αδυναμία ανοίγματος συνημμένου"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "Το συνημμένο δεν μπορεί να αποθηκευτεί."
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "Αποθήκευση συνημμένων"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Απαιτείται κωδικός"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Κατά επέκταση"
+
+#: ../shell/main.c:69
+#: ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Εφαρμογή προβολής εγγράφων του MATE"
+
+#: ../shell/main.c:77
+#| msgid "The page of the document to display."
+msgid "The page label of the document to display."
+msgstr "Ο τίτλος της σελίδας του εγγράφου προς εμφάνιση."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "ΣΕΛΙΔΑ"
+
+#: ../shell/main.c:78
+#| msgid "The page of the document to display."
+msgid "The page number of the document to display."
+msgstr "Ο αριθμός σελίδας του εγγράφου προς εμφάνιση."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMBER"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Εκτέλεση evince σε λειτουργία πλήρους οθόνης"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Εκτέλεση evince σε λειτουργία παρουσίασης"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Εκτέλεση evince ως εφαρμογή προεπισκόπησης"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Η λέξη ή η φράση για αναζήτηση μέσα στο έγγραφο"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "ΑΛΦΑΡΙΘΜΗΤΙΚΟ"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[ΑΡΧΕΙΟ...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid "Boolean options available: true enables thumbnailing and false disables the creation of new thumbnails"
+msgstr "Διαθέσιμες επιλογές boolean: true ενεργοποιεί τη δημιουργία μικρογραφιών ενώ false απενεργοποιεί τη δημιουργία νέων μικρογραφιών"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Ενεργοποίηση μικρογραφιών για έγγραφα τύπου PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Εντολή για δημιουργία μικρογραφιών εγγράφων PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid "Valid command plus arguments for the PDF Document thumbnailer. See Caja thumbnailer documentation for more information."
+msgstr "Έγκυρη εντολή και επιλογές για τη δημιουργία μικρογραφιών εγγράφων τύπου PDF. Δείτε την τεκμηριώση των μικρογραφιών του Ναυτίλου για περισσότερες πληροφορίες."
+
diff --git a/po/[email protected] b/po/[email protected]
new file mode 100644
index 00000000..ccfcf90b
--- /dev/null
+++ b/po/[email protected]
@@ -0,0 +1,1537 @@
+# Shavian translation for evince.
+# Copyright (C) 2009-2010 The Mate Foundation.
+# Thomas Thurman <[email protected]>, 2010.
+# Transliterate Evince as ·𐑦𐑝𐑦𐑯𐑕
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-05-12 22:43+0000\n"
+"PO-Revision-Date: 2010-05-16 16:05 -0400\n"
+"Last-Translator: Thomas Thurman <[email protected]>\n"
+"Language-Team: Shavian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n!=1;\n"
+
+#, c-format
+#, fuzzy
+#: ../backend/comics/comics-document.c:160
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "𐑻𐑼 𐑤𐑷𐑯𐑗𐑦𐑙 𐑞 𐑒𐑩𐑥𐑭𐑯𐑛 “%s” 𐑦𐑯 𐑹𐑛𐑼 𐑑 decompress 𐑞 𐑒𐑪𐑥𐑦𐑒 𐑚𐑫𐑒: %s"
+
+#, c-format
+#, fuzzy
+#: ../backend/comics/comics-document.c:174
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "𐑞 𐑒𐑩𐑥𐑭𐑯𐑛 “%s” 𐑓𐑱𐑤𐑛 𐑨𐑑 decompressing 𐑞 𐑒𐑪𐑥𐑦𐑒 𐑚𐑫𐑒."
+
+#, c-format
+#: ../backend/comics/comics-document.c:183
+msgid "The command “%s” did not end normally."
+msgstr "𐑞 𐑒𐑩𐑥𐑭𐑯𐑛 “%s” 𐑛𐑦𐑛 𐑯𐑪𐑑 𐑧𐑯𐑛 𐑯𐑹𐑥𐑩𐑤𐑦."
+
+#, c-format
+#: ../backend/comics/comics-document.c:350
+msgid "Not a comic book MIME type: %s"
+msgstr "𐑯𐑪𐑑 𐑩 𐑒𐑪𐑥𐑦𐑒 𐑚𐑫𐑒 MIME 𐑑𐑲𐑐: %s"
+
+#, fuzzy
+#: ../backend/comics/comics-document.c:357
+msgid ""
+"Can't find an appropriate command to decompress this type of comic book"
+msgstr "𐑒𐑭𐑯𐑑 𐑓𐑲𐑯𐑛 𐑩𐑯 𐑩𐑐𐑮𐑴𐑐𐑮𐑦𐑩𐑑 𐑒𐑩𐑥𐑭𐑯𐑛 𐑑 decompress 𐑞𐑦𐑕 𐑑𐑲𐑐 𐑝 𐑒𐑪𐑥𐑦𐑒 𐑚𐑫𐑒"
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "𐑳𐑯𐑴𐑯 MIME 𐑑𐑲𐑐"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "𐑓𐑲𐑤 𐑒𐑼𐑳𐑐𐑑𐑩𐑛"
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "𐑯𐑴 𐑓𐑲𐑤𐑟 𐑦𐑯 𐑸𐑒𐑲𐑝"
+
+#, c-format
+#: ../backend/comics/comics-document.c:474
+msgid "No images found in archive %s"
+msgstr "𐑯𐑴 𐑦𐑥𐑦𐑡𐑩𐑟 𐑓𐑬𐑯𐑛 𐑦𐑯 𐑸𐑒𐑲𐑝 %s"
+
+#, c-format
+#: ../backend/comics/comics-document.c:718
+msgid "There was an error deleting “%s”."
+msgstr "𐑞𐑺 𐑢𐑪𐑟 𐑩𐑯 𐑻𐑼 𐑛𐑦𐑤𐑰𐑑𐑦𐑙 “%s”."
+
+#, c-format
+#: ../backend/comics/comics-document.c:850
+msgid "Error %s"
+msgstr "𐑻𐑼 %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "𐑒𐑪𐑥𐑦𐑒 𐑚𐑫𐑒𐑕"
+
+#, fuzzy
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑣𐑨𐑟 𐑦𐑯𐑒𐑩𐑮𐑧𐑒𐑑 𐑓𐑹𐑥𐑨𐑑"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"𐑞 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑦𐑟 𐑒𐑩𐑥𐑐𐑴𐑟𐑛 𐑝 𐑕𐑧𐑝𐑼𐑩𐑤 𐑓𐑲𐑤𐑟. 𐑢𐑳𐑯 𐑹 𐑥𐑹 𐑝 𐑞𐑰𐑟 𐑓𐑲𐑤𐑟 𐑒𐑨𐑯𐑪𐑑 𐑚𐑰 𐑨𐑒𐑕𐑧𐑕𐑑."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑𐑕"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑣𐑨𐑟 𐑦𐑯𐑒𐑩𐑮𐑧𐑒𐑑 𐑓𐑹𐑥𐑨𐑑"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑𐑕"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr "𐑞𐑦𐑕 𐑢𐑻𐑒 𐑦𐑟 𐑦𐑯 𐑞 𐑐𐑳𐑚𐑤𐑦𐑒 𐑛𐑴𐑥𐑱𐑯"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "𐑘𐑧𐑕"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "𐑯𐑴"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "𐑑𐑲𐑐 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "𐑑𐑲𐑐 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "𐑑𐑲𐑐 3"
+
+#, fuzzy
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "𐑑𐑲𐑐 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "𐑑𐑲𐑐 1C (CID)"
+
+#, fuzzy
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "TrueType (𐑕𐑦𐑛)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "𐑳𐑯𐑴𐑯 𐑓𐑪𐑯𐑑 𐑑𐑲𐑐"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "𐑯𐑴 𐑯𐑱𐑥"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "𐑧𐑥𐑚𐑧𐑛𐑦𐑛 𐑕𐑩𐑚𐑕𐑧𐑑"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "𐑧𐑥𐑚𐑧𐑛𐑦𐑛"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "𐑯𐑪𐑑 𐑧𐑥𐑚𐑧𐑛𐑦𐑛"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑𐑕"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "𐑦𐑯𐑝𐑨𐑤𐑦𐑛 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "𐑦𐑥𐑐𐑮𐑧𐑕 𐑕𐑤𐑲𐑛𐑟"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "𐑯𐑴 𐑻𐑼"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "𐑯𐑪𐑑 𐑦𐑯𐑳𐑓 𐑥𐑧𐑥𐑼𐑦"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "𐑒𐑨𐑯𐑪𐑑 𐑓𐑲𐑯𐑛 𐑟𐑦𐑐 𐑕𐑦𐑜𐑯𐑩𐑗𐑼"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "𐑦𐑯𐑝𐑨𐑤𐑦𐑛 𐑟𐑦𐑐 𐑓𐑲𐑤"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "𐑥𐑩𐑤𐑑𐑰 𐑓𐑲𐑤 𐑟𐑦𐑐𐑕 𐑸 𐑯𐑪𐑑 𐑕𐑩𐑐𐑹𐑑𐑩𐑛"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "𐑒𐑨𐑯𐑪𐑑 𐑴𐑐𐑩𐑯 𐑞 𐑓𐑲𐑤"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "𐑒𐑨𐑯𐑪𐑑 𐑮𐑰𐑛 𐑛𐑱𐑑𐑩 𐑓𐑮𐑪𐑥 𐑓𐑲𐑤"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "𐑒𐑨𐑯𐑪𐑑 𐑓𐑲𐑯𐑛 𐑓𐑲𐑤 𐑦𐑯 𐑞 𐑟𐑦𐑐 𐑸𐑒𐑲𐑝"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "𐑳𐑯𐑴𐑯 𐑻𐑼"
+
+#, c-format
+#: ../backend/ps/ev-spectre.c:102
+msgid "Failed to load document “%s”"
+msgstr "𐑓𐑱𐑤𐑛 𐑑 𐑤𐑴𐑛 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 “%s”"
+
+#, c-format
+#: ../backend/ps/ev-spectre.c:135
+msgid "Failed to save document “%s”"
+msgstr "𐑓𐑱𐑤𐑛 𐑑 𐑕𐑱𐑝 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "𐑐𐑴𐑕𐑑𐑕𐑒𐑮𐑦𐑐𐑑 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑𐑕"
+
+#, c-format
+#, fuzzy
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "𐑒𐑫𐑛𐑯𐑑 𐑕𐑱𐑝 𐑩𐑑𐑨𐑗𐑥𐑩𐑯𐑑 “%s”: %s"
+
+#, c-format
+#, fuzzy
+#: ../libdocument/ev-attachment.c:372
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "𐑒𐑫𐑛𐑯𐑑 𐑴𐑐𐑩𐑯 𐑩𐑑𐑨𐑗𐑥𐑩𐑯𐑑 “%s”: %s"
+
+#, c-format
+#, fuzzy
+#: ../libdocument/ev-attachment.c:407
+msgid "Couldn't open attachment “%s”"
+msgstr "𐑒𐑫𐑛𐑯𐑑 𐑴𐑐𐑩𐑯 𐑩𐑑𐑨𐑗𐑥𐑩𐑯𐑑 “%s”"
+
+#, c-format
+#: ../libdocument/ev-document-factory.c:168
+msgid "File type %s (%s) is not supported"
+msgstr "𐑓𐑲𐑤 𐑑𐑲𐑐 %s (%s) 𐑦𐑟 𐑯𐑪𐑑 𐑕𐑩𐑐𐑹𐑑𐑩𐑛"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "𐑷𐑤 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑𐑕"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "𐑷𐑤 𐑓𐑲𐑤𐑟"
+
+#, c-format
+#: ../libdocument/ev-file-helpers.c:146
+msgid "Failed to create a temporary file: %s"
+msgstr "𐑓𐑱𐑤𐑛 𐑑 𐑒𐑮𐑦𐑱𐑑 𐑩 𐑑𐑧𐑥𐑐𐑼𐑼𐑦 𐑓𐑲𐑤: %s"
+
+#, c-format
+#: ../libdocument/ev-file-helpers.c:308
+msgid "Failed to create a temporary directory: %s"
+msgstr "𐑓𐑱𐑤𐑛 𐑑 𐑒𐑮𐑦𐑱𐑑 𐑩 𐑑𐑧𐑥𐑐𐑼𐑼𐑦 𐑛𐑲𐑮𐑧𐑒𐑑𐑼𐑦: %s"
+
+#, c-format
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+msgid "File is not a valid .desktop file"
+msgstr "𐑓𐑲𐑤 𐑦𐑟 𐑯𐑪𐑑 𐑩 𐑝𐑨𐑤𐑦𐑛 .𐑛𐑧𐑕𐑒𐑑𐑪𐑐 𐑓𐑲𐑤"
+
+#, c-format
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "𐑩𐑯𐑮𐑧𐑒𐑩𐑜𐑯𐑲𐑟𐑛 𐑛𐑧𐑕𐑒𐑑𐑪𐑐 𐑓𐑲𐑤 𐑝𐑻𐑠𐑩𐑯 '%s'"
+
+#, c-format
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+msgid "Starting %s"
+msgstr "𐑕𐑑𐑸𐑑𐑦𐑙 %s"
+
+#, c-format
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+msgid "Application does not accept documents on command line"
+msgstr "𐑩𐑐𐑤𐑦𐑒𐑱𐑕𐑩𐑯 𐑛𐑳𐑟 𐑯𐑪𐑑 𐑨𐑒𐑕𐑧𐑐𐑑 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑𐑕 𐑪𐑯 𐑒𐑩𐑥𐑭𐑯𐑛 𐑤𐑲𐑯"
+
+#, c-format
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+msgid "Unrecognized launch option: %d"
+msgstr "𐑩𐑯𐑮𐑧𐑒𐑩𐑜𐑯𐑲𐑟𐑛 𐑤𐑷𐑯𐑗 𐑪𐑐𐑖𐑩𐑯: %d"
+
+#, c-format
+#, fuzzy
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "𐑒𐑭𐑯𐑑 𐑐𐑭𐑕 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 URIs 𐑑 𐑩 '𐑑𐑲𐑐=𐑤𐑦𐑙𐑒' 𐑛𐑧𐑕𐑒𐑑𐑪𐑐 𐑧𐑯𐑑𐑮𐑦"
+
+#, c-format
+#, fuzzy
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+msgid "Not a launchable item"
+msgstr "𐑯𐑪𐑑 𐑩 launchable 𐑲𐑑𐑩𐑥"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "𐑛𐑦𐑕𐑱𐑚𐑩𐑤 𐑒𐑩𐑯𐑧𐑒𐑖𐑩𐑯 𐑑 𐑕𐑧𐑖𐑩𐑯 𐑥𐑨𐑯𐑩𐑡𐑼"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "𐑕𐑐𐑧𐑕𐑦𐑓𐑲 𐑓𐑲𐑤 𐑒𐑩𐑯𐑑𐑱𐑯𐑦𐑙 𐑕𐑱𐑝𐑛 𐑒𐑩𐑯𐑓𐑦𐑜𐑘𐑼𐑱𐑖𐑩𐑯"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "𐑓𐑲𐑤"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "𐑕𐑐𐑧𐑕𐑦𐑓𐑲 𐑕𐑧𐑖𐑩𐑯 𐑥𐑨𐑯𐑩𐑡𐑥𐑩𐑯𐑑 ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "𐑕𐑧𐑖𐑩𐑯 𐑥𐑨𐑯𐑩𐑡𐑥𐑩𐑯𐑑 𐑪𐑐𐑖𐑩𐑯𐑟:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "𐑖𐑴 𐑕𐑧𐑖𐑩𐑯 𐑥𐑨𐑯𐑩𐑡𐑥𐑩𐑯𐑑 𐑪𐑐𐑖𐑩𐑯𐑟"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#, c-format
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:944
+msgid "Show “_%s”"
+msgstr "𐑖𐑴 “%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1412
+msgid "_Move on Toolbar"
+msgstr "_𐑥𐑵𐑝 𐑪𐑯 𐑑𐑵𐑤𐑚𐑸"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1413
+msgid "Move the selected item on the toolbar"
+msgstr "𐑥𐑵𐑝 𐑞 𐑕𐑩𐑤𐑧𐑒𐑑𐑩𐑛 𐑲𐑑𐑩𐑥 𐑪𐑯 𐑞 𐑑𐑵𐑤𐑚𐑸"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Remove from Toolbar"
+msgstr "_𐑮𐑦𐑥𐑵𐑝 𐑓𐑮𐑪𐑥 𐑑𐑵𐑤𐑚𐑸"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Remove the selected item from the toolbar"
+msgstr "𐑮𐑦𐑥𐑵𐑝 𐑞 𐑕𐑩𐑤𐑧𐑒𐑑𐑩𐑛 𐑲𐑑𐑩𐑥 𐑓𐑮𐑪𐑥 𐑞 𐑑𐑵𐑤𐑚𐑸"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Delete Toolbar"
+msgstr "_𐑛𐑦𐑤𐑰𐑑 𐑑𐑵𐑤𐑚𐑸"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected toolbar"
+msgstr "𐑮𐑦𐑥𐑵𐑝 𐑞 𐑕𐑩𐑤𐑧𐑒𐑑𐑩𐑛 𐑑𐑵𐑤𐑚𐑸"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "𐑕𐑧𐑐𐑼𐑱𐑑𐑼"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+msgid "Running in presentation mode"
+msgstr "𐑮𐑳𐑯𐑦𐑙 𐑦𐑯 𐑐𐑮𐑧𐑟𐑩𐑯𐑑𐑱𐑖𐑩𐑯 𐑥𐑴𐑛"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5380
+msgid "Best Fit"
+msgstr "𐑚𐑧𐑕𐑑 𐑓𐑦𐑑"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "𐑓𐑦𐑑 𐑐𐑱𐑡 𐑢𐑦𐑛𐑔"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#, c-format
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4232
+#: ../shell/ev-window-title.c:149 ../shell/main.c:318
+msgid "Document Viewer"
+msgstr "𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑝𐑿𐑼"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "𐑝𐑿 𐑥𐑩𐑤𐑑𐑰-𐑐𐑱𐑡 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑𐑕"
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "𐑛𐑦𐑤𐑰𐑑 𐑞 𐑑𐑧𐑥𐑐𐑼𐑼𐑦 𐑓𐑲𐑤"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "𐑐𐑮𐑦𐑯𐑑 𐑕𐑧𐑑𐑦𐑙𐑟 𐑓𐑲𐑤"
+
+#, fuzzy
+#: ../previewer/ev-previewer.c:147 ../previewer/ev-previewer.c:181
+msgid "MATE Document Previewer"
+msgstr "·𐑜𐑯𐑴𐑥 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 Previewer"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3020
+msgid "Failed to print document"
+msgstr "𐑓𐑱𐑤𐑛 𐑑 𐑐𐑮𐑦𐑯𐑑 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#, c-format
+#: ../previewer/ev-previewer-window.c:237
+msgid "The selected printer '%s' could not be found"
+msgstr "𐑞 𐑕𐑩𐑤𐑧𐑒𐑑𐑩𐑛 𐑐𐑮𐑦𐑯𐑑𐑼 '%s' 𐑒𐑫𐑛 𐑯𐑪𐑑 𐑚𐑰 𐑓𐑬𐑯𐑛"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5129
+msgid "_Previous Page"
+msgstr "_𐑐𐑮𐑰𐑝𐑦𐑩𐑕 𐑐𐑱𐑡"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5130
+msgid "Go to the previous page"
+msgstr "𐑜𐑴 𐑑 𐑞 𐑐𐑮𐑰𐑝𐑦𐑩𐑕 𐑐𐑱𐑡"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5132
+msgid "_Next Page"
+msgstr "_𐑯𐑧𐑒𐑕𐑑 𐑐𐑱𐑡"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5133
+msgid "Go to the next page"
+msgstr "𐑜𐑴 𐑑 𐑞 𐑯𐑧𐑒𐑕𐑑 𐑐𐑱𐑡"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5116
+msgid "Enlarge the document"
+msgstr "𐑧𐑯𐑤𐑸𐑡 𐑞 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5119
+msgid "Shrink the document"
+msgstr "𐑖𐑮𐑰𐑙𐑒 𐑞 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "𐑐𐑮𐑦𐑯𐑑"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5087
+msgid "Print this document"
+msgstr "𐑐𐑮𐑦𐑯𐑑 𐑞𐑦𐑕 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5231
+msgid "_Best Fit"
+msgstr "_𐑚𐑧𐑕𐑑 𐑓𐑦𐑑"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5232
+msgid "Make the current document fill the window"
+msgstr "𐑥𐑱𐑒 𐑞 𐑒𐑳𐑮𐑩𐑯𐑑 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑓𐑦𐑤 𐑞 𐑢𐑦𐑯𐑛𐑴"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5234
+msgid "Fit Page _Width"
+msgstr "𐑓𐑦𐑑 𐑐𐑱𐑡 _𐑢𐑦𐑛𐑔"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5235
+msgid "Make the current document fill the window width"
+msgstr "𐑥𐑱𐑒 𐑞 𐑒𐑳𐑮𐑩𐑯𐑑 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑓𐑦𐑤 𐑞 𐑢𐑦𐑯𐑛𐑴 𐑢𐑦𐑛𐑔"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5302
+msgid "Page"
+msgstr "𐑐𐑱𐑡"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5303
+msgid "Select Page"
+msgstr "𐑕𐑩𐑤𐑧𐑒𐑑 𐑐𐑱𐑡"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "𐑑𐑲𐑑𐑩𐑤:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "𐑤𐑴𐑒𐑱𐑖𐑩𐑯:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "𐑕𐑩𐑚𐑡𐑧𐑒𐑑:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "𐑷𐑔𐑼:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "𐑒𐑰𐑢𐑻𐑛𐑟:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "𐑐𐑮𐑩𐑛𐑿𐑕𐑼:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "𐑒𐑮𐑦𐑱𐑑𐑼:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "𐑒𐑮𐑦𐑱𐑑𐑩𐑛:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "𐑥𐑪𐑛𐑦𐑓𐑲𐑛:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "𐑯𐑳𐑥𐑚𐑼 𐑝 𐑐𐑱𐑡𐑧𐑟:"
+
+#, fuzzy
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimized:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "𐑓𐑹𐑥𐑨𐑑:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "𐑕𐑦𐑒𐑘𐑫𐑼𐑦𐑑𐑦:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "𐑐𐑱𐑐𐑼 𐑕𐑲𐑟:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "𐑯𐑳𐑯"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "default:mm"
+
+#, c-format
+#: ../properties/ev-properties-view.c:284
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#, c-format
+#: ../properties/ev-properties-view.c:288
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f 𐑦𐑯𐑗"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#, c-format
+#: ../properties/ev-properties-view.c:312
+msgid "%s, Portrait (%s)"
+msgstr "%s, 𐑐𐑪𐑮𐑑𐑮𐑩𐑑 (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#, c-format
+#: ../properties/ev-properties-view.c:319
+msgid "%s, Landscape (%s)"
+msgstr "%s, 𐑤𐑨𐑯𐑛𐑕𐑒𐑨𐑐 (%s)"
+
+#, c-format
+#: ../libmisc/ev-page-action-widget.c:68
+msgid "(%d of %d)"
+msgstr "(%d 𐑝 %d)"
+
+#, c-format
+#: ../libmisc/ev-page-action-widget.c:70
+msgid "of %d"
+msgstr "𐑝 %d"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "𐑐𐑮𐑰𐑐𐑺𐑦𐑙 𐑑 𐑐𐑮𐑦𐑯𐑑…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "𐑓𐑦𐑯𐑦𐑖𐑦𐑙…"
+
+#, c-format
+#: ../libview/ev-print-operation.c:338
+msgid "Printing page %d of %d…"
+msgstr "𐑐𐑮𐑦𐑯𐑑𐑦𐑙 𐑐𐑱𐑡 %d 𐑝 %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "𐑐𐑮𐑦𐑯𐑑𐑦𐑙 𐑦𐑟 𐑯𐑪𐑑 𐑕𐑩𐑐𐑹𐑑𐑩𐑛 𐑪𐑯 𐑞𐑦𐑕 𐑐𐑮𐑦𐑯𐑑𐑼."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "𐑦𐑯𐑝𐑨𐑤𐑦𐑛 𐑐𐑱𐑡 𐑕𐑦𐑤𐑧𐑒𐑖𐑩𐑯"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "𐑢𐑹𐑯𐑦𐑙"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "𐑿𐑼 𐑐𐑮𐑦𐑯𐑑 𐑮𐑱𐑯𐑡 𐑕𐑦𐑤𐑧𐑒𐑖𐑩𐑯 𐑛𐑳𐑟 𐑯𐑪𐑑 𐑦𐑯𐑒𐑤𐑵𐑛 𐑧𐑯𐑦 𐑐𐑱𐑡𐑧𐑟"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "𐑐𐑱𐑡 𐑕𐑒𐑱𐑤𐑦𐑙:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "𐑖𐑮𐑰𐑙𐑒 𐑑 𐑐𐑮𐑦𐑯𐑑𐑩𐑚𐑩𐑤 𐑺𐑦𐑩"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "𐑓𐑦𐑑 𐑑 𐑐𐑮𐑦𐑯𐑑𐑩𐑚𐑩𐑤 𐑺𐑦𐑩"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of the "
+"following:\n\n• \"None\": No page scaling is performed.\n\n• \"Shrink to "
+"Printable Area\": Document pages larger than the printable area are reduced "
+"to fit the printable area of the printer page.\n\n• \"Fit to Printable "
+"Area\": Document pages are enlarged or reduced as required to fit the "
+"printable area of the printer page.\n"
+msgstr ""
+"𐑕𐑒𐑱𐑤 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑐𐑱𐑡𐑧𐑟 𐑑 𐑓𐑦𐑑 𐑞 𐑕𐑩𐑤𐑧𐑒𐑑𐑩𐑛 𐑐𐑮𐑦𐑯𐑑𐑼 𐑐𐑱𐑡. 𐑕𐑩𐑤𐑧𐑒𐑑 𐑓𐑮𐑪𐑥 𐑢𐑳𐑯 𐑝 𐑞 "
+"𐑓𐑪𐑤𐑴𐑦𐑙:\n\n• \"𐑯𐑳𐑯\": 𐑯𐑴 𐑐𐑱𐑡 𐑕𐑒𐑱𐑤𐑦𐑙 𐑦𐑟 𐑐𐑼𐑓𐑹𐑥𐑛.\n\n• \"𐑖𐑮𐑰𐑙𐑒 𐑑 𐑐𐑮𐑦𐑯𐑑𐑩𐑚𐑩𐑤 "
+"𐑺𐑦𐑩\": 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑐𐑱𐑡𐑧𐑟 𐑤𐑸𐑡𐑼 𐑞𐑨𐑯 𐑞 𐑐𐑮𐑦𐑯𐑑𐑩𐑚𐑩𐑤 𐑺𐑦𐑩 𐑸 𐑮𐑦𐑛𐑿𐑕𐑑 𐑑 𐑓𐑦𐑑 𐑞 𐑐𐑮𐑦𐑯𐑑𐑩𐑚𐑩𐑤 𐑺𐑦𐑩 "
+"𐑝 𐑞 𐑐𐑮𐑦𐑯𐑑𐑼 𐑐𐑱𐑡.\n\n• \"𐑓𐑦𐑑 𐑑 𐑐𐑮𐑦𐑯𐑑𐑩𐑚𐑩𐑤 𐑺𐑦𐑩\": 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑐𐑱𐑡𐑧𐑟 𐑸 𐑧𐑯𐑤𐑭𐑮𐑡𐑛 𐑹 "
+"𐑮𐑦𐑛𐑿𐑕𐑑 𐑨𐑟 𐑮𐑦𐑒𐑢𐑲𐑼𐑛 𐑑 𐑓𐑦𐑑 𐑞 𐑐𐑮𐑦𐑯𐑑𐑩𐑚𐑩𐑤 𐑺𐑦𐑩 𐑝 𐑞 𐑐𐑮𐑦𐑯𐑑𐑼 𐑐𐑱𐑡.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "𐑷𐑑𐑴 𐑮𐑴𐑑𐑱𐑑 𐑯 𐑕𐑧𐑯𐑑𐑼"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"𐑮𐑴𐑑𐑱𐑑 𐑐𐑮𐑦𐑯𐑑𐑼 𐑐𐑱𐑡 𐑪𐑮𐑦𐑩𐑯𐑑𐑱𐑖𐑩𐑯 𐑝 𐑰𐑗 𐑐𐑱𐑡 𐑑 𐑥𐑨𐑗 𐑪𐑮𐑦𐑩𐑯𐑑𐑱𐑖𐑩𐑯 𐑝 𐑰𐑗 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑐𐑱𐑡. "
+"𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑐𐑱𐑡𐑧𐑟 𐑢𐑦𐑤 𐑚𐑰 𐑕𐑧𐑯𐑑𐑼𐑛 𐑢𐑦𐑞𐑦𐑯 𐑞 𐑐𐑮𐑦𐑯𐑑𐑼 𐑐𐑱𐑡."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "𐑕𐑩𐑤𐑧𐑒𐑑 𐑐𐑱𐑡 𐑕𐑲𐑟 𐑿𐑟𐑦𐑙 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑐𐑱𐑡 𐑕𐑲𐑟"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"𐑢𐑧𐑯 𐑦𐑯𐑱𐑚𐑩𐑤𐑛, 𐑰𐑗 𐑐𐑱𐑡 𐑢𐑦𐑤 𐑚𐑰 𐑐𐑮𐑦𐑯𐑑𐑩𐑛 𐑪𐑯 𐑞 𐑕𐑱𐑥 𐑕𐑲𐑟 𐑐𐑱𐑐𐑼 𐑨𐑟 𐑞 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑐𐑱𐑡."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "𐑐𐑱𐑡 𐑣𐑨𐑯𐑛𐑤𐑦𐑙"
+
+#, c-format
+#: ../libview/ev-jobs.c:1438
+msgid "Failed to print page %d: %s"
+msgstr "𐑓𐑱𐑤𐑛 𐑑 𐑐𐑮𐑦𐑯𐑑 𐑐𐑱𐑡 %d: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "𐑕𐑒𐑮𐑴𐑤 𐑳𐑐"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "𐑕𐑒𐑮𐑴𐑤 𐑛𐑬𐑯"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "𐑕𐑒𐑮𐑴𐑤 𐑝𐑿 𐑳𐑐"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "𐑕𐑒𐑮𐑴𐑤 𐑝𐑿 𐑛𐑬𐑯"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑝𐑿"
+
+#: ../libview/ev-view-presentation.c:674
+msgid "Jump to page:"
+msgstr "𐑡𐑳𐑥𐑐 𐑑 𐑐𐑱𐑡:"
+
+#: ../libview/ev-view-presentation.c:970
+msgid "End of presentation. Click to exit."
+msgstr "𐑧𐑯𐑛 𐑝 𐑐𐑮𐑧𐑟𐑩𐑯𐑑𐑱𐑖𐑩𐑯. 𐑒𐑤𐑦𐑒 𐑑 𐑧𐑜𐑟𐑦𐑑."
+
+#: ../libview/ev-view.c:1758
+msgid "Go to first page"
+msgstr "𐑜𐑴 𐑑 𐑓𐑻𐑕𐑑 𐑐𐑱𐑡"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to previous page"
+msgstr "𐑜𐑴 𐑑 𐑐𐑮𐑰𐑝𐑦𐑩𐑕 𐑐𐑱𐑡"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to next page"
+msgstr "𐑜𐑴 𐑑 𐑯𐑧𐑒𐑕𐑑 𐑐𐑱𐑡"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to last page"
+msgstr "𐑜𐑴 𐑑 𐑤𐑭𐑕𐑑 𐑐𐑱𐑡"
+
+#: ../libview/ev-view.c:1766
+msgid "Go to page"
+msgstr "𐑜𐑴 𐑑 𐑐𐑱𐑡"
+
+#: ../libview/ev-view.c:1768
+msgid "Find"
+msgstr "𐑓𐑲𐑯𐑛"
+
+#, c-format
+#: ../libview/ev-view.c:1796
+msgid "Go to page %s"
+msgstr "𐑜𐑴 𐑑 𐑐𐑱𐑡 %s"
+
+#, c-format
+#: ../libview/ev-view.c:1802
+msgid "Go to %s on file “%s”"
+msgstr "𐑜𐑴 𐑑 %s 𐑪𐑯 𐑓𐑲𐑤 “%s”"
+
+#, c-format
+#: ../libview/ev-view.c:1805
+msgid "Go to file “%s”"
+msgstr "𐑜𐑴 𐑑 𐑓𐑲𐑤 “%s”"
+
+#, c-format
+#: ../libview/ev-view.c:1813
+msgid "Launch %s"
+msgstr "𐑤𐑷𐑯𐑗 %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "𐑓𐑲𐑯𐑛:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5104
+msgid "Find Pre_vious"
+msgstr "𐑓𐑲𐑯𐑛 _𐑐𐑮𐑰𐑝𐑦𐑩𐑕"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "𐑓𐑲𐑯𐑛 𐑐𐑮𐑰𐑝𐑦𐑩𐑕 𐑪𐑒𐑻𐑩𐑯𐑕 𐑝 𐑞 𐑕𐑻𐑗 𐑕𐑑𐑮𐑦𐑙"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5102
+msgid "Find Ne_xt"
+msgstr "𐑓𐑲𐑯𐑛 _𐑯𐑧𐑒𐑕𐑑"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "𐑓𐑲𐑯𐑛 𐑯𐑧𐑒𐑕𐑑 𐑪𐑒𐑻𐑩𐑯𐑕 𐑝 𐑞 𐑕𐑻𐑗 𐑕𐑑𐑮𐑦𐑙"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_𐑒𐑱𐑕 𐑕𐑧𐑯𐑕𐑦𐑑𐑦𐑝"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "𐑑𐑪𐑜𐑩𐑤 𐑒𐑱𐑕 𐑕𐑧𐑯𐑕𐑦𐑑𐑦𐑝 𐑕𐑻𐑗"
+
+#, c-format
+#: ../shell/ev-keyring.c:102
+msgid "Password for document %s"
+msgstr "𐑐𐑭𐑕𐑢𐑼𐑛 𐑓𐑹 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 %s"
+
+#, c-format
+#: ../shell/ev-convert-metadata.c:88
+msgid "Converting %s"
+msgstr "𐑒𐑩𐑯𐑝𐑻𐑑𐑦𐑙 %s"
+
+#, c-format
+#: ../shell/ev-convert-metadata.c:92
+msgid "%d of %d documents converted"
+msgstr "%d 𐑝 %d 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑𐑕 𐑒𐑩𐑯𐑝𐑻𐑑𐑩𐑛"
+
+#, fuzzy
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "𐑒𐑩𐑯𐑝𐑻𐑑𐑦𐑙 metadata"
+
+#, fuzzy
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"𐑞 metadata 𐑓𐑹𐑥𐑨𐑑 𐑿𐑕𐑑 𐑚𐑲 𐑦𐑝𐑦𐑯𐑕 𐑣𐑨𐑟 𐑗𐑱𐑯𐑡𐑛, 𐑯 𐑣𐑧𐑯𐑕 𐑦𐑑 𐑯𐑰𐑛𐑟 𐑑 𐑚𐑰 𐑥𐑲𐑜𐑮𐑱𐑑𐑦𐑛. 𐑦𐑓 𐑞 "
+"𐑥𐑲𐑜𐑮𐑱𐑖𐑩𐑯 𐑦𐑟 𐑒𐑨𐑯𐑕𐑩𐑤𐑛 𐑞 metadata 𐑕𐑑𐑹𐑦𐑡 𐑢𐑦𐑤 𐑯𐑪𐑑 𐑢𐑻𐑒."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "𐑴𐑐𐑩𐑯 𐑩 𐑮𐑰𐑕𐑩𐑯𐑑𐑤𐑦 𐑿𐑕𐑑 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct password."
+msgstr "𐑞𐑦𐑕 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑦𐑟 𐑤𐑪𐑒𐑑 𐑯 𐑒𐑨𐑯 𐑴𐑯𐑤𐑦 𐑚𐑰 𐑮𐑧𐑛 𐑚𐑲 𐑧𐑯𐑑𐑼𐑦𐑙 𐑞 𐑒𐑼𐑧𐑒𐑑 𐑐𐑭𐑕𐑢𐑼𐑛."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_𐑩𐑯𐑤𐑭𐑒 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "𐑧𐑯𐑑𐑼 𐑐𐑭𐑕𐑢𐑼𐑛"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "𐑐𐑭𐑕𐑢𐑼𐑛 𐑮𐑦𐑒𐑢𐑲𐑼𐑛"
+
+#, c-format
+#: ../shell/ev-password-view.c:305
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "𐑞 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 “%s” 𐑦𐑟 𐑤𐑪𐑒𐑑 𐑯 𐑮𐑦𐑒𐑢𐑲𐑼𐑟 𐑩 𐑐𐑭𐑕𐑢𐑼𐑛 𐑚𐑦𐑓𐑹 𐑦𐑑 𐑒𐑨𐑯 𐑚𐑰 𐑴𐑐𐑩𐑯𐑛."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_𐑐𐑭𐑕𐑢𐑼𐑛:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "𐑓𐑼𐑜𐑧𐑑 𐑐𐑭𐑕𐑢𐑼𐑛 _𐑦𐑥𐑰𐑛𐑾𐑑𐑤𐑰"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "𐑮𐑦𐑥𐑧𐑥𐑚𐑼 𐑐𐑭𐑕𐑢𐑼𐑛 𐑳𐑯𐑑𐑦𐑤 𐑿 _𐑤𐑪𐑜 𐑬𐑑"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "𐑮𐑦𐑥𐑧𐑥𐑚𐑼 _𐑓𐑹𐑧𐑝𐑼"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "𐑐𐑮𐑪𐑐𐑼𐑑𐑦𐑟"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "𐑡𐑧𐑯𐑼𐑩𐑤"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "𐑓𐑪𐑯𐑑𐑕"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑤𐑲𐑕𐑩𐑯𐑕"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "𐑓𐑪𐑯𐑑"
+
+#, c-format
+#: ../shell/ev-properties-fonts.c:162
+msgid "Gathering font information… %3d%%"
+msgstr "𐑜𐑨𐑞𐑼𐑦𐑙 𐑓𐑪𐑯𐑑 𐑦𐑯𐑓𐑼𐑥𐑱𐑖𐑩𐑯… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "𐑿𐑕𐑦𐑡 𐑑𐑻𐑥𐑟"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "𐑑𐑧𐑒𐑕𐑑 𐑤𐑲𐑕𐑩𐑯𐑕"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "𐑓𐑻𐑞𐑼 𐑦𐑯𐑓𐑼𐑥𐑱𐑖𐑩𐑯"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "𐑩𐑑𐑨𐑗𐑥𐑩𐑯𐑑𐑕"
+
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "𐑤𐑴𐑛𐑦𐑙…"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "𐑤𐑱𐑼𐑟"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "𐑐𐑮𐑦𐑯𐑑…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "𐑦𐑯𐑛𐑧𐑒𐑕"
+
+#, fuzzy
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Thumbnails"
+
+#, c-format
+#: ../shell/ev-window.c:840
+msgid "Page %s — %s"
+msgstr "𐑐𐑱𐑡 %s — %s"
+
+#, c-format
+#: ../shell/ev-window.c:842
+msgid "Page %s"
+msgstr "𐑐𐑱𐑡 %s"
+
+#: ../shell/ev-window.c:1300
+msgid "The document contains no pages"
+msgstr "𐑞 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑒𐑩𐑯𐑑𐑱𐑯𐑟 𐑯𐑴 𐑐𐑱𐑡𐑧𐑟"
+
+#: ../shell/ev-window.c:1303
+msgid "The document contains only empty pages"
+msgstr "𐑞 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑒𐑩𐑯𐑑𐑱𐑯𐑟 𐑴𐑯𐑤𐑦 𐑧𐑥𐑐𐑑𐑦 𐑐𐑱𐑡𐑧𐑟"
+
+#: ../shell/ev-window.c:1497 ../shell/ev-window.c:1663
+msgid "Unable to open document"
+msgstr "𐑳𐑯𐑱𐑚𐑩𐑤 𐑑 𐑴𐑐𐑩𐑯 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#, c-format
+#: ../shell/ev-window.c:1634
+msgid "Loading document from “%s”"
+msgstr "𐑤𐑴𐑛𐑦𐑙 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑓𐑮𐑪𐑥 “%s”"
+
+#, c-format
+#: ../shell/ev-window.c:1776 ../shell/ev-window.c:2054
+msgid "Downloading document (%d%%)"
+msgstr "𐑛𐑬𐑯𐑤𐑴𐑛𐑦𐑙 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 (%d%%)"
+
+#: ../shell/ev-window.c:1809
+msgid "Failed to load remote file."
+msgstr "𐑓𐑱𐑤𐑛 𐑑 𐑤𐑴𐑛 𐑮𐑦𐑥𐑴𐑑 𐑓𐑲𐑤."
+
+#, c-format
+#, fuzzy
+#: ../shell/ev-window.c:1998
+msgid "Reloading document from %s"
+msgstr "Reloading 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑓𐑮𐑪𐑥 %s"
+
+#: ../shell/ev-window.c:2030
+msgid "Failed to reload document."
+msgstr "𐑓𐑱𐑤𐑛 𐑑 𐑮𐑰𐑤𐑴𐑛 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑."
+
+#: ../shell/ev-window.c:2185
+msgid "Open Document"
+msgstr "𐑴𐑐𐑩𐑯 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#, c-format
+#: ../shell/ev-window.c:2483
+msgid "Saving document to %s"
+msgstr "𐑕𐑱𐑝𐑦𐑙 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑑 %s"
+
+#, c-format
+#: ../shell/ev-window.c:2486
+msgid "Saving attachment to %s"
+msgstr "𐑕𐑱𐑝𐑦𐑙 𐑩𐑑𐑨𐑗𐑥𐑩𐑯𐑑 𐑑 %s"
+
+#, c-format
+#: ../shell/ev-window.c:2489
+msgid "Saving image to %s"
+msgstr "𐑕𐑱𐑝𐑦𐑙 𐑦𐑥𐑦𐑡 𐑑 %s"
+
+#, c-format
+#: ../shell/ev-window.c:2533 ../shell/ev-window.c:2633
+msgid "The file could not be saved as “%s”."
+msgstr "𐑞 𐑓𐑲𐑤 𐑒𐑫𐑛 𐑯𐑪𐑑 𐑚𐑰 𐑕𐑱𐑝𐑛 𐑨𐑟 “%s”."
+
+#, c-format
+#: ../shell/ev-window.c:2564
+msgid "Uploading document (%d%%)"
+msgstr "𐑳𐑐𐑤𐑴𐑛𐑦𐑙 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 (%d%%)"
+
+#, c-format
+#: ../shell/ev-window.c:2568
+msgid "Uploading attachment (%d%%)"
+msgstr "𐑳𐑐𐑤𐑴𐑛𐑦𐑙 𐑩𐑑𐑨𐑗𐑥𐑩𐑯𐑑 (%d%%)"
+
+#, c-format
+#: ../shell/ev-window.c:2572
+msgid "Uploading image (%d%%)"
+msgstr "𐑳𐑐𐑤𐑴𐑛𐑦𐑙 𐑦𐑥𐑦𐑡 (%d%%)"
+
+#: ../shell/ev-window.c:2696
+msgid "Save a Copy"
+msgstr "𐑕𐑱𐑝 𐑩 𐑒𐑪𐑐𐑦"
+
+#, c-format
+#: ../shell/ev-window.c:2964
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d 𐑐𐑧𐑯𐑛𐑦𐑙 𐑡𐑪𐑚 𐑦𐑯 𐑒𐑿"
+msgstr[1] "%d 𐑐𐑧𐑯𐑛𐑦𐑙 𐑡𐑪𐑚𐑟 𐑦𐑯 𐑒𐑿"
+
+#, c-format
+#: ../shell/ev-window.c:3077
+msgid "Printing job “%s”"
+msgstr "𐑐𐑮𐑦𐑯𐑑𐑦𐑙 𐑡𐑪𐑚 “%s”"
+
+#, c-format
+#: ../shell/ev-window.c:3289
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "𐑢𐑱𐑑 𐑳𐑯𐑑𐑦𐑤 𐑐𐑮𐑦𐑯𐑑 𐑡𐑪𐑚 “%s” 𐑓𐑦𐑯𐑦𐑖𐑩𐑟 𐑚𐑦𐑓𐑹 𐑒𐑤𐑴𐑟𐑦𐑙?"
+
+#, c-format
+#: ../shell/ev-window.c:3292
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "𐑞𐑺 𐑸 %d 𐑐𐑮𐑦𐑯𐑑 𐑡𐑪𐑚𐑟 𐑨𐑒𐑑𐑦𐑝. 𐑢𐑱𐑑 𐑳𐑯𐑑𐑦𐑤 𐑐𐑮𐑦𐑯𐑑 𐑓𐑦𐑯𐑦𐑖𐑩𐑟 𐑚𐑦𐑓𐑹 𐑒𐑤𐑴𐑟𐑦𐑙?"
+
+#: ../shell/ev-window.c:3304
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "𐑦𐑓 𐑿 𐑒𐑤𐑴𐑟 𐑞 𐑢𐑦𐑯𐑛𐑴, 𐑐𐑧𐑯𐑛𐑦𐑙 𐑐𐑮𐑦𐑯𐑑 𐑡𐑪𐑚𐑟 𐑢𐑦𐑤 𐑯𐑪𐑑 𐑚𐑰 𐑐𐑮𐑦𐑯𐑑𐑩𐑛."
+
+#: ../shell/ev-window.c:3308
+msgid "Cancel _print and Close"
+msgstr "𐑒𐑨𐑯𐑕𐑩𐑤 _𐑐𐑮𐑦𐑯𐑑 𐑯 𐑒𐑤𐑴𐑕"
+
+#: ../shell/ev-window.c:3312
+msgid "Close _after Printing"
+msgstr "𐑒𐑤𐑴𐑟 _𐑭𐑓𐑑𐑼 𐑐𐑮𐑦𐑯𐑑𐑦𐑙"
+
+#: ../shell/ev-window.c:3878
+msgid "Toolbar Editor"
+msgstr "𐑑𐑵𐑤𐑚𐑸 𐑧𐑛𐑦𐑑𐑹"
+
+#: ../shell/ev-window.c:4017
+msgid "There was an error displaying help"
+msgstr "𐑞𐑺 𐑢𐑪𐑟 𐑩𐑯 𐑻𐑼 𐑛𐑦𐑕𐑐𐑤𐑱𐑦𐑙 𐑣𐑧𐑤𐑐"
+
+#, c-format
+#, fuzzy
+#: ../shell/ev-window.c:4228
+msgid "Document Viewer\nUsing %s (%s)"
+msgstr "𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑝𐑿𐑼\n𐑿𐑟𐑦𐑙 %s (%s)"
+
+#: ../shell/ev-window.c:4259
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"·𐑦𐑝𐑦𐑯𐑕 𐑦𐑟 𐑓𐑮𐑰 𐑕𐑪𐑓𐑑𐑢𐑺; 𐑿 𐑒𐑨𐑯 𐑮𐑰𐑛𐑦𐑕𐑑𐑮𐑦𐑚𐑿𐑑 𐑦𐑑 𐑯/𐑹 𐑥𐑪𐑛𐑦𐑓𐑲 𐑦𐑑 𐑳𐑯𐑛𐑼 𐑞 𐑑𐑻𐑥𐑟 𐑝 𐑞 ·𐑜𐑯𐑿 "
+"𐑡𐑧𐑯𐑼𐑩𐑤 𐑐𐑳𐑚𐑤𐑦𐑒 𐑤𐑲𐑕𐑩𐑯𐑕 𐑨𐑟 𐑐𐑳𐑚𐑤𐑦𐑖𐑑 𐑚𐑲 𐑞 𐑓𐑮𐑰 𐑕𐑪𐑓𐑑𐑢𐑺 𐑓𐑬𐑯𐑛𐑱𐑖𐑩𐑯; 𐑲𐑞𐑼 𐑝𐑻𐑠𐑩𐑯 2 𐑝 𐑞 "
+"𐑤𐑲𐑕𐑩𐑯𐑕, 𐑹 (𐑨𐑑 𐑿𐑼 𐑪𐑐𐑖𐑩𐑯) 𐑧𐑯𐑦 𐑤𐑱𐑑𐑼 𐑝𐑻𐑠𐑩𐑯.\n"
+
+#, fuzzy
+#: ../shell/ev-window.c:4263
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"·𐑦𐑝𐑦𐑯𐑕 𐑦𐑟 𐑛𐑦𐑕𐑑𐑮𐑦𐑚𐑿𐑑𐑩𐑛 𐑦𐑯 𐑞 𐑣𐑴𐑐 𐑞𐑨𐑑 𐑦𐑑 𐑢𐑦𐑤 𐑚𐑰 𐑿𐑕𐑓𐑩𐑤, 𐑚𐑳𐑑 𐑢𐑦𐑞𐑬𐑑 𐑧𐑯𐑦 𐑢𐑪𐑮𐑩𐑯𐑑𐑰; "
+"𐑢𐑦𐑞𐑬𐑑 𐑰𐑝𐑩𐑯 𐑞 𐑦𐑥𐑐𐑤𐑲𐑛 𐑢𐑪𐑮𐑩𐑯𐑑𐑰 𐑝 MERCHANTABILITY 𐑹 𐑓𐑦𐑑𐑯𐑩𐑕 𐑓𐑹 𐑩 𐑐𐑼𐑑𐑦𐑒𐑿𐑤𐑼 𐑐𐑻𐑐𐑩𐑕. "
+"𐑕𐑰 𐑞 ·𐑜𐑯𐑿 𐑡𐑧𐑯𐑼𐑩𐑤 𐑐𐑳𐑚𐑤𐑦𐑒 𐑤𐑲𐑕𐑩𐑯𐑕 𐑓𐑹 𐑥𐑹 𐑛𐑰𐑑𐑱𐑤𐑟.\n"
+
+#: ../shell/ev-window.c:4267
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"𐑿 𐑖𐑫𐑛 𐑣𐑨𐑝 𐑮𐑦𐑕𐑰𐑝𐑛 𐑩 𐑒𐑪𐑐𐑦 𐑝 𐑞 ·𐑜𐑯𐑿 𐑡𐑧𐑯𐑼𐑩𐑤 𐑐𐑳𐑚𐑤𐑦𐑒 𐑤𐑲𐑕𐑩𐑯𐑕 𐑩𐑤𐑪𐑙 𐑢𐑦𐑞 𐑦𐑝𐑦𐑯𐑕; 𐑦𐑓 𐑯𐑪𐑑, "
+"𐑮𐑲𐑑 𐑑 𐑞 𐑓𐑮𐑰 𐑕𐑪𐑓𐑑𐑢𐑺 𐑓𐑬𐑯𐑛𐑱𐑖𐑩𐑯, 𐑦𐑙𐑒., 51 ·𐑓𐑮𐑨𐑙𐑒𐑤𐑦𐑯 𐑕𐑑𐑮𐑰𐑑, 𐑓𐑦𐑓𐑔 𐑓𐑤𐑹, ·𐑚𐑪𐑕𐑑𐑩𐑯, MA "
+"02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4292
+msgid "Evince"
+msgstr "·𐑦𐑝𐑦𐑯𐑕"
+
+#: ../shell/ev-window.c:4295
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 𐑞 ·𐑦𐑝𐑦𐑯𐑕 𐑷𐑔𐑼𐑟"
+
+#: ../shell/ev-window.c:4301
+msgid "translator-credits"
+msgstr "·𐑑𐑪𐑥𐑩𐑕 ·𐑔𐑻𐑥𐑩𐑯"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#, c-format
+#: ../shell/ev-window.c:4575
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d 𐑓𐑬𐑯𐑛 𐑪𐑯 𐑞𐑦𐑕 𐑐𐑱𐑡"
+msgstr[1] "%d 𐑓𐑬𐑯𐑛 𐑪𐑯 𐑞𐑦𐑕 𐑐𐑱𐑡"
+
+#, c-format
+#: ../shell/ev-window.c:4583
+msgid "%3d%% remaining to search"
+msgstr "%3d%% 𐑮𐑦𐑥𐑱𐑯𐑦𐑙 𐑑 𐑕𐑻𐑗"
+
+#: ../shell/ev-window.c:5070
+msgid "_File"
+msgstr "_𐑓𐑲𐑤"
+
+#: ../shell/ev-window.c:5071
+msgid "_Edit"
+msgstr "_𐑧𐑛𐑦𐑑"
+
+#: ../shell/ev-window.c:5072
+msgid "_View"
+msgstr "_𐑝𐑿"
+
+#: ../shell/ev-window.c:5073
+msgid "_Go"
+msgstr "_𐑜𐑴"
+
+#: ../shell/ev-window.c:5074
+msgid "_Help"
+msgstr "_𐑣𐑧𐑤𐑐"
+
+#. File menu
+#: ../shell/ev-window.c:5077 ../shell/ev-window.c:5342
+msgid "_Open…"
+msgstr "_𐑴𐑐𐑩𐑯…"
+
+#: ../shell/ev-window.c:5078 ../shell/ev-window.c:5343
+msgid "Open an existing document"
+msgstr "𐑴𐑐𐑩𐑯 𐑩𐑯 𐑧𐑒𐑟𐑦𐑕𐑑𐑦𐑙 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#: ../shell/ev-window.c:5080
+msgid "Op_en a Copy"
+msgstr "_𐑴𐑐𐑩𐑯 𐑩 𐑒𐑪𐑐𐑦"
+
+#: ../shell/ev-window.c:5081
+msgid "Open a copy of the current document in a new window"
+msgstr "𐑴𐑐𐑩𐑯 𐑩 𐑒𐑪𐑐𐑦 𐑝 𐑞 𐑒𐑳𐑮𐑩𐑯𐑑 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑦𐑯 𐑩 𐑯𐑿 𐑢𐑦𐑯𐑛𐑴"
+
+#: ../shell/ev-window.c:5083
+msgid "_Save a Copy…"
+msgstr "_𐑕𐑱𐑝 𐑩 𐑒𐑪𐑐𐑦…"
+
+#: ../shell/ev-window.c:5084
+msgid "Save a copy of the current document"
+msgstr "𐑕𐑱𐑝 𐑩 𐑒𐑪𐑐𐑦 𐑝 𐑞 𐑒𐑳𐑮𐑩𐑯𐑑 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#: ../shell/ev-window.c:5086
+msgid "_Print…"
+msgstr "_𐑐𐑮𐑦𐑯𐑑…"
+
+#: ../shell/ev-window.c:5089
+msgid "P_roperties"
+msgstr "_𐑐𐑮𐑪𐑐𐑼𐑑𐑦𐑟"
+
+#: ../shell/ev-window.c:5097
+msgid "Select _All"
+msgstr "𐑕𐑩𐑤𐑧𐑒𐑑 _𐑷𐑤"
+
+#: ../shell/ev-window.c:5099
+msgid "_Find…"
+msgstr "_𐑓𐑲𐑯𐑛…"
+
+#: ../shell/ev-window.c:5100
+msgid "Find a word or phrase in the document"
+msgstr "𐑓𐑲𐑯𐑛 𐑩 𐑢𐑻𐑛 𐑹 𐑓𐑮𐑱𐑟 𐑦𐑯 𐑞 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#: ../shell/ev-window.c:5106
+msgid "T_oolbar"
+msgstr "_𐑑𐑵𐑤𐑚𐑸"
+
+#: ../shell/ev-window.c:5108
+msgid "Rotate _Left"
+msgstr "𐑮𐑴𐑑𐑱𐑑 _𐑤𐑧𐑓𐑑"
+
+#: ../shell/ev-window.c:5110
+msgid "Rotate _Right"
+msgstr "𐑮𐑴𐑑𐑱𐑑 _𐑮𐑲𐑑"
+
+#: ../shell/ev-window.c:5121
+msgid "_Reload"
+msgstr "_𐑮𐑰𐑤𐑴𐑛"
+
+#: ../shell/ev-window.c:5122
+msgid "Reload the document"
+msgstr "𐑮𐑰𐑤𐑴𐑛 𐑞 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#, fuzzy
+#: ../shell/ev-window.c:5125
+msgid "Auto_scroll"
+msgstr "_Autoscroll"
+
+#: ../shell/ev-window.c:5135
+msgid "_First Page"
+msgstr "_𐑓𐑻𐑕𐑑 𐑐𐑱𐑡"
+
+#: ../shell/ev-window.c:5136
+msgid "Go to the first page"
+msgstr "𐑜𐑴 𐑑 𐑞 𐑓𐑻𐑕𐑑 𐑐𐑱𐑡"
+
+#: ../shell/ev-window.c:5138
+msgid "_Last Page"
+msgstr "_𐑤𐑭𐑕𐑑 𐑐𐑱𐑡"
+
+#: ../shell/ev-window.c:5139
+msgid "Go to the last page"
+msgstr "𐑜𐑴 𐑑 𐑞 𐑤𐑭𐑕𐑑 𐑐𐑱𐑡"
+
+#. Help menu
+#: ../shell/ev-window.c:5143
+msgid "_Contents"
+msgstr "_𐑒𐑪𐑯𐑑𐑩𐑯𐑑𐑕"
+
+#: ../shell/ev-window.c:5146
+msgid "_About"
+msgstr "_𐑩𐑚𐑬𐑑"
+
+#. Toolbar-only
+#, fuzzy
+#: ../shell/ev-window.c:5150
+msgid "Leave Fullscreen"
+msgstr "𐑤𐑰𐑝 Fullscreen"
+
+#, fuzzy
+#: ../shell/ev-window.c:5151
+msgid "Leave fullscreen mode"
+msgstr "𐑤𐑰𐑝 fullscreen 𐑥𐑴𐑛"
+
+#: ../shell/ev-window.c:5153
+msgid "Start Presentation"
+msgstr "𐑕𐑑𐑸𐑑 𐑐𐑮𐑧𐑟𐑩𐑯𐑑𐑱𐑖𐑩𐑯"
+
+#: ../shell/ev-window.c:5154
+msgid "Start a presentation"
+msgstr "𐑕𐑑𐑸𐑑 𐑩 𐑐𐑮𐑧𐑟𐑩𐑯𐑑𐑱𐑖𐑩𐑯"
+
+#. View Menu
+#: ../shell/ev-window.c:5213
+msgid "_Toolbar"
+msgstr "_𐑑𐑵𐑤𐑚𐑸"
+
+#: ../shell/ev-window.c:5214
+msgid "Show or hide the toolbar"
+msgstr "𐑖𐑴 𐑹 𐑣𐑲𐑛 𐑞 𐑑𐑵𐑤𐑚𐑸"
+
+#: ../shell/ev-window.c:5216
+msgid "Side _Pane"
+msgstr "𐑕𐑲𐑛 _𐑐𐑱𐑯"
+
+#: ../shell/ev-window.c:5217
+msgid "Show or hide the side pane"
+msgstr "𐑖𐑴 𐑹 𐑣𐑲𐑛 𐑞 𐑕𐑲𐑛 𐑐𐑱𐑯"
+
+#: ../shell/ev-window.c:5219
+msgid "_Continuous"
+msgstr "_𐑒𐑩𐑯𐑑𐑦𐑯𐑿𐑩𐑕"
+
+#: ../shell/ev-window.c:5220
+msgid "Show the entire document"
+msgstr "𐑖𐑴 𐑞 𐑧𐑯𐑑𐑲𐑼 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#: ../shell/ev-window.c:5222
+msgid "_Dual"
+msgstr "_𐑛𐑵𐑩𐑤"
+
+#: ../shell/ev-window.c:5223
+msgid "Show two pages at once"
+msgstr "𐑖𐑴 𐑑𐑵 𐑐𐑱𐑡𐑧𐑟 𐑨𐑑 𐑢𐑳𐑯𐑕"
+
+#, fuzzy
+#: ../shell/ev-window.c:5225
+msgid "_Fullscreen"
+msgstr "_Fullscreen"
+
+#: ../shell/ev-window.c:5226
+msgid "Expand the window to fill the screen"
+msgstr "𐑦𐑒𐑕𐑐𐑨𐑯𐑛 𐑞 𐑢𐑦𐑯𐑛𐑴 𐑑 𐑓𐑦𐑤 𐑞 𐑕𐑒𐑮𐑰𐑯"
+
+#: ../shell/ev-window.c:5228
+msgid "Pre_sentation"
+msgstr "_𐑐𐑮𐑧𐑟𐑩𐑯𐑑𐑱𐑖𐑩𐑯"
+
+#: ../shell/ev-window.c:5229
+msgid "Run document as a presentation"
+msgstr "𐑮𐑳𐑯 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑨𐑟 𐑩 𐑐𐑮𐑧𐑟𐑩𐑯𐑑𐑱𐑖𐑩𐑯"
+
+#: ../shell/ev-window.c:5237
+msgid "_Inverted Colors"
+msgstr "_𐑦𐑯𐑝𐑻𐑑𐑦𐑛 𐑒𐑳𐑤𐑼𐑟"
+
+#: ../shell/ev-window.c:5238
+msgid "Show page contents with the colors inverted"
+msgstr "𐑖𐑴 𐑐𐑱𐑡 𐑒𐑪𐑯𐑑𐑩𐑯𐑑𐑕 𐑢𐑦𐑞 𐑞 𐑒𐑳𐑤𐑼𐑟 𐑦𐑯𐑝𐑻𐑑𐑦𐑛"
+
+#. Links
+#: ../shell/ev-window.c:5246
+msgid "_Open Link"
+msgstr "_𐑴𐑐𐑩𐑯 𐑤𐑦𐑙𐑒"
+
+#: ../shell/ev-window.c:5248
+msgid "_Go To"
+msgstr "_𐑜𐑴 𐑑"
+
+#: ../shell/ev-window.c:5250
+msgid "Open in New _Window"
+msgstr "𐑴𐑐𐑩𐑯 𐑦𐑯 𐑯𐑿 _𐑢𐑦𐑯𐑛𐑴"
+
+#: ../shell/ev-window.c:5252
+msgid "_Copy Link Address"
+msgstr "_𐑒𐑪𐑐𐑦 𐑤𐑦𐑙𐑒 𐑩𐑛𐑮𐑧𐑕"
+
+#: ../shell/ev-window.c:5254
+msgid "_Save Image As…"
+msgstr "_𐑕𐑱𐑝 𐑦𐑥𐑦𐑡 𐑨𐑟…"
+
+#: ../shell/ev-window.c:5256
+msgid "Copy _Image"
+msgstr "𐑒𐑪𐑐𐑦 _𐑦𐑥𐑦𐑡"
+
+#: ../shell/ev-window.c:5261
+msgid "_Open Attachment"
+msgstr "_𐑴𐑐𐑩𐑯 𐑩𐑑𐑨𐑗𐑥𐑩𐑯𐑑"
+
+#: ../shell/ev-window.c:5263
+msgid "_Save Attachment As…"
+msgstr "_𐑕𐑱𐑝 𐑩𐑑𐑨𐑗𐑥𐑩𐑯𐑑 𐑨𐑟…"
+
+#: ../shell/ev-window.c:5316
+msgid "Zoom"
+msgstr "𐑟𐑵𐑥"
+
+#: ../shell/ev-window.c:5318
+msgid "Adjust the zoom level"
+msgstr "𐑩𐑡𐑳𐑕𐑑 𐑞 𐑟𐑵𐑥 𐑤𐑧𐑝𐑩𐑤"
+
+#: ../shell/ev-window.c:5328
+msgid "Navigation"
+msgstr "𐑯𐑨𐑝𐑦𐑜𐑱𐑖𐑩𐑯"
+
+#: ../shell/ev-window.c:5330
+msgid "Back"
+msgstr "𐑚𐑨𐑒"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5333
+msgid "Move across visited pages"
+msgstr "𐑥𐑵𐑝 𐑩𐑒𐑮𐑪𐑕 𐑝𐑦𐑟𐑩𐑑𐑩𐑛 𐑐𐑱𐑡𐑧𐑟"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5363
+msgid "Previous"
+msgstr "𐑐𐑮𐑰𐑝𐑦𐑩𐑕"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5368
+msgid "Next"
+msgstr "𐑯𐑧𐑒𐑕𐑑"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5372
+msgid "Zoom In"
+msgstr "𐑟𐑵𐑥 𐑦𐑯"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5376
+msgid "Zoom Out"
+msgstr "𐑟𐑵𐑥 𐑬𐑑"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5384
+msgid "Fit Width"
+msgstr "𐑓𐑦𐑑 𐑢𐑦𐑛𐑔"
+
+#: ../shell/ev-window.c:5545 ../shell/ev-window.c:5562
+msgid "Unable to launch external application."
+msgstr "𐑳𐑯𐑱𐑚𐑩𐑤 𐑑 𐑤𐑷𐑯𐑗 𐑦𐑒𐑕𐑑𐑻𐑯𐑩𐑤 𐑩𐑐𐑤𐑦𐑒𐑱𐑕𐑩𐑯."
+
+#: ../shell/ev-window.c:5619
+msgid "Unable to open external link"
+msgstr "𐑳𐑯𐑱𐑚𐑩𐑤 𐑑 𐑴𐑐𐑩𐑯 𐑦𐑒𐑕𐑑𐑻𐑯𐑩𐑤 𐑤𐑦𐑙𐑒"
+
+#: ../shell/ev-window.c:5786
+msgid "Couldn't find appropriate format to save image"
+msgstr "𐑒𐑫𐑛𐑯𐑑 𐑓𐑲𐑯𐑛 𐑩𐑐𐑮𐑴𐑐𐑮𐑦𐑱𐑑 𐑓𐑹𐑥𐑨𐑑 𐑑 𐑕𐑱𐑝 𐑦𐑥𐑦𐑡"
+
+#: ../shell/ev-window.c:5828
+msgid "The image could not be saved."
+msgstr "𐑞 𐑦𐑥𐑦𐑡 𐑒𐑫𐑛 𐑯𐑪𐑑 𐑚𐑰 𐑕𐑱𐑝𐑛."
+
+#: ../shell/ev-window.c:5860
+msgid "Save Image"
+msgstr "𐑕𐑱𐑝 𐑦𐑥𐑦𐑡"
+
+#: ../shell/ev-window.c:5927
+msgid "Unable to open attachment"
+msgstr "𐑳𐑯𐑱𐑚𐑩𐑤 𐑑 𐑴𐑐𐑩𐑯 𐑩𐑑𐑨𐑗𐑥𐑩𐑯𐑑"
+
+#: ../shell/ev-window.c:5980
+msgid "The attachment could not be saved."
+msgstr "𐑞 𐑩𐑑𐑨𐑗𐑥𐑩𐑯𐑑 𐑒𐑫𐑛 𐑯𐑪𐑑 𐑚𐑰 𐑕𐑱𐑝𐑛."
+
+#: ../shell/ev-window.c:6025
+msgid "Save Attachment"
+msgstr "𐑕𐑱𐑝 𐑩𐑑𐑨𐑗𐑥𐑩𐑯𐑑"
+
+#, c-format
+#: ../shell/ev-window-title.c:162
+msgid "%s — Password Required"
+msgstr "%s — 𐑐𐑭𐑕𐑢𐑼𐑛 𐑮𐑦𐑒𐑢𐑲𐑼𐑛"
+
+#: ../shell/ev-utils.c:317
+msgid "By extension"
+msgstr "𐑚𐑲 𐑩𐑒𐑕𐑑𐑧𐑯𐑖𐑩𐑯"
+
+#: ../shell/main.c:72 ../shell/main.c:282
+msgid "MATE Document Viewer"
+msgstr "·𐑜𐑯𐑴𐑥 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑝𐑿𐑼"
+
+#: ../shell/main.c:80
+msgid "The page label of the document to display."
+msgstr "𐑞 𐑐𐑱𐑡 𐑤𐑱𐑚𐑩𐑤 𐑝 𐑞 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑑 𐑛𐑦𐑕𐑐𐑤𐑱."
+
+#: ../shell/main.c:80
+msgid "PAGE"
+msgstr "𐑐𐑱𐑡"
+
+#: ../shell/main.c:81
+msgid "The page number of the document to display."
+msgstr "𐑞 𐑐𐑱𐑡 𐑯𐑳𐑥𐑚𐑼 𐑝 𐑞 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 𐑑 𐑛𐑦𐑕𐑐𐑤𐑱."
+
+#: ../shell/main.c:81
+msgid "NUMBER"
+msgstr "𐑯𐑳𐑥𐑚𐑼"
+
+#, fuzzy
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr "𐑮𐑳𐑯 𐑦𐑝𐑦𐑯𐑕 𐑦𐑯 fullscreen 𐑥𐑴𐑛"
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr "𐑮𐑳𐑯 ·𐑦𐑝𐑦𐑯𐑕 𐑦𐑯 𐑐𐑮𐑧𐑟𐑩𐑯𐑑𐑱𐑖𐑩𐑯 𐑥𐑴𐑛"
+
+#, fuzzy
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr "𐑮𐑳𐑯 𐑦𐑝𐑦𐑯𐑕 𐑨𐑟 𐑩 previewer"
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr "𐑞 𐑢𐑻𐑛 𐑹 𐑓𐑮𐑱𐑟 𐑑 𐑓𐑲𐑯𐑛 𐑦𐑯 𐑞 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑"
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "𐑕𐑑𐑮𐑦𐑙"
+
+#: ../shell/main.c:89
+msgid "[FILE…]"
+msgstr "[𐑓𐑲𐑤…]"
+
+#, fuzzy
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"𐑚𐑵𐑤𐑰𐑩𐑯 𐑪𐑐𐑖𐑩𐑯𐑟 𐑩𐑝𐑱𐑤𐑩𐑚𐑩𐑤: 𐑑𐑮𐑵 𐑦𐑯𐑱𐑚𐑩𐑤𐑟 thumbnailing 𐑯 𐑓𐑷𐑤𐑕 𐑛𐑦𐑕𐑱𐑚𐑩𐑤𐑟 𐑞 𐑒𐑮𐑰𐑱𐑖𐑩𐑯 𐑝 "
+"𐑯𐑿 thumbnails"
+
+#, fuzzy
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "𐑦𐑯𐑱𐑚𐑩𐑤 thumbnailing 𐑝 PDF 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑𐑕"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "𐑔𐑳𐑥𐑯𐑱𐑤 𐑒𐑩𐑥𐑭𐑯𐑛 𐑓𐑹 PDF 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑𐑕"
+
+#, fuzzy
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"𐑝𐑨𐑤𐑦𐑛 𐑒𐑩𐑥𐑭𐑯𐑛 𐑐𐑤𐑳𐑕 𐑸𐑜𐑿𐑥𐑩𐑯𐑑𐑕 𐑓𐑹 𐑞 ·𐑐·𐑛·𐑓 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑 thumbnailer. 𐑕𐑰 𐑯𐑪𐑑𐑩𐑤𐑩𐑕 "
+"thumbnailer 𐑛𐑪𐑒𐑿𐑥𐑩𐑯𐑑𐑱𐑖𐑩𐑯 𐑓𐑹 𐑥𐑹 𐑦𐑯𐑓𐑼𐑥𐑱𐑖𐑩𐑯."
+
diff --git a/po/en_CA.po b/po/en_CA.po
new file mode 100644
index 00000000..46d755fa
--- /dev/null
+++ b/po/en_CA.po
@@ -0,0 +1,1260 @@
+# Canadian English translation for evince
+# Copyright (C) 2004-2005 Adam Weinberger and the MATE Foundation
+# This file is distributed under the same licence as the evince package.
+# Adam Weinberger <[email protected]>, 2004, 2005.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-04-21 23:52-0400\n"
+"PO-Revision-Date: 2005-08-16 10:30-0400\n"
+"Last-Translator: Adam Weinberger <[email protected]>\n"
+"Language-Team: Canadian English <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../backend/comics/comics-document.c:163
+#, c-format
+msgid "File corrupted."
+msgstr "File corrupted."
+
+#: ../backend/comics/comics-document.c:197
+#, c-format
+msgid "No images found in archive %s"
+msgstr "No images found in archive %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Comic Books"
+
+#: ../backend/djvu/djvu-document.c:167
+#, c-format
+msgid ""
+"The document is composed by several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+"The document is composed of several files. One or more of those files cannot "
+"be accessed."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Djvu Documents"
+
+#: ../backend/dvi/dvi-document.c:94
+#, c-format
+msgid "File not available"
+msgstr "File not available"
+
+#: ../backend/dvi/dvi-document.c:109
+#, c-format
+msgid "DVI document has incorrect format"
+msgstr "DVI document has incorrect format"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI Documents"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:685
+msgid "Yes"
+msgstr "Yes"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:688
+msgid "No"
+msgstr "No"
+
+#: ../backend/pdf/ev-poppler.cc:762
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:764
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:766
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:768
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:770
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:772
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:774
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:776
+msgid "Unknown font type"
+msgstr "Unknown font type"
+
+#: ../backend/pdf/ev-poppler.cc:802
+msgid "No name"
+msgstr "No name"
+
+#: ../backend/pdf/ev-poppler.cc:810
+msgid "Embedded subset"
+msgstr "Embedded subset"
+
+#: ../backend/pdf/ev-poppler.cc:812
+msgid "Embedded"
+msgstr "Embedded"
+
+#: ../backend/pdf/ev-poppler.cc:814
+msgid "Not embedded"
+msgstr "Not embedded"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF Documents"
+
+#: ../backend/impress/impress-document.c:296
+#, c-format
+msgid "Remote files aren't supported"
+msgstr "Remote files aren't supported"
+
+#: ../backend/impress/impress-document.c:307
+#, c-format
+msgid "Invalid document"
+msgstr "Invalid document"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress Slides"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "No error"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Not enough memory"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "Cannot find ZIP signature"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "Invalid ZIP file"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr "Multi-file ZIPs are not supported"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Cannot open the file"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Cannot read data from file"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "Cannot find file in the ZIP archive"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Unknown error"
+
+#: ../backend/ps/ev-spectre.c:113
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Failed to load document “%s”"
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Failed to save document “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript Documents"
+
+#: ../libdocument/ev-attachment.c:303 ../libdocument/ev-attachment.c:324
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Couldn't save attachment “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:360
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Couldn't open attachment “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:393
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Couldn't open attachment “%s”"
+
+#: ../libdocument/ev-document-factory.c:177
+#: ../libdocument/ev-document-factory.c:293
+#, c-format
+msgid "Unknown MIME Type"
+msgstr "Unknown MIME Type"
+
+#: ../libdocument/ev-document-factory.c:194
+#, c-format
+msgid "Unhandled MIME type: “%s”"
+msgstr "Unhandled MIME type: “%s”"
+
+#: ../libdocument/ev-document-factory.c:348
+msgid "All Documents"
+msgstr "All Documents"
+
+#: ../libdocument/ev-document-factory.c:380
+msgid "All Files"
+msgstr "All Files"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:439
+msgid "Co_nnect"
+msgstr "Co_nnect"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:483
+msgid "Connect _anonymously"
+msgstr "Connect _anonymously"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:492
+msgid "Connect as u_ser:"
+msgstr "Connect as u_ser:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:529
+msgid "_Username:"
+msgstr "_Username:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:533
+msgid "_Domain:"
+msgstr "_Domain:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:538
+#: ../data/evince-password.glade.h:4
+msgid "_Password:"
+msgstr "_Password:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:553
+msgid "_Forget password immediately"
+msgstr "_Forget password immediately"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:561
+msgid "_Remember password until you logout"
+msgstr "_Remember password until you log out"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:569
+msgid "_Remember forever"
+msgstr "_Remember forever"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:938
+#, c-format
+msgid "Show “_%s”"
+msgstr "Show “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Move on Toolbar"
+msgstr "_Move on Toolbar"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Move the selected item on the toolbar"
+msgstr "Move the selected item on the toolbar"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1403
+msgid "_Remove from Toolbar"
+msgstr "_Remove from Toolbar"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1404
+msgid "Remove the selected item from the toolbar"
+msgstr "Remove the selected item from the toolbar"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1405
+msgid "_Delete Toolbar"
+msgstr "_Delete Toolbar"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1406
+msgid "Remove the selected toolbar"
+msgstr "Remove the selected toolbar"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:441
+msgid "Separator"
+msgstr "Separator"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+msgid "Running in presentation mode"
+msgstr "Running in presentation mode"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:4482
+msgid "Best Fit"
+msgstr "Best Fit"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Fit Page Width"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:3606
+#: ../shell/ev-window-title.c:132
+#, c-format
+msgid "Document Viewer"
+msgstr "Document Viewer"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "View multipage documents"
+
+#: ../data/evince-password.glade.h:1
+msgid "Password Entry"
+msgstr "Password Entry"
+
+#: ../data/evince-password.glade.h:2
+msgid "Remember password for this session"
+msgstr "Remember password for this session"
+
+#: ../data/evince-password.glade.h:3
+msgid "Save password in keyring"
+msgstr "Save password in keyring"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>Author:</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>Created:</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>Creator:</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>Format:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b>Keywords:</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>Modified:</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b>Number of Pages:</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr "<b>Optimized:</b>"
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Paper Size:</b>"
+msgstr "<b>Paper Size:</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Producer:</b>"
+msgstr "<b>Producer:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Security:</b>"
+msgstr "<b>Security:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Subject:</b>"
+msgstr "<b>Subject:</b>"
+
+#: ../data/evince-properties.glade.h:13
+msgid "<b>Title:</b>"
+msgstr "<b>Title:</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Override document restrictions"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Override document restrictions, such as restriction to copy or to print."
+
+#: ../properties/ev-properties-main.c:111
+msgid "Document"
+msgstr "Document"
+
+#: ../properties/ev-properties-view.c:182
+msgid "None"
+msgstr "None"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:207
+#: ../properties/ev-properties-view.c:367
+msgid "default:mm"
+msgstr "default:inch"
+
+#. Metric measurement (millimeters)
+#: ../properties/ev-properties-view.c:249
+#: ../properties/ev-properties-view.c:404
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:253
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:277
+#: ../properties/ev-properties-view.c:415
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Portrait (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:284
+#: ../properties/ev-properties-view.c:422
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Landscape (%s)"
+
+#. Imperial measurement (inches)
+#: ../properties/ev-properties-view.c:399
+#, c-format
+msgid "%.2f x %.2f in"
+msgstr "%.2f x %.2f in"
+
+#: ../shell/eggfindbar.c:158
+msgid "Search string"
+msgstr "Search string"
+
+#: ../shell/eggfindbar.c:159
+msgid "The name of the string to be found"
+msgstr "The name of the string to be found"
+
+#: ../shell/eggfindbar.c:172
+msgid "Case sensitive"
+msgstr "Case sensitive"
+
+#: ../shell/eggfindbar.c:173
+msgid "TRUE for a case sensitive search"
+msgstr "TRUE for a case sensitive search"
+
+#: ../shell/eggfindbar.c:180
+msgid "Highlight color"
+msgstr "Highlight colour"
+
+#: ../shell/eggfindbar.c:181
+msgid "Color of highlight for all matches"
+msgstr "Colour of highlight for all matches"
+
+#: ../shell/eggfindbar.c:187
+msgid "Current color"
+msgstr "Current colour"
+
+#: ../shell/eggfindbar.c:188
+msgid "Color of highlight for the current match"
+msgstr "Colour of highlight for the current match"
+
+#: ../shell/eggfindbar.c:321
+msgid "Find:"
+msgstr "Find:"
+
+#: ../shell/eggfindbar.c:330
+msgid "Find Previous"
+msgstr "Find Previous"
+
+#: ../shell/eggfindbar.c:334 ../shell/eggfindbar.c:337
+msgid "Find previous occurrence of the search string"
+msgstr "Find previous occurrence of the search string"
+
+#: ../shell/eggfindbar.c:343
+msgid "Find Next"
+msgstr "Find Next"
+
+#: ../shell/eggfindbar.c:347 ../shell/eggfindbar.c:350
+msgid "Find next occurrence of the search string"
+msgstr "Find next occurrence of the search string"
+
+#: ../shell/eggfindbar.c:359
+msgid "C_ase Sensitive"
+msgstr "C_ase Sensitive"
+
+#: ../shell/eggfindbar.c:363 ../shell/eggfindbar.c:366
+msgid "Toggle case sensitive search"
+msgstr "Toggle case sensitive search"
+
+#: ../shell/ev-jobs.c:658
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "Failed to create file “%s”: %s"
+
+#: ../shell/ev-open-recent-action.c:71
+msgid "Open a recently used document"
+msgstr "Open a recently used document"
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d of %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "of %d"
+
+#: ../shell/ev-password.c:88
+msgid "Password required"
+msgstr "Password required"
+
+#: ../shell/ev-password.c:89
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"The document “%s” is locked and requires a password before it can be opened."
+
+#: ../shell/ev-password.c:154
+msgid "Enter password"
+msgstr "Enter password"
+
+#: ../shell/ev-password.c:260
+#, c-format
+msgid "Password for document %s"
+msgstr "Password for document %s"
+
+#: ../shell/ev-password.c:347
+msgid "Incorrect password"
+msgstr "Incorrect password"
+
+#: ../shell/ev-password-view.c:111
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"This document is locked and can only be read by entering the correct "
+"password."
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "_Unlock Document"
+
+#: ../shell/ev-properties-dialog.c:61
+msgid "Properties"
+msgstr "Properties"
+
+#: ../shell/ev-properties-dialog.c:94
+msgid "General"
+msgstr "General"
+
+#: ../shell/ev-properties-dialog.c:104
+msgid "Fonts"
+msgstr "Fonts"
+
+#: ../shell/ev-properties-fonts.c:141
+msgid "Font"
+msgstr "Font"
+
+#: ../shell/ev-properties-fonts.c:152
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "Gathering font information... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:675
+msgid "Attachments"
+msgstr "Attachments"
+
+#: ../shell/ev-sidebar-links.c:266 ../shell/ev-view.c:3645
+msgid "Loading..."
+msgstr "Loading..."
+
+#: ../shell/ev-sidebar-links.c:339
+msgid "Print..."
+msgstr "Print..."
+
+#: ../shell/ev-sidebar-links.c:719
+msgid "Index"
+msgstr "Index"
+
+#: ../shell/ev-sidebar-thumbnails.c:725
+msgid "Thumbnails"
+msgstr "Thumbnails"
+
+#: ../shell/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Scroll Up"
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Scroll Down"
+
+#: ../shell/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Scroll View Up"
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Scroll View Down"
+
+#: ../shell/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Document View"
+
+#: ../shell/ev-view.c:1443
+msgid "Go to first page"
+msgstr "Go to first page"
+
+#: ../shell/ev-view.c:1445
+msgid "Go to previous page"
+msgstr "Go to previous page"
+
+#: ../shell/ev-view.c:1447
+msgid "Go to next page"
+msgstr "Go to next page"
+
+#: ../shell/ev-view.c:1449
+msgid "Go to last page"
+msgstr "Go to last page"
+
+#: ../shell/ev-view.c:1451
+msgid "Go to page"
+msgstr "Go to page"
+
+#: ../shell/ev-view.c:1453
+msgid "Find"
+msgstr "Find"
+
+#: ../shell/ev-view.c:1481
+#, c-format
+msgid "Go to page %s"
+msgstr "Go to page %s"
+
+#: ../shell/ev-view.c:1487
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Go to %s on file “%s”"
+
+#: ../shell/ev-view.c:1490
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Go to file “%s”"
+
+#: ../shell/ev-view.c:1498
+#, c-format
+msgid "Launch %s"
+msgstr "Launch %s"
+
+#: ../shell/ev-view.c:2450
+msgid "End of presentation. Press Escape to exit."
+msgstr "End of presentation. Press Escape to exit."
+
+#: ../shell/ev-view.c:3374
+msgid "Jump to page:"
+msgstr "Jump to page:"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:5156
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d found on this page"
+msgstr[1] "%d found on this page"
+
+#: ../shell/ev-view.c:5165
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% remaining to search"
+
+#: ../shell/ev-window.c:755
+#, c-format
+msgid "Page %s - %s"
+msgstr "Page %s - %s"
+
+#: ../shell/ev-window.c:757
+#, c-format
+msgid "Page %s"
+msgstr "Page %s"
+
+#: ../shell/ev-window.c:1381 ../shell/ev-window.c:1434
+msgid "Unable to open document"
+msgstr "Unable to open document"
+
+#: ../shell/ev-window.c:1607
+msgid "Open Document"
+msgstr "Open Document"
+
+#: ../shell/ev-window.c:1668
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "Couldn't create symlink “%s”: %s"
+
+#: ../shell/ev-window.c:1697
+msgid "Cannot open a copy."
+msgstr "Cannot open a copy."
+
+#: ../shell/ev-window.c:1941 ../shell/ev-window.c:1991
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "The file could not be saved as “%s”."
+
+#: ../shell/ev-window.c:2036
+msgid "Save a Copy"
+msgstr "Save a Copy"
+
+#: ../shell/ev-window.c:2157 ../shell/ev-window.c:3307
+msgid "Failed to print document"
+msgstr "Failed to print document"
+
+#: ../shell/ev-window.c:2322
+msgid "Printing is not supported on this printer."
+msgstr "Printing is not supported on this printer."
+
+#: ../shell/ev-window.c:2448 ../shell/ev-window.c:4274
+msgid "Print"
+msgstr "Print"
+
+#: ../shell/ev-window.c:3086
+msgid "Toolbar Editor"
+msgstr "Toolbar Editor"
+
+#: ../shell/ev-window.c:3602
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+
+#: ../shell/ev-window.c:3630
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public Licence as published by the Free Software "
+"Foundation; either version 2 of the Licence, or (at your option) any later "
+"version.\n"
+
+#: ../shell/ev-window.c:3634
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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 Licence for more "
+"details.\n"
+
+#: ../shell/ev-window.c:3638
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"You should have received a copy of the GNU General Public Licence along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:3662 ../shell/main.c:349
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:3665
+msgid "© 1996-2007 The Evince authors"
+msgstr "© 1996-2007 The Evince authors"
+
+#: ../shell/ev-window.c:3671
+msgid "translator-credits"
+msgstr "Adam Weinberger <[email protected]>"
+
+#: ../shell/ev-window.c:4186
+msgid "_File"
+msgstr "_File"
+
+#: ../shell/ev-window.c:4187
+msgid "_Edit"
+msgstr "_Edit"
+
+#: ../shell/ev-window.c:4188
+msgid "_View"
+msgstr "_View"
+
+#: ../shell/ev-window.c:4189
+msgid "_Go"
+msgstr "_Go"
+
+#: ../shell/ev-window.c:4190
+msgid "_Help"
+msgstr "_Help"
+
+#. File menu
+#: ../shell/ev-window.c:4193 ../shell/ev-window.c:4372
+#: ../shell/ev-window.c:4444
+msgid "_Open..."
+msgstr "_Open..."
+
+#: ../shell/ev-window.c:4194 ../shell/ev-window.c:4445
+msgid "Open an existing document"
+msgstr "Open an existing document"
+
+#: ../shell/ev-window.c:4196
+msgid "Op_en a Copy"
+msgstr "Op_en a Copy"
+
+#: ../shell/ev-window.c:4197
+msgid "Open a copy of the current document in a new window"
+msgstr "Open a copy of the current document in a new window"
+
+#: ../shell/ev-window.c:4199 ../shell/ev-window.c:4374
+msgid "_Save a Copy..."
+msgstr "_Save a Copy..."
+
+#: ../shell/ev-window.c:4200
+msgid "Save a copy of the current document"
+msgstr "Save a copy of the current document"
+
+#: ../shell/ev-window.c:4202
+msgid "Print Set_up..."
+msgstr "Print Set_up..."
+
+#: ../shell/ev-window.c:4203
+msgid "Setup the page settings for printing"
+msgstr "Configure the page settings for printing"
+
+#: ../shell/ev-window.c:4205
+msgid "_Print..."
+msgstr "_Print..."
+
+#: ../shell/ev-window.c:4206 ../shell/ev-window.c:4275
+msgid "Print this document"
+msgstr "Print this document"
+
+#: ../shell/ev-window.c:4208
+msgid "P_roperties"
+msgstr "P_roperties"
+
+#: ../shell/ev-window.c:4216
+msgid "Select _All"
+msgstr "Select _All"
+
+#: ../shell/ev-window.c:4218
+msgid "_Find..."
+msgstr "_Find..."
+
+#: ../shell/ev-window.c:4219
+msgid "Find a word or phrase in the document"
+msgstr "Find a word or phrase in the document"
+
+#: ../shell/ev-window.c:4221
+msgid "Find Ne_xt"
+msgstr "Find Ne_xt"
+
+#: ../shell/ev-window.c:4223
+msgid "Find Pre_vious"
+msgstr "Find Pre_vious"
+
+#: ../shell/ev-window.c:4225
+msgid "T_oolbar"
+msgstr "T_oolbar"
+
+#: ../shell/ev-window.c:4227
+msgid "Rotate _Left"
+msgstr "Rotate _Left"
+
+#: ../shell/ev-window.c:4229
+msgid "Rotate _Right"
+msgstr "Rotate _Right"
+
+#: ../shell/ev-window.c:4234
+msgid "Enlarge the document"
+msgstr "Enlarge the document"
+
+#: ../shell/ev-window.c:4237
+msgid "Shrink the document"
+msgstr "Shrink the document"
+
+#: ../shell/ev-window.c:4239
+msgid "_Reload"
+msgstr "_Reload"
+
+#: ../shell/ev-window.c:4240
+msgid "Reload the document"
+msgstr "Reload the document"
+
+#: ../shell/ev-window.c:4243
+msgid "Auto_scroll"
+msgstr "Auto_scroll"
+
+#. Go menu
+#: ../shell/ev-window.c:4247
+msgid "_Previous Page"
+msgstr "_Previous Page"
+
+#: ../shell/ev-window.c:4248
+msgid "Go to the previous page"
+msgstr "Go to the previous page"
+
+#: ../shell/ev-window.c:4250
+msgid "_Next Page"
+msgstr "_Next Page"
+
+#: ../shell/ev-window.c:4251
+msgid "Go to the next page"
+msgstr "Go to the next page"
+
+#: ../shell/ev-window.c:4253
+msgid "_First Page"
+msgstr "_First Page"
+
+#: ../shell/ev-window.c:4254
+msgid "Go to the first page"
+msgstr "Go to the first page"
+
+#: ../shell/ev-window.c:4256
+msgid "_Last Page"
+msgstr "_Last Page"
+
+#: ../shell/ev-window.c:4257
+msgid "Go to the last page"
+msgstr "Go to the last page"
+
+#. Help menu
+#: ../shell/ev-window.c:4261
+msgid "_Contents"
+msgstr "_Contents"
+
+#: ../shell/ev-window.c:4264
+msgid "_About"
+msgstr "_About"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4268
+msgid "Leave Fullscreen"
+msgstr "Leave Fullscreen"
+
+#: ../shell/ev-window.c:4269
+msgid "Leave fullscreen mode"
+msgstr "Leave fullscreen mode"
+
+#: ../shell/ev-window.c:4271
+msgid "Start Presentation"
+msgstr "Start Presentation"
+
+#: ../shell/ev-window.c:4272
+msgid "Start a presentation"
+msgstr "Start a presentation"
+
+#. View Menu
+#: ../shell/ev-window.c:4328
+msgid "_Toolbar"
+msgstr "_Toolbar"
+
+#: ../shell/ev-window.c:4329
+msgid "Show or hide the toolbar"
+msgstr "Show or hide the toolbar"
+
+#: ../shell/ev-window.c:4331
+msgid "Side _Pane"
+msgstr "Side _Pane"
+
+#: ../shell/ev-window.c:4332
+msgid "Show or hide the side pane"
+msgstr "Show or hide the side pane"
+
+#: ../shell/ev-window.c:4334
+msgid "_Continuous"
+msgstr "_Continuous"
+
+#: ../shell/ev-window.c:4335
+msgid "Show the entire document"
+msgstr "Show the entire document"
+
+#: ../shell/ev-window.c:4337
+msgid "_Dual"
+msgstr "_Dual"
+
+#: ../shell/ev-window.c:4338
+msgid "Show two pages at once"
+msgstr "Show two pages at once"
+
+#: ../shell/ev-window.c:4340
+msgid "_Fullscreen"
+msgstr "_Fullscreen"
+
+#: ../shell/ev-window.c:4341
+msgid "Expand the window to fill the screen"
+msgstr "Expand the window to fill the screen"
+
+#: ../shell/ev-window.c:4343
+msgid "Pre_sentation"
+msgstr "Pre_sentation"
+
+#: ../shell/ev-window.c:4344
+msgid "Run document as a presentation"
+msgstr "Run document as a presentation"
+
+#: ../shell/ev-window.c:4346
+msgid "_Best Fit"
+msgstr "_Best Fit"
+
+#: ../shell/ev-window.c:4347
+msgid "Make the current document fill the window"
+msgstr "Make the current document fill the window"
+
+#: ../shell/ev-window.c:4349
+msgid "Fit Page _Width"
+msgstr "Fit Page _Width"
+
+#: ../shell/ev-window.c:4350
+msgid "Make the current document fill the window width"
+msgstr "Make the current document fill the window width"
+
+#. Links
+#: ../shell/ev-window.c:4357
+msgid "_Open Link"
+msgstr "_Open Link"
+
+#: ../shell/ev-window.c:4359
+msgid "_Go To"
+msgstr "_Go To"
+
+#: ../shell/ev-window.c:4361
+msgid "Open in New _Window"
+msgstr "Open in New _Window"
+
+#: ../shell/ev-window.c:4363
+msgid "_Copy Link Address"
+msgstr "_Copy Link Address"
+
+#: ../shell/ev-window.c:4365
+msgid "_Save Image As..."
+msgstr "_Save Image As..."
+
+#: ../shell/ev-window.c:4367
+msgid "Copy _Image"
+msgstr "Copy _Image"
+
+#: ../shell/ev-window.c:4406
+msgid "Page"
+msgstr "Page"
+
+#: ../shell/ev-window.c:4407
+msgid "Select Page"
+msgstr "Select Page"
+
+#: ../shell/ev-window.c:4418
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../shell/ev-window.c:4420
+msgid "Adjust the zoom level"
+msgstr "Adjust the zoom level"
+
+#: ../shell/ev-window.c:4430
+msgid "Navigation"
+msgstr "Navigation"
+
+#: ../shell/ev-window.c:4432
+msgid "Back"
+msgstr "Back"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:4435
+msgid "Move across visited pages"
+msgstr "Move across visited pages"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4465
+msgid "Previous"
+msgstr "Previous"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4470
+msgid "Next"
+msgstr "Next"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4474
+msgid "Zoom In"
+msgstr "Zoom In"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4478
+msgid "Zoom Out"
+msgstr "Zoom Out"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4486
+msgid "Fit Width"
+msgstr "Fit Width"
+
+#: ../shell/ev-window.c:4681
+msgid "Unable to open external link"
+msgstr "Unable to open external link"
+
+#: ../shell/ev-window.c:4842
+msgid "Couldn't find appropriate format to save image"
+msgstr "Could not find appropriate format to save image"
+
+#: ../shell/ev-window.c:4882
+msgid "The image could not be saved."
+msgstr "The image could not be saved."
+
+#: ../shell/ev-window.c:4914
+msgid "Save Image"
+msgstr "Save Image"
+
+#: ../shell/ev-window.c:4973
+msgid "Unable to open attachment"
+msgstr "Unable to open attachment"
+
+#: ../shell/ev-window.c:5025
+msgid "The attachment could not be saved."
+msgstr "The attachment could not be saved."
+
+#: ../shell/ev-window.c:5070
+msgid "Save Attachment"
+msgstr "Save Attachment"
+
+#: ../shell/ev-window-title.c:145
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - Password Required"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "By extension"
+
+#: ../shell/main.c:58
+msgid "The page of the document to display."
+msgstr "The page of the document to display."
+
+#: ../shell/main.c:58
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:59
+msgid "Run evince in fullscreen mode"
+msgstr "Run evince in fullscreen mode"
+
+#: ../shell/main.c:60
+msgid "Run evince in presentation mode"
+msgstr "Run evince in presentation mode"
+
+#: ../shell/main.c:61
+msgid "Run evince as a previewer"
+msgstr "Run evince as a previewer"
+
+#: ../shell/main.c:62
+msgid "The word or phrase to find in the document"
+msgstr "The word or phrase to find in the document"
+
+#: ../shell/main.c:62
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:65
+msgid "[FILE...]"
+msgstr "[FILE...]"
+
+#: ../shell/main.c:332
+msgid "MATE Document Viewer"
+msgstr "MATE Document Viewer"
+
+#: ../shell/main.c:392
+msgid "Evince Document Viewer"
+msgstr "Evince Document Viewer"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Enable thumbnailing of PDF Documents"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Thumbnail command for PDF Documents"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
diff --git a/po/en_GB.po b/po/en_GB.po
new file mode 100644
index 00000000..b4eb8784
--- /dev/null
+++ b/po/en_GB.po
@@ -0,0 +1,2359 @@
+# English (British) translation for evince
+# Copyright (C) 2005 The Mate Foundation
+# This file is distributed under the same licence as the evince package.
+# David Lodge <[email protected]>, 2005, 2009.
+# Philip Withnall <[email protected]>, 2009–2010.
+# Bruce Cowan <[email protected]>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-08-31 15:40+0100\n"
+"PO-Revision-Date: 2010-08-31 15:41+0100\n"
+"Last-Translator: Bruce Cowan <[email protected]>\n"
+"Language-Team: British English <[email protected]>\n"
+"Language: en_GB\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.6.1\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "The command “%s” failed at decompressing the comic book."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "The command “%s” did not end normally."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Not a comic book MIME type: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Can't find an appropriate command to decompress this type of comic book"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Unknown MIME Type"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "File corrupted"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "No files in archive"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "No images found in archive %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "There was an error deleting “%s”."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Error %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Comic Books"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu document has incorrect format"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu Documents"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI document has incorrect format"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI Documents"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "This work is in the Public Domain"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Yes"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "No"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Unknown font type"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "No name"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Embedded subset"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Embedded"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Not embedded"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF Documents"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Invalid document"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress Slides"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "No error"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Not enough memory"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Cannot find ZIP signature"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Invalid ZIP file"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Multi-file ZIPs are not supported"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Cannot open the file"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Cannot read data from file"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Cannot find file in the ZIP archive"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Unknown error"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Failed to load document “%s”"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Failed to save document “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript Documents"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Couldn't save attachment “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Couldn't open attachment “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Couldn't open attachment “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "File type %s (%s) is not supported"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "All Documents"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "All Files"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Failed to create a temporary file: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Failed to create a temporary directory: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "File is not a valid .desktop file"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Unrecognised desktop file Version '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Starting %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Application does not accept documents on command line"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Unrecognised launch option: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Can't pass document URIs to a 'Type=Link' desktop entry"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Not a launchable item"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Disable connection to session manager"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Specify file containing saved configuration"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Specify session management ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Session management options:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Show session management options"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Show “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Move on Toolbar"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Move the selected item on the toolbar"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Remove from Toolbar"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Remove the selected item from the toolbar"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Delete Toolbar"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Remove the selected toolbar"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Separator"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "Best Fit"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Fit Page Width"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Document Viewer"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "View multi-page documents"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Override document restrictions"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Override document restrictions, like restriction to copy or to print."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Delete the temporary file"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Print settings file"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "MATE Document Previewer"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "Failed to print document"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "The selected printer '%s' could not be found"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "_Previous Page"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "Go to the previous page"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "_Next Page"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "Go to the next page"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "Enlarge the document"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "Shrink the document"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Print"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "Print this document"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "_Best Fit"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "Make the current document fill the window"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "Fit Page _Width"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "Make the current document fill the window width"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "Page"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "Select Page"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Document"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Title:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Location:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Subject:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Author:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Keywords:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Producer:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Creator:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Created:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Modified:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Number of Pages:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimised:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Format:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Security:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Paper Size:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "None"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Portrait (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Landscape (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d of %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "of %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Loading…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Preparing to print…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Finishing…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Printing page %d of %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Printing is not supported on this printer."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Invalid page selection"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Warning"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Your print range selection does not include any pages"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Page Scaling:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Shrink to Printable Area"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Fit to Printable Area"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Auto Rotate and Centre"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centred within the printer page."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Select page size using document page size"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Page Handling"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Failed to print page %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Scroll Up"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Scroll Down"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Scroll View Up"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Scroll View Down"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Document View"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Jump to page:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "End of presentation. Click to exit."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Go to first page"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Go to previous page"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Go to next page"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Go to last page"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Go to page"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Find"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Go to page %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Go to %s on file “%s”"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Go to file “%s”"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Launch %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Find:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "Find Pre_vious"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Find previous occurrence of the search string"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "Find Ne_xt"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Find next occurrence of the search string"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "C_ase Sensitive"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Toggle case sensitive search"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Icon:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Note"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Comment"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Key"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Help"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "New Paragraph"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Paragraph"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Insert"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Cross"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Circle"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Unknown"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Annotation Properties"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Colour:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Style:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Transparent"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Opaque"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Initial window state:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Open"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Close"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Running in presentation mode"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Password for document %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Converting %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d of %d documents converted"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Converting metadata"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Open a recently used document"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"This document is locked and can only be read by entering the correct "
+"password."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Unlock Document"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Enter password"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Password required"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"The document “%s” is locked and requires a password before it can be opened."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Password:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Forget password _immediately"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Remember password until you _log out"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Remember _forever"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Properties"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "General"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Fonts"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Document Licence"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Font"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Gathering font information… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Usage terms"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Text Licence"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Further Information"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "List"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Annotations"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Text"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Add text annotation"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Add"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Document contains no annotations"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Page %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Attachments"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Layers"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Print…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Index"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Thumbnails"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "Page %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "Page %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "The document contains no pages"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "The document contains only empty pages"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "Unable to open document"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Loading document from “%s”"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Downloading document (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "Failed to load remote file."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Reloading document from %s"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "Failed to reload document."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "Open Document"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "Saving document to %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Saving attachment to %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "Saving image to %s"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "The file could not be saved as “%s”."
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Uploading document (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Uploading attachment (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Uploading image (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "Save a Copy"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d pending job in queue"
+msgstr[1] "%d pending jobs in queue"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Printing job “%s”"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Save a copy of document “%s” before closing?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "Close _without Saving"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "Save a _Copy"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Wait until print job “%s” finishes before closing?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "If you close the window, pending print jobs will not be printed."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "Cancel _print and Close"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "Close _after Printing"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "Toolbar Editor"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "There was an error displaying help"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Document Viewer.\n"
+"Using %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr "Evince is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public Licence as published by the Free Software "
+"Foundation; either version 2 of the Licence, or (at your option) any later "
+"version.\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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 Licence for more "
+"details.\n"
+
+#: ../shell/ev-window.c:4571
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr "You should have received a copy of the GNU General Public Licence along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 The Evince authors"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"David Lodge <[email protected]>\n"
+"James Ogley <[email protected]>\n"
+"Philip Withnall <[email protected]>\n"
+"Bruce Cowan <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d found on this page"
+msgstr[1] "%d found on this page"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "Not found"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% remaining to search"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "_File"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "_Edit"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "_View"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "_Go"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "_Help"
+
+#. File menu
+#: ../shell/ev-window.c:5402 ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "_Open…"
+
+#: ../shell/ev-window.c:5403 ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "Open an existing document"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "Op_en a Copy"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "Open a copy of the current document in a new window"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "_Save a Copy…"
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "Save a copy of the current document"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "_Print…"
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "P_roperties"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "Select _All"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "_Find…"
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "Find a word or phrase in the document"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "T_oolbar"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "Rotate _Left"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "Rotate _Right"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "Save Current Settings as _Default"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "_Reload"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "Reload the document"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "Auto_scroll"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "_First Page"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "Go to the first page"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "_Last Page"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "Go to the last page"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "_Contents"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "_About"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "Leave Fullscreen"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "Leave fullscreen mode"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "Start Presentation"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "Start a presentation"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "_Toolbar"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "Show or hide the toolbar"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "Side _Pane"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "Show or hide the side pane"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "_Continuous"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "Show the entire document"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "_Dual"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "Show two pages at once"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "_Fullscreen"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "Expand the window to fill the screen"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "Pre_sentation"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "Run document as a presentation"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "_Inverted Colours"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "Show page contents with the colours inverted"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "_Open Link"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "_Go To"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "Open in New _Window"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "_Copy Link Address"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "_Save Image As…"
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "Copy _Image"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "Annotation Properties…"
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "_Open Attachment"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "_Save Attachment As…"
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "Adjust the zoom level"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "Navigation"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "Back"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "Move across visited pages"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "Previous"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "Next"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "Zoom In"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "Zoom Out"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "Fit Width"
+
+#: ../shell/ev-window.c:5890 ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "Unable to launch external application."
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "Unable to open external link"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "Couldn't find appropriate format to save image"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "The image could not be saved."
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "Save Image"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "Unable to open attachment"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "The attachment could not be saved."
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "Save Attachment"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Password Required"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "By extension"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATE Document Viewer"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "The page label of the document to display."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "The page number of the document to display."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMBER"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Run evince in fullscreen mode"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Run evince in presentation mode"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Run evince as a previewer"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "The word or phrase to find in the document"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FILE…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Enable thumbnailing of PDF Documents"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Thumbnail command for PDF Documents"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "Page Set_up…"
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Set up the page settings for printing"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DjVu document has incorrect format"
+
+#~ msgid "Print..."
+#~ msgstr "Print…"
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Save a Copy…"
+
+#~ msgid "_Print..."
+#~ msgstr "_Print…"
+
+#~ msgid "_Find..."
+#~ msgstr "_Find…"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "Failed to create file “%s”: %s"
+
+#~ msgid "Search string"
+#~ msgstr "Search string"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "The name of the string to be found"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Case sensitive"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "TRUE for a case sensitive search"
+
+#~ msgid "Highlight color"
+#~ msgstr "Highlight colour"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Colour of highlight for all matches"
+
+#~ msgid "Current color"
+#~ msgstr "Current colour"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Colour of highlight for the current match"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "Recover previous documents?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_Don't Recover"
+
+#~ msgid "_Recover"
+#~ msgstr "_Recover"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Crash Recovery"
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "Couldn't create symlink “%s”: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "Cannot open a copy."
+
+#~ msgid "Co_nnect"
+#~ msgstr "Co_nnect"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "Connect _anonymously"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Connect as u_ser:"
+
+#~ msgid "_Username:"
+#~ msgstr "_Username:"
+
+#~ msgid "_Domain:"
+#~ msgstr "_Domain:"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "_Forget password immediately"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_Remember password until you logout"
+
+#~ msgid "_Remember forever"
+#~ msgstr "_Remember forever"
+
+#~ msgid "File not available"
+#~ msgstr "File not available"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "Remote files aren't supported"
+
+#~ msgid "Password Entry"
+#~ msgstr "Password Entry"
+
+#~ msgid "Remember password for this session"
+#~ msgstr "Remember password for this session"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "Save password in keyring"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f in"
+
+#~ msgid "Find Previous"
+#~ msgstr "Find Previous"
+
+#~ msgid "Find Next"
+#~ msgstr "Find Next"
+
+#~ msgid "Incorrect password"
+#~ msgstr "Incorrect password"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Evince Document Viewer"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "Letter"
+
+#~ msgid "Tabloid"
+#~ msgstr "Tabloid"
+
+#~ msgid "Ledger"
+#~ msgstr "Ledger"
+
+#~ msgid "Legal"
+#~ msgstr "Legal"
+
+#~ msgid "Statement"
+#~ msgstr "Statement"
+
+#~ msgid "Executive"
+#~ msgstr "Executive"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Folio"
+
+#~ msgid "Quarto"
+#~ msgstr "Quarto"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "Cannot open file “%s”."
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "Encapsulated PostScript"
+
+#~ msgid "PostScript"
+#~ msgstr "PostScript"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "Interpreter failed."
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "Unhandled MIME type: “%s”"
+
+#~ msgid "Images"
+#~ msgstr "Images"
+
+#~ msgid "Open “%s”"
+#~ msgstr "Open “%s”"
+
+#~ msgid "Empty"
+#~ msgstr "Empty"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "Generating PDF is not supported"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+
+#~ msgid "Pages"
+#~ msgstr "Pages"
+
+#~ msgid "Invalid URI: “%s”"
+#~ msgstr "Invalid URI: “%s”"
+
+#~ msgid "No document loaded."
+#~ msgstr "No document loaded."
+
+#~ msgid "File is not readable."
+#~ msgstr "File is not readable."
+
+#~ msgid "Document loaded."
+#~ msgstr "Document loaded."
+
+#~ msgid "Broken pipe."
+#~ msgstr "Broken pipe."
+
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "Error while decompressing file “%s”:\n"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "Default sidebar size"
+#~ msgstr "Default sidebar size"
+
+#~ msgid "Show sidebar by default"
+#~ msgstr "Show sidebar by default"
+
+#~ msgid "Show statusbar by default"
+#~ msgstr "Show statusbar by default"
+
+#~ msgid "Show toolbar by default"
+#~ msgstr "Show toolbar by default"
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. The "
+#~ "default size sets the sidebar's width in pixels based from the side of "
+#~ "the window. Any integer will be accepted. The sidebar will never shrink "
+#~ "smaller than the size of the text required to display Thumbnails or "
+#~ "Index. Large values will cause the sidebar to take up as much of the page "
+#~ "display area as possible relative to the window's size."
+#~ msgstr ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. The "
+#~ "default size sets the sidebar's width in pixels based from the side of "
+#~ "the window. Any integer will be accepted. The sidebar will never shrink "
+#~ "smaller than the size of the text required to display Thumbnails or "
+#~ "Index. Large values will cause the sidebar to take up as much of the page "
+#~ "display area as possible relative to the window's size."
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. Two "
+#~ "boolean options, true makes sidebar visible by default while false makes "
+#~ "sidebar not visible by default"
+#~ msgstr ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. Two "
+#~ "boolean options, true makes sidebar visible by default while false makes "
+#~ "sidebar not visible by default"
+
+#~ msgid ""
+#~ "Statusbar is the standard bottom bar that display additional information "
+#~ "about links and other actions. Two boolean options, true makes the "
+#~ "statusbar visible by default while false makes sidebar not visible by "
+#~ "default."
+#~ msgstr ""
+#~ "Statusbar is the standard bottom bar that display additional information "
+#~ "about links and other actions. Two boolean options, true makes the "
+#~ "statusbar visible by default while false makes sidebar not visible by "
+#~ "default."
+
+#~ msgid ""
+#~ "Toolbar is the top bar that contains navigation and zoom controls. Two "
+#~ "boolean options, true makes toolbar visible by default while false makes "
+#~ "toolbar not visible by default."
+#~ msgstr ""
+#~ "Toolbar is the top bar that contains navigation and zoom controls. Two "
+#~ "boolean options, true makes toolbar visible by default while false makes "
+#~ "toolbar not visible by default."
+
+#~ msgid "_Previous"
+#~ msgstr "_Previous"
+
+#~ msgid "_Next"
+#~ msgstr "_Next"
+
+#~ msgid "Unable to find glade file"
+#~ msgstr "Unable to find glade file"
+
+#~ msgid ""
+#~ "The glade file, %s, cannot be found. Please check that your installation "
+#~ "is complete."
+#~ msgstr ""
+#~ "The glade file, %s, cannot be found. Please check that your installation "
+#~ "is complete."
+
+#~ msgid "Document Viewer - Password Required"
+#~ msgstr "Document Viewer — Password Required"
+
+#~ msgid "The \"Find\" feature will not work with this document"
+#~ msgstr "The \"Find\" feature will not work with this document"
+
+#~ msgid "Searching for text is only supported for PDF documents."
+#~ msgstr "Searching for text is only supported for PDF documents."
+
+#~ msgid "Save the current document with a new filename"
+#~ msgstr "Save the current document with a new filename"
+
+#~ msgid "View the properties of this document"
+#~ msgstr "View the properties of this document"
+
+#~ msgid "Close this window"
+#~ msgstr "Close this window"
+
+#~ msgid "Copy text from the document"
+#~ msgstr "Copy text from the document"
+
+#~ msgid "Select the entire page"
+#~ msgstr "Select the entire page"
+
+#~ msgid "Customize the toolbar"
+#~ msgstr "Customise the toolbar"
+
+#~ msgid "Rotate the document to the left"
+#~ msgstr "Rotate the document to the left"
+
+#~ msgid "Rotate the document to the right"
+#~ msgstr "Rotate the document to the right"
+
+#~ msgid "Display help for the viewer application"
+#~ msgstr "Display help for the viewer application"
+
+#~ msgid "Display credits for the document viewer creators"
+#~ msgstr "Display credits for the document viewer creators"
+
+#~ msgid "Scroll one page forward"
+#~ msgstr "Scroll one page forward"
+
+#~ msgid "Scroll one page backward"
+#~ msgstr "Scroll one page backward"
+
+#~ msgid "Focus the page selector"
+#~ msgstr "Focus the page selector"
+
+#~ msgid "Go ten pages backward"
+#~ msgstr "Go ten pages backward"
+
+#~ msgid "Go ten pages forward"
+#~ msgstr "Go ten pages forward"
+
+#~ msgid "_Statusbar"
+#~ msgstr "_Statusbar"
+
+#~ msgid "Show or hide the statusbar"
+#~ msgstr "Show or hide the statusbar"
+
+#~ msgid "Name"
+#~ msgstr "Name"
+
+#~ msgid "<span size=\"smaller\"> </span>"
+#~ msgstr "<span size=\"smaller\"> </span>"
+
+#~ msgid "unexpected EOF\n"
+#~ msgstr "unexpected EOF\n"
+
+#~ msgid "could not load font `%s'\n"
+#~ msgstr "could not load font `%s'\n"
+
+#~ msgid "could not reload `%s'\n"
+#~ msgstr "could not reload `%s'\n"
+
+#~ msgid "%s: unsupported DVI format (version %u)\n"
+#~ msgstr "%s: unsupported DVI format (version %u)\n"
+
+#~ msgid "%s: File corrupted, or not a DVI file\n"
+#~ msgstr "%s: File corrupted, or not a DVI file\n"
+
+#~ msgid "%s: vf macro had errors\n"
+#~ msgstr "%s: vf macro had errors\n"
+
+#~ msgid "%s: stack not empty after vf macro\n"
+#~ msgstr "%s: stack not empty after vf macro\n"
+
+#~ msgid "%s: could not reopen file (%s)\n"
+#~ msgstr "%s: could not reopen file (%s)\n"
+
+#~ msgid "%s: page %d out of range\n"
+#~ msgstr "%s: page %d out of range\n"
+
+#~ msgid "%s: bad offset at page %d\n"
+#~ msgstr "%s: bad offset at page %d\n"
+
+#~ msgid "stack not empty at end of page\n"
+#~ msgstr "stack not empty at end of page\n"
+
+#~ msgid "no default font set yet\n"
+#~ msgstr "no default font set yet\n"
+
+#~ msgid "requested character %d does not exist in `%s'\n"
+#~ msgstr "requested character %d does not exist in `%s'\n"
+
+#~ msgid "enlarging stack\n"
+#~ msgstr "enlarging stack\n"
+
+#~ msgid "stack underflow\n"
+#~ msgstr "stack underflow\n"
+
+#~ msgid "font %d is not defined\n"
+#~ msgstr "font %d is not defined\n"
+
+#~ msgid "font %d is not defined in postamble\n"
+#~ msgstr "font %d is not defined in postamble\n"
+
+#~ msgid "unexpected opcode %d\n"
+#~ msgstr "unexpected opcode %d\n"
+
+#~ msgid "undefined opcode %d\n"
+#~ msgstr "undefined opcode %d\n"
+
+#~ msgid "%s: no fonts defined\n"
+#~ msgstr "%s: no fonts defined\n"
+
+#~ msgid "%s: %d: [%s] requested encoding `%s' does not match vector `%s'\n"
+#~ msgstr "%s: %d: [%s] requested encoding `%s' does not match vector `%s'\n"
+
+#~ msgid "%s: could not load fontmap\n"
+#~ msgstr "%s: could not load fontmap\n"
+
+#~ msgid "%s: could not set as default encoding\n"
+#~ msgstr "%s: could not set as default encoding\n"
+
+#~ msgid "encoding vector `%s' is in use\n"
+#~ msgstr "encoding vector `%s' is in use\n"
+
+#~ msgid "GF: invalid opcode %d in character %d\n"
+#~ msgstr "GF: invalid opcode %d in character %d\n"
+
+#~ msgid "(gf) Character %d: invalid opcode %d\n"
+#~ msgstr "(gf) Character %d: invalid opcode %d\n"
+
+#~ msgid "(gf) character %d has an incorrect bounding box\n"
+#~ msgstr "(gf) character %d has an incorrect bounding box\n"
+
+#~ msgid "%s: bad checksum (expected %u, found %u)\n"
+#~ msgstr "%s: bad checksum (expected %u, found %u)\n"
+
+#~ msgid "%s: junk in postamble\n"
+#~ msgstr "%s: junk in postamble\n"
+
+#~ msgid "%s: File corrupted, or not a GF file\n"
+#~ msgstr "%s: File corrupted, or not a GF file\n"
+
+#~ msgid "garbage after DVI page specification ignored\n"
+#~ msgstr "garbage after DVI page specification ignored\n"
+
+#~ msgid "more than 10 counters in page specification\n"
+#~ msgstr "more than 10 counters in page specification\n"
+
+#~ msgid "garbage after TeX page specification ignored\n"
+#~ msgstr "garbage after TeX page specification ignored\n"
+
+#~ msgid "custom"
+#~ msgstr "custom"
+
+#~ msgid "Bad PK file: More bits than required\n"
+#~ msgstr "Bad PK file: More bits than required\n"
+
+#~ msgid "%s: checksum mismatch (expected %u, got %u)\n"
+#~ msgstr "%s: checksum mismatch (expected %u, got %u)\n"
+
+#~ msgid "%s: unexpected preamble\n"
+#~ msgstr "%s: unexpected preamble\n"
+
+#~ msgid "%s: unexpected end of file (no postamble)\n"
+#~ msgstr "%s: unexpected end of file (no postamble)\n"
+
+#~ msgid "invalid PK file! (junk in postamble)\n"
+#~ msgstr "invalid PK file! (junk in postamble)\n"
+
+#~ msgid "%s: File corrupted, or not a PK file\n"
+#~ msgstr "%s: File corrupted, or not a PK file\n"
+
+#~ msgid "%s: malformed value for key `%s'\n"
+#~ msgstr "%s: malformed value for key `%s'\n"
+
+#~ msgid "%s: unknown key `%s' ignored\n"
+#~ msgstr "%s: unknown key `%s' ignored\n"
+
+#~ msgid "%s: no argument for key `%s', using defaults\n"
+#~ msgstr "%s: no argument for key `%s', using defaults\n"
+
+#~ msgid "%s: argument `%s' ignored for key `%s'\n"
+#~ msgstr "%s: argument `%s' ignored for key `%s'\n"
+
+#~ msgid "%s: tried to pop top level layer\n"
+#~ msgstr "%s: tried to pop top level layer\n"
+
+#~ msgid "(t1) failed to reset device resolution\n"
+#~ msgstr "(t1) failed to reset device resolution\n"
+
+#~ msgid "%s: could not encode font\n"
+#~ msgstr "%s: could not encode font\n"
+
+#~ msgid "(t1) unsupported bitmap pad size %d\n"
+#~ msgstr "(t1) unsupported bitmap pad size %d\n"
+
+#~ msgid "%s: Checksum mismatch (got %u, expected %u)\n"
+#~ msgstr "%s: Checksum mismatch (got %u, expected %u)\n"
+
+#~ msgid "%s: Error reading AFM data\n"
+#~ msgstr "%s: Error reading AFM data\n"
+
+#~ msgid "Warning: TFM file `%s' has suspicious size\n"
+#~ msgstr "Warning: TFM file `%s' has suspicious size\n"
+
+#~ msgid "%s: font coding scheme truncated to 40 bytes\n"
+#~ msgstr "%s: font coding scheme truncated to 40 bytes\n"
+
+#~ msgid "%s: File corrupted, or not a TFM file\n"
+#~ msgstr "%s: File corrupted, or not a TFM file\n"
+
+#~ msgid "(tt) %s: could not load face: %s\n"
+#~ msgstr "(tt) %s: could not load face: %s\n"
+
+#~ msgid "(tt) %s: could not create face: %s\n"
+#~ msgstr "(tt) %s: could not create face: %s\n"
+
+#~ msgid "(tt) %s: could not create glyph: %s\n"
+#~ msgstr "(tt) %s: could not create glyph: %s\n"
+
+#~ msgid "(tt) %s: no acceptable map found, using #0\n"
+#~ msgstr "(tt) %s: no acceptable map found, using #0\n"
+
+#~ msgid "(tt) %s: could not set resolution: %s\n"
+#~ msgstr "(tt) %s: could not set resolution: %s\n"
+
+#~ msgid "(tt) %s: could not set point size: %s\n"
+#~ msgstr "(tt) %s: could not set point size: %s\n"
+
+#~ msgid "(tt) %s: could not load PS name table\n"
+#~ msgstr "(tt) %s: could not load PS name table\n"
+
+#~ msgid "%s: no encoding vector found, expect bad output\n"
+#~ msgstr "%s: no encoding vector found, expect bad output\n"
+
+#~ msgid "(tt) %s: no font metric data\n"
+#~ msgstr "(tt) %s: no font metric data\n"
+
+#~ msgid "Crashing"
+#~ msgstr "Crashing"
+
+#~ msgid "%s: Warning: "
+#~ msgstr "%s: Warning: "
+
+#~ msgid "%s: Fatal: "
+#~ msgstr "%s: Fatal: "
+
+#~ msgid "Fatal"
+#~ msgstr "Fatal"
+
+#~ msgid "out of memory allocating %u bytes\n"
+#~ msgstr "out of memory allocating %u bytes\n"
+
+#~ msgid "attempted to reallocate with zero size\n"
+#~ msgstr "attempted to reallocate with zero size\n"
+
+#~ msgid "failed to reallocate %u bytes\n"
+#~ msgstr "failed to reallocate %u bytes\n"
+
+#~ msgid "attempted to callocate 0 members\n"
+#~ msgstr "attempted to callocate 0 members\n"
+
+#~ msgid "attempted to callocate %u members with size 0\n"
+#~ msgstr "attempted to callocate %u members with size 0\n"
+
+#~ msgid "failed to allocate %ux%u bytes\n"
+#~ msgstr "failed to allocate %ux%u bytes\n"
+
+#~ msgid "attempted to free NULL pointer\n"
+#~ msgstr "attempted to free NULL pointer\n"
+
+#~ msgid "%s: Checksum mismatch (expected %u, got %u)\n"
+#~ msgstr "%s: Checksum mismatch (expected %u, got %u)\n"
+
+#~ msgid "(vf) %s: could not load font `%s'\n"
+#~ msgstr "(vf) %s: could not load font `%s'\n"
+
+#~ msgid "(vf) %s: character %d redefined\n"
+#~ msgstr "(vf) %s: character %d redefined\n"
+
+#~ msgid "(vf) %s: no postamble\n"
+#~ msgstr "(vf) %s: no postamble\n"
+
+#~ msgid "%s: File corrupted, or not a VF file.\n"
+#~ msgstr "%s: File corrupted, or not a VF file.\n"
+
+#~ msgid "Error while scanning file %s\n"
+#~ msgstr "Error while scanning file %s\n"
+
+#~ msgid "The file is not a PostScript document."
+#~ msgstr "The file is not a PostScript document."
+
+#~ msgid "Many..."
+#~ msgstr "Many…"
+
+#~ msgid "Not so many..."
+#~ msgstr "Not so many…"
+
+#~ msgid "Reset the zoom level to the default value"
+#~ msgstr "Reset the zoom level to the default value"
+
+#~ msgid "Selection Caret"
+#~ msgstr "Selection Caret"
+
+#~ msgid "Single"
+#~ msgstr "Single"
+
+#~ msgid "Show the document one page at a time"
+#~ msgstr "Show the document one page at a time"
+
+#~ msgid "Multi"
+#~ msgstr "Multi"
+
+#~ msgid "Show the full document at once"
+#~ msgstr "Show the full document at once"
diff --git a/po/eo.po b/po/eo.po
new file mode 100644
index 00000000..e0912a39
--- /dev/null
+++ b/po/eo.po
@@ -0,0 +1,1648 @@
+# Esperanto translation for evince
+# Copyright (c) (c) 2005 Canonical Ltd, and Rosetta Contributors 2005
+# This file is distributed under the same license as the evince package.
+# Dominique PELLÉ <[email protected]>, 2005.
+# Kristjan SCHMIDT <[email protected]>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-06-11 11:35+0000\n"
+"PO-Revision-Date: 2010-06-20 10:01+0200\n"
+"Last-Translator: Kristjan SCHMIDT <[email protected]>\n"
+"Language-Team: Esperanto <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1\n"
+"X-Launchpad-Export-Date: 2010-06-11 16:12+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Eraro dum rulado de komando \"%s\" por maldensigi la bildstrian libron: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "La komando \"%s\" malsukcesis maldensigi la bildstrian libron."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "La komando \"%s\" finiĝis nenormale."
+
+#: ../backend/comics/comics-document.c:418
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Ne estas MIME-tipo de bildstria libro: %s"
+
+#: ../backend/comics/comics-document.c:425
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Mi ne trovas taŭgan komandon por maldensigi tiun ĉi tipon de bildstria libro."
+
+#: ../backend/comics/comics-document.c:463
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Nekonata MIME-a tipo"
+
+#: ../backend/comics/comics-document.c:490
+msgid "File corrupted"
+msgstr "Damaĝita dosiero"
+
+#: ../backend/comics/comics-document.c:503
+msgid "No files in archive"
+msgstr "Neniu dosiero en arkivo"
+
+#: ../backend/comics/comics-document.c:542
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Trovis neniun bildon en arkivo %s"
+
+#: ../backend/comics/comics-document.c:786
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Okazis eraro dum forigo de \"%s\"."
+
+#: ../backend/comics/comics-document.c:925
+#, c-format
+msgid "Error %s"
+msgstr "Eraro %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Komiksolibroj"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu-dokumento havas malĝustan strukturon."
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Tiu ĉi dokumento konsistas el pluraj dosieroj. Almenaŭ unu el ili estas ne "
+"atingebla."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu-dokumentoj"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "La DVI-dokumento havas nekorektan formaton"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI-dokumentoj"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr "Tiu ĉi verko estas publika havaĵo."
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "Jes"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "Ne"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "Tipo 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "Tipo 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "Tipo 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "Trutajpa"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "Tipo 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "Tipo 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "Trutajpa (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "Nekonata tipo de tiparo"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "Neniu nomo"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "Enkorpigita subaro"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "Enkorpigite"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "Ne enkorpigite"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF-dokumentoj"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Nevalida dokumento"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+#, fuzzy
+msgid "Impress Slides"
+msgstr "Printi prezentaĵoj"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Neniu eraro"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Ne sufiĉe da memoro"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Ne eblas trovi ZIP-subskribon"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Nevalida ZIP-dosiero"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Plur-dosieraj ZIP-arkivoj ne estas subtenataj."
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Ne eblas malfermi la dosieron"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Ne eblas legi datumojn el dosiero"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Ne eblas trovi dosieron en la ZIP-dosiero"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Nekonata eraro"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Malsukcesis ŝarĝado de dokumento “%s”"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Malsukcesis konservado de dokumento “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostSkripto-dokumentoj"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Ne povis konservi kunsendaĵon “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Ne povis malfermi kunsendaĵon “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Ne povis malfermi kunsendaĵon “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Dosiertipo %s (%s) ne estas subtenata"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Ĉiuj dokumentoj"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Ĉiuj dosieroj"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr ""
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Dosiero ne estas valida .desktop-dosiero"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Nerekonata versio '%s' de labortabla dosiero"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Lanĉante %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Aplikaĵo ne akceptas dokumentojn per komandlinio"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Nerekonata lanĉparametro: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Ne eblas transdoni URI-dokumentojn al labortabla elemento 'Type=Link'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Nelanĉebla ero"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Elŝalti konekton al seanco-administrilo"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Specifi dosieron kiun enhavas konservitan agordon"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "DOSIERO"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Specifi seancoadministran identigilon"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opcioj de seancoadministrilo:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Montri opciojn de la seancoadministrilo"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Montri \"_%s\""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Movi sur ilobreto"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Movi la elektitan eron sur la ilobreto"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "Fo_rigi de la ilobreto"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Forigi la elektitan eron el la ilobreto"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Forigi ilobreton"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Forigi la elektitan ilobreton"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Apartigilo"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:101
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:176
+msgid "Running in presentation mode"
+msgstr "Lanĉante prezentaĵe"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5403
+msgid "Best Fit"
+msgstr "Pli bona adapto"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Adapti al la paĝa larĝo"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4254
+#: ../shell/ev-window-title.c:149 ../shell/main.c:313
+#, c-format
+msgid "Document Viewer"
+msgstr "Dokumentrigardilo"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr ""
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Superskribi rajtlimigojn de dokumento"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Superskribi rajtlimigojn de dokumento, kiel rajtlimigo por kopii aŭ printi."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr ""
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr ""
+
+#: ../previewer/ev-previewer.c:147 ../previewer/ev-previewer.c:181
+msgid "MATE Document Previewer"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3017
+msgid "Failed to print document"
+msgstr "Malsukcesis malfermi dokumenton"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr ""
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5152
+msgid "_Previous Page"
+msgstr "_Antaŭa paĝo"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5153
+msgid "Go to the previous page"
+msgstr "Iri al la antaŭa paĝo"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5155
+msgid "_Next Page"
+msgstr "_Sekva paĝo"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5156
+msgid "Go to the next page"
+msgstr "Iri al la sekva paĝo"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5139
+msgid "Enlarge the document"
+msgstr "Pligrandigi la dokumenton"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5142
+msgid "Shrink the document"
+msgstr "Malpligrandigi la dokumenton"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Printi"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5110
+msgid "Print this document"
+msgstr "Printi tiun dokumenton"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5254
+msgid "_Best Fit"
+msgstr "_Plej bona adekvateco"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5255
+msgid "Make the current document fill the window"
+msgstr "Fari ke la aktuala dokumento plenumos la fenestron"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5257
+msgid "Fit Page _Width"
+msgstr "Laŭ _larĝeco de paĝo"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5258
+msgid "Make the current document fill the window width"
+msgstr "Plenigi la larĝecon de la fenestro"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5325
+msgid "Page"
+msgstr "Paĝo"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5326
+msgid "Select Page"
+msgstr "Elekti paĝon"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokumento"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Titolo:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Situo:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Temo:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "Aŭtoro:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Ŝlosilvortoj:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Kreanto:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Kreinto:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Kreita:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Modifite:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Nombro de paĝoj:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimumigite:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Formato:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Datumsekurigo:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Papergrando:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Neniu"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:284
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:288
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr ""
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Portreto (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Pejzaĝo (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d de %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "de %d"
+
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Ŝargante..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Pretiganta por printi..."
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Finigante..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Printi ne estas subtenata ĉe tiu printilo."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Averto"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr ""
+
+#: ../libview/ev-jobs.c:1438
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr ""
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Rulumi supren"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Rulumi suben"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Rulumi vidpanelon supren"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Rulumi vidpanelon suben"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Vido de dokumento"
+
+#: ../libview/ev-view-presentation.c:673
+msgid "Jump to page:"
+msgstr "Salti al la paĝo:"
+
+#: ../libview/ev-view-presentation.c:969
+msgid "End of presentation. Click to exit."
+msgstr ""
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Iri al la unua paĝo"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Iri al la antaŭa paĝo"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Iri al la sekva paĝo"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Iri al la lasta paĝo"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Iri al paĝo"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Trovi"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Iri al paĝo %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Iri al %s en dosiero “%s”"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Iri al dosiero “%s”"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Lanĉi %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Trovi:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5127
+msgid "Find Pre_vious"
+msgstr "Trovi _antaŭan"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Trovi antaŭan aperon de la serĉata ĉeno"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5125
+msgid "Find Ne_xt"
+msgstr "Trovi se_kvan"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Trovi sekvan aperon de la serĉata ĉeno"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Us_klecodistinga"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Baskuli usklecodistingan traserĉon"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Pasvorto por dokumento %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Malfermi lasttempe uzita dokumenton"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Tiu dokumento estas ŝlosita kaj nur estos legebla per la ĝusta pasvorto."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Malŝlosi dokumenton"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Enigi pasvorton"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Pasvorto bezonata"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "La dokumento “%s” estas ŝlosita kaj bezonas pasvorton por malfermado."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Pasvorto:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "_Forgesi pasvorton tuj"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr ""
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Memori porĉiame"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Atributoj"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Ĝenerala"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Tiparoj"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr ""
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Tiparo"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr ""
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Kunsendaĵoj"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Tavoloj"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Printi..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Indekso"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Antaŭvidaj bildetoj"
+
+#: ../shell/ev-window.c:835
+#, c-format
+msgid "Page %s — %s"
+msgstr "Paĝo %s — %s"
+
+#: ../shell/ev-window.c:837
+#, c-format
+msgid "Page %s"
+msgstr "Paĝo %s"
+
+#: ../shell/ev-window.c:1297
+msgid "The document contains no pages"
+msgstr "Tiu dokumento ne enhavas paĝojn"
+
+#: ../shell/ev-window.c:1300
+msgid "The document contains only empty pages"
+msgstr ""
+
+#: ../shell/ev-window.c:1494 ../shell/ev-window.c:1660
+msgid "Unable to open document"
+msgstr "Ne eblis malfermi dokumenton"
+
+#: ../shell/ev-window.c:1631
+#, c-format
+msgid "Loading document from “%s”"
+msgstr ""
+
+#: ../shell/ev-window.c:1773 ../shell/ev-window.c:2051
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:1806
+msgid "Failed to load remote file."
+msgstr ""
+
+#: ../shell/ev-window.c:1995
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Reŝargi la dokumenton de %s"
+
+#: ../shell/ev-window.c:2027
+msgid "Failed to reload document."
+msgstr "Malsukcesis reŝaĝi dokumenton."
+
+#: ../shell/ev-window.c:2182
+msgid "Open Document"
+msgstr "Malfermi dokumenton"
+
+#: ../shell/ev-window.c:2480
+#, c-format
+msgid "Saving document to %s"
+msgstr ""
+
+#: ../shell/ev-window.c:2483
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Konservi kunsendaĵon al %s"
+
+#: ../shell/ev-window.c:2486
+#, c-format
+msgid "Saving image to %s"
+msgstr "Konservi bildon al %s"
+
+#: ../shell/ev-window.c:2530 ../shell/ev-window.c:2630
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "La dosiero ne povas esti konservita kiel “%s”."
+
+#: ../shell/ev-window.c:2561
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Alŝuti dikumenton (%d%%)"
+
+#: ../shell/ev-window.c:2565
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Alŝutante kunsendaĵon (%d%%)"
+
+#: ../shell/ev-window.c:2569
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Alŝuti bildon (%d%%)"
+
+#: ../shell/ev-window.c:2693
+msgid "Save a Copy"
+msgstr "Konservi kopion"
+
+#: ../shell/ev-window.c:2961
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../shell/ev-window.c:3074
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Print-tasko “%s”"
+
+#: ../shell/ev-window.c:3286
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr ""
+
+#: ../shell/ev-window.c:3289
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+
+#: ../shell/ev-window.c:3301
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+
+#: ../shell/ev-window.c:3305
+msgid "Cancel _print and Close"
+msgstr ""
+
+#: ../shell/ev-window.c:3309
+msgid "Close _after Printing"
+msgstr "Fermi _post printo"
+
+#: ../shell/ev-window.c:3899
+msgid "Toolbar Editor"
+msgstr "Redaktilo de ilobreto"
+
+#: ../shell/ev-window.c:4038
+msgid "There was an error displaying help"
+msgstr ""
+
+#: ../shell/ev-window.c:4250
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+
+#: ../shell/ev-window.c:4281
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince estas libera programo; vi povas pludisdoni kopiojn kaj modifi ĝin sub "
+"la kondiĉoj de la Ĝenerala Publika Rajtigilo de GNU, kiel tio estas eldonita "
+"de Free Software Foundation; aŭ versio 2 de la rajtigilo, aŭ (laŭ via "
+"elekto) iu sekva versio.\n"
+
+#: ../shell/ev-window.c:4285
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince estas disdonita kun la espero, ke ĝi estos utila, sed SEN IA AJN "
+"GARANTIO; eĉ sen la implicita garantio de KOMERCA KVALITO aŭ ADEKVATECO POR "
+"DIFINITA CELO. Vidu la Ĝeneralan Publikan Rajtigilon de GNU por pli da "
+"detaloj.\n"
+
+#: ../shell/ev-window.c:4289
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Vi devus esti ricevinta kopion de la Ĝenerala Publika Permesilo de GNU kun "
+"Evince; se ne, skribu al Free Software Foundation, Inc., 51 Franklin Street, "
+"Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4314
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4317
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 La aŭtoroj de Evince"
+
+#: ../shell/ev-window.c:4323
+msgid "translator-credits"
+msgstr ""
+"Dominique PELLÉ <[email protected]>\n"
+"Kristjan SCHMIDT <[email protected]>\n"
+"Launchpad Contributions:\n"
+" Aisano https://launchpad.net/~info-ais-sanmarino\n"
+" Andreas Schlapsi https://launchpad.net/~a-schlapsi\n"
+" Michael MORONI https://launchpad.net/~haikara90\n"
+" Sergio Aldana https://launchpad.net/~sangtrinkulo\n"
+" William Theaker https://launchpad.net/~wsttrollboy"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4597
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "Trovis %d en tiu paĝo"
+msgstr[1] "Trovis %d en tiu paĝo"
+
+#: ../shell/ev-window.c:4605
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Restas %3d%% por traserĉi"
+
+#: ../shell/ev-window.c:5093
+msgid "_File"
+msgstr "_Dosiero"
+
+#: ../shell/ev-window.c:5094
+msgid "_Edit"
+msgstr "_Redakti"
+
+#: ../shell/ev-window.c:5095
+msgid "_View"
+msgstr "_Vidi"
+
+#: ../shell/ev-window.c:5096
+msgid "_Go"
+msgstr "_Ek"
+
+#: ../shell/ev-window.c:5097
+msgid "_Help"
+msgstr "_Helpo"
+
+#. File menu
+#: ../shell/ev-window.c:5100 ../shell/ev-window.c:5365
+msgid "_Open…"
+msgstr "_Malfermi…"
+
+#: ../shell/ev-window.c:5101 ../shell/ev-window.c:5366
+msgid "Open an existing document"
+msgstr "Malfermi ekzistan dokumenton"
+
+#: ../shell/ev-window.c:5103
+msgid "Op_en a Copy"
+msgstr "Mal_fermi kopion"
+
+#: ../shell/ev-window.c:5104
+msgid "Open a copy of the current document in a new window"
+msgstr "Malfermi kopion de kuranta dokumento en nova fenestro"
+
+#: ../shell/ev-window.c:5106
+msgid "_Save a Copy…"
+msgstr "Kon_servi kopion..."
+
+#: ../shell/ev-window.c:5107
+msgid "Save a copy of the current document"
+msgstr "Konservi kaj kopii la aktualan dokumenton"
+
+#: ../shell/ev-window.c:5109
+msgid "_Print…"
+msgstr "_Printi…"
+
+#: ../shell/ev-window.c:5112
+msgid "P_roperties"
+msgstr "At_ributoj"
+
+#: ../shell/ev-window.c:5120
+msgid "Select _All"
+msgstr "Elekti ĉi_on"
+
+#: ../shell/ev-window.c:5122
+msgid "_Find…"
+msgstr "_Trovi..."
+
+#: ../shell/ev-window.c:5123
+msgid "Find a word or phrase in the document"
+msgstr "Trovi vorton aŭ frazon en la dokumento"
+
+#: ../shell/ev-window.c:5129
+msgid "T_oolbar"
+msgstr "_Ilobreto"
+
+#: ../shell/ev-window.c:5131
+msgid "Rotate _Left"
+msgstr "Turni _maldekstren"
+
+#: ../shell/ev-window.c:5133
+msgid "Rotate _Right"
+msgstr "Turni _dekstren"
+
+#: ../shell/ev-window.c:5144
+msgid "_Reload"
+msgstr "_Reŝargi"
+
+#: ../shell/ev-window.c:5145
+msgid "Reload the document"
+msgstr "Reŝargi la dokumenton"
+
+#: ../shell/ev-window.c:5148
+msgid "Auto_scroll"
+msgstr "Aŭtomata _rulumado"
+
+#: ../shell/ev-window.c:5158
+msgid "_First Page"
+msgstr "_Unua paĝo"
+
+#: ../shell/ev-window.c:5159
+msgid "Go to the first page"
+msgstr "Iri al la unua paĝo"
+
+#: ../shell/ev-window.c:5161
+msgid "_Last Page"
+msgstr "_Lasta paĝo"
+
+#: ../shell/ev-window.c:5162
+msgid "Go to the last page"
+msgstr "Iri al la lasta paĝo"
+
+#. Help menu
+#: ../shell/ev-window.c:5166
+msgid "_Contents"
+msgstr "_Enhavo"
+
+#: ../shell/ev-window.c:5169
+msgid "_About"
+msgstr "_Pri"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5173
+msgid "Leave Fullscreen"
+msgstr "Eliri el plenekrana reĝimo"
+
+#: ../shell/ev-window.c:5174
+msgid "Leave fullscreen mode"
+msgstr "Eliri el plenekrana reĝimo"
+
+#: ../shell/ev-window.c:5176
+msgid "Start Presentation"
+msgstr "Komenci prezentadon"
+
+#: ../shell/ev-window.c:5177
+msgid "Start a presentation"
+msgstr "Komenci prezentadon"
+
+#. View Menu
+#: ../shell/ev-window.c:5236
+msgid "_Toolbar"
+msgstr "_Ilobreto"
+
+#: ../shell/ev-window.c:5237
+msgid "Show or hide the toolbar"
+msgstr "Montri aŭ kaŝi la ilobreton"
+
+#: ../shell/ev-window.c:5239
+msgid "Side _Pane"
+msgstr "Flanka _panelo"
+
+#: ../shell/ev-window.c:5240
+msgid "Show or hide the side pane"
+msgstr "Montri aŭ kaŝi la flankan panelon"
+
+#: ../shell/ev-window.c:5242
+msgid "_Continuous"
+msgstr "_Longdaŭra"
+
+#: ../shell/ev-window.c:5243
+msgid "Show the entire document"
+msgstr "Montri la tutan dokumenton"
+
+#: ../shell/ev-window.c:5245
+msgid "_Dual"
+msgstr "_Duobla"
+
+#: ../shell/ev-window.c:5246
+msgid "Show two pages at once"
+msgstr "Montri du paĝojn samtempe"
+
+#: ../shell/ev-window.c:5248
+msgid "_Fullscreen"
+msgstr "_Plenekrane"
+
+#: ../shell/ev-window.c:5249
+msgid "Expand the window to fill the screen"
+msgstr "Ekspansii la fenestran por plenigi la ekranon"
+
+#: ../shell/ev-window.c:5251
+msgid "Pre_sentation"
+msgstr "Pre_zentaĵo"
+
+#: ../shell/ev-window.c:5252
+msgid "Run document as a presentation"
+msgstr "Ruli dokumenton kiel prezentaĵo"
+
+#: ../shell/ev-window.c:5260
+msgid "_Inverted Colors"
+msgstr "_Inversigitaj koloroj"
+
+#: ../shell/ev-window.c:5261
+msgid "Show page contents with the colors inverted"
+msgstr "Montri paĝ-enhavon per inversigitaj koloroj."
+
+#. Links
+#: ../shell/ev-window.c:5269
+msgid "_Open Link"
+msgstr "_Malfermi ligilon"
+
+#: ../shell/ev-window.c:5271
+msgid "_Go To"
+msgstr "_Iri al"
+
+#: ../shell/ev-window.c:5273
+msgid "Open in New _Window"
+msgstr "Malfermi en nova _fenestro"
+
+#: ../shell/ev-window.c:5275
+msgid "_Copy Link Address"
+msgstr "_Kopii adreson de ligilo"
+
+#: ../shell/ev-window.c:5277
+msgid "_Save Image As…"
+msgstr "Kon_servi bildon kiel..."
+
+#: ../shell/ev-window.c:5279
+msgid "Copy _Image"
+msgstr "Kopii _bildon"
+
+#: ../shell/ev-window.c:5284
+msgid "_Open Attachment"
+msgstr "_Malfermi kunsendaĵon"
+
+#: ../shell/ev-window.c:5286
+msgid "_Save Attachment As…"
+msgstr "Kon_servi kunsendaĵon kiel..."
+
+#: ../shell/ev-window.c:5339
+msgid "Zoom"
+msgstr "Zomo"
+
+#: ../shell/ev-window.c:5341
+msgid "Adjust the zoom level"
+msgstr "Ĝustigi la nivelon de zomo"
+
+#: ../shell/ev-window.c:5351
+msgid "Navigation"
+msgstr "Navigado"
+
+#: ../shell/ev-window.c:5353
+msgid "Back"
+msgstr "Malantaŭen"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5356
+msgid "Move across visited pages"
+msgstr "Moviĝi inter vizititaj paĝoj"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5386
+msgid "Previous"
+msgstr "Antaŭa"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5391
+msgid "Next"
+msgstr "Sekva"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5395
+msgid "Zoom In"
+msgstr "Zomi"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5399
+msgid "Zoom Out"
+msgstr "Malzomi"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5407
+msgid "Fit Width"
+msgstr "Adekvatigi larĝecon"
+
+#: ../shell/ev-window.c:5568 ../shell/ev-window.c:5585
+msgid "Unable to launch external application."
+msgstr ""
+
+#: ../shell/ev-window.c:5642
+msgid "Unable to open external link"
+msgstr "Malsukcesis malfermi eksteran ligilon"
+
+#: ../shell/ev-window.c:5809
+msgid "Couldn't find appropriate format to save image"
+msgstr ""
+
+#: ../shell/ev-window.c:5851
+msgid "The image could not be saved."
+msgstr "Ne povas konservi bildon."
+
+#: ../shell/ev-window.c:5883
+msgid "Save Image"
+msgstr "Konservi bildon"
+
+#: ../shell/ev-window.c:5950
+msgid "Unable to open attachment"
+msgstr "Malsukcesis malfermi kunsendaĵon."
+
+#: ../shell/ev-window.c:6003
+msgid "The attachment could not be saved."
+msgstr "Ne povis konservi kunsendaĵon."
+
+#: ../shell/ev-window.c:6048
+msgid "Save Attachment"
+msgstr "Konservi kunsendaĵon"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Pasvorto bezonatas"
+
+#: ../shell/ev-utils.c:317
+msgid "By extension"
+msgstr "Laŭ kromaĵo"
+
+#: ../shell/main.c:72 ../shell/main.c:277
+msgid "MATE Document Viewer"
+msgstr "MATE vidigilo de dokumentoj"
+
+#: ../shell/main.c:80
+msgid "The page label of the document to display."
+msgstr "La paĝ-etikedo de la dokumento por vidigi."
+
+#: ../shell/main.c:80
+msgid "PAGE"
+msgstr "PAĜO"
+
+#: ../shell/main.c:81
+msgid "The page number of the document to display."
+msgstr "La paĝ-numero de la dokumento por vidigi."
+
+#: ../shell/main.c:81
+msgid "NUMBER"
+msgstr "NUMERO"
+
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr "Ruli Envince tutekrane"
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr "Ruli Envince prezentaĵe"
+
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr "Lanĉi Evince kiel antaŭvidilo"
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr "Vorto aŭ frazo por trovi en la dokumento"
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "SIGNOĈENO"
+
+#: ../shell/main.c:89
+msgid "[FILE…]"
+msgstr "[DOSIERO...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Ebligi antaŭvidan bildeton de PDF dokumentoj"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Komando por antaŭvida bildeto de PDF dokumentoj"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+
+#~ msgid "%.2f x %.2f inch"
+#~ msgstr "%.2f x %.2f coloj"
+
+#~ msgid "Page %s - %s"
+#~ msgstr "Paĝo %s - %s"
+
+#~ msgid "%.0f x %.0f mm"
+#~ msgstr "%.0f x %.0f mm"
+
+#~ msgid "%s - Password Required"
+#~ msgstr "%s - Pasvorto bezonatas"
+
+#~ msgid "_Save Image As..."
+#~ msgstr "_Konservi bildon kiel..."
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "La DJVU-dokumento havas nekorektan formaton"
+
+#~ msgid ""
+#~ "The document is composed of several files. One or more of such files "
+#~ "cannot be accessed."
+#~ msgstr ""
+#~ "La dokumento konsistas el multaj dosieroj. Unu aŭ pli dosieroj ne povas "
+#~ "esti atingitaj."
+
+#~ msgid "Djvu Documents"
+#~ msgstr "DJVU-dokumentoj"
+
+#~ msgid "Cannot find zip signature"
+#~ msgstr "Ne eblas trovi ZIP-subskribon"
+
+#~ msgid "Invalid zip file"
+#~ msgstr "Nevalida ZIP-dosiero"
+
+#~ msgid "Multi file zips are not supported"
+#~ msgstr "Multedosieroj ZIP-arkivoj ne estas subtenataj"
+
+#~ msgid "Cannot find file in the zip archive"
+#~ msgstr "Ne eblas trovi dosieron en ZIP-dosiero"
+
+#~ msgid "View multipage documents"
+#~ msgstr "Vidi plurpaĝaj dokumentoj"
+
+#~ msgid "End of presentation. Press Escape to exit."
+#~ msgstr "Fino de la prezentaĵo. Presi eskapklavon por eliri."
+
+#~ msgid "Loading..."
+#~ msgstr "Ŝargante..."
+
+#~ msgid "Remember password until you _logout"
+#~ msgstr "Memori pasvorton ĝis elsaluto"
+
+#~ msgid "Gathering font information... %3d%%"
+#~ msgstr "Kolektante informojn de tiparoj... %3d%%"
+
+#~ msgid "Print..."
+#~ msgstr "Printante..."
+
+#~ msgid ""
+#~ "Document Viewer.\n"
+#~ "Using poppler %s (%s)"
+#~ msgstr ""
+#~ "Vidigilo de dokumentoj.\n"
+#~ "Uzanta poppler %s (%s)"
+
+#~ msgid "_Open..."
+#~ msgstr "_Malfermi..."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Konservi kopion..."
+
+#~ msgid "Page Set_up..."
+#~ msgstr "Print-agordoj..."
+
+#~ msgid "Setup the page settings for printing"
+#~ msgstr "Agordi parametrojn de paĝo por presado"
+
+#~ msgid "_Print..."
+#~ msgstr "_Printi..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Trovi..."
+
+#~ msgid "[FILE...]"
+#~ msgstr "[DOSIERO...]"
+
+#~ msgid ""
+#~ "Boolean options available, true enables thumbnailing and false disables "
+#~ "the creation of new thumbnails"
+#~ msgstr ""
+#~ "Buleaj haveblaj opcioj, vera ebligas antaŭvidan bildeton, kaj malvera "
+#~ "malebligas kreadon de novaj antaŭvidaj bildetoj"
+
+#~ msgid ""
+#~ "Valid command plus arguments for the PDF Document thumbnailer. See "
+#~ "caja thumbnailer documentation for more information."
+#~ msgstr ""
+#~ "Valida komando, kaj argumentoj por la ilo de antaŭvidaj bildetoj. Vidi la "
+#~ "dokumentaron de la antaŭvida bildetilo Caja por pli da informoj."
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 00000000..81c719b6
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,1853 @@
+# translation of evince.HEAD.po to Español
+# Traducción de Evince al español.
+# Copyright (C) Spanish translation for Evince
+# This file is distributed under the same license as the Evince package.
+#
+# Antonio Ognio <[email protected], 2004, 2005.
+# Daniel Fernandez <[email protected]>, 2005.
+# Francisco Javier F. Serrador <[email protected]>, 2005, 2006.
+# Juanje Ojeda Croissier <[email protected]>, 2008, 2009.
+# Jorge González <[email protected]>, 2007, 2008, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-08-14 09:01+0000\n"
+"PO-Revision-Date: 2010-08-15 20:43+0200\n"
+"Last-Translator: Jorge González <[email protected]>\n"
+"Language-Team: Español <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Gtranslator 1.9.3\n"
+"\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Error al lanzar el comando «%s» para descomprimir el cómic en el directorio "
+"temporal: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr ""
+"El comando «%s» falló al descomprimir el cómic en el directorio temporal."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "El comando «%s» no finalizó de forma normal."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "No es un tipo MIME de cómic: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"No se puede encontrar un comando apropiado para descomprimir este tipo de "
+"archivo de cómic"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Tipo MIME desconocido"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Archivo corrupto"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "No hay archivos en el archivador"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "No se encontraron imágenes en el archivador %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Hubo un error al borrar «%s»."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Error %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Libros de cómics"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "El documento DjVu tiene un formato incorrecto"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"El documento está compuesto de varios archivos. No se puede acceder a uno o "
+"más de ellos."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Documentos DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "El documento DVI tiene un formato incorrecto"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Documentos DVI"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Este trabajo está en Dominio público"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Sí"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "No"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Tipo 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Tipo 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Tipo 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Tipo 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Tipo 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Tipo de tipografía desconocida"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Sin nombre"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Subconjunto incrustado"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Incrustado"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "No incrustado"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Documentos PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Documento no válido"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Diapositivas Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Sin error"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "No hay suficiente memoria"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "No se puede encontrar la firma ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Archivo ZIP inválido"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "No se soportan los ZIP multiarchivo"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "No se puede abrir el archivo"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "No se pueden leer los datos del archivo"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "No se puede encontrar el archivo en el archivador ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Error desconocido"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "No se pudo al cargar el documento «%s»"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Falló al guardar el documento «%s»"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Documentos PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "No se pudo guardar el adjunto «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "No se pudo abrir el adjunto «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "No se pudo abrir el adjunto «%s»"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "El tipo de archivo %s (%s) no está soportado"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Todos los documentos"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Todos los archivos"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Falló al crear un archivo temporal: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Falló al crear un directorio temporal: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "El archivo no es un archivo .desktop válido"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Versión «%s» del archivo .desktop no reonocida"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Iniciando %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "La aplicación no acepta documentos en la línea de comandos"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Opción de lanzamiento no reconocida: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "No se pueden pasar URI de documentos a un aentrada .desktop «Type=Link»"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "No es un elemento lanzable"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Desactivar la conexión con el gestor de sesiones"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Especificar el archivo que contiene la configuración guardada"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "ARCHIVO"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Especificar el ID de gestión de sesión"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opciones de gestión de la sesión:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Mostrar las opciones de gestión de la sesión"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Mostrar «_%s»"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Mover a la barra de herramientas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Mueve el elemento seleccionado a la barra de herramientas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Quitar de la barra de herramientas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Quita el elemento seleccionado de la barra de herramientas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Eliminar barra de herramientas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Quitar barra de herramientas seleccionada"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Separador"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "Ajuste óptimo"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Ajustar al ancho de página"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Visor de documentos"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Vea documentos multipágina"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Saltarse las restricciones del documento"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Saltarse las restricciones del documento, como restricción para copiar o "
+"imprimir."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Eliminar el archivo temporal"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Archivo de ajustes de impresión"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Visor de documentos de Mate"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "No se pudo imprimir el documento"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "No se pudo encontrar la impresora actual «%s»"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "Página _anterior"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "Ir a la página anterior"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "_Siguiente página"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "Ir a la página siguiente"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "Amplía el documento"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "Reduce el documento"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Imprimir"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "Imprime este documento"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "Ajuste óp_timo"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "Hace que el documento actual llene la ventana"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "Ajustar al a_ncho de página"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "Hace que el documento actual llene la anchura de la ventana"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "Página"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "Seleccione la página"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Documento"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Título:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Ubicación:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Asunto:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Autor:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Palabras clave:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Productor:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Creador:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Creado:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Modificado:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Número de páginas:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimizado:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Formato:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Seguridad:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Tamaño del papel:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Ninguno"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f pulg"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, vertical (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, apaisado (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d de %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "de %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Cargando…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Prepaŕandose para imprimir…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Terminando…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Imprimiendo página %d de %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "La impresión no está soportada con esta impresora."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Archivo zip inválido"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Advertencia"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Su selección de intervalo de páginas no incluye ninguna página"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Escalado de página:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Encoger a un área imprimible"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Ajustar a un área imprimible"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Escalar las páginas del documento para ajustarlas a la página de impresión "
+"seleccionada. Seleccionar una de las siguientes:\n"
+"\n"
+"• «Ninguna»: No se realiza escalado de página.\n"
+"\n"
+"• «Encoger a un área imprimible»: Las páginas del documento más grandes que "
+"el área de impresión se reducen para ajustarse al área de impresión de "
+"página de la impresora.\n"
+"\n"
+"• «Ajustar a un área imprimible»: Las páginas del documento se aumentan o "
+"reducen según se requiera para ajustarse al área de impresión de página de "
+"la impresora.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Autorotar y centrar"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Rotar la orientación de impresión de página de cada página para que coincida "
+"con cada página del documento. Las páginas del documento se centrarán en la "
+"página de impresión."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr ""
+"Seleccionar el tamaño de página usando tamaños de páginas de documentos"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Cuando está activado, cada página se imprimirá en el mismo tamaño de papel "
+"que la página del documento."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Gestión de páginas"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Falló al imprimir la página %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Desplazar arriba"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Desplazar abajo"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Desplaza la vista arriba"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Desplaza la vista abajo"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Vista de documento"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Saltar a la página:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Fin de la presentación. Pulse para salir."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Ir a la primera página"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Ir a la página anterior"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Ir a la página siguiente"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Ir a la última página"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Ir a la página"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Buscar"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Ir a la página %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Ir a %s en el archivo «%s»"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Ir al archivo «%s»"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Lanzar %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Buscar:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "Buscar _anterior"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Buscar la aparición anterior de la cadena"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "Buscar _siguiente"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Buscar la siguiente aparición de la cadena"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Coi_ncidir con capitalización"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Conmutar búsqueda discriminando capitalización"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Icono:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Nota"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Comentario"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Clave"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Ayuda"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Párrafo nuevo"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Párrafo"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Insertar"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Cruz"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Círculo"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Propiedades de las anotaciones"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Color:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Estilo:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Transparente"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Opaca"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Estado inicial de la ventana:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Abierta"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Cerrada"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Ejecutar en modo presentación"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Contraseña para el documentos %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Convirtiendo %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d de %d documentos convertidos"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Convirtiendo metadatos"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"El formato de metadatos usado por Evince ha cambiado y por ello necesita "
+"migrarse. Si la migración se cancela, no funcionará el almacenamiento de los "
+"metadatos."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Abrir un documento recientemente usado"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Este documento está bloqueado y sólo puede leerse introduciendo la "
+"contraseña correcta."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Desbloquear documento"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Introduzca la contraseña"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Se requiere una contraseña"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"El documento «%s» está bloqueado y requiere una contraseña antes de que pueda "
+"abrirse."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Contraseña:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Olvidar la contraseña _inmediatamente"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "_Recordar contraseña para esta sesión"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Recordar para _siempre"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Propiedades"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "General"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Tipografías"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Licencia del documento"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Tipografía"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Obteniendo información tipográfica… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Términos de uso"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Texto de la licencia"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Más información"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Lista"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Anotaciones"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Texto"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Añadir anotación de texto"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Añadir"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "El documento no contiene ninguna anotación"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Página %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Adjuntos"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Capas"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Imprimir…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Índice"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Miniaturas"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "Página %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "Página %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "El documento no contiene ninguna página"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "El documento sólo contiene páginas vacías"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "No se pudo abrir el documento"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Cargando documento desde «%s»"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Descargando documento (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "Falló al cargar el archivo remoto."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Recargando el documento desde %s"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "Falló al recargar el documento."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "Abrir un documento"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "Guardando el documento en %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Guardando el adjunto en %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "Guardando la imagen en %s"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "El archivo no se pudo guardar como «%s»."
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Subiendo el documento (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Subiendo el adjunto (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Subiendo la imagen (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "Guardar una copia"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d trabajo pendiente en cola"
+msgstr[1] "%d trabajos pendientes en cola"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Imprimiendo trabajo «%s»"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"El documento contiene campos de formulario que se han rellenado. Los cambios "
+"se perderán permanentemente si no guarda una copia."
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"El documento contiene anotaciones nuevas o modificadas. Los cambios se "
+"perderán automáticamente si no guarda una copia."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "¿Guardar una copia del documento «%s» antes de cerrar?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "Cerrar _sin guardar"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "Guardar una _copia"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr ""
+"¿Esperar hasta que termine el trabajo de impresión «%s» antes de cerrar?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Existen %d trabajos de impresión activos. ¿Desea esperar a que termine la "
+"impresora antes de cerrar?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Si cierra la ventana, los trabajos de impresión pendientes no se imprimirán."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "Cancelar la _impresión y cerrar"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "Cerrar _después de imprimir"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "Editor de la barra de herramientas"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "Hubo un error al mostrar la ayuda"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Visor de documentos\n"
+"Usando %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince es software libre; puede redistribuirlo y/o modificarlo bajo los "
+"términos de la Licencia Pública General de GNU publicada por la Free "
+"Software Foundation; ya sea en su versión 2 ó (a su criterio)en una versión "
+"posterior.\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince se distribuye con la esperanza que sea útil, pero SIN GARANTÍA; sin "
+"ninguna garantía implícita de COMERCIALIDAD o IDONEIDAD PARA UN FIN "
+"DETERMINADO. Mire la Licencia General GNU para más detalles.\n"
+
+#: ../shell/ev-window.c:4571
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Debería haber recibido una copia de la Licencia Pública General de GNU junto "
+"con Evince; si no es el caso, escriba a la Free Software Foundation, Inc., "
+"51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 EE. UU.\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Los autores de Evince"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"Jorge González <[email protected]>, 2007-2010\n"
+"Francisco Javier F. Serrador <[email protected]>, 2005-2006\n"
+"Daniel Fernández <[email protected]>, 2005\n"
+"Antonio Ognio <[email protected]>, 2004-2005"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d encontrado en esta página"
+msgstr[1] "%d encontrados en esta página"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "No encontrado"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% restante para buscar"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "_Archivo"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "_Ver"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "_Ir"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "Ay_uda"
+
+#. File menu
+#: ../shell/ev-window.c:5402 ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "_Abrir…"
+
+#: ../shell/ev-window.c:5403 ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "Abre un documento existente"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "A_brir una copia"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "Abre una copia del documento actual en una ventana nueva"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "Guardar una _copia…"
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "Guarda una copia del documento actual"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "_Imprimir…"
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "_Propiedades"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "Seleccionar _todo"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "_Buscar…"
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "Busca una palabra o frase en el documento"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "Barra de _herramientas"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "Rotar a la _izquierda"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "Rotar a la _derecha"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "Guardar los ajustes actuales como pre_determinados"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "Re_cargar"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "Recarga el documento"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "Autode_splazar"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "_Primera página"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "Ir a la primera página"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "Ú_ltima página"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "Ir a la última página"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "Índ_ice"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "Acerca _de"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "Salir de «Pantalla completa»"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "Deja el modo a pantalla completa"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "Iniciar presentación"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "Iniciar una presentación"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "Barra de _herramientas"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "Muestra u oculta la barra de herramientas"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "Panel _lateral"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "Muestra o oculta el panel lateral"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "C_ontinuo"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "Mostrar el documento completo"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "_Dual"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "Mostrar dos páginas a la vez"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "Pantalla _completa"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "Expandir la ventana hasta llenar la pantalla"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "_Presentación"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "Ver el documento como una presentación"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "Colores _invertidos"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "Mostrar el contenido de la página invirtiendo los colores"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "_Abrir enlace"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "_Ir"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "Abrir en una _ventana nueva"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "_Copiar dirección del enlace"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "Guardar imagen _como…"
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "Copiar _imagen"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "Propiedades de la anotación…"
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "_Abrir adjuntos"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "_Guardar adjunto como…"
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "Ampliación"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "Ajustar el nivel de ampliación"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "Navegación"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "Atrás"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "Moverse a través de las páginas visitadas"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "Anterior"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "Siguiente"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "Ampliar"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "Reducir"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "Ajustar anchura"
+
+#: ../shell/ev-window.c:5890 ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "No se pudo lanzar la aplicación externa."
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "No se pudo abrir el enlace externo"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "No se pudo encontrar el formato apropiado para guardar la imagen"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "La imagen no se pudo guardar."
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "Guardar imagen"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "No se pudo abrir el adjunto"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "El adjunto no se pudo guardar."
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "Guardar adjuntos"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Se requiere una contraseña"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Por extensión"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Visor de documentos de Mate"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "La etiqueta de página del documento que mostrar."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "PÁGINA"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "El número de página del documento que mostrar."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NÚMERO"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Ejecutar Evince en modo pantalla completa"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Ejecutar Evince en modo presentación"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Ejecutar Evince como un previsualizador"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "La palabra o frase que buscar en el documento"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "CADENA"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[ARCHIVO…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Opciones booleanas disponibles, «true» activa las miniaturas y «false» "
+"desactiva la creación de miniaturas nuevas"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Activar miniaturas de documentos PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Comando para sacar las miniaturas para los documentos PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Comando válido y argumentos para el miniaturizador de documentos PDF. "
+"Consulte la documentación para el miniaturizador de Caja para más "
+"información."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "Config_uración de página…"
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Configurar los ajustes de página para impresión"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "El documento DJVU tiene un formato incorrecto"
+
+#~ msgid "Print..."
+#~ msgstr "Imprimir…"
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "Guardar una _copia…"
+
+#~ msgid "_Print..."
+#~ msgstr "_Imprimir…"
+
+#~ msgid "_Find..."
+#~ msgstr "_Buscar…"
+
+#~ msgid "Search string"
+#~ msgstr "Buscar cadena"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "Nombre de la cadena a ser buscada"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Coincidir con capitalización"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "VERDADERO si se desea coincidir con capitalización"
+
+#~ msgid "Highlight color"
+#~ msgstr "Color de resaltado"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Color de resaltado para todas las coincidencias"
+
+#~ msgid "Current color"
+#~ msgstr "Color actual"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Color de resaltado para la coincidencia actual"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "No se pudo crear el archivo «%s»: %s"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "¿Recuperar los documentos anteriores?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Evince parece haber salido de forma inesperada la última vez que se "
+#~ "ejecutó. Puede recuperar los documentos que estaban abiertos."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_No recuperar"
+
+#~ msgid "_Recover"
+#~ msgstr "_Recuperar"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Recuperación de cuelgue"
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "No se pudo crear el enlace simbólico «%s»: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "No se puede abrir una copia."
+
+#~ msgid ""
+#~ "Internal error configuring the command for decompressing the comic book "
+#~ "file"
+#~ msgstr ""
+#~ "Error interno al configurar el comando para descomprimir el archivo de "
+#~ "cómic"
+
+#~| msgid "Failed to create a directory on the \t\t\t\ttemporary directory."
+#~ msgid "Failed to create a directory %s in the temporary directory: %s"
+#~ msgstr "Falló al crear el directorio %s en el directorio temporal: %s"
+
+#~ msgid "Co_nnect"
+#~ msgstr "Co_nectar"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "Conectar de forma _anónima"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Conectar como u_suario:"
+
+#~ msgid "_Username:"
+#~ msgstr "_Usuario:"
+
+#~ msgid "_Domain:"
+#~ msgstr "_Dominio:"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "_Olvidar la contraseña inmediatamente"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_Recordar contraseña para esta sesión"
+
+#~ msgid "_Remember forever"
+#~ msgstr "_Recordar para siempre"
+
+#~ msgid "File not available"
+#~ msgstr "Archivo no disponible"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "Los archivos remotos no están soportados"
+
+#~ msgid "Find Previous"
+#~ msgstr "Buscar anterior"
+
+#~ msgid "Find Next"
+#~ msgstr "Buscar siguiente"
diff --git a/po/et.po b/po/et.po
new file mode 100644
index 00000000..43007082
--- /dev/null
+++ b/po/et.po
@@ -0,0 +1,1344 @@
+# Evince'i eesti keele tõlge.
+# Estonian translation of Evince.
+#
+# Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2007–2010 The MATE Project
+# This file is distributed under the same license as the evince package.
+#
+# Sven Sapelson <sven.sapelson gmail com>, 2005.
+# Ivar Smolin <okul linux ee>, 2005–2010.
+# Priit Laes <amd store20 com>, 2005–2007.
+# Mattias Põldaru <mahfiaz gmail com>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Evince 2.32\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-08-19 07:59+0000\n"
+"PO-Revision-Date: 2010-09-23 10:21+0300\n"
+"Last-Translator: Ivar Smolin <[email protected]>\n"
+"Language-Team: Estonian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Tõrge koomiksiraamatu lahtipakkimiseks käsu „%s” käivitamisel: %s"
+
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Koomiksiraamatu lahtipakkimise käsk „%s” lõpetas tõrkega."
+
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Käsk „%s” ei lõpetanud normaalselt."
+
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Pole koomiksiraamatu MIME-tüüp: %s"
+
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Seda liiki koomiksiraamatu lahtipakkimiseks ei leitud ühtegi sobivat käsku"
+
+msgid "Unknown MIME Type"
+msgstr "Tundmatu MIME-tüüp"
+
+msgid "File corrupted"
+msgstr "Fail on rikutud"
+
+msgid "No files in archive"
+msgstr "Arhiivis pole faile"
+
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Arhiivist %s pilte ei leitud"
+
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "„%s” kustutamisel tekkis viga."
+
+#, c-format
+msgid "Error %s"
+msgstr "Viga %s"
+
+msgid "Comic Books"
+msgstr "Koomiksiraamatud"
+
+msgid "DjVu document has incorrect format"
+msgstr "DjVu-dokument pole korrektses vormingus"
+
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"See dokument koosneb mitmest failist, paraku pole võimalik mõnele nendest "
+"failidest ligi pääseda."
+
+msgid "DjVu Documents"
+msgstr "DjVu-dokumendid"
+
+msgid "DVI document has incorrect format"
+msgstr "DVI-dokument pole korrektses vormingus"
+
+msgid "DVI Documents"
+msgstr "DVI-dokumendid"
+
+msgid "This work is in the Public Domain"
+msgstr "See töö on avalik omand (Public Domain)"
+
+#. translators: this is the document security state
+msgid "Yes"
+msgstr "Jah"
+
+#. translators: this is the document security state
+msgid "No"
+msgstr "Ei"
+
+msgid "Type 1"
+msgstr "Tüüp 1"
+
+msgid "Type 1C"
+msgstr "Tüüp 1C"
+
+msgid "Type 3"
+msgstr "Tüüp 3"
+
+msgid "TrueType"
+msgstr "TrueType"
+
+msgid "Type 1 (CID)"
+msgstr "Tüüp 1 (CID)"
+
+msgid "Type 1C (CID)"
+msgstr "Tüüp 1C (CID)"
+
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+msgid "Unknown font type"
+msgstr "Tundmatu kirjatüüp"
+
+msgid "No name"
+msgstr "Nimi puudub"
+
+msgid "Embedded subset"
+msgstr "Põimitud alamhulk"
+
+msgid "Embedded"
+msgstr "Põimitud"
+
+msgid "Not embedded"
+msgstr "Põimimata"
+
+msgid "PDF Documents"
+msgstr "PDF-dokumendid"
+
+msgid "Invalid document"
+msgstr "Vigane dokument"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+msgid "Impress Slides"
+msgstr "Impress'i slaidid"
+
+msgid "No error"
+msgstr "Vigu ei esinenud"
+
+msgid "Not enough memory"
+msgstr "Pole piisavalt mälu"
+
+msgid "Cannot find ZIP signature"
+msgstr "ZIP-signatuuri pole võimalik leida"
+
+msgid "Invalid ZIP file"
+msgstr "Vigane ZIP-fail"
+
+# äkki peaks olema: Mitmest failist koosnevad zip'id pole toetatud
+msgid "Multi file ZIPs are not supported"
+msgstr "Mitut faili sisaldavad ZIP-id pole toetatud"
+
+msgid "Cannot open the file"
+msgstr "Faili pole võimalik avada"
+
+msgid "Cannot read data from file"
+msgstr "Andmeid pole võimalik failist lugeda"
+
+msgid "Cannot find file in the ZIP archive"
+msgstr "ZIP-arhiivist ei leitud faili"
+
+msgid "Unknown error"
+msgstr "Tundmatu viga"
+
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Tõrge dokumendi „%s” laadimisel"
+
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Tõrge dokumendi „%s” salvestamisel"
+
+msgid "PostScript Documents"
+msgstr "PostScript-dokumendid"
+
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Manust „%s” pole võimalik salvestada: %s"
+
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Manust „%s” pole võimalik avada: %s"
+
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Manust „%s” pole võimalik avada"
+
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Failitüüp %s (%s) pole toetatud"
+
+msgid "All Documents"
+msgstr "Kõik dokumendid"
+
+msgid "All Files"
+msgstr "Kõik failid"
+
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Tõrge ajutise faili loomisel: %s"
+
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Tõrge ajutise kataloogi loomisel: %s"
+
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Fail pole korrektne .desktop fail"
+
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Töölauafaili tundmatu versioon '%s'"
+
+#, c-format
+msgid "Starting %s"
+msgstr "Käivitamine: %s"
+
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Rakendus ei luba käsureadokumente"
+
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Tundmatu käivitusvalik: %d"
+
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"Dokumendi URI-sid pole võimalik 'Liik=Viit' töölauakirjetele edasi anda"
+
+#, c-format
+msgid "Not a launchable item"
+msgstr "Pole käivitatav kirje"
+
+msgid "Disable connection to session manager"
+msgstr "Seansihalduriga ühendumise keelamine"
+
+msgid "Specify file containing saved configuration"
+msgstr "Salvestatud seadistusi sisaldava faili määramine"
+
+msgid "FILE"
+msgstr "FAIL"
+
+msgid "Specify session management ID"
+msgstr "Seansihalduse ID määramine"
+
+msgid "ID"
+msgstr "ID"
+
+msgid "Session management options:"
+msgstr "Seansihalduse valikud:"
+
+msgid "Show session management options"
+msgstr "Seansihalduse valikute näitamine"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#, c-format
+msgid "Show “_%s”"
+msgstr "Näita „_%s”"
+
+msgid "_Move on Toolbar"
+msgstr "_Liiguta tööriistaribal"
+
+msgid "Move the selected item on the toolbar"
+msgstr "Valitud kirje liigutamine tööriistaribal"
+
+msgid "_Remove from Toolbar"
+msgstr "_Eemalda tööriistaribalt"
+
+msgid "Remove the selected item from the toolbar"
+msgstr "Valitud kirje eemaldamine tööriistaribalt"
+
+msgid "_Delete Toolbar"
+msgstr "_Kustuta tööriistariba"
+
+msgid "Remove the selected toolbar"
+msgstr "Valitud tööriistariba eemaldamine"
+
+msgid "Separator"
+msgstr "Eraldaja"
+
+#. translators: this is the label for toolbar button
+msgid "Best Fit"
+msgstr "Parim sobitus"
+
+msgid "Fit Page Width"
+msgstr "Sobitus laiuse järgi"
+
+msgid "50%"
+msgstr "50%"
+
+msgid "70%"
+msgstr "70%"
+
+msgid "85%"
+msgstr "85%"
+
+msgid "100%"
+msgstr "100%"
+
+msgid "125%"
+msgstr "125%"
+
+msgid "150%"
+msgstr "150%"
+
+msgid "175%"
+msgstr "175%"
+
+msgid "200%"
+msgstr "200%"
+
+msgid "300%"
+msgstr "300%"
+
+msgid "400%"
+msgstr "400%"
+
+msgid "800%"
+msgstr "800%"
+
+msgid "1600%"
+msgstr "1600%"
+
+msgid "3200%"
+msgstr "3200%"
+
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#, c-format
+msgid "Document Viewer"
+msgstr "Dokumendinäitaja"
+
+msgid "View multi-page documents"
+msgstr "Mitmeleheküljeliste dokumentide vaatamine"
+
+msgid "Override document restrictions"
+msgstr "Dokumendi piirangute eiramine"
+
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Dokumendi piirangute (näiteks kopeerimis- ja printimispiirangud) eiramine."
+
+msgid "Delete the temporary file"
+msgstr "Ajutise faili kustutamine"
+
+msgid "Print settings file"
+msgstr "Printerisätete fail"
+
+msgid "MATE Document Previewer"
+msgstr "MATE dokumentide eelvaatlemine"
+
+msgid "Failed to print document"
+msgstr "Tõrge dokumendi printimisel"
+
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Valitud printerit '%s' pole võimalik leida"
+
+#. Go menu
+msgid "_Previous Page"
+msgstr "_Eelmine lehekülg"
+
+msgid "Go to the previous page"
+msgstr "Eelmisele leheküljele liikumine"
+
+msgid "_Next Page"
+msgstr "_Järgmine lehekülg"
+
+msgid "Go to the next page"
+msgstr "Järgmisele leheküljele liikumine"
+
+msgid "Enlarge the document"
+msgstr "Dokumendi suurendamine"
+
+msgid "Shrink the document"
+msgstr "Dokumendi kahandamine"
+
+msgid "Print"
+msgstr "Prindi"
+
+msgid "Print this document"
+msgstr "Selle dokumendi printimine"
+
+msgid "_Best Fit"
+msgstr "Par_im sobitus"
+
+msgid "Make the current document fill the window"
+msgstr "Dokumendi lehekülje mahutamine aknasse"
+
+msgid "Fit Page _Width"
+msgstr "Sobitus _laiuse järgi"
+
+msgid "Make the current document fill the window width"
+msgstr "Dokumendi laiuse sobitamine akna laiusega"
+
+msgid "Page"
+msgstr "Lehekülg"
+
+msgid "Select Page"
+msgstr "Lehekülje valimine"
+
+msgid "Document"
+msgstr "Dokument"
+
+msgid "Title:"
+msgstr "Pealkiri:"
+
+msgid "Location:"
+msgstr "Asukoht:"
+
+msgid "Subject:"
+msgstr "Teema:"
+
+msgid "Author:"
+msgstr "Autor:"
+
+msgid "Keywords:"
+msgstr "Märksõnad:"
+
+msgid "Producer:"
+msgstr "Tootja"
+
+msgid "Creator:"
+msgstr "Looja:"
+
+msgid "Created:"
+msgstr "Loodud:"
+
+msgid "Modified:"
+msgstr "Muudetud:"
+
+msgid "Number of Pages:"
+msgstr "Lehekülgede arv:"
+
+msgid "Optimized:"
+msgstr "Optimeering:"
+
+msgid "Format:"
+msgstr "Vorming:"
+
+msgid "Security:"
+msgstr "Turvalisus:"
+
+msgid "Paper Size:"
+msgstr "Paberi suurus:"
+
+msgid "None"
+msgstr "Puudub"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+msgid "default:mm"
+msgstr "default:mm"
+
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f tolli"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, püstpaigutus (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, rõhtpaigutus (%s)"
+
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d %d-st)"
+
+#, c-format
+msgid "of %d"
+msgstr "%d-st"
+
+#. Create tree view
+msgid "Loading…"
+msgstr "Laadimine…"
+
+#. Initial state
+msgid "Preparing to print…"
+msgstr "Printimise ettevalmistamine…"
+
+msgid "Finishing…"
+msgstr "Lõpetamine…"
+
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Lehekülje %d/%d printimine…"
+
+msgid "Printing is not supported on this printer."
+msgstr "Selle printeriga printimine pole toetatud."
+
+msgid "Invalid page selection"
+msgstr "Sobimatu lehekülgede valik"
+
+msgid "Warning"
+msgstr "Hoiatus"
+
+msgid "Your print range selection does not include any pages"
+msgstr "Sinu määratud printimisvahemik ei sisalda ühtegi lehekülge"
+
+msgid "Page Scaling:"
+msgstr "Lehekülje mastaapimine:"
+
+msgid "Shrink to Printable Area"
+msgstr "Vähenda prindialale"
+
+msgid "Fit to Printable Area"
+msgstr "Täida prindiala"
+
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Dokumendi lehtede mastaapimine, et need mahuksid paberile. Vali üks "
+"järgnevaist:\n"
+"\n"
+"• \"Puudub\": mitte mingit mastaapimist ei teostata.\n"
+"\n"
+"• \"Vähenda prindialale\": prindialast suuremaid dokumendilehti vähendatakse "
+"eesmärgiga mahutada need printerilehe prindialale.\n"
+"\n"
+"• \"Täida prindiala\": vastavalt vajadusele dokumendi lehti kas "
+"suurendatakse või vähendatakse nii, et need täidaks kogu printerilehe "
+"prindiala.\n"
+
+msgid "Auto Rotate and Center"
+msgstr "Automaatne pööramine ja keskele paigutamine"
+
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Igal prinditaval lehel pööratakse paberi suund samaks dokumendi lehe "
+"suunaga. Dokumendi leht paigutatakse paberi keskele."
+
+msgid "Select page size using document page size"
+msgstr "Paberi formaat valitakse vastavalt dokumendi lehe suurusele"
+
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Kui lubatud, prinditakse kõik lehed sama suurele paberile, kui on dokumendis."
+
+msgid "Page Handling"
+msgstr "Lehekülje käsitlemine"
+
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Tõrge lehekülje %d printimisel: %s"
+
+msgid "Scroll Up"
+msgstr "Keri üles"
+
+msgid "Scroll Down"
+msgstr "Keri alla"
+
+msgid "Scroll View Up"
+msgstr "Vaate üleskerimine"
+
+msgid "Scroll View Down"
+msgstr "Vaate allakerimine"
+
+msgid "Document View"
+msgstr "Dokumendivaade"
+
+msgid "Jump to page:"
+msgstr "Hüppa leheküljele:"
+
+msgid "End of presentation. Click to exit."
+msgstr "Esitluse lõpp. Väljumiseks klõpsa."
+
+msgid "Go to first page"
+msgstr "Esimesele leheküljele liikumine"
+
+msgid "Go to previous page"
+msgstr "Eelmisele leheküljele liikumine"
+
+msgid "Go to next page"
+msgstr "Järgmisele leheküljele liikumine"
+
+msgid "Go to last page"
+msgstr "Viimasele leheküljele liikumine"
+
+msgid "Go to page"
+msgstr "Liikumine leheküljele"
+
+msgid "Find"
+msgstr "Otsing"
+
+#, c-format
+msgid "Go to page %s"
+msgstr "Liikumine leheküljele %s"
+
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Liikumine asukohta %s failis „%s”"
+
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Liikumine failile „%s”"
+
+#, c-format
+msgid "Launch %s"
+msgstr "Käivita %s"
+
+msgid "Find:"
+msgstr "Leia:"
+
+msgid "Find Pre_vious"
+msgstr "Leia _eelmine"
+
+msgid "Find previous occurrence of the search string"
+msgstr "Eelmise sarnase sõna või lause leidmine"
+
+msgid "Find Ne_xt"
+msgstr "Leia _järgmine"
+
+msgid "Find next occurrence of the search string"
+msgstr "Järgmise sarnase sõna või lause leidmine"
+
+msgid "C_ase Sensitive"
+msgstr "_Tõstutundlik"
+
+msgid "Toggle case sensitive search"
+msgstr "Tõstutundliku otsingu sisse- ja väljalülitamine"
+
+msgid "Icon:"
+msgstr "Ikoon:"
+
+msgid "Note"
+msgstr "Märkus"
+
+msgid "Comment"
+msgstr "Kommentaar"
+
+msgid "Key"
+msgstr "Võti"
+
+msgid "Help"
+msgstr "Abi"
+
+msgid "New Paragraph"
+msgstr "Uus lõik"
+
+msgid "Paragraph"
+msgstr "Lõik"
+
+msgid "Insert"
+msgstr "Lisamine"
+
+msgid "Cross"
+msgstr "Rist"
+
+msgid "Circle"
+msgstr "Ring"
+
+msgid "Unknown"
+msgstr "Tundmatu"
+
+msgid "Annotation Properties"
+msgstr "Kommentaari omadused"
+
+msgid "Color:"
+msgstr "Värvus:"
+
+msgid "Style:"
+msgstr "Laad:"
+
+msgid "Transparent"
+msgstr "Läbipaistev"
+
+msgid "Opaque"
+msgstr "Läbipaistmatu"
+
+msgid "Initial window state:"
+msgstr "Akna lähteolek:"
+
+msgid "Open"
+msgstr "Avamine"
+
+msgid "Close"
+msgstr "Sulgemine"
+
+msgid "Running in presentation mode"
+msgstr "Evince käivitamine esitlusrežiimis"
+
+#, c-format
+msgid "Password for document %s"
+msgstr "Dokumendi %s parool"
+
+#, c-format
+msgid "Converting %s"
+msgstr "Teisendamine: %s"
+
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d/%d dokumenti teisendatud"
+
+msgid "Converting metadata"
+msgstr "Metaandmete teisendamine"
+
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Evince poolt kasutatavate metaandmete vorming on muutunud ja vanad andmed "
+"tuleb teisendada uude vormingusse. Teisendamise katkestamise korral lakkab "
+"metaandmete hoidla töötamast."
+
+msgid "Open a recently used document"
+msgstr "Hiljuti kasutatud dokumendi avamine"
+
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "See dokument on lukustatud, avamiseks tuleb sisestada õige parool."
+
+msgid "_Unlock Document"
+msgstr "_Ava dokument"
+
+msgid "Enter password"
+msgstr "Parooli sisestamine"
+
+msgid "Password required"
+msgstr "Parool on vajalik"
+
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "Dokument „%s” on lukustatud ning selle avamiseks on tarvis parooli."
+
+msgid "_Password:"
+msgstr "_Parool:"
+
+msgid "Forget password _immediately"
+msgstr "_Unusta parool koheselt"
+
+msgid "Remember password until you _log out"
+msgstr "Jäta parool kuni _väljalogimiseni meelde"
+
+msgid "Remember _forever"
+msgstr "Jäta alat_iseks meelde"
+
+msgid "Properties"
+msgstr "Omadused"
+
+msgid "General"
+msgstr "Üldine"
+
+msgid "Fonts"
+msgstr "Kirjatüübid"
+
+msgid "Document License"
+msgstr "Dokumendi litsents"
+
+msgid "Font"
+msgstr "Kirjatüüp"
+
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Kasutatud kirjatüüpide kohta andmete kogumine… %3d%%"
+
+msgid "Usage terms"
+msgstr "Kasutustingimused"
+
+msgid "Text License"
+msgstr "Teksti litsents"
+
+msgid "Further Information"
+msgstr "Lisateave"
+
+msgid "List"
+msgstr "Nimekiri"
+
+msgid "Annotations"
+msgstr "Kommentaarid"
+
+msgid "Text"
+msgstr "Tekst"
+
+msgid "Add text annotation"
+msgstr "Tekstikommentaari lisamine"
+
+msgid "Add"
+msgstr "Lisamine"
+
+msgid "Document contains no annotations"
+msgstr "Dokumendis pole ühtegi kommentaari"
+
+#, c-format
+msgid "Page %d"
+msgstr "Lehekülg %d"
+
+msgid "Attachments"
+msgstr "Manused"
+
+msgid "Layers"
+msgstr "Kihid"
+
+msgid "Print…"
+msgstr "Printimine…"
+
+msgid "Index"
+msgstr "Sisukord"
+
+msgid "Thumbnails"
+msgstr "Pisipildid"
+
+#, c-format
+msgid "Page %s — %s"
+msgstr "Lehekülg %s — %s"
+
+#, c-format
+msgid "Page %s"
+msgstr "Lehekülg %s"
+
+msgid "The document contains no pages"
+msgstr "Dokumendis pole ühtegi lehekülge"
+
+msgid "The document contains only empty pages"
+msgstr "Dokument sisaldab ainult tühje lehekülgi"
+
+msgid "Unable to open document"
+msgstr "Dokumenti pole võimalik avada"
+
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Dokumendi laadimine asukohast „%s”"
+
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Dokumendi allalaadimine (%d%%)"
+
+msgid "Failed to load remote file."
+msgstr "Tõrge kaugfaili laadimisel."
+
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Dokumendi uuestilaadimine asukohast %s"
+
+msgid "Failed to reload document."
+msgstr "Tõrge dokumendi uuestilaadimisel."
+
+msgid "Open Document"
+msgstr "Dokumendi avamine"
+
+#, c-format
+msgid "Saving document to %s"
+msgstr "Dokumendi salvestamine asukohale %s"
+
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Manuse salvestamine asukohale %s"
+
+#, c-format
+msgid "Saving image to %s"
+msgstr "Pildi salvestamine kataloogi %s"
+
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Faili pole võimalik „%s”-na salvestada."
+
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Dokumendi üleslaadimine (%d%%)"
+
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Manuse üleslaadimine (%d%%)"
+
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Pildi üleslaadimine (%d%%)"
+
+msgid "Save a Copy"
+msgstr "Koopia salvestamine"
+
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d töö on ootel"
+msgstr[1] "%d tööd on ootel"
+
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Printimistöö „%s”"
+
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Dokument sisaldab täidetud vormivälju. Kui sa ei salvesta koopiat, siis "
+"lähevad muudatused jäädavalt kaotsi."
+
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Dokument sisaldab uusi või muudetud kommentaare. Kui sa ei salvesta koopiat, "
+"siis lähevad muudatused jäädavalt kaotsi."
+
+#, c-format
+#| msgid "Wait until print job “%s” finishes before closing?"
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Kas salvestada enne sulgemist dokumendist „%s” koopia?"
+
+msgid "Close _without Saving"
+msgstr "Sulge _ilma salvestamata"
+
+#| msgid "Save a Copy"
+msgid "Save a _Copy"
+msgstr "Salvesta _koopia"
+
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Kas oodata enne sulgemist, kuni printimistöö „%s” lõpetab?"
+
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Hetkel on %d aktiivset printimistööd. Kas oodata enne sulgemist, kuni "
+"printimine lõpeb?"
+
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Kui sa akna sulged, siis jäävad ootelolevad printimistööd printimata."
+
+msgid "Cancel _print and Close"
+msgstr "_Katkesta printimine ja sulge"
+
+msgid "Close _after Printing"
+msgstr "Sulge _pärast printimist"
+
+msgid "Toolbar Editor"
+msgstr "Tööriistariba redaktor"
+
+msgid "There was an error displaying help"
+msgstr "Abiteabe kuvamisel tekkis viga"
+
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Dokumendinäitaja.\n"
+"Kasutusel %s (%s)"
+
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince on vaba tarkvara. Te võite seda edasi levitada ja/või muuta vastavalt "
+"GNU Üldise Avaliku Litsentsi tingimustele, nagu need on Vaba Tarkvara Fondi "
+"poolt avaldatud; kas Litsentsi versioon number 2 või (vastavalt Teie "
+"valikule) ükskõik milline hilisem versioon.\n"
+
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince'i levitatakse lootuses, et see on kasulik, kuid ILMA IGASUGUSE "
+"GARANTIITA; isegi KESKMISE/TAVALISE KVALITEEDIGARANTIITA või SOBIVUSELE "
+"TEATUD KINDLAKS EESMÄRGIKS. Üksikasjade suhtes vaata GNU Üldist Avalikku "
+"Litsentsi.\n"
+
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Te peaks olema saanud GNU Üldise Avaliku Litsentsi koopia koos Evince'ga; "
+"kui ei, siis võtke ühendust Free Software Foundation'iga, 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+msgid "Evince"
+msgstr "Evince"
+
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 Evince'i autorid"
+
+msgid "translator-credits"
+msgstr ""
+"Sven Sapelson <sven.sapelson gmail com>, 2005.\n"
+"Ivar Smolin <okul linux ee>, 2005–2010.\n"
+"Priit Laes <amd store20 com>, 2005–2007.\n"
+"Mattias Põldaru <mahfiaz gmail com>, 2010."
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d vastus sel leheküljel"
+msgstr[1] "%d vastust sel leheküljel"
+
+msgid "Not found"
+msgstr "Ei leitud"
+
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% otsingu lõpuni"
+
+msgid "_File"
+msgstr "_Fail"
+
+msgid "_Edit"
+msgstr "_Redaktor"
+
+msgid "_View"
+msgstr "_Vaade"
+
+msgid "_Go"
+msgstr "_Liikumine"
+
+msgid "_Help"
+msgstr "A_bi"
+
+#. File menu
+msgid "_Open…"
+msgstr "_Ava…"
+
+msgid "Open an existing document"
+msgstr "Olemasoleva dokumendi avamine"
+
+msgid "Op_en a Copy"
+msgstr "Ava _koopia"
+
+msgid "Open a copy of the current document in a new window"
+msgstr "Käesolevast dokumendist koopia avamine uuest aknas"
+
+msgid "_Save a Copy…"
+msgstr "Sa_lvesta koopia…"
+
+msgid "Save a copy of the current document"
+msgstr "Käesolevast dokumendist koopia salvestamine"
+
+msgid "_Print…"
+msgstr "_Prindi…"
+
+msgid "P_roperties"
+msgstr "_Omadused"
+
+msgid "Select _All"
+msgstr "V_ali kõik"
+
+msgid "_Find…"
+msgstr "_Leia…"
+
+msgid "Find a word or phrase in the document"
+msgstr "Dokumendist sõna või fraasi leidmine"
+
+msgid "T_oolbar"
+msgstr "_Tööriistariba"
+
+msgid "Rotate _Left"
+msgstr "Pööra _vasakule"
+
+msgid "Rotate _Right"
+msgstr "Pööra _paremale"
+
+msgid "Save Current Settings as _Default"
+msgstr "Salvesta praegused sätted _vaikesätetena"
+
+msgid "_Reload"
+msgstr "Laadi _uuesti"
+
+msgid "Reload the document"
+msgstr "Dokumendi uuestilaadimine"
+
+msgid "Auto_scroll"
+msgstr "Automaat_kerimine"
+
+msgid "_First Page"
+msgstr "E_simene lehekülg"
+
+msgid "Go to the first page"
+msgstr "Esimesele leheküljele liikumine"
+
+msgid "_Last Page"
+msgstr "_Viimane lehekülg"
+
+msgid "Go to the last page"
+msgstr "Viimasele leheküljele liikumine"
+
+#. Help menu
+msgid "_Contents"
+msgstr "_Sisu"
+
+msgid "_About"
+msgstr "_Evince'ist lähemalt"
+
+#. Toolbar-only
+msgid "Leave Fullscreen"
+msgstr "Välju täisekraanvaatest"
+
+msgid "Leave fullscreen mode"
+msgstr "Täisekraanvaatest lahkumine"
+
+msgid "Start Presentation"
+msgstr "Alusta esitlust"
+
+msgid "Start a presentation"
+msgstr "Esitluse alustamine"
+
+#. View Menu
+msgid "_Toolbar"
+msgstr "_Tööriistariba"
+
+msgid "Show or hide the toolbar"
+msgstr "Tööriistariba näitamine või peitmine"
+
+msgid "Side _Pane"
+msgstr "Kül_gpaan"
+
+msgid "Show or hide the side pane"
+msgstr "Külgpaani näitamine või peitmine"
+
+msgid "_Continuous"
+msgstr "Jät_kuv"
+
+msgid "Show the entire document"
+msgstr "Kogu dokumendi näitamine"
+
+msgid "_Dual"
+msgstr "_Paaris"
+
+msgid "Show two pages at once"
+msgstr "Kahe lehekülje näitamine korraga"
+
+msgid "_Fullscreen"
+msgstr "Täisek_raan"
+
+msgid "Expand the window to fill the screen"
+msgstr "Akna suurendamine kogu ekraani suuruseks"
+
+msgid "Pre_sentation"
+msgstr "_Esitlus"
+
+msgid "Run document as a presentation"
+msgstr "Dokumenti näitamine esitlusena"
+
+# kas siia võib kirjutada "Pööratud värvid?"
+msgid "_Inverted Colors"
+msgstr "Pööratud värvi_d"
+
+msgid "Show page contents with the colors inverted"
+msgstr "Lehe sisu näitamine inverteeritud värvides"
+
+#. Links
+msgid "_Open Link"
+msgstr "_Ava viit"
+
+msgid "_Go To"
+msgstr "_Liigu"
+
+msgid "Open in New _Window"
+msgstr "Ava _uues aknas"
+
+msgid "_Copy Link Address"
+msgstr "_Kopeeri viida aadress"
+
+msgid "_Save Image As…"
+msgstr "Salvesta _pilt kui…"
+
+msgid "Copy _Image"
+msgstr "_Kopeeri pilt"
+
+msgid "Annotation Properties…"
+msgstr "Kommentaari omadused…"
+
+msgid "_Open Attachment"
+msgstr "Ava _manus"
+
+msgid "_Save Attachment As…"
+msgstr "Salvesta manus _kui…"
+
+msgid "Zoom"
+msgstr "Suurendus"
+
+msgid "Adjust the zoom level"
+msgstr "Muuda suurendusastet"
+
+msgid "Navigation"
+msgstr "Ringiliikumine"
+
+msgid "Back"
+msgstr "Tagasi"
+
+#. translators: this is the history action
+msgid "Move across visited pages"
+msgstr "Üle kõigi külastatud lehtede liikumine"
+
+#. translators: this is the label for toolbar button
+msgid "Previous"
+msgstr "Eelmine"
+
+#. translators: this is the label for toolbar button
+msgid "Next"
+msgstr "Järgmine"
+
+#. translators: this is the label for toolbar button
+msgid "Zoom In"
+msgstr "Suurendamine"
+
+#. translators: this is the label for toolbar button
+msgid "Zoom Out"
+msgstr "Vähendamine"
+
+#. translators: this is the label for toolbar button
+msgid "Fit Width"
+msgstr "Laiuse sobitamine"
+
+msgid "Unable to launch external application."
+msgstr "Välist rakendust pole võimalik käivitada."
+
+msgid "Unable to open external link"
+msgstr "Välist viita pole võimalik avada"
+
+msgid "Couldn't find appropriate format to save image"
+msgstr "Pildi salvestamiseks pole võimalik sobilikku vormingut leida"
+
+msgid "The image could not be saved."
+msgstr "Pilti pole võimalik salvestada."
+
+msgid "Save Image"
+msgstr "Pildi salvestamine"
+
+msgid "Unable to open attachment"
+msgstr "Manust pole võimalik avada"
+
+msgid "The attachment could not be saved."
+msgstr "Manust pole võimalik salvestada."
+
+msgid "Save Attachment"
+msgstr "Manuse salvestamine"
+
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Vajalik on parool"
+
+msgid "By extension"
+msgstr "Laiendi järgi"
+
+msgid "MATE Document Viewer"
+msgstr "MATE dokumendinäitaja"
+
+msgid "The page label of the document to display."
+msgstr "Millise sildiga lehekülge dokumendist näidata."
+
+msgid "PAGE"
+msgstr "LEHEKÜLG"
+
+msgid "The page number of the document to display."
+msgstr "Mitmendat dokumendi lehekülge näidata."
+
+msgid "NUMBER"
+msgstr "NUMBER"
+
+msgid "Run evince in fullscreen mode"
+msgstr "Evince käivitamine täisekraanirežiimis"
+
+msgid "Run evince in presentation mode"
+msgstr "Evince käivitamine esitlusžiimis"
+
+msgid "Run evince as a previewer"
+msgstr "Evince käivitamine eelvaatlusrežiimis"
+
+msgid "The word or phrase to find in the document"
+msgstr "Dokumendist otsitav sõna või fraas"
+
+msgid "STRING"
+msgstr "STRING"
+
+msgid "[FILE…]"
+msgstr "[FAIL…]"
+
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Tõeväärtusvalikud olemas, tõene lubab pisipiltide tegemise ja väär keelab "
+"selle"
+
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Luba PDF-dokumentidest pisipiltide tegemine"
+
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF-dokumentidest pisipildi tegemise käsk"
+
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF-dokumentide pisipilditegija käsk koos argumentidega. Lähema teabe "
+"saamiseks vaata Cajae pisipilditegija dokumentatsiooni."
diff --git a/po/eu.po b/po/eu.po
new file mode 100644
index 00000000..c5c384fa
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,1722 @@
+# translation of eu_to_be_translate.po to Basque
+# Basque translation of evince.
+# Copyright (C) 2005 Mikel Olasagasti
+# This file is distributed under the same license as the evince package.
+#
+# Mikel Olasagasti <[email protected]>, 2005.
+# Iñaki Larrañaga Murgoitio <[email protected]>, 2005, 2006, 2007, 2008, 2009, 2010.
+# Iñaki Larrañaga Murgoitio <[email protected]>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: eu_to_be_translate\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-09-22 12:42+0200\n"
+"PO-Revision-Date: 2010-09-22 12:56+0200\n"
+"Last-Translator: Iñaki Larrañaga Murgoitio <[email protected]>\n"
+"Language-Team: Basque <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Errorea gertatu da '%s' komandoa abiaraztean komikia deskonprimitzeko: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Huts egin du '%s' komandoak komikia deskonprimitzean."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "'%s' komandoa ez da behar bezala amaitu."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Ez da komikien MIME mota: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Ezin da komando egokirik aurkitu komiki mota hau deskonprimitzeko"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "MIME mota ezezaguna"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Fitxategia hondatuta"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Ez dago fitxategirik artxiboan"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Ez da irudirik aurkitu %s artxiboan"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Errorea gertatu da '%s' ezabatzean."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Errorea: %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Komikiak"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu dokumentuak okerreko formatua du"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Dokumentua hainbat fitxategirekin osatua dago. Fitxategi bat edo gehiago "
+"ezin da atzitu."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu dokumentuak"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI dokumentuak okerreko formatua du"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI dokumentuak"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Lan hau Domeinu Publikoan dago"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Bai"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Ez"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "1 mota"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "1C mota"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "3 mota"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "1 mota (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "1C mota (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Letra-tipo mota ezezaguna"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Izenik gabe"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Kapsulatutako azpimultzoa"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Kapsulatua"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Kapsulatu gabea"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF dokumentuak"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Dokumentu baliogabea"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress aurkezpenak"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Errorerik ez"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Ez dago nahikoa memoria"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Ezin da ZIP sinadura aurkitu"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Baliogabeko ZIP fitxategia"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "ZIP anitzen fitxategiak ez daude onartuta"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Ezin da fitxategia ireki"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Ezin dira datuak irakurri fitxategitik"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Ezin da fitxategia aurkitu ZIP artxiboan"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Errore ezezaguna"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Huts egin du '%s' dokumentua kargatzean"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Huts egin du '%s' dokumentua gordetzean"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript dokumentuak"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Ezin izan da '%s' eranskina gorde: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Ezin izan da '%s' eranskina ireki: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Ezin izan da '%s' eranskina ireki"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "%s (%s) fitxategi mota ez dago onartuta"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Dokumentu guztiak"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Fitxategi guztiak"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Huts egin du aldi baterako fitxategia sortzean: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Huts egin du aldi baterako direktorioa sortzean: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Fitxategia ez da baliozko .desktop fitxategia"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Mahaigaineko fitxategiaren '%s' bertsioa ezezaguna"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s abiarazten"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Aplikazioak ez du dokumenturik onartzen komando-lerroan"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Abiarazteko aukera ezezaguna: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Ezin zaio dokumentuen URIrik eman 'Type=Link' mahaigaineko sarrerari"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Ez da elementu abiarazgarria"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Desgaitu saio-kudeatzailearen konexioa"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Zehaztu gordetako konfigurazioa duen fitxategia"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FITXATEGIA"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Zehaztu saio-kudeaketaren IDa"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "IDa"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Saio-kudeaketaren aukerak:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Erakutsi saio-kudeaketaren aukerak"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Erakutsi '_%s'"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Aldatu lekuz tresna-barran"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Aldatu lekuz hautatutako elementua tresna-barran"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Kendu tresna-barratik"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Kendu hautatutako elementua tresna-barratik"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Kendu tresna-barra"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Kendu hautatutako tresna-barra"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Bereizlea"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5761
+msgid "Best Fit"
+msgstr "Egokiena"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Doitu orriaren zabalera"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "%50"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "%70"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "%85"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "%100"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "%125"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "%150"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "%175"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "%200"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "%300"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "%400"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "%800"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "%1600"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "%3200"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "%6400"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4554
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Dokumentu ikustailea"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Ikusi orrialde anitzeko dokumentuak"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Jaramonik ez egin dokumentuaren murriztapenei"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Jaramonik ez egin dokumentuaren kopiatzeko edo inprimatzeko bezalako "
+"murriztapenei"
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Ezabatu aldi baterako fitxategia"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Inprimatu ezarpenen fitxategia"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "MATEko dokumentu aurre-ikustailea"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3185
+msgid "Failed to print document"
+msgstr "Huts egin du dokumentua inprimatzean"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Ezin izan da hautatutako '%s' inprimagailua aurkitu"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5476
+msgid "_Previous Page"
+msgstr "_Aurreko orrialdea"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5477
+msgid "Go to the previous page"
+msgstr "Joan aurreko orrialdera"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5479
+msgid "_Next Page"
+msgstr "_Hurrengo orrialdea"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5480
+msgid "Go to the next page"
+msgstr "Joan hurrengo orrialdera"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5463
+msgid "Enlarge the document"
+msgstr "Handiagotu dokumentua"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5466
+msgid "Shrink the document"
+msgstr "Uzkurtu dokumentua"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Inprimatu"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5432
+msgid "Print this document"
+msgstr "Inprimatu dokumentu hau"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5578
+msgid "_Best Fit"
+msgstr "_Egokiena"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5579
+msgid "Make the current document fill the window"
+msgstr "Uneko dokumentuak leiho guztia betetzen du"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5581
+msgid "Fit Page _Width"
+msgstr "Doitu orriaren _zabalera"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5582
+msgid "Make the current document fill the window width"
+msgstr "Uneko dokumentuak leihoaren zabalera guztia betetzen du"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5683
+msgid "Page"
+msgstr "Orrialdea"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5684
+msgid "Select Page"
+msgstr "Hautatu orrialdea"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokumentua"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Titulua:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Kokalekua:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Gaia:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Egilea:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Gako-hitzak:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Ekoizlea:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Sortzailea:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Sortuta:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Aldatuta:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Orri kopurua:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimizatua:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Formatua:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Segurtasuna:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Paper-tamaina:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Bat ere ez"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f hazbete"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, bertikala (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, horizontala (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d / %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "/ %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Kargatzen..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Inprimatzeko prestatzen..."
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Amaitzen..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Orrialdea inprimatzen: %d / %d ..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Inprimatzea ez dago onartuta inprimagailu honekin."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Baliogabeko orrialde hautapena"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Abisua"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Inprimatzeko hautatutako barrutiak ez du inolako orrialderik"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Orrialdea eskalatzea:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Uzkurtu area inprimagarrira"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Doitu area inprimagarrira"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Eskalatu dokumentuko orrialdeak hautatutako inprimagailuaren orrialdera "
+"doitzeko. Hautatu hauetariko bat:\n"
+"• \"Bat ere ez\": ez da orrialdeen eskalatzerik landuko.\n"
+"\n"
+"• \"Uzkurtu area inprimagarrira\": area inprimagarriak baino handiagoak "
+"diren dokumentuko orrialdeak txikitu egingo dira inprimagailuaren orrialdeko "
+"area inprimagarrira doitzeko.\n"
+"\n"
+"• \"Doitu area inprimagarrira\": dokumentuko orrialdeak behar haina bezain "
+"handitu edo txikitu egingo dira inprimagailuaren orrialdeko areara "
+"doitzeko.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Biratu eta zentratu automatikoki"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Biratu inprimagailuaren orrialdearen orrialde bakoitza orientazioa "
+"dokumentuko orrialde bakoitzaren orientazioarekin bat etortzeko. Dokumentuko "
+"orrialdeak zentratu egingo dira inprimagailuaren orrialdean."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Hautatu orrialdearen tamaina dokumentuko orrialdearen tamaina erabiliz"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Gaitutakoan, dokumentuko orrialdearen paperaren tamaina berdinarekin "
+"inprimatuko da orrialde bakoitza."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Orrialdeen kudeaketa"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Huts egin du %d orrialdea inprimatzean: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Korritu gora"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Korritu behera"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Korritu ikuspegia gora"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Korritu ikuspegia behera"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Dokumentuaren ikuspegia"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Joan orrira:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Aurkezpenaren amaiera. Sakatu 'Ihes' tekla irtetzeko."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Joan lehen orrialdera"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Joan aurreko orrialdera"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Joan hurrengo orrialdera"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Joan azken orrialdera"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Joan orrira:"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Bilatu"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Joan %s orrira"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Joan hona: %s ('%s' fitxategian)"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Joan '%s' fitxategira"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Abiarazi %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Bilatu:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5449
+msgid "Find Pre_vious"
+msgstr "Bilatu _aurrekoa"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Hitzaren aurreko agerraldia bilatzen du"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5447
+msgid "Find Ne_xt"
+msgstr "Bilatu _hurrengoa"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Hitzaren hurrengo agerraldia bilatzen du"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "M_aiuskulak/minuskulak"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Txandakatu maiuskulak eta minuskulak bereiztea bilaketan"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Ikonoa:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Oharra"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Iruzkina"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Gakoa"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Laguntza"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Paragrafo berria"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Paragrafoa"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Txertatu"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Gurutzea"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Zirkulua"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Ezezaguna"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Oharpenaren propietateak"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Kolorea:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Estiloa:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Gardena"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Opakoa"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Hasierako leihoaren egoera:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Ireki"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Itxi"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Exekutatu aurkezpen moduan"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "'%s' dokumentuaren pasahitza"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "%s bihurtzen"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d / %d dokumentu bihurtuta"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Metadatuak bihurtzen"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Evince aplikazioak erabiltzen dituen metadatuen formatua aldatu egin denez, "
+"migratu beharra dago. Migrazioa bertan behera uzten bada, gordetako "
+"metadatuek ez dute funtzionatuko."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Ireki erabilitako azkenetariko fitxategia"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Dokumentu hau blokeatuta dago, pasahitz egokia sartuz irakur daiteke soilik."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Desblokeatu dokumentua"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Sartu pasahitza"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Pasahitza behar da"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "'%s' dokumentua blokeatuta dago, pasahitza behar da irekitzeko."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Pasahitza:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Ahaztu pasahitza _berehala"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Gogoratu pasahitza saio _amaitu arte"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "_Gogoratu beti"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Propietateak"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Orokorra"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Letra-tipoak"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Dokumentuaren lizentzia"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Letra-tipoa"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Letra-tipoaren informazioa biltzen... %%%3d"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Erabilpenaren baldintzak"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Testuaren lizentzia"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Informazio gehiago"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Zerrenda"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Oharpenak"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Testua"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Gehitu testuaren oharpena"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Gehitu"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Dokumentuak ez du oharpenik"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "%d. orrialdea"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Eranskinak"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Geruzak"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Inprimatu..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Indizea"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Koadro txikiak"
+
+#: ../shell/ev-window.c:875
+#, c-format
+msgid "Page %s — %s"
+msgstr "%s — %s orrialdea"
+
+#: ../shell/ev-window.c:877
+#, c-format
+msgid "Page %s"
+msgstr "%s orrialdea"
+
+#: ../shell/ev-window.c:1436
+msgid "The document contains no pages"
+msgstr "Dokumentuak ez du orrialderik"
+
+#: ../shell/ev-window.c:1439
+msgid "The document contains only empty pages"
+msgstr "Dokumentuak orrialde hutsak soilik ditu"
+
+#: ../shell/ev-window.c:1644 ../shell/ev-window.c:1810
+msgid "Unable to open document"
+msgstr "Ezin da dokumentua ireki"
+
+#: ../shell/ev-window.c:1781
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "%s(e)tik dokumentua kargatzen"
+
+#: ../shell/ev-window.c:1923 ../shell/ev-window.c:2202
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Dokumentua deskargatzen (%% %d)"
+
+#: ../shell/ev-window.c:1956
+msgid "Failed to load remote file."
+msgstr "Huts egin du urruneko fitxategia kargatzean."
+
+#: ../shell/ev-window.c:2146
+#, c-format
+msgid "Reloading document from %s"
+msgstr "%s(e)ndik dokumentua birkargatzen"
+
+#: ../shell/ev-window.c:2178
+msgid "Failed to reload document."
+msgstr "Huts egin du dokumentua birkargatzean."
+
+#: ../shell/ev-window.c:2333
+msgid "Open Document"
+msgstr "Ireki dokumentua"
+
+#: ../shell/ev-window.c:2631
+#, c-format
+msgid "Saving document to %s"
+msgstr "Dokumentua %s(e)n gordetzen"
+
+#: ../shell/ev-window.c:2634
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Eranskina %s(e)n gordetzen"
+
+#: ../shell/ev-window.c:2637
+#, c-format
+msgid "Saving image to %s"
+msgstr "Irudia %s(e)n gordetzen"
+
+#: ../shell/ev-window.c:2681 ../shell/ev-window.c:2781
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Fitxategia ezin izan da '%s' bezala gorde."
+
+#: ../shell/ev-window.c:2712
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Dokumentua igotzen (%% %d)"
+
+#: ../shell/ev-window.c:2716
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Eranskina igotzen (%% %d)"
+
+#: ../shell/ev-window.c:2720
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Irudia igotzen (%% %d)"
+
+#: ../shell/ev-window.c:2844
+msgid "Save a Copy"
+msgstr "Gorde kopia bat"
+
+#: ../shell/ev-window.c:3129
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "Lan %d ilaran zai"
+msgstr[1] "%d lan ilaran zai"
+
+#: ../shell/ev-window.c:3242
+#, c-format
+msgid "Printing job “%s”"
+msgstr "'%s' lana inprimatzen"
+
+#: ../shell/ev-window.c:3420
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Dokumentuak bete beharreko inprimaki-eremuak ditu. Ez baduzu kopia bat "
+"gordetzen, aldaketak betirako galduko dira."
+
+#: ../shell/ev-window.c:3424
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Dokumentuak oharpen berriak edo aldatutakoak ditu. Ez baduzu kopia bat "
+"gordetzen, aldaketak betirako galduko dira."
+
+#: ../shell/ev-window.c:3431
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Gorde '%s' dokumentuaren kopia itxi aurretik?"
+
+#: ../shell/ev-window.c:3450
+msgid "Close _without Saving"
+msgstr "Itxi gorde _gabe"
+
+#: ../shell/ev-window.c:3454
+msgid "Save a _Copy"
+msgstr "Gorde _kopia bat"
+
+#: ../shell/ev-window.c:3528
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Itxi aurretik '%s' lana inprimatu arte zai egon?"
+
+#: ../shell/ev-window.c:3531
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "%d lan daude aktibo. Itxi aurretik inprimatzea amaitu arte zai egon?"
+
+#: ../shell/ev-window.c:3543
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Leihoa ixten baduzu, falta diren inprimatze-lanak ez dira inprimatuko."
+
+#: ../shell/ev-window.c:3547
+msgid "Cancel _print and Close"
+msgstr "_Utzi inprimatzea eta irten"
+
+#: ../shell/ev-window.c:3551
+msgid "Close _after Printing"
+msgstr "Itxi inprimatu _ondoren"
+
+#: ../shell/ev-window.c:4171
+msgid "Toolbar Editor"
+msgstr "Tresna-barraren editorea"
+
+#: ../shell/ev-window.c:4338
+msgid "There was an error displaying help"
+msgstr "Errorea gertatu da laguntza bistaratzean"
+
+#: ../shell/ev-window.c:4550
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Dokumentu-ikustailea.\n"
+"%s (%s) erabiltzen"
+
+#: ../shell/ev-window.c:4581
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince software librea da; birbana eta/edo alda dezakezu Free Software "
+"Foundation-ek argitaratutako GNU Lizentzia Publiko Orokorraren 2. bertsioan, "
+"edo (nahiago baduzu) bertsio berriago batean, jasotako baldintzak betez "
+"gero.\n"
+
+#: ../shell/ev-window.c:4585
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince erabilgarria izango delakoan banatzen da, baina INOLAKO BERMERIK "
+"GABE; era berean, ez da bermatzen beraren EGOKITASUNA MERKATURATZEKO edo "
+"HELBURU PARTIKULARRETARAKO ERABILTZEKO. Argibide gehiago nahi izanez gero, "
+"ikus GNU Lizentzia Publiko Orokorra.\n"
+
+#: ../shell/ev-window.c:4589
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Programa honekin batera GNU Lizentzia Publiko Orokorraren kopia bat ere jaso "
+"beharko zenuke; horrela ez bada, idatzi helbide honetara: Free Software "
+"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 "
+"USA\n"
+
+#: ../shell/ev-window.c:4614
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4617
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Evince-ren egileak"
+
+#: ../shell/ev-window.c:4623
+msgid "translator-credits"
+msgstr ""
+"Mikel Olasagasti <[email protected]>\n"
+"Iñaki Larrañaga Murgoitio <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4889
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d aurkitu da orrialdean"
+msgstr[1] "%d aurkitu dira orrialdean"
+
+#: ../shell/ev-window.c:4894
+msgid "Not found"
+msgstr "Ez da aurkitu"
+
+#: ../shell/ev-window.c:4900
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%%%3d falta dira bilatzeko"
+
+#: ../shell/ev-window.c:5415
+msgid "_File"
+msgstr "_Fitxategia"
+
+#: ../shell/ev-window.c:5416
+msgid "_Edit"
+msgstr "_Editatu"
+
+#: ../shell/ev-window.c:5417
+msgid "_View"
+msgstr "_Ikusi"
+
+#: ../shell/ev-window.c:5418
+msgid "_Go"
+msgstr "J_oan"
+
+#: ../shell/ev-window.c:5419
+msgid "_Help"
+msgstr "_Laguntza"
+
+#. File menu
+#: ../shell/ev-window.c:5422 ../shell/ev-window.c:5723
+msgid "_Open…"
+msgstr "_Ireki..."
+
+#: ../shell/ev-window.c:5423 ../shell/ev-window.c:5724
+msgid "Open an existing document"
+msgstr "Ireki existitzen den dokumentua"
+
+#: ../shell/ev-window.c:5425
+msgid "Op_en a Copy"
+msgstr "Ireki _kopia bat"
+
+#: ../shell/ev-window.c:5426
+msgid "Open a copy of the current document in a new window"
+msgstr "Ireki uneko dokumentuaren kopia leiho berrian"
+
+#: ../shell/ev-window.c:5428
+msgid "_Save a Copy…"
+msgstr "_Gorde kopia bat..."
+
+#: ../shell/ev-window.c:5429
+msgid "Save a copy of the current document"
+msgstr "Gorde uneko dokumentuaren kopia"
+
+#: ../shell/ev-window.c:5431
+msgid "_Print…"
+msgstr "_Inprimatu..."
+
+#: ../shell/ev-window.c:5434
+msgid "P_roperties"
+msgstr "_Propietateak"
+
+#: ../shell/ev-window.c:5442
+msgid "Select _All"
+msgstr "Hautatu _dena"
+
+#: ../shell/ev-window.c:5444
+msgid "_Find…"
+msgstr "_Bilatu..."
+
+#: ../shell/ev-window.c:5445
+msgid "Find a word or phrase in the document"
+msgstr "Bilatu hitz bat edo esaldi bat dokumentuan"
+
+#: ../shell/ev-window.c:5451
+msgid "T_oolbar"
+msgstr "_Tresna-barra"
+
+#: ../shell/ev-window.c:5453
+msgid "Rotate _Left"
+msgstr "Biratu _ezkerrera"
+
+#: ../shell/ev-window.c:5455
+msgid "Rotate _Right"
+msgstr "Biratu _eskuinera"
+
+#: ../shell/ev-window.c:5457
+msgid "Save Current Settings as _Default"
+msgstr "Gorde uneko ezarpenak _lehenetsi gisa"
+
+#: ../shell/ev-window.c:5468
+msgid "_Reload"
+msgstr "_Birkargatu"
+
+#: ../shell/ev-window.c:5469
+msgid "Reload the document"
+msgstr "Birkargatu dokumentua"
+
+#: ../shell/ev-window.c:5472
+msgid "Auto_scroll"
+msgstr "Korritze automatikoa"
+
+#: ../shell/ev-window.c:5482
+msgid "_First Page"
+msgstr "_Aurreneko orrialdea"
+
+#: ../shell/ev-window.c:5483
+msgid "Go to the first page"
+msgstr "Joan aurreneko orrialdera"
+
+#: ../shell/ev-window.c:5485
+msgid "_Last Page"
+msgstr "_Azken orrialdea"
+
+#: ../shell/ev-window.c:5486
+msgid "Go to the last page"
+msgstr "Joan azkeneko orrialdera"
+
+#. Help menu
+#: ../shell/ev-window.c:5490
+msgid "_Contents"
+msgstr "_Edukia"
+
+#: ../shell/ev-window.c:5493
+msgid "_About"
+msgstr "_Honi buruz"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5497
+msgid "Leave Fullscreen"
+msgstr "Irten pantaila osotik"
+
+#: ../shell/ev-window.c:5498
+msgid "Leave fullscreen mode"
+msgstr "Irten pantaila osoko modutik"
+
+#: ../shell/ev-window.c:5500
+msgid "Start Presentation"
+msgstr "Abiarazi aurkezpena"
+
+#: ../shell/ev-window.c:5501
+msgid "Start a presentation"
+msgstr "Abiatu aurkezpen bat"
+
+#. View Menu
+#: ../shell/ev-window.c:5560
+msgid "_Toolbar"
+msgstr "_Tresna-barra"
+
+#: ../shell/ev-window.c:5561
+msgid "Show or hide the toolbar"
+msgstr "Erakutsi edo ezkutatu tresna-barra"
+
+#: ../shell/ev-window.c:5563
+msgid "Side _Pane"
+msgstr "Alboko p_anela"
+
+#: ../shell/ev-window.c:5564
+msgid "Show or hide the side pane"
+msgstr "Erakutsi edo ezkutatu alboko panela"
+
+#: ../shell/ev-window.c:5566
+msgid "_Continuous"
+msgstr "_Etengabea"
+
+#: ../shell/ev-window.c:5567
+msgid "Show the entire document"
+msgstr "Erakutsi dokumentu osoa"
+
+#: ../shell/ev-window.c:5569
+msgid "_Dual"
+msgstr "_Duala"
+
+#: ../shell/ev-window.c:5570
+msgid "Show two pages at once"
+msgstr "Erakutsi bi orrialde batera"
+
+#: ../shell/ev-window.c:5572
+msgid "_Fullscreen"
+msgstr "_Pantaila osoa"
+
+#: ../shell/ev-window.c:5573
+msgid "Expand the window to fill the screen"
+msgstr "Zabaldu leihoa pantaila guztia bete arte"
+
+#: ../shell/ev-window.c:5575
+msgid "Pre_sentation"
+msgstr "_Aurkezpena"
+
+#: ../shell/ev-window.c:5576
+msgid "Run document as a presentation"
+msgstr "Abiatu dokumentua aurkezpen gisa"
+
+#: ../shell/ev-window.c:5584
+msgid "_Inverted Colors"
+msgstr "Kolore _alderantzikatuak"
+
+#: ../shell/ev-window.c:5585
+msgid "Show page contents with the colors inverted"
+msgstr "Erakutsi orrialdearen edukia alderantzikatutako koloreekin"
+
+#. Links
+#: ../shell/ev-window.c:5593
+msgid "_Open Link"
+msgstr "_Ireki esteka"
+
+#: ../shell/ev-window.c:5595
+msgid "_Go To"
+msgstr "J_oan"
+
+#: ../shell/ev-window.c:5597
+msgid "Open in New _Window"
+msgstr "Ireki leiho _berrian"
+
+#: ../shell/ev-window.c:5599
+msgid "_Copy Link Address"
+msgstr "_Kopiatu estekaren helbidea"
+
+#: ../shell/ev-window.c:5601
+msgid "_Save Image As…"
+msgstr "_Gorde irudia honela..."
+
+#: ../shell/ev-window.c:5603
+msgid "Copy _Image"
+msgstr "Kopiatu _irudia"
+
+#: ../shell/ev-window.c:5605
+msgid "Annotation Properties…"
+msgstr "Oharpenaren propietateak..."
+
+#: ../shell/ev-window.c:5610
+msgid "_Open Attachment"
+msgstr "_Ireki eranskina"
+
+#: ../shell/ev-window.c:5612
+msgid "_Save Attachment As…"
+msgstr "_Gorde eranskina honela..."
+
+#: ../shell/ev-window.c:5697
+msgid "Zoom"
+msgstr "Zooma"
+
+#: ../shell/ev-window.c:5699
+msgid "Adjust the zoom level"
+msgstr "Doitu zoom-aren maila"
+
+#: ../shell/ev-window.c:5709
+msgid "Navigation"
+msgstr "Nabigazioa"
+
+#: ../shell/ev-window.c:5711
+msgid "Back"
+msgstr "Atzera"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5714
+msgid "Move across visited pages"
+msgstr "Joan bisitatutako orrialdeetara"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5744
+msgid "Previous"
+msgstr "Aurrekoa"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5749
+msgid "Next"
+msgstr "Hurrengoa"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5753
+msgid "Zoom In"
+msgstr "Zooma handiagotu"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5757
+msgid "Zoom Out"
+msgstr "Zooma txikiagotu"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5765
+msgid "Fit Width"
+msgstr "Doitu zabalera"
+
+#: ../shell/ev-window.c:5910 ../shell/ev-window.c:5927
+msgid "Unable to launch external application."
+msgstr "Ezin da kanpoko aplikazioa abiarazi."
+
+#: ../shell/ev-window.c:5984
+msgid "Unable to open external link"
+msgstr "Ezin da kanpoko esteka ireki"
+
+#: ../shell/ev-window.c:6151
+msgid "Couldn't find appropriate format to save image"
+msgstr "Ezin izan da formatu egokirik aurkitu irudia gordetzeko"
+
+#: ../shell/ev-window.c:6193
+msgid "The image could not be saved."
+msgstr "Irudia ezin izan da gorde."
+
+#: ../shell/ev-window.c:6225
+msgid "Save Image"
+msgstr "Gorde irudia"
+
+#: ../shell/ev-window.c:6353
+msgid "Unable to open attachment"
+msgstr "Ezin da eranskina ireki"
+
+#: ../shell/ev-window.c:6406
+msgid "The attachment could not be saved."
+msgstr "Eranskina ezin izan da gorde."
+
+#: ../shell/ev-window.c:6451
+msgid "Save Attachment"
+msgstr "Gorde eranskina"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Pasahitza behar da"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Luzapenaren arabera"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATEko dokumentu ikustailea"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Dokumentuaren orrialdearen etiketa bistaratzeko."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "ORRIALDEA"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Dokumentuaren orrialdearen zenbakia bistaratzeko."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "ZENBAKIA"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Exekutatu evince pantaila osoko moduan"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Exekutatu evince aurkezpen moduan"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Exekutatu evince aurrebista gisa"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Hitz edo esaldi bat bilatzen du dokumentuan"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "KATEA"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FITXATEGIA...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Eskuragarri dauden aukera boolearrak: true (egia) balioak koadro txikiak "
+"gaitzen ditu eta false balioak (faltsua) koadro txiki berriak sortzea "
+"desgaitzen du."
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Gaitu PDF dokumentuen koadro txikiak"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF dokumentuen koadro txikiak sortzeko komandoa"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Komando baliagarria gehi argumentuak PDF dokumentutako koadro txikiak "
+"sortzeko. Ikusi Caja-en koadro txikien dokumentazioa informazio "
+"gehiagorako."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "Prestatu i_nprimaketa..."
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Konfiguratu orriaren ezarpenak inprimatzeko"
diff --git a/po/fa.po b/po/fa.po
new file mode 100644
index 00000000..fac05cf2
--- /dev/null
+++ b/po/fa.po
@@ -0,0 +1,1108 @@
+# Persian translation of evince.
+# Copyright (C) 2003, 2004, 2005, 2006 Sharif FarsiWeb, Inc.
+# This file is distributed under the same license as the evince package.
+# Roozbeh Pournader <[email protected]>, 2003, 2004, 2005, 2006.
+# Meelad Zakaria <[email protected]>, 2004, 2005, 2006.
+# Elnaz Sarbar <[email protected]>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-02-15 06:10+0100\n"
+"PO-Revision-Date: 2006-09-04 12:57+0330\n"
+"Last-Translator: Roozbeh Pournader <[email protected]>\n"
+"Language-Team: Persian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../comics/comics-document.c:148
+msgid "File corrupted."
+msgstr "پرونده خراب شده است."
+
+#: ../comics/comics-document.c:184
+#, c-format
+msgid "No images found in archive %s"
+msgstr "تصویری در آرشیو %s پیدا نشد"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:534
+msgid "_Remove Toolbar"
+msgstr "_حذف نوار ابزار"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:555
+msgid "Separator"
+msgstr "جداساز"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:3056
+msgid "Best Fit"
+msgstr "بهترین اندازه"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "جا دادن عرض صفحه"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "٪۵۰"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "75%"
+msgstr "٪۷۵"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "100%"
+msgstr "٪۱۰۰"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "125%"
+msgstr "٪۱۲۵"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "150%"
+msgstr "٪۱۵۰"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "175%"
+msgstr "٪۱۷۵"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "200%"
+msgstr "٪۲۰۰"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "300%"
+msgstr "٪۳۰۰"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "400%"
+msgstr "٪۴۰۰"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window-title.c:126
+msgid "Document Viewer"
+msgstr "نمایشگر نوشتار"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "نمایش چندین نوشتار"
+
+#: ../data/evince-password.glade.h:1
+msgid "Remember password for this session"
+msgstr "گذرواژهٔ در طول این نشست به خاطر سپرده شود"
+
+#: ../data/evince-password.glade.h:2
+msgid "Save password in keyring"
+msgstr "ذخیرهٔ گذرواژه در دسته‌کلید"
+
+#: ../data/evince-password.glade.h:3
+msgid "_Password:"
+msgstr "_گذرواژه:"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>مؤلف:</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>زمان ایجاد:</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>ایجادکننده:</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>قالب:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b>کلیدواژه‌ها:</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>زمان تغییر:</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b>تعداد صفحات:</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr "<b>بهینه‌سازی شده:</b>"
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Producer:</b>"
+msgstr "<b>تولیدکننده:</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Security:</b>"
+msgstr "<b>امنیت:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Subject:</b>"
+msgstr "<b>موضوع:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Title:</b>"
+msgstr "<b>عنوان:</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "نادیده گرفتن محدودیت‌های نوشتار"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "نادیده گرفتن محدودیت‌های نوشتار، مثل محدودیت نسخه‌برداری یا چاپ."
+
+#: ../dvi/dvi-document.c:91
+msgid "File not available"
+msgstr "پرونده موجود نیست"
+
+#: ../dvi/dvi-document.c:104
+msgid "DVI document has incorrect format"
+msgstr "نوشتار DVI قالب نادرستی دارد"
+
+#. translators: this is the document security state
+#: ../pdf/ev-poppler.cc:511
+msgid "Yes"
+msgstr "بله"
+
+#. translators: this is the document security state
+#: ../pdf/ev-poppler.cc:514
+msgid "No"
+msgstr "خیر"
+
+#: ../pdf/ev-poppler.cc:614
+msgid "Type 1"
+msgstr "نوع ۱"
+
+#: ../pdf/ev-poppler.cc:616
+msgid "Type 1C"
+msgstr "نوع ‎1C"
+
+#: ../pdf/ev-poppler.cc:618
+msgid "Type 3"
+msgstr "نوع ۳"
+
+#: ../pdf/ev-poppler.cc:620
+msgid "TrueType"
+msgstr "تروتایپ"
+
+#: ../pdf/ev-poppler.cc:622
+msgid "Type 1 (CID)"
+msgstr "نوع ۱ (CID)"
+
+#: ../pdf/ev-poppler.cc:624
+msgid "Type 1C (CID)"
+msgstr "نوع ‏1C‏ (CID)"
+
+#: ../pdf/ev-poppler.cc:626
+msgid "TrueType (CID)"
+msgstr "تروتایپ (CID)"
+
+#: ../pdf/ev-poppler.cc:628
+msgid "Unknown font type"
+msgstr "نوع قلم نامعلوم"
+
+#: ../pdf/ev-poppler.cc:654
+msgid "No name"
+msgstr "بدون نام"
+
+#: ../pdf/ev-poppler.cc:662
+msgid "Embedded subset"
+msgstr "زیرمجموعهٔ توکار"
+
+#: ../pdf/ev-poppler.cc:664
+msgid "Embedded"
+msgstr "توکار"
+
+#: ../pdf/ev-poppler.cc:666
+msgid "Not embedded"
+msgstr "غیر توکار"
+
+#: ../properties/ev-properties-main.c:114
+msgid "Document"
+msgstr "نوشتار"
+
+#: ../properties/ev-properties-view.c:173
+msgid "None"
+msgstr "هیچ‌کدام"
+
+#: ../ps/gsdefaults.c:30
+msgid "BBox"
+msgstr "کادر صفحه"
+
+#: ../ps/gsdefaults.c:31
+msgid "Letter"
+msgstr "نامه"
+
+#: ../ps/gsdefaults.c:32
+msgid "Tabloid"
+msgstr "نیم‌ورق روزنامه‌ای"
+
+#: ../ps/gsdefaults.c:33
+msgid "Ledger"
+msgstr "معین"
+
+#: ../ps/gsdefaults.c:34
+msgid "Legal"
+msgstr "حقوقی"
+
+#: ../ps/gsdefaults.c:35
+msgid "Statement"
+msgstr "حکم"
+
+#: ../ps/gsdefaults.c:36
+msgid "Executive"
+msgstr "اداری"
+
+#: ../ps/gsdefaults.c:37
+msgid "A0"
+msgstr "A0"
+
+#: ../ps/gsdefaults.c:38
+msgid "A1"
+msgstr "A1"
+
+#: ../ps/gsdefaults.c:39
+msgid "A2"
+msgstr "A2"
+
+#: ../ps/gsdefaults.c:40
+msgid "A3"
+msgstr "A3"
+
+#: ../ps/gsdefaults.c:41
+msgid "A4"
+msgstr "A4"
+
+#: ../ps/gsdefaults.c:42
+msgid "A5"
+msgstr "A5"
+
+#: ../ps/gsdefaults.c:43
+msgid "B4"
+msgstr "B4"
+
+#: ../ps/gsdefaults.c:44
+msgid "B5"
+msgstr "B5"
+
+#: ../ps/gsdefaults.c:45
+msgid "Folio"
+msgstr "رحلی"
+
+#: ../ps/gsdefaults.c:46
+msgid "Quarto"
+msgstr "ربعی"
+
+#: ../ps/gsdefaults.c:47
+msgid "10x14"
+msgstr "۱۰×۱۴ اینچ"
+
+#: ../ps/ps-document.c:136
+msgid "No document loaded."
+msgstr "هیچ پرونده‌ای بار نشده است."
+
+#: ../ps/ps-document.c:584
+msgid "Broken pipe."
+msgstr "لولهٔ شکسته."
+
+#: ../ps/ps-document.c:768
+msgid "Interpreter failed."
+msgstr "مفسر شکست خورد."
+
+#: ../ps/ps-document.c:894
+#, c-format
+msgid "Error while decompressing file %s:\n"
+msgstr "خطا در باز کردن پروندهٔ فشردهٔ %s:\n"
+
+#: ../ps/ps-document.c:954
+#, c-format
+msgid "Cannot open file %s.\n"
+msgstr "نمی‌توان پروندهٔ %s را باز کرد.\n"
+
+#: ../ps/ps-document.c:959
+msgid "File is not readable."
+msgstr "پرونده قابل خواندن نیست."
+
+#: ../ps/ps-document.c:979
+msgid "Document loaded."
+msgstr "نوشتار بار شد."
+
+#: ../ps/ps-document.c:1076
+#, c-format
+msgid ""
+"Failed to load document '%s'. Ghostscript interpreter was not found in path"
+msgstr "بار کردن نوشتار «‎%s» شکست خورد. مفسر گوست‌اسکریپت در مسیر پیدا نشد"
+
+#: ../ps/ps-document.c:1088
+#, c-format
+msgid "Failed to load document '%s'"
+msgstr "باز کردن نوشتار «%s» ممکن نیست"
+
+#: ../ps/ps-document.c:1261
+msgid "Encapsulated PostScript"
+msgstr "پست‌اسکریپت بسته‌بندی‌شده"
+
+#: ../ps/ps-document.c:1262
+msgid "PostScript"
+msgstr "پست‌اسکریپت"
+
+#: ../shell/eggfindbar.c:148
+msgid "Search string"
+msgstr "رشتهٔ جستجو"
+
+#: ../shell/eggfindbar.c:149
+msgid "The name of the string to be found"
+msgstr "نام رشته‌ای که باید پیدا شود"
+
+#: ../shell/eggfindbar.c:162
+msgid "Case sensitive"
+msgstr "حساس به کوچکی و بزرگی حروف"
+
+#: ../shell/eggfindbar.c:163
+msgid "TRUE for a case sensitive search"
+msgstr "‏«درست» برای جستجوی حساس به کوچکی و بزرگی حروف"
+
+#: ../shell/eggfindbar.c:170
+msgid "Highlight color"
+msgstr "رنگ پررنگی"
+
+#: ../shell/eggfindbar.c:171
+msgid "Color of highlight for all matches"
+msgstr "رنگ پررنگی برای همهٔ تطابق‌ها"
+
+#: ../shell/eggfindbar.c:177
+msgid "Current color"
+msgstr "رنگ فعلی"
+
+#: ../shell/eggfindbar.c:178
+msgid "Color of highlight for the current match"
+msgstr "رنگ پررنگی برای تطابق فعلی"
+
+#: ../shell/eggfindbar.c:301
+msgid "F_ind:"
+msgstr "پ_یدا کردن:"
+
+#: ../shell/eggfindbar.c:307
+msgid "_Previous"
+msgstr "_قبلی"
+
+#: ../shell/eggfindbar.c:311
+msgid "_Next"
+msgstr "_بعدی"
+
+#: ../shell/eggfindbar.c:325
+msgid "C_ase Sensitive"
+msgstr "_حساس به کوچکی و بزرگی حروف"
+
+#: ../shell/ev-document-types.c:60
+msgid "Unknown MIME Type"
+msgstr "نوع MIME نامعلوم"
+
+#: ../shell/ev-document-types.c:71
+#, c-format
+msgid "Unhandled MIME type: '%s'"
+msgstr "نوع MIME بدون متصدی: «%s»"
+
+#: ../shell/ev-document-types.c:133
+msgid "All Documents"
+msgstr "همهٔ نوشتارها"
+
+#: ../shell/ev-document-types.c:141
+msgid "PostScript Documents"
+msgstr "نوشتارهای پست‌اسکریپت"
+
+#: ../shell/ev-document-types.c:150
+msgid "PDF Documents"
+msgstr "نوشتارهای PDF"
+
+#: ../shell/ev-document-types.c:159
+msgid "Images"
+msgstr "تصاویر"
+
+#: ../shell/ev-document-types.c:169
+msgid "DVI Documents"
+msgstr "نوشتارهای DVI"
+
+#: ../shell/ev-document-types.c:179
+msgid "Djvu Documents"
+msgstr "نوشتارهای Djvu"
+
+#: ../shell/ev-document-types.c:189
+msgid "Comic Books"
+msgstr "کتاب‌های کمیک"
+
+#: ../shell/ev-document-types.c:197
+msgid "All Files"
+msgstr "همهٔ پرونده‌ها"
+
+#: ../shell/ev-page-action.c:168
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%Id از %Id)"
+
+#: ../shell/ev-page-action.c:170
+#, c-format
+msgid "of %d"
+msgstr "از %Id"
+
+#: ../shell/ev-password.c:83
+msgid "Password required"
+msgstr "گذرواژه لازم است"
+
+#: ../shell/ev-password.c:84
+#, c-format
+msgid ""
+"The document <i>%s</i> is locked and requires a password before it can be "
+"opened."
+msgstr "نوشتار <i>%s</i> قفل شده است و پیش از باز شدن به گذرواژه نیاز دارد."
+
+#: ../shell/ev-password.c:149
+msgid "Enter password"
+msgstr "گذرواژه را وارد کنید"
+
+#: ../shell/ev-password.c:252
+#, c-format
+msgid "Password for document %s"
+msgstr "گذرواژهٔ نوشتار %s"
+
+#: ../shell/ev-password.c:334
+msgid "Incorrect password"
+msgstr "گذرواژهٔ نادرست"
+
+#: ../shell/ev-password-view.c:111
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"این نوشتار قفل شده است و فقط با وارد کردن گذرواژهٔ درست قابل خواندن است."
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "باز کردن _قفل نوشتار"
+
+#: ../shell/ev-properties-dialog.c:61
+msgid "Properties"
+msgstr "ویژگی‌ها"
+
+#: ../shell/ev-properties-dialog.c:94
+msgid "General"
+msgstr "کلیات"
+
+#: ../shell/ev-properties-dialog.c:104
+msgid "Fonts"
+msgstr "قلم‌ها"
+
+#: ../shell/ev-properties-fonts.c:123
+msgid "Font"
+msgstr "قلم"
+
+#: ../shell/ev-properties-fonts.c:134
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "در حال جمع‌آوری اطلاعات قلم... ٪%I3d"
+
+#: ../shell/ev-sidebar-links.c:254 ../shell/ev-view.c:2101
+msgid "Loading..."
+msgstr "در حال بار کردن..."
+
+#: ../shell/ev-sidebar-links.c:318
+msgid "Print..."
+msgstr "چاپ..."
+
+#: ../shell/ev-sidebar-links.c:686
+msgid "Index"
+msgstr "نمایه"
+
+#: ../shell/ev-sidebar-thumbnails.c:669
+msgid "Thumbnails"
+msgstr "مسطوره‌ها"
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Up"
+msgstr "لغزش به بالا"
+
+#: ../shell/ev-view-accessible.c:43
+msgid "Scroll Down"
+msgstr "لغزش به پایین"
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Up"
+msgstr "لغزش نما به بالا"
+
+#: ../shell/ev-view-accessible.c:50
+msgid "Scroll View Down"
+msgstr "لغزش نما به پایین"
+
+#: ../shell/ev-view-accessible.c:535
+msgid "Document View"
+msgstr "نمایش نوشتار"
+
+#: ../shell/ev-view.c:1271
+#, c-format
+msgid "Go to page %s"
+msgstr "رفتن به صفحهٔ %s"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:3292
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%Id مورد در این صفحه"
+
+#: ../shell/ev-view.c:3302
+msgid "Not found"
+msgstr "پیدا نشد"
+
+#: ../shell/ev-view.c:3304
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "٪%I3d از جستجو باقی مانده"
+
+#: ../shell/ev-window.c:585
+msgid "Unable to open document"
+msgstr "باز کردن نوشتار ممکن نیست"
+
+#: ../shell/ev-window.c:1123
+msgid "Open Document"
+msgstr "باز کردن نوشتار"
+
+#: ../shell/ev-window.c:1202
+#, c-format
+msgid "The file could not be saved as \"%s\"."
+msgstr "نمی‌توان این پرونده را به عنوان «%s» ذخیره کرد."
+
+#: ../shell/ev-window.c:1246
+msgid "Save a Copy"
+msgstr "ذخیرهٔ یک نسخه"
+
+#: ../shell/ev-window.c:1308
+msgid "Generating PDF is not supported"
+msgstr "تولید PDF پشتیبانی نمی‌شود"
+
+#: ../shell/ev-window.c:1317
+msgid "Printing is not supported on this printer."
+msgstr "چاپ با این چاپگر پشتیبانی نمی‌شود."
+
+#: ../shell/ev-window.c:1320
+#, c-format
+msgid ""
+"You were trying to print to a printer using the \"%s\" driver. This program "
+"requires a PostScript printer driver."
+msgstr ""
+"شما سعی می‌کردید با استفاده از گردانندهٔ «%s» روی چاپگری چاپ کنید. این برنامه "
+"به یک گردانندهٔ چاپگر پست‌اسکریپت نیاز دارد."
+
+#: ../shell/ev-window.c:1365
+msgid "Print"
+msgstr "چاپ"
+
+#: ../shell/ev-window.c:1371
+msgid "Pages"
+msgstr "صفحات"
+
+#: ../shell/ev-window.c:1432
+msgid "The \"Find\" feature will not work with this document"
+msgstr "امکانات «پیدا کردن» در این نوشتار کار نمی‌کند"
+
+#: ../shell/ev-window.c:1434
+msgid "Searching for text is only supported for PDF documents."
+msgstr "جستجو به دنبال متن فقط برای نوشتارهای PDF پشتیبانی می‌شود."
+
+#. Toolbar-only
+#: ../shell/ev-window.c:1665 ../shell/ev-window.c:2860
+msgid "Leave Fullscreen"
+msgstr "ترک حالت تمام‌صفحه"
+
+#: ../shell/ev-window.c:1994
+msgid "Toolbar Editor"
+msgstr "ویرایشگر نوار ابزار"
+
+#: ../shell/ev-window.c:2370
+#, c-format
+msgid ""
+"PostScript and PDF File Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"نمایشگر پرونده‌های PDF و پست‌اسکریپت.\n"
+"با استفاده از poppler نسخهٔ %s ‏(پسانهٔ %s)"
+
+#: ../shell/ev-window.c:2393
+msgid ""
+"Evince is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+msgstr ""
+"نرم‌افزار Evince، نرم‌افزار آزاد است: شما می‌توانید تحت شرایط مجوز عمومی همگانی "
+"گنو\n"
+"که به وسیلهٔ بنیاد نرم‌افزارهای آزاد منتشر شده است، آن را توزیع مجدد کنید\n"
+"و یا تغییر دهید؛ می‌توانید از نسخهٔ 2 مجوز یا (اگر خواستید)\n"
+"هر نسخهٔ بعد از آن استفاده کنید.\n"
+
+#: ../shell/ev-window.c:2397
+msgid ""
+"Evince is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+msgstr ""
+"نرم‌افزار Evince به این امید توزیع می‌شود که به درد بخورد،\n"
+"ولی بدون هیچ نوع تضمین؛ حتی بدون تضمین ضمنی کیفیت\n"
+"یا مناسب بودن برای منظوری خاص. برای جزئیات بیشتر\n"
+"مجوز عمومی همگانی گنو را ببینید.\n"
+
+#: ../shell/ev-window.c:2401
+msgid ""
+"You should have received a copy of the GNU General Public License\n"
+"along with Evince; if not, write to the Free Software Foundation, Inc.,\n"
+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"شما باید یک نسخه از مجوز عمومی همگانی را همراه با\n"
+"‏Evince دریافت کرده باشید؛ اگر نه، نامه‌ای به این نشانی بفرستید:\n"
+"Free Software Foundation, Inc.,\n"
+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:2425 ../shell/main.c:259
+msgid "Evince"
+msgstr "ای‌وینس"
+
+#: ../shell/ev-window.c:2428
+msgid "© 1996-2005 The Evince authors"
+msgstr "© 1996-2005 The Evince authors"
+
+#: ../shell/ev-window.c:2434
+msgid "translator-credits"
+msgstr ""
+"روزبه پورنادر <[email protected]>‏\n"
+"میلاد زکریا <[email protected]>‏\n"
+"الناز سربر <[email protected]>"
+
+#: ../shell/ev-window.c:2789
+msgid "_File"
+msgstr "_پرونده"
+
+#: ../shell/ev-window.c:2790
+msgid "_Edit"
+msgstr "_ویرایش"
+
+#: ../shell/ev-window.c:2791
+msgid "_View"
+msgstr "_نما"
+
+#: ../shell/ev-window.c:2792
+msgid "_Go"
+msgstr "_رفتن"
+
+#: ../shell/ev-window.c:2793
+msgid "_Help"
+msgstr "_راهنما"
+
+#. File menu
+#: ../shell/ev-window.c:2796
+msgid "_Open..."
+msgstr "_باز کردن..."
+
+#: ../shell/ev-window.c:2797
+msgid "Open an existing document"
+msgstr "باز کردن یک نوشتار موجود"
+
+#: ../shell/ev-window.c:2799
+msgid "_Save a Copy..."
+msgstr "_ذخیرهٔ یک نسخه..."
+
+#: ../shell/ev-window.c:2800
+msgid "Save a copy of the current document"
+msgstr "ذخیرهٔ یک نسخه از نوشتار فعلی"
+
+#: ../shell/ev-window.c:2802
+msgid "_Print..."
+msgstr "_چاپ..."
+
+#: ../shell/ev-window.c:2803
+msgid "Print this document"
+msgstr "چاپ این نوشتار"
+
+#: ../shell/ev-window.c:2805
+msgid "P_roperties"
+msgstr "ویژ_گی‌ها"
+
+#: ../shell/ev-window.c:2813
+msgid "Select _All"
+msgstr "انتخاب _همه"
+
+#: ../shell/ev-window.c:2816
+msgid "Find a word or phrase in the document"
+msgstr "پیدا کردن یک کلمه یا عبارت در نوشتار"
+
+#: ../shell/ev-window.c:2818
+msgid "Find Ne_xt"
+msgstr "پیدا کردن ب_عدی"
+
+#: ../shell/ev-window.c:2820
+msgid "T_oolbar"
+msgstr "نوار اب_زار"
+
+#: ../shell/ev-window.c:2822
+msgid "Rotate _Left"
+msgstr "چرخش به _چپ"
+
+#: ../shell/ev-window.c:2824
+msgid "Rotate _Right"
+msgstr "چرخش به _راست"
+
+#: ../shell/ev-window.c:2829
+msgid "Enlarge the document"
+msgstr "بزرگ کردن نوشتار"
+
+#: ../shell/ev-window.c:2832
+msgid "Shrink the document"
+msgstr "کوچک کردن نوشتار"
+
+#: ../shell/ev-window.c:2834
+msgid "_Reload"
+msgstr "_بازخوانی"
+
+#: ../shell/ev-window.c:2835
+msgid "Reload the document"
+msgstr "بازخوانی نوشتار"
+
+#. Go menu
+#: ../shell/ev-window.c:2839
+msgid "_Previous Page"
+msgstr "صفحهٔ _قبل"
+
+#: ../shell/ev-window.c:2840
+msgid "Go to the previous page"
+msgstr "رفتن به صفحهٔ قبل"
+
+#: ../shell/ev-window.c:2842
+msgid "_Next Page"
+msgstr "صفحهٔ _بعد"
+
+#: ../shell/ev-window.c:2843
+msgid "Go to the next page"
+msgstr "رفتن به صفحهٔ بعد"
+
+#: ../shell/ev-window.c:2845
+msgid "_First Page"
+msgstr "صفحهٔ _اول"
+
+#: ../shell/ev-window.c:2846
+msgid "Go to the first page"
+msgstr "رفتن به صفحهٔ اول"
+
+#: ../shell/ev-window.c:2848
+msgid "_Last Page"
+msgstr "آ_خرین صفحه"
+
+#: ../shell/ev-window.c:2849
+msgid "Go to the last page"
+msgstr "رفتن به صفحهٔ آخر"
+
+#. Help menu
+#: ../shell/ev-window.c:2853
+msgid "_Contents"
+msgstr "_محتویات"
+
+#: ../shell/ev-window.c:2856
+msgid "_About"
+msgstr "_درباره"
+
+#: ../shell/ev-window.c:2861
+msgid "Leave fullscreen mode"
+msgstr "ترک حالت تمام صفحه"
+
+#. View Menu
+#: ../shell/ev-window.c:2912
+msgid "_Toolbar"
+msgstr "نوار ا_بزار"
+
+#: ../shell/ev-window.c:2913
+msgid "Show or hide the toolbar"
+msgstr "نشان دادن یا مخفی کردن نوار ابزار"
+
+#: ../shell/ev-window.c:2915
+msgid "Side _Pane"
+msgstr "_قاب کناری"
+
+#: ../shell/ev-window.c:2916
+msgid "Show or hide the side pane"
+msgstr "نشان دادن یا مخفی کردن نوار کناری"
+
+#: ../shell/ev-window.c:2918
+msgid "_Continuous"
+msgstr "_پیوسته"
+
+#: ../shell/ev-window.c:2919
+msgid "Show the entire document"
+msgstr "نشان دادن همهٔ نوشتار"
+
+#: ../shell/ev-window.c:2921
+msgid "_Dual"
+msgstr "_دوتایی"
+
+#: ../shell/ev-window.c:2922
+msgid "Show two pages at once"
+msgstr "نشان دادن دو صفحه در یک زمان"
+
+#: ../shell/ev-window.c:2924
+msgid "_Fullscreen"
+msgstr "_تمام‌صفحه"
+
+#: ../shell/ev-window.c:2925
+msgid "Expand the window to fill the screen"
+msgstr "بزرگ کردن پنجره تا جایی که تمام صفحه را پر کند"
+
+#: ../shell/ev-window.c:2927
+msgid "_Presentation"
+msgstr "ا_رائه"
+
+#: ../shell/ev-window.c:2928
+msgid "Run document as a presentation"
+msgstr "اجرای نوشتار به صورت ارائهٔ مطلب"
+
+#: ../shell/ev-window.c:2930
+msgid "_Best Fit"
+msgstr "_بهترین اندازه"
+
+#: ../shell/ev-window.c:2931
+msgid "Make the current document fill the window"
+msgstr "نوشتار فعلی تمام پنجره را پر کند"
+
+#: ../shell/ev-window.c:2933
+msgid "Fit Page _Width"
+msgstr "جا دادن _عرض صفحه"
+
+#: ../shell/ev-window.c:2934
+msgid "Make the current document fill the window width"
+msgstr "نوشتار فعلی عرض پنجره را پر کند"
+
+#. Links
+#: ../shell/ev-window.c:2941
+msgid "_Open Link"
+msgstr "_باز کردن پیوند"
+
+#: ../shell/ev-window.c:2943
+msgid "_Go To"
+msgstr "_رفتن به"
+
+#: ../shell/ev-window.c:2945
+msgid "_Copy Link Address"
+msgstr "_نسخه‌برداری از نشانی پیوند"
+
+#: ../shell/ev-window.c:3005
+msgid "Page"
+msgstr "صفحه"
+
+#: ../shell/ev-window.c:3006
+msgid "Select Page"
+msgstr "انتخاب صفحه"
+
+#: ../shell/ev-window.c:3018
+msgid "Zoom"
+msgstr "زوم"
+
+#: ../shell/ev-window.c:3020
+msgid "Adjust the zoom level"
+msgstr "تنظیم سطح زوم"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3036
+msgid "Previous"
+msgstr "قبلی"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3042
+msgid "Next"
+msgstr "بعدی"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3046
+msgid "Zoom In"
+msgstr "زوم به داخل"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3051
+msgid "Zoom Out"
+msgstr "زوم به خارج"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3061
+msgid "Fit Width"
+msgstr "جا دادن عرض"
+
+#: ../shell/ev-window-title.c:140
+#, c-format
+msgid "%s - Password Required"
+msgstr "‏%s ـ گذرواژه لازم است"
+
+#: ../shell/main.c:50
+msgid "The page of the document to display."
+msgstr "صفحه‌ای از نوشتار که نمایش داده شود."
+
+#: ../shell/main.c:50
+msgid "PAGE"
+msgstr "صفحه"
+
+#: ../shell/main.c:286
+msgid "Evince Document Viewer"
+msgstr "نمایشگر نوشتار Evince"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"دو گزینهٔ بولی ممکن است، درست مسطوره‌سازی را به کار می‌اندازد و نادرست ایجاد "
+"مسطوره‌های جدید را قطع می‌کند"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "به کار انداختن مسطوره‌سازی برای نوشتارهای PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "فرمان مسطوره برای نوشتارهای PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"فرمان معتبر به همراه آرگومان‌هایی برای نوشتار PDF. برای اطلاعات بیشتر مستندات "
+"مسطوره‌ساز ناتیلوس را ببینید."
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "Default sidebar size"
+#~ msgstr "اندازهٔ پیش‌فرض نوار کناری"
+
+#~ msgid "Show sidebar by default"
+#~ msgstr "نشان دادن نوار کناری به طور پیش‌فرض"
+
+#~ msgid "Show statusbar by default"
+#~ msgstr "نشان دادن نوار وضعیت به طور پیش‌فرض"
+
+#~ msgid "Show toolbar by default"
+#~ msgstr "نشان دادن نوار ابزار به طور پیش‌فرض"
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. The "
+#~ "default size sets the sidebar's width in pixels based from the side of "
+#~ "the window. Any integer will be accepted. The sidebar will never shrink "
+#~ "smaller than the size of the text required to display Thumbnails or "
+#~ "Index. Large values will cause the sidebar to take up as much of the page "
+#~ "display area as possible relative to the window's size."
+#~ msgstr ""
+#~ "نوار کناری شیئی جانبی است که حاوی فهرست‌های نمایه و مسطوره است. اندازهٔ "
+#~ "پیش‌فرض، عرض نوار کناری را نسبت به لبهٔ کنار پنجره برحسب نقطه تعیین می‌کند. "
+#~ "هر عدد صحیحی قابل قبول است. نوار کناری هیچ‌وقت از اندازهٔ متن لازم برای "
+#~ "نمایش مسطوره‌ها یا نمایه کوچکتر نمی‌شود. مقادیر بزرگ سبب می‌شوند که بسته به "
+#~ "اندازهٔ پنجره، نوار کناری تا جایی از محوطهٔ نمایش صفحه را که امکان دارد، "
+#~ "اشغال کند."
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. Two "
+#~ "boolean options, true makes sidebar visible by default while false makes "
+#~ "sidebar not visible by default"
+#~ msgstr ""
+#~ "نوار کناری شیئی جانبی است که حاوی فهرست‌های نمایه و مسطوره است. دو گزینهٔ "
+#~ "بولی ممکن است: درست باعث می‌شود نوار کناری به طور پیش‌فرض مرئی باشد در حالی "
+#~ "که نادرست باعث می‌شود نوار کناری به طور پیش‌فرض مرئی نباشد."
+
+#~ msgid ""
+#~ "Statusbar is the standard bottom bar that display additional information "
+#~ "about links and other actions. Two boolean options, true makes the "
+#~ "statusbar visible by default while false makes sidebar not visible by "
+#~ "default."
+#~ msgstr ""
+#~ "نوار وضعیت، نوار دکمهٔ استانداردی است که اطلاعات اضافی دربارهٔ پیوند‌ها و "
+#~ "کنش‌های دیگر نمایش می‌دهد. دو گزینهٔ بولی ممکن است: درست باعث می‌شود نوار "
+#~ "وضعیت به طور پیش‌فرض مرئی باشد در حالی که نادرست باعث می‌شود نوار وضعیت به "
+#~ "طور پیش‌فرض مرئی نباشد."
+
+#~ msgid ""
+#~ "Toolbar is the top bar that contains navigation and zoom controls. Two "
+#~ "boolean options, true makes toolbar visible by default while false makes "
+#~ "toolbar not visible by default."
+#~ msgstr ""
+#~ "نوار ابزار، نوار بالای صفحه است که حاوی کنترل‌های حرکت و زوم است. دو "
+#~ "گزینهٔ بولی ممکن است: درست باعث می‌شود نوار ابزار به طور پیش‌فرض مرئی باشد "
+#~ "در حالی که نادرست باعث می‌شود نوار ابزار به طور پیش‌فرض مرئی نباشد."
+
+#~ msgid "Unable to find glade file"
+#~ msgstr "ذخیرهٔ پروندهٔ glade ممکن نیست"
+
+#~ msgid ""
+#~ "The glade file, %s, cannot be found. Please check that your installation "
+#~ "is complete."
+#~ msgstr ""
+#~ "پروندهٔ glade به نام %s یافته نشد. لطفاً بررسی کنید که نصبتان کامل باشد."
+
+#~ msgid "Document Viewer - Password Required"
+#~ msgstr "نمایشگر نوشتار ـ گذرواژه لازم است"
+
+#~ msgid "Loading document. Please wait"
+#~ msgstr "در حال بار کردن نوشتار. لطفاً صبر کنید"
+
+#~ msgid "Save the current document with a new filename"
+#~ msgstr "ذخیرهٔ نوشتار فعلی با یک نام پروندهٔ جدید"
+
+#~ msgid "View the properties of this document"
+#~ msgstr "نمایش ویژگی‌های این نوشتار"
+
+#~ msgid "Close this window"
+#~ msgstr "بستن این پنجره"
+
+#~ msgid "Copy text from the document"
+#~ msgstr "نسخه‌برداری از متن نوشتار"
+
+#~ msgid "Select the entire page"
+#~ msgstr "انتخاب کل صفحه"
+
+#~ msgid "Find next occurrence of the word or phrase"
+#~ msgstr "پیدا کردن مورد بعدی وقوع کلمه یا عبارت"
+
+#~ msgid "Customize the toolbar"
+#~ msgstr "سفارشی کردن نوار ابزار"
+
+#~ msgid "Rotate the document to the left"
+#~ msgstr "چرخاندن نوشتار به چپ"
+
+#~ msgid "Rotate the document to the right"
+#~ msgstr "چرخاندن نوشتار به راست"
+
+#~ msgid "Display help for the viewer application"
+#~ msgstr "نمایش راهنمای برنامهٔ نمایشگر"
+
+#~ msgid "Display credits for the document viewer creators"
+#~ msgstr "نمایش فهرست اسامی سازندگان نمایشگر نوشتار"
+
+#~ msgid "Scroll one page forward"
+#~ msgstr "لغزش به یک صفحه جلوتر"
+
+#~ msgid "Scroll one page backward"
+#~ msgstr "لغزش به یک صفحه عقب‌تر"
+
+#~ msgid "Focus the page selector"
+#~ msgstr "تمرکز روی انتخاب‌گر صفحه"
+
+#~ msgid "Go ten pages backward"
+#~ msgstr "رفتن به ده صفحه عقب‌تر"
+
+#~ msgid "Go ten pages forward"
+#~ msgstr "رفتن به ده صفحه جلوتر"
+
+#~ msgid "_Statusbar"
+#~ msgstr "نوار _وضعیت"
+
+#~ msgid "Show or hide the statusbar"
+#~ msgstr "نشان دادن یا مخفی کردن نوار وضعیت"
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 00000000..9051684b
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,1764 @@
+# Finnish translations for evince package.
+# Copyright (C) 2005-2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince package.
+# Tommi Vainikainen <[email protected]>, 2005, 2009-2010.
+# Ilkka Tuohela <[email protected]>, 2005-2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-15 15:37+0200\n"
+"PO-Revision-Date: 2010-03-15 15:37+0200\n"
+"Last-Translator: Tommi Vainikainen <[email protected]>\n"
+"Language-Team: Finnish <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Virhe käynnistettäessä komentoa ”%s” sarjakuvakirjan avaamiseksi: %s"
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Komento ”%s” epäonnistui avaamaan sarjakuvakirjan."
+
+#: ../backend/comics/comics-document.c:183
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Komento ”%s” ei päättynyt normaalisti."
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Ei ole sarjakuvakirjan MIME-tyyppi: %s"
+
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Ei löytynyt sopivaa komentoa, jolla avata tämän tyyppiset sarjakuvakirjat"
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Tuntematon MIME-tyyppi"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "Tiedosto on viallinen"
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "Arkistossa ei ole tiedostoja"
+
+#: ../backend/comics/comics-document.c:474
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Arkistosta ”%s” ei löytynyt kuvia"
+
+#: ../backend/comics/comics-document.c:718
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Tapahtui virhe poistaessa ”%s”."
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr "Virhe %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Sarjakuvakirjat"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu-asiakirjassa on virheellisiä muotoiluja"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Asiakirja koostuu useista tiedostoista, mutta yhtä tai useampia näistä "
+"tiedostoista ei voitu avata."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu-asiakirjat"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI-asiakirjassa on virheellisiä muotoiluja"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI-asiakirjat"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr "Tämä teos on vapaasti käytettävissä (public domain)"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "Kyllä"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "Ei"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "Tyyppi 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "Tyyppi 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "Tyyppi 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "Tyyppi 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "Tyyppi 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "Tuntematon kirjasintyyppi"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "Ei nimeä"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "Upotettu osajoukko"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "Upotettu"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "Ei upotettu"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF-asiakirjat"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Virheellinen asiakirja"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress-esitykset"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "ei virhettä"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Muisti ei riitä"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "ZIP-allekirjoitusta ei löydy"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Virheellinen ZIP-tiedosto"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Usean tiedoston sisältävät ZIP-tiedostot eivät ole tuettu"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Tiedostoa ei voi avata"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Tiedostosta ei voi lukea tietoja"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Tiedostoa ei löydy ZIP-arkistosta"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Tuntematon virhe"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Asiakirjan ”%s” lataaminen epäonnistui"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Asiakirjan ”%s” tallennus epäonnistui"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript-asiakirjat"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Liitettä ei voitu tallentaa ”%s”: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Liitettä ”%s” ei voi avata: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Liitettä ”%s” ei voi avata"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Tiedostotyyppi %s (%s) ei ole tuettu"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Kaikki asiakirjat"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Kaikki tiedostot"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Tilapäishakemiston luominen epäonnistui: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Tilapäishakemiston luominen epäonnistui: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Tiedosto ei ole kelvollinen .desktop-tiedosto"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Tuntematon työpöytätiedoston versionumero ”%s”"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Alkaen %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Sovellus ei hyväksy asiakirjoja komentoriviltä annettuna"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Tuntematon käynnistysvalitsin: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"Asiakirjojen URI:a ei voi antaa ”Type=Link”-muotoisille työpöytälinkeille"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Kohta ei ole käynnistin"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Älä ota yhteyttä istunnonhallintaan"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Anna tiedosto, joka sisältää tallennetut asetukset"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "TIEDOSTO"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Anna istunnonhallinnan tunniste"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "Tunniste"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Istunnonhallinnan valitsimet:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Näytä istunnonhallinnan valitsimet"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "Näytä ”_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "_Siirrä työkalupalkissa"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "Siirrä valittua kohtaa työkalupalkissa"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "_Poista työkalupalkista"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "Poista valittu kohta työkalupalkista"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "_Poista työkalupalkki"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "Poista valittu työkalupalkki"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Erotin"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+msgid "Running in presentation mode"
+msgstr "Suoritus esitystilassa"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5341
+msgid "Best Fit"
+msgstr "Paras sovitus"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Sovita sivun leveys"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400 %"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4205
+#: ../shell/ev-window-title.c:149 ../shell/main.c:282
+#, c-format
+msgid "Document Viewer"
+msgstr "Asiakirjakatselin"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Katsele monisivuisia asiakirjoja"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Ohita asiakirjan rajoitukset"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Ohita asiakirjan rajoitukset, kuten kopioinnin tai tulostuksen rajoitus."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "Poista tilapäistiedosto"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "Tulosta asetustiedosto"
+
+#: ../previewer/ev-previewer.c:143 ../previewer/ev-previewer.c:177
+msgid "MATE Document Previewer"
+msgstr "Maten asiakirjojen esikatselu"
+
+#: ../previewer/ev-previewer-window.c:90 ../shell/ev-window.c:3005
+msgid "Failed to print document"
+msgstr "Asiakirjaa ei voitu tulostaa"
+
+#: ../previewer/ev-previewer-window.c:204
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Valittua tulostinta ”%s” ei löytynyt"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:248 ../shell/ev-window.c:5090
+msgid "_Previous Page"
+msgstr "E_dellinen sivu"
+
+#: ../previewer/ev-previewer-window.c:249 ../shell/ev-window.c:5091
+msgid "Go to the previous page"
+msgstr "Siirry edelliselle sivulle"
+
+#: ../previewer/ev-previewer-window.c:251 ../shell/ev-window.c:5093
+msgid "_Next Page"
+msgstr "_Seuraava sivu"
+
+#: ../previewer/ev-previewer-window.c:252 ../shell/ev-window.c:5094
+msgid "Go to the next page"
+msgstr "Siirry seuraavalle sivulle"
+
+#: ../previewer/ev-previewer-window.c:255 ../shell/ev-window.c:5077
+msgid "Enlarge the document"
+msgstr "Suurenna asiakirjaa"
+
+#: ../previewer/ev-previewer-window.c:258 ../shell/ev-window.c:5080
+msgid "Shrink the document"
+msgstr "Kutista asiakirjaa"
+
+#: ../previewer/ev-previewer-window.c:261 ../libview/ev-print-operation.c:1315
+msgid "Print"
+msgstr "Tulosta"
+
+#: ../previewer/ev-previewer-window.c:262 ../shell/ev-window.c:5048
+msgid "Print this document"
+msgstr "Tulosta tämä asiakirja"
+
+#: ../previewer/ev-previewer-window.c:268 ../shell/ev-window.c:5192
+msgid "_Best Fit"
+msgstr "_Paras sovitus"
+
+#: ../previewer/ev-previewer-window.c:269 ../shell/ev-window.c:5193
+msgid "Make the current document fill the window"
+msgstr "Sovita nykyinen asiakirja ikkunan kokoiseksi"
+
+#: ../previewer/ev-previewer-window.c:271 ../shell/ev-window.c:5195
+msgid "Fit Page _Width"
+msgstr "So_vita sivun leveys"
+
+#: ../previewer/ev-previewer-window.c:272 ../shell/ev-window.c:5196
+msgid "Make the current document fill the window width"
+msgstr "Sovita nykyinen asiakirja täyttämään ikkunan leveys"
+
+#: ../previewer/ev-previewer-window.c:455 ../shell/ev-window.c:5263
+msgid "Page"
+msgstr "Sivu"
+
+#: ../previewer/ev-previewer-window.c:456 ../shell/ev-window.c:5264
+msgid "Select Page"
+msgstr "Valitse sivu"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Asiakirja"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Otsikko:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Sijainti:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Aihe:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "Tekijä:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Avainsanat:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Tuottaja:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Luoja:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Luotu:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Muokattu:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Sivumäärä:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimoitu:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Muoto:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Turvallisuus:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Paperin koko:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1896
+msgid "None"
+msgstr "Ei mitään"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "oletus:mm"
+
+#: ../properties/ev-properties-view.c:284
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:288
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f tuumaa"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, pysty (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, vaaka (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d / %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "/ %d"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:341
+msgid "Preparing to print…"
+msgstr "Valmistellaan tulostusta…"
+
+#: ../libview/ev-print-operation.c:343
+msgid "Finishing…"
+msgstr "Viimeistellään…"
+
+#: ../libview/ev-print-operation.c:345
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Tulostetaan sivua %d / %d…"
+
+#: ../libview/ev-print-operation.c:1169
+msgid "Printing is not supported on this printer."
+msgstr "Tulostamista ei ole tuettu tämän tulostimen kohdalla."
+
+#: ../libview/ev-print-operation.c:1234
+msgid "Invalid page selection"
+msgstr "Virheellinen sivuvalinta"
+
+#: ../libview/ev-print-operation.c:1235
+msgid "Warning"
+msgstr "Varoitus"
+
+#: ../libview/ev-print-operation.c:1237
+msgid "Your print range selection does not include any pages"
+msgstr "Tulostuksen sivualuevalinta ei sisällä yhtään sivua"
+
+#: ../libview/ev-print-operation.c:1891
+msgid "Page Scaling:"
+msgstr "Sivun skaalaus:"
+
+#: ../libview/ev-print-operation.c:1897
+msgid "Shrink to Printable Area"
+msgstr "Kutista tulostettavaan alueeseen"
+
+#: ../libview/ev-print-operation.c:1898
+msgid "Fit to Printable Area"
+msgstr "Sovita tulostettavaan alueeseen"
+
+#: ../libview/ev-print-operation.c:1901
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Skaalaa asiakirjan sivut sopimaan tulostimen sivuille. Valitse yksi "
+"seuraavista:\n"
+"\n"
+"• ”Ei mitään”: Sivunskaalausta ei tehdä.\n"
+"\n"
+"• ”Kutista tulostettavaan alueeseen”: Tulostettavaa aluetta suuremmat "
+"asiakirjan sivut kutistetaan sopimaan tulostimen sivun tulostettaan "
+"alueeseen.\n"
+"\n"
+"• ”Sovita tulostettavaan alueeseen”: Asiakirjan sivuja kasvatetaan tai "
+"kutistetaan tarpeen mukaan sopimaan tulostimen sivun tulostettavaan "
+"alueeseen.\n"
+
+#: ../libview/ev-print-operation.c:1913
+msgid "Auto Rotate and Center"
+msgstr "Käännä ja keskitä automaattisesti"
+
+#: ../libview/ev-print-operation.c:1916
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Käännä tulostimen sivusuunta jokaiselle sivulle täsmäämään asiakirjan sivun "
+"suuntaa. Asiakirjan sivut keskitetään tulostettavalle sivulle."
+
+#: ../libview/ev-print-operation.c:1921
+msgid "Select page size using document page size"
+msgstr "Valitse sivukoko käyttämällä asiakirjan sivukokoa"
+
+#: ../libview/ev-print-operation.c:1923
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Jos valittuna, jokainen sivu tulostetaan samaan paperikokoon kuin asiakirjan "
+"sivu."
+
+#: ../libview/ev-print-operation.c:2005
+msgid "Page Handling"
+msgstr "Sivunkäsittely"
+
+#: ../libview/ev-jobs.c:1434
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Sivun %d tulostus epäonnistui: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Vieritä ylös"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Vieritä alas"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Vieritä näkymää ylös"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Vieritä näkymää alas"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Asiakirjan näyttö"
+
+#: ../libview/ev-view-presentation.c:668
+msgid "Jump to page:"
+msgstr "Siirry sivulle:"
+
+#: ../libview/ev-view-presentation.c:970
+msgid "End of presentation. Click to exit."
+msgstr "Esitys päättyi. Sulje napsauttamalla."
+
+#: ../libview/ev-view.c:1724
+msgid "Go to first page"
+msgstr "Siirry ensimmäiselle sivulle"
+
+#: ../libview/ev-view.c:1726
+msgid "Go to previous page"
+msgstr "Siirry edelliselle sivulle"
+
+#: ../libview/ev-view.c:1728
+msgid "Go to next page"
+msgstr "Siirry seuraavalle sivulle"
+
+#: ../libview/ev-view.c:1730
+msgid "Go to last page"
+msgstr "Siirry viimeiselle sivulle"
+
+#: ../libview/ev-view.c:1732
+msgid "Go to page"
+msgstr "Siirry sivulle"
+
+#: ../libview/ev-view.c:1734
+msgid "Find"
+msgstr "Etsi"
+
+#: ../libview/ev-view.c:1762
+#, c-format
+msgid "Go to page %s"
+msgstr "Siirry sivulle %s"
+
+#: ../libview/ev-view.c:1768
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Siirry kohtaan %s tiedostossa ”%s”"
+
+#: ../libview/ev-view.c:1771
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Siirry tiedostoon ”%s”"
+
+#: ../libview/ev-view.c:1779
+#, c-format
+msgid "Launch %s"
+msgstr "Käynnistä %s"
+
+#: ../libview/ev-view.c:3923 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Ladataan…"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Etsi:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5065
+msgid "Find Pre_vious"
+msgstr "Etsi edellinen"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Etsi haettavan merkkijonon edellinen osuma"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5063
+msgid "Find Ne_xt"
+msgstr "Etsi _seuraava"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Etsi haettavan merkkijonon seuraava osuma"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Kirjainkoko huomioidaan"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Huomioidaanko kirjainkoko hauissa"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Salasana asiakirjalle %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Muunnetaan %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d/%d asiakirjaa muunnettu"
+
+#: ../shell/ev-convert-metadata.c:164 ../shell/ev-convert-metadata.c:179
+msgid "Converting metadata"
+msgstr "Muunnetaan metatietoja"
+
+#: ../shell/ev-convert-metadata.c:185
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Evincen käyttämä metatietomuoto on muuttunut ja se pitää muuntaa. Mikäli "
+"muunnos keskeytetään, metatietojen tallennus ei toimi."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Avaa äskettäin käytetty asiakirja"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Tämä asiakirja on lukittu ja voidaan lukea vain syöttämällä oikea salasana."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "Avaa asiakirja _lukituksesta"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Syötä salasana"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Salasana tarvitaan"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"Asiakirja ”%s” on lukittu ja vaatii salasanan ennen kuin se voidaan avata."
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Salasana:"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "_Unohda salasana heti"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _log out"
+msgstr "_Muista salasana uloskirjautumiseen saakka"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "Muista _pysyvästi"
+
+#: ../shell/ev-properties-dialog.c:58
+msgid "Properties"
+msgstr "Ominaisuudet"
+
+#: ../shell/ev-properties-dialog.c:92
+msgid "General"
+msgstr "Yleinen"
+
+#: ../shell/ev-properties-dialog.c:102
+msgid "Fonts"
+msgstr "Kirjasimet"
+
+#: ../shell/ev-properties-dialog.c:115
+msgid "Document License"
+msgstr "Asiakirjan lisenssi"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Kirjasin"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Kerätään kirjasintietoa… %3d %%"
+
+#: ../shell/ev-properties-license.c:138
+msgid "Usage terms"
+msgstr "Käyttöehdot"
+
+#: ../shell/ev-properties-license.c:144
+msgid "Text License"
+msgstr "Lisenssiteksti"
+
+#: ../shell/ev-properties-license.c:150
+msgid "Further Information"
+msgstr "Lisätietoa"
+
+#: ../shell/ev-sidebar-attachments.c:712
+msgid "Attachments"
+msgstr "Liitteet"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Tasot"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Tulosta…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Hakemisto"
+
+#: ../shell/ev-sidebar-thumbnails.c:956
+msgid "Thumbnails"
+msgstr "Pienoiskuvat"
+
+#: ../shell/ev-window.c:839
+#, c-format
+msgid "Page %s — %s"
+msgstr "Sivu %s — %s"
+
+#: ../shell/ev-window.c:841
+#, c-format
+msgid "Page %s"
+msgstr "Sivu %s"
+
+#: ../shell/ev-window.c:1285
+msgid "The document contains no pages"
+msgstr "Asiakirja ei sisällä yhtään sivua"
+
+#: ../shell/ev-window.c:1288
+msgid "The document contains only empty pages"
+msgstr "Asiakirja sisältää vain tyhjiä sivuja"
+
+#: ../shell/ev-window.c:1482 ../shell/ev-window.c:1648
+msgid "Unable to open document"
+msgstr "Asiakirjaa ei voitu avata"
+
+#: ../shell/ev-window.c:1619
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Ladataan asiakirjaa lähteestä ”%s”"
+
+#: ../shell/ev-window.c:1761 ../shell/ev-window.c:2038
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Noudetaan asiakirjaa (%d %%)"
+
+#: ../shell/ev-window.c:1794
+msgid "Failed to load remote file."
+msgstr "Etätiedostoa ei voitu ladata."
+
+#: ../shell/ev-window.c:1982
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Ladataan asiakirja uudestaan lähteestä %s"
+
+#: ../shell/ev-window.c:2014
+msgid "Failed to reload document."
+msgstr "Asiakirjaa ei voitu ladata uudestaan."
+
+#: ../shell/ev-window.c:2169
+msgid "Open Document"
+msgstr "Avaa asiakirja"
+
+#: ../shell/ev-window.c:2433
+#, c-format
+msgid "Saving document to %s"
+msgstr "Tallennetaan asiakirjaa kohteeseen %s"
+
+#: ../shell/ev-window.c:2436
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Tallennetaan liitettä kohteeseen %s"
+
+#: ../shell/ev-window.c:2439
+#, c-format
+msgid "Saving image to %s"
+msgstr "Tallennetaan kuvaa kohteeseen %s"
+
+#: ../shell/ev-window.c:2483 ../shell/ev-window.c:2583
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Tiedostoa ei voitu tallentaa nimellä ”%s”."
+
+#: ../shell/ev-window.c:2514
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Viedään asiakirjaa (%d %%)"
+
+#: ../shell/ev-window.c:2518
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Viedään liitettä (%d %%)"
+
+#: ../shell/ev-window.c:2522
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Viedään kuvaa (%d %%)"
+
+#: ../shell/ev-window.c:2644
+msgid "Save a Copy"
+msgstr "Tallenna kopio"
+
+#: ../shell/ev-window.c:2949
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d odottava työ jonossa"
+msgstr[1] "%d odottavaa työtä jonossa"
+
+#: ../shell/ev-window.c:3062
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Tulostetaan työtä ”%s”"
+
+#: ../shell/ev-window.c:3274
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Odotetaanko ennen sulkemista kunnes tulostustyö ”%s” on valmis?"
+
+#: ../shell/ev-window.c:3277
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"%d tulostustyötä on kesken. Haluatko odottaa ennen sulkemista niiden "
+"valmistumista?"
+
+#: ../shell/ev-window.c:3289
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Jos suljet ikkunat, odottavia tulostustöitä ei tulosteta."
+
+#: ../shell/ev-window.c:3293
+msgid "Cancel _print and Close"
+msgstr "Peru _tulostus ja sulje"
+
+#: ../shell/ev-window.c:3297
+msgid "Close _after Printing"
+msgstr "Sulje tulostuksen _jälkeen"
+
+#: ../shell/ev-window.c:3858
+msgid "Toolbar Editor"
+msgstr "Työkalupalkin muokkain"
+
+#: ../shell/ev-window.c:3990
+msgid "There was an error displaying help"
+msgstr "Tapahtui virhe näytettäessä ohjetta"
+
+#: ../shell/ev-window.c:4201
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Asiakirjakatselin\n"
+"Käyttää kirjastoa %s (%s)"
+
+#: ../shell/ev-window.c:4232
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince on vapaa ohjelma; voit levittää sitä edelleen ja/tai muokata sitä GNU:"
+"n GPL-lisenssin sallimilla tavoilla siten kuin Free Software Foundation on "
+"sen määritellyt; voit halutessasi käyttää lisenssin versiota 2 taikka mitä "
+"tahansa tämän jälkeen ilmestynyttä versiota.\n"
+
+#: ../shell/ev-window.c:4236
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evinceä levitetään siinä toivossa, että siitä on hyötyä, mutta ILMAN MITÄÄN "
+"TAKUUTA; jopa ilman konkludenttista takuuta MYYNTIKELPOISUUDESTA TAI "
+"SOVELTUMISESTA TIETTYYN ERITYISEEN TARKOITUKSEEN. Yksityiskohtien osalta "
+"katso GNU:n GPL-lisenssiä.\n"
+
+#: ../shell/ev-window.c:4240
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Sinun olisi pitänyt saada kopio GNU:n GPL-lisenssistä Evincen mukana; jos et "
+"sitä saanut, niin lähetä kirje Free Software Foundation, Inc. :lle, 59 "
+"Temple Place - Suite 330, Boston, MA 02111-1307, USA\n"
+
+#: ../shell/ev-window.c:4265
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4268
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Evincen tekijät"
+
+#: ../shell/ev-window.c:4274
+msgid "translator-credits"
+msgstr ""
+"Ilkka Tuohela, 2005-2008\n"
+"Tommi Vainikainen, 2005, 2009\n"
+"\n"
+"http://mate.fi/"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4543
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d osuma tällä sivulla"
+msgstr[1] "%d osumaa tällä sivulla"
+
+#: ../shell/ev-window.c:4551
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d %% haettavasta jäljellä"
+
+#: ../shell/ev-window.c:5028
+msgid "_File"
+msgstr "_Tiedosto"
+
+#: ../shell/ev-window.c:5029
+msgid "_Edit"
+msgstr "_Muokkaa"
+
+#: ../shell/ev-window.c:5030
+msgid "_View"
+msgstr "_Näytä"
+
+#: ../shell/ev-window.c:5031
+msgid "_Go"
+msgstr "_Siirry"
+
+#: ../shell/ev-window.c:5032
+msgid "_Help"
+msgstr "O_hje"
+
+#. File menu
+#: ../shell/ev-window.c:5035 ../shell/ev-window.c:5303
+msgid "_Open…"
+msgstr "_Avaa…"
+
+#: ../shell/ev-window.c:5036 ../shell/ev-window.c:5304
+msgid "Open an existing document"
+msgstr "Avaa olemassaoleva asiakirja"
+
+#: ../shell/ev-window.c:5038
+msgid "Op_en a Copy"
+msgstr "Avaa _kopio"
+
+#: ../shell/ev-window.c:5039
+msgid "Open a copy of the current document in a new window"
+msgstr "Avaa kopio nykyisestä asiakirjasta uudessa ikkunassa"
+
+#: ../shell/ev-window.c:5041
+msgid "_Save a Copy…"
+msgstr "_Tallenna kopio…"
+
+#: ../shell/ev-window.c:5042
+msgid "Save a copy of the current document"
+msgstr "Tallenna kopio tämänhetkisestä asiakirjasta"
+
+#: ../shell/ev-window.c:5044
+msgid "Page Set_up…"
+msgstr "_Sivuasetukset…"
+
+#: ../shell/ev-window.c:5045
+msgid "Set up the page settings for printing"
+msgstr "Määrittele sivuasetukset tulostusta varten"
+
+#: ../shell/ev-window.c:5047
+msgid "_Print…"
+msgstr "_Tulosta…"
+
+#: ../shell/ev-window.c:5050
+msgid "P_roperties"
+msgstr "O_minaisuudet"
+
+#: ../shell/ev-window.c:5058
+msgid "Select _All"
+msgstr "Valitse k_aikki"
+
+#: ../shell/ev-window.c:5060
+msgid "_Find…"
+msgstr "_Etsi…"
+
+#: ../shell/ev-window.c:5061
+msgid "Find a word or phrase in the document"
+msgstr "Etsi sanaa tai lausetta asiakirjasta"
+
+#: ../shell/ev-window.c:5067
+msgid "T_oolbar"
+msgstr "_Työkalupalkki"
+
+#: ../shell/ev-window.c:5069
+msgid "Rotate _Left"
+msgstr "Kierrä _vasemmalle"
+
+#: ../shell/ev-window.c:5071
+msgid "Rotate _Right"
+msgstr "Kierrä _oikealle"
+
+#: ../shell/ev-window.c:5082
+msgid "_Reload"
+msgstr "_Lataa uudestaan"
+
+#: ../shell/ev-window.c:5083
+msgid "Reload the document"
+msgstr "Lataa asiakirja uudestaan"
+
+#: ../shell/ev-window.c:5086
+msgid "Auto_scroll"
+msgstr "Vieritä _automaattisesti"
+
+#: ../shell/ev-window.c:5096
+msgid "_First Page"
+msgstr "_Ensimmäinen sivu"
+
+#: ../shell/ev-window.c:5097
+msgid "Go to the first page"
+msgstr "Siirry ensimmäiselle sivulle"
+
+#: ../shell/ev-window.c:5099
+msgid "_Last Page"
+msgstr "_Viimeinen sivu"
+
+#: ../shell/ev-window.c:5100
+msgid "Go to the last page"
+msgstr "Siirry viimeiselle sivulle"
+
+#. Help menu
+#: ../shell/ev-window.c:5104
+msgid "_Contents"
+msgstr "_Sisältö"
+
+#: ../shell/ev-window.c:5107
+msgid "_About"
+msgstr "_Tietoja"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5111
+msgid "Leave Fullscreen"
+msgstr "Lopeta kokoruutu"
+
+#: ../shell/ev-window.c:5112
+msgid "Leave fullscreen mode"
+msgstr "Lopeta kokoruututila"
+
+#: ../shell/ev-window.c:5114
+msgid "Start Presentation"
+msgstr "Käynnistä esitys"
+
+#: ../shell/ev-window.c:5115
+msgid "Start a presentation"
+msgstr "Käynnistä asiakirjan esitys"
+
+#. View Menu
+#: ../shell/ev-window.c:5174
+msgid "_Toolbar"
+msgstr "_Työkalupalkki"
+
+#: ../shell/ev-window.c:5175
+msgid "Show or hide the toolbar"
+msgstr "Näytä tai piilota työkalupalkki"
+
+#: ../shell/ev-window.c:5177
+msgid "Side _Pane"
+msgstr "_Sivupaneeli"
+
+#: ../shell/ev-window.c:5178
+msgid "Show or hide the side pane"
+msgstr "Näytä tai piilota sivupaneeli"
+
+#: ../shell/ev-window.c:5180
+msgid "_Continuous"
+msgstr "_Jatkuva"
+
+#: ../shell/ev-window.c:5181
+msgid "Show the entire document"
+msgstr "Näytä koko asiakirja"
+
+#: ../shell/ev-window.c:5183
+msgid "_Dual"
+msgstr "K_aksi"
+
+#: ../shell/ev-window.c:5184
+msgid "Show two pages at once"
+msgstr "Näytä kaksi sivua kerrallaan"
+
+#: ../shell/ev-window.c:5186
+msgid "_Fullscreen"
+msgstr "_Kokoruutu"
+
+#: ../shell/ev-window.c:5187
+msgid "Expand the window to fill the screen"
+msgstr "Laajenna ikkuna täyttämään näyttö"
+
+#: ../shell/ev-window.c:5189
+msgid "Pre_sentation"
+msgstr "E_sitys"
+
+#: ../shell/ev-window.c:5190
+msgid "Run document as a presentation"
+msgstr "Näytä asiakirja esityksenä"
+
+#: ../shell/ev-window.c:5198
+msgid "_Inverted Colors"
+msgstr "_Käänteiset värit"
+
+#: ../shell/ev-window.c:5199
+msgid "Show page contents with the colors inverted"
+msgstr "Näytä sivun sisältö käänteisillä väreillä"
+
+#. Links
+#: ../shell/ev-window.c:5207
+msgid "_Open Link"
+msgstr "_Avaa linkki"
+
+#: ../shell/ev-window.c:5209
+msgid "_Go To"
+msgstr "_Siirry"
+
+#: ../shell/ev-window.c:5211
+msgid "Open in New _Window"
+msgstr "Avaa uudessa _ikkunassa"
+
+#: ../shell/ev-window.c:5213
+msgid "_Copy Link Address"
+msgstr "_Kopioi linkin osoite"
+
+#: ../shell/ev-window.c:5215
+msgid "_Save Image As…"
+msgstr "_Tallenna kuva nimellä…"
+
+#: ../shell/ev-window.c:5217
+msgid "Copy _Image"
+msgstr "Kopioi _kuva"
+
+#: ../shell/ev-window.c:5222
+msgid "_Open Attachment"
+msgstr "_Avaa liite"
+
+#: ../shell/ev-window.c:5224
+msgid "_Save Attachment As…"
+msgstr "_Tallenna liite nimellä…"
+
+#: ../shell/ev-window.c:5277
+msgid "Zoom"
+msgstr "Kuvasuhde"
+
+#: ../shell/ev-window.c:5279
+msgid "Adjust the zoom level"
+msgstr "Muuta kuvasuhdetta"
+
+#: ../shell/ev-window.c:5289
+msgid "Navigation"
+msgstr "Navigointi"
+
+#: ../shell/ev-window.c:5291
+msgid "Back"
+msgstr "Takaisin"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5294
+msgid "Move across visited pages"
+msgstr "Siirry luettujen sivujen välillä"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5324
+msgid "Previous"
+msgstr "Edellinen"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5329
+msgid "Next"
+msgstr "Seuraava"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5333
+msgid "Zoom In"
+msgstr "Lähennä"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5337
+msgid "Zoom Out"
+msgstr "Loitonna"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5345
+msgid "Fit Width"
+msgstr "Sovita leveyteen"
+
+#: ../shell/ev-window.c:5506 ../shell/ev-window.c:5523
+msgid "Unable to launch external application."
+msgstr "Ulkoista ohjelmaa ei voitu käynnistää."
+
+#: ../shell/ev-window.c:5580
+msgid "Unable to open external link"
+msgstr "Ulkoista linkkiä ei voi avata"
+
+#: ../shell/ev-window.c:5747
+msgid "Couldn't find appropriate format to save image"
+msgstr "Sopivaa tallennusmuotoa kuvalle ei löytynyt"
+
+#: ../shell/ev-window.c:5789
+msgid "The image could not be saved."
+msgstr "Kuvaa ei voi tallentaa."
+
+#: ../shell/ev-window.c:5821
+msgid "Save Image"
+msgstr "Tallenna kuva"
+
+#: ../shell/ev-window.c:5888
+msgid "Unable to open attachment"
+msgstr "Liitettä ei voi avata"
+
+#: ../shell/ev-window.c:5941
+msgid "The attachment could not be saved."
+msgstr "Liitettä ei voi tallentaa."
+
+#: ../shell/ev-window.c:5986
+msgid "Save Attachment"
+msgstr "Tallenna liite"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — vaaditaan salasana"
+
+#: ../shell/ev-utils.c:315
+msgid "By extension"
+msgstr "Päätteen mukaan"
+
+#: ../shell/main.c:70 ../shell/main.c:246
+msgid "MATE Document Viewer"
+msgstr "Maten asiakirjakatselin"
+
+#: ../shell/main.c:78
+msgid "The page of the document to display."
+msgstr "Asiakirjan sivu, joka näytetään."
+
+#: ../shell/main.c:78
+msgid "PAGE"
+msgstr "SIVU"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Suorita evince kokoruututilassa"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Suorita evince esitystilassa"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Suorita evince esikatselimena"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Asiakirjasta etsittävä sana tai lause"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "MERKKIJONO"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[TIEDOSTO…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Mahdolliset totuusarvot: ”true” (tosi) ottaa pienoiskuvat käyttöön, "
+"”false” (epätosi) poistaa pienoiskuvien luomisen käytöstä"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Ota PDF-asiakirjojen pienoiskuvat käyttöön"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Pienoiskuvakomento PDF-asiakirjoille"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Komento sekä argumentit PDF-asiakirjan pienoiskuvien tuottamiseen. Katso "
+"lisätietoja Nautiluksen pienoiskuvien tuottajan ohjeista."
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DVI-asiakirjan muoto virheellinen"
+
+#~ msgid "Search string"
+#~ msgstr "Hakusana"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "Merkkijonon nimi, jota etsitään"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Kirjainkoko huomioidaan"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "TOSI kirjainkoon huomioivalle haulle"
+
+#~ msgid "Highlight color"
+#~ msgstr "Korostusväri"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Korostusväri kaikille osumille"
+
+#~ msgid "Current color"
+#~ msgstr "Nykyinen väri"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Korostusväri viimeisimmälle osumalle"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "Palautetaanko aiemmat asiakirjat?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Evince näyttää sulkeutuneen odottamattomasti edellisellä ajokerralla. "
+#~ "Voit palautta avatut asiakirjat."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_Älä palauta"
+
+#~ msgid "_Recover"
+#~ msgstr "_Palauta"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Kaatumisesta palautuminen"
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "Symbolista linkkiä ”%s” ei voi luoda: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "Kopioita ei voi avata."
+
+#~ msgid "Co_nnect"
+#~ msgstr "_Yhdistä"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "Yhdistä _anonyymisti"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Yhdistä _käyttäjänä:"
+
+#~ msgid "_Username:"
+#~ msgstr "_Käyttäjätunnus:"
+
+#~ msgid "_Domain:"
+#~ msgstr "_Toimialue:"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "_Unohda salasana heti"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_Muista salasana uloskirjautumiseen saakka"
+
+#~ msgid "_Remember forever"
+#~ msgstr "Muista _pysyvästi"
+
+#~ msgid "File not available"
+#~ msgstr "Tiedosto ei saatavilla"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "Etätiedostot eivät ole tuettu"
+
+#~ msgid "Password Entry"
+#~ msgstr "Salasanakenttä"
+
+#~ msgid "Remember password for this session"
+#~ msgstr "Muista salasana tässä istunnossa"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "Tallenna salasana avainnippuun"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f × %.2f in"
+
+#~ msgid "Find Previous"
+#~ msgstr "Etsi edellinen"
+
+#~ msgid "Find Next"
+#~ msgstr "Etsi seuraava"
+
+#~ msgid "Incorrect password"
+#~ msgstr "Väärä salasana"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Evince-asiakirjakatselin"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "Letter"
+
+#~ msgid "Tabloid"
+#~ msgstr "Tabloid"
+
+#~ msgid "Ledger"
+#~ msgstr "Ledger"
+
+#~ msgid "Legal"
+#~ msgstr "Legal"
+
+#~ msgid "Statement"
+#~ msgstr "Statement"
+
+#~ msgid "Executive"
+#~ msgstr "Executive"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Kalvo"
+
+#~ msgid "Quarto"
+#~ msgstr "Quarto"
+
+#~ msgid "10x14"
+#~ msgstr "10×14"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "Encapsulated PostScript"
+
+#~ msgid "PostScript"
+#~ msgstr "PostScript"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "Tulkinta epäonnistui."
+
+#~ msgid "Images"
+#~ msgstr "Kuvat"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "PDF:n generoinnille ei ole tukea"
+
+#~ msgid "Pages"
+#~ msgstr "Sivut"
+
+#~ msgid "Error: dvipdfm exited with non-zero status."
+#~ msgstr "Virhe: dvipdfm palautti muun arvon kuin nolla."
+
+#~ msgid "Empty"
+#~ msgstr "Tyhjä"
+
+#~ msgid "75%"
+#~ msgstr "75 %"
+
+#~ msgid "No document loaded."
+#~ msgstr "Mitään asiakirjaa ei ole ladattu."
+
+#~ msgid "File is not readable."
+#~ msgstr "Tiedostoa ei voi lukea."
+
+#~ msgid "Document loaded."
+#~ msgstr "Asiakirja latautui."
+
+#~ msgid "Broken pipe."
+#~ msgstr "Putkirikko."
+
+#~ msgid "_Previous"
+#~ msgstr "E_dellinen"
+
+#~ msgid "_Next"
+#~ msgstr "Seu_raava"
+
+#~ msgid "Not found"
+#~ msgstr "Ei löytynyt"
+
+#~ msgid "Searching for text is only supported for PDF documents."
+#~ msgstr "Tekstin hakemista tuetaan vain PDF-asiakirjoissa."
+
+#~ msgid "*"
+#~ msgstr "*"
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 00000000..8cab0561
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,1747 @@
+# French translation of evince.
+# Copyright (C) 2005-2010 The Free Software Foundation, Inc.
+# This file is distributed under the GNU General Public License Version 2.
+#
+# Vincent Carriere <[email protected]>, 2005.
+# Christophe Merlet <[email protected]>, 2005-2006.
+# Vincent Untz <[email protected]>, 2005.
+# Thomas Vergnaud <[email protected]>, 2006.
+# Guillaume Desmottes <[email protected]>, 2006.
+# Jonathan Ernst <[email protected]>, 2006-2007, 2009.
+# Robert-André Mauchin <[email protected]>, 2006-2008.
+# Damien Durand <[email protected]>, 2006.
+# Claude Paroz <[email protected]>, 2007-2010.
+# Stéphane Raimbault <[email protected]>, 2007-2008.
+# Pierre Lemaire <[email protected]>, 2008.
+# Milan Bouchet-Valat <[email protected]>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Evince HEAD\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-09-13 11:43+0000\n"
+"PO-Revision-Date: 2010-09-20 11:51+0100\n"
+"Last-Translator: Milan Bouchet-Valat <[email protected]>\n"
+"Language-Team: MATE French Team <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Erreur lors de l'exécution de la commande « %s » afin de décompresser la "
+"bande dessinée : %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr ""
+"La commande « %s » a échoué lors de la décompression de la bande dessinée."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "La commande « %s » ne s'est pas terminée normalement."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Mauvais type MIME bande dessinée : %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Impossible de trouver une commande appropriée pour décompresser ce type de "
+"bande dessinée"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Type MIME inconnu"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Fichier corrompu"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Aucun fichier dans l'archive"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Aucune image trouvée dans l'archive %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Une erreur est survenue lors de la suppression de « %s »."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Erreur %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Bandes dessinées"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "Le document DjVu a un format incorrect"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Le document est composé de plusieurs fichiers. Un ou plusieurs de ces\n"
+"fichiers ne sont pas accessibles."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Documents DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Le document DVI a un format incorrect"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Documents DVI"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Cette œuvre est dans le domaine public"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Oui"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Non"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Type de police inconnu"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Sans nom"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Sous-ensemble intégré"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Intégré"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Non intégré"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Documents PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Document non valide"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Diapos Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Aucune erreur"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Mémoire insuffisante"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Impossible de trouver la signature ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Fichier ZIP non valide"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Les fichiers ZIP multiples ne sont pas pris en charge"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Impossible d'ouvrir le fichier"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Impossible de lire les données à partir du fichier"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Impossible de trouver un fichier dans l'archive ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Erreur inconnue"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Le chargement du document « %s » a échoué"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "L'enregistrement du document « %s » a échoué"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Documents PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Impossible d'enregistrer la pièce jointe « %s » : %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Impossible d'ouvrir la pièce jointe « %s » : %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Impossible d'ouvrir la pièce jointe « %s »"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Le type de fichier %s (%s) n'est pas pris en charge"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Tous les documents"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Tous les fichiers"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Impossible de créer un fichier temporaire : %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Impossible de créer un répertoire temporaire : %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Le fichier n'est pas un fichier .desktop valide"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Version « %s » du fichier .desktop non reconnue"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Démarrage de %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "L'application n'accepte pas les documents en ligne de commande"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Option de lancement non reconnue : %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"Impossible de passer les URI de documents vers une entrée .desktop de type "
+"« Type=Link »"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "L'élément n'est pas exécutable"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Désactive la connexion au gestionnaire de sessions"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Indique un fichier contenant la configuration enregistrée"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FICHIER"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Indique l'ID de la gestion de sessions"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Options de gestion de sessions :"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Afficher les options de gestion de sessions"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Afficher « _%s »"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Déplacer sur la barre d'outils"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Déplace l'élément sélectionné sur la barre d'outils"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Retirer de la barre d'outils"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Retire l'élément sélectionné de la barre d'outils"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Supprimer la barre d'outils"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Supprime la barre d'outils sélectionnée"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Séparateur"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5761
+msgid "Best Fit"
+msgstr "Taille idéale"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Ajuster à la largeur de la page"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400 %"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4554
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Visionneur de documents"
+
+# Utilisation de l'infinitif dans les infobulles du Bureau
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Afficher des documents multipages"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Passer outre les restrictions du document"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Passer outre les restrictions du document, par exemple sur la copie ou "
+"l'impression."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Supprimer le fichier temporaire"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Imprimer le fichier de paramètres"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Prévisualiseur de documents de MATE"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3185
+msgid "Failed to print document"
+msgstr "L'impression du document a échoué"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "L'imprimante sélectionnée « %s » ne peut pas être trouvée"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5476
+msgid "_Previous Page"
+msgstr "Page _précédente"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5477
+msgid "Go to the previous page"
+msgstr "Aller à la page précédente"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5479
+msgid "_Next Page"
+msgstr "Page _suivante"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5480
+msgid "Go to the next page"
+msgstr "Aller à la page suivante"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5463
+msgid "Enlarge the document"
+msgstr "Agrandir le document"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5466
+msgid "Shrink the document"
+msgstr "Réduire le document"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Imprimer"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5432
+msgid "Print this document"
+msgstr "Imprime ce document"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5578
+msgid "_Best Fit"
+msgstr "Taille _idéale"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5579
+msgid "Make the current document fill the window"
+msgstr "Ajuste le document actuel à la taille de la fenêtre"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5581
+msgid "Fit Page _Width"
+msgstr "_Ajuster à la largeur de la page"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5582
+msgid "Make the current document fill the window width"
+msgstr "Ajuste le document actuel à la largeur de la fenêtre"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5683
+msgid "Page"
+msgstr "Page"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5684
+msgid "Select Page"
+msgstr "Sélectionne la page"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Document"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Titre :"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Emplacement :"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Sujet :"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Auteur :"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Mots-clés :"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Producteur :"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Créateur :"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Créé le :"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Modifié le :"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Nombre de pages :"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimisé :"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Format :"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Sécurité :"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Format de papier :"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Aucun"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f pouces"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, portrait (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, paysage (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d sur %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "sur %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Chargement…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Préparation de l'impression…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Finalisation…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Impression de la page %d sur %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "L'impression n'est pas prise en charge pour cette imprimante."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Sélection de pages non valide"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Avertissement"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Votre intervalle d'impression n'inclut aucune page"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Ajustement des pages :"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Réduire selon la zone imprimable"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Ajuster selon la zone imprimable"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Redimensionne les pages du document pour correspondre à la taille de page de "
+"l'imprimante sélectionnée. Choisissez parmi les options suivantes :\n"
+"\n"
+"• Aucune : les pages ne sont pas redimensionnées.\n"
+"\n"
+"• Réduire selon la zone imprimable : les pages plus grandes que la zone "
+"imprimable sont réduites pour correspondre à la zone imprimable de "
+"l'imprimante.\n"
+"\n"
+"• Ajuster selon la zone imprimable : les pages sont réduites ou agrandies "
+"afin de correspondre au mieux à la zone imprimable de l'imprimante.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Pivoter et centrer automatiquement"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Fait pivoter les pages à l'impression selon l'orientation de chaque page du "
+"document imprimé. Les pages sont centrées dans la zone d'impression de "
+"l'imprimante."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Choisir la taille du papier en fonction de celle des pages du document"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Si activé, chaque page est imprimée selon la taille de papier indiquée dans "
+"le document."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Gestion des pages"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Impossible d'imprimer la page %d : %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Défiler vers le haut"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Défiler vers le bas"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Faire défiler la vue vers le haut"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Faire défiler la vue vers le bas"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Vue du document"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Aller à la page :"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Fin de la présentation. Cliquez pour quitter."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Aller à la première page"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Aller à la page précédente"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Aller à la page suivante"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Aller à la dernière page"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Aller à la page"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Rechercher"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Aller à la page %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Aller à %s sur le fichier « %s »"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Aller à la page « %s »"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Lancer %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Rechercher :"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5449
+msgid "Find Pre_vious"
+msgstr "Rechercher le _précédent"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Recherche l'occurrence précédente de la chaîne"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5447
+msgid "Find Ne_xt"
+msgstr "Rechercher le _suivant"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Recherche l'occurrence suivante de la chaîne"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Respecter la c_asse"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Utilise ou non une recherche sensible à la casse"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Icône :"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Note"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Commentaire"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Clé"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Aide"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Nouveau paragraphe"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Paragraphe"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Insertion"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Croix"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Cercle"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Propriétés des annotations"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Couleur :"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Style :"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Transparent"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Opaque"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "État initial de la fenêtre :"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Ouvrir"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Fermer"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Exécution en mode présentation"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Mot de passe pour le document %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Conversion de %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d documents sur %d convertis"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Conversion de métadonnées"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Le format des métadonnées utilisées par Evince a changé, elles doivent donc "
+"être adaptées. Si la migration est annulée, le stockage des métadonnées ne "
+"fonctionnera pas."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Ouvre un document récemment utilisé"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Ce document est verrouillé et ne peut être lu qu'en saisissant le mot de "
+"passe correct."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Déverrouiller le document"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Saisissez le mot de passe"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Mot de passe requis"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"Le document « %s » est verrouillé et nécessite un mot de passe avant de "
+"pouvoir être ouvert."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Mot de passe :"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "_Oublier le mot de passe immédiatement"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Se _souvenir du mot de passe pour cette session"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Se souvenir du mot de passe _indéfiniment"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Propriétés"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Général"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Polices"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Licence du document"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Police"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Collecte des informations de polices… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Conditions d'utilisation"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Texte de la licence"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Informations complémentaires"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Liste"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Annotations"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Texte"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Ajouter une annotation texte"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Ajouter"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Le document ne contient aucune annotation"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Page %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Pièces jointes"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Couches"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Imprimer…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Index"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Vignettes"
+
+#: ../shell/ev-window.c:875
+#, c-format
+msgid "Page %s — %s"
+msgstr "Page %s — %s"
+
+#: ../shell/ev-window.c:877
+#, c-format
+msgid "Page %s"
+msgstr "Page %s"
+
+#: ../shell/ev-window.c:1436
+msgid "The document contains no pages"
+msgstr "Le document n'a aucune page"
+
+#: ../shell/ev-window.c:1439
+msgid "The document contains only empty pages"
+msgstr "Le document ne contient que des pages vides"
+
+#: ../shell/ev-window.c:1644 ../shell/ev-window.c:1810
+msgid "Unable to open document"
+msgstr "Impossible d'ouvrir le document"
+
+#: ../shell/ev-window.c:1781
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Chargement du document à partir de « %s »"
+
+#: ../shell/ev-window.c:1923 ../shell/ev-window.c:2202
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Téléchargement du document (%d %%)"
+
+#: ../shell/ev-window.c:1956
+msgid "Failed to load remote file."
+msgstr "Impossible de charger le fichier distant."
+
+#: ../shell/ev-window.c:2146
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Rechargement du document à partir de %s"
+
+#: ../shell/ev-window.c:2178
+msgid "Failed to reload document."
+msgstr "Le rechargement du document a échoué."
+
+#: ../shell/ev-window.c:2333
+msgid "Open Document"
+msgstr "Ouvrir un document"
+
+#: ../shell/ev-window.c:2631
+#, c-format
+msgid "Saving document to %s"
+msgstr "Enregistrement du document vers %s"
+
+#: ../shell/ev-window.c:2634
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Enregistrement de la pièce jointe vers %s"
+
+#: ../shell/ev-window.c:2637
+#, c-format
+msgid "Saving image to %s"
+msgstr "Enregistrement de l'image vers %s"
+
+#: ../shell/ev-window.c:2681 ../shell/ev-window.c:2781
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Le fichier ne peut pas être enregistré sous « %s »."
+
+#: ../shell/ev-window.c:2712
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Envoi du document (%d %%)"
+
+#: ../shell/ev-window.c:2716
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Envoi de la pièce jointe (%d %%)"
+
+#: ../shell/ev-window.c:2720
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Envoi de l'image (%d %%)"
+
+#: ../shell/ev-window.c:2844
+msgid "Save a Copy"
+msgstr "Enregistrer une copie"
+
+#: ../shell/ev-window.c:3129
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d tâche en attente dans la file"
+msgstr[1] "%d tâches en attente dans la file"
+
+#: ../shell/ev-window.c:3242
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Impression de la tâche « %s »"
+
+#: ../shell/ev-window.c:3420
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Le document contient des champs de formulaire qui ont été remplis. Si vous "
+"n'enregistrez pas une copie, les modifications seront définitivement perdues."
+
+#: ../shell/ev-window.c:3424
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Le document contient des annotations nouvelles ou modifiées. Si vous "
+"n'enregistrez pas une copie, les modifications seront définitivement perdues."
+
+#: ../shell/ev-window.c:3431
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Enregistrer une copie du document « %s » avant de fermer ?"
+
+#: ../shell/ev-window.c:3450
+msgid "Close _without Saving"
+msgstr "Fermer _sans enregistrer"
+
+#: ../shell/ev-window.c:3454
+msgid "Save a _Copy"
+msgstr "Enregistrer une _copie"
+
+#: ../shell/ev-window.c:3528
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Faut-il attendre la fin de l'impression de « %s » avant de fermer ?"
+
+#: ../shell/ev-window.c:3531
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"%d tâches d'impression sont en cours. Faut-il attendre la fin de "
+"l'impression avant de fermer ?"
+
+#: ../shell/ev-window.c:3543
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Si vous fermez la fenêtre, les tâches en attente d'impression ne seront pas "
+"imprimées."
+
+#: ../shell/ev-window.c:3547
+msgid "Cancel _print and Close"
+msgstr "Annuler l'_impression et fermer"
+
+#: ../shell/ev-window.c:3551
+msgid "Close _after Printing"
+msgstr "Fermer _après l'impression"
+
+#: ../shell/ev-window.c:4171
+msgid "Toolbar Editor"
+msgstr "Éditeur de la barre d'outils"
+
+#: ../shell/ev-window.c:4338
+msgid "There was an error displaying help"
+msgstr "Une erreur s'est produite lors de l'affichage de l'aide"
+
+#: ../shell/ev-window.c:4550
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Visionneur de documents\n"
+"Utilise %s (%s)"
+
+#: ../shell/ev-window.c:4581
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince est un logiciel libre ; vous pouvez le redistribuer et/ou le\n"
+"modifier selon les termes de la Licence Publique Générale GNU, telle\n"
+"que publiée par la Free Software Foundation ; version 2 de la licence,\n"
+"ou (à votre discrétion) toute version ultérieure.\n"
+
+#: ../shell/ev-window.c:4585
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE "
+"GARANTIE ; sans même la garantie implicite de VALEUR MARCHANDE ou "
+"D'ADÉQUATION À UN BESOIN PARTICULIER. Pour plus de détails, voir la Licence "
+"Publique Générale GNU.\n"
+
+#: ../shell/ev-window.c:4589
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Un exemplaire de la Licence Publique Générale GNU doit être fourni avec "
+"Evince ; si ce n'est pas le cas, écrivez à la Free Software Foundation, "
+"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4614
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4617
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Les auteurs d'Evince"
+
+#: ../shell/ev-window.c:4623
+msgid "translator-credits"
+msgstr ""
+"Vincent Carriere <[email protected]>\n"
+"Christophe Merlet <[email protected]>\n"
+"Thomas Vergnaud <[email protected]>\n"
+"Guillaume Desmottes <[email protected]>\n"
+"Jonathan Ernst <[email protected]>\n"
+"Robert-André Mauchin <[email protected]>\n"
+"Damien Durand <[email protected]>\n"
+"Claude Paroz <[email protected]>\n"
+"Pierre Lemaire <[email protected]>\n"
+"Bruno Brouard <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4889
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "Trouvé %d fois sur cette page"
+msgstr[1] "Trouvés %d fois sur cette page"
+
+#: ../shell/ev-window.c:4894
+msgid "Not found"
+msgstr "Non trouvé"
+
+#: ../shell/ev-window.c:4900
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d %% restant à rechercher"
+
+#: ../shell/ev-window.c:5415
+msgid "_File"
+msgstr "_Fichier"
+
+#: ../shell/ev-window.c:5416
+msgid "_Edit"
+msgstr "É_dition"
+
+#: ../shell/ev-window.c:5417
+msgid "_View"
+msgstr "_Affichage"
+
+#: ../shell/ev-window.c:5418
+msgid "_Go"
+msgstr "A_ller à"
+
+#: ../shell/ev-window.c:5419
+msgid "_Help"
+msgstr "Aid_e"
+
+#. File menu
+#: ../shell/ev-window.c:5422 ../shell/ev-window.c:5723
+msgid "_Open…"
+msgstr "_Ouvrir…"
+
+#: ../shell/ev-window.c:5423 ../shell/ev-window.c:5724
+msgid "Open an existing document"
+msgstr "Ouvre un document existant"
+
+#: ../shell/ev-window.c:5425
+msgid "Op_en a Copy"
+msgstr "Ouvrir une _copie"
+
+#: ../shell/ev-window.c:5426
+msgid "Open a copy of the current document in a new window"
+msgstr "Ouvre une copie du document actuel dans une nouvelle fenêtre"
+
+#: ../shell/ev-window.c:5428
+msgid "_Save a Copy…"
+msgstr "Enregi_strer une copie…"
+
+#: ../shell/ev-window.c:5429
+msgid "Save a copy of the current document"
+msgstr "Enregistre une copie du document actuel"
+
+#: ../shell/ev-window.c:5431
+msgid "_Print…"
+msgstr "_Imprimer…"
+
+#: ../shell/ev-window.c:5434
+msgid "P_roperties"
+msgstr "_Propriétés"
+
+#: ../shell/ev-window.c:5442
+msgid "Select _All"
+msgstr "_Tout sélectionner"
+
+#: ../shell/ev-window.c:5444
+msgid "_Find…"
+msgstr "Rec_hercher…"
+
+#: ../shell/ev-window.c:5445
+msgid "Find a word or phrase in the document"
+msgstr "Recherche un mot ou une phrase dans le document"
+
+#: ../shell/ev-window.c:5451
+msgid "T_oolbar"
+msgstr "Barre d'_outils"
+
+#: ../shell/ev-window.c:5453
+msgid "Rotate _Left"
+msgstr "Pivoter vers la _gauche"
+
+#: ../shell/ev-window.c:5455
+msgid "Rotate _Right"
+msgstr "Pivoter vers la _droite"
+
+#: ../shell/ev-window.c:5457
+msgid "Save Current Settings as _Default"
+msgstr "Réglages actuels par _défaut"
+
+#: ../shell/ev-window.c:5468
+msgid "_Reload"
+msgstr "_Recharger"
+
+#: ../shell/ev-window.c:5469
+msgid "Reload the document"
+msgstr "Recharge le document"
+
+#: ../shell/ev-window.c:5472
+msgid "Auto_scroll"
+msgstr "Dé_filement automatique"
+
+#: ../shell/ev-window.c:5482
+msgid "_First Page"
+msgstr "_Première page"
+
+#: ../shell/ev-window.c:5483
+msgid "Go to the first page"
+msgstr "Aller à la première page"
+
+#: ../shell/ev-window.c:5485
+msgid "_Last Page"
+msgstr "_Dernière page"
+
+#: ../shell/ev-window.c:5486
+msgid "Go to the last page"
+msgstr "Aller à la dernière page"
+
+#. Help menu
+#: ../shell/ev-window.c:5490
+msgid "_Contents"
+msgstr "_Sommaire"
+
+#: ../shell/ev-window.c:5493
+msgid "_About"
+msgstr "À _propos"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5497
+msgid "Leave Fullscreen"
+msgstr "Quitter le mode plein écran"
+
+#: ../shell/ev-window.c:5498
+msgid "Leave fullscreen mode"
+msgstr "Quitte le mode plein écran"
+
+#: ../shell/ev-window.c:5500
+msgid "Start Presentation"
+msgstr "Démarrer la présentation"
+
+#: ../shell/ev-window.c:5501
+msgid "Start a presentation"
+msgstr "Démarre une présentation"
+
+#. View Menu
+#: ../shell/ev-window.c:5560
+msgid "_Toolbar"
+msgstr "Barre d'_outils"
+
+#: ../shell/ev-window.c:5561
+msgid "Show or hide the toolbar"
+msgstr "Affiche ou masque la barre d'outils"
+
+#: ../shell/ev-window.c:5563
+msgid "Side _Pane"
+msgstr "Panneau _latéral"
+
+#: ../shell/ev-window.c:5564
+msgid "Show or hide the side pane"
+msgstr "Affiche ou masque le panneau latéral"
+
+#: ../shell/ev-window.c:5566
+msgid "_Continuous"
+msgstr "_Continu"
+
+#: ../shell/ev-window.c:5567
+msgid "Show the entire document"
+msgstr "Affiche le document entier"
+
+#: ../shell/ev-window.c:5569
+msgid "_Dual"
+msgstr "Pages _doubles"
+
+#: ../shell/ev-window.c:5570
+msgid "Show two pages at once"
+msgstr "Affiche deux pages à la fois"
+
+#: ../shell/ev-window.c:5572
+msgid "_Fullscreen"
+msgstr "Pl_ein écran"
+
+#: ../shell/ev-window.c:5573
+msgid "Expand the window to fill the screen"
+msgstr "Agrandit la fenêtre pour occuper tout l'écran"
+
+#: ../shell/ev-window.c:5575
+msgid "Pre_sentation"
+msgstr "Pré_sentation"
+
+#: ../shell/ev-window.c:5576
+msgid "Run document as a presentation"
+msgstr "Affiche le document comme une présentation"
+
+#: ../shell/ev-window.c:5584
+msgid "_Inverted Colors"
+msgstr "Couleurs _inversées"
+
+#: ../shell/ev-window.c:5585
+msgid "Show page contents with the colors inverted"
+msgstr "Affiche le contenu des pages en inversant les couleurs"
+
+#. Links
+#: ../shell/ev-window.c:5593
+msgid "_Open Link"
+msgstr "_Ouvrir le lien"
+
+#: ../shell/ev-window.c:5595
+msgid "_Go To"
+msgstr "A_ller à"
+
+#: ../shell/ev-window.c:5597
+msgid "Open in New _Window"
+msgstr "Ouvrir dans une _nouvelle fenêtre"
+
+#: ../shell/ev-window.c:5599
+msgid "_Copy Link Address"
+msgstr "_Copier l'adresse du lien"
+
+#: ../shell/ev-window.c:5601
+msgid "_Save Image As…"
+msgstr "_Enregistrer l'image sous…"
+
+#: ../shell/ev-window.c:5603
+msgid "Copy _Image"
+msgstr "Copier l'_image"
+
+#: ../shell/ev-window.c:5605
+msgid "Annotation Properties…"
+msgstr "Propriétés de l'annotation…"
+
+#: ../shell/ev-window.c:5610
+msgid "_Open Attachment"
+msgstr "_Ouvrir la pièce jointe"
+
+#: ../shell/ev-window.c:5612
+msgid "_Save Attachment As…"
+msgstr "_Enregistrer la pièce jointe sous…"
+
+#: ../shell/ev-window.c:5697
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../shell/ev-window.c:5699
+msgid "Adjust the zoom level"
+msgstr "Ajuste le niveau de zoom"
+
+#: ../shell/ev-window.c:5709
+msgid "Navigation"
+msgstr "Navigation"
+
+#: ../shell/ev-window.c:5711
+msgid "Back"
+msgstr "Précédent"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5714
+msgid "Move across visited pages"
+msgstr "Se déplace à travers les pages visitées"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5744
+msgid "Previous"
+msgstr "Précédente"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5749
+msgid "Next"
+msgstr "Suivante"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5753
+msgid "Zoom In"
+msgstr "Zoom avant"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5757
+msgid "Zoom Out"
+msgstr "Zoom arrière"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5765
+msgid "Fit Width"
+msgstr "Ajuster la largeur"
+
+#: ../shell/ev-window.c:5910 ../shell/ev-window.c:5927
+msgid "Unable to launch external application."
+msgstr "Impossible de lancer l'application externe."
+
+#: ../shell/ev-window.c:5984
+msgid "Unable to open external link"
+msgstr "Impossible d'ouvrir le lien externe"
+
+#: ../shell/ev-window.c:6151
+msgid "Couldn't find appropriate format to save image"
+msgstr "Impossible de trouver le format approprié pour enregistrer l'image"
+
+#: ../shell/ev-window.c:6193
+msgid "The image could not be saved."
+msgstr "L'image ne peut pas être enregistrée."
+
+#: ../shell/ev-window.c:6225
+msgid "Save Image"
+msgstr "Enregistrer l'image"
+
+#: ../shell/ev-window.c:6353
+msgid "Unable to open attachment"
+msgstr "Impossible d'ouvrir la pièce jointe"
+
+#: ../shell/ev-window.c:6406
+msgid "The attachment could not be saved."
+msgstr "La pièce jointe ne peut pas être enregistrée."
+
+#: ../shell/ev-window.c:6451
+msgid "Save Attachment"
+msgstr "Enregistrer la pièce jointe"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Mot de passe requis"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Par extension"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Visionneur de documents de MATE"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "L'étiquette de la page du document à afficher."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Le numéro de la page du document à afficher."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMÉRO"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Exécute evince en mode plein écran"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Exécute evince en mode présentation"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Exécute evince en mode aperçu"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Le mot ou la phrase à rechercher dans le document"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "CHAÎNE"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FICHIER…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Valeurs booléennes disponibles : VRAI active la création de vignettes et "
+"FAUX désactive la création de nouvelles vignettes"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Active la création de vignettes pour les documents PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Commande pour la création des vignettes des documents PDF"
+
+# FIXME: Caja thumbnailer ? à vérifier.
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Commande valide et ses paramètres pour le créateur de vignettes des "
+"documents PDF. Consultez la documentation de Caja thumbnailer pour plus "
+"d'informations."
+
diff --git a/po/ga.po b/po/ga.po
new file mode 100644
index 00000000..9b918083
--- /dev/null
+++ b/po/ga.po
@@ -0,0 +1,1462 @@
+# Irish translations for evince package.
+# Copyright (C) 2007-2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince package.
+# Seán de Búrca <[email protected]>, 2007-2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-08-01 00:56-0600\n"
+"PO-Revision-Date: 2009-08-01 01:23-0600\n"
+"Last-Translator: Seán de Búrca <[email protected]>\n"
+"Language-Team: Irish <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=5; plural=n==1 ? 0 : (n%10==1 || n%10==2) ? 1 : (n%"
+"10>=3 && n%10<= 6) ? 2 : ((n%10>=7 && n%10<=9) || n==10) ? 3 : 4;\n"
+
+#: ../backend/comics/comics-document.c:155
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:169
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:178
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:225
+#, c-format
+msgid "Failed to create a temporary directory."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:347
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:354
+msgid "Can't find an appropiate command to decompress this type of comic book"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:385
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Cineál MIME Anaithnid"
+
+#: ../backend/comics/comics-document.c:412
+msgid "File corrupted"
+msgstr "Comhad truaillithe"
+
+#: ../backend/comics/comics-document.c:424
+msgid "No files in archive"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:465
+#, c-format
+msgid "No images found in archive %s"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:704
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:854
+#, c-format
+msgid "Error %s"
+msgstr "Earráid %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Leabhair Greannáin"
+
+#: ../backend/djvu/djvu-document.c:174
+msgid "DJVU document has incorrect format"
+msgstr "Tá formáid mhícheart ag an gcáipéis DJVU"
+
+#: ../backend/djvu/djvu-document.c:251
+msgid ""
+"The document is composed of several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Cáipéisí Djvu"
+
+#: ../backend/dvi/dvi-document.c:108
+msgid "DVI document has incorrect format"
+msgstr "Tá formáid mhícheart ag an gcáipéis DVI"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Cáipéisí DVI"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:826
+msgid "Yes"
+msgstr "Tá"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:829
+msgid "No"
+msgstr "Níl"
+
+#: ../backend/pdf/ev-poppler.cc:903
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:905
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:907
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:909
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:911
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:913
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:915
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:917
+msgid "Unknown font type"
+msgstr "Cineál cló anaithnid"
+
+#: ../backend/pdf/ev-poppler.cc:943
+msgid "No name"
+msgstr "Gan ainm"
+
+#: ../backend/pdf/ev-poppler.cc:951
+msgid "Embedded subset"
+msgstr ""
+
+#: ../backend/pdf/ev-poppler.cc:953
+msgid "Embedded"
+msgstr ""
+
+#: ../backend/pdf/ev-poppler.cc:955
+msgid "Not embedded"
+msgstr ""
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Cáipéisí PDF"
+
+#: ../backend/impress/impress-document.c:303
+#: ../backend/tiff/tiff-document.c:114
+msgid "Invalid document"
+msgstr "Cáipéis neamhbhailí"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Sleamhnáin Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Gan earráid"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr ""
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr ""
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "Comhad zip neamhbhailí"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr ""
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Ní féidir an comhad a oscailt"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Ní féidir sonraí a léamh ó chomhad"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr ""
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Earráid anaithnid"
+
+#: ../backend/ps/ev-spectre.c:113
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Theip ar luchtú na cáipéise \"%s\""
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Theip ar shábháil na cáipéise \"%s\""
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Cáipéisí PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Níorbh fhéidir iatán \"%s\" a shábháil: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Níorbh fhéidir iatán \"%s\" a oscailt: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Níorbh fhéidir iatán \"%s\" a oscailt"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr ""
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Gach Cáipéis"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Gach Comhad"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:46
+#: ../previewer/ev-previewer.c:47
+msgid "FILE"
+msgstr "COMHAD"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr ""
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "Taispeáin \"_%s\""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "_Bain ón mBarra Uirlisí"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "_Scrios Barra Uirlisí"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Deighilteoir"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:117
+msgid "Running in presentation mode"
+msgstr ""
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5211
+msgid "Best Fit"
+msgstr ""
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr ""
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4133
+#: ../shell/ev-window-title.c:150 ../shell/main.c:484
+#, c-format
+msgid "Document Viewer"
+msgstr "Amharcán Cáipéisí"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr ""
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr ""
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+
+#: ../previewer/ev-previewer.c:45
+msgid "Delete the temporary file"
+msgstr ""
+
+#: ../previewer/ev-previewer.c:46
+msgid "Print settings file"
+msgstr ""
+
+#: ../previewer/ev-previewer.c:141 ../previewer/ev-previewer.c:175
+msgid "MATE Document Previewer"
+msgstr "Réamhamharcán Cáipéisí MATE"
+
+#: ../previewer/ev-previewer-window.c:122 ../shell/ev-window.c:2875
+msgid "Failed to print document"
+msgstr "Theip ar phriontáil cáipéis"
+
+#: ../previewer/ev-previewer-window.c:242
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr ""
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:286 ../shell/ev-window.c:4970
+msgid "_Previous Page"
+msgstr "An Leathanach _Roimhe Seo"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:4971
+msgid "Go to the previous page"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:289 ../shell/ev-window.c:4973
+msgid "_Next Page"
+msgstr "An Chéad Leathanaigh _Eile"
+
+#: ../previewer/ev-previewer-window.c:290 ../shell/ev-window.c:4974
+msgid "Go to the next page"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:293 ../shell/ev-window.c:4957
+msgid "Enlarge the document"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:296 ../shell/ev-window.c:4960
+msgid "Shrink the document"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:299 ../shell/ev-print-operation.c:1294
+msgid "Print"
+msgstr "Priontáil"
+
+#: ../previewer/ev-previewer-window.c:300 ../shell/ev-window.c:4929
+msgid "Print this document"
+msgstr "Priontáil an cáipéis seo"
+
+#: ../previewer/ev-previewer-window.c:306 ../shell/ev-window.c:5068
+msgid "_Best Fit"
+msgstr "_Oiriúnú is Fearr"
+
+#: ../previewer/ev-previewer-window.c:307 ../shell/ev-window.c:5069
+msgid "Make the current document fill the window"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:309 ../shell/ev-window.c:5071
+msgid "Fit Page _Width"
+msgstr "Oiriúnaigh do Le_ithead an Leathanaigh"
+
+#: ../previewer/ev-previewer-window.c:310 ../shell/ev-window.c:5072
+msgid "Make the current document fill the window width"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:441 ../shell/ev-window.c:5135
+msgid "Page"
+msgstr "Leathanach"
+
+#: ../previewer/ev-previewer-window.c:442 ../shell/ev-window.c:5136
+msgid "Select Page"
+msgstr "Roghnaigh Leathanach"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Cáipéis"
+
+#: ../properties/ev-properties-view.c:59
+msgid "Title:"
+msgstr "Teideal:"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Location:"
+msgstr "Suíomh:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Subject:"
+msgstr "Ábhar:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Author:"
+msgstr "Údar:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Keywords:"
+msgstr "Lorgfhocail:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Producer:"
+msgstr "Táirgeoir:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Creator:"
+msgstr "Cruthaitheoir:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Created:"
+msgstr "Cruthaithe:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Modified:"
+msgstr "Athraithe:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Number of Pages:"
+msgstr "Líon Leathanaigh:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Optimized:"
+msgstr "Optamaithe:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Format:"
+msgstr "Formáid:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Security:"
+msgstr "Slándáil:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Paper Size:"
+msgstr "Méid Pháipéir:"
+
+#: ../properties/ev-properties-view.c:202
+msgid "None"
+msgstr "Neamhní"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:227
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:271
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:275
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f orlach"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:299
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Portráid (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:306
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Tírdhreach (%s)"
+
+#: ../libmisc/ev-page-action.c:72
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d as %d)"
+
+#: ../libmisc/ev-page-action.c:74
+#, c-format
+msgid "of %d"
+msgstr "as %d"
+
+#: ../libview/ev-jobs.c:958
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr ""
+
+#: ../libview/ev-jobs.c:1435
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Theip ar phriontáil leathanaigh %d: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr ""
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr ""
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr ""
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr ""
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Amharc Cáipéise"
+
+#: ../libview/ev-view.c:1466
+msgid "Go to first page"
+msgstr ""
+
+#: ../libview/ev-view.c:1468
+msgid "Go to previous page"
+msgstr ""
+
+#: ../libview/ev-view.c:1470
+msgid "Go to next page"
+msgstr ""
+
+#: ../libview/ev-view.c:1472
+msgid "Go to last page"
+msgstr ""
+
+#: ../libview/ev-view.c:1474
+msgid "Go to page"
+msgstr "Téigh go leathanach"
+
+#: ../libview/ev-view.c:1476
+msgid "Find"
+msgstr "Aimsigh"
+
+#: ../libview/ev-view.c:1504
+#, c-format
+msgid "Go to page %s"
+msgstr ""
+
+#: ../libview/ev-view.c:1510
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Téigh go %s i gcomhad \"%s\""
+
+#: ../libview/ev-view.c:1513
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Téigh go comhad \"%s\""
+
+#: ../libview/ev-view.c:1521
+#, c-format
+msgid "Launch %s"
+msgstr "Tosaigh %s"
+
+#: ../libview/ev-view.c:2781
+msgid "End of presentation. Press Escape to exit."
+msgstr ""
+
+#: ../libview/ev-view.c:3720
+msgid "Jump to page:"
+msgstr "Léim go leathanach:"
+
+#: ../libview/ev-view.c:4002 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:267
+msgid "Loading..."
+msgstr "Á luchtú..."
+
+#: ../shell/eggfindbar.c:146
+msgid "Search string"
+msgstr "Teaghrán cuardaigh"
+
+#: ../shell/eggfindbar.c:147
+msgid "The name of the string to be found"
+msgstr ""
+
+#: ../shell/eggfindbar.c:160
+msgid "Case sensitive"
+msgstr ""
+
+#: ../shell/eggfindbar.c:161
+msgid "TRUE for a case sensitive search"
+msgstr ""
+
+#: ../shell/eggfindbar.c:168
+msgid "Highlight color"
+msgstr "Dath aibhsithe"
+
+#: ../shell/eggfindbar.c:169
+msgid "Color of highlight for all matches"
+msgstr ""
+
+#: ../shell/eggfindbar.c:175
+msgid "Current color"
+msgstr "Dath reatha"
+
+#: ../shell/eggfindbar.c:176
+msgid "Color of highlight for the current match"
+msgstr ""
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Aimsigh:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:4946
+msgid "Find Pre_vious"
+msgstr "An Ceann _Roimhe Seo"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr ""
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:4944
+msgid "Find Ne_xt"
+msgstr "An Chéad Cheann _Eile"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr ""
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr ""
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr ""
+
+#: ../shell/ev-application.c:264
+msgid "Recover previous documents?"
+msgstr "Athshlánaigh cáipéisí roimhe seo?"
+
+#: ../shell/ev-application.c:267
+msgid ""
+"Evince appears to have exited unexpectedly the last time it was run. You can "
+"recover the opened documents."
+msgstr ""
+
+#: ../shell/ev-application.c:271
+msgid "_Don't Recover"
+msgstr ""
+
+#: ../shell/ev-application.c:274
+msgid "_Recover"
+msgstr ""
+
+#: ../shell/ev-application.c:277
+msgid "Crash Recovery"
+msgstr ""
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Focal faire le cáipéis %s"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr ""
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "_Díghlasáil Cáipéis"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Iontráil focal faire"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Focal faire de dhíth"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Focal Faire:"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr ""
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _logout"
+msgstr ""
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr ""
+
+#. Initial state
+#: ../shell/ev-print-operation.c:316
+msgid "Preparing to print ..."
+msgstr ""
+
+#: ../shell/ev-print-operation.c:318
+msgid "Finishing..."
+msgstr "Á chríochnú..."
+
+#: ../shell/ev-print-operation.c:320
+#, c-format
+msgid "Printing page %d of %d..."
+msgstr ""
+
+#: ../shell/ev-print-operation.c:1143
+msgid "Printing is not supported on this printer."
+msgstr ""
+
+#: ../shell/ev-print-operation.c:1208
+msgid "Invalid page selection"
+msgstr "Roghnú leathanach neamhbhailí"
+
+#: ../shell/ev-print-operation.c:1209
+msgid "Warning"
+msgstr "Rabhadh"
+
+#: ../shell/ev-print-operation.c:1211
+msgid "Your print range selection does not include any page"
+msgstr ""
+
+#: ../shell/ev-properties-dialog.c:57
+msgid "Properties"
+msgstr "Airíonna"
+
+#: ../shell/ev-properties-dialog.c:91
+msgid "General"
+msgstr "Ginearálta"
+
+#: ../shell/ev-properties-dialog.c:101
+msgid "Fonts"
+msgstr "Clónna"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Cló"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr ""
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Iatáin"
+
+#: ../shell/ev-sidebar-layers.c:395
+msgid "Layers"
+msgstr "Sraitheanna"
+
+#: ../shell/ev-sidebar-links.c:340
+msgid "Print..."
+msgstr "Priontáil..."
+
+#: ../shell/ev-sidebar-links.c:720
+msgid "Index"
+msgstr "Innéacs"
+
+#: ../shell/ev-sidebar-thumbnails.c:756
+msgid "Thumbnails"
+msgstr "Mionsamhlacha"
+
+#: ../shell/ev-window.c:828
+#, c-format
+msgid "Page %s - %s"
+msgstr "Leathanach %s - %s"
+
+#: ../shell/ev-window.c:830
+#, c-format
+msgid "Page %s"
+msgstr "Leathanahc %s"
+
+#: ../shell/ev-window.c:1253
+msgid "The document contains no pages"
+msgstr ""
+
+#: ../shell/ev-window.c:1256
+msgid "The document contains only empty pages"
+msgstr ""
+
+#: ../shell/ev-window.c:1479 ../shell/ev-window.c:1632
+msgid "Unable to open document"
+msgstr "Ní féidir cáipéis a oscailt"
+
+#: ../shell/ev-window.c:1603
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Cáipéis á luchtú ó \"%s\""
+
+#: ../shell/ev-window.c:1741 ../shell/ev-window.c:1924
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:1871
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Cáipéis á athluchtú ó %s"
+
+#: ../shell/ev-window.c:1903
+msgid "Failed to reload document."
+msgstr "Theip ar athluchtí na cáipéise."
+
+#: ../shell/ev-window.c:2055
+msgid "Open Document"
+msgstr "Oscail Cáipéis"
+
+#: ../shell/ev-window.c:2134
+#, c-format
+msgid "Couldn't create symlink “%s”: "
+msgstr "Níorbh fhéidir nasc siombalach \"%s\" a chruthú:"
+
+#: ../shell/ev-window.c:2161
+msgid "Cannot open a copy."
+msgstr "Ní féidir cóip a oscailt."
+
+#: ../shell/ev-window.c:2397
+#, c-format
+msgid "Saving document to %s"
+msgstr ""
+
+#: ../shell/ev-window.c:2400
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Iatán á shábháil go %s"
+
+#: ../shell/ev-window.c:2403
+#, c-format
+msgid "Saving image to %s"
+msgstr ""
+
+#: ../shell/ev-window.c:2447 ../shell/ev-window.c:2544
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr ""
+
+#: ../shell/ev-window.c:2475
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:2479
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:2483
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:2605
+msgid "Save a Copy"
+msgstr "Sábháil Cóip"
+
+#: ../shell/ev-window.c:2819
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+#: ../shell/ev-window.c:2932
+#, c-format
+msgid "Printing job “%s”"
+msgstr ""
+
+#: ../shell/ev-window.c:3139
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr ""
+
+#: ../shell/ev-window.c:3142
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+
+#: ../shell/ev-window.c:3154
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+
+#: ../shell/ev-window.c:3158
+msgid "Cancel _print and Close"
+msgstr ""
+
+#: ../shell/ev-window.c:3162
+msgid "Close _after Printing"
+msgstr ""
+
+#: ../shell/ev-window.c:3768
+msgid "Toolbar Editor"
+msgstr "Eagarthóir Bharra Uirlisí"
+
+#: ../shell/ev-window.c:3899
+msgid "There was an error displaying help"
+msgstr ""
+
+#: ../shell/ev-window.c:4129
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Amharcán Cáipéisí.\n"
+"poppler %s (%s) á úsáid"
+
+#: ../shell/ev-window.c:4158
+msgid ""
+"Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:4162
+msgid ""
+"Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:4166
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+
+#: ../shell/ev-window.c:4190
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4193
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Na húdair Evince"
+
+#: ../shell/ev-window.c:4199
+msgid "translator-credits"
+msgstr "Seán de Búrca <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4417
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../shell/ev-window.c:4425
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr ""
+
+#: ../shell/ev-window.c:4909
+msgid "_File"
+msgstr "_Comhad"
+
+#: ../shell/ev-window.c:4910
+msgid "_Edit"
+msgstr "_Eagar"
+
+#: ../shell/ev-window.c:4911
+msgid "_View"
+msgstr "_Amharc"
+
+#: ../shell/ev-window.c:4912
+msgid "_Go"
+msgstr "_Téigh"
+
+#: ../shell/ev-window.c:4913
+msgid "_Help"
+msgstr "Cab_hair"
+
+#. File menu
+#: ../shell/ev-window.c:4916 ../shell/ev-window.c:5094
+#: ../shell/ev-window.c:5173
+msgid "_Open..."
+msgstr "_Oscail..."
+
+#: ../shell/ev-window.c:4917 ../shell/ev-window.c:5174
+msgid "Open an existing document"
+msgstr ""
+
+#: ../shell/ev-window.c:4919
+msgid "Op_en a Copy"
+msgstr "Osca_il Cóip"
+
+#: ../shell/ev-window.c:4920
+msgid "Open a copy of the current document in a new window"
+msgstr ""
+
+#: ../shell/ev-window.c:4922 ../shell/ev-window.c:5096
+msgid "_Save a Copy..."
+msgstr "_Sábháil Cóip..."
+
+#: ../shell/ev-window.c:4923
+msgid "Save a copy of the current document"
+msgstr ""
+
+#: ../shell/ev-window.c:4925
+msgid "Page Set_up..."
+msgstr "Soc_rú Leathanaigh..."
+
+#: ../shell/ev-window.c:4926
+msgid "Setup the page settings for printing"
+msgstr ""
+
+#: ../shell/ev-window.c:4928
+msgid "_Print..."
+msgstr "_Priontáil..."
+
+#: ../shell/ev-window.c:4931
+msgid "P_roperties"
+msgstr "_Airíonna"
+
+#: ../shell/ev-window.c:4939
+msgid "Select _All"
+msgstr "Roghnaigh _Gach Rud"
+
+#: ../shell/ev-window.c:4941
+msgid "_Find..."
+msgstr "_Aimsigh..."
+
+#: ../shell/ev-window.c:4942
+msgid "Find a word or phrase in the document"
+msgstr ""
+
+#: ../shell/ev-window.c:4948
+msgid "T_oolbar"
+msgstr "_Barra Uirlisí"
+
+#: ../shell/ev-window.c:4950
+msgid "Rotate _Left"
+msgstr "Rothlaigh go _Tuathalach"
+
+#: ../shell/ev-window.c:4952
+msgid "Rotate _Right"
+msgstr "Rothlaigh go _Deisealach"
+
+#: ../shell/ev-window.c:4962
+msgid "_Reload"
+msgstr "_Athluchtaigh"
+
+#: ../shell/ev-window.c:4963
+msgid "Reload the document"
+msgstr "Athluchtaigh an cáipéis"
+
+#: ../shell/ev-window.c:4966
+msgid "Auto_scroll"
+msgstr ""
+
+#: ../shell/ev-window.c:4976
+msgid "_First Page"
+msgstr "An _Chéad Leathanach"
+
+#: ../shell/ev-window.c:4977
+msgid "Go to the first page"
+msgstr ""
+
+#: ../shell/ev-window.c:4979
+msgid "_Last Page"
+msgstr "An Leathanach _Deireanach"
+
+#: ../shell/ev-window.c:4980
+msgid "Go to the last page"
+msgstr ""
+
+#. Help menu
+#: ../shell/ev-window.c:4984
+msgid "_Contents"
+msgstr "_Inneachar"
+
+#: ../shell/ev-window.c:4987
+msgid "_About"
+msgstr "_Maidir Leis Seo"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4991
+msgid "Leave Fullscreen"
+msgstr "Fág Lánscáileán"
+
+#: ../shell/ev-window.c:4992
+msgid "Leave fullscreen mode"
+msgstr "Fág mód lánscáileáin"
+
+#: ../shell/ev-window.c:4994
+msgid "Start Presentation"
+msgstr "Tosaigh Láithreoireacht"
+
+#: ../shell/ev-window.c:4995
+msgid "Start a presentation"
+msgstr ""
+
+#. View Menu
+#: ../shell/ev-window.c:5050
+msgid "_Toolbar"
+msgstr "_Barra Uirlisí"
+
+#: ../shell/ev-window.c:5051
+msgid "Show or hide the toolbar"
+msgstr ""
+
+#: ../shell/ev-window.c:5053
+msgid "Side _Pane"
+msgstr "_Pána Taoibh"
+
+#: ../shell/ev-window.c:5054
+msgid "Show or hide the side pane"
+msgstr ""
+
+#: ../shell/ev-window.c:5056
+msgid "_Continuous"
+msgstr "L_eanúnach"
+
+#: ../shell/ev-window.c:5057
+msgid "Show the entire document"
+msgstr ""
+
+#: ../shell/ev-window.c:5059
+msgid "_Dual"
+msgstr "_Déach"
+
+#: ../shell/ev-window.c:5060
+msgid "Show two pages at once"
+msgstr ""
+
+#: ../shell/ev-window.c:5062
+msgid "_Fullscreen"
+msgstr "_Lánscáileán"
+
+#: ../shell/ev-window.c:5063
+msgid "Expand the window to fill the screen"
+msgstr ""
+
+#: ../shell/ev-window.c:5065
+msgid "Pre_sentation"
+msgstr "Lá_ithreoireacht"
+
+#: ../shell/ev-window.c:5066
+msgid "Run document as a presentation"
+msgstr ""
+
+#. Links
+#: ../shell/ev-window.c:5079
+msgid "_Open Link"
+msgstr "_Oscail Nasc"
+
+#: ../shell/ev-window.c:5081
+msgid "_Go To"
+msgstr "_Téigh Go"
+
+#: ../shell/ev-window.c:5083
+msgid "Open in New _Window"
+msgstr "Oscail i bh_Fuinneog Nua"
+
+#: ../shell/ev-window.c:5085
+msgid "_Copy Link Address"
+msgstr "_Cóipeáil Seoladh an Naisc"
+
+#: ../shell/ev-window.c:5087
+msgid "_Save Image As..."
+msgstr "_Sábháil Íomhá Mar..."
+
+#: ../shell/ev-window.c:5089
+msgid "Copy _Image"
+msgstr "Cóipeáil Í_omhá"
+
+#: ../shell/ev-window.c:5147
+msgid "Zoom"
+msgstr "Súmáil"
+
+#: ../shell/ev-window.c:5149
+msgid "Adjust the zoom level"
+msgstr ""
+
+#: ../shell/ev-window.c:5159
+msgid "Navigation"
+msgstr ""
+
+#: ../shell/ev-window.c:5161
+msgid "Back"
+msgstr "Siar"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5164
+msgid "Move across visited pages"
+msgstr ""
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5194
+msgid "Previous"
+msgstr "Roimhe Seo"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5199
+msgid "Next"
+msgstr "Ar Aghaidh"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5203
+msgid "Zoom In"
+msgstr "Súmáil Isteach"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5207
+msgid "Zoom Out"
+msgstr "Súmáil Amach"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5215
+msgid "Fit Width"
+msgstr "Oiriúnaigh don Leithead"
+
+#: ../shell/ev-window.c:5382 ../shell/ev-window.c:5398
+msgid "Unable to launch external application."
+msgstr ""
+
+#: ../shell/ev-window.c:5437
+msgid "Unable to open external link"
+msgstr ""
+
+#: ../shell/ev-window.c:5593
+msgid "Couldn't find appropriate format to save image"
+msgstr ""
+
+#: ../shell/ev-window.c:5632
+msgid "The image could not be saved."
+msgstr ""
+
+#: ../shell/ev-window.c:5664
+msgid "Save Image"
+msgstr "Sábháil Íomhá"
+
+#: ../shell/ev-window.c:5731
+msgid "Unable to open attachment"
+msgstr ""
+
+#: ../shell/ev-window.c:5782
+msgid "The attachment could not be saved."
+msgstr ""
+
+#: ../shell/ev-window.c:5827
+msgid "Save Attachment"
+msgstr "Sábháil Iatán"
+
+#: ../shell/ev-window-title.c:163
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - Focal Faire de Dhíth"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr ""
+
+#: ../shell/main.c:73 ../shell/main.c:436
+msgid "MATE Document Viewer"
+msgstr "Amharcán Cáipéisí MATE"
+
+#: ../shell/main.c:81
+msgid "The page of the document to display."
+msgstr ""
+
+#: ../shell/main.c:81
+msgid "PAGE"
+msgstr "LEATHANACH"
+
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr ""
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr ""
+
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr ""
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr ""
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "TEAGHRÁN"
+
+#: ../shell/main.c:89
+msgid "[FILE...]"
+msgstr "[COMHAD...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
diff --git a/po/gl.po b/po/gl.po
new file mode 100644
index 00000000..c42b438b
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,1757 @@
+# translation of evince-master-po-gl-7620.po to Galician
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# Ignacio Casal Quinteiro <[email protected]>, 2005, 2006.
+# Ignacio Casal Quinteiro <[email protected]>, 2007.
+# Ignacio Casal Quinteiro <[email protected]>, 2007, 2008.
+# Mancomún - Centro de Referencia e Servizos de Software Libre <[email protected]>, 2009.
+# Antón Méixome <[email protected]>, 2009.
+# Suso Baleato <[email protected]>
+# Fran Diéguez <[email protected]>, 2009, 2010.
+# Fran Dieguez <[email protected]>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince-master-po-gl-7620\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-08-16 10:32+0200\n"
+"PO-Revision-Date: 2010-08-16 10:32+0200\n"
+"Last-Translator: Fran Dieguez <[email protected]>\n"
+"Language-Team: Galician <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: gl\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Produciuse un erro ao executar a orde «%s» para descomprimir o cómic: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Produciuse un fallo na orde «%s» ao descomprimir o cómic."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "A orde «%s» non finalizou normalmente."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "O tipo MIME non é un libro de banda deseñada: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Non foi posíbel atopar unha orde apropiada para descomprimir este tipo de "
+"libro de banda deseñada"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Tipo MIME descoñecido"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Ficheiro danado"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Non hai ficheiros no arquivo"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Non se encontraron imaxes no arquivo %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Produciuse un erro ao borrar «%s»."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Erro %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Libros de banda deseñada"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "O documento DjVu ten un formato incorrecto"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"O documento está composto por varios ficheiros. A un ou máis destes "
+"ficheiros non é posíbel acceder."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Documentos DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "O documento DVI ten un formato incorrecto"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Documentos DVI"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Este traballo está no dominio público"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Si"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Non"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Tipo 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Tipo 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Tipo 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Tipo 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Tipo 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Tipo de letra descoñecido"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Sen nome"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Subconxunto incorporado"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Incorporado"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Non incorporado"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Documentos PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Documento incorrecto"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Diapositivas de Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Non hai erros"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Non hai suficiente memoria"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Non é posíbel encontrar a sinatura zip"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "O ficheiro ZIP é incorrecto"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Os ZIP multificheiro non se admiten"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Non foi posíbel abrir o ficheiro"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Non foi posíbel ler os datos do ficheiro"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Non foi posíbel encontrar o ficheiro no arquivo ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Erro descoñecido"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Produciuse un fallo ao cargar o documento «%s»"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Produciuse un fallo ao gardar o documento «%s»"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Documentos PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Non foi posíbel gardar o anexo «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Non foi posíbel abrir o anexo «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Non foi posíbel abrir o anexo «%s»"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Non se admite o tipo de ficheiro %s (%s)"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Todos os documentos"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Todos os ficheiros"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Produciuse un fallo ao crear un cartafol temporal: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Produciuse un fallo ao crear un cartafol temporal: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "O ficheiro non é un ficheiro .desktop válido"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Non se recoñece a versión do ficheiro desktop '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Iniciando %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "O aplicativo non acepta documentos na liña de ordes"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Non se recoñece a opción de inicio: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"Non é posíbel pasar o URI do documento a unha entrada desktop do tipo "
+"'Type=Link'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Non é un elemento executábel"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Desactivar a conexión co xestor de sesión"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Especificar o ficheiro que contén a configuración gardada"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FICHEIRO"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Especificar o ID de xestión de sesión"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opcións de xestión de sesión:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Mostrar as opcións de xestión de sesión"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Mostrar “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Mover na barra de ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Mover o elemento seleccionado na barra de ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "Elimina_r da barra de ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Eliminar o elemento seleccionado da barra de ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "E_liminar a barra de ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Eliminar a barra de ferramentas seleccionada"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Separador"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "Axuste óptimo"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Axustar á largura da páxina"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Visualizador de documentos"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Ver documentos de varias páxinas"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Ignorar as restricións do documento"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Ignorar as restricións do documento, como a restrición para copiar ou "
+"imprimir."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Eliminar o ficheiro temporal"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Ficheiro de configuracións de impresión"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Visualizador de documentos do MATE"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "Produciuse un fallo ao imprimir o documento"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Non foi posíbel encontrar a impresora seleccionada '%s'"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "Páxina _anterior"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "Ir á páxina anterior"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "Páxina _seguinte"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "Ir á páxina seguinte"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "Ampliar o documento"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "Reducir o documento"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Imprimir"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "Imprimir este documento"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "A_xuste óptimo"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "Facer que o documento actual encha a xanela"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "Axustar á _largura da páxina"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "Facer que o documento actual encha a largura da xanela"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "Páxina"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "Seleccionar a páxina"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Documento"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Título:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Localización:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Asunto:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Autor:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Palabras chave:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Produtor:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Creador:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Creado:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Modificado:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Número de páxinas:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimizado:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Formato:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Seguranza:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Tamaño do papel:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Ningún"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f polgadas"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Vertical (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Horizontal (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d de %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "de %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Cargando..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Preparándose para imprimir …"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Finalizando..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Imprimindo a páxina %d de %d..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Non se admite a impresión nesta impresora."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "A selección de páxina non é correcta"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Advertencia"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "A súa selección de intervalo para impresión non contén ningunha páxina"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Escalado de páxina:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Reducir á área imprimíbel"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Axustar á área imprimíbel"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Escalar as páxinas do documento para axustalas á páxina de impresora "
+"seleccionada. Seleccione unha das seguintes:\n"
+"\n"
+"• «Ningún»: Non se leva a cabo o escalado da páxina.\n"
+"\n"
+"• «Reducir á área imprimíbel»: As páxinas do documento máis grandes que a "
+"área imprimíbel son reducidas para axustarse á área imprimíbel da páxina na "
+"impresora.\n"
+"\n"
+"• «Axustar á área imprimíbel»: As páxinas do documento son ampliadas ou "
+"reducidas para axustarse á área imprimíbel da páxina na impresora.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Rotar automaticamente e centrar."
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Rotar a orientación da páxina da impresora en cada páxina para coincidir a "
+"orientación de cada páxina do documento. As páxinas do documento serán "
+"centradas na páxina da impresora."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr ""
+"Seleccione o tamaño de páxina empregando o tamaño de páxina do documento."
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Cando está activo, cada páxina será imprimida no mesmo tamaño de papel que a "
+"páxina do documento."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Xestión de páxina"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Produciuse un fallo ao imprimir a páxina %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Desprazar cara arriba"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Desprazar cara abaixo"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Desprazar a visualización cara arriba"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Desprazar a visualización cara abaixo"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Visualización de documentos"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Saltar á páxina:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Fin da presentación. Prema para saír."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Ir á primeira páxina"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Ir á páxina anterior"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Ir á seguinte páxina"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Ir á última páxina"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Ir á páxina"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Buscar"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Ir á páxina %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Ir a %s no ficheiro «%s»"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Ir ao ficheiro «%s»"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Iniciar %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Buscar:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "Buscar a an_terior"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Buscar a anterior aparición da cadea de busca"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "_Buscar a seguinte"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Buscar a seguinte aparición da cadea de busca"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Diferenciar as maiúsculas das minúsculas"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Alternar a busca diferenciando maiúsculas de minúsculas"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Icona:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Nota"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Comentario"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Chave"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Axuda"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Novo parágrafo"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Parágrafo"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Insertar"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Cruz"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Círculo"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Descoñecido"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Preferencias das anotacións"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Cor:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Estilo:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Transparente"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Opaco"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Estado inicial da xanela:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Abrir"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Pechar"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Executando no modo presentación"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Contrasinal para o documento %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Convertendo %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d de %d documentos convertidos"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Convertendo os metadatos"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"O formato dos metadatos empregados por Evince cambiou, e polo tanto precisan "
+"migrarse. Se cancela a migración o almacenamento dos metadatos non "
+"funcionará."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Abrir un documento recente"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Este documento está bloqueado e só se pode ler introducindo o contrasinal "
+"correcto."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Desbloquear o documento"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Introduza o contrasinal"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Requírese un contrasinal"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"O documento «%s» está bloqueado e require un contrasinal antes de que se "
+"poida abrir."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Contrasinal:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Esquecer o contrasinal _inmediatamente"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Lembrar o contrasinal até saír da _sesión"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Lem_brar sempre"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Propiedades"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Xeral"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Tipos de letra"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Licenza do documento"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Tipo de letra"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Obtendo información do tipo de letra... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Termos de uso"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Licenza do texto"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Máis información"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Lista"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Anotacións"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Texto"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Engadir texto de anotación"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Engadir"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "O documento non contén anotacións"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Páxina %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Anexos"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Capas"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Imprimir..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Índice"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Miniaturas"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "Páxina %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "Páxina %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "O documento non contén páxinas"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "O documento só contén páxinas baleiras"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "Non é posíbel abrir o documento"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Cargando o documento desde «%s»"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Descargando o documento (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "Produciuse un fallo ao cargar o ficheiro remoto."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Recargando o documento desde %s"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "Produciuse un fallo ao recargar o documento."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "Abrir o documento"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "Gardando o documento en %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Gardando o anexo en %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "Gardando a imaxe en %s"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Non foi posíbel gardar como «%s»."
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Subindo o documento (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Subindo o anexo (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Subindo a imaxe (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "Gardar unha copia"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d traballo pendente na cola"
+msgstr[1] "%d traballos pendentes na cola"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Imprimindo o traballo «%s»"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"O documento contén campos de formulario que foron recheados. Os cambios "
+"perderanse permanentemente se non garda unha copia."
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"O documento contén anotacións novas ou modificadas. Os cambios perderanse "
+"permanentemente se non garda unha copia."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Desexa gardar unha copia do documento «%s» antes de pechar?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "Pechar _sen gardar"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "Gardar unha _copia"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr ""
+"Quere esperar a que termine o traballo de impresión «%s» antes de pechar?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Hai %d traballos de impresión activos. Quere esperar a que termine a "
+"impresión antes de pechar?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Se pecha a xanela, non se imprimirán os traballos pendentes."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "Cancelar a im_presión e Pechar"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "Pechar _despois de imprimir"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "Editor da barra de ferramentas"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "Produciuse un erro ao mostrar a axuda"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Visualizador de documentos.\n"
+"Usando %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"O Evince é software libre, pode redistribuílo ou modificalo baixo as "
+"condicións da Licenza pública xeral GNU tal como a publica a Free Software "
+"Foundation; tanto na versión 2 da Licenza como (segundo o seu criterio) en "
+"calquera versión posterior.\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"O Evince distribúese esperando que sexa útil, mais SEN NINGUNHA GARANTÍA; "
+"mesmo sen a garantía implícita de VALOR COMERCIAL ou ADECUACIÓN PARA UN "
+"PROPÓSITO PARTICULAR. Para máis detalles vexa a Licenza pública xeral GNU.\n"
+
+#: ../shell/ev-window.c:4571
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Debeu de recibir unha copia da Licenza pública xeral GNU xunto co Evince; en "
+"caso contrario, escriba á Free Software Foundation, Inc., 59 Temple Place, "
+"Suite 330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Os autores do Evince"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"Fran Diéguez <[email protected]>, 2009, 2010.\n"
+"Mancomún - Centro de Referencia e Servizos de Software Libre <g11n@mancomun."
+"org>, 2009.\n"
+"Antón Méixome <[email protected]>, 2009.\n"
+"Suso Baleato <[email protected]>\n"
+"Ignacio Casal Quinteiro <[email protected]>, 2007, 2008.\n"
+"Ignacio Casal Quinteiro <[email protected]>, 2007.\n"
+"Ignacio Casal Quinteiro <[email protected]>, 2005, 2006."
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d aparición nesta páxina"
+msgstr[1] "%d aparicións nesta páxina"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "Non encontrado"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "falta por buscar %3d%%"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "_Ficheiro"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "_Ver"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "_Ir"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "A_xuda"
+
+#. File menu
+#: ../shell/ev-window.c:5402 ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "_Abrir..."
+
+#: ../shell/ev-window.c:5403 ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "Abrir un documento existente"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "A_brir unha copia"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "Abrir unha copia do documento actual nunha xanela nova"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "Gardar unha _copia..."
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "Gardar unha copia do documento actual"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "_Imprimir..."
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "P_ropiedades"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "Seleccionar _todo"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "_Buscar..."
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "Buscar unha palabra ou frase no documento"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "_Barra de ferramentas"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "Rotar á _esquerda"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "Rotar á _dereita"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "Gardar as configuracións actuais como as _predefinidas"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "_Recargar"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "Recargar o documento"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "Despra_zamento automático"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "_Primeira páxina"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "Ir á primeira páxina"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "Ú_ltima páxina"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "Ir á última páxina"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "_Contidos"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "_Sobre"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "Saír do modo de pantalla completa"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "Saír do modo de pantalla completa"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "Iniciar a presentación"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "Iniciar unha presentación"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "Barra de _ferramentas"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "Mostrar ou ocultar a barra de ferramentas"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "_Panel lateral"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "Mostrar ou ocultar o panel lateral"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "_Continuo"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "Mostrar todo o documento"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "_Dual"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "Mostrar dúas páxinas á vez"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "_Pantalla completa"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "Expandir a xanela para encher a pantalla"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "Pre_sentación"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "Executar o documento como unha presentación"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "_Inverter cores"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "Mostrar os contidos da páxina coas cores invertidas"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "_Abrir a ligazón"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "_Ir a"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "Abrir nunha _xanela nova"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "_Copiar a ligazón do enderezo"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "_Gardar a imaxe como..."
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "Copiar a _imaxe"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "Propiedades das anotacións..."
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "_Abrir anexo"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "_Gardar o anexo como..."
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "Axustar o nivel de zoom"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "Navegación"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "Atrás"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "Moverse a través das páxinas visitadas"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "Anterior"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "Seguinte"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "Ampliar"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "Reducir"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "Axustarse á largura"
+
+#: ../shell/ev-window.c:5890 ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "Non foi posíbel iniciar o aplicativo externo."
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "Non foi posíbel abrir a ligazón externa"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "Non foi posíbel encontrar o formato apropiado para gardar a imaxe"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "Non foi posíbel gardar a imaxe."
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "Gardar a imaxe"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "Non foi posíbel abrir o anexo"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "Non foi posíbel gardar o anexo."
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "Gardar o anexo"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Requírese o contrasinal"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Por extensión"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Visualizador de documentos do MATE"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "A etiqueta da páxina do documento para mostrar."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "PÁXINA"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "O número de páxina do documento para mostrar."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NÚMERO"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Executar o Evince no modo de pantalla completa"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Executar o Evince no modo de presentación"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Executar o Evince como un previsualizador"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "A palabra ou frase que se buscará no documento"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "CADEA"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FICHEIRO...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Opcións booleanas dispoñíbeis: «true» activa as miniaturas e «false» desactiva "
+"a creación de novas miniaturas"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Activar as miniaturas dos documentos PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Orde para crear miniaturas nos documentos PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Orde válida e argumentos para o creador de miniaturas de documentos PDF. "
+"Para máis información vexa a documentación sobre o miniaturizador do "
+"Caja."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "Configuración de pá_xina..."
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Configurar as preferencias de impresión"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "O formato do ficheiro DJVU é incorrecto"
+
+#~ msgid "Print..."
+#~ msgstr "Imprimindo..."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Gardar unha copia..."
+
+#~ msgid "_Print..."
+#~ msgstr "_Imprimir..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Buscar..."
diff --git a/po/gu.po b/po/gu.po
new file mode 100644
index 00000000..3c492b27
--- /dev/null
+++ b/po/gu.po
@@ -0,0 +1,1740 @@
+# translation of evince.master.gu.po to Gujarati
+# Ankit Patel <[email protected]>, 2005, 2006.
+# Ankit Patel <[email protected]>, 2007, 2008.
+# Sweta Kothari <[email protected]>, 2008, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.master.gu\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-07-20 15:08+0000\n"
+"PO-Revision-Date: 2010-07-22 16:39+0530\n"
+"Last-Translator: Sweta Kothari <[email protected]>\n"
+"Language-Team: Gujarati\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "કોમિક ચોપડીનું દબાણ ઓછુ કરવા માટે ક્રમમાં આદેશ “%s”ને શરૂ કરી રહ્યા હોય ત્યારે ભૂલ: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "કોમિક ચોપડીનું દબાણ ઓછુ કરવા દરમ્યાન આદેશ “%s” નિષ્ફળ."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "આદેશ “%s” નો સામાન્ય રીતે અંત આવતો નથી."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "કોમિક બુક MIME પ્રકાર નથી: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "કોમિક ચોપડીનાં આ પ્રકારનાં દબાણને ઓછુ કરવા માટે અનૂકુળ આદેશને શોધી શકાતો નથી"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "અજ્ઞાત MIME પ્રકાર"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "ફાઈલ બગડી ગયેલ છે"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "પેટીમાં ફાઇલો નથી"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "પેટી %s માં કોઈ ચિત્રો મળ્યા નહિં"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "“%s” ને કાઢતી વખતે ભૂલ હતી."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "ભૂલ %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "વાર્તાની પુસ્તકો"
+
+#: ../backend/djvu/djvu-document.c:173
+#| msgid "DVI document has incorrect format"
+msgid "DjVu document has incorrect format"
+msgstr "DjVu દસ્તાવેજનું બંધારણ અયોગ્ય છે"
+
+#: ../backend/djvu/djvu-document.c:250
+#| msgid ""
+#| "The document is composed of several files. One or more of such files "
+#| "cannot be accessed."
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"દસ્તાવેજ ઘણીબધી ફાઈલોથી બનાવવામાં આવેલ છે. આવી ફાઈલોમાંની એક અથવા વધુ વાપરી શકાશે "
+"નહિં."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+#| msgid "Djvu Documents"
+msgid "DjVu Documents"
+msgstr "DjVu દસ્તાવેજો"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI દસ્તાવેજનું બંધારણ અયોગ્ય છે"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI દસ્તાવેજો"
+
+#: ../backend/pdf/ev-poppler.cc:521
+msgid "This work is in the Public Domain"
+msgstr "આ કાર્ય સાર્વજનિક ડોમેઇનમાં છે"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:774
+msgid "Yes"
+msgstr "હા"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:777
+msgid "No"
+msgstr "ના"
+
+#: ../backend/pdf/ev-poppler.cc:905
+msgid "Type 1"
+msgstr "પ્રકાર ૧"
+
+#: ../backend/pdf/ev-poppler.cc:907
+msgid "Type 1C"
+msgstr "પ્રકાર 1C"
+
+#: ../backend/pdf/ev-poppler.cc:909
+msgid "Type 3"
+msgstr "પ્રકાર ૩"
+
+#: ../backend/pdf/ev-poppler.cc:911
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:913
+msgid "Type 1 (CID)"
+msgstr "પ્રકાર 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:915
+msgid "Type 1C (CID)"
+msgstr "પ્રકાર 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:917
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:919
+msgid "Unknown font type"
+msgstr "અજ્ઞાત ફોન્ટ પ્રકાર"
+
+#: ../backend/pdf/ev-poppler.cc:945
+msgid "No name"
+msgstr "નામવિહીન"
+
+#: ../backend/pdf/ev-poppler.cc:953
+msgid "Embedded subset"
+msgstr "જડિત ઉપસમૂહ"
+
+#: ../backend/pdf/ev-poppler.cc:955
+msgid "Embedded"
+msgstr "જડિત"
+
+#: ../backend/pdf/ev-poppler.cc:957
+msgid "Not embedded"
+msgstr "જડિત નથી"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF દસ્તાવેજો"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "અયોગ્ય દસ્તાવેજ"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "રજૂઆત સ્લાઈડો"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "કોઈ ભૂલ નથી"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "પૂરતી મેમરી નથી"
+
+#: ../backend/impress/zip.c:59
+#| msgid "Cannot find zip signature"
+msgid "Cannot find ZIP signature"
+msgstr "ZIP સહી શોધી શકતા નથી"
+
+#: ../backend/impress/zip.c:62
+#| msgid "Invalid zip file"
+msgid "Invalid ZIP file"
+msgstr "અયોગ્ય ZIP ફાઈલ"
+
+#: ../backend/impress/zip.c:65
+#| msgid "Multi file zips are not supported"
+msgid "Multi file ZIPs are not supported"
+msgstr "ઘણીબધી ફાઈલોના ZIPs આધારભૂત નથી"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "ફાઈલ ખોલી શકતા નથી"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "ફાઈલમાંથી માહિતી વાંચી શકતા નથી"
+
+#: ../backend/impress/zip.c:74
+#| msgid "Cannot find file in the zip archive"
+msgid "Cannot find file in the ZIP archive"
+msgstr "ZIP પેટીમાંથી ફાઈલ શોધી શકતા નથી"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "અજ્ઞાત ભૂલ"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "દસ્તાવેજ “%s” લાવવામાં નિષ્ફળ"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "દસ્તાવેજ “%s” સંગ્રહવામાં નિષ્ફળ"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "પોસ્ટસ્ક્રિપ્ટ દસ્તાવેજો"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "જોડાણ “%s” સંગ્રહી શક્યા નહિં: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "જોડાણ “%s” ખોલી શક્યા નહિં: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "જોડાણ “%s” ખોલી શક્યા નહિં"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "ફાઇલ પ્રકાર %s (%s) આધારભૂત નથી"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "બધા દસ્તાવેજો"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "બધી ફાઈલો"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+#| msgid "Failed to create a temporary directory."
+msgid "Failed to create a temporary file: %s"
+msgstr "કામચલાઉ ફાઇલને બનાવવામાં નિષ્ફળ: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+#| msgid "Failed to create a temporary directory."
+msgid "Failed to create a temporary directory: %s"
+msgstr "કામચલાઉ ડિરેક્ટરીને બનાવવામાં નિષ્ફળ: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "ફાઇલ એ યોગ્ય .desktop ફાઇલ નથી"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "ડેસ્કટોપ ફાઇલ આવૃત્તિ '%s' ઓળખાયેલ નથી"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s શરૂ થઇ ગયુ છે"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "કાર્યક્રમ એ આદેશ લીટી પર દસ્તાવેજો ને સ્વીકારતુ નથી"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "લોન્ચ વિકલ્પ ઓળખાયેલ નથી: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr " 'Type=Link' ડેસ્કટોપ નોંધણીને URIs દસ્તાવેજ ને પસાર કરી શકતુ નથી"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "લોન્ચેબલ વસ્તુ નથી"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "વ્યવસ્થાપક સત્રનું જોડાણ નિષ્ક્રિય કરો"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "સંગ્રહ થયેલ રૂપરેખાંકન માં રહેલી ફાઇલને સ્પષ્ટ કરો"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "સત્ર વ્યવસ્થાપન ID ને સ્પષ્ટ કરો"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "સત્ર વ્યવસ્થાપન વિકલ્પો:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "સત્ર વ્યવસ્થાપન વિકલ્પોને બતાવો"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s” બતાવો"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "સાધનપટ્ટી પર ખસો (_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "સાધનપટ્ટી પર પસંદ કરેલ વસ્તુ ખસેડો"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "સાધનપટ્ટીમાંથી દૂર કરો (_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "સાધનપટ્ટીમાંથી પસંદ કરેલ વસ્તુ દૂર કરો"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "સાધનપટ્ટી કાઢી નાંખો (_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "પસંદ કરેલ સાધનપટ્ટી દૂર કરો"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "વિભાજક"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5517
+msgid "Best Fit"
+msgstr "શ્રેષ્ઠ રીતે બંધબેસતું"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "પાનાંની પહોળાઈ પ્રમાણે બંધબેસતું"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "૫૦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "૭૦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "૮૫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "૧૦૦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "૧૨૫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "૧૫૦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "૧૭૫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "૨૦૦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "૩૦૦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "૪૦૦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+#| msgid "100%"
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+#| msgid "100%"
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+#| msgid "200%"
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+#| msgid "400%"
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4304
+#: ../shell/ev-window-title.c:149 ../shell/main.c:313
+#, c-format
+msgid "Document Viewer"
+msgstr "દસ્તાવેજ દર્શક"
+
+#: ../data/evince.desktop.in.in.h:2
+#| msgid "View multipage documents"
+msgid "View multi-page documents"
+msgstr "ઘણા-પાનાનાં દસ્તાવેજો જુઓ"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "દસ્તાવેજના બંધનો પર ફરીથી લખો"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "દસ્તાવેજના બંધનો પર ફરીથી લખો, જેમ કે નકલ કરવા માટે અથવા છાપન કરવા માટેના બંધનો."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "કામચલાઉ ફાઇલ કાઢી નાંખો"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "ફાઇલ સુયોજનોને છાપો"
+
+#: ../previewer/ev-previewer.c:147 ../previewer/ev-previewer.c:181
+msgid "MATE Document Previewer"
+msgstr "MATE દસ્તાવેજ દર્શક"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3065
+msgid "Failed to print document"
+msgstr "દસ્તાવેજ છાપવામાં નિષ્ફળ"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "પસંદ થયેલ પ્રિન્ટર '%s' ને શોધી શક્યા નહિં"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5232
+msgid "_Previous Page"
+msgstr "પહેલાનું પાનું (_P)"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5233
+msgid "Go to the previous page"
+msgstr "પહેલાના પાનાં પર જાઓ"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5235
+msgid "_Next Page"
+msgstr "આગળનું પાનું (_N)"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5236
+msgid "Go to the next page"
+msgstr "આગળના પાનાં પર જાઓ"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5219
+msgid "Enlarge the document"
+msgstr "દસ્તાવેજ મોટું કરો"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5222
+msgid "Shrink the document"
+msgstr "દસ્તાવેજ સંકોચો"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "છાપો"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5190
+msgid "Print this document"
+msgstr "આ દસ્તાવેજ છાપો"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5334
+msgid "_Best Fit"
+msgstr "શ્રેષ્ઠ રીતે બંધબેસતું (_B)"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5335
+msgid "Make the current document fill the window"
+msgstr "વર્તમાન દસ્તાવેજથી વિન્ડો ભરો"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5337
+msgid "Fit Page _Width"
+msgstr "પાનાંની પહોળાઈ પ્રમાણે બંધબેસાડો (_W)"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5338
+msgid "Make the current document fill the window width"
+msgstr "વર્તમાન દસ્તાવેજથી વિન્ડોની પહોળાઈ ભરો"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5439
+msgid "Page"
+msgstr "પાનું"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5440
+msgid "Select Page"
+msgstr "પાનું પસંદ કરો"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "દસ્તાવેજ"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "શીર્ષક:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "સ્થાન:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "વિષય:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "લેખક:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "મુખ્ય શબ્દો:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "ઉત્પાદક:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "બનાવનાર:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "બનાવેલ:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "સુધારાયેલ:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "પાનાંઓની સંખ્યા:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "શ્રેષ્ઠ બનાવેલ:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "બંધારણ:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "સુરક્ષા:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "કાગળ માપ:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "કંઇ નહી"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+#| msgid "%.0f x %.0f mm"
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+#| msgid "%.2f x %.2f inch"
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, ઊભું (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, આડું (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d ના %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "%d ના"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+#| msgid "Loading..."
+msgid "Loading…"
+msgstr "લાવી રહ્યા છીએ..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+#| msgid "Preparing to print ..."
+msgid "Preparing to print…"
+msgstr "છાપવા માટે તૈયારી કરી રહ્યા છે..."
+
+#: ../libview/ev-print-operation.c:336
+#| msgid "Finishing..."
+msgid "Finishing…"
+msgstr "સમાપ્ત કરી રહ્યા છે..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+#| msgid "Printing page %d of %d..."
+msgid "Printing page %d of %d…"
+msgstr "%d નું પાનું %d ને છાપી રહ્યા છે..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "આ પ્રિન્ટર પર છાપવાનું આધારભૂત નથી."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "અયોગ્ય પાનાં પસંદગી"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "ચેતવણી"
+
+#: ../libview/ev-print-operation.c:1229
+#| msgid "Your print range selection does not include any page"
+msgid "Your print range selection does not include any pages"
+msgstr "તમારી છાપન સીમા પસંદગી કોઇપણ પાનાંમાં ઉમેરાતી નથી"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "પાનાનું માપન:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "છાપી શકાય તેવા વિસ્તારને સંકોચો"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "છાપી શકાય તેવા વિસ્તારમાં બંધબેસાડો"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"દસ્તાવેજ પાનાંઓ પસંદ થયેલ પ્રિન્ટર પાનાંને બંધબેસે એમ માપો. નીચેનાં એકને પસંદ કરો:\n"
+"\n"
+"• \"કંઇ નહિં\": પાનાનું માપન થતુ નથી.\n"
+"\n"
+"• \"છાપી શકાય તેવા વિસ્તારને સંકોચો\": દસ્તાવેજ પાનાંઓ એ છાપી શકાય તેવા કરતા મોટા હોવાથી પ્રિન્ટર પાનાનાં છાપી શકાય તેવા વિસ્તારને "
+"બંધબેસાડવા માટે ઘટાડે છે.\n"
+"\n"
+"• \"છાપી શકાય તેવા વિસ્તારને બંધબેસાડો\": દસ્તાવેજ પાનાઓ પ્રિન્ટર પાનાનાં છાપી શકાય તેવા વિસ્તારને બંધબેસાડવા માટે જરૂરિયાત પ્રમાણે વધે અથવા ઘટે "
+"છે.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "સ્વયં ફેરવો અને કેન્દ્રમાં લાવો"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr "દરેક પાનાનું પ્રિન્ટર પાનાંની દિશા એ દરેક દસ્તાવેજ પાનાંની દિશાને બંધબેસે એમ ફેરવો. દસ્તાવેજ પાનાંઓ પ્રિન્ટર પાનામાં કેન્દ્રિત થયેલ હશે."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "દસ્તાવેજ પાનાનાં માપની મદદથી પાનાનું માપ પસંદ કરો"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr "જ્યારે સક્રિય થયેલ હોય ત્યારે, દરેક પાનું દસ્તાવેજ પાના તરીકે એજ માપનાં પેપર પર છાપેલ હશે."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "પાનાને સંભાળવાનું"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "પાનું %d ને છાપવામાં નિષ્ફળ: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "ઉપર સરકાવો"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "નીચે સરકાવો"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "દેખાવ ઉપર સરકાવો"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "દેખાવ નીચે સરકાવો"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "દસ્તાવેજ દૃશ્ય"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "પાનાં પર જાવ:"
+
+#: ../libview/ev-view-presentation.c:968
+#| msgid "End of presentation. Press Escape to exit."
+msgid "End of presentation. Click to exit."
+msgstr "રજૂઆતનો અંત. બહાર નીકળવા ક્લિક કરો."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "પ્રથમ પાનાં પર જાઓ"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "પહેલાના પાનાં પર જાઓ"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "આગળના પાનાં પર જાઓ"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "છેલ્લા પાના પર જાઓ"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "પાનાં પર જાવ"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "શોધો"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "પાનાં %s પર જાવ"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "%s પર ફાઈલ “%s” માં જાવ"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "ફાઈલ “%s” માં જાવ"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "%s લોન્ચ કરો"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "શોધો:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5207
+msgid "Find Pre_vious"
+msgstr "પહેલાંનું શોધો (_v)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "શોધ શબ્દમાળાઓનો પહેલાંનો વારો શોધો"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5205
+msgid "Find Ne_xt"
+msgstr "આગળનું શોધો (_x)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "શોધ શબ્દમાળાનો આગળનો વારો શોધો"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "કેસ પ્રત્યે સંવેદનશીલ (_a)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "કેસ પ્રત્યે સંવેદનશીલ શોધ બદલો"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "ચિહ્ન:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+#| msgid "None"
+msgid "Note"
+msgstr "નોંધ"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+#| msgid "Document"
+msgid "Comment"
+msgstr "ટિપ્પણી"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "કી"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+#| msgid "_Help"
+msgid "Help"
+msgstr "મદદ"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "નવો ફકરો"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "ફકરો"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "ઉમેરો"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "ચોકડી"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "ગોળ"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+#| msgid "Unknown error"
+msgid "Unknown"
+msgstr "અજ્ઞાત"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+#| msgid "Properties"
+msgid "Annotation Properties"
+msgstr "વિવરણ ગુણધર્મો"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "રંગ:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+#| msgid "Title:"
+msgid "Style:"
+msgstr "શૈલી:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "પારદર્શક"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "અપારદર્શક"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "પ્રારંભિક વિન્ડો સ્થિતિ:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+#| msgid "_Open..."
+msgid "Open"
+msgstr "ખોલો"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "બંધ કરો"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "રજૂઆત સ્થિતિમાં ચલાવી રહ્યા છીએ"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "દસ્તાવેજ %s માટેનો પાસવર્ડ"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+#| msgid "Starting %s"
+msgid "Converting %s"
+msgstr "%s ને રૂપાંતર કરી રહ્યા છે"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "રૂપાંતરિત થયેલ %d દસ્તાવેજોનું %d"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "મેટાડેટાને રૂપાંતર કરી રહ્યા છે"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr "Evince દ્દારા વાપરેલ મેટાડેટા બંધારણ બદલાઇ ગયું, અને તેથી તેનું સ્થળાંતર કરવાની જરૂર છે. જો સ્થળાંતર રદ થયેલ હોય તો મેટાડેટા કામ કરશે નહિં."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "છેલ્લે વપરાયેલ દસ્તાવેજ ખોલો"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "આ દસ્તાવેજને તાળું લગાવેલ છે અને તે માત્ર યોગ્ય પાસવર્ડ દાખલ કરીને જ વાંચી શકાય છે."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "દસ્તાવેજનું તાળું ખોલો (_U)"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "પાસવર્ડ દાખલ કરો"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "પાસવર્ડ જરુરી"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "દસ્તાવેજ “%s” ને તાળું મરાયેલ છે અને તેને ખોલી શકાય તે પહેલાં તેને પાસવર્ડની જરૂર છે."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "પાસવર્ડ (_P):"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "તરત જ પાસવર્ડને ભૂલી જાઓ (_i)"
+
+#: ../shell/ev-password-view.c:380
+#| msgid "Remember password until you _logout"
+msgid "Remember password until you _log out"
+msgstr "તમે બહાર ના નીકળો ત્યાં સુધી પાસવર્ડને યાદ રાખો (_l)"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "હંમેશ માટે યાદ રાખો (_f)"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "ગુણધર્મો"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "સામાન્ય"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "ફોન્ટ"
+
+#: ../shell/ev-properties-dialog.c:118
+#| msgid "Document Viewer"
+msgid "Document License"
+msgstr "દસ્તાવેજ લાઇસન્સ"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "ફોન્ટ"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+#| msgid "Gathering font information... %3d%%"
+msgid "Gathering font information… %3d%%"
+msgstr "ફોન્ટ જાણકારી ભેગી કરી રહ્યા છીએ... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "મર્યાદાનો વપરાશ"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "લખાણ લાઇસન્સ"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "ભવિષ્યની જાણકારી"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "યાદી"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+#| msgid "Location:"
+msgid "Annotations"
+msgstr "વિવરણ:"
+
+#: ../shell/ev-sidebar-annotations.c:209
+#| msgid "Next"
+msgid "Text"
+msgstr "લખાણ"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "લખાણ વિતરણને ઉમેરો"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "ઉમેરો"
+
+#: ../shell/ev-sidebar-annotations.c:364
+#| msgid "The document contains no pages"
+msgid "Document contains no annotations"
+msgstr "દસ્તાવેજો વિવરણોને સમાવતા નથી"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+#| msgid "Page %s"
+msgid "Page %d"
+msgstr "પાનું %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "જોડાણો"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "સ્તરો"
+
+#: ../shell/ev-sidebar-links.c:335
+#| msgid "Print"
+msgid "Print…"
+msgstr "છાપો..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "અનુક્રમણિકા"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "થમ્બનેઈલો"
+
+#: ../shell/ev-window.c:855
+#, c-format
+#| msgid "Page %s - %s"
+msgid "Page %s — %s"
+msgstr "પાનું %s — %s"
+
+#: ../shell/ev-window.c:857
+#, c-format
+msgid "Page %s"
+msgstr "પાનું %s"
+
+#: ../shell/ev-window.c:1322
+msgid "The document contains no pages"
+msgstr "દસ્તાવેજ પાનાંઓ ધરાવતુ નથી"
+
+#: ../shell/ev-window.c:1325
+msgid "The document contains only empty pages"
+msgstr "દસ્તાવેજ ફક્ત ખાલી પાનાંઓ સમાવે છે"
+
+#: ../shell/ev-window.c:1525 ../shell/ev-window.c:1691
+msgid "Unable to open document"
+msgstr "દસ્તાવેજ ખોલવામાં અસમર્થ"
+
+#: ../shell/ev-window.c:1662
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "“%s” માંથી દસ્તાવેજને લોડ કરી રહ્યા છે"
+
+#: ../shell/ev-window.c:1804 ../shell/ev-window.c:2082
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "દસ્તાવેજ (%d%%) ને ડાઉનલોડ કરી રહ્યા છે"
+
+#: ../shell/ev-window.c:1837
+#| msgid "Failed to reload document."
+msgid "Failed to load remote file."
+msgstr "દૂરસ્થ ફાઇલને લાવવાનું નિષ્ફળ."
+
+#: ../shell/ev-window.c:2026
+#, c-format
+msgid "Reloading document from %s"
+msgstr "%s માંથી દસ્તાવેજ ને પુન:લોડ કરી રહ્યા છે"
+
+#: ../shell/ev-window.c:2058
+msgid "Failed to reload document."
+msgstr "દસ્તાવેજ ને પુન:લોડ કરવામાં નિષ્ફળ."
+
+#: ../shell/ev-window.c:2213
+msgid "Open Document"
+msgstr "દસ્તાવેજ ખોલો"
+
+#: ../shell/ev-window.c:2511
+#, c-format
+msgid "Saving document to %s"
+msgstr "%s માં દસ્તાવેજને સંગ્રહ કરી રહ્યા છે"
+
+#: ../shell/ev-window.c:2514
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "%s માં જોડાણ કરવા સંગ્રહ કરી રહ્યા છે"
+
+#: ../shell/ev-window.c:2517
+#, c-format
+msgid "Saving image to %s"
+msgstr "%s માં ઇમેજ ને સંગ્રહ કરી રહ્યા છે"
+
+#: ../shell/ev-window.c:2561 ../shell/ev-window.c:2661
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "ફાઈલ “%s” રીતે સંગ્રહી શક્યા નહિં."
+
+#: ../shell/ev-window.c:2592
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "દસ્તાવેજ (%d%%) ને અપલોડ કરી રહ્યા છે"
+
+#: ../shell/ev-window.c:2596
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "જોડાણ (%d%%) ને અપલોડ કરી રહ્યા છે"
+
+#: ../shell/ev-window.c:2600
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "ઇમેજ (%d%%) ને અપલોડ કરી રહ્યા છે"
+
+#: ../shell/ev-window.c:2724
+msgid "Save a Copy"
+msgstr "નકલ સંગ્રહો"
+
+#: ../shell/ev-window.c:3009
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "કતાર માં %d અટકેલ જોબ"
+msgstr[1] "કતાર માં %d અટકેલ જોબો"
+
+#: ../shell/ev-window.c:3122
+#, c-format
+msgid "Printing job “%s”"
+msgstr "જોબ “%s” ને છાપી રહ્યા છે"
+
+#: ../shell/ev-window.c:3336
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "બંધ કરતા પેહલાં જોબ “%s”ને છાપવાનું સમાપ્ત થાય ત્યાં સુધી થોભો?"
+
+#: ../shell/ev-window.c:3339
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "ત્યાં %d છાપવાની જોબો સક્રિય છે. બંધ કરતા પહેલા છાપવાનું સમાપ્ત થાય ત્યાં સુધી થોભો?"
+
+#: ../shell/ev-window.c:3351
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "જો તમે વિન્ડો ને બંધ કરો તો, અટકેલ છાપવાની જોબો એ છાપેલ હશે."
+
+#: ../shell/ev-window.c:3355
+msgid "Cancel _print and Close"
+msgstr "છાપો અને બંધ કરો ને રદ કરો (_p)"
+
+#: ../shell/ev-window.c:3359
+msgid "Close _after Printing"
+msgstr "છાપવા પછી બંધ કરો (_a)"
+
+#: ../shell/ev-window.c:3949
+msgid "Toolbar Editor"
+msgstr "સાધનપટ્ટી સંપાદક"
+
+#: ../shell/ev-window.c:4088
+msgid "There was an error displaying help"
+msgstr "મદદ ને દર્શાવવામાં ભૂલ હતી"
+
+#: ../shell/ev-window.c:4300
+#, c-format
+#| msgid ""
+#| "Document Viewer.\n"
+#| "Using poppler %s (%s)"
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"દસ્તાવેજ દર્શક.\n"
+"%s (%s) મદદથી"
+
+#: ../shell/ev-window.c:4331
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4335
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4339
+#| msgid ""
+#| "You should have received a copy of the GNU General Public License along "
+#| "with Evince; if not, write to the Free Software Foundation, Inc., 59 "
+#| "Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4364
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4367
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 The Evince authors"
+
+#: ../shell/ev-window.c:4373
+msgid "translator-credits"
+msgstr "અંકિત પટેલ <[email protected]>, શ્ર્વેતા કોઠારી <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4658
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d આ પાનાં પર મળી આવ્યું"
+msgstr[1] "%d આ પાનાં પર મળી આવ્યા"
+
+#: ../shell/ev-window.c:4666
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% શોધવામાં બાકી"
+
+#: ../shell/ev-window.c:5173
+msgid "_File"
+msgstr "ફાઈલ (_F)"
+
+#: ../shell/ev-window.c:5174
+msgid "_Edit"
+msgstr "ફેરફાર (_E)"
+
+#: ../shell/ev-window.c:5175
+msgid "_View"
+msgstr "દેખાવ (_V)"
+
+#: ../shell/ev-window.c:5176
+msgid "_Go"
+msgstr "જાઓ (_G)"
+
+#: ../shell/ev-window.c:5177
+msgid "_Help"
+msgstr "મદદ (_H)"
+
+#. File menu
+#: ../shell/ev-window.c:5180 ../shell/ev-window.c:5479
+#| msgid "_Open..."
+msgid "_Open…"
+msgstr "ખોલો (_O)..."
+
+#: ../shell/ev-window.c:5181 ../shell/ev-window.c:5480
+msgid "Open an existing document"
+msgstr "વર્તમાન દસ્તાવેજ ખોલો"
+
+#: ../shell/ev-window.c:5183
+msgid "Op_en a Copy"
+msgstr "નકલ ખોલો (_e)"
+
+#: ../shell/ev-window.c:5184
+msgid "Open a copy of the current document in a new window"
+msgstr "વર્તમાન દસ્તાવેજની નકલ નવી વિન્ડોમાં ખોલો"
+
+#: ../shell/ev-window.c:5186
+#| msgid "Save a Copy"
+msgid "_Save a Copy…"
+msgstr "નકલ સંગ્રહો (_S)..."
+
+#: ../shell/ev-window.c:5187
+msgid "Save a copy of the current document"
+msgstr "વર્તમાન દસ્તાવેજની નકલ સંગ્રહો"
+
+#: ../shell/ev-window.c:5189
+#| msgid "Print"
+msgid "_Print…"
+msgstr "છાપો (_P)..."
+
+#: ../shell/ev-window.c:5192
+msgid "P_roperties"
+msgstr "ગુણધર્મો (_r)"
+
+#: ../shell/ev-window.c:5200
+msgid "Select _All"
+msgstr "બધું પસંદ કરો (_A)"
+
+#: ../shell/ev-window.c:5202
+#| msgid "Find"
+msgid "_Find…"
+msgstr "શોધો (_F)..."
+
+#: ../shell/ev-window.c:5203
+msgid "Find a word or phrase in the document"
+msgstr "દસ્તાવેજમાં શબ્દ અથવા મહાવરો શોધો"
+
+#: ../shell/ev-window.c:5209
+msgid "T_oolbar"
+msgstr "સાધનપટ્ટી (_o)"
+
+#: ../shell/ev-window.c:5211
+msgid "Rotate _Left"
+msgstr "ડાબે ફેરવો (_L)"
+
+#: ../shell/ev-window.c:5213
+msgid "Rotate _Right"
+msgstr "જમણે ફેરવો (_R)"
+
+#: ../shell/ev-window.c:5224
+msgid "_Reload"
+msgstr "પુનઃલાવો (_R)"
+
+#: ../shell/ev-window.c:5225
+msgid "Reload the document"
+msgstr "દસ્તાવેજ પાછું લાવો"
+
+#: ../shell/ev-window.c:5228
+msgid "Auto_scroll"
+msgstr "આપોઆપ સરકાવો (_s)"
+
+#: ../shell/ev-window.c:5238
+msgid "_First Page"
+msgstr "પ્રથમ પાનું (_F)"
+
+#: ../shell/ev-window.c:5239
+msgid "Go to the first page"
+msgstr "પ્રથમ પાનાં પર જાઓ"
+
+#: ../shell/ev-window.c:5241
+msgid "_Last Page"
+msgstr "છેલ્લું પાનું (_L)"
+
+#: ../shell/ev-window.c:5242
+msgid "Go to the last page"
+msgstr "છેલ્લા પાના પર જાઓ"
+
+#. Help menu
+#: ../shell/ev-window.c:5246
+msgid "_Contents"
+msgstr "સમાવિષ્ટો (_C)"
+
+#: ../shell/ev-window.c:5249
+msgid "_About"
+msgstr "વિશે (_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5253
+msgid "Leave Fullscreen"
+msgstr "પૂર્ણ સ્ક્રીન છોડો"
+
+#: ../shell/ev-window.c:5254
+msgid "Leave fullscreen mode"
+msgstr "પૂર્ણસ્ક્રીન સ્થિતિ છોડી મૂકો"
+
+#: ../shell/ev-window.c:5256
+msgid "Start Presentation"
+msgstr "રજૂઆત શરૂ કરો"
+
+#: ../shell/ev-window.c:5257
+msgid "Start a presentation"
+msgstr "રજૂઆત શરૂ કરો"
+
+#. View Menu
+#: ../shell/ev-window.c:5316
+msgid "_Toolbar"
+msgstr "સાધનપટ્ટી (_T)"
+
+#: ../shell/ev-window.c:5317
+msgid "Show or hide the toolbar"
+msgstr "સાધનપટ્ટી બતાવો અથવા છુપાવો"
+
+#: ../shell/ev-window.c:5319
+msgid "Side _Pane"
+msgstr "બાજુની તકતી (_P)"
+
+#: ../shell/ev-window.c:5320
+msgid "Show or hide the side pane"
+msgstr "બાજુની તકતી બતાવો અથવા છુપાવો"
+
+#: ../shell/ev-window.c:5322
+msgid "_Continuous"
+msgstr "સતત (_C)"
+
+#: ../shell/ev-window.c:5323
+msgid "Show the entire document"
+msgstr "વર્તમાન દસ્તાવેજ બતાવો"
+
+#: ../shell/ev-window.c:5325
+msgid "_Dual"
+msgstr "દ્વિ (_D)"
+
+#: ../shell/ev-window.c:5326
+msgid "Show two pages at once"
+msgstr "બે પાનાંઓ એકસાથે બતાવો"
+
+#: ../shell/ev-window.c:5328
+msgid "_Fullscreen"
+msgstr "પૂર્ણસ્ક્રીન (_F)"
+
+#: ../shell/ev-window.c:5329
+msgid "Expand the window to fill the screen"
+msgstr "વિન્ડોને પૂર્ણ સ્ક્રીનમાં વિસ્તૃત બનાવો"
+
+#: ../shell/ev-window.c:5331
+msgid "Pre_sentation"
+msgstr "રજૂઆત (_s)"
+
+#: ../shell/ev-window.c:5332
+msgid "Run document as a presentation"
+msgstr "દસ્તાવેજને રજૂઆત તરીકે ચલાવો"
+
+#: ../shell/ev-window.c:5340
+msgid "_Inverted Colors"
+msgstr "વિપરીત રંગો (_I)"
+
+#: ../shell/ev-window.c:5341
+msgid "Show page contents with the colors inverted"
+msgstr "વિપરીત રંગો સાથે પાનાનાં સમાવિષ્ટોને બતાવો"
+
+#. Links
+#: ../shell/ev-window.c:5349
+msgid "_Open Link"
+msgstr "કડી ખોલો (_O)"
+
+#: ../shell/ev-window.c:5351
+msgid "_Go To"
+msgstr "પર જાઓ (_G)"
+
+#: ../shell/ev-window.c:5353
+msgid "Open in New _Window"
+msgstr "નવી વિન્ડોમાં ખોલો (_W)"
+
+#: ../shell/ev-window.c:5355
+msgid "_Copy Link Address"
+msgstr "કડી સરનામાની નકલ કરો (_C)"
+
+#: ../shell/ev-window.c:5357
+#| msgid "_Save Image As..."
+msgid "_Save Image As…"
+msgstr "ચિત્રને આ રીતે સંગ્રહો (_S)..."
+
+#: ../shell/ev-window.c:5359
+msgid "Copy _Image"
+msgstr "ચિત્રની નકલ કરો (_I)"
+
+#: ../shell/ev-window.c:5361
+msgid "Annotation Properties…"
+msgstr "વિવરણ ગુણધર્મો..."
+
+#: ../shell/ev-window.c:5366
+#| msgid "Save Attachment"
+msgid "_Open Attachment"
+msgstr "જોડાણને ખોલો (_O)"
+
+#: ../shell/ev-window.c:5368
+#| msgid "Save Attachment"
+msgid "_Save Attachment As…"
+msgstr "જોડાણને આ રીતે સંગ્રહો (_S)..."
+
+#: ../shell/ev-window.c:5453
+msgid "Zoom"
+msgstr "નાનુમોટુ કરવું"
+
+#: ../shell/ev-window.c:5455
+msgid "Adjust the zoom level"
+msgstr "નાનામોટાપણાનું સ્તર સંતુલિત કરો"
+
+#: ../shell/ev-window.c:5465
+msgid "Navigation"
+msgstr "શોધખોળ"
+
+#: ../shell/ev-window.c:5467
+msgid "Back"
+msgstr "પાછળ"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5470
+msgid "Move across visited pages"
+msgstr "મુલાકાત લીધેલ પાનાંઓમાં ખસેડો"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5500
+msgid "Previous"
+msgstr "પહેલાનું"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5505
+msgid "Next"
+msgstr "આગળનું"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5509
+msgid "Zoom In"
+msgstr "મોટું કરો"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5513
+msgid "Zoom Out"
+msgstr "નાનું કરો"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5521
+msgid "Fit Width"
+msgstr "પહોળાઈથી બંધબેસાડો"
+
+#: ../shell/ev-window.c:5682 ../shell/ev-window.c:5699
+msgid "Unable to launch external application."
+msgstr "બહારનાં કાર્યક્રમને પ્રકાશિત કરવામાં અસમર્થ."
+
+#: ../shell/ev-window.c:5756
+msgid "Unable to open external link"
+msgstr "બાહ્ય કડી ખોલવામાં અસમર્થ"
+
+#: ../shell/ev-window.c:5923
+msgid "Couldn't find appropriate format to save image"
+msgstr "ચિત્ર સંગ્રહવા માટે યોગ્ય બંધારણ શોધી શક્યા નહિં"
+
+#: ../shell/ev-window.c:5965
+msgid "The image could not be saved."
+msgstr "ચિત્ર સંગ્રહી શક્યા નહિં."
+
+#: ../shell/ev-window.c:5997
+msgid "Save Image"
+msgstr "ચિત્ર સંગ્રહો"
+
+#: ../shell/ev-window.c:6125
+msgid "Unable to open attachment"
+msgstr "જોડાણ ખોલવામાં અસમર્થ"
+
+#: ../shell/ev-window.c:6178
+msgid "The attachment could not be saved."
+msgstr "જોડાણ સંગ્રહી શક્યા નહિં."
+
+#: ../shell/ev-window.c:6223
+msgid "Save Attachment"
+msgstr "જોડાણ સંગ્રહો"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+#| msgid "%s - Password Required"
+msgid "%s — Password Required"
+msgstr "%s — પાસવર્ડ જરૂરી"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "એક્સટેન્સન પ્રમાણે"
+
+#: ../shell/main.c:72 ../shell/main.c:277
+msgid "MATE Document Viewer"
+msgstr "જીનોમ દસ્તાવેજ દર્શક"
+
+#: ../shell/main.c:80
+#| msgid "The page of the document to display."
+msgid "The page label of the document to display."
+msgstr "દર્શાવવા માટેના દસ્તાવેજના પાનાનું લેબલ."
+
+#: ../shell/main.c:80
+msgid "PAGE"
+msgstr "પાનું"
+
+#: ../shell/main.c:81
+#| msgid "The page of the document to display."
+msgid "The page number of the document to display."
+msgstr "દર્શાવવા માટેના દસ્તાવેજનાં પાનાનો નંબર."
+
+#: ../shell/main.c:81
+msgid "NUMBER"
+msgstr "NUMBER"
+
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr "evince ને પૂર્ણસ્ક્રીન સ્થિતિમાં ચલાવો"
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr "evince ને રજૂઆત સ્થિતિમાં ચલાવો"
+
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr "evince ને પૂર્વદર્શક તરીકે ચલાવો"
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr "દસ્તાવેજમાં શોધવા માટે શબ્દ કે મહાવરો"
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "શબ્દમાળા"
+
+#: ../shell/main.c:89
+#| msgid "[FILE...]"
+msgid "[FILE…]"
+msgstr "[FILE…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+#| msgid ""
+#| "Boolean options available, true enables thumbnailing and false disables "
+#| "the creation of new thumbnails"
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr "બુલિયન વિકલ્પો ઉપલબ્ધ છે, સાચું થમ્બનેઈલીંગને સક્રિય કરે છે અને ખોટું નવા થમ્બનેઈલની બનાવટને નિષ્ક્રિય કરે છે"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF દસ્તાવેજોનું થમ્બનેઈલ કરવાનું સક્રિય કરો"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF દસ્તાવેજો માટે થમ્બનેઈલ આદેશ"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+#| msgid ""
+#| "Valid command plus arguments for the PDF Document thumbnailer. See "
+#| "caja thumbnailer documentation for more information."
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr "PDF દસ્તાવેજ થમ્બનેઈલ બનાવનાર માટે માન્ય આદેશ વત્તા દલીલો. વધુ જાણકારી માટે નોટીલસ થમ્બનેઈલ બનાવનાર દસ્તાવેજીકરણ જુઓ."
+
diff --git a/po/he.po b/po/he.po
new file mode 100644
index 00000000..43776b5c
--- /dev/null
+++ b/po/he.po
@@ -0,0 +1,1719 @@
+# translation of evince.HEAD.he.po to Hebrew
+# translation of he.po to Hebrew
+# translation of gpdf.HEAD.he.po to Hebrew
+# translation of xpdf.HEAD.po to Hebrew
+# This file is distributed under the same license as the PACKAGE package.
+# Yuval Tanny, 2005.
+# Yuval Tanny, 2005.
+# Yuval Tanny, 2005.
+# Yuval Tanny, 2005.
+# Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER.
+# Gil 'Dolfin' Osher <[email protected]>, 2003.
+# Yuval Tanny, 2005.
+# Yaron Shahrabani <[email protected]>, 2010.
+# Yaron Shahrabani <[email protected]>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.HEAD.he\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-08-17 01:22+0300\n"
+"PO-Revision-Date: 2010-08-17 01:30+0200\n"
+"Last-Translator: Yaron Shahrabani <[email protected]>\n"
+"Language-Team: Gezer (Hebrew)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: he\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Virtaal 0.6.1\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "The command “%s” failed at decompressing the comic book."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "The command “%s” did not end normally."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "סוג ה־MIME אינו של ספר קומיקס: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Can't find an appropriate command to decompress this type of comic book"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "סוג MIME לא ידוע"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "File corrupted"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "No files in archive"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "No images found in archive %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "There was an error deleting “%s”."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Error %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "ספרי קומיקס"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu document has incorrect format"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr "המסמך מורכב ממספר קבצים. לא ניתן לגשת לאחד או יותר מהם."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "מסמכי DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI document has incorrect format"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "מסמכי DVI"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "יצירה זו היא לרשות הציבור"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "כן"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "לא"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "סוג גופן לא ידוע"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "ללא שם"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "תת־קבוצה מוטמעת"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "מוטמע"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "לא מוטמע"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "מסמכי PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "מסמך לא תקין"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "מצגות Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "ללא שגיאה"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "אין מספיק זיכרון"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "חתימת ה־zip לא נמצאה"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "קובץ ה־zip אינו תקין"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "קובצי zip מחולקים אינם נתמכים"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "לא ניתן לפתוח את הקובץ"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "לא ניתן לקרוא מהקובץ"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "לא נמצא קובץ בארכיון ה־zip"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "שגיאה לא ידועה"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "לא ניתן לטעון את המסמך “%s”"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "ארע כשל בשמירת המסמך “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "מסמכי PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "לא ניתן לשמור את הצרופה “%s”:‏ %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "לא ניתן לפתוח את הצרופה “%s”:‏ %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "לא ניתן לפתוח את הצרופה “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "סוג הקובץ %s ‏(%s) אינו נתמך"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "כל המסמכים"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "כל הקבצים"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "ארע כשל ביצירת הקובץ הזמני: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "ארע כשל ביצירת התיקייה הזמנית: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "הקובץ אינו קובץ ‎.desktop תקין"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "גרסת קובץ שולחן עבודה '%s' אינה מזוהה"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s מופעל"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "היישום אינו מקבל מסמכים בשורת בפקודה"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "אפשרות שיגור לא מוכרת: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "לא ניתן להעביר כתובת מסמך לכניסת שולחן עבודה 'Type=Link'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "הפריט אינו ניתן לשיגור"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Disable connection to session manager"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Specify file containing saved configuration"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Specify session management ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Session management options:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Show session management options"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "הצגת “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "ה_זזה בסרגל הכלים"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "הזזת הפריט הנבחר בסרגל הכלים"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "ה_סרה מסרגל כלים"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "הסרת הפריט הנבחר מסרגל הכלים"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_מחיקת סרגל כלים"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "ה_סרת סרגל הכלים הנבחר"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "מפריד"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "ההתאמה הטובה ביותר"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "התאמה לרוחב העמוד"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "מציג מסמכים"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "הצגת מסמכים מרובי עמודים"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Override document restrictions"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Override document restrictions, like restriction to copy or to print."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Delete the temporary file"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Print settings file"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "כלי להצגה מקדימה של מסמכים של MATE"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "ארע כשל בהדפסת המסמך"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "המדפסת הנבחרת '%s' לא נמצאה"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "העמוד ה_קודם"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "מעבר לעמוד הקודם"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "העמוד ה_בא"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "מעבר לעמוד הבא"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "הגדלת המסמך"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "הקטנת המסמך"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "הדפס"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "הדפסת מסמך זה"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "_ההתאמה הטובה ביותר"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "הצגת המסמך הנוכחי כך שימלא את החלון"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "התאמה ל_רוחב עמוד"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "הצגת המסמך הנוכחי כך שימלא את רוחב העמוד"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "עמוד"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "בחירת עמוד"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "מסמך"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "שם:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "מיקום:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "‏נושא:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "‏מחבר:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "‏מילות מפתח:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "יצרן:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "יוצר:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "נוצר:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "‏השתנה:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "מספר עמודים:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "‏הוטב:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "‏סוג:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "‏אבטחה:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "‏גודל דף:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "ללא"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f מילימטרים"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f אינטשים"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "‏%s, דיוקן (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "‏%s, נוף (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "‏(%d מתוך %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "מתוך %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "בטעינה..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "בהכנות להדפסה ..."
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "מסתיים..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "מדפיס עמוד %d מתוך %d..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "הדפסה לא נתמכת במדפסת זו"
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "בחירת העמודים שגויה"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Warning"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "בחירת טווח ההדפסה שלך אינו כולל עמודים כלשהם"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "מידות העמוד:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "כיווץ לאזור הניתן להדפסה"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "התאמה לאזור הניתן להדפסה"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"התאמת עמודי המסמך לגודל העמוד במדפסת. יש לבחור מהבאים:\n"
+"\n"
+"• \"ללא\": לא מתבצעות התאמות לעמוד.\n"
+"\n"
+"• \"כיווץ לאזור הניתן להדפסה\": עמודי המסמך גדולים מהאזור הניתן להדפסה "
+"מוקטנים כדי שיתאימו לאזור עליו ניתן להדפיס בדפי המדפסת.\n"
+"\n"
+"• \"התאמה לאזור הניתן להדפסה\": עמודי המסמך מוגדלים או מוקטנים כדי להתאים "
+"לאזור הניתן להדפסה בדף המדפסת.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "הטיה ומרכוז אוטומטיים"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"הטיית כיוון העמוד של כל עמוד בנפרד כך שיתאים להטיה של כל עמוד במסמך. עמודי "
+"המסמך ימורכזו בדף המדפסת."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "בחירת גודל העמוד באמצעות גודל עמוד המסמך"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr "כאשר פעיל, כל עמוד יודפס באותו גודל הדף כמו עמוד המסמך."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "טיפול בעמודים"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "ארע כשל בהדפסת עמוד %d: ‏%s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "גלילה למעלה"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "גלילה למטה"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "גלילת התצוגה למעלה"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "גלילת התצוגה למטה"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "תצוגת מסמך"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "קפיצה לעמוד:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "סוף המצגת. נא ללחוץ ליציאה."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "מעבר לעמוד הראשון"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "מעבר לעמוד הקודם"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "מעבר לעמוד הבא"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "מעבר לעמוד האחרון"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "מעבר לעמוד"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "חיפוש"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "מעבר לעמוד %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "מעבר ל־%s בקובץ “%s”"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "מעבר לקובץ “%s”"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "שיגור %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "חיפוש:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "חיפוש ה_קודם"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "חיפוש המופע הקודם של המחרוזת"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "חיפוש _הבא"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "חיפוש המופע הבא של המחרוזת"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_תלוי רשיות"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "בחירה בחיפוש תלוי רשיות"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "סמל:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "פתקית"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "הערה"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "מפתח"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "עזרה"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "פסקה חדשה"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "פסקה"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "הוספה"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "צלב"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "עיגול"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "לא ידוע"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "מאפייני הפרשנות"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "צבע:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "סגנון:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "שקוף"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "אטום"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "מצב החלון ההתחלתי:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "פתיחה"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "סגירה"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "מופעל מצב מצגת"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "ססמה עבור המסמך %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "%s בהליכי המרה"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "‏%d מתוך %d מסמכים הומרו"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "נתוני העל מומרים"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"מבנה נתוני העל בו Evince עשה שימוש שונה ולכן יש לייבא אותו. אם תהליך הייבוא "
+"יבוטל אחסון נתוני העל לא יעבוד."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "פתיחת מסמך שהיה בשימוש לאחרונה"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "מסמך זה נעול, ויש צורך בססמה כדי לקרוא אותו."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_שחרור המסמך"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "הזנת ססמה"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "נדרשת ססמה"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "המסמך “%s” נעול ונדרשת ססמה כדי לפתוח אותו."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_ססמה:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "ה_תעלמות מהססמה מידית"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "שמירת הססמה _עד לניתוק"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "_שמירה לעד"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "מאפיינים"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "כללי"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "גופנים"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "רישיון המסמך"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "גופן"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "נאסף מידע על הגופנים... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "תנאי שימוש"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "רישיון הטקסט"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "מידע נוסף"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "רשימה"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "הערות"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "טקסט"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "הוספת פרשנות טקסט"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "הוספה"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "המסמך אינו מכיל הערות"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "עמוד %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "צרופות"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "שכבות"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "הדפסה..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "מפתח"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "תמונות ממוזערות"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "עמוד %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "עמוד %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "המסמך אינו מכיל עמודים"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "המסמך מכיל עמודים ריקים בלבד"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "לא ניתן לפתוח את המסמך"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "המסמך מ־\"%s\" נטען"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "מוריד מסמך (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "ארע כשל בטעינת קובץ מרוחק."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "המסמך מ־%s נטען מחדש"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "ארע כשל בטעינת המסמך מחדש."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "פתח מסמך"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "המסמך נשמר ל־%s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "התצריף נשמר ל־%s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "התמונה נשמרת ל־%s"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "לא ניתן לשמור את הקובץ בשם “%s”."
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "המסמך מועלה (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "התצריף מועלה (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "התמונה מועלה (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "שמירת העתק"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "משימה אחת ממתינה בתור"
+msgstr[1] "%d משימות ממתינות בתור"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "המשימה “%s” מודפסת"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr "המסמך מכיל שדות טופס שיש למלא. אם לא יישמר עותק, השינויים יאבדו לעד."
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"המסמך מכיל הערות חדשות או ערוכות. אם לא יישמר עותק, השינויים יאבדו לעד."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "האם לשמור עותק של המסמך “%s” לפני הסגירה?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "_סגירה ללא שמירה"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "שמירת _עותק"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "האם להמתין לסיום המשימה “%s” לפני הסגירה?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "יש %d משימות הדפסה פעילות. האם להמתין לסיום ההדפסות לפני הסגירה?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "אם החלון ייסגר, משימות הדפסה הממתינות לא יודפסו."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "ביטול הה_דפסה וסגירה"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "_סגירה לאחר ההדפסה"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "עורך סרגל הכלים"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "ארעה שגיאה בהצגת העזרה"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"מציג מסמכים.\n"
+"בעזרת %s (‏%s)"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4571
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"ל־Evince אמור היה להיות מצורף עותק של הרישיון הציבורי הכללי של GNU; אם לא, "
+"יש לכתוב אל Free Software Foundation, Inc., 59 Temple Place, Suite 330, "
+"Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "‏Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996—2009 יוצרי Evince"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"יובל טנאי\n"
+"Yo´av Moshe <[email protected]>\n"
+"Yaron Shahrabani <[email protected]>\n"
+"פרויקט תרגום MATE לעברית:\n"
+"‏http://mate-il.berlios.de"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "‏אחד נמצא בעמוד זה"
+msgstr[1] "‏%d נמצאו בעמוד זה"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "אין התאמה"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "‏%3d%% נשארו לחיפוש"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "_קובץ"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "ע_ריכה"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "_תצוגה"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "_מעבר"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "ע_זרה"
+
+#. File menu
+#: ../shell/ev-window.c:5402 ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "_פתיחה..."
+
+#: ../shell/ev-window.c:5403 ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "פתיחת מסמך קיים"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "_פתיחת העתק"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "פתיחת העתק של המסמך הנוכחי בחלון חדש"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "שמירת _עותק..."
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "שמור עותק של המסמך הנוכחי"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "ה_דפסה..."
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "_מאפיינים"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "_בחירת הכול"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "_חיפוש..."
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "חיפוש מילה או משפט במסמך"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "_סרגל כלים"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "סיבוב _שמאלה"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "סיבוב _ימינה"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "שמירת ההגדרות ה_נוכחיות כברירת מחדל"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "_טעינה מחדש"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "טעינה מחדש של המסמך"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "_גלילה אוטומטית"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "עמוד _ראשון"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "מעבר לעמוד הראשון"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "עמוד _אחרון"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "מעבר לעמוד האחרון"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "_תוכן עניינים"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "על _אודות"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "יציאה ממסך מלא"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "יציאה ממצב מסך מלא"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "ה_תחלת המצגת"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "התחלת המצגת"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "סרגל _כלים"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "הצגה או הסתרה של סרגל הכלים"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "סרגל _צד"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "הצגה או הסתרה של סרגל הצד"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "_רציף"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "הצגת כל המסמך"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "_זוגי"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "הצגת שני עמודים ביחד"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "_מסך מלא"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "הרחבת החלון לכל המסך"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "_מצגת"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "הרצת המסמך כמצגת"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "צבעים _הפוכים"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "הצגת תוכן העמוד עם הצבעים הפוכים"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "פתיחת _קישור"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "_מעבר"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "פתיחה ב_חלון חדש"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "העתקת _מיקום הקישור"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "שמירת _תמונה בשם..."
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "העתקת ת_מונה"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "מאפייני הפרשנות..."
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "_פתיחת תצריף"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "_שמירת הקובץ המצורף בשם..."
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "תקריב"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "שינוי רמת התקריב"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "ניווט"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "חזרה"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "מעבר בין העמודים בהם ביקרת"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "הקודם"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "הבא"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "התקרבות"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "התרחקות"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "התאמה לרוחב"
+
+#: ../shell/ev-window.c:5890 ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "לא ניתן לשגר יישום חיצוני"
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "לא ניתן לפתוח קישור חיצוני"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "לא נמצאה התצורה המתאימה לשמירת התמונה"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "לא ניתן לשמור את התמונה."
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "שמור תמונה"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "לא ניתן לפתוח את הצרופה"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "לא ניתן לשמור את הצרופה."
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "שמירת צרופה"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — נדרשת ססמה"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "לפי סיומת"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATE Document Viewer"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "The page label of the document to display."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "The page number of the document to display."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMBER"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Run evince in fullscreen mode"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Run evince in presentation mode"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Run evince as a previewer"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "The word or phrase to find in the document"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FILE…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Enable thumbnailing of PDF Documents"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Thumbnail command for PDF Documents"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "למסמך ה־DJVU תצורה שגויה"
+
+#~ msgid "Print..."
+#~ msgstr "הדפס..."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "ש_מור העתק..."
diff --git a/po/hi.po b/po/hi.po
new file mode 100644
index 00000000..c858c5c1
--- /dev/null
+++ b/po/hi.po
@@ -0,0 +1,1459 @@
+# translation of evince.HEAD.hi.po to Hindi
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# Rajesh Ranjan <[email protected]>, 2005, 2006, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.HEAD.hi\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2009-02-15 13:53+0000\n"
+"PO-Revision-Date: 2009-03-13 23:13+0530\n"
+"Last-Translator: Rajesh Ranjan <[email protected]>\n"
+"Language-Team: Hindi <hindi.sf.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:131
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:281
+msgid "Unknown MIME Type"
+msgstr "अनजान MIME प्रकार"
+
+#: ../backend/comics/comics-document.c:165
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "कॉमिक बुक MIME प्रकार नहीं: %s"
+
+#: ../backend/comics/comics-document.c:186
+msgid "File corrupted."
+msgstr "फाइल खराब."
+
+#: ../backend/comics/comics-document.c:198
+msgid "No files in archive."
+msgstr "अभिलेख में कोई फ़ाइल नहीं."
+
+#: ../backend/comics/comics-document.c:230
+#, c-format
+msgid "No images found in archive %s"
+msgstr "अभिलेख %s में कोई चित्र नहीं मिला"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "कॉमिक पुस्तक"
+
+#: ../backend/djvu/djvu-document.c:174
+#| msgid "DVI document has incorrect format"
+msgid "DJVU document has incorrect format"
+msgstr "DJVU दस्तावेज़ में गलत प्रारूप है"
+
+#: ../backend/djvu/djvu-document.c:251
+msgid ""
+"The document is composed of several files. One or more of such files cannot "
+"be accessed."
+msgstr "यह दस्तावेज कई फ़ाइलों से मिलकर बना है. एक या अधिक वैसी फाइलें पहुँच नहीं ली जा सकती हैं."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Djvu दस्तावेज़"
+
+#: ../backend/dvi/dvi-document.c:106
+msgid "DVI document has incorrect format"
+msgstr "DVI दस्तावेज में गलत प्रारूप "
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI दस्तावेज़"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:700
+msgid "Yes"
+msgstr "हाँ"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:703
+msgid "No"
+msgstr "नहीं"
+
+#: ../backend/pdf/ev-poppler.cc:777
+msgid "Type 1"
+msgstr "वर्ग 1"
+
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Type 1C"
+msgstr "वर्ग 1C"
+
+#: ../backend/pdf/ev-poppler.cc:781
+msgid "Type 3"
+msgstr "वर्ग 3"
+
+#: ../backend/pdf/ev-poppler.cc:783
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:785
+msgid "Type 1 (CID)"
+msgstr "वर्ग 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:787
+msgid "Type 1C (CID)"
+msgstr "वर्ग 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:789
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:791
+msgid "Unknown font type"
+msgstr "अनजान फंट प्रकार"
+
+#: ../backend/pdf/ev-poppler.cc:817
+msgid "No name"
+msgstr "कोई नाम नहीं"
+
+#: ../backend/pdf/ev-poppler.cc:825
+msgid "Embedded subset"
+msgstr "एंबेडेड उपसमुच्चय"
+
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "Embedded"
+msgstr "एंबेडेड"
+
+#: ../backend/pdf/ev-poppler.cc:829
+msgid "Not embedded"
+msgstr "एंबेडेड नहीं"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "पीडीएफ़ दस्तावेज़"
+
+#: ../backend/impress/impress-document.c:303
+#| msgid "Print this document"
+msgid "Invalid document"
+msgstr "अवैध दस्तावेज"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "इंप्रेस स्लाइड"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "कोई त्रुटि नहीं"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "पर्याप्त स्मृति नहीं है"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "जिप हस्ताक्षर नहीं पा सकता है"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "अवैध जिप फाइल"
+
+#: ../backend/impress/zip.c:65
+#| msgid "Generating PDF is not supported"
+msgid "Multi file zips are not supported"
+msgstr "मल्टी फाइल जिप समर्थित नहीं है"
+
+#: ../backend/impress/zip.c:68
+#| msgid "Cannot open file “%s”.\n"
+msgid "Cannot open the file"
+msgstr "फ़ाइल खोल नहीं सकता है"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "फाइल से डाटा नहीं पढ़ सकता है"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "जिप अभिलेख में फाइल नहीं पा सकता है"
+
+#: ../backend/impress/zip.c:77
+#| msgid "Unknown MIME Type"
+msgid "Unknown error"
+msgstr "अज्ञात त्रुटि"
+
+#: ../backend/ps/ev-spectre.c:113
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "“%s” दस्तावेज लोड करने में विफल"
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "“%s” दस्तावेज सहेजने में विफल"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "पोस्टस्क्रिप्ट दस्तावेज़"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "संलग्नक “%s” नहीं सहेज सका: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "संलग्नक “%s” नहीं खोल सका: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "संलग्नक “%s” नहीं खोल सका"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+#| msgid "Generating PDF is not supported"
+msgid "File type %s (%s) is not supported"
+msgstr "फाइल प्रकार %s (%s) समर्थित नहीं है"
+
+#: ../libdocument/ev-document-factory.c:353
+msgid "All Documents"
+msgstr "सभी दस्तावेज़"
+
+#: ../libdocument/ev-document-factory.c:385
+msgid "All Files"
+msgstr "सभी फ़ाइलें"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:439
+msgid "Co_nnect"
+msgstr "कनेक्ट करें (_n)"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:483
+msgid "Connect _anonymously"
+msgstr "बेनाम कनेक्ट करें (_a)"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:492
+msgid "Connect as u_ser:"
+msgstr "बतौर उपयोक्ता कनेक्ट करें (_s):"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:529
+msgid "_Username:"
+msgstr "प्रयोक्ता नाम (_U):"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:533
+msgid "_Domain:"
+msgstr "डोमेन (_D):"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:538
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "पासवर्ड: (_P)"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:553
+msgid "_Forget password immediately"
+msgstr "कूटशब्द तत्काल भूल गए (_F)"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:561
+#| msgid "Remember password for this session"
+msgid "_Remember password until you logout"
+msgstr "लॉगआउट होने तक कूटशब्द याद रखें (_R)"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:569
+msgid "_Remember forever"
+msgstr "सदा के लिए याद रखें (_R)"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "फ़ाइल वैध .desktop फ़ाइल नहीं है"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "अपरिचित डेस्कटॉप फ़ाइल संस्करण '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s शुरू हो रहा है"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "कमांड लाइन पर अनुप्रयोग दस्तावेज़ स्वीकार नहीं करता है"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "अपरिचित लॉन्च विकल्प: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "दस्तावेज़ URI को 'Type=Link' डेस्कटॉप प्रविष्टि में भेज नहीं सकता है"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "चलाने योग्य प्रोग्राम नहीं है"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:224
+msgid "Disable connection to session manager"
+msgstr "सत्र प्रबंधक में संबंधन निष्क्रिय करें"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:227
+msgid "Specify file containing saved configuration"
+msgstr "सहेजा विन्यास समाहित करता फ़ाइल निर्दिष्ट करें"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:227
+#| msgid "[FILE...]"
+msgid "FILE"
+msgstr "फ़ाइल"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:230
+msgid "Specify session management ID"
+msgstr "सत्र प्रबंधन ID निर्दिष्ट करें"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:230
+msgid "ID"
+msgstr "आईडी"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:244
+msgid "Session management options:"
+msgstr "सत्र प्रबंधन विकल्प:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:245
+msgid "Show session management options"
+msgstr "दिखाएँ सत्र प्रबंधन विकल्प"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:918
+#, c-format
+msgid "Show “_%s”"
+msgstr "दिखायें “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1381
+msgid "_Move on Toolbar"
+msgstr "औजार-पट्टी पर ले जायें (_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1382
+msgid "Move the selected item on the toolbar"
+msgstr "चयनित मद को औजारपट्टी में खिसकाएँ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1383
+msgid "_Remove from Toolbar"
+msgstr "औजार-पट्टी से मिटाएँ (_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1384
+msgid "Remove the selected item from the toolbar"
+msgstr "चयनित मद को औजारपट्टी से हटाएँ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1385
+msgid "_Delete Toolbar"
+msgstr "उपकरण-पट्टी मिटाएँ (_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1386
+msgid "Remove the selected toolbar"
+msgstr "चयनित उपकरण-पट्टी हटायें"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "अलगानेवाला"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:117
+#| msgid "Run evince in presentation mode"
+msgid "Running in presentation mode"
+msgstr "प्रस्तुति मोड में चला रहा है"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5294
+msgid "Best Fit"
+msgstr "सर्वोत्तम अनुरूप"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "अनुरूप पृष्ठ चौड़ाई"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+#| msgid "50%"
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+#| msgid "50%"
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4272
+#: ../shell/ev-window-title.c:149
+#, c-format
+msgid "Document Viewer"
+msgstr "लेखपत्र प्रदर्शक"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "देखें बहुपेज दस्तावेज"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "दस्तावेज प्रतिबंध पर लिखें"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "दस्तावेज प्रतिबंध अध्यारोहित करें, कॉपी करने या छापने के प्रतिबंध की तरह."
+
+#: ../properties/ev-properties-main.c:113
+msgid "Document"
+msgstr "लेखपत्र"
+
+#: ../properties/ev-properties-view.c:59
+#| msgid "<b>Title:</b>"
+msgid "Title:"
+msgstr "शीर्षक:"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Location:"
+msgstr "स्थानः"
+
+#: ../properties/ev-properties-view.c:61
+#| msgid "<b>Subject:</b>"
+msgid "Subject:"
+msgstr "विषय:"
+
+#: ../properties/ev-properties-view.c:62
+#| msgid "<b>Author:</b>"
+msgid "Author:"
+msgstr "लेखकः"
+
+#: ../properties/ev-properties-view.c:63
+#| msgid "<b>Keywords:</b>"
+msgid "Keywords:"
+msgstr "बीजशब्द:"
+
+#: ../properties/ev-properties-view.c:64
+#| msgid "<b>Producer:</b>"
+msgid "Producer:"
+msgstr "निर्माता:"
+
+#: ../properties/ev-properties-view.c:65
+#| msgid "<b>Creator:</b>"
+msgid "Creator:"
+msgstr "सृजक:"
+
+#: ../properties/ev-properties-view.c:66
+#| msgid "<b>Created:</b>"
+msgid "Created:"
+msgstr "सृजितः"
+
+#: ../properties/ev-properties-view.c:67
+#| msgid "<b>Modified:</b>"
+msgid "Modified:"
+msgstr "परिवर्धितः"
+
+#: ../properties/ev-properties-view.c:68
+#| msgid "<b>Number of Pages:</b>"
+msgid "Number of Pages:"
+msgstr "पृष्ठ की संख्या:"
+
+#: ../properties/ev-properties-view.c:69
+#| msgid "<b>Optimized:</b>"
+msgid "Optimized:"
+msgstr "अनुकूलित:"
+
+#: ../properties/ev-properties-view.c:70
+#| msgid "<b>Format:</b>"
+msgid "Format:"
+msgstr "प्रारूप:"
+
+#: ../properties/ev-properties-view.c:71
+#| msgid "<b>Security:</b>"
+msgid "Security:"
+msgstr "सुरक्षा:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Paper Size:"
+msgstr "कागज आकार:"
+
+#: ../properties/ev-properties-view.c:202
+msgid "None"
+msgstr "कुछ नहीं"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:227
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:271
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:275
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f इंच"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:299
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, पोट्रैट (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:306
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, लैंडस्केप (%s)"
+
+#: ../libview/ev-jobs.c:949
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "“%s” फ़ाइल बनाने में असमर्थ: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "स्क्रॉल अप"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "स्क्रॉल डाउन"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "स्क्रॉल दृश्य ऊपर"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "स्क्रॉल दृश्य नीचें"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "दस्तावेज प्रदर्शक"
+
+#: ../libview/ev-view.c:1417
+msgid "Go to first page"
+msgstr "प्रथम पृष्ठ पर जाएँ"
+
+#: ../libview/ev-view.c:1419
+msgid "Go to previous page"
+msgstr "पिछले पृष्ठ पर जाएँ"
+
+#: ../libview/ev-view.c:1421
+msgid "Go to next page"
+msgstr "अगले पृष्ठ में जाएँ"
+
+#: ../libview/ev-view.c:1423
+msgid "Go to last page"
+msgstr "अंतिम पृष्ठ पर जाएँ"
+
+#: ../libview/ev-view.c:1425
+msgid "Go to page"
+msgstr "पेज पर जायें"
+
+#: ../libview/ev-view.c:1427
+msgid "Find"
+msgstr "ढूंढें"
+
+#: ../libview/ev-view.c:1455
+#, c-format
+msgid "Go to page %s"
+msgstr "पेज %s पर जायें"
+
+#: ../libview/ev-view.c:1461
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "%s में “%s” फाइल पर जाएं"
+
+#: ../libview/ev-view.c:1464
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” फाइल पर जायें"
+
+#: ../libview/ev-view.c:1472
+#, c-format
+msgid "Launch %s"
+msgstr "%s लांच करें"
+
+#: ../libview/ev-view.c:2387
+msgid "End of presentation. Press Escape to exit."
+msgstr "प्रस्तुति का अंत. बाहर निकलने के लिए Escape दबाएं"
+
+#: ../libview/ev-view.c:3278
+#| msgid "Go to page"
+msgid "Jump to page:"
+msgstr "पृष्ठ पर जाएँ:"
+
+#: ../libview/ev-view.c:3541 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:267
+msgid "Loading..."
+msgstr "लोड किया जा रहा है..."
+
+#: ../shell/eggfindbar.c:146
+msgid "Search string"
+msgstr "ढूंढें स्ट्रिंग"
+
+#: ../shell/eggfindbar.c:147
+msgid "The name of the string to be found"
+msgstr "पाये जाने के लिये स्ट्रिंग का नाम"
+
+#: ../shell/eggfindbar.c:160
+msgid "Case sensitive"
+msgstr "केस सेंसिटिव"
+
+#: ../shell/eggfindbar.c:161
+msgid "TRUE for a case sensitive search"
+msgstr "TRUE एक केस सेंसेटिव ढूंढने के लिये"
+
+#: ../shell/eggfindbar.c:168
+msgid "Highlight color"
+msgstr "उभारें रंग"
+
+#: ../shell/eggfindbar.c:169
+msgid "Color of highlight for all matches"
+msgstr "सभी मैच के लिये हाइलाइट का रंग"
+
+#: ../shell/eggfindbar.c:175
+msgid "Current color"
+msgstr "मौज़ूदा रंग"
+
+#: ../shell/eggfindbar.c:176
+msgid "Color of highlight for the current match"
+msgstr "मौजूदा मैच के लिये हाइलाइट का रंग"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "ढूंढें:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5028
+msgid "Find Pre_vious"
+msgstr "पिछला ढूंढें (_v)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "खोज स्ट्रिंग की पिछली उपस्थिति ढूंढें"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5026
+msgid "Find Ne_xt"
+msgstr "अगला ढूंढें (_x)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "खोज स्ट्रिंग की अगली उपस्थिति ढूंढें"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "स्थिति के प्रति संवेदनशील (_a)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "स्थिति संवेदनशील खोज टॉगल करें"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s दस्तावेज के लिये कूटशब्द"
+
+#: ../shell/ev-open-recent-action.c:72
+#| msgid "Open an existing document"
+msgid "Open a recently used document"
+msgstr "हाल में प्रयुक्त दस्तावेज खोलें"
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d का %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "%d का"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "दस्तावेज तालाकित है और सही कूटशब्द दाखिल कर ही पढा जा सकता है."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "दस्तावेज खोलें (_U)"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "कूटशब्द दाखिल करें"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "कूटशब्द जरूरी"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "दस्तावेज “%s” तालाकित है और खोले जाने के पहले कूटशब्द चाहता है."
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "कूटशब्द तत्काल भूल गए (_i)"
+
+#: ../shell/ev-password-view.c:377
+#| msgid "Remember password for this session"
+msgid "Remember password until you _logout"
+msgstr "लॉगआउट होने तक कूटशब्द याद रखें (_l)"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "सदा के लिए याद रखें (_f)"
+
+#. Initial state
+#: ../shell/ev-print-operation.c:318
+msgid "Preparing to print ..."
+msgstr "छपाई के लिए तैयार कर रहा है ..."
+
+#: ../shell/ev-print-operation.c:320
+#| msgid "_Find..."
+msgid "Finishing..."
+msgstr "समाप्त कर रहा है..."
+
+#: ../shell/ev-print-operation.c:322
+#, c-format
+msgid "Printing page %d of %d..."
+msgstr "%d को छाप रहा है %d पेज से..."
+
+#: ../shell/ev-print-operation.c:1010
+msgid "Printing is not supported on this printer."
+msgstr "इस मुद्रक पर मुद्रण समर्थित नहीं है."
+
+#: ../shell/ev-print-operation.c:1136 ../shell/ev-window.c:5079
+msgid "Print"
+msgstr "छपाई"
+
+#: ../shell/ev-properties-dialog.c:57
+msgid "Properties"
+msgstr "गुण"
+
+#: ../shell/ev-properties-dialog.c:91
+msgid "General"
+msgstr "सामान्य"
+
+#: ../shell/ev-properties-dialog.c:101
+msgid "Fonts"
+msgstr "फ़ॉन्ट्स"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "फ़ॉन्ट"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "फंट सूचना पा रहा है... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "संलग्नक"
+
+#: ../shell/ev-sidebar-layers.c:395
+msgid "Layers"
+msgstr "परतें"
+
+#: ../shell/ev-sidebar-links.c:340
+msgid "Print..."
+msgstr "छापें..."
+
+#: ../shell/ev-sidebar-links.c:720
+msgid "Index"
+msgstr "निर्देशिका"
+
+#: ../shell/ev-sidebar-thumbnails.c:751
+msgid "Thumbnails"
+msgstr "लघु छवि"
+
+#: ../shell/ev-window.c:843
+#, c-format
+msgid "Page %s - %s"
+msgstr "पृष्ठ %s - %s"
+
+#: ../shell/ev-window.c:845
+#, c-format
+#| msgid "Pages"
+msgid "Page %s"
+msgstr "पृष्ठ %s"
+
+#: ../shell/ev-window.c:1255
+msgid "The document contains no pages"
+msgstr "यह दस्तावेज कोई पृष्ठ समाहित नहीं करता है"
+
+#: ../shell/ev-window.c:1480 ../shell/ev-window.c:1637
+msgid "Unable to open document"
+msgstr "दस्तावेज खोलने में असमर्थ"
+
+#: ../shell/ev-window.c:1611
+#, c-format
+msgid "Loading document from %s"
+msgstr "%s से दस्तावेज लोड कर रहा है"
+
+#: ../shell/ev-window.c:1749 ../shell/ev-window.c:1942
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "दस्तावेज (%d%%) डाउनलोड कर रहा है"
+
+#: ../shell/ev-window.c:1888
+#, c-format
+#| msgid "Reload the document"
+msgid "Reloading document from %s"
+msgstr "दस्तावेज %s से फिर लोड कर रहा है"
+
+#: ../shell/ev-window.c:1921
+msgid "Failed to reload document."
+msgstr "दस्तावेज फिर लोड करने में विफल."
+
+#: ../shell/ev-window.c:2070
+msgid "Open Document"
+msgstr "दस्तावेज खोलें"
+
+#: ../shell/ev-window.c:2131
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "“%s” सांकेतिक लिंक नहीं पा सका: %s"
+
+#: ../shell/ev-window.c:2160
+#| msgid "Cannot open file “%s”.\n"
+msgid "Cannot open a copy."
+msgstr "एक नक़ल नहीं खोल सकता है."
+
+#: ../shell/ev-window.c:2400
+#, c-format
+#| msgid "Shrink the document"
+msgid "Saving document to %s"
+msgstr "दस्तावेज %s में सहेज रहा है"
+
+#: ../shell/ev-window.c:2403
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "%s में संलग्नक सहेज रहा है"
+
+#: ../shell/ev-window.c:2406
+#, c-format
+msgid "Saving image to %s"
+msgstr "%s में छवि सहेज रहा है"
+
+#: ../shell/ev-window.c:2451 ../shell/ev-window.c:2548
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "यह फ़ाइल बतौर “%s” सहेजा नहीं जा सका."
+
+#: ../shell/ev-window.c:2479
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "दस्तावेज (%d%%) अपलोड कर रहा है"
+
+#: ../shell/ev-window.c:2483
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "संलग्नक (%d%%) अपलोड कर रहा है"
+
+#: ../shell/ev-window.c:2487
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "छवि (%d%%) अपलोड कर रहा है"
+
+#: ../shell/ev-window.c:2594
+msgid "Save a Copy"
+msgstr "एक प्रतिलिपि सहेजें"
+
+#: ../shell/ev-window.c:2797
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d स्थगित कार्य कतार में"
+msgstr[1] "%d स्थगित कार्य कतार में"
+
+#: ../shell/ev-window.c:2853 ../shell/ev-window.c:3963
+msgid "Failed to print document"
+msgstr "दस्तावेज छापने में विफल"
+
+#: ../shell/ev-window.c:2910
+#, c-format
+msgid "Printing job “%s”"
+msgstr "“%s” कार्य छाप रहा है"
+
+#: ../shell/ev-window.c:3107
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "प्रतीक्षा करें जब तक छपाई कार्य “%s” बंद होने के पहले समाप्त होता है?"
+
+#: ../shell/ev-window.c:3110
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "कुल %d छपाई कार्य सक्रिय हैं. तब तक प्रतीक्षा करें जब तक बंद नहीं हो जाए?"
+
+#: ../shell/ev-window.c:3122
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "यदि आप विंडो बंद करते हैं, स्थगित छपाई कार्य नहीं छापा जाएगा."
+
+#: ../shell/ev-window.c:3126
+msgid "Cancel _print and Close"
+msgstr "छपाई रद्द करें और बंद करें (_p)"
+
+#: ../shell/ev-window.c:3130
+msgid "Close _after Printing"
+msgstr "छपाई के बाद बंद करें (_a)"
+
+#: ../shell/ev-window.c:3733
+msgid "Toolbar Editor"
+msgstr "उपकरण-पट्टी संपादक"
+
+#: ../shell/ev-window.c:3865
+msgid "There was an error displaying help"
+msgstr "मदद दिखाने में कोई त्रुटि थी."
+
+#: ../shell/ev-window.c:4268
+#, c-format
+#| msgid ""
+#| "PostScript and PDF File Viewer.\n"
+#| "Using poppler %s (%s)"
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"दस्तावेज प्रदर्शक.\n"
+"पॉप्लर %s (%s) का प्रयोग कर रहा है"
+
+#: ../shell/ev-window.c:4296
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4300
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4304
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#. Manually set name and icon in win32
+#: ../shell/ev-window.c:4328 ../shell/main.c:382
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4331
+#| msgid "© 1996-2005 The Evince authors"
+msgid "© 1996-2007 The Evince authors"
+msgstr "© 1996-2007 The Evince authors"
+
+#: ../shell/ev-window.c:4337
+msgid "translator-credits"
+msgstr "राजेश रंजन ([email protected], [email protected])"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4555
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d इस पेज पर मिला"
+msgstr[1] "%d इस पेज पर मिला"
+
+#: ../shell/ev-window.c:4563
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% खोजने के लिये शेष"
+
+#: ../shell/ev-window.c:4991
+msgid "_File"
+msgstr "फ़ाइल (_F)"
+
+#: ../shell/ev-window.c:4992
+msgid "_Edit"
+msgstr "संपादन (_E)"
+
+#: ../shell/ev-window.c:4993
+msgid "_View"
+msgstr "देखें (_V)"
+
+#: ../shell/ev-window.c:4994
+msgid "_Go"
+msgstr "जाएँ (_G)"
+
+#: ../shell/ev-window.c:4995
+msgid "_Help"
+msgstr "मदद (_H)"
+
+#. File menu
+#: ../shell/ev-window.c:4998 ../shell/ev-window.c:5177
+#: ../shell/ev-window.c:5256
+msgid "_Open..."
+msgstr "खोलें (_O)..."
+
+#: ../shell/ev-window.c:4999 ../shell/ev-window.c:5257
+msgid "Open an existing document"
+msgstr "मौजूदा दस्तावेज खोलें"
+
+#: ../shell/ev-window.c:5001
+#| msgid "Save a Copy"
+msgid "Op_en a Copy"
+msgstr "एक नक़ल खोलें (_e)"
+
+#: ../shell/ev-window.c:5002
+#| msgid "Save a copy of the current document"
+msgid "Open a copy of the current document in a new window"
+msgstr "नये विंडो में मौजूदा दस्तावेज की एक नक़ल खोलें"
+
+#: ../shell/ev-window.c:5004 ../shell/ev-window.c:5179
+msgid "_Save a Copy..."
+msgstr "एक प्रतिलिपि सहेजें...(_S)"
+
+#: ../shell/ev-window.c:5005
+msgid "Save a copy of the current document"
+msgstr "मौजूदा दस्तावेज की कॉपी सहेजें"
+
+#: ../shell/ev-window.c:5007
+#| msgid "Print..."
+msgid "Print Set_up..."
+msgstr "छपाई सेटअप... (_u)"
+
+#: ../shell/ev-window.c:5008
+msgid "Setup the page settings for printing"
+msgstr "छपाई हेतु पृष्ठ विन्यास सेटअप करें"
+
+#: ../shell/ev-window.c:5010
+msgid "_Print..."
+msgstr "छापें (_P)..."
+
+#: ../shell/ev-window.c:5011 ../shell/ev-window.c:5080
+msgid "Print this document"
+msgstr "इस दस्तावेज को छापें"
+
+#: ../shell/ev-window.c:5013
+msgid "P_roperties"
+msgstr "गुण (_r)"
+
+#: ../shell/ev-window.c:5021
+msgid "Select _All"
+msgstr "सभी चुनें (_A)"
+
+#: ../shell/ev-window.c:5023
+msgid "_Find..."
+msgstr "ढूंढें (_F)..."
+
+#: ../shell/ev-window.c:5024
+msgid "Find a word or phrase in the document"
+msgstr "दस्तावेज में शब्द या मुहावरा ढूंढें"
+
+#: ../shell/ev-window.c:5030
+msgid "T_oolbar"
+msgstr "टूलबार (_o)"
+
+#: ../shell/ev-window.c:5032
+msgid "Rotate _Left"
+msgstr "घुमाएँ बायाँ (_L)"
+
+#: ../shell/ev-window.c:5034
+msgid "Rotate _Right"
+msgstr "घुमाएँ दाहिना (_R)"
+
+#: ../shell/ev-window.c:5039
+msgid "Enlarge the document"
+msgstr "दस्तावेज बड़ा करें"
+
+#: ../shell/ev-window.c:5042
+msgid "Shrink the document"
+msgstr "दस्तावेज सिकोड़ें"
+
+#: ../shell/ev-window.c:5044
+msgid "_Reload"
+msgstr "पुनः लोड करें (_R)"
+
+#: ../shell/ev-window.c:5045
+msgid "Reload the document"
+msgstr "दस्तावेज पुनः लोड़ करो"
+
+#: ../shell/ev-window.c:5048
+msgid "Auto_scroll"
+msgstr "स्वतः स्क्रॉल (_s)"
+
+#. Go menu
+#: ../shell/ev-window.c:5052
+msgid "_Previous Page"
+msgstr "पिछला पृष्ठ (_P)"
+
+#: ../shell/ev-window.c:5053
+msgid "Go to the previous page"
+msgstr "पिछले पृष्ठ पर जाएँ"
+
+#: ../shell/ev-window.c:5055
+msgid "_Next Page"
+msgstr "अगला पृष्ठ (_N)"
+
+#: ../shell/ev-window.c:5056
+msgid "Go to the next page"
+msgstr "अगले पेज पर जाएँ"
+
+#: ../shell/ev-window.c:5058
+msgid "_First Page"
+msgstr "प्रथम पृष्ठ (_F)"
+
+#: ../shell/ev-window.c:5059
+msgid "Go to the first page"
+msgstr "प्रथम पृष्ठ पर जाएँ"
+
+#: ../shell/ev-window.c:5061
+msgid "_Last Page"
+msgstr "अंतिम पृष्ठ (_L)"
+
+#: ../shell/ev-window.c:5062
+msgid "Go to the last page"
+msgstr "अंतिम पृष्ठ पर जाएँ"
+
+#. Help menu
+#: ../shell/ev-window.c:5066
+msgid "_Contents"
+msgstr "विषय सूची (_C)"
+
+#: ../shell/ev-window.c:5069
+msgid "_About"
+msgstr "के बारे में (_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5073
+msgid "Leave Fullscreen"
+msgstr "फुलस्क्रीन छोड़ें"
+
+#: ../shell/ev-window.c:5074
+msgid "Leave fullscreen mode"
+msgstr "पूर्ण स्क्रीन छोड़ें"
+
+#: ../shell/ev-window.c:5076
+#| msgid "_Presentation"
+msgid "Start Presentation"
+msgstr "प्रस्तुतीकरण चालू करें"
+
+#: ../shell/ev-window.c:5077
+#| msgid "Run document as a presentation"
+msgid "Start a presentation"
+msgstr "एक प्रस्तुतीकरण चलाएँ"
+
+#. View Menu
+#: ../shell/ev-window.c:5133
+msgid "_Toolbar"
+msgstr "उपकरण-पट्टी (_T)"
+
+#: ../shell/ev-window.c:5134
+msgid "Show or hide the toolbar"
+msgstr "उपकरण-पट्टी छुपाएँ या दिखाएँ"
+
+#: ../shell/ev-window.c:5136
+msgid "Side _Pane"
+msgstr "किनारे की पट्टी (_P)"
+
+#: ../shell/ev-window.c:5137
+msgid "Show or hide the side pane"
+msgstr "किनारे की पट्टी को दिखायें व छुपायें"
+
+#: ../shell/ev-window.c:5139
+msgid "_Continuous"
+msgstr "निरन्तर (_C)"
+
+#: ../shell/ev-window.c:5140
+msgid "Show the entire document"
+msgstr "पूरा दस्तावेज दिखाएँ"
+
+#: ../shell/ev-window.c:5142
+msgid "_Dual"
+msgstr "दोहरा (_D)"
+
+#: ../shell/ev-window.c:5143
+msgid "Show two pages at once"
+msgstr "एकसाथ दो पेज दिखायें"
+
+#: ../shell/ev-window.c:5145
+msgid "_Fullscreen"
+msgstr "फुलस्क्रीन (_F)"
+
+#: ../shell/ev-window.c:5146
+msgid "Expand the window to fill the screen"
+msgstr "विंडो को स्क्रीन भरने के लिये बढायें"
+
+#: ../shell/ev-window.c:5148
+#| msgid "_Presentation"
+msgid "Pre_sentation"
+msgstr "प्रस्तुतिकरण (_s)"
+
+#: ../shell/ev-window.c:5149
+msgid "Run document as a presentation"
+msgstr "चलाएँ एक दस्तावेज प्रस्तुतीकरण"
+
+#: ../shell/ev-window.c:5151
+msgid "_Best Fit"
+msgstr "उत्तम अनुरूप (_B)"
+
+#: ../shell/ev-window.c:5152
+msgid "Make the current document fill the window"
+msgstr "विंडो भरने के लिये मौजूदा दस्तावेज बनाये"
+
+#: ../shell/ev-window.c:5154
+msgid "Fit Page _Width"
+msgstr "अनुरूप पृष्ठ चौड़ाई (_W)"
+
+#: ../shell/ev-window.c:5155
+msgid "Make the current document fill the window width"
+msgstr "विंडो चौडाई भरने के लिये मौजूदा दस्तावेज बनायें"
+
+#. Links
+#: ../shell/ev-window.c:5162
+msgid "_Open Link"
+msgstr "लिंक खोलें (_O)"
+
+#: ../shell/ev-window.c:5164
+msgid "_Go To"
+msgstr "इसपर जाएं (_G)"
+
+#: ../shell/ev-window.c:5166
+msgid "Open in New _Window"
+msgstr "नए विंडो में खोलें (_W)"
+
+#: ../shell/ev-window.c:5168
+msgid "_Copy Link Address"
+msgstr "लिंक पता प्रतिलिपि करें (_C)"
+
+#: ../shell/ev-window.c:5170
+#| msgid "_Save a Copy..."
+msgid "_Save Image As..."
+msgstr "छवि ऐसे सहेजें... (_S)"
+
+#: ../shell/ev-window.c:5172
+msgid "Copy _Image"
+msgstr "छवि की नक़ल लें (_I)"
+
+#: ../shell/ev-window.c:5218
+msgid "Page"
+msgstr "पृष्ठ"
+
+#: ../shell/ev-window.c:5219
+msgid "Select Page"
+msgstr "चुनें पृष्ठ"
+
+#: ../shell/ev-window.c:5230
+msgid "Zoom"
+msgstr "ज़ूम"
+
+#: ../shell/ev-window.c:5232
+msgid "Adjust the zoom level"
+msgstr "जूम लेबल पर नियंत्रित करें"
+
+#: ../shell/ev-window.c:5242
+msgid "Navigation"
+msgstr "नेविगेशन"
+
+#: ../shell/ev-window.c:5244
+msgid "Back"
+msgstr "पीछे"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5247
+msgid "Move across visited pages"
+msgstr "देखे गए पृष्ठ के पार ले जाएं"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5277
+msgid "Previous"
+msgstr "पिछला"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5282
+msgid "Next"
+msgstr "अगला"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5286
+msgid "Zoom In"
+msgstr "ज़ूम इन"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5290
+msgid "Zoom Out"
+msgstr "ज़ूम आउट"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5298
+msgid "Fit Width"
+msgstr "चौड़ाई अनुरूप करें"
+
+#: ../shell/ev-window.c:5465 ../shell/ev-window.c:5483
+msgid "Unable to launch external application."
+msgstr "बाहरी अनुप्रयोग लॉन्च करने में असमर्थ."
+
+#: ../shell/ev-window.c:5526
+#| msgid "Unable to open attachment"
+msgid "Unable to open external link"
+msgstr "बाहरी कड़ी खोलने में असमर्थ"
+
+#: ../shell/ev-window.c:5682
+msgid "Couldn't find appropriate format to save image"
+msgstr "छवि सहेजने के लिए उचित प्रारूप नहीं पा सका"
+
+#: ../shell/ev-window.c:5721
+#| msgid "The attachment could not be saved."
+msgid "The image could not be saved."
+msgstr "यह छवि सहेजी नहीं जा सकी."
+
+#: ../shell/ev-window.c:5753
+#| msgid "Images"
+msgid "Save Image"
+msgstr "छवि सहेजें"
+
+#: ../shell/ev-window.c:5815
+msgid "Unable to open attachment"
+msgstr "दस्तावेज खोलने में असमर्थ"
+
+#: ../shell/ev-window.c:5866
+msgid "The attachment could not be saved."
+msgstr "फाइल सहेजा नहीं जा सका."
+
+#: ../shell/ev-window.c:5911
+#| msgid "Attachments"
+msgid "Save Attachment"
+msgstr "संलग्नक सहेजें"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - कूटशब्द आवश्यक"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "विस्तार से"
+
+#: ../shell/main.c:59 ../shell/main.c:347
+msgid "MATE Document Viewer"
+msgstr "MATE दस्तावेज प्रदर्शक"
+
+#: ../shell/main.c:67
+msgid "The page of the document to display."
+msgstr "दिखाने के लिये दस्तावेज का पेज"
+
+#: ../shell/main.c:67
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:68
+msgid "Run evince in fullscreen mode"
+msgstr "पूर्ण स्क्रीन मोड में एवींस चलायें"
+
+#: ../shell/main.c:69
+msgid "Run evince in presentation mode"
+msgstr "एवींस चलाएँ एक दस्तावेज प्रस्तुतीकरण"
+
+#: ../shell/main.c:70
+msgid "Run evince as a previewer"
+msgstr "पूर्वावलोकनकर्ता के रूप में एवींस चलायें"
+
+#: ../shell/main.c:71
+#| msgid "Find a word or phrase in the document"
+msgid "The word or phrase to find in the document"
+msgstr "दस्तावेज में ढूँढ़ने के लिए शब्द या वाक्यांश"
+
+#: ../shell/main.c:71
+msgid "STRING"
+msgstr "स्ट्रिंग"
+
+#: ../shell/main.c:75
+msgid "[FILE...]"
+msgstr "[फाइल...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"बूलियन विकल्प उपलब्ध, सही थंबनेल को सक्रिय करता है औऱ गलत नये थंबनेल के निर्माण को "
+"निष्क्रिय"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF का थंबनेल सक्षम करें"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "पीडीएफ के लिये लघु छवि दस्तावेज दस्तावेज़"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF दस्तावेज थंबनेलर के लिये वैध समादेश के साथ तर्क. caja थंबनेलर दस्तावजेन को ज्यादा "
+"जानकारी के लिये देखें."
+
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 00000000..29acff83
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,1694 @@
+# Hungarian translation of evince
+# This file is distributed under the same license as the evince package.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, Free Software Foundation, Inc.
+#
+# Gabor Kelemen <kelemeng at mate dot hu>, 2005, 2006, 2007, 2008, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince master\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-08-28 07:57+0200\n"
+"PO-Revision-Date: 2010-08-28 07:56+0200\n"
+"Last-Translator: Gabor Kelemen <kelemeng at mate dot hu>\n"
+"Language-Team: Hungarian <mate at fsf dot hu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:210
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Hiba a parancs („%s”) indításakor a következő képregény kicsomagolásához: %s"
+
+#: ../backend/comics/comics-document.c:224
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "A parancs („%s”) nem tudta kibontani a képregényt."
+
+#: ../backend/comics/comics-document.c:233
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "A parancs („%s”) nem fejeződött be hiba nélkül."
+
+#: ../backend/comics/comics-document.c:413
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Nem képregény MIME-típus: %s"
+
+#: ../backend/comics/comics-document.c:420
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Nem található megfelelő parancs ezen képregény kibontásához"
+
+#: ../backend/comics/comics-document.c:458
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Ismeretlen MIME típus"
+
+#: ../backend/comics/comics-document.c:485
+msgid "File corrupted"
+msgstr "A fájl sérült"
+
+#: ../backend/comics/comics-document.c:498
+msgid "No files in archive"
+msgstr "Nem találhatók fájlok az archívumban"
+
+#: ../backend/comics/comics-document.c:537
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Nem találhatók képek a(z) %s archívumban"
+
+#: ../backend/comics/comics-document.c:781
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Hiba történt a(z) „%s” törlése közben."
+
+#: ../backend/comics/comics-document.c:874
+#, c-format
+msgid "Error %s"
+msgstr "%s hiba"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Képregények"
+
+#: ../backend/djvu/djvu-document.c:170
+msgid "DjVu document has incorrect format"
+msgstr "A DjVu dokumentum formátuma hibás"
+
+#: ../backend/djvu/djvu-document.c:247
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr "A dokumentum több fájlból áll. Legalább az egyik fájl nem érhető el."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu dokumentumok"
+
+#: ../backend/dvi/dvi-document.c:110
+msgid "DVI document has incorrect format"
+msgstr "A DVI dokumentum formátuma hibás"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI dokumentumok"
+
+#: ../backend/pdf/ev-poppler.cc:614
+msgid "This work is in the Public Domain"
+msgstr "Ez a munka közkincs"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:867
+msgid "Yes"
+msgstr "Engedélyezve"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:870
+msgid "No"
+msgstr "Tiltva"
+
+#: ../backend/pdf/ev-poppler.cc:999
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:1001
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:1003
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:1005
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:1007
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:1009
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:1011
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:1013
+msgid "Unknown font type"
+msgstr "Ismeretlen betűkészlet-típus"
+
+#: ../backend/pdf/ev-poppler.cc:1039
+msgid "No name"
+msgstr "Névtelen"
+
+#: ../backend/pdf/ev-poppler.cc:1047
+msgid "Embedded subset"
+msgstr "Beágyazott részhalmaz"
+
+#: ../backend/pdf/ev-poppler.cc:1049
+msgid "Embedded"
+msgstr "Beágyazott"
+
+#: ../backend/pdf/ev-poppler.cc:1051
+msgid "Not embedded"
+msgstr "Be nem ágyazott"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF-dokumentumok"
+
+#: ../backend/ps/ev-spectre.c:98
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "A dokumentum („%s”) betöltése meghiúsult"
+
+#: ../backend/ps/ev-spectre.c:131
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "A dokumentum („%s”) mentése meghiúsult"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript-dokumentumok"
+
+#: ../backend/tiff/tiff-document.c:109
+msgid "Invalid document"
+msgstr "Érvénytelen dokumentum"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "A(z) „%s” melléklet nem menthető: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "A(z) „%s” melléklet nem nyitható meg: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "A(z) „%s” melléklet nem nyitható meg"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "A(z) %s fájltípus (%s) nem támogatott"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Minden dokumentum"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Minden fájl"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Az átmeneti fájl létrehozása meghiúsult: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Az átmeneti könyvtár létrehozása meghiúsult: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "A fájl nem egy érvényes .desktop fájl"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Ismeretlen .desktop fájl verzió: „%s”"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s indítása"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Az alkalmazás nem fogad el dokumentumokat a parancssorban"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Ismeretlen indítási beállítás: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Nem adhatók dokumentum-URI címek egy „Type=Link” asztali bejegyzésnek"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Nem futtatható elem"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "A munkamenet-kezelőhöz való csatlakozás tiltása"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "A mentett beállításokat tartalmazó fájl megadása"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FÁJL"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "A munkamenet-kezelő azonosítójának megadása"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "Azonosító"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Munkamenet-kezelés kapcsolói:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Munkamenet-kezelési kapcsolók megjelenítése"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "_„%s” megjelenítése"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "Át_helyezés az eszköztáron"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "A kijelölt elem áthelyezése az eszköztáron"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Eltávolítás az eszköztárról"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "A kijelölt elem eltávolítása az eszköztárról"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Eszköztár törlése"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "A kijelölt eszköztár eltávolítása"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Elválasztó"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5739
+msgid "Best Fit"
+msgstr "Teljes oldal"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Teljes szélesség"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4534
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Dokumentummegjelenítő"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Többoldalas dokumentumok megjelenítése"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "A dokumentum korlátozásainak felülbírálása"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Dokumentum (például a másolásra vagy nyomtatásra vonatkozó) korlátozásainak "
+"felülbírálása."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Ideiglenes fájl törlése"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Beállításfájl nyomtatása"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "MATE dokumentumelőnézet-készítő"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3166
+msgid "Failed to print document"
+msgstr "A dokumentum nyomtatása meghiúsult"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "A kiválasztott nyomtató („%s”) nem található"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5454
+msgid "_Previous Page"
+msgstr "Elő_ző oldal"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5455
+msgid "Go to the previous page"
+msgstr "Ugrás az előző oldalra"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5457
+msgid "_Next Page"
+msgstr "_Következő oldal"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5458
+msgid "Go to the next page"
+msgstr "Ugrás a következő oldalra"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5441
+msgid "Enlarge the document"
+msgstr "A dokumentum megnövelése"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5444
+msgid "Shrink the document"
+msgstr "A dokumentum zsugorítása"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Nyomtatás"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5410
+msgid "Print this document"
+msgstr "A jelenlegi dokumentum nyomtatása"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5556
+msgid "_Best Fit"
+msgstr "Teljes _oldal"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5557
+msgid "Make the current document fill the window"
+msgstr "A jelenlegi dokumentum töltse ki az ablakot"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5559
+msgid "Fit Page _Width"
+msgstr "Teljes _szélesség"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5560
+msgid "Make the current document fill the window width"
+msgstr "A jelenlegi dokumentum töltse ki az ablak szélességét"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5661
+msgid "Page"
+msgstr "Oldal"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5662
+msgid "Select Page"
+msgstr "Oldal kiválasztása"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokumentum"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Cím:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Hely:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Tárgy:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Szerző:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Kulcsszavak:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Készítő:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Létrehozó:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Létrehozva:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Módosítva:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Lapok száma:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimalizált:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Formátum:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Biztonság:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Papírméret:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Nincs"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f hüvelyk"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, álló (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, fekvő (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d / %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "/ %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Betöltés…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Nyomtatás előkészítése…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Befejezés…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "A(z) %d. oldal nyomtatása %d oldalból…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "A nyomtatás nem támogatott ezen a nyomtatón"
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Érvénytelen oldalválasztás"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Figyelmeztetés"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "A kiválasztott nyomtatási tartomány nem tartalmaz oldalakat"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Oldal méretezése:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Zsugorítás a nyomtatható területre"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Illesztés a nyomtatható területhez"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Dokumentumoldalak átméretezése a kijelölt nyomtatóoldalhoz. Válasszon az "
+"alábbiak közül:\n"
+"\n"
+"• „Nincs”: Az oldal nem lesz átméretezve.\n"
+"\n"
+"• „Zsugorítás a nyomtatható területre”: A nyomtatható területnél nagyobb "
+"dokumentumoldalak mérete a nyomtatóoldal méretére lesz csökkentve.\n"
+"\n"
+"• „Illesztés a nyomtatható területhez”: A dokumentumoldalak szükség szerint "
+"a nyomtatóoldal nyomtatható területére lesznek növelve vagy csökkentve.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Automatikus forgatás és középre igazítás"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Minden oldal nyomtatóoldal-tájolásának forgatása a dokumentumoldalnak "
+"megfelelően. A dokumentumoldalak az nyomtatóoldalon belül középre lesznek "
+"igazítva."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Oldalméret kiválasztása a dokumentum oldalméretének használatával"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Ha engedélyezi, minden oldal a dokumentumoldallal egyező méretű papírra lesz "
+"nyomtatva."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Oldalkezelés"
+
+#: ../libview/ev-jobs.c:1531
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "A(z) %d. oldal nyomtatása meghiúsult: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Görgetés felfelé"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Görgetés lefelé"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Nézet görgetése felfelé"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Nézet görgetése lefelé"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Dokumentumnézet"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Ugrás oldalra:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Vége a bemutatónak. A kilépéshez kattintson."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Ugrás az első oldalra"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Ugrás az előző oldalra"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Ugrás a következő oldalra"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Ugrás az utolsó oldalra"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Ugrás:"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Keresés"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Ugrás a(z) %s oldalra"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Ugrás erre: %s a következő fájlban: „%s”"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Ugrás a(z) %s fájlra"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "%s indítása"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Keresés:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5427
+msgid "Find Pre_vious"
+msgstr "Elő_ző találat"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "A keresőkifejezés előző előfordulása az oldalon"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5425
+msgid "Find Ne_xt"
+msgstr "Kö_vetkező találat"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "A keresőkifejezés következő előfordulása az oldalon"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Na_gybetűérzékeny"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Nagybetűérzékeny keresés be/ki"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Ikon:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Megjegyzés"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Megjegyzés"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Billentyű"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Súgó"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Új bekezdés"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Bekezdés"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Beszúrás"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Kereszt"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Kör"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Ismeretlen"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Magyarázattulajdonságok"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Szín:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Stílus:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Átlátszó"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Átlátszatlan"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Kiinduló ablakállapot:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Megnyitás"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Bezárás"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Bemutató mód"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s dokumentum jelszava"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "%s átalakítása"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d/%d dokumentum átalakítva"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Metaadatok átalakítása"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Az Evince által használt metaadat-formátum megváltozott, emiatt át kell "
+"állítani. Ha az átállítás megszakad, a metaadat-tároló nem fog működni."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Nemrég használt dokumentum megnyitása"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Ez a dokumentum zárolva van és csak a megfelelő jelszó megadásával lehet "
+"elolvasni."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Dokumentum feloldása"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Adja meg a jelszót"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Jelszó szükséges"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "A dokumentum („%s”) zárolva van és megnyitásához jelszó szükséges."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Jelszó:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Jelszó a_zonnali elfelejtése"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Jelszó megjegyzése _kijelentkezésig"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "_Megjegyzés örökre"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Tulajdonságok"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Általános"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Betűkészletek"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Dokumentum licence"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Betűkészlet"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Betűkészlet-információk összegyűjtése… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Felhasználási feltételek"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Szöveg licence"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "További információk"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Lista"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Megjegyzések"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Szöveg"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Szöveges megjegyzés hozzáadása"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Hozzáadás"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "A dokumentum nem tartalmaz megjegyzéseket"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "%d. oldal"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Mellékletek"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Rétegek"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Nyomtatás…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Index"
+
+#: ../shell/ev-sidebar-thumbnails.c:938
+msgid "Thumbnails"
+msgstr "Bélyegképek"
+
+#: ../shell/ev-window.c:866
+#, c-format
+msgid "Page %s — %s"
+msgstr "Oldal: %s – %s"
+
+#: ../shell/ev-window.c:868
+#, c-format
+msgid "Page %s"
+msgstr "Oldal: %s"
+
+#: ../shell/ev-window.c:1420
+msgid "The document contains no pages"
+msgstr "A dokumentum nem tartalmaz oldalakat"
+
+#: ../shell/ev-window.c:1423
+msgid "The document contains only empty pages"
+msgstr "A dokumentum csak üres oldalakat tartalmaz"
+
+#: ../shell/ev-window.c:1625 ../shell/ev-window.c:1791
+msgid "Unable to open document"
+msgstr "A dokumentum nem nyitható meg"
+
+#: ../shell/ev-window.c:1762
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Dokumentum betöltése innen: „%s”"
+
+#: ../shell/ev-window.c:1904 ../shell/ev-window.c:2183
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Dokumentum letöltése (%d%%)"
+
+#: ../shell/ev-window.c:1937
+msgid "Failed to load remote file."
+msgstr "A távoli fájl betöltése meghiúsult."
+
+#: ../shell/ev-window.c:2127
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Dokumentum újratöltése innen: %s"
+
+#: ../shell/ev-window.c:2159
+msgid "Failed to reload document."
+msgstr "A dokumentum újratöltése meghiúsult."
+
+#: ../shell/ev-window.c:2314
+msgid "Open Document"
+msgstr "Dokumentum megnyitása"
+
+#: ../shell/ev-window.c:2612
+#, c-format
+msgid "Saving document to %s"
+msgstr "Dokumentum mentése ide: %s"
+
+#: ../shell/ev-window.c:2615
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Melléklet mentése ide: %s"
+
+#: ../shell/ev-window.c:2618
+#, c-format
+msgid "Saving image to %s"
+msgstr "Kép mentése ide: %s"
+
+#: ../shell/ev-window.c:2662 ../shell/ev-window.c:2762
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "A fájl nem menthető „%s” néven."
+
+#: ../shell/ev-window.c:2693
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Dokumentum feltöltése (%d%%)"
+
+#: ../shell/ev-window.c:2697
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Melléklet feltöltése (%d%%)"
+
+#: ../shell/ev-window.c:2701
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Kép feltöltése (%d%%)"
+
+#: ../shell/ev-window.c:2825
+msgid "Save a Copy"
+msgstr "Másolat mentése"
+
+#: ../shell/ev-window.c:3110
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d feladat a sorban"
+msgstr[1] "%d feladat a sorban"
+
+#: ../shell/ev-window.c:3223
+#, c-format
+msgid "Printing job “%s”"
+msgstr "„%s” feladat nyomtatása"
+
+#: ../shell/ev-window.c:3400
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"A dokumentum kitöltött űrlapmezőket tartalmaz. Ha nem ment egy példányt, "
+"akkor a módosítások véglegesen elvesznek."
+
+#: ../shell/ev-window.c:3404
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"A dokumentum új vagy módosított megjegyzéseket tartalmaz. Ha nem ment egy "
+"példányt, akkor a módosítások véglegesen elvesznek."
+
+#: ../shell/ev-window.c:3411
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Bezárás előtt menti a(z) „%s” dokumentum másolatát?"
+
+#: ../shell/ev-window.c:3430
+msgid "Close _without Saving"
+msgstr "Bezárás mentés _nélkül"
+
+#: ../shell/ev-window.c:3434
+msgid "Save a _Copy"
+msgstr "_Másolat mentése"
+
+#: ../shell/ev-window.c:3508
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Bezárás előtt megvárja a(z) „%s” nyomtatási feladat befejeződését?"
+
+#: ../shell/ev-window.c:3511
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"%d nyomtatási feladat aktív. Megvárja a nyomtatás befejeződését a bezárás "
+"előtt?"
+
+#: ../shell/ev-window.c:3523
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Ha bezárja az ablakot, a függőben lévő nyomtatási feladatok megszakadnak."
+
+#: ../shell/ev-window.c:3527
+msgid "Cancel _print and Close"
+msgstr "_Nyomtatás megszakítása és bezárás"
+
+#: ../shell/ev-window.c:3531
+msgid "Close _after Printing"
+msgstr "Bezárás nyomtatás _után"
+
+#: ../shell/ev-window.c:4151
+msgid "Toolbar Editor"
+msgstr "Eszköztárszerkesztő"
+
+#: ../shell/ev-window.c:4318
+msgid "There was an error displaying help"
+msgstr "Hiba történt a súgó megjelenítése közben"
+
+#: ../shell/ev-window.c:4530
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Dokumentummegjelenítő\n"
+"%s (%s) használatával"
+
+#: ../shell/ev-window.c:4561
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Az Evince szabad szoftver, terjesztheti és/vagy módosíthatja a Free Software "
+"Foundation által kiadott GNU General Public License második (vagy bármely "
+"későbbi) változatában foglaltak alapján.\n"
+
+#: ../shell/ev-window.c:4565
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Az Evince programot abban a reményben terjesztjük, hogy hasznos lesz, de nem "
+"vállalunk SEMMIFÉLE GARANCIÁT, még olyan értelemben sem, hogy a program "
+"alkalmas-e a KÖZREADÁSRA vagy EGY BIZONYOS FELADAT ELVÉGZÉSÉRE. További "
+"részletekért tanulmányozza a GNU GPL licencet.\n"
+
+#: ../shell/ev-window.c:4569
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Az Evince programhoz a GNU General Public License egy példánya is jár, ha "
+"nem kapta meg, írjon a Free Software Foundation Inc.-nek. Levélcímük: 51 "
+"Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.\n"
+
+#: ../shell/ev-window.c:4594
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4597
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Az Evince szerzői"
+
+#: ../shell/ev-window.c:4603
+msgid "translator-credits"
+msgstr "Kelemen Gábor <kelemeng at mate dot hu>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4869
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d találat ezen az oldalon"
+msgstr[1] "%d találat ezen az oldalon"
+
+#: ../shell/ev-window.c:4874
+msgid "Not found"
+msgstr "Nem található"
+
+#: ../shell/ev-window.c:4880
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% van hátra a keresésből"
+
+#: ../shell/ev-window.c:5393
+msgid "_File"
+msgstr "_Fájl"
+
+#: ../shell/ev-window.c:5394
+msgid "_Edit"
+msgstr "S_zerkesztés"
+
+#: ../shell/ev-window.c:5395
+msgid "_View"
+msgstr "_Nézet"
+
+#: ../shell/ev-window.c:5396
+msgid "_Go"
+msgstr "_Ugrás"
+
+#: ../shell/ev-window.c:5397
+msgid "_Help"
+msgstr "_Súgó"
+
+#. File menu
+#: ../shell/ev-window.c:5400 ../shell/ev-window.c:5701
+msgid "_Open…"
+msgstr "_Megnyitás…"
+
+#: ../shell/ev-window.c:5401 ../shell/ev-window.c:5702
+msgid "Open an existing document"
+msgstr "Létező dokumentum megnyitása"
+
+#: ../shell/ev-window.c:5403
+msgid "Op_en a Copy"
+msgstr "Másolat megn_yitása"
+
+#: ../shell/ev-window.c:5404
+msgid "Open a copy of the current document in a new window"
+msgstr "A jelenlegi dokumentum egy másolatának megnyitása új ablakban"
+
+#: ../shell/ev-window.c:5406
+msgid "_Save a Copy…"
+msgstr "Más_olat mentése…"
+
+#: ../shell/ev-window.c:5407
+msgid "Save a copy of the current document"
+msgstr "A jelenlegi dokumentum egy másolatának mentése"
+
+#: ../shell/ev-window.c:5409
+msgid "_Print…"
+msgstr "_Nyomtatás…"
+
+#: ../shell/ev-window.c:5412
+msgid "P_roperties"
+msgstr "_Tulajdonságok"
+
+#: ../shell/ev-window.c:5420
+msgid "Select _All"
+msgstr "Min_dent kijelöl"
+
+#: ../shell/ev-window.c:5422
+msgid "_Find…"
+msgstr "_Keresés…"
+
+#: ../shell/ev-window.c:5423
+msgid "Find a word or phrase in the document"
+msgstr "Szó vagy kifejezés keresése a dokumentumban"
+
+#: ../shell/ev-window.c:5429
+msgid "T_oolbar"
+msgstr "Eszköz_tár"
+
+#: ../shell/ev-window.c:5431
+msgid "Rotate _Left"
+msgstr "Forgatás _balra"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Right"
+msgstr "Forgatás _jobbra"
+
+#: ../shell/ev-window.c:5435
+msgid "Save Current Settings as _Default"
+msgstr "_Jelenlegi beállítások mentése alapértelmezettként"
+
+#: ../shell/ev-window.c:5446
+msgid "_Reload"
+msgstr "_Frissítés"
+
+#: ../shell/ev-window.c:5447
+msgid "Reload the document"
+msgstr "A dokumentum újratöltése"
+
+#: ../shell/ev-window.c:5450
+msgid "Auto_scroll"
+msgstr "Aut_omatikus görgetés"
+
+#: ../shell/ev-window.c:5460
+msgid "_First Page"
+msgstr "_Első oldal"
+
+#: ../shell/ev-window.c:5461
+msgid "Go to the first page"
+msgstr "Ugrás az első oldalra"
+
+#: ../shell/ev-window.c:5463
+msgid "_Last Page"
+msgstr "_Utolsó oldal"
+
+#: ../shell/ev-window.c:5464
+msgid "Go to the last page"
+msgstr "Ugrás az utolsó oldalra"
+
+#. Help menu
+#: ../shell/ev-window.c:5468
+msgid "_Contents"
+msgstr "_Tartalom"
+
+#: ../shell/ev-window.c:5471
+msgid "_About"
+msgstr "_Névjegy"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5475
+msgid "Leave Fullscreen"
+msgstr "Teljes képernyő elhagyása"
+
+#: ../shell/ev-window.c:5476
+msgid "Leave fullscreen mode"
+msgstr "Teljes képernyő elhagyása"
+
+#: ../shell/ev-window.c:5478
+msgid "Start Presentation"
+msgstr "Bemutató indítása"
+
+#: ../shell/ev-window.c:5479
+msgid "Start a presentation"
+msgstr "Egy bemutató elindítása"
+
+#. View Menu
+#: ../shell/ev-window.c:5538
+msgid "_Toolbar"
+msgstr "_Eszköztár"
+
+#: ../shell/ev-window.c:5539
+msgid "Show or hide the toolbar"
+msgstr "Eszköztár megjelenítése vagy elrejtése"
+
+#: ../shell/ev-window.c:5541
+msgid "Side _Pane"
+msgstr "Oldalsá_v"
+
+#: ../shell/ev-window.c:5542
+msgid "Show or hide the side pane"
+msgstr "Oldalsáv megjelenítése vagy elrejtése"
+
+#: ../shell/ev-window.c:5544
+msgid "_Continuous"
+msgstr "Fol_ytonos"
+
+#: ../shell/ev-window.c:5545
+msgid "Show the entire document"
+msgstr "A teljes dokumentum mutatása"
+
+#: ../shell/ev-window.c:5547
+msgid "_Dual"
+msgstr "Két os_zlop"
+
+#: ../shell/ev-window.c:5548
+msgid "Show two pages at once"
+msgstr "Két oldal mutatása egyszerre"
+
+#: ../shell/ev-window.c:5550
+msgid "_Fullscreen"
+msgstr "_Teljes képernyő"
+
+#: ../shell/ev-window.c:5551
+msgid "Expand the window to fill the screen"
+msgstr "Az ablak megnövelése, hogy kitöltse a képernyőt"
+
+#: ../shell/ev-window.c:5553
+msgid "Pre_sentation"
+msgstr "_Bemutató"
+
+#: ../shell/ev-window.c:5554
+msgid "Run document as a presentation"
+msgstr "A dokumentum elindítása bemutatóként"
+
+#: ../shell/ev-window.c:5562
+msgid "_Inverted Colors"
+msgstr "_Inverz színek"
+
+#: ../shell/ev-window.c:5563
+msgid "Show page contents with the colors inverted"
+msgstr "Az oldal tartalmának megjelenítése inverz színekkel"
+
+#. Links
+#: ../shell/ev-window.c:5571
+msgid "_Open Link"
+msgstr "_Hivatkozás megnyitása"
+
+#: ../shell/ev-window.c:5573
+msgid "_Go To"
+msgstr "_Ugrás"
+
+#: ../shell/ev-window.c:5575
+msgid "Open in New _Window"
+msgstr "Megnyitás új _ablakban"
+
+#: ../shell/ev-window.c:5577
+msgid "_Copy Link Address"
+msgstr "Hivatkozás cí_mének másolása"
+
+#: ../shell/ev-window.c:5579
+msgid "_Save Image As…"
+msgstr "Ké_p mentése másként…"
+
+#: ../shell/ev-window.c:5581
+msgid "Copy _Image"
+msgstr "Ké_p másolása"
+
+#: ../shell/ev-window.c:5583
+msgid "Annotation Properties…"
+msgstr "Magyarázatok tulajdonságai…"
+
+#: ../shell/ev-window.c:5588
+msgid "_Open Attachment"
+msgstr "_Melléklet megnyitása"
+
+#: ../shell/ev-window.c:5590
+msgid "_Save Attachment As…"
+msgstr "Melléklet m_entése másként…"
+
+#: ../shell/ev-window.c:5675
+msgid "Zoom"
+msgstr "Nagyítás"
+
+#: ../shell/ev-window.c:5677
+msgid "Adjust the zoom level"
+msgstr "A nagyítás szintjének beállítása"
+
+#: ../shell/ev-window.c:5687
+msgid "Navigation"
+msgstr "Navigáció"
+
+#: ../shell/ev-window.c:5689
+msgid "Back"
+msgstr "Vissza"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5692
+msgid "Move across visited pages"
+msgstr "Mozgás a megjelenített oldalak között"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5722
+msgid "Previous"
+msgstr "Előző"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5727
+msgid "Next"
+msgstr "Következő"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5731
+msgid "Zoom In"
+msgstr "Nagyítás"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5735
+msgid "Zoom Out"
+msgstr "Kicsinyítés"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5743
+msgid "Fit Width"
+msgstr "Szélesség igazítása"
+
+#: ../shell/ev-window.c:5888 ../shell/ev-window.c:5905
+msgid "Unable to launch external application."
+msgstr "A külső alkalmazás nem indítható."
+
+#: ../shell/ev-window.c:5962
+msgid "Unable to open external link"
+msgstr "A külső hivatkozás nem nyitható meg"
+
+#: ../shell/ev-window.c:6129
+msgid "Couldn't find appropriate format to save image"
+msgstr "Nem található megfelelő formátum a kép mentéséhez"
+
+#: ../shell/ev-window.c:6171
+msgid "The image could not be saved."
+msgstr "A kép nem menthető."
+
+#: ../shell/ev-window.c:6203
+msgid "Save Image"
+msgstr "Kép mentése"
+
+#: ../shell/ev-window.c:6331
+msgid "Unable to open attachment"
+msgstr "A melléklet nem nyitható meg"
+
+#: ../shell/ev-window.c:6384
+msgid "The attachment could not be saved."
+msgstr "A melléklet nem menthető."
+
+#: ../shell/ev-window.c:6429
+msgid "Save Attachment"
+msgstr "Melléklet mentése"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s – Jelszó szükséges"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Kiterjesztés szerint"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATE dokumentummegjelenítő"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "A megjelenítendő dokumentum oldalcímkéje."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "OLDAL"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "A megjelenítendő dokumentum oldalszáma."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "SZÁM"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Teljes képernyős mód"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Az Evince futtatása bemutató módban"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Előnézet mód"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "A dokumentumban keresendő szó vagy kifejezés"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "KARAKTERLÁNC"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FÁJL…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Igaz hatására a bélyegképek készítése engedélyezve lesz, hamis hatására "
+"pedig nem."
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF dokumentumokról bélyegképek készítésének engedélyezése"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Bélyegkép-készítő parancs PDF-dokumentumokhoz"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Érvényes parancs paraméterekkel a PDF dokumentumokból való bélyegkép-"
+"készítéshez. További információkért lásd a Caja bélyegkép-készítőjének "
+"dokumentációját."
+
+#~ msgid "Impress Slides"
+#~ msgstr "Impress fóliák"
+
+#~ msgid "No error"
+#~ msgstr "Nincs hiba"
+
+#~ msgid "Not enough memory"
+#~ msgstr "Nincs elég memória"
+
+#~ msgid "Cannot find ZIP signature"
+#~ msgstr "Nem található a ZIP aláírás"
+
+#~ msgid "Invalid ZIP file"
+#~ msgstr "Érvénytelen ZIP fájl"
+
+#~ msgid "Multi file ZIPs are not supported"
+#~ msgstr "A több fájlból álló ZIP archívumok nem támogatottak"
+
+#~ msgid "Cannot open the file"
+#~ msgstr "A fájl nem nyitható meg"
+
+#~ msgid "Cannot read data from file"
+#~ msgstr "Nem lehet adatokat olvasni a fájlból"
+
+#~ msgid "Cannot find file in the ZIP archive"
+#~ msgstr "Nem található a fájl a ZIP archívumban"
+
+#~ msgid "Unknown error"
+#~ msgstr "Ismeretlen hiba"
diff --git a/po/id.po b/po/id.po
new file mode 100644
index 00000000..83a8f60a
--- /dev/null
+++ b/po/id.po
@@ -0,0 +1,1717 @@
+# translation of Evince into Indonesian
+# Copyright (C) 2005 THE Evince'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the Evince package.
+#
+# Ahmad Riza H Nst <[email protected]>, 2006.
+# Mdamt <[email protected]>, 2005.
+# Andika Triwidada <[email protected]>, 2009, 2010.
+# Dirgita <[email protected]>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince mate-2-32\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-09-07 16:35+0000\n"
+"PO-Revision-Date: 2010-09-11 14:40+0700\n"
+"Last-Translator: Andika Triwidada <[email protected]>\n"
+"Language-Team: MATE Indonesian Translation Team <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Poedit-Language: Indonesian\n"
+"X-Poedit-Country: Indonesia\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Galat meluncurkan perintah “%s” untuk mengekstrak buku komik: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Perintah “%s” gagal mengekstrak buku komik."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Perintah “%s” tidak berakhir secara normal."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Bukan jenis MIME buku komik: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Tidak menemukan perintah yang sesuai untuk mengekstrak jenis buku komik ini"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Jenis MIME Tidak Dikenal"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Berkas telah rusak"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Tidak ada berkas dalam arsip"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Tidak menemukan gambar dalam arsip %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Galat sewaktu menghapus “%s”."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Galat %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Buku Komik"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "Format dokumen DjVu salah"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Dokumen ini terdiri atas sejumlah berkas. Satu atau lebih berkas tersebu "
+"tidak dapat diakses."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Dokumen DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Format dokumen DVI salah"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Dokumen DVI"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Karya ini adalah Domain Publik"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Ya"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Tidak"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Jenis 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Jenis 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Jenis 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Jenis 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Jenis 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Jenis fonta tidak dikenal"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Tidak ada nama"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Subset yang ditempelkan"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Ditempelkan"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Tidak ditempelkan"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Dokumen PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Dokumen tidak sah"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Salindia Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Tidak ada galat"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Memori tidak cukup"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Tidak menemukan tanda tangan ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Berkas ZIP tidak sah"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Multiberkas ZIP tidak didukung"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Tidak dapat membuka berkas"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Data berkas tidak dapat dibaca"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Tidak menemukan berkas dalam arsip ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Galat tak dikenal"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Gagal memuat dokumen “%s”"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Gagal menyimpan dokumen \"%s\""
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Dokumen PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Tidak dapat menyimpan lampiran “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Tidak dapat membuka lampiran “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Tidak dapat membuka lampiran “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Jenis berkas %s (%s) tidak didukung"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Semua Dokumen"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Semua Berkas"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Gagal membuat berkas temporer: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Gagal membuat direktori temporer: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Ini bukan berkas .desktop yang sah"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Berkas desktop Versi '%s' tak dikenal"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Memulai %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Aplikasi tidak menerima dokumen pada baris perintah"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Opsi peluncuran tak dikenal: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Tidak dapat melewatkan URI dokumen pada entri desktop 'Type=Link'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Bukan objek yang dapat dieksekusi"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Menonaktifkan koneksi ke manajer sesi"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Menentukan berkas yang memuat konfigurasi"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "BERKAS"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Menentukan ID manajemen sesi"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opsi manajemen sesi:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Menampilkan opsi manajemen sesi"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Menampilkan “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "Pin_dahkan Bilah Alat"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Memindahkan item yang dipilih pada bilah alat"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "Hapus da_ri Bilah Alat"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Membuang item yang dipilih dari bilah alat"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Hapus Bilah Alat"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Menghapus bilah alat yang dipilih"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Pemisah"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5757
+msgid "Best Fit"
+msgstr "Sehalaman Penuh"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Selebar Halaman"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4550
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Penampil Dokumen"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Melihat dokumen multihalaman"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Timpa restriksi dokumen"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Menimpa restriksi dokumen, seperti larangan untuk menyalin atau menceta."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Hapus berkas temporer"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Cetak berkas pengaturan"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Penampil Dokumen MATE"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3181
+msgid "Failed to print document"
+msgstr "Gagal mencetak dokumen"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Pencetak '%s' yang dipilih tidak ditemukan"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5472
+msgid "_Previous Page"
+msgstr "Halaman _Sebelumnya"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5473
+msgid "Go to the previous page"
+msgstr "Halaman sebelumnya"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5475
+msgid "_Next Page"
+msgstr "Halama_n Selanjutnya"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5476
+msgid "Go to the next page"
+msgstr "Halaman selanjutnya"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5459
+msgid "Enlarge the document"
+msgstr "Memperbesar tampilan dokumen"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5462
+msgid "Shrink the document"
+msgstr "Memperkecil tampilan dokumen"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Cetak"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5428
+msgid "Print this document"
+msgstr "Mencetak dokumen ini"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5574
+msgid "_Best Fit"
+msgstr "Sehalaman Penuh"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5575
+msgid "Make the current document fill the window"
+msgstr "Menyesuaikan dokumen dengan jendela"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5577
+msgid "Fit Page _Width"
+msgstr "Selebar _Halaman"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5578
+msgid "Make the current document fill the window width"
+msgstr "Menyesuaikan dokumen hingga memenuhi lebar jendela"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5679
+msgid "Page"
+msgstr "Halaman"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5680
+msgid "Select Page"
+msgstr "Memilih Halaman"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokumen"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Judul:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Lokasi:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Subjek:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Penulis:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Kata Kunci:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Produsen:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Pembuat:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Dibuat:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Diubah:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Jumlah Halaman:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Teroptimasi:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Format:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Keamanan:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Ukuran Kertas:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Nihil"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f inci"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Tegak (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Tumbang (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d dari %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "dari %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Memuat…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Bersiap mencetak..."
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Menyelesaikan..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Mencetak halaman %d dari %d..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Pencetak ini tidak dapat mencetak."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Pemilihan halaman tidak sah"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Peringatan"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Anda memilih jangkauan cetak yang kosong"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Skala Halaman:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Perkecil ke Wilayah Dapat Dicetak"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Paskan ke Wilayah Dapat Dicetak"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Skalakan halaman dokumen agar pas dengan halaman pencetak yang dipilih. "
+"Pilih satu dari berikut:\n"
+"\n"
+"• \"None\" (Tak Satupun): Tidak dilakukan penskalaan halaman.\n"
+"\n"
+"• \"Shrink to Printable Area\" (Perkecil ke Wilayah Dapat Dicetak): Halaman-"
+"halaman dokumen yang lebih besar daripada wilayah yang dapat dicetak akan "
+"diperkecil agar pas dengan wilayah yang dapat dicetak dari halaman "
+"pencetak.\n"
+"\n"
+"• \"Fit to Printable Area\" (Paskan ke Wilayah Dapat Dicetak): Halaman-"
+"halaman dokumen diperbesar atau diperkecil seperlunya agar pas dengan "
+"wilayah yang dapat dicetak dari halaman pencetak.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Otomatis Putar dan ke Tengah"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Putar orientasi halaman pencetak dari setiap halaman agar cocok dengan "
+"orientasi setiap halaman dokumen. Halaman dokumen akan diletakkan di tengah "
+"halaman pencetak."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Memilih ukuran halaman sesuai ukuran halaman dokumen"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Bila diaktifkan, setiap halaman akan dicetak dengan ukuran kertas seperti "
+"halaman dokumen."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Penanganan Halaman"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Gagal mencetak halaman %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Gulung Naik"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Gulung Turun"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Gulung Tampilan Naik"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Gulung Tampilan Turun"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Tampilan Dokumen"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Ke halaman:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Akhir presentasi. Klik untuk keluar."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Menuju halaman pertama"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Menuju halaman sebelumnya"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Menuju halaman selanjutnya"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Menuju halaman terakhir"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Ke halaman"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Cari"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Menuju halaman %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Menuju %s pada berkas “%s”"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Menuju berkas “%s”"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Luncurkan %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Cari:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5445
+msgid "Find Pre_vious"
+msgstr "Cari _Sebelumnya"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Menuju string yang ditemukan sebelumnya"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5443
+msgid "Find Ne_xt"
+msgstr "_Cari Selanjutnya"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Menuju string yang ditemukan sebelumnya"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Sesuai Bes_ar/Kecil Huruf"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Mencari dengan menyesuaikan besar atau kecilnya huruf"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Ikon:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Catatan"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Komentar"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Kunci"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Bantuan"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Paragraf Baru"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Paragraf"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Sisipkan"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Silang"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Lingkaran"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Tidak diketahui"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Preperti Anotasi"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Warna:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Gaya:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Transparan"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Legap"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Keadaan awal jendela:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Buka"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Tutup"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Berjalan dalam mode presentasi"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Sandi untuk dokumen %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Mengonversi %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d dari %d dokumen telah dikonversi"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Mengonversi metadata"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Bentuk metadata yang dipakai oleh Evince telah berubah, sehingga perlu "
+"dimigrasikan. Bila migrasi dibatalkan maka penyimpanan metadata tak akan "
+"bekerja."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Membuka dokumen yang akhir-akhir ini dipakai"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "Dokumen ini dalam keadaan terkunci dan harus dibuka dengan sandi."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "B_uka Kunci Dokumen"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Masukkan sandi"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Memerlukan sandi"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "Dokumen \"%s\" dalam keadaan terkunci dan harus dibuka dengan sandi."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Sandi:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Lupakan sandi seket_ika"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Ingat sandi sampai Anda _log keluar"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Ingat sela_manya"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Properti"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Umum"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Fonta"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Lisensi Dokumen"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Fonta"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Mengumpulkan informasi fonta... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Persyaratan penggunaan"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Lisensi Teks"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Informasi Lebih Lanjut"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Daftar"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Anotasi"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Teks"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Tambah anotasi teks"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Tambah"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Dokumen tak memuat anotasi"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Halaman %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Lampiran"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Lapisan"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Cetak..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Indeks"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Miniatur"
+
+#: ../shell/ev-window.c:874
+#, c-format
+msgid "Page %s — %s"
+msgstr "Halaman %s — %s"
+
+#: ../shell/ev-window.c:876
+#, c-format
+msgid "Page %s"
+msgstr "Halaman %s"
+
+#: ../shell/ev-window.c:1435
+msgid "The document contains no pages"
+msgstr "Dokumen tak memuat halaman"
+
+#: ../shell/ev-window.c:1438
+msgid "The document contains only empty pages"
+msgstr "Dokumen hanya memuat halaman kosong"
+
+#: ../shell/ev-window.c:1640 ../shell/ev-window.c:1806
+msgid "Unable to open document"
+msgstr "Tidak dapat membuka dokumen"
+
+#: ../shell/ev-window.c:1777
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Memuat dokumen dari “%s”"
+
+#: ../shell/ev-window.c:1919 ../shell/ev-window.c:2198
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Mengunduh dokumen (%d%%)"
+
+#: ../shell/ev-window.c:1952
+msgid "Failed to load remote file."
+msgstr "Gagal memuat berkas jauh."
+
+#: ../shell/ev-window.c:2142
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Memuat ulang dokumen dari %s"
+
+#: ../shell/ev-window.c:2174
+msgid "Failed to reload document."
+msgstr "Gagal memuat ulang dokumen."
+
+#: ../shell/ev-window.c:2329
+msgid "Open Document"
+msgstr "Buka Dokumen"
+
+#: ../shell/ev-window.c:2627
+#, c-format
+msgid "Saving document to %s"
+msgstr "Menyimpan dokumen ke %s"
+
+#: ../shell/ev-window.c:2630
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Menyimpan lampiran ke %s"
+
+#: ../shell/ev-window.c:2633
+#, c-format
+msgid "Saving image to %s"
+msgstr "Menyimpan gambar ke %s"
+
+#: ../shell/ev-window.c:2677 ../shell/ev-window.c:2777
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Berkas tidak dapat disimpan sebagai “%s”."
+
+#: ../shell/ev-window.c:2708
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Mengunggah dokumen (%d%%)"
+
+#: ../shell/ev-window.c:2712
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Mengunggah lampiran (%d%%)"
+
+#: ../shell/ev-window.c:2716
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Mengunggah gambar (%d%%)"
+
+#: ../shell/ev-window.c:2840
+msgid "Save a Copy"
+msgstr "Simpan Salinan"
+
+#: ../shell/ev-window.c:3125
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d tugas tertunda di antrian"
+
+#: ../shell/ev-window.c:3238
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Tugas mencetak “%s”"
+
+#: ../shell/ev-window.c:3416
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Dokumen memuat ruas blanko yang telah diisi. Bila Anda tidak menyimpan "
+"salinan, perubahan akan hilang seterusnya."
+
+#: ../shell/ev-window.c:3420
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Dokumen memuat anotasi baru atau yang diubah. Bila Anda tidak menyimpan "
+"salinan, perubahan akan hilang seterusnya."
+
+#: ../shell/ev-window.c:3427
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Simpan salinan dokumen \"%s\" sebelum menutup?"
+
+#: ../shell/ev-window.c:3446
+msgid "Close _without Saving"
+msgstr "Tutup _tanpa Menyimpan"
+
+#: ../shell/ev-window.c:3450
+msgid "Save a _Copy"
+msgstr "Simpan _Salinan"
+
+#: ../shell/ev-window.c:3524
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Tunggu sampai tugas pencetakan \"%s\" selesai sebelum menutup?"
+
+#: ../shell/ev-window.c:3527
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Ada %d tugas pencetakan aktif. Tunggu sampai pencetakan selesai sebelum "
+"menutup?"
+
+#: ../shell/ev-window.c:3539
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Bila Anda menutup jendela, tugas cetak yang ditunda tak akan dicetak."
+
+#: ../shell/ev-window.c:3543
+msgid "Cancel _print and Close"
+msgstr "Batal _Mencetak dan Keluar"
+
+#: ../shell/ev-window.c:3547
+msgid "Close _after Printing"
+msgstr "Tutup setel_ah Mencetak"
+
+#: ../shell/ev-window.c:4167
+msgid "Toolbar Editor"
+msgstr "Penyunting Bilah Alat"
+
+#: ../shell/ev-window.c:4334
+msgid "There was an error displaying help"
+msgstr "Terjadi galat sewaktu menampilkan bantuan"
+
+#: ../shell/ev-window.c:4546
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Penampil Dokumen.\n"
+"Menggunakan %s (%s)"
+
+#: ../shell/ev-window.c:4577
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince adalah perangkat lunak bebas; Anda dapat mendistribusikan ulang dan/"
+"atau mengubahnya di bawah ketentuan GNU General Public License sebagaimana "
+"dipublikasikan oleh Free Software Foundation; Lisensi versi 2, atau (sesuai "
+"pilihan Anda) menggunakan versi selanjutnya.\n"
+
+#: ../shell/ev-window.c:4581
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince didistribusikan dengan harapan dapat berguna, tetapi TANPA ADANYA "
+"JAMINAN; termasuk tanpa jaminan DAYA JUAL atau KELAIKAN UNTUK TUJUAN "
+"TERTENTU. Lihat GNU General Public License untuk rincian lebih lanjut.\n"
+
+#: ../shell/ev-window.c:4585
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Anda seharusnya menerima salinan dari GNU General Public License bersama "
+"Evince; jika tidak, kirimkan surat Anda ke Free Software Foundation, Inc., "
+"51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n"
+
+#: ../shell/ev-window.c:4610
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4613
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Para penulis Evince"
+
+#: ../shell/ev-window.c:4619
+msgid "translator-credits"
+msgstr ""
+"Mohammad DAMT <[email protected]>.\n"
+"Ahmad Riza H Nst <[email protected]>.\n"
+"Andika Triwidada <[email protected]>, 2009, 2010.\n"
+"Dirgita <[email protected]>, 2010."
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4885
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "ditemukan %d pada halaman ini"
+
+#: ../shell/ev-window.c:4890
+msgid "Not found"
+msgstr "Tak ditemukan"
+
+#: ../shell/ev-window.c:4896
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% lagi dalam pencarian"
+
+#: ../shell/ev-window.c:5411
+msgid "_File"
+msgstr "_Berkas"
+
+#: ../shell/ev-window.c:5412
+msgid "_Edit"
+msgstr "_Sunting"
+
+#: ../shell/ev-window.c:5413
+msgid "_View"
+msgstr "_Tampilan"
+
+#: ../shell/ev-window.c:5414
+msgid "_Go"
+msgstr "_Ke"
+
+#: ../shell/ev-window.c:5415
+msgid "_Help"
+msgstr "Ba_ntuan"
+
+#. File menu
+#: ../shell/ev-window.c:5418 ../shell/ev-window.c:5719
+msgid "_Open…"
+msgstr "_Buka…"
+
+#: ../shell/ev-window.c:5419 ../shell/ev-window.c:5720
+msgid "Open an existing document"
+msgstr "Membuka dokumen"
+
+#: ../shell/ev-window.c:5421
+msgid "Op_en a Copy"
+msgstr "_Buka Salinan"
+
+#: ../shell/ev-window.c:5422
+msgid "Open a copy of the current document in a new window"
+msgstr "Membuka salinan dokumen yang sedang aktif pada jendela baru"
+
+#: ../shell/ev-window.c:5424
+msgid "_Save a Copy…"
+msgstr "_Simpan Salinan…"
+
+#: ../shell/ev-window.c:5425
+msgid "Save a copy of the current document"
+msgstr "Menyimpan salinan dokumen yang sedang aktif"
+
+#: ../shell/ev-window.c:5427
+msgid "_Print…"
+msgstr "_Cetak…"
+
+#: ../shell/ev-window.c:5430
+msgid "P_roperties"
+msgstr "P_roperti"
+
+#: ../shell/ev-window.c:5438
+msgid "Select _All"
+msgstr "Pilih Semu_a"
+
+#: ../shell/ev-window.c:5440
+msgid "_Find…"
+msgstr "_Cari…"
+
+#: ../shell/ev-window.c:5441
+msgid "Find a word or phrase in the document"
+msgstr "Mencari kata atau frasa dalam dokumen"
+
+#: ../shell/ev-window.c:5447
+msgid "T_oolbar"
+msgstr "_Bilah Alat"
+
+#: ../shell/ev-window.c:5449
+msgid "Rotate _Left"
+msgstr "Putar _Kiri"
+
+#: ../shell/ev-window.c:5451
+msgid "Rotate _Right"
+msgstr "_Putar Kanan"
+
+#: ../shell/ev-window.c:5453
+msgid "Save Current Settings as _Default"
+msgstr "Simpan Setelan Kini sebagai _Bawaan"
+
+#: ../shell/ev-window.c:5464
+msgid "_Reload"
+msgstr "_Muat Ulang"
+
+#: ../shell/ev-window.c:5465
+msgid "Reload the document"
+msgstr "Memuat ulang dokumen"
+
+#: ../shell/ev-window.c:5468
+msgid "Auto_scroll"
+msgstr "Menggulung Otomati_s"
+
+#: ../shell/ev-window.c:5478
+msgid "_First Page"
+msgstr "Halaman _Pertama"
+
+#: ../shell/ev-window.c:5479
+msgid "Go to the first page"
+msgstr "Menuju halaman pertama"
+
+#: ../shell/ev-window.c:5481
+msgid "_Last Page"
+msgstr "Halaman _Terakhir"
+
+#: ../shell/ev-window.c:5482
+msgid "Go to the last page"
+msgstr "Menuju halaman terakhir"
+
+#. Help menu
+#: ../shell/ev-window.c:5486
+msgid "_Contents"
+msgstr "_Isi"
+
+#: ../shell/ev-window.c:5489
+msgid "_About"
+msgstr "Tent_ang"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5493
+msgid "Leave Fullscreen"
+msgstr "Keluar dari Layar Penuh"
+
+#: ../shell/ev-window.c:5494
+msgid "Leave fullscreen mode"
+msgstr "Meninggalkan mode layar penuh"
+
+#: ../shell/ev-window.c:5496
+msgid "Start Presentation"
+msgstr "Mulai Presentasi"
+
+#: ../shell/ev-window.c:5497
+msgid "Start a presentation"
+msgstr "Memulai presentasi"
+
+#. View Menu
+#: ../shell/ev-window.c:5556
+msgid "_Toolbar"
+msgstr "Bilah Ala_t"
+
+#: ../shell/ev-window.c:5557
+msgid "Show or hide the toolbar"
+msgstr "Menampilkan atau menyembunyikan bilah alat"
+
+#: ../shell/ev-window.c:5559
+msgid "Side _Pane"
+msgstr "_Panel Samping"
+
+#: ../shell/ev-window.c:5560
+msgid "Show or hide the side pane"
+msgstr "Menampilkan atau menyembunyikan panel samping"
+
+#: ../shell/ev-window.c:5562
+msgid "_Continuous"
+msgstr "Berkelanju_tan"
+
+#: ../shell/ev-window.c:5563
+msgid "Show the entire document"
+msgstr "Menampilkan seluruh isi dokumen"
+
+#: ../shell/ev-window.c:5565
+msgid "_Dual"
+msgstr "Gan_da"
+
+#: ../shell/ev-window.c:5566
+msgid "Show two pages at once"
+msgstr "Menampilkan dua halaman sekaligus"
+
+#: ../shell/ev-window.c:5568
+msgid "_Fullscreen"
+msgstr "Layar _Penuh"
+
+#: ../shell/ev-window.c:5569
+msgid "Expand the window to fill the screen"
+msgstr "Membuka jendela hingga memenuhi layar"
+
+#: ../shell/ev-window.c:5571
+msgid "Pre_sentation"
+msgstr "Pre_sentasi"
+
+#: ../shell/ev-window.c:5572
+msgid "Run document as a presentation"
+msgstr "Jalankan dokumen sebagai suatu presentasi"
+
+#: ../shell/ev-window.c:5580
+msgid "_Inverted Colors"
+msgstr "Warna Terbal_ik"
+
+#: ../shell/ev-window.c:5581
+msgid "Show page contents with the colors inverted"
+msgstr "Menampilkan isi halaman dengan warna yang terbalik"
+
+#. Links
+#: ../shell/ev-window.c:5589
+msgid "_Open Link"
+msgstr "_Buka Taut"
+
+#: ../shell/ev-window.c:5591
+msgid "_Go To"
+msgstr "_Ke"
+
+#: ../shell/ev-window.c:5593
+msgid "Open in New _Window"
+msgstr "Buka di Jendela _Baru"
+
+#: ../shell/ev-window.c:5595
+msgid "_Copy Link Address"
+msgstr "Salin _Alamat Taut"
+
+#: ../shell/ev-window.c:5597
+msgid "_Save Image As…"
+msgstr "_Simpan Gambar Sebagai…"
+
+#: ../shell/ev-window.c:5599
+msgid "Copy _Image"
+msgstr "Sal_in Gambar"
+
+#: ../shell/ev-window.c:5601
+msgid "Annotation Properties…"
+msgstr "Properti Anotasi…"
+
+#: ../shell/ev-window.c:5606
+msgid "_Open Attachment"
+msgstr "_Buka Lampiran"
+
+#: ../shell/ev-window.c:5608
+msgid "_Save Attachment As…"
+msgstr "_Simpan Lampiran Sebagai…"
+
+#: ../shell/ev-window.c:5693
+msgid "Zoom"
+msgstr "Zum"
+
+#: ../shell/ev-window.c:5695
+msgid "Adjust the zoom level"
+msgstr "Atur tingkat perbesaran"
+
+#: ../shell/ev-window.c:5705
+msgid "Navigation"
+msgstr "Navigasi"
+
+#: ../shell/ev-window.c:5707
+msgid "Back"
+msgstr "Mundur"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5710
+msgid "Move across visited pages"
+msgstr "Pindahkan melintasi halaman yang telah dikunjungi"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5740
+msgid "Previous"
+msgstr "Sebelumnya"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Next"
+msgstr "Selanjutnya"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5749
+msgid "Zoom In"
+msgstr "Perbesar Tampilan"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5753
+msgid "Zoom Out"
+msgstr "Perkecil Tampilan"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5761
+msgid "Fit Width"
+msgstr "Selebar Halaman"
+
+#: ../shell/ev-window.c:5906 ../shell/ev-window.c:5923
+msgid "Unable to launch external application."
+msgstr "Tidak dapat meluncurkan aplikasi luar"
+
+#: ../shell/ev-window.c:5980
+msgid "Unable to open external link"
+msgstr "Tidak dapat membuka taut luar"
+
+#: ../shell/ev-window.c:6147
+msgid "Couldn't find appropriate format to save image"
+msgstr "Tidak menemukan format yang cocok untuk menyimpan gambar"
+
+#: ../shell/ev-window.c:6189
+msgid "The image could not be saved."
+msgstr "Gambar tidak dapat disimpan."
+
+#: ../shell/ev-window.c:6221
+msgid "Save Image"
+msgstr "Simpan Gambar"
+
+#: ../shell/ev-window.c:6349
+msgid "Unable to open attachment"
+msgstr "Tidak dapat membuka lampiran"
+
+#: ../shell/ev-window.c:6402
+msgid "The attachment could not be saved."
+msgstr "Lampiran tidak dapat disimpan."
+
+#: ../shell/ev-window.c:6447
+msgid "Save Attachment"
+msgstr "Simpan Lampiran"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Memerlukan Sandi"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Berdasarkan ekstensi"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Penampil Dokumen MATE"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Label halaman dari dokumen yang ingin ditampilkan."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "HALAMAN"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Nomor halaman dari dokumen yang ingin ditampilkan."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NOMOR"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Menjalankan evince dalam mode layar penuh"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Menjalankan evince dalam mode presentasi"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Menjalankan evince sebagai pemratinjau"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Kata atau frasa yang akan dicari dalam dokumen"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[BERKAS…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Opsi yang tersedia: \"true\" akan mengaktifkan pembuatan miniatur dan \"false"
+"\" akan menonaktifkannya"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Mengaktifkan miniaturisasi Dokumen PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Perintah pembuatan miniatur untuk Dokumen PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Perintah yang sah ditambah argumen untuk pembuat miniatur Dokumen PDF. "
+"Lihatlah dokumentasi pembuat miniatur Caja untuk keterangan lebih lanjut."
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 00000000..40c63785
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,1742 @@
+# Italian translations of Evince package.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 the Evince'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the Evince package.
+# Francesco Marletta <[email protected]>, 2005, 2006, 2007, 2008, 2009, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Evince 2.32\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-09-20 12:57+0000\n"
+"PO-Revision-Date: 2010-09-20 15:27+0200\n"
+"Last-Translator: Francesco Marletta <[email protected]>\n"
+"Language-Team: Italian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Errore nel lanciare il comando \"%s\" per decomprimere il fumetto: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Il comando \"%s\" non è stato in grado di decomprimere il fumetto."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Il comando \"%s\" non è terminato normalmente."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Non è un tipo MIME di fumetti: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Impossibile trovare un comando appropriato per decomprimere questo tipo di "
+"fumetto"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Tipo MIME sconosciuto"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "File danneggiato"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Nessun file nell'archivio"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Nessuna immagine trovata nell'archivio %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Si è verificato un errore nell'eliminare \"%s\"."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Errore %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Fumetti"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "Il documento DjVu ha un formato non corretto"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Il documento è composto da diversi file. Non è possibile accedere a uno o "
+"più di tali file."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Documenti DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Il documento DVI ha un formato non corretto"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Documenti DVI"
+
+# [NdT] ho messo di proposito le iniziali maiuscole
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Questo lavoro è nel Pubblico Dominio"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Sì"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "No"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Tipo di carattere sconosciuto"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Nessun nome"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Sottoinsieme incorporato"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Incorporato"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Non incorporato"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Documenti PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Documento non valido"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Presentazioni Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Nessun errore"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Memoria non sufficiente"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Impossibile trovare la firma ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "File ZIP non valido"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "I file ZIP multipli non sono supportati"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Impossibile aprire il file"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Impossibile leggere i dati dal file"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Impossibile trovare il file nell'archivio ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Errore sconosciuto"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Caricamento del documento \"%s\" fallito"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Salvataggio del documento \"%s\" fallito"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Documenti PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Impossibile salvare l'allegato \"%s\": %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Impossibile aprire l'allegato \"%s\": %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Impossibile aprire l'allegato \"%s\""
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Il tipo di file %s (%s) non è supportato"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Tutti i documenti"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Tutti i file"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Fallimento nel creare un file temporaneo: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Fallimento nel creare una directory temporanea: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Il file non è un file .desktop valido"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Versione \"%s\" del file .desktop non riconosciuta"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Avvio di %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "L'applicazione non accetta documenti sulla riga di comando"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Opzione di lancio non riconosciuta: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"Impossibile passare URI di documenti a un elemento desktop con \"Type=Link\""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Non è un oggetto lanciabile"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Disabilita la connessione al gestore sessioni"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Specifica il file contenente la configurazione salvata"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Specifica l'ID di gestione della sessione"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opzioni di gestione sessione:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Mostra le opzioni di gestione della sessione"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Mostra \"_%s\""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Muovi nella barra strumenti"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Muove l'elemento selezionato nella barra strumenti"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Rimuovi dalla barra strumenti"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Rimuove l'elemento selezionato dalla barra strumenti"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Elimina barra strumenti"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Rimuove la barra strumenti selezionata"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Separatore"
+
+# NdT: è l'etichetta del pulsante per adattare alla pagina e per
+# uniformità con quanto già fatto con GGV ho messo "Pagina"
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5761
+msgid "Best Fit"
+msgstr "Pagina"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Larghezza"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4554
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Visualizzatore documenti"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Visualizza documenti multi-pagina"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Scavalca restrizioni documento"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Scavalca le restrizioni del documento, come la restrizione di copiare o di "
+"stampare."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Elimina il file temporaneo"
+
+# [NdT] oppure "Stampa il file con le impostazioni" ??
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "File con impostazioni di stampa"
+
+# [NdT] Lascio visualizzatore anche per Previewer
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Anteprima documenti di MATE"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3185
+msgid "Failed to print document"
+msgstr "Stampa del documento fallita"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "La stampante selezionata \"%s\" non può essere trovata"
+
+# acceleratore come da linee guida
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5476
+msgid "_Previous Page"
+msgstr "Pagina pr_ecedente"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5477
+msgid "Go to the previous page"
+msgstr "Va alla pagina precedente"
+
+# acceleratore come da linee guida
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5479
+msgid "_Next Page"
+msgstr "Pagina s_uccessiva"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5480
+msgid "Go to the next page"
+msgstr "Va alla pagina successiva"
+
+# [NdT] ho preferito così ad "Allarga", si abbina meglio con il mess dopo,
+# nel quale non mi andava di mettere "stringe" (anche se è la
+# traduzione di shrink)
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5463
+msgid "Enlarge the document"
+msgstr "Ingrandisce il documento"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5466
+msgid "Shrink the document"
+msgstr "Rimpicciolisce il documento"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Stampa"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5432
+msgid "Print this document"
+msgstr "Stampa questo documento"
+
+# NdT: è l'etichetta del pulsante per adattare alla pagina e per
+# uniformità con quanto già fatto con GGV ho messo "Pagina"
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5578
+msgid "_Best Fit"
+msgstr "_Adatta alla pagina"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5579
+msgid "Make the current document fill the window"
+msgstr "Porta il documento attuale a riempire la finestra"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5581
+msgid "Fit Page _Width"
+msgstr "Adatta alla _larghezza"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5582
+msgid "Make the current document fill the window width"
+msgstr "Porta il documento attuale a riempire la finestra in larghezza"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5683
+msgid "Page"
+msgstr "Pagina"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5684
+msgid "Select Page"
+msgstr "Seleziona la pagina"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Documento"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Titolo:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Posizione:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Oggetto:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Autore:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Parole chiave:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Produttore:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Creatore:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Creato il:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Modificato il:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Numero di pagine:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Ottimizzato:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Formato:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Sicurezza:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Dimensione carta:"
+
+# [NdT] si riferisce a "Sicurezza"
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Nessuna"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+# [NdT] qui siamo stati precursori :-)
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f pollici"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, verticale (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, orizzontale (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d di %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "di %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Caricamento…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Preparazione alla stampa…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Chiusura…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Stampa della pagina %d di %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "La stampa su questa stampante non è supportata."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Selezione di pagine non valida"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Attenzione"
+
+# [NdT] qui c'è stata solo una correzione marginale nell'originale
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "L'intervallo di stampa selezionato non contiene alcuna pagina"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Scala pagina:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Riduci all'area stampabile"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Adatta all'area stampabile"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Scala le pagine del documento fino a riempire l'area di stampa selezionata. "
+"Selezionare uno dei seguenti:\n"
+"\n"
+"• \"Nessuna\": non viene eseguita alcuna scalatura della pagina.\n"
+"\n"
+"• \"Riduci all'area stampabile\": le pagine del documento più grandi "
+"dell'area di stampa sono ridotte per riempire l'area stampabile della pagina "
+"di stampa.\n"
+"\n"
+"• \"Adatta all'area stampabile\": le pagine del documento sono ingrandite o "
+"ridotte alla bisogna per riempire l'area stampabile della pagina di stampa.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Ruotare e centrare automaticamente"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Ruota l'orientamento della pagina di stampa per farlo corrispondere "
+"all'orientamento di ogni pagina del documento. Le pagine del documento "
+"verranno centrate nella pagina di stampa."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr ""
+"Selezionare la dimensione della pagina usando la dimensione della pagina del "
+"documento"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Quando abilitata, ogni pagina verrà stampata usando la stessa dimensione "
+"della pagina nel documento."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Gestione pagina"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Fallita la stampa della pagina %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Scorri su"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Scorri giù"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Scorre la vista in su"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Scorre la vista in giù"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Vista documento"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Salta alla pagina:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Fine della presentazione. Fare clic per uscire."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Va alla prima pagina"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Va alla pagina precedente"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Va alla pagina successiva"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Va all'ultima pagina"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Va alla pagina"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Trova"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Va a pagina %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Va a %s nel file \"%s\""
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Va al file \"%s\""
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Lancia %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Trova:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5449
+msgid "Find Pre_vious"
+msgstr "Trova pr_ecedente"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Trova la precedente occorrenza della stringa di ricerca"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5447
+msgid "Find Ne_xt"
+msgstr "Trova s_uccessivo"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Trova la successiva occorrenza della stringa di ricerca"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "M_aiuscole/minuscole"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Commuta la ricerca sensibile alle maiuscole"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Icona:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Nota"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Commento"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Chiave"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Aiuto"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Nuovo paragrafo"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Paragrafo"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Inserisci"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Croce"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Cerchio"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Sconosciuto"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Proprietà annotazione"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Colore:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Stile:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Trasparente"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Opaco"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Stato iniziale della finestra:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Apri"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Chiudi"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Esecuzione in modalità presentazione"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Password per il documento %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Conversione di %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d documenti su %d convertiti"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Conversione dei metadati"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Il formato dei metadati usati da Evince è cambiato, per cui è necessario "
+"migrare i quelli esistenti. Se la migrazione viene annullata, la "
+"memorizzazione dei metadati non funzionerà."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Apre un documento usato di recente"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Questo documento è bloccato e può essere letto solo inserendo la password "
+"corretta."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Sblocca documento"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Inserire password"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Password richiesta"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"Il documento \"%s\" è bloccato e richiede una password per essere aperto."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "Pass_word:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Dimentica la password _immediatamente"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Ricorda la password fino al _termine della sessione"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Ricorda per _sempre"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Proprietà"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Generale"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Tipi di carattere"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Licenza del documento"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Tipo di carattere"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Raccolta informazioni sul tipo di carattere… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Termini d'uso"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Testo della licenza"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Ulteriori informazioni"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Elenco"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Annotazioni"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Testo"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Aggiunge un'annotazione testuale"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Aggiungi"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Il documento non contiene annotazioni"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Pagina %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Allegati"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Livelli"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Stampa…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Indice"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Miniature"
+
+#: ../shell/ev-window.c:875
+#, c-format
+msgid "Page %s — %s"
+msgstr "Pagina %s — %s"
+
+#: ../shell/ev-window.c:877
+#, c-format
+msgid "Page %s"
+msgstr "Pagina %s"
+
+#: ../shell/ev-window.c:1436
+msgid "The document contains no pages"
+msgstr "Il documento non contiene pagine"
+
+#: ../shell/ev-window.c:1439
+msgid "The document contains only empty pages"
+msgstr "Il documento contiene solo pagine vuote"
+
+#: ../shell/ev-window.c:1644 ../shell/ev-window.c:1810
+msgid "Unable to open document"
+msgstr "Impossibile aprire il documento"
+
+#: ../shell/ev-window.c:1781
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Caricamento del documento da \"%s\""
+
+#: ../shell/ev-window.c:1923 ../shell/ev-window.c:2202
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Scaricamento del documento (%d%%)"
+
+#: ../shell/ev-window.c:1956
+msgid "Failed to load remote file."
+msgstr "Fallimento nel caricare il file remoto."
+
+#: ../shell/ev-window.c:2146
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Aggiornamento del documento da %s"
+
+#: ../shell/ev-window.c:2178
+msgid "Failed to reload document."
+msgstr "Fallimento nell'aggiornare il documento."
+
+# titolo di dialogo
+#: ../shell/ev-window.c:2333
+msgid "Open Document"
+msgstr "Apri documento"
+
+#: ../shell/ev-window.c:2631
+#, c-format
+msgid "Saving document to %s"
+msgstr "Salvataggio del documento in %s"
+
+#: ../shell/ev-window.c:2634
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Salvataggio dell'allegato in %s"
+
+#: ../shell/ev-window.c:2637
+#, c-format
+msgid "Saving image to %s"
+msgstr "Salvataggio dell'immagine in %s"
+
+#: ../shell/ev-window.c:2681 ../shell/ev-window.c:2781
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Il file non può essere salvato come \"%s\"."
+
+#: ../shell/ev-window.c:2712
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Caricamento documento (%d%%)"
+
+#: ../shell/ev-window.c:2716
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Caricamento allegato (%d%%)"
+
+#: ../shell/ev-window.c:2720
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Caricamento immagine (%d%%)"
+
+#: ../shell/ev-window.c:2844
+msgid "Save a Copy"
+msgstr "Salva una copia"
+
+#: ../shell/ev-window.c:3129
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d lavoro in attesa di essere stampato"
+msgstr[1] "%d lavori in attesa di essere stampati"
+
+#: ../shell/ev-window.c:3242
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Stampa del lavoro \"%s\""
+
+#: ../shell/ev-window.c:3420
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Il documento contiene dei campi che sono stati compilati. Se non si salva "
+"una copia del documento, le modifiche verranno persi per sempre."
+
+#: ../shell/ev-window.c:3424
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Il documento contiene annotazioni nuove o modificate. Se non si salva una "
+"copia del documento, le modifiche verranno persi per sempre."
+
+#: ../shell/ev-window.c:3431
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Salvare una copia del documento \"%s\" prima della chiusura?"
+
+#: ../shell/ev-window.c:3450
+msgid "Close _without Saving"
+msgstr "Chiudi senza sal_vare"
+
+#: ../shell/ev-window.c:3454
+msgid "Save a _Copy"
+msgstr "Salva una _copia"
+
+#: ../shell/ev-window.c:3528
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Attendere la fine del lavoro di stampa \"%s\" prima di chiudere?"
+
+#: ../shell/ev-window.c:3531
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Ci sono %d lavori di stampa attivi. Attendere la fine delle stampe prima di "
+"chiudere?"
+
+#: ../shell/ev-window.c:3543
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Chiudendo la finestra, i lavori di stampa in attesa non verranno stampati."
+
+#: ../shell/ev-window.c:3547
+msgid "Cancel _print and Close"
+msgstr "Annulla stam_pa e chiudi"
+
+#: ../shell/ev-window.c:3551
+msgid "Close _after Printing"
+msgstr "Chiudi _dopo la stampa"
+
+#: ../shell/ev-window.c:4171
+msgid "Toolbar Editor"
+msgstr "Modifica barra strumenti"
+
+#: ../shell/ev-window.c:4338
+msgid "There was an error displaying help"
+msgstr "Si è verificato un errore durante la visualizzazione della guida"
+
+#: ../shell/ev-window.c:4550
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Visualizzatore documenti.\n"
+"Utilizza %s (%s)."
+
+# [ndT] ho cambiato apposta la punteggiatura
+#: ../shell/ev-window.c:4581
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince è software libero: è possibile redistribuirlo o modificarlo sotto i "
+"termini della licenza GNU GPL, pubblicata dalla Free Software Foundation, "
+"versione 2 o (a propria scelta) successiva.\n"
+
+#: ../shell/ev-window.c:4585
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince è distribuito nella speranza che sia utile, ma SENZA ALCUNA GARANZIA, "
+"senza neppure l'implicita garanzia di COMMERCIABILITÀ o IDONEITÀ A UNO SCOPO "
+"PARTICOLARE. Consultare la licenza GNU GPL per maggiori dettagli.\n"
+
+#: ../shell/ev-window.c:4589
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Insieme a Evince dovrebbe essere stata fornita anche una copia della licenza "
+"GNU GPL, in caso contrario è possibile richiederla scrivendo a: Free "
+"Software Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-"
+"1301 USA\n"
+
+#: ../shell/ev-window.c:4614
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4617
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 gli autori di Evince"
+
+#: ../shell/ev-window.c:4623
+msgid "translator-credits"
+msgstr "Francesco Marletta, <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4889
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d corrispondenza in questa pagina"
+msgstr[1] "%d corrispondenze in questa pagina"
+
+#: ../shell/ev-window.c:4894
+msgid "Not found"
+msgstr "Non trovata"
+
+#: ../shell/ev-window.c:4900
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% rimanente da cercare"
+
+#: ../shell/ev-window.c:5415
+msgid "_File"
+msgstr "_File"
+
+#: ../shell/ev-window.c:5416
+msgid "_Edit"
+msgstr "_Modifica"
+
+#: ../shell/ev-window.c:5417
+msgid "_View"
+msgstr "_Visualizza"
+
+#: ../shell/ev-window.c:5418
+msgid "_Go"
+msgstr "V_ai"
+
+#: ../shell/ev-window.c:5419
+msgid "_Help"
+msgstr "A_iuto"
+
+#. File menu
+#: ../shell/ev-window.c:5422 ../shell/ev-window.c:5723
+msgid "_Open…"
+msgstr "_Apri…"
+
+#: ../shell/ev-window.c:5423 ../shell/ev-window.c:5724
+msgid "Open an existing document"
+msgstr "Apre un documento esistente"
+
+#: ../shell/ev-window.c:5425
+msgid "Op_en a Copy"
+msgstr "Apri una c_opia"
+
+#: ../shell/ev-window.c:5426
+msgid "Open a copy of the current document in a new window"
+msgstr "Apre una copia del documento attuale in una nuova finestra"
+
+#: ../shell/ev-window.c:5428
+msgid "_Save a Copy…"
+msgstr "_Salva una copia…"
+
+#: ../shell/ev-window.c:5429
+msgid "Save a copy of the current document"
+msgstr "Salva una copia del documento attuale"
+
+#: ../shell/ev-window.c:5431
+msgid "_Print…"
+msgstr "Stam_pa…"
+
+#: ../shell/ev-window.c:5434
+msgid "P_roperties"
+msgstr "Pr_oprietà"
+
+#: ../shell/ev-window.c:5442
+msgid "Select _All"
+msgstr "_Seleziona tutto"
+
+#: ../shell/ev-window.c:5444
+msgid "_Find…"
+msgstr "Tr_ova…"
+
+#: ../shell/ev-window.c:5445
+msgid "Find a word or phrase in the document"
+msgstr "Trova una parola o frase nel documento"
+
+# Questo è quello che appare in Modifica
+# cambiato acceleratore per collisione (Seleziona tutto)
+#: ../shell/ev-window.c:5451
+msgid "T_oolbar"
+msgstr "_Barra degli strumenti"
+
+# cambiato acceleratore per collision
+#: ../shell/ev-window.c:5453
+msgid "Rotate _Left"
+msgstr "_Ruota a sinistra"
+
+#: ../shell/ev-window.c:5455
+msgid "Rotate _Right"
+msgstr "Ruota a _destra"
+
+#: ../shell/ev-window.c:5457
+msgid "Save Current Settings as _Default"
+msgstr "Salva impostazioni attuali come _predefinite"
+
+#: ../shell/ev-window.c:5468
+msgid "_Reload"
+msgstr "_Ricarica"
+
+#: ../shell/ev-window.c:5469
+msgid "Reload the document"
+msgstr "Ricarica il documento"
+
+#: ../shell/ev-window.c:5472
+msgid "Auto_scroll"
+msgstr "Scorrimento _automatico"
+
+#: ../shell/ev-window.c:5482
+msgid "_First Page"
+msgstr "P_rima pagina"
+
+#: ../shell/ev-window.c:5483
+msgid "Go to the first page"
+msgstr "Va alla prima pagina"
+
+# acceleratore come da linee guida
+#: ../shell/ev-window.c:5485
+msgid "_Last Page"
+msgstr "U_ltima pagina"
+
+#: ../shell/ev-window.c:5486
+msgid "Go to the last page"
+msgstr "Va all'ultima pagina"
+
+#. Help menu
+#: ../shell/ev-window.c:5490
+msgid "_Contents"
+msgstr "_Sommario"
+
+#: ../shell/ev-window.c:5493
+msgid "_About"
+msgstr "I_nformazioni"
+
+# [NdT] come in epiphany
+#. Toolbar-only
+#: ../shell/ev-window.c:5497
+msgid "Leave Fullscreen"
+msgstr "Finestra normale"
+
+#: ../shell/ev-window.c:5498
+msgid "Leave fullscreen mode"
+msgstr "Esce dalla modalità a schermo intero"
+
+#: ../shell/ev-window.c:5500
+msgid "Start Presentation"
+msgstr "Avvia presentazione"
+
+#: ../shell/ev-window.c:5501
+msgid "Start a presentation"
+msgstr "Avvia una presentazione"
+
+#. View Menu
+#: ../shell/ev-window.c:5560
+msgid "_Toolbar"
+msgstr "Barra degli _strumenti"
+
+#: ../shell/ev-window.c:5561
+msgid "Show or hide the toolbar"
+msgstr "Mostra o nasconde la barra degli strumenti"
+
+#: ../shell/ev-window.c:5563
+msgid "Side _Pane"
+msgstr "Riquadro _laterale"
+
+#: ../shell/ev-window.c:5564
+msgid "Show or hide the side pane"
+msgstr "Mostra o nasconde il riquadro laterale"
+
+#: ../shell/ev-window.c:5566
+msgid "_Continuous"
+msgstr "_Continuo"
+
+#: ../shell/ev-window.c:5567
+msgid "Show the entire document"
+msgstr "Mostra tutto il documento"
+
+#: ../shell/ev-window.c:5569
+msgid "_Dual"
+msgstr "_Duale"
+
+#: ../shell/ev-window.c:5570
+msgid "Show two pages at once"
+msgstr "Mostra due pagine alla volta"
+
+#: ../shell/ev-window.c:5572
+msgid "_Fullscreen"
+msgstr "Schermo _intero"
+
+#: ../shell/ev-window.c:5573
+msgid "Expand the window to fill the screen"
+msgstr "Espande la finestra fino a riempire lo schermo"
+
+#: ../shell/ev-window.c:5575
+msgid "Pre_sentation"
+msgstr "_Presentazione"
+
+#: ../shell/ev-window.c:5576
+msgid "Run document as a presentation"
+msgstr "Mostra il documento come una presentazione"
+
+#: ../shell/ev-window.c:5584
+msgid "_Inverted Colors"
+msgstr "Colori _invertiti"
+
+#: ../shell/ev-window.c:5585
+msgid "Show page contents with the colors inverted"
+msgstr "Mostra i contenuti delle pagine con i colori invertiti"
+
+#. Links
+#: ../shell/ev-window.c:5593
+msgid "_Open Link"
+msgstr "_Apri collegamento"
+
+#: ../shell/ev-window.c:5595
+msgid "_Go To"
+msgstr "V_ai a"
+
+#: ../shell/ev-window.c:5597
+msgid "Open in New _Window"
+msgstr "Apri in una nuova _finestra"
+
+#: ../shell/ev-window.c:5599
+msgid "_Copy Link Address"
+msgstr "_Copia indirizzo collegamento"
+
+#: ../shell/ev-window.c:5601
+msgid "_Save Image As…"
+msgstr "_Salva immagine come…"
+
+#: ../shell/ev-window.c:5603
+msgid "Copy _Image"
+msgstr "Copia _immagine"
+
+#: ../shell/ev-window.c:5605
+msgid "Annotation Properties…"
+msgstr "Proprietà annotazione…"
+
+#: ../shell/ev-window.c:5610
+msgid "_Open Attachment"
+msgstr "_Apri allegato"
+
+#: ../shell/ev-window.c:5612
+msgid "_Save Attachment As…"
+msgstr "_Salva allegato come…"
+
+#: ../shell/ev-window.c:5697
+msgid "Zoom"
+msgstr "Ingrandimento"
+
+#: ../shell/ev-window.c:5699
+msgid "Adjust the zoom level"
+msgstr "Regola il livello di ingrandimento"
+
+#: ../shell/ev-window.c:5709
+msgid "Navigation"
+msgstr "Navigazione"
+
+#: ../shell/ev-window.c:5711
+msgid "Back"
+msgstr "Indietro"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5714
+msgid "Move across visited pages"
+msgstr "Gira tra le pagine visitate"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5744
+msgid "Previous"
+msgstr "Precedente"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5749
+msgid "Next"
+msgstr "Successiva"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5753
+msgid "Zoom In"
+msgstr "Aumenta"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5757
+msgid "Zoom Out"
+msgstr "Riduci"
+
+# NdT: è l'etichetta del pulsante per adattare alla pagina e per
+# uniformità con quanto già fatto con GGV ho messo "Larghezza"
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5765
+msgid "Fit Width"
+msgstr "Larghezza"
+
+#: ../shell/ev-window.c:5910 ../shell/ev-window.c:5927
+msgid "Unable to launch external application."
+msgstr "Impossibile lanciare l'applicazione esterna."
+
+#: ../shell/ev-window.c:5984
+msgid "Unable to open external link"
+msgstr "Impossibile aprire il collegamento esterno"
+
+#: ../shell/ev-window.c:6151
+msgid "Couldn't find appropriate format to save image"
+msgstr "Impossibile trovare un formato appropriato per salvare l'immagine"
+
+#: ../shell/ev-window.c:6193
+msgid "The image could not be saved."
+msgstr "L'immagine non può essere salvata."
+
+#: ../shell/ev-window.c:6225
+msgid "Save Image"
+msgstr "Salva immagine"
+
+#: ../shell/ev-window.c:6353
+msgid "Unable to open attachment"
+msgstr "Impossibile aprire l'allegato"
+
+#: ../shell/ev-window.c:6406
+msgid "The attachment could not be saved."
+msgstr "L'allegato non può essere salvato."
+
+#: ../shell/ev-window.c:6451
+msgid "Save Attachment"
+msgstr "Salva allegato"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Richiesta password"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Per estensione"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Visualizzatore documenti di MATE"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "L'etichetta della pagina del documento da visualizzare."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "PAGINA"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Il numero di pagina del documento da visualizzare."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMERO"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Esegue evince in modalità schermo intero"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Esegue evince in modalità presentazione"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Esegue evince per vedere l'anteprima di stampa"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "La parola o la frase da trovare nel documento"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "STRINGA"
+
+# [NdT] lo adeguo, anche se non sono molto d'accordo con gli sviluppatori sull'uso di caratteri unicode nel messaggi a riga di comando.
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FILE…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Opzioni booleane disponibili: \"true\" abilita la creazione delle miniature "
+"e \"false\" disabilita la creazione di nuove miniature"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Abilita la miniatura dei documenti PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Comando di miniatura per i documenti PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Un comando valido e gli argomenti per le miniature dei documenti PDF. Per "
+"maggiori informazioni consultare la documentazione relativa alle miniature "
+"di caja."
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 00000000..263b7e98
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,1739 @@
+# Japanese messages catalogue for evince - PS/PDF viewer for MATE
+# Copyright (C) 2005-2010 THE evince's COPYRIGHT HOLDER
+# This file is distributed under the same license as the evince package.
+# Satoru SATOH <[email protected]>, 2005, 2006.
+# Takeshi AIHANA <[email protected]>, 2005-2009.
+# Takayuki KUSANO <[email protected]>, 2009.
+# Shushi Kurose <[email protected]>, 2009-2010.
+# Hideki Yamane (Debian-JP) <[email protected]>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-09-19 16:16+0000\n"
+"PO-Revision-Date: 2010-09-05 15:48+0900\n"
+"Last-Translator: Shushi Kurose <[email protected]>\n"
+"Language-Team: Japanese <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"コミックブックを解凍するためコマンド “%s” を起動する際にエラーが発生しまし"
+"た: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "コミックブックの解凍中にコマンド “%s” が失敗しました。"
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "コマンド “%s” が正常に終了しませんでした。"
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "コミックブックの MIME タイプではありません: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "このタイプのコミックブックを解凍するのに適したコマンドが見つかりません"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "不明な MIME タイプです"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "ファイルが壊れています"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "アーカイブにファイルが含まれていません"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "%s のアーカイブには画像は含まれていません"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "“%s” の削除中にエラーが発生しました。"
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "エラー %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "コミックブック"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu ドキュメントの書式が壊れています"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"そのドキュメントは複数のファイルを結合したものです。それらのファイルは個別に"
+"アクセスすることはできません。"
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Djvu ドキュメント"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI ドキュメントの書式が壊れています"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI ドキュメント"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "この作品はパブリックドメインです"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "はい"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "いいえ"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "不明なフォントの種類です"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "名前なし"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "埋め込みのサブセット"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "埋め込み"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "埋め込みではない"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF ドキュメント"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "不正なドキュメントです"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress のスライド"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "エラーなし"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "メモリが足りません"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "ZIP のシグネチャが見つかりません"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "不正な ZIP ファイルです"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "複数ファイルの ZIP はサポートしていません"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "ファイルを開けません"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "ファイルからデータを読み込めません"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "ZIP アーカイブ中にファイルが見つかりません"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "不明なエラー"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "\"%s\" というドキュメントを読み込めませんでした"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "\"%s\" というドキュメントを保存できませんでした"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript ドキュメント"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "添付ファイル \"%s\" を保存できませんでした: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "添付ファイル \"%s\" を開けませんでした: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "添付ファイル \"%s\" を開けませんでした"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "ファイルタイプ %s (%s) はサポートしていません"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "すべてのドキュメント"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "すべてのファイル"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "一時ファイルの作成に失敗しました: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "一時ディレクトリの作成に失敗しました: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "ファイルは無効な .desktop ファイルです"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "desktop ファイルのバージョン '%s' を認識できません"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s の起動中"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "コマンドラインからドキュメントを指定できません"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "起動オプションが認識できません: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "ドキュメントの URI を 'Type=Link' という desktop エントリに渡せません"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "起動できないアイテムです"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "セッション・マネージャに接続しない"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "設定が保存されているファイルを指定する"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "セッション ID を指定する"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "セッション管理用のオプション:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "セッション管理用のオプションを表示する"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "\"%s\" の表示"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "ツールバー上で移動(_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "選択したアイテムをツールバー上で移動します"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "ツールバーから削除(_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "選択したアイテムをツールバーから削除します"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "ツールバーの削除(_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "選択したツールバーを削除します"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "セパレータ"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5761
+msgid "Best Fit"
+msgstr "全体に合わせる"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "幅に合わせる"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4554
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "ドキュメント・ビューア"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "複数ページのドキュメントを表示します"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "ドキュメントの制限を上書きします"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "コピーや印刷を制限するようなドキュメントの制限を上書きします"
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "一時ファイルを削除"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "プリンタ設定ファイル"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "MATE ドキュメント・プレビューア"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3185
+msgid "Failed to print document"
+msgstr "ドキュメントの印刷に失敗しました"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "選択したプリンタ '%s' が見つかりませんでした"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5476
+msgid "_Previous Page"
+msgstr "前のページ(_P)"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5477
+msgid "Go to the previous page"
+msgstr "前のページに移動します"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5479
+msgid "_Next Page"
+msgstr "次のページ(_N)"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5480
+msgid "Go to the next page"
+msgstr "次のページに移動します"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5463
+msgid "Enlarge the document"
+msgstr "このドキュメントを拡大します"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5466
+msgid "Shrink the document"
+msgstr "このドキュメントを縮小します"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "印刷"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5432
+msgid "Print this document"
+msgstr "このドキュメントを印刷します"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5578
+msgid "_Best Fit"
+msgstr "全体に合わせる(_B)"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5579
+msgid "Make the current document fill the window"
+msgstr "このドキュメント全体がウィンドウに収まるように表示します"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5581
+msgid "Fit Page _Width"
+msgstr "幅に合わせる(_W)"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5582
+msgid "Make the current document fill the window width"
+msgstr "このドキュメントの幅をウィンドウの幅に合わせます"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5683
+msgid "Page"
+msgstr "ページ"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5684
+msgid "Select Page"
+msgstr "直接ページを指定します"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "ドキュメント"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "タイトル:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "ファイル名:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "サブタイトル:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "作者:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "キーワード:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "PDF 作成ツール:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "PDF の作成者:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "作成日時:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "変更日時:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "ページ数:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "表示の最適化:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "フォーマット:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "セキュリティ:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "ページサイズ:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "なし"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f ミリ"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f インチ"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s の縦置き (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s の横置き (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d / %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "/ %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "読み込み中です…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "印刷の準備中…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "終了中…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "%d / %d を印刷中…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "このプリンタでは印刷はサポートされていません。"
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "ページの選択が間違ってます"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "警告"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "選択された印刷範囲にページが含まれていません"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "ページの拡大縮小:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "印刷可能な領域に合わせて縮小"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "印刷可能な領域に合わせる"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"選択されたプリンタページに合わせてドキュメントページを拡大縮小します。以下か"
+"ら1つ選択してください:\n"
+"\n"
+"• \"なし\": ページの拡大縮小は行われません。\n"
+"\n"
+"• \"印刷可能な領域に合わせて縮小\": 印刷可能な領域よりドキュメントページが大"
+"きな場合はプリンタページの印刷可能な領域に合わせて縮小します。\n"
+"\n"
+"• \"印刷可能な領域に合わせる\": 必要に応じてプリンタページの印刷可能な領域に"
+"合わせてドキュメントページの拡大または縮小を行ないます。\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "自動回転して中央揃え"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"各ページのプリンタページ方向を回転して各ドキュメントページの方向に合わせま"
+"す。ドキュメントページはプリンタページ内の中央に配置されます。"
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "ドキュメントのページサイズを利用してページサイズを選択する"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"有効にした場合、各ページはドキュメントページと同じサイズの紙に印刷されます。"
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "ページの取り扱い"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "%d ページの印刷に失敗しました: %s"
+
+# アクション名
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "上にスクロールする"
+
+# アクション名
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "下にスクロールする"
+
+# アクション説明
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "表示を上にスクロールします"
+
+# アクション説明
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "表示を下にスクロールします"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "ドキュメント・ビューア"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "移動先のページ:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "プレゼンテーションの最後です。クリックで終了します。"
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "先頭ページへジャンプします"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "前のページへジャンプします"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "次のページへジャンプします"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "最後のページへジャンプします"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "ページへジャンプします"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "検索"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "%s ページへジャンプします"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "ファイル \"%2$s\" の %1$s へジャンプします"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "ファイル \"%s\" へ移動します"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "%s の起動"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "検索:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5449
+msgid "Find Pre_vious"
+msgstr "前を検索(_V)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "ドキュメントの先頭に向かって検索します"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5447
+msgid "Find Ne_xt"
+msgstr "次を検索(_X)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "ドキュメントの最後に向かって検索します"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "大小文字を区別する(_A)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "大小文字を区別して検索します"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "アイコン:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "ノート"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "コメント"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "鍵"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "ヘルプ"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "新しい段落"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "段落"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "挿入"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "クロス"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "円"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "不明"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "注釈のプロパティ"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "色:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "スタイル:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "透明度"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "不透明度"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "初期ウィンドウ状態:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "開く"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "閉じる"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "プレゼンテーション・モードで実行中です"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "ドキュメント '%s' を読み込めませんでした"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "%s の変換中"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d / %d のドキュメントを変換しました"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "メタデータの変換中"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Evince で利用されているメタデータ形式が変更されたので、移行をする必要がありま"
+"す。移行作業がキャンセルされるとメタデータストレージは動作しません。"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "最近開いたドキュメントを再び開きます"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"このドキュメントはロックされているので、正しいパスワードを入力したときのみ読"
+"み込みが可能です。"
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "ドキュメントのロックを解除(_U)"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "パスワードの入力"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "パスワードが必要です"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "ロックされているドキュメント \"%s\" を開くにはパスワードが必要です。"
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "パスワード(_P):"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "今すぐパスワードを破棄する(_I)"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "ログアウトするまでパスワードを記憶する(_L)"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "パスワードを記憶する(_F)"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "プロパティ"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "全般"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "フォント"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "ドキュメントのライセンス"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "フォント"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "フォント情報を収集中… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "利用規約"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "テキストのライセンス"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "より詳しい情報"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "リスト"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "注釈"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "テキスト"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "テキストの注釈を追加"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "追加"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "ドキュメントには注釈がありません"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "%d ページ"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "添付ファイル"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "レイヤ"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "印刷…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "目次"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "サムネイル"
+
+#: ../shell/ev-window.c:875
+#, c-format
+msgid "Page %s — %s"
+msgstr "%s - %s ページ"
+
+#: ../shell/ev-window.c:877
+#, c-format
+msgid "Page %s"
+msgstr "%s ページ"
+
+#: ../shell/ev-window.c:1436
+msgid "The document contains no pages"
+msgstr "ドキュメントにはページがありません"
+
+#: ../shell/ev-window.c:1439
+msgid "The document contains only empty pages"
+msgstr "ドキュメントには空のページしかありません"
+
+#: ../shell/ev-window.c:1644 ../shell/ev-window.c:1810
+msgid "Unable to open document"
+msgstr "ドキュメントを開けません"
+
+#: ../shell/ev-window.c:1781
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "“%s” からドキュメントを読み込んでいます"
+
+#: ../shell/ev-window.c:1923 ../shell/ev-window.c:2202
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "ドキュメントのダウンロード中 (%d%%)"
+
+#: ../shell/ev-window.c:1956
+msgid "Failed to load remote file."
+msgstr "リモートファイルの読み込みに失敗しました"
+
+#: ../shell/ev-window.c:2146
+#, c-format
+msgid "Reloading document from %s"
+msgstr "%s からドキュメントを再度読み込んでいます"
+
+#: ../shell/ev-window.c:2178
+msgid "Failed to reload document."
+msgstr "ドキュメントの再読み込みに失敗しました"
+
+#: ../shell/ev-window.c:2333
+msgid "Open Document"
+msgstr "ドキュメントを開く"
+
+#: ../shell/ev-window.c:2631
+#, c-format
+msgid "Saving document to %s"
+msgstr "%s にドキュメントを保存しています"
+
+#: ../shell/ev-window.c:2634
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "%s に添付ファイルを保存しています"
+
+#: ../shell/ev-window.c:2637
+#, c-format
+msgid "Saving image to %s"
+msgstr "%s に画像を保存しています"
+
+#: ../shell/ev-window.c:2681 ../shell/ev-window.c:2781
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "ファイルを \"%s\" として保存できませんでした"
+
+#: ../shell/ev-window.c:2712
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "ドキュメントのアップロード中 (%d%%)"
+
+#: ../shell/ev-window.c:2716
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "添付ファイルのアップロード中 (%d%%)"
+
+#: ../shell/ev-window.c:2720
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "画像のアップロード中 (%d%%)"
+
+#: ../shell/ev-window.c:2844
+msgid "Save a Copy"
+msgstr "別名で保存"
+
+#: ../shell/ev-window.c:3129
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "保留中の印刷ジョブが %d 個あります"
+
+#: ../shell/ev-window.c:3242
+#, c-format
+msgid "Printing job “%s”"
+msgstr "印刷ジョブ \"%s\""
+
+#: ../shell/ev-window.c:3420
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"ドキュメントには内容を埋めたフォームフィールドが含まれています。別名で保存し"
+"ない場合は変更点は失われます。"
+
+#: ../shell/ev-window.c:3424
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"ドキュメントには新規もしくは更新された注釈が含まれています。別名で保存しない"
+"場合は変更点は失われます。"
+
+#: ../shell/ev-window.c:3431
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "ドキュメント \"%s\" を閉じる前に別名で保存しますか?"
+
+#: ../shell/ev-window.c:3450
+msgid "Close _without Saving"
+msgstr "保存せずに閉じる(_W)"
+
+#: ../shell/ev-window.c:3454
+msgid "Save a _Copy"
+msgstr "別名で保存(_C)"
+
+#: ../shell/ev-window.c:3528
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "印刷ジョブの \"%s\" が完了するまで閉じずに待機しますか?"
+
+#: ../shell/ev-window.c:3531
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"現在 %d 個の印刷ジョブがあります。すべてのジョブが完了するまで、閉じずに待機"
+"しますか?"
+
+#: ../shell/ev-window.c:3543
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "ウィンドウを閉じた場合、保留中の印刷ジョブは破棄されます。"
+
+#: ../shell/ev-window.c:3547
+msgid "Cancel _print and Close"
+msgstr "キャンセルして閉じる(_P)"
+
+#: ../shell/ev-window.c:3551
+msgid "Close _after Printing"
+msgstr "印刷してから閉じる(_A)"
+
+#: ../shell/ev-window.c:4171
+msgid "Toolbar Editor"
+msgstr "ツールバーの編集"
+
+#: ../shell/ev-window.c:4338
+msgid "There was an error displaying help"
+msgstr "ヘルプを表示する際にエラーが発生しました"
+
+#: ../shell/ev-window.c:4550
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"ドキュメント・ビューア\n"
+"%s (%s) を利用"
+
+#: ../shell/ev-window.c:4581
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince はフリーソフトウェアです; フリーソフトウェア財団が発行する GNU 一般公"
+"衆利用許諾契約書の第二版、あるいはそれ以降の版が定める条項の下で本プログラム"
+"を再頒布または変更することができます。\n"
+
+#: ../shell/ev-window.c:4585
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince は役立つものであることを期待して配布されていますが、完全に無保証です。"
+"商用利用または特定の目的における適合性の保証はありません。詳細は GNU 一般公衆"
+"利用許諾契約書をご覧ください。\n"
+
+#: ../shell/ev-window.c:4589
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"あなたは、本プログラムと一緒に GNU 一般公衆利用許諾契約書の写しを受け取ってい"
+"るはずです。そうでない場合は、Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA まで手紙を書いてください。\n"
+
+#: ../shell/ev-window.c:4614
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4617
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Evince 開発者"
+
+#: ../shell/ev-window.c:4623
+msgid "translator-credits"
+msgstr ""
+"相花 毅 <[email protected]>\n"
+"佐藤 暁 <[email protected]>\n"
+"草野 貴之 <[email protected]>\n"
+"Shushi Kurose <[email protected]>\n"
+"やまねひでき <[email protected]>\n"
+"日本MATEユーザー会 <http://www.mate.gr.jp/>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4889
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "このページで %d 個見つかりました"
+
+#: ../shell/ev-window.c:4894
+msgid "Not found"
+msgstr "見つかりません"
+
+#: ../shell/ev-window.c:4900
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "検索残り %3d%%"
+
+#: ../shell/ev-window.c:5415
+msgid "_File"
+msgstr "ファイル(_F)"
+
+#: ../shell/ev-window.c:5416
+msgid "_Edit"
+msgstr "編集(_E)"
+
+#: ../shell/ev-window.c:5417
+msgid "_View"
+msgstr "表示(_V)"
+
+#: ../shell/ev-window.c:5418
+msgid "_Go"
+msgstr "移動(_G)"
+
+#: ../shell/ev-window.c:5419
+msgid "_Help"
+msgstr "ヘルプ(_H)"
+
+#. File menu
+#: ../shell/ev-window.c:5422 ../shell/ev-window.c:5723
+msgid "_Open…"
+msgstr "開く(_O)…"
+
+#: ../shell/ev-window.c:5423 ../shell/ev-window.c:5724
+msgid "Open an existing document"
+msgstr "既存のドキュメントを開きます"
+
+#: ../shell/ev-window.c:5425
+msgid "Op_en a Copy"
+msgstr "コピーを開く(_E)"
+
+#: ../shell/ev-window.c:5426
+msgid "Open a copy of the current document in a new window"
+msgstr "このドキュメントのコピーを新しいウィンドウで開きます"
+
+#: ../shell/ev-window.c:5428
+msgid "_Save a Copy…"
+msgstr "別名で保存(_S)…"
+
+#: ../shell/ev-window.c:5429
+msgid "Save a copy of the current document"
+msgstr "このドキュメントを別名で保存します"
+
+#: ../shell/ev-window.c:5431
+msgid "_Print…"
+msgstr "印刷(_P)…"
+
+#: ../shell/ev-window.c:5434
+msgid "P_roperties"
+msgstr "プロパティ(_R)"
+
+#: ../shell/ev-window.c:5442
+msgid "Select _All"
+msgstr "すべて選択(_A)"
+
+#: ../shell/ev-window.c:5444
+msgid "_Find…"
+msgstr "検索(_F)…"
+
+#: ../shell/ev-window.c:5445
+msgid "Find a word or phrase in the document"
+msgstr "このドキュメントの中にある単語や語句を検索します"
+
+#: ../shell/ev-window.c:5451
+msgid "T_oolbar"
+msgstr "ツールバー(_O)"
+
+#: ../shell/ev-window.c:5453
+msgid "Rotate _Left"
+msgstr "左へ回転(_L)"
+
+#: ../shell/ev-window.c:5455
+msgid "Rotate _Right"
+msgstr "右へ回転(_R)"
+
+#: ../shell/ev-window.c:5457
+msgid "Save Current Settings as _Default"
+msgstr "現在の設定をデフォルトとして保存(_D)"
+
+#: ../shell/ev-window.c:5468
+msgid "_Reload"
+msgstr "再読み込み(_R)"
+
+#: ../shell/ev-window.c:5469
+msgid "Reload the document"
+msgstr "ドキュメントを再度読み込みます"
+
+#: ../shell/ev-window.c:5472
+msgid "Auto_scroll"
+msgstr "自動スクロール(_S)"
+
+#: ../shell/ev-window.c:5482
+msgid "_First Page"
+msgstr "先頭のページ(_F)"
+
+#: ../shell/ev-window.c:5483
+msgid "Go to the first page"
+msgstr "先頭のページに移動します"
+
+#: ../shell/ev-window.c:5485
+msgid "_Last Page"
+msgstr "最後のページ(_L)"
+
+#: ../shell/ev-window.c:5486
+msgid "Go to the last page"
+msgstr "最後のページに移動します"
+
+#. Help menu
+#: ../shell/ev-window.c:5490
+msgid "_Contents"
+msgstr "目次(_C)"
+
+#: ../shell/ev-window.c:5493
+msgid "_About"
+msgstr "情報(_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5497
+msgid "Leave Fullscreen"
+msgstr "フルスクリーンの解除"
+
+#: ../shell/ev-window.c:5498
+msgid "Leave fullscreen mode"
+msgstr "フルスクリーンモードを解除します"
+
+#: ../shell/ev-window.c:5500
+msgid "Start Presentation"
+msgstr "プレゼンテーション表示"
+
+#: ../shell/ev-window.c:5501
+msgid "Start a presentation"
+msgstr "プレゼンテーション表示を開始します"
+
+#. View Menu
+#: ../shell/ev-window.c:5560
+msgid "_Toolbar"
+msgstr "ツールバー(_T)"
+
+#: ../shell/ev-window.c:5561
+msgid "Show or hide the toolbar"
+msgstr "ツールバーの表示を ON/OFF します"
+
+#: ../shell/ev-window.c:5563
+msgid "Side _Pane"
+msgstr "サイド・ペイン(_P)"
+
+#: ../shell/ev-window.c:5564
+msgid "Show or hide the side pane"
+msgstr "サイド・ペインの表示を ON/OFF します"
+
+#: ../shell/ev-window.c:5566
+msgid "_Continuous"
+msgstr "連続ページ(_C)"
+
+#: ../shell/ev-window.c:5567
+msgid "Show the entire document"
+msgstr "ドキュメント全体を表示します"
+
+#: ../shell/ev-window.c:5569
+msgid "_Dual"
+msgstr "見開きページ(_D)"
+
+#: ../shell/ev-window.c:5570
+msgid "Show two pages at once"
+msgstr "一度に2ページ表示します"
+
+#: ../shell/ev-window.c:5572
+msgid "_Fullscreen"
+msgstr "フルスクリーン表示(_F)"
+
+#: ../shell/ev-window.c:5573
+msgid "Expand the window to fill the screen"
+msgstr "画面全体を覆うようにウィンドウを拡大します"
+
+#: ../shell/ev-window.c:5575
+msgid "Pre_sentation"
+msgstr "プレゼンテーション表示(_S)"
+
+#: ../shell/ev-window.c:5576
+msgid "Run document as a presentation"
+msgstr "ドキュメントをプレゼンテーションとして表示します"
+
+#: ../shell/ev-window.c:5584
+msgid "_Inverted Colors"
+msgstr "色を反転する(_I)"
+
+#: ../shell/ev-window.c:5585
+msgid "Show page contents with the colors inverted"
+msgstr "ページの内容を色を反転して表示します"
+
+#. Links
+#: ../shell/ev-window.c:5593
+msgid "_Open Link"
+msgstr "リンクを開く(_O)"
+
+#: ../shell/ev-window.c:5595
+msgid "_Go To"
+msgstr "移動(_G)"
+
+#: ../shell/ev-window.c:5597
+msgid "Open in New _Window"
+msgstr "新しいウィンドウで開く(_W)"
+
+#: ../shell/ev-window.c:5599
+msgid "_Copy Link Address"
+msgstr "リンクアドレスをコピー(_C)"
+
+#: ../shell/ev-window.c:5601
+msgid "_Save Image As…"
+msgstr "画像を別名で保存(_S)…"
+
+#: ../shell/ev-window.c:5603
+msgid "Copy _Image"
+msgstr "画像のコピー(_I)"
+
+#: ../shell/ev-window.c:5605
+msgid "Annotation Properties…"
+msgstr "注釈のプロパティ…"
+
+#: ../shell/ev-window.c:5610
+msgid "_Open Attachment"
+msgstr "添付ファイルを開く(_O)"
+
+#: ../shell/ev-window.c:5612
+msgid "_Save Attachment As…"
+msgstr "添付ファイルを別名で保存(_S)…"
+
+#: ../shell/ev-window.c:5697
+msgid "Zoom"
+msgstr "ズーム"
+
+#: ../shell/ev-window.c:5699
+msgid "Adjust the zoom level"
+msgstr "ズーム・レベルを調節します"
+
+#: ../shell/ev-window.c:5709
+msgid "Navigation"
+msgstr "ナビゲーション"
+
+#: ../shell/ev-window.c:5711
+msgid "Back"
+msgstr "戻る"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5714
+msgid "Move across visited pages"
+msgstr "表示したページへ移動します"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5744
+msgid "Previous"
+msgstr "前へ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5749
+msgid "Next"
+msgstr "次へ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5753
+msgid "Zoom In"
+msgstr "拡大"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5757
+msgid "Zoom Out"
+msgstr "縮小"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5765
+msgid "Fit Width"
+msgstr "幅に合わせる"
+
+#: ../shell/ev-window.c:5910 ../shell/ev-window.c:5927
+msgid "Unable to launch external application."
+msgstr "外部のアプリケーションを起動できませんでした"
+
+#: ../shell/ev-window.c:5984
+msgid "Unable to open external link"
+msgstr "外部へのリンクを開けません"
+
+#: ../shell/ev-window.c:6151
+msgid "Couldn't find appropriate format to save image"
+msgstr "画像を保存するのに必要な書式が見つかりませんでした"
+
+#: ../shell/ev-window.c:6193
+msgid "The image could not be saved."
+msgstr "画像を保存できませんでした"
+
+#: ../shell/ev-window.c:6225
+msgid "Save Image"
+msgstr "画像の保存"
+
+#: ../shell/ev-window.c:6353
+msgid "Unable to open attachment"
+msgstr "添付ファイルを開けません"
+
+#: ../shell/ev-window.c:6406
+msgid "The attachment could not be saved."
+msgstr "添付ファイルを保存できませんでした"
+
+#: ../shell/ev-window.c:6451
+msgid "Save Attachment"
+msgstr "添付ファイルの保存"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s - パスワードが必要です"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "拡張子順"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATE ドキュメント・ビューア"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "表示するドキュメントのページラベル"
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "表示するドキュメントのページ番号"
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMBER"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "フルスクリーンモードで起動する"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "プレゼンテーション・モードで起動する"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "プレビューアで起動する"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "ドキュメントの中から単語や語句を検索する"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[ファイル…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"論理型のオプションが利用可能: TRUE にするとサムネイル表示になり、FALSE にする"
+"と新規にサムネイルを作成しません。"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF ドキュメントのサムネイル表示"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF ドキュメントのサムネイル表示コマンド"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF ドキュメントをサムネイル表示するための妥当なコマンドと引数です。詳細は "
+"Caja のサムネイル関連のドキュメントを参照してください。"
+
+#, fuzzy
+#~ msgid "Page Set_up…"
+#~ msgstr "ページ設定(_U)..."
+
+#, fuzzy
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "印刷用にページを設定します"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU ドキュメントの書式が壊れています"
+
+#~ msgid "Print..."
+#~ msgstr "印刷..."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "別名で保存(_S)..."
+
+#~ msgid "_Print..."
+#~ msgstr "印刷(_P)..."
+
+#~ msgid "_Find..."
+#~ msgstr "検索(_F)..."
diff --git a/po/ka.po b/po/ka.po
new file mode 100644
index 00000000..f6205c10
--- /dev/null
+++ b/po/ka.po
@@ -0,0 +1,1251 @@
+# translation of evince.HEAD.po to Georgian
+# Copyright (C) 2006 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Vladimer Sichinava <[email protected]>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-08-27 16:10+0200\n"
+"PO-Revision-Date: 2006-09-10 08:25+0200\n"
+"Last-Translator: Vladimer Sichinava <[email protected]>\n"
+"Language-Team: Georgian <www.gia.ge>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"X-Generator: KBabel 1.11.2\n"
+
+#: ../backend/ev-attachment.c:302 ../backend/ev-attachment.c:315
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr ""
+"შეუძლებელია დანართის "
+"შენახვა “%s”: %s"
+
+#: ../backend/ev-attachment.c:347
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr ""
+"შეუძლებელია დანართის "
+"გახსნა “%s”: %s"
+
+#: ../backend/ev-attachment.c:380
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr ""
+"შეუძლებელია დანართის "
+"გახსნა “%s”"
+
+#: ../backend/ev-document-factory.c:265 ../backend/ev-document-factory.c:331
+msgid "Unknown MIME Type"
+msgstr "უცნობი MIME ტიპი"
+
+#: ../backend/ev-document-factory.c:276
+#, c-format
+msgid "Unhandled MIME type: “%s”"
+msgstr "უცნობი MIME ტიპი: “%s”"
+
+#: ../backend/ev-document-factory.c:372
+msgid "All Documents"
+msgstr "ყველა დოკუმენტი"
+
+#: ../backend/ev-document-factory.c:380
+msgid "PostScript Documents"
+msgstr "PostScrip დოკუმენტები"
+
+#: ../backend/ev-document-factory.c:389
+msgid "PDF Documents"
+msgstr "PDF დოკუმენტები"
+
+#: ../backend/ev-document-factory.c:398
+msgid "Images"
+msgstr "სურათები"
+
+#: ../backend/ev-document-factory.c:408
+msgid "DVI Documents"
+msgstr "DVI დოკუმენტები"
+
+#: ../backend/ev-document-factory.c:418
+msgid "Djvu Documents"
+msgstr "Djvu დოკუმენტები"
+
+#: ../backend/ev-document-factory.c:428
+msgid "Comic Books"
+msgstr "კომიქსები"
+
+#: ../backend/ev-document-factory.c:438
+msgid "Impress Slides"
+msgstr "Impress-სლაიდები"
+
+#: ../backend/ev-document-factory.c:446
+msgid "All Files"
+msgstr "ყველა ფაილი"
+
+#: ../comics/comics-document.c:148
+msgid "File corrupted."
+msgstr "დაზიანებული ფაილი."
+
+#: ../comics/comics-document.c:184
+#, c-format
+msgid "No images found in archive %s"
+msgstr ""
+"არქივი %s არ შეიცავს "
+"გამოსახულებებს"
+
+#: ../cut-n-paste/recent-files/egg-recent-view-uimanager.c:205
+#, c-format
+msgid "Open “%s”"
+msgstr "გახსენი “%s”"
+
+#: ../cut-n-paste/recent-files/egg-recent-view-uimanager.c:322
+msgid "Empty"
+msgstr "ცარიელია"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:902
+#, c-format
+msgid "Show “_%s”"
+msgstr "აჩვენე “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1362
+msgid "_Move on Toolbar"
+msgstr ""
+"გადატანა ინსტრუმენტების "
+"ველზე"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1363
+msgid "Move the selected item on the toolbar"
+msgstr ""
+"გადაიტანე მონიშნული "
+"ელემენტი ინსტრუმენტთა ველზე"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1364
+msgid "_Remove from Toolbar"
+msgstr ""
+"ინსტრუმენტთა ველიდან "
+"ამოშლა"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1365
+msgid "Remove the selected item from the toolbar"
+msgstr ""
+"ამოშალე მონიშნული ელემენტი "
+"ინსტრუმენტების ველიდან"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1366
+msgid "_Delete Toolbar"
+msgstr ""
+"ინსტრუმენტთა პანელის ამოშლა"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1367
+msgid "Remove the selected toolbar"
+msgstr ""
+"ინსტრუმენტთა პანელის ამოშლა"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:439
+msgid "Separator"
+msgstr "გამყოფი"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:3622
+msgid "Best Fit"
+msgstr "საუკეთესო მორგება"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "გვერდის სიგანეში მორგება"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "75%"
+msgstr "75%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window-title.c:126
+msgid "Document Viewer"
+msgstr "დოკუმენტების მნახველი"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr ""
+"მრავალგვერდიანი "
+"დოკუმენტების ჩვენება"
+
+#: ../data/evince-password.glade.h:1
+msgid "Remember password for this session"
+msgstr ""
+"სესიის პაროლის დამახსოვრება"
+
+#: ../data/evince-password.glade.h:2
+msgid "Save password in keyring"
+msgstr "პაროლის შენახვა აცმაში"
+
+#: ../data/evince-password.glade.h:3
+msgid "_Password:"
+msgstr "_პაროლი:"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>ავტორი:</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>შექმნილია: </b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>შემქმნელი:</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b> ფორმატი:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b> საკვანძო სიტყვები:</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>შეიცვალა:</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b>გვერდების რაოდენობა:</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr "<b>ოპტიმიზირებული:</b>"
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Producer:</b>"
+msgstr "<b>პროდუსერი:</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Security:</b>"
+msgstr "<b>უსაფრთხოება:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Subject:</b>"
+msgstr "<b>თემა:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Title:</b>"
+msgstr "<b>სათაური:</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr ""
+"დოკუმენტის შეზღუდვების "
+"უგულვებელყოფა"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"დოკუმენტის შეზღუდვების "
+"უგულებელყოფა, მაგალითად "
+"ბეჭდვის აკრძალვის."
+
+#: ../dvi/dvi-document.c:91
+msgid "File not available"
+msgstr "ვერ ვპოულობ ფაილს"
+
+#: ../dvi/dvi-document.c:104
+msgid "DVI document has incorrect format"
+msgstr ""
+"DVI დოკუმენტს არასწორი "
+"ფორმატი გააჩნია"
+
+#. translators: this is the document security state
+#: ../pdf/ev-poppler.cc:593
+msgid "Yes"
+msgstr "დიახ"
+
+#. translators: this is the document security state
+#: ../pdf/ev-poppler.cc:596
+msgid "No"
+msgstr "არა"
+
+#: ../pdf/ev-poppler.cc:696
+msgid "Type 1"
+msgstr "ტიპი 1"
+
+#: ../pdf/ev-poppler.cc:698
+msgid "Type 1C"
+msgstr "ტიპი 1C"
+
+#: ../pdf/ev-poppler.cc:700
+msgid "Type 3"
+msgstr "ტიპი 3"
+
+#: ../pdf/ev-poppler.cc:702
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../pdf/ev-poppler.cc:704
+msgid "Type 1 (CID)"
+msgstr "ტიპი 1·(CID)"
+
+#: ../pdf/ev-poppler.cc:706
+msgid "Type 1C (CID)"
+msgstr "ტიპი 1C·(CID)"
+
+#: ../pdf/ev-poppler.cc:708
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../pdf/ev-poppler.cc:710
+msgid "Unknown font type"
+msgstr "უცნობი შრიფტის ტიპი"
+
+#: ../pdf/ev-poppler.cc:736
+msgid "No name"
+msgstr "უსახელო"
+
+#: ../pdf/ev-poppler.cc:744
+msgid "Embedded subset"
+msgstr "ჩაკერებული ქვესიმრავლე"
+
+#: ../pdf/ev-poppler.cc:746
+msgid "Embedded"
+msgstr "ჩაკერებული"
+
+#: ../pdf/ev-poppler.cc:748
+msgid "Not embedded"
+msgstr "არ არის ჩაშენებული"
+
+#: ../properties/ev-properties-main.c:107
+msgid "Document"
+msgstr "დოკუმენტი"
+
+#: ../properties/ev-properties-view.c:173
+msgid "None"
+msgstr "არა"
+
+#: ../ps/gsdefaults.c:30
+msgid "BBox"
+msgstr "BBox"
+
+#: ../ps/gsdefaults.c:31
+msgid "Letter"
+msgstr "წერილი"
+
+#: ../ps/gsdefaults.c:32
+msgid "Tabloid"
+msgstr "Tabloid"
+
+#: ../ps/gsdefaults.c:33
+msgid "Ledger"
+msgstr "Ledger"
+
+#: ../ps/gsdefaults.c:34
+msgid "Legal"
+msgstr "Legal"
+
+#: ../ps/gsdefaults.c:35
+msgid "Statement"
+msgstr "Statement"
+
+#: ../ps/gsdefaults.c:36
+msgid "Executive"
+msgstr "Executive"
+
+#: ../ps/gsdefaults.c:37
+msgid "A0"
+msgstr "A0"
+
+#: ../ps/gsdefaults.c:38
+msgid "A1"
+msgstr "A1"
+
+#: ../ps/gsdefaults.c:39
+msgid "A2"
+msgstr "A2"
+
+#: ../ps/gsdefaults.c:40
+msgid "A3"
+msgstr "A3"
+
+#: ../ps/gsdefaults.c:41
+msgid "A4"
+msgstr "A4"
+
+#: ../ps/gsdefaults.c:42
+msgid "A5"
+msgstr "A5"
+
+#: ../ps/gsdefaults.c:43
+msgid "B4"
+msgstr "B4"
+
+#: ../ps/gsdefaults.c:44
+msgid "B5"
+msgstr "B5"
+
+#: ../ps/gsdefaults.c:45
+msgid "Folio"
+msgstr "Folio"
+
+#: ../ps/gsdefaults.c:46
+msgid "Quarto"
+msgstr "Quarto"
+
+#: ../ps/gsdefaults.c:47
+msgid "10x14"
+msgstr "10x14"
+
+#: ../ps/ps-document.c:136
+msgid "No document loaded."
+msgstr ""
+"დოკუმენტი არ არის "
+"ჩატვირთული."
+
+#: ../ps/ps-document.c:590
+msgid "Broken pipe."
+msgstr "დაზიანებული ნაკადი."
+
+#: ../ps/ps-document.c:774
+msgid "Interpreter failed."
+msgstr "ინტერპრეტატორი ვერ შედგა."
+
+#: ../ps/ps-document.c:900
+#, c-format
+msgid "Error while decompressing file “%s”:\n"
+msgstr ""
+"შეცდომა “%s” ფაილის "
+"დეკომპრესირებისას:\n"
+
+#: ../ps/ps-document.c:960
+#, c-format
+msgid "Cannot open file “%s”.\n"
+msgstr "ფაილი “%s” ვერ გაიხსნა.\n"
+
+#: ../ps/ps-document.c:965
+msgid "File is not readable."
+msgstr "ფაილი არ იკითხება."
+
+#: ../ps/ps-document.c:985
+msgid "Document loaded."
+msgstr "დოკუმენტი ჩატვირთულია."
+
+#: ../ps/ps-document.c:1082
+#, c-format
+msgid ""
+"Failed to load document “%s”. Ghostscript interpreter was not found in "
+"path"
+msgstr ""
+"დოკუმენტი “%s” ვერ ჩაიტვირთა. "
+"ვერ მოიძებნა "
+"Ghostscript-ინტერპრეტატორი"
+
+#: ../ps/ps-document.c:1094
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr ""
+"დოკუმენტი “%s” ვერ ჩაიტვირთა"
+
+#: ../ps/ps-document.c:1267
+msgid "Encapsulated PostScript"
+msgstr "ჩადგმული PostScript"
+
+#: ../ps/ps-document.c:1268
+msgid "PostScript"
+msgstr "PostScript"
+
+#: ../shell/eggfindbar.c:157
+msgid "Search string"
+msgstr "სტრიქონის ძებნა"
+
+#: ../shell/eggfindbar.c:158
+msgid "The name of the string to be found"
+msgstr ""
+"საძიებელი სტრიქონის სახელი"
+
+#: ../shell/eggfindbar.c:171
+msgid "Case sensitive"
+msgstr "რეგისტრისადმი მგძნობიარე"
+
+#: ../shell/eggfindbar.c:172
+msgid "TRUE for a case sensitive search"
+msgstr ""
+"რეგისტრმგრძნობიარე "
+"ძიებისათვის - TRUE "
+
+#: ../shell/eggfindbar.c:179
+msgid "Highlight color"
+msgstr "მარკირებული"
+
+#: ../shell/eggfindbar.c:180
+msgid "Color of highlight for all matches"
+msgstr ""
+"ყველანაირი თანხვედრის ფერი"
+
+#: ../shell/eggfindbar.c:186
+msgid "Current color"
+msgstr "მიმდინარე ფერი"
+
+#: ../shell/eggfindbar.c:187
+msgid "Color of highlight for the current match"
+msgstr "ფერი - ემთხვევა"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "ძებნა:"
+
+#: ../shell/eggfindbar.c:329
+msgid "Find Previous"
+msgstr "ეძებე წინა"
+
+#: ../shell/eggfindbar.c:332
+msgid "Find previous occurrence of the search string"
+msgstr ""
+"იპოვე საძიებო ნუსხის წინა "
+"ვარიანტი"
+
+#: ../shell/eggfindbar.c:337
+msgid "Find Next"
+msgstr "ეძებე შემდეგი"
+
+#: ../shell/eggfindbar.c:340
+msgid "Find next occurrence of the search string"
+msgstr ""
+"იპოვე საძიებო ნუსხის "
+"შემდეგი ვარიანტი"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "რეგისტრის გათვალისწინება"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr ""
+"ჩართე ძიება რეგისტრის "
+"გათვალისწინებით"
+
+# (%d %d-დან)
+#: ../shell/ev-page-action.c:168
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d-დან %d)"
+
+#: ../shell/ev-page-action.c:170
+#, c-format
+msgid "of %d"
+msgstr "%d-დან"
+
+#: ../shell/ev-password.c:83
+msgid "Password required"
+msgstr "პაროლი აუცილებელია"
+
+#: ../shell/ev-password.c:84
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be "
+"opened."
+msgstr ""
+"“%s” დოკუმენტის გახსნისათვის "
+"საჭიროა პაროლი"
+
+#: ../shell/ev-password.c:149
+msgid "Enter password"
+msgstr "შეიყვანეთ პაროლი"
+
+#: ../shell/ev-password.c:252
+#, c-format
+msgid "Password for document %s"
+msgstr "“%s” დოკუმენტის პაროლი"
+
+#: ../shell/ev-password.c:334
+msgid "Incorrect password"
+msgstr "არასწორი პაროლი"
+
+#: ../shell/ev-password-view.c:111
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"დოკუმენტი ბლოკირებულია, "
+"გაიხსნება მხოლოდ პაროლის "
+"სწორად შეყვანისას."
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "_დოკუმენტის განბლოკვა"
+
+#: ../shell/ev-properties-dialog.c:61
+msgid "Properties"
+msgstr "პარამეტრები"
+
+#: ../shell/ev-properties-dialog.c:94
+msgid "General"
+msgstr "საერთო"
+
+#: ../shell/ev-properties-dialog.c:104
+msgid "Fonts"
+msgstr "შრიფტები"
+
+#: ../shell/ev-properties-fonts.c:123
+msgid "Font"
+msgstr "შრიფტი"
+
+#: ../shell/ev-properties-fonts.c:134
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr ""
+"შრიფტის შესახებ "
+"ინფორმაციის შეგროვება... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:662
+msgid "Attachments"
+msgstr "დანართი"
+
+#: ../shell/ev-sidebar-links.c:254 ../shell/ev-view.c:2230
+msgid "Loading..."
+msgstr "იტვირთება...."
+
+#: ../shell/ev-sidebar-links.c:351
+msgid "Print..."
+msgstr "ბეჭდვა..."
+
+#: ../shell/ev-sidebar-links.c:736
+msgid "Index"
+msgstr "ინდექსი"
+
+#: ../shell/ev-sidebar-thumbnails.c:678
+msgid "Thumbnails"
+msgstr "ესკიზები"
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Up"
+msgstr "ზემოთ"
+
+#: ../shell/ev-view-accessible.c:43
+msgid "Scroll Down"
+msgstr "ქვემოთ"
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Up"
+msgstr "ჩვენება ზემოთ"
+
+#: ../shell/ev-view-accessible.c:50
+msgid "Scroll View Down"
+msgstr "ჩვენება ქვემოთ"
+
+#: ../shell/ev-view-accessible.c:536
+msgid "Document View"
+msgstr "დოკუმენტის ნახვა"
+
+#: ../shell/ev-view.c:1337
+msgid "Go to first page"
+msgstr "პირველ გვერდზე"
+
+#: ../shell/ev-view.c:1339
+msgid "Go to previous page"
+msgstr "წინა გვერდზე"
+
+#: ../shell/ev-view.c:1341
+msgid "Go to next page"
+msgstr "შემდეგ გვერდზე გადასვლა"
+
+#: ../shell/ev-view.c:1343
+msgid "Go to last page"
+msgstr "ბოლო გვერდზე"
+
+#: ../shell/ev-view.c:1345
+msgid "Go to page"
+msgstr "გვერდზე გადასვლა"
+
+#: ../shell/ev-view.c:1347
+msgid "Find"
+msgstr "ძე_ბნა:"
+
+#: ../shell/ev-view.c:1374
+#, c-format
+msgid "Go to page %s"
+msgstr "%s გვერდზე"
+
+#: ../shell/ev-view.c:1379
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "%s-ზე გადასვლა “%s” ფაილში"
+
+#: ../shell/ev-view.c:1382
+#, c-format
+msgid "Go to file “%s”"
+msgstr "გადასვლა ფაილზე “%s”"
+
+#: ../shell/ev-view.c:1391
+#, c-format
+msgid "Launch %s"
+msgstr "გაუშვი %s"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:3435
+#, c-format
+msgid "%d found on this page"
+msgstr "ამ გვერდზე ნაპოვნია %d"
+
+#: ../shell/ev-view.c:3444
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "ძიებისათვის საჭიროა %3d%%"
+
+#: ../shell/ev-window.c:1011
+msgid "Unable to open document"
+msgstr "დოკუმენტი არ იხსნება"
+
+#: ../shell/ev-window.c:1100
+msgid "Open Document"
+msgstr "დოკუმენტის გახსნა"
+
+#: ../shell/ev-window.c:1308
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr ""
+"ფაილი ვერ ინახება სახელით "
+"“%s”."
+
+#: ../shell/ev-window.c:1327 ../shell/ev-window.c:3976
+msgid "Save a Copy"
+msgstr "ასლის შენახვა"
+
+#: ../shell/ev-window.c:1380
+msgid "Failed to print document"
+msgstr "შეცდომა ბეჭდვისას"
+
+#: ../shell/ev-window.c:1494 ../shell/ev-window.c:1669
+msgid "Printing is not supported on this printer."
+msgstr ""
+"არ არის ამ პრინტერის "
+"მხარდაჭერა"
+
+#: ../shell/ev-window.c:1604 ../shell/ev-window.c:1720
+msgid "Print"
+msgstr "ბეჭდვა"
+
+#: ../shell/ev-window.c:1659
+msgid "Generating PDF is not supported"
+msgstr ""
+"PDF-ფორმატში გენერირების "
+"მხარდაჭერა არ არის"
+
+#: ../shell/ev-window.c:1671
+#, c-format
+msgid ""
+"You were trying to print to a printer using the “%s” driver. This "
+"program requires a PostScript printer driver."
+msgstr ""
+"“%s” დრაივერით ბეჭდვა "
+"შეუძლებელია. საჭიროა "
+"პოსტსკრიპტ-პრინტერის "
+"დრაივერი."
+
+#: ../shell/ev-window.c:1729
+msgid "Pages"
+msgstr "გვერდები"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:2089 ../shell/ev-window.c:3423
+msgid "Leave Fullscreen"
+msgstr "დატოვე მთელს ეკრანზე"
+
+#: ../shell/ev-window.c:2469
+msgid "Toolbar Editor"
+msgstr ""
+"ინსტრუმენტთა პანელის "
+"რედაქტორი"
+
+#: ../shell/ev-window.c:2840
+#, c-format
+msgid ""
+"PostScript and PDF File Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"PDF და პოსტსკრიპტ-ფაილების "
+"ნახვა.\n"
+"გამოიყენება poppler ვერსია %s (%s)"
+
+#: ../shell/ev-window.c:2864
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince - ეს არის თავისუფალი "
+"პროგრამა. თქვენ შეგიძლიათ "
+"მისი გავრცელება ან/და შეცვლა "
+"თავისუფალი პროგრამირების "
+"ფონდის მიერ გამოქვეყნებული "
+"ერთიანი საზოგადოებრივი "
+"ლიცენზიის (GNU მე 2 ვერსია) ან "
+"უფრო გვიანდელი ვერსიის "
+"პირობების შესაბამისად.\n"
+
+#: ../shell/ev-window.c:2868
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"პროგრამის გამავრცელებლები "
+"იმედოვნებენ, რომ ის "
+"სასარგებლო იქნება, მაგრამ "
+"ვერ მოგცემენ რაიმე "
+"გარანტიას, განცხადებულს ან "
+"ნაგულისხმევს, მათ შორის "
+"კომერციული სარგებლიანობისა "
+"თუ რაიმე კონკრეტული "
+"მიზნისათვის გამოსადეგობის "
+"ჩათვლით, ან სხვა ნებისმიერი "
+"თვალსაზრისით. დაწვრილებითი "
+"ინფორმაციისათვის იხილეთ "
+"ერთიანი საზოგადოებრივი "
+"ლიცენზია (GNU General Public License).\n"
+
+#: ../shell/ev-window.c:2872
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"ამ პროგრამასთან ერთად უნდა "
+"მიგეღოთ GNU ლიცენზია;თუ არ "
+"მიგიღიათ,მოგვწერეთ "
+"თავისუფალი პროგრამების "
+"ფონდში. მისამართზე: 51 Franklin Street, "
+"Fifth Floor, Boston, MA 02110-1301, USA\n"
+
+#: ../shell/ev-window.c:2896 ../shell/main.c:308
+msgid "Evince"
+msgstr "ევინსი"
+
+#: ../shell/ev-window.c:2899
+msgid "© 1996-2005 The Evince authors"
+msgstr "© 1996-2005 ევინსის ავტორები"
+
+#: ../shell/ev-window.c:2905
+msgid "translator-credits"
+msgstr ""
+"Vladimer Sichinava ვლადიმერ სიჭინავა "
+"<[email protected]> Malkhaz Barkalaya მალხაზ "
+"ბარკალაია <[email protected]>"
+
+#: ../shell/ev-window.c:3350
+msgid "_File"
+msgstr "_ფაილი"
+
+#: ../shell/ev-window.c:3351
+msgid "_Edit"
+msgstr "_დამუშავება"
+
+#: ../shell/ev-window.c:3352
+msgid "_View"
+msgstr "_ხედი"
+
+#: ../shell/ev-window.c:3353
+msgid "_Go"
+msgstr "_წინ"
+
+#: ../shell/ev-window.c:3354
+msgid "_Help"
+msgstr "_დახმარება"
+
+#. File menu
+#: ../shell/ev-window.c:3357 ../shell/ev-window.c:3514
+msgid "_Open..."
+msgstr "_გახსნა..."
+
+#: ../shell/ev-window.c:3358
+msgid "Open an existing document"
+msgstr ""
+"უკვე არსებული დოკუმენტის "
+"გახსნა"
+
+#: ../shell/ev-window.c:3360 ../shell/ev-window.c:3516
+msgid "_Save a Copy..."
+msgstr "_კოპიის შენახვა..."
+
+#: ../shell/ev-window.c:3361
+msgid "Save a copy of the current document"
+msgstr ""
+"მოცემული დოკუმენტის ასლის "
+"შენახვა"
+
+#: ../shell/ev-window.c:3363
+msgid "_Print..."
+msgstr "_ბეჭდვა..."
+
+#: ../shell/ev-window.c:3364
+msgid "Print this document"
+msgstr "დაბეჭდე ეს დოკუმენტი"
+
+#: ../shell/ev-window.c:3366
+msgid "P_roperties"
+msgstr "პარამე_ტრები"
+
+#: ../shell/ev-window.c:3374
+msgid "Select _All"
+msgstr "მონიშნე _ყველა"
+
+#: ../shell/ev-window.c:3376
+msgid "_Find..."
+msgstr "_ბეჭდვა..."
+
+#: ../shell/ev-window.c:3377
+msgid "Find a word or phrase in the document"
+msgstr ""
+"დოკუმენტში სიტყვის ან "
+"ფრაზის ძიება"
+
+#: ../shell/ev-window.c:3379
+msgid "Find Ne_xt"
+msgstr "შემდეგის ძ_იება"
+
+#: ../shell/ev-window.c:3381
+msgid "Find Pre_vious"
+msgstr "წ_ინას მოძებნა"
+
+#: ../shell/ev-window.c:3383
+msgid "T_oolbar"
+msgstr "_ინსტრუმენტთა პანელი"
+
+#: ../shell/ev-window.c:3385
+msgid "Rotate _Left"
+msgstr "მარცხნივ მოტრია_ლება"
+
+#: ../shell/ev-window.c:3387
+msgid "Rotate _Right"
+msgstr "მარჯვნივ მოტრია_ლება"
+
+#: ../shell/ev-window.c:3392
+msgid "Enlarge the document"
+msgstr "დოკუმენტის გადიდება"
+
+#: ../shell/ev-window.c:3395
+msgid "Shrink the document"
+msgstr "დოკუმენტის შეკუმშვა"
+
+#: ../shell/ev-window.c:3397
+msgid "_Reload"
+msgstr "_გადატვირთვა"
+
+#: ../shell/ev-window.c:3398
+msgid "Reload the document"
+msgstr "დოკუმენტის გადატვირთვა"
+
+#. Go menu
+#: ../shell/ev-window.c:3402
+msgid "_Previous Page"
+msgstr "_წინა გვერდი"
+
+#: ../shell/ev-window.c:3403
+msgid "Go to the previous page"
+msgstr "წინა გვერდზე გადასვლა"
+
+#: ../shell/ev-window.c:3405
+msgid "_Next Page"
+msgstr "_შემდეგი გვერდი"
+
+#: ../shell/ev-window.c:3406
+msgid "Go to the next page"
+msgstr "გადასვლა -სკენ პანელი"
+
+#: ../shell/ev-window.c:3408
+msgid "_First Page"
+msgstr "_პირველი გვერდი"
+
+#: ../shell/ev-window.c:3409
+msgid "Go to the first page"
+msgstr "პირველ გვერდზე გადასვლა"
+
+#: ../shell/ev-window.c:3411
+msgid "_Last Page"
+msgstr "_ბოლო გვერდი"
+
+#: ../shell/ev-window.c:3412
+msgid "Go to the last page"
+msgstr "ბოლო გვერდზე გადასვლა"
+
+#. Help menu
+#: ../shell/ev-window.c:3416
+msgid "_Contents"
+msgstr "_შინაარსი"
+
+#: ../shell/ev-window.c:3419
+msgid "_About"
+msgstr "_შესახებ"
+
+#: ../shell/ev-window.c:3424
+msgid "Leave fullscreen mode"
+msgstr ""
+"მთელს ეკრანზე რეჟიმის "
+"დატოვება"
+
+#. View Menu
+#: ../shell/ev-window.c:3475
+msgid "_Toolbar"
+msgstr "ხ_ელსაწყოთა ველი"
+
+#: ../shell/ev-window.c:3476
+msgid "Show or hide the toolbar"
+msgstr ""
+"ინსტრუმენტთა პანელის "
+"დამალვა ან გამოჩენა"
+
+#: ../shell/ev-window.c:3478
+msgid "Side _Pane"
+msgstr "გვერდითა _პანელი"
+
+#: ../shell/ev-window.c:3479
+msgid "Show or hide the side pane"
+msgstr ""
+"გვერდითა პანელის დამალვა ან "
+"გამოჩენა"
+
+#: ../shell/ev-window.c:3481
+msgid "_Continuous"
+msgstr "უწყვეტი"
+
+#: ../shell/ev-window.c:3482
+msgid "Show the entire document"
+msgstr ""
+"მთლიანი დოკუმენტის ჩვენება"
+
+#: ../shell/ev-window.c:3484
+msgid "_Dual"
+msgstr "_ორმაგი"
+
+#: ../shell/ev-window.c:3485
+msgid "Show two pages at once"
+msgstr ""
+"ორი გვერდის ერთდროულად "
+"ჩვენება"
+
+#: ../shell/ev-window.c:3487
+msgid "_Fullscreen"
+msgstr "_მთელს ეკრანზე"
+
+#: ../shell/ev-window.c:3488
+msgid "Expand the window to fill the screen"
+msgstr ""
+"ფანჯრის მთელი ეკრანის "
+"დაფარვამდე გადიდება"
+
+#: ../shell/ev-window.c:3490
+msgid "_Presentation"
+msgstr "_პრეზენტაცია"
+
+#: ../shell/ev-window.c:3491
+msgid "Run document as a presentation"
+msgstr ""
+"დოკუმენტის პრეზენტაციის "
+"სახით გაშვება"
+
+#: ../shell/ev-window.c:3493
+msgid "_Best Fit"
+msgstr "_საუკეთესო მორგება"
+
+#: ../shell/ev-window.c:3494
+msgid "Make the current document fill the window"
+msgstr ""
+"მიმდინარე დოკუმენტი ავსებს "
+"ფანჯარას"
+
+#: ../shell/ev-window.c:3496
+msgid "Fit Page _Width"
+msgstr "გვერდი სიგანეში მორგება"
+
+#: ../shell/ev-window.c:3497
+msgid "Make the current document fill the window width"
+msgstr ""
+"მიმდინარე დოკუმენტი ავსებს "
+"ფანჯარას სიგანეში"
+
+#. Links
+#: ../shell/ev-window.c:3504
+msgid "_Open Link"
+msgstr "_ბმულის გახსნა"
+
+#: ../shell/ev-window.c:3506
+msgid "_Go To"
+msgstr "_გადასვლა"
+
+#: ../shell/ev-window.c:3508
+msgid "_Copy Link Address"
+msgstr ""
+"დაა_კოპირე ბმულის მისამართი"
+
+#: ../shell/ev-window.c:3571
+msgid "Page"
+msgstr "გვერდი"
+
+#: ../shell/ev-window.c:3572
+msgid "Select Page"
+msgstr "გვერდის ამორჩევა"
+
+#: ../shell/ev-window.c:3584
+msgid "Zoom"
+msgstr "გადიდება"
+
+#: ../shell/ev-window.c:3586
+msgid "Adjust the zoom level"
+msgstr ""
+"გადიდების მაშტაბის გამართვა"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3602
+msgid "Previous"
+msgstr "წინა"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3608
+msgid "Next"
+msgstr "შემდეგი"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3612
+msgid "Zoom In"
+msgstr "გადიდება"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3617
+msgid "Zoom Out"
+msgstr "დაპატარავება"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:3627
+msgid "Fit Width"
+msgstr "სიგანეში მორგება"
+
+#: ../shell/ev-window.c:3905
+msgid "Unable to open attachment"
+msgstr ""
+"შეუძლებელია დანართის გახსნა"
+
+#: ../shell/ev-window.c:3952
+msgid "The attachment could not be saved."
+msgstr ""
+"შეუძლებელია დანართის "
+"დამახსოვრება."
+
+#: ../shell/ev-window-title.c:140
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - პაროლი აუცილებელია"
+
+#: ../shell/main.c:54
+msgid "The page of the document to display."
+msgstr ""
+"საჩვენებელი დოკუმენტის "
+"გვერდი"
+
+#: ../shell/main.c:54
+msgid "PAGE"
+msgstr "გვერდი"
+
+#: ../shell/main.c:55
+msgid "Run evince in fullscreen mode"
+msgstr ""
+"ევინსის მთელს ეკრანიან "
+"რეჟიმში გაშვება"
+
+#: ../shell/main.c:56
+msgid "Run evince in presentation mode"
+msgstr ""
+"ევინსის პრეზენტაციის "
+"რეჟიმში გაშვება"
+
+#: ../shell/main.c:57
+msgid "Run evince as a previewer"
+msgstr ""
+"ევინსის წინასწარ "
+"მნახველივით გაშვება"
+
+#: ../shell/main.c:58
+msgid "[FILE...]"
+msgstr "[ფაილი...]"
+
+#: ../shell/main.c:293
+msgid "MATE Document Viewer"
+msgstr ""
+"დოკუმენტების "
+"დამთვალიერებელი"
+
+#: ../shell/main.c:335
+msgid "Evince Document Viewer"
+msgstr ""
+"ევინსი დოკუმენტების "
+"დამთვალიერებელი"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"ჩართულია ლოგიკური "
+"ოპერატორი, true გააქტიურებს "
+"ესკიზურ რეჟიმს, ხოლო false "
+"ამორთავს ამ ფუნქციას."
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr ""
+"PDF დოკუმენტების დაესკიზების "
+"ჩართვა"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr ""
+"PDF დოკუმენტების ესკიზების "
+"ბრძანება "
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF დოკუმენტების ესკიზების "
+"დამატებითი ბრძანებების "
+"შესახებ ინფორმაცია "
+"შეგიძლია იხილოთ Caja-ის ფაილ "
+"მენეჯერის დოკუმენტაციაში."
diff --git a/po/kk.po b/po/kk.po
new file mode 100644
index 00000000..62c55412
--- /dev/null
+++ b/po/kk.po
@@ -0,0 +1,1672 @@
+# evince to kazakh.
+# Copyright (C) 2010 HZ
+# This file is distributed under the same license as the evince package.
+# Baurzhan Muftakhidinov <[email protected]>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-08-18 11:29+0000\n"
+"PO-Revision-Date: 2010-08-23 22:35+0600\n"
+"Last-Translator: Baurzhan Muftakhidinov <[email protected]>\n"
+"Language-Team: Kazakh <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"X-Poedit-Language: Kazakh\n"
+"X-Poedit-Country: KAZAKHSTAN\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Comic book тарқату үшін “%s” командасын жөнелту қатесі: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Comic book тарқату үшін “%s” командасы қатемен аяқталды."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "“%s” командасы дұрыс аяқталмады"
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Comic book MIME түрі емес: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Comic book осы түрін тарқату үшін керек команда табылмады"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Белгісіз MIME түрі"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Файл зақымдалған"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Архивте файлдар жоқ"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "%s архивінде суреттер табылмады"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "“%s” өшіру кезінде қате орын алды."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "%s қатесі"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Comic Books"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu құжатының пішімі қате"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid "The document is composed of several files. One or more of these files cannot be accessed."
+msgstr "Бұл құжат бірнеше файлдан жасалған. Осы файлдардың бір не бірнешеуі қолжетерсіз."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu құжаттары"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI құжатының пішімі қате"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI құжаттары"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Бұл жұмыс еркін (Public Domain)"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Иә"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Жоқ"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Белгісіз қаріп түрі"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Аты жоқ"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Кеңейтілген құрама"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Кеңейтілген"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Кеңейтілген емес"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF құжаттары"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Қате құжат"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress слайдтары"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Қате жоқ"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Жады жеткіліксіз"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "ZIP қолтаңбасы табылмады"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Қате ZIP файлы"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Көп файлды ZIP архивтеріне қолдау жоқ"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Файлды ашу мүмкін емес"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Файлдан ақпаратты оқу мүмкін емес"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "ZIP архивінде файл табылмады"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Белгісіз қате"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "“%s” құжатын жүктеу сәтсіз"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "“%s” құжатын сақтау сәтсіз"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript құжаттары"
+
+#: ../libdocument/ev-attachment.c:304
+#: ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "“%s” салынымын сақтау сәтсіз: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "“%s” салынымын ашу сәтсіз: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "“%s” салынымын ашу сәтсіз"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "%s (%s) файл пішіміне қолдау жоқ"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Барлық құжаттар"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Барлық файлдар"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Уақытша файлды жасау сәтсіз: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Уақытша буманы жасау қатесі: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Файл дұрыс .desktop файлы емес"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Белгісіз desktop файлдың нұсқасы '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s қосылу"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Қолданба команда жолында құжаттарды қабылдамайды"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Белгісіз қосу опциясы: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Құжат URI-ін 'Type=Link' desktop элементіне беру мүмкін емес"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Жөнелтілетін элемент емес"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Сессиялар менеджеріне байланыстарды сөндіру"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Сақталған баптаулары бар файлды көрсету"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+#: ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "ФАЙЛ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Сессия менеджментінің ID-ін көрсету"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Сессияны басқару опциялары:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Сессияны басқару опцияларын көрсету"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s” көрсету"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "Сай_мандар панеліне жылжыту"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Таңдалған нәрсені саймандар панеліне апару"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "Са_ймандар панелінен өшіру"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Таңдалған нәрсені саймандар панелінен өшіру"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "Саймандар панелін ө_шіру"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Таңдалған саймандар панелін өшру"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Ажыратқыш"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48
+#: ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "Жақсырақ сыю"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Парақ еніне созу"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1
+#: ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149
+#: ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Құжаттарды қараушысы"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Көппарақты құжаттарды қарау"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Құжат рұқсаттарын елемеу"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Құжат рұқсаттарын елемеу, көшірме жасау не баспаға шығару рұқсаттары сияқты"
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Уақытша файлды өшіру"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Баспаға шығару баптаулар файлы"
+
+#: ../previewer/ev-previewer.c:144
+#: ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "MATE құжаттарды алдын-ала қараушысы"
+
+#: ../previewer/ev-previewer-window.c:91
+#: ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "Құжатты баспаға шығару сәтсіз"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Ерекшеленген '%s' принтері табылмады"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284
+#: ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "А_лдыңғы парақ"
+
+#: ../previewer/ev-previewer-window.c:285
+#: ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "Алдыңғы параққа өту"
+
+#: ../previewer/ev-previewer-window.c:287
+#: ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "К_елесі парақ"
+
+#: ../previewer/ev-previewer-window.c:288
+#: ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "Келесі параққа өту"
+
+#: ../previewer/ev-previewer-window.c:291
+#: ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "Құжатты үлкейту"
+
+#: ../previewer/ev-previewer-window.c:294
+#: ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "Құжатты кішірейту"
+
+#: ../previewer/ev-previewer-window.c:297
+#: ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Баспаға шығару"
+
+#: ../previewer/ev-previewer-window.c:298
+#: ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "Бұл құжатты баспаға шығару"
+
+#: ../previewer/ev-previewer-window.c:342
+#: ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "_Жақсырақ сыю"
+
+#: ../previewer/ev-previewer-window.c:343
+#: ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "Ағымдағы құжатты терезені толығымен алатындай етіп жазық қылу"
+
+#: ../previewer/ev-previewer-window.c:345
+#: ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "Парақ е_ніне созу"
+
+#: ../previewer/ev-previewer-window.c:346
+#: ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "Ағымдағы құжатты терезе енін толығымен алатындай етіп жазық қылу"
+
+#: ../previewer/ev-previewer-window.c:558
+#: ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "Парақ"
+
+#: ../previewer/ev-previewer-window.c:559
+#: ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "Парақты таңдау"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Құжат"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Атауы:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Орналасуы:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Тақырыбы:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Авторы:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Кілт сөздер:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Өндірген:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Жасаған:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Жасалған:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Түзетілген:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Парақтар саны:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Ыңғайлатылған:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Пішімі:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Қауіпсіздік:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Қағаз өлшемі:"
+
+#: ../properties/ev-properties-view.c:188
+#: ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Ешнәрсе"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f мм"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f дюйм"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Тік (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Жатық (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d, барлығы %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "барлығы %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76
+#: ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Жүктеу..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Баспаға шығаруға дайындау..."
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Аяқтау..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Басылуда парақ № %d, барлығы %d..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Бұл принтер баспаға шығаруды қолдамайды."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Парақтар таңдауы қате"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Ескерту"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Сіздің баспаға шығару парақтар аралығында бірде-бір парақ жоқ"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Парақты масштабтау"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Баспаға шығарылатын аймаққа дейін кішірейту"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Баспаға шығарылатын аймаққа сыйдыру"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as required to fit the printable area of the printer page.\n"
+msgstr ""
+"Ерекшеленген принтер парағына сыю үшін парақты масштабтау. Келесі нұсқалардың біреуін таңдаңыз:\n"
+"\n"
+"• \"Ешнәрсе\": Парақтар өзгертілмейді.\n"
+"\n"
+"• \"Баспаға шығарылатын аймаққа дейін кішірейту\": Баспаға шығатын аймақтан үлкен болған құжат парақтары оған дейін кішірейтіледі.\n"
+"\n"
+"• \"Баспаға шығарылатын аймаққа сыйдыру\": Принтер парағына сыю үшін құжат парақтары үлкейтіледі не кішірейтіледі.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Авто айналдыру мен ортаға туралау"
+
+#: ../libview/ev-print-operation.c:1885
+msgid "Rotate printer page orientation of each page to match orientation of each document page. Document pages will be centered within the printer page."
+msgstr "Принтер мен құжат парақтарының бағдары сәйкес болу үшін әр парақты айналдыру. Құжат парақтары принтер парағы ортасымен тураланады."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Құжат парағының өлшемн қолданып, парақ өлшемін таңдау"
+
+#: ../libview/ev-print-operation.c:1892
+msgid "When enabled, each page will be printed on the same size paper as the document page."
+msgstr "Қосулы тұрса, әр парақ құжаттағы параққа сәйкес өлшемді қағазға басылады."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Парақтарды басқару"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "%d парағын баспаға шығару қатесі: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Жоғары айналдыру"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Төмен айналдыру"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Көріністі жоғары айналдыру"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Көріністі төмен айналдыру"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Құжат көрінісі"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Параққа өту:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Презентация соңы. Шығу үшін шертіңіз."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Бірінші параққа өту"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Алдыңғы параққа өту"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Келесі параққа өту"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Соңғы параққа өту"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Параққа өту"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Табу"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "%s парағына өту"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "%s жеріне өту, “%s” файлында"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” файлына өту"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "%s жөнелту"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Іздеу:"
+
+#: ../shell/eggfindbar.c:329
+#: ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "Ал_дыңғысын табу"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Ізделетін мәтіннің алдыңғы кездесуін табу"
+
+#: ../shell/eggfindbar.c:337
+#: ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "Ке_лесіні табу"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Ізделетін мәтіннің келесі кездесуін табу"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Р_егистрге тәуелді іздеу"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Регистрге тәуелді іздеуді қосу/сөндіру"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Таңбаша:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Мәлімдеме"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Пікір"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Кілт"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Көмек"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Жаңа параграф"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Параграф"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Кірістіру"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Қиылысу"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Шеңбер"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Белгісіз"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Аңдатпа қасиеттері"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Түс:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Стилі:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Мөлдір"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Мөлдір емес"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Терезенің бастапқы қалпы:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Ашу"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Жабу"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Презентация режимінде орындалу"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s құжаты үшін пароль"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Айналдыруда %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d құжат түрлендірілді, барлығы %d"
+
+#: ../shell/ev-convert-metadata.c:165
+#: ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Метаақпарат айналдыруда"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid "The metadata format used by Evince has changed, and hence it needs to be migrated. If the migration is cancelled the metadata storage will not work."
+msgstr "Evince қолданатын метаақпарат пішімі өзгертілген, сол үшін оны айналдыру керек. Егер айналдырудан бас тартылса, метаақпарат қоры жұмыс істемейді."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Соңғы қолданылған құжатты ашу"
+
+#: ../shell/ev-password-view.c:144
+msgid "This document is locked and can only be read by entering the correct password."
+msgstr "Құжатт блокталған, және оны ашу үшін парольді енгізу керек."
+
+#: ../shell/ev-password-view.c:153
+#: ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "Құжатты б_локтаудан босату"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Парольді енгізіңіз"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Пароль керек"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "“%s” құжаты блокталған және оны ашу үшін пароль керек."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Пароль:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Парольді _көп ұзамай ұмыту"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Шыққанға дейін сақ_тау"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Әрқаша_нға есте сақтау"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Қасиеттері"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Жалпы"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Қаріптер"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Құжат лицензиясы"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Қаріп"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Қаріп ақпаратын жинау… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Қолдану шарттары"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Мәтіндік лицензия"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Кейінгі ақпарат"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Тізім"
+
+#: ../shell/ev-sidebar-annotations.c:203
+#: ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Аңдатпалар"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Мәтін"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Мәтіндік пікірді қосу"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Қосу"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Құжатта аңдатпалар жоқ"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Парақ %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Салынымдар"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Қабаттар"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Баспаға шығару..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Мазмұны"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Үлгілер"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "Парақ %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "Парақ %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "Құжатта парақтар жоқ"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "Құжатта тек бос парақтар бар"
+
+#: ../shell/ev-window.c:1627
+#: ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "Құжатты ашу мүмкін емес"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Құжатты “%s” ішінен жүктеу"
+
+#: ../shell/ev-window.c:1906
+#: ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Құжат жүктеліп алынуда (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "Қашықтағы файлды жүктеу сәтсіз."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Құжатты %s ішінен қайта жүктеу"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "Құжатты қайта жүктеу сәтсіз."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "Құжатты ашу"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "Құжатты %s ішіне сақтау"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Салынымды %s ішіне сақтау"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "Суретті %s ішіне сақтау"
+
+#: ../shell/ev-window.c:2664
+#: ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Файлды “%s” етіп сақтау мүмкін емес."
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Құжатты жүктеу (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Салынымды жүктеу (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Суретті жүктеу (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "Көшірмесін сақтау"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "Кезекте %d жұмыс бар"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "“%s” жұмысын басып шығару"
+
+#: ../shell/ev-window.c:3402
+msgid "Document contains form fields that have been filled out. If you don't save a copy, changes will be permanently lost."
+msgstr "Құжатта толтырылған форма өрістері бар. Көшірмесін сақтамасаңыз, өзгерістер жоғалады."
+
+#: ../shell/ev-window.c:3406
+msgid "Document contains new or modified annotations. If you don't save a copy, changes will be permanently lost."
+msgstr "Құжатта жаңа не түзетілген аңдатпалар бар. Көшірмесін сақтамасаңыз, өзгерістер жоғалады."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Жабу алдында “%s” құжатының көшірмесін сақтау керек пе?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "Сақта_май-ақ жабу"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "Кө_шірмесін сақтау"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Жабу алдында “%s” жұмысын басып шығарудың аяқталуын күту керек пе?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "Қазір %d басып шығару жұмысы белсенді. Жабу алдында олардың аяқталуын күту керек пе?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Терезені жапсаңыз, кезектегі жұмыстар баспаға шығарылмай қалады."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "_Баспадан бас тарту мен жабу"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "Баспаны а_яқтаудан кейін жабу"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "Панельдер түзетушісі"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "Көмекті көрсету кезінде қате кетті"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Құжаттар қараушысы\n"
+"Қолдануда %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid "Evince 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.\n"
+msgstr "Evince еркін бағдарлама; сіз оны Free Software Foundation шығарған GNU General Public License аясында еркін тарата не/және өзгерте аласыз; лицензия нұсқасы 2 не (тандауыңызша) кез-келген кейін шыққан.\n"
+
+#: ../shell/ev-window.c:4567
+msgid "Evince 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.\n"
+msgstr "Evince пайдалы болады деген сеніммен таратылады, бірақ ЕШҚАНДАЙ КЕПІЛДЕМЕ берілмейді; КОММЕРЦИЯЛЫҚ ҚҰНДЫЛЫҚ немесе белгілі бір МАҚСАТТАРҒА СӘЙКЕС КЕЛЕТІНІ үшін де. Көбірек білу үшін GNU General Public License қараңыз.\n"
+
+#: ../shell/ev-window.c:4571
+msgid "You should have received a copy of the GNU General Public License along with Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr "Сіз осы Evince бағдарласымен бірге GNU General Public License көшірмесін алуыңыз керек еді; олай болмаса, Free Software Foundation, Inc. ұйымына хабарласыңыз, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 Evince авторлары"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr "Baurzhan Muftakhidinov <[email protected]>, 2010"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d бұл парақтан табылды"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "Табылмады"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% іздеу үшін қалды"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "_Файл"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "Тү_зету"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "_Түрі"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "Ө_ту"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "_Көмек"
+
+#. File menu
+#: ../shell/ev-window.c:5402
+#: ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "А_шу…"
+
+#: ../shell/ev-window.c:5403
+#: ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "Бар болып тұрған құжатты ашу"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "Кө_шірмесін ашу"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "Ағымдағы құжаттың көшірмесін жаңа терезеде ашу"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "Көшір_месін сақтау..."
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "Ағымдағы құжаттың көшірмесін сақтау"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "Ба_спаға шығару…"
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "Қас_иеттері"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "Б_арлығын таңдау"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "І_здеу…"
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "Құжаттан сөзді не мәтінді табу"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "Сай_мандар панелі"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "С_олға бұру"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "Оңғ_а бұру"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "Ағы_мдағы баптауларды негізгі ретінде сақтау"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "Қа_йта жүктеу"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "Құжатты қайта жүктеу"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "Автоа_йналдыру"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "_Бірінші парақ"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "Бірінші параққа өту"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "С_оңғы парақ"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "Соңғы параққа өту"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "Құра_масы"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "О_сы туралы"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "Толық экраннан шығу"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "Толық экраннан шығу"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "Презентацияны бастау"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "Презентацияны бастау"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "_Панель"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "Саймандар панелін көрсету не жасыру"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "Бү_йір панелі"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "Бүйір панелін көрсету не жасыру"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "Ү_зіліссіз"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "Түгел құжатты көрсету"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "Қ_ос"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "Бір уақытта екі парақты көрсету"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "Т_олық экранға"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "Терезені бүкіл экранды алатындай жазық қылу"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "Пре_зентация"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "Құжатты презентация ретінде жіберу"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "_Терістелген түстер"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "Түстері терістелген парақтарды көрсету"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "Сі_лтемені ашу"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "Ө_ту"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "Жаңа тере_зеде ашу"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "Сілтеме адр_есін көшіру"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "_Суретті қалайша сақтау…"
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "Сурет_ті көшіру"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "Аңдатпа қасиеттері..."
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "Сал_ынымды ашу"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "С_алынымды қалайша сақтау…"
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "Үлкейту"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "Үлкейту деңгейін баптау"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "Навигация"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "Артқа"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "Қаралған беттер арасында жылжу"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "Алдыңғы"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "Келесі"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "Үлкейту"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "Кішірейту"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "Еніне дейін созу"
+
+#: ../shell/ev-window.c:5890
+#: ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "Сыртқы қолданданы жөнелту мүмкін емес."
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "Сыртқы сілтемені ашу мүмкін емес"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "Суретті сақтау үшін сәйкес пішімді табу мүмкін емес"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "Суретті сақтау мүмкін емес."
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "Суретті сақтау"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "Салынымды ашу мүмкін емес"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "Салынымды сақтау мүмкін емес."
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "Салынымды сақтау"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Пароль керек"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "By extension"
+
+#: ../shell/main.c:69
+#: ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATE құжаттарды қараушысы"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Көрсету үшін құжат парағының белгісі."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Көрсету үшін құжат парағының нөмірі."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMBER"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Evince толық экран режимінде жөнелту"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Evince презентация режимінде жөнелту"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Evince алдын-ала қараушы режимінде жөнелту"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Құжаттан табу үшін сөз не мәтін"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[ФАЙЛ…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid "Boolean options available: true enables thumbnailing and false disables the creation of new thumbnails"
+msgstr "Логикалық опциялар қолдануда: true үлгілерді жасауды іске қосады, ал false сөндіреді."
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF құжаттарын алдын-ала қарау үлгілерін жасауды іске қосу"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF құжаттарын алдын-ала қарау үлгілерін жасау командасы"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid "Valid command plus arguments for the PDF Document thumbnailer. See Caja thumbnailer documentation for more information."
+msgstr "PDF құжаттарын алдын-ала қарау үлгілерін жасау үшін керек команда мен оның аргументтері. Көбірек білу үшін Caja thumbnailer құжаттамасын қараңыз."
+
diff --git a/po/kn.po b/po/kn.po
new file mode 100644
index 00000000..a3bbe371
--- /dev/null
+++ b/po/kn.po
@@ -0,0 +1,1620 @@
+# translation of evince.master.kn.po to Kannada
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Shankar Prasad <[email protected]>, 2008, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.master.kn\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-21 16:14+0530\n"
+"PO-Revision-Date: 2010-07-23 13:18+0530\n"
+"Last-Translator: Shankar Prasad <[email protected]>\n"
+"Language-Team: LC_MESSAGES <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 1.0\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"ಕಾಮಿಕ್ ಪುಸ್ತಕವನ್ನು ಸಂಕುಚನದಿಂದ ಹೊರತೆಗೆಯಲು ಆಜ್ಞೆ “%s” ಅನ್ನು ಆರಂಭಿಸುವಲ್ಲಿ ದೋಷ "
+"ಉಂಟಾಗಿದೆ: %s"
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "ಕಾಮಿಕ್ ಪುಸ್ತಕವನ್ನು ಸಂಕುಚನದಿಂದ ಹೊರತೆಗೆಯುವಲ್ಲಿ ಆಜ್ಞೆ “%s” ವಿಫಲಗೊಂಡಿದೆ."
+
+#: ../backend/comics/comics-document.c:183
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "ಆಜ್ಞೆ “%s” ಸಾಮಾನ್ಯ ರೀತಿಯಲ್ಲಿ ಕೊನೆಗೊಂಡಿಲ್ಲ."
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "ಒಂದು ಕಾಮಿಕ್ ಪುಸ್ತಕದ MIME ಬಗೆಯಲ್ಲ: %s"
+
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "ಈ ಬಗೆಯ ಕಾಮಿಕ್ ಪುಸ್ತಕವನ್ನು ಸಂಕುಚನದಿಂದ ಹೊರತೆಗೆಯಲು ಸೂಕ್ತವಾದ ಆಜ್ಞೆಯು ಕಂಡುಬಂದಿಲ್ಲ"
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "ಗೊತ್ತಿರದ MIME ಬಗೆ"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "ಕಡತವು ಹಾಳಾಗಿದೆ"
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "ಆರ್ಕೈವಿನಲ್ಲಿ ಯಾವುದೆ ಕಡತಗಳು ಇಲ್ಲ"
+
+#: ../backend/comics/comics-document.c:474
+#, c-format
+msgid "No images found in archive %s"
+msgstr "ಆರ್ಕೈವ್ %s ನಲ್ಲಿ ಯಾವುದೆ ಚಿತ್ರಗಳು ಕಂಡುಬಂದಿಲ್ಲ"
+
+#: ../backend/comics/comics-document.c:718
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "“%s” ಅನ್ನು ಅಳಿಸುವಲ್ಲಿ ಒಂದು ದೋಷ ಉಂಟಾಗಿದೆ."
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr "ದೋಷ %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "ಕಾಮಿಕ್ ಪುಸ್ತಕಗಳು"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu ದಸ್ತಾವೇಜು ಸರಿಯಲ್ಲದ ವಿನ್ಯಾಸವನ್ನು ಹೊಂದಿದೆ"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"ದಸ್ತಾವೇಜು ಹಲವಾರು ಕಡತಗಳಿಂದ ಮಾಡಲ್ಪಟ್ಟಿದೆ. ಒಂದು ಅಥವ ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚಿನ ಇಂತಹ ಕಡತಗಳನ್ನು "
+"ನಿಲುಕಿಸಿಕೊಳ್ಳಲಾಗುತ್ತಿಲ್ಲ."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Djvu ದಸ್ತಾವೇಜುಗಳು"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI ದಸ್ತಾವೇಜು ಸರಿಯಲ್ಲದ ವಿನ್ಯಾಸವನ್ನು ಹೊಂದಿದೆ"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI ದಸ್ತಾವೇಜುಗಳು"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr ""
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "ಹೌದು"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "ಇಲ್ಲ"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "ಬಗೆ 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "ಬಗೆ 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "ಬಗೆ 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "ಟ್ರೂಬಗೆಯ"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "ಬಗೆ 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "ಬಗೆ 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "ಟ್ರೂಬಗೆಯ (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "ಗೊತ್ತಿರದ ಅಕ್ಷರಶೈಲಿಯ ಬಗೆ"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "ಹೆಸರಿಲ್ಲದ"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "ಅಡಕಗೊಳಿಸಲಾದ ಸಬ್‍ಸೆಟ್"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "ಅಡಕಗೊಳಿಸಲಾದ"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "ಅಡಕಗೊಳಿಸದೆ ಇರುವ"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF ದಸ್ತಾವೇಜುಗಳು"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "ಅಮಾನ್ಯ ದಸ್ತಾವೇಜು"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "ಇಂಪ್ರೆಸ್‌ ಜಾರುಫಲಕಗಳು(ಸ್ಲೈಡ್‌ಗಳು)"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "ದೋಷವಿಲ್ಲ"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "ಸಾಕಷ್ಟು ಮೆಮೊರಿಯು ಲಭ್ಯವಿಲ್ಲ"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "ಝಿಪ್ ಸಿಗ್ನೇಚರನ್ನು ಪತ್ತೆ ಮಾಡಲಾಗಲಿಲ್ಲ"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "ಅಮಾನ್ಯ ಝಿಪ್ ಕಡತ"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "ಬಹು ಕಡತ ಝಿಪ್‍ಗಳಿಗೆ ಬೆಂಬಲವಿಲ್ಲ"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "ಕಡತವನ್ನು ತೆರೆಯಲಾಗಲಿಲ್ಲ"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "ಕಡತದಿಂದ ದತ್ತಾಂಶವನ್ನು ಓದಲಾಗಲಿಲ್ಲ"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "ಝಿಪ್ ಆರ್ಕೈವಿನಲ್ಲಿ ಕಡತವನ್ನು ಪತ್ತೆ ಮಾಡಲಾಗಲಿಲ್ಲ"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "ಅಜ್ಞಾತ ದೋಷ"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "“%s” ದಸ್ತಾವೇಜನ್ನು ಲೋಡ್ ಮಾಡಲು ವಿಫಲಗೊಂಡಿದೆ"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "“%s” ದಸ್ತಾವೇಜನ್ನು ಉಳಿಸಲು ವಿಫಲಗೊಂಡಿದೆ"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "ಪೋಸ್ಟ್‍ಸ್ಕ್ರಿಪ್ಟ್ ದಸ್ತಾವೇಜುಗಳು"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "ಅಟ್ಯಾಚ್‍ಮೆಂಟ “%s” ಅನ್ನು ಉಳಿಸಲಾಗಿಲ್ಲ: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "ಅಟ್ಯಾಚ್‍ಮೆಂಟ “%s” ಅನ್ನು ತೆರೆಯಲಾಗಿಲ್ಲ: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "ಅಟ್ಯಾಚ್‍ಮೆಂಟ “%s” ಅನ್ನು ತೆರೆಯಲಾಗಿಲ್ಲ"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "ಕಡತದ ಬಗೆ %s (%s)ಗೆ ಬೆಂಬಲವಿಲ್ಲ"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "ಎಲ್ಲಾ ದಸ್ತಾವೇಜುಗಳು"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "ಎಲ್ಲಾ ಕಡತಗಳು"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "ತಾತ್ಕಾಲಿಕ ಕೋಶವನ್ನು ರಚಿಸಲು ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "ತಾತ್ಕಾಲಿಕ ಕೋಶವನ್ನು ರಚಿಸಲು ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "ಕಡತವು ಒಂದು ಮಾನ್ಯವಾದ .desktop ಕಡತವಾಗಿಲ್ಲ"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "ಗುರುತಿಸಲಾಗದ ಗಣಕತೆರೆ ಕಡತ ಆವೃತ್ತಿ '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s ಅನ್ನು ಆರಂಭಿಸಲಾಗುತ್ತಿದೆ"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "ಅನ್ವಯವು ಆಜ್ಞಾ ಸಾಲಿನಲ್ಲಿ ಯಾವುದೆ ದಸ್ತಾವೇಜುಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುವುದಿಲ್ಲ"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "ಗುರುತಿಸಲಾಗದ ಆರಂಭ ಆಯ್ಕೆ: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "ಒಂದು 'Type=Link' ಗಣಕತೆರೆ ನಮೂದಿಗಾಗಿ ದಸ್ತಾವೇಜು URIಗಳನ್ನು ಒದಗಿಸಲಾಗಿಲ್ಲ"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "ಆರಂಭಿಸಬಹುದಾದ ಅಂಶವಾಗಿಲ್ಲ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "ಅಧಿವೇಶನ ನಿರ್ವಾಹಕನೊಂದಿಗ ಸಂಪರ್ಕವನ್ನು ಕಡಿದುಹಾಕು"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "ಉಳಿಸಲಾದ ಸಂರಚನೆಯನ್ನು ಹೊಂದಿರುವ ಕಡತವನ್ನು ಸೂಚಿಸಿ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "ಅಧಿವೇಶನ ನಿರ್ವಹಣಾ ಐಡಿಯನ್ನು ಸೂಚಿಸಿ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "ಅಧಿವೇಶನ ನಿರ್ವಹಣಾ ಆಯ್ಕೆಗಳು:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "ಅಧಿವೇಶನ ನಿರ್ವಹಣಾ ಆಯ್ಕೆಗಳನ್ನು ತೋರಿಸು"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s” ಅನ್ನು ತೋರಿಸು"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "ಉಪಕರಣಪಟ್ಟಿಯಲ್ಲಿ ವರ್ಗಾಯಿಸು(_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "ಆರಿಸಲಾದ ಅಂಶವನ್ನು ಉಪಕರಣ ಪಟ್ಟಿಯಲ್ಲಿ ವರ್ಗಾಯಿಸು"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "ಉಪಕರಣ ಪಟ್ಟಿ ಇಂದ ತೆಗೆದು ಹಾಕು(_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "ಆರಿಸಲಾದ ಅಂಶವನ್ನು ಉಪಕರಣ ಪಟ್ಟಿ ಇಂದ ತೆಗೆದು ಹಾಕು"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "ಉಪಕರಣಪಟ್ಟಿಯನ್ನು ಅಳಿಸಿಹಾಕು(_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "ಆರಿಸಲಾದ ಉಪಕರಣ ಪಟ್ಟಿಯನ್ನು ತೆಗೆದು ಹಾಕು"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "ವಿಭಜಕ"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+msgid "Running in presentation mode"
+msgstr "ಪ್ರದರ್ಶನ ಕ್ರಮದಲ್ಲಿ ಚಲಾಯಿಸಲಾಗುತ್ತಿದೆ"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5302
+msgid "Best Fit"
+msgstr "ಉತ್ತಮವಾಗಿ ಹೊಂದುವ"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "ಪುಟ ಅಗಲಕ್ಕೆ ಹೊಂದಿಸು"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4168
+#: ../shell/ev-window-title.c:149 ../shell/main.c:287
+#, c-format
+msgid "Document Viewer"
+msgstr "ದಸ್ತಾವೇಜು ವೀಕ್ಷಕ"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "ಬಹು-ಪುಟದ ದಸ್ತಾವೇಜನ್ನು ವೀಕ್ಷಿಸು"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "ದಸ್ತಾವೇಜು ನಿರ್ಬಂಧಗಳನ್ನು ಅತಿಕ್ರಮಿಸು"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "ಕಾಪಿ ಮಾಡುವ ಅಥವ ಮುದ್ರಿಸುವಂತಹ ದಸ್ತಾವೇಜು ನಿರ್ಬಂಧಗಳನ್ನು ಅತಿಕ್ರಮಿಸು."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "ತಾತ್ಕಾಲಿಕ ಕಡತವನ್ನು ಅಳಿಸು"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "ಮುದ್ರಣ ಸಿದ್ಧತೆಗಳ ಕಡತ"
+
+#: ../previewer/ev-previewer.c:143 ../previewer/ev-previewer.c:177
+msgid "MATE Document Previewer"
+msgstr "MATE ದಸ್ತಾವೇಜು ಪೂರ್ವವೀಕ್ಷಕ"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:2960
+msgid "Failed to print document"
+msgstr "ದಸ್ತಾವೇಜನ್ನು ಮುದ್ರಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "ಆಯ್ಕೆ ಮಾಡಲಾದ ಮುದ್ರಕ '%s' ಕಂಡುಬಂದಿಲ್ಲ"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5051
+msgid "_Previous Page"
+msgstr "ಹಿಂದಿನ ಪುಟ(_P)"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5052
+msgid "Go to the previous page"
+msgstr "ಹಿಂದಿನ ಪುಟಕ್ಕೆ ತೆರಳು"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5054
+msgid "_Next Page"
+msgstr "ಮುಂದಿನ ಪುಟ(_N)"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5055
+msgid "Go to the next page"
+msgstr "ಮುಂದಿನ ಪುಟಕ್ಕೆ ತೆರಳು"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5038
+msgid "Enlarge the document"
+msgstr "ದಸ್ತಾವೇಜನ್ನು ದೊಡ್ಡದಾಗಿಸು"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5041
+msgid "Shrink the document"
+msgstr "ದಸ್ತಾವೇಜನ್ನು ಕಿರಿದಾಗಿಸು"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "ಮುದ್ರಿಸು"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5009
+msgid "Print this document"
+msgstr "ಈ ದಸ್ತಾವೇಜನ್ನು ಮುದ್ರಿಸು"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5153
+msgid "_Best Fit"
+msgstr "ಉತ್ತಮವಾಗಿ ಹೊಂದುವ(_B)"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5154
+msgid "Make the current document fill the window"
+msgstr "ಈಗಿನ ದಸ್ತಾವೇಜನ್ನು ವಿಂಡೊಗೆ ಹೊಂದಿಕೊಳ್ಳುವಂತೆ ಮಾಡು"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5156
+msgid "Fit Page _Width"
+msgstr "ಪುಟ ಅಗಲಕ್ಕೆ ಹೊಂದಿಸು(_W)"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5157
+msgid "Make the current document fill the window width"
+msgstr "ಈಗಿನ ದಸ್ತಾವೇಜು ವಿಂಡೊದ ಅಗಲಕ್ಕೆ ಹೊಂದಿಕೊಳ್ಳುವಂತೆ ಮಾಡು"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5224
+msgid "Page"
+msgstr "ಪುಟ"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5225
+msgid "Select Page"
+msgstr "ಪುಟವನ್ನು ಆರಿಸು"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "ದಸ್ತಾವೇಜು"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "ಶೀರ್ಷಿಕೆ:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "ಸ್ಥಳ:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "ವಿಷಯ:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "ಕತೃ:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "ಮುಖ್ಯಪದಗಳು:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "ಉತ್ಪಾದಕರು:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "ಸೃಜಿಸಿದವರು:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "ಸೃಜಿಸಲಾಗಿದ್ದು:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "ಮಾರ್ಪಡಿಸಲಾಗಿದ್ದು:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "ಪುಟಗಳ ಸಂಖ್ಯೆ:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "ಪ್ರಶಸ್ತಗೊಳಿಸಲಾಗಿದ್ದು:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "ವಿನ್ಯಾಸ:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "ಸುರಕ್ಷತೆ:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "ಕಾಗದದ ಗಾತ್ರ:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1868
+msgid "None"
+msgstr "ಯಾವುದೂ ಇಲ್ಲ"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:284
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f ಮಿಮಿ"
+
+#: ../properties/ev-properties-view.c:288
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f ಇಂಚು"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, ಭಾವಚಿತ್ರ (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, ಪ್ರಕೃತಿಚಿತ್ರ (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d, %d ರಲ್ಲಿ)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "%d ರಲ್ಲಿ"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "ಮುದ್ರಿಸಲು ತಯಾರಾಗುತ್ತಿದೆ…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿದೆ…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "%d ಪುಟವನ್ನು (%d ನಲ್ಲಿ) ಮುದ್ರಿಸಲಾಗುತ್ತಿದೆ…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "ಈ ಮುದ್ರಕದಲ್ಲಿ ಮುದ್ರಿಸುವುದು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "ಅಮಾನ್ಯ ಪುಟದ ಆಯ್ಕೆ"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "ಎಚ್ಚರಿಕೆ"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "ನೀವು ಮುದ್ರಿಸಲು ಆಯ್ಕೆ ಮಾಡಿದ ಪುಟಗಳು ವ್ಯಾಪ್ತಿಯಲ್ಲಿ ಯಾವುದೆ ಪುಟಗಳಿಲ್ಲ"
+
+#: ../libview/ev-print-operation.c:1863
+msgid "Page Scaling:"
+msgstr "ಪುಟದಗಾತ್ರಬದಲಾವಣೆ:"
+
+#: ../libview/ev-print-operation.c:1869
+msgid "Shrink to Printable Area"
+msgstr "ಮುದ್ರಿಸಬಹುದಾದ ಜಾಗಕ್ಕೆ ಕುಗ್ಗಿಸು"
+
+#: ../libview/ev-print-operation.c:1870
+msgid "Fit to Printable Area"
+msgstr "ಮುದ್ರಿಸಬಹುದಾದ ಜಾಗಕ್ಕೆ ಸರಿಹೊಂದಿಸು"
+
+#: ../libview/ev-print-operation.c:1873
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"ಆಯ್ಕೆ ಮಾಡಲಾದ ಮುದ್ರಕ ಪುಟಕ್ಕೆ ಸರಿಹೊಂದುವಂತೆ ದಸ್ತಾವೇಜಿನ ಪುಟಗಳ ಗಾತ್ರವನ್ನು ಬದಲಾಯಿಸಿ. ಈ "
+"ಕೆಳಗಿನವುಗಳಲ್ಲಿ ಒಂದನ್ನು ಆಯ್ಕೆ ಮಾಡಿ:\n"
+"\n"
+"• \"ಯಾವುದೂ ಇಲ್ಲ\": ಯಾವುದೆ ಪುಟದ ಗಾತ್ರ ಬದಲಾವಣೆಯನ್ನು ಮಾಡಲಾಗುವುದಿಲ್ಲ.\n"
+"\n"
+"• \"ಮುದ್ರಿಸಬಹುದಾದ ಜಾಗಕ್ಕೆ ಕುಗ್ಗಿಸು\": ಮುದ್ರಿಸಬಹುದಾದ ಜಾಗಕ್ಕಿಂತ ದೊಡ್ಡದಾಗಿರುವ ದಸ್ತಾವೇಜಿನ "
+"ಪುಟಗಳನ್ನು ಮುದ್ರಕ ಪುಟದಲ್ಲಿನ ಮುದ್ರಿಸಬಹುದಾದ ಜಾಗಕ್ಕೆ ಸರಿಹೊಂದುವಂತೆ ಕುಗ್ಗಿಸಲಾಗುತ್ತದೆ.\n"
+"\n"
+"• \"ಮುದ್ರಿಸಬಹುದಾದ ಜಾಗಕ್ಕೆ ಸರಿಹೊಂದಿಸು\":ಮುದ್ರಿಸಬಹುದಾದ ಜಾಗಕ್ಕಿಂತ ದೊಡ್ಡದಾಗಿರುವ ದಸ್ತಾವೇಜಿನ "
+"ಪುಟಗಳನ್ನು ಮುದ್ರಕ ಪುಟದಲ್ಲಿನ ಮುದ್ರಿಸಬಹುದಾದ ಜಾಗಕ್ಕೆ ಸರಿಹೊಂದುವಂತೆ ಹಿಗ್ಗಿಸಲಾಗುತ್ತದೆ ಹಾಗು "
+"ಕುಗ್ಗಿಸಲಾಗುತ್ತದೆ.\n"
+
+#: ../libview/ev-print-operation.c:1885
+msgid "Auto Rotate and Center"
+msgstr "ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತಿರುಗಿಸು ಹಾಗು ಮಧ್ಯದಲ್ಲಿ ಇರಿಸು"
+
+#: ../libview/ev-print-operation.c:1888
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"ಪ್ರತಿ ಪುಟದ ಮುದ್ರಣದ ಪುಟದ ವಾಲಿಕೆಯನ್ನು ಪ್ರತಿಯೊಂದು ದಸ್ತಾವೇಜು ಪುಟಕ್ಕೆ ಹೊಂದಿಕೊಳ್ಳುವಂತೆ "
+"ತಿರುಗಿಸಿ. ದಸ್ತಾವೇಜು ಪುಟಗಳನ್ನು ಮುದ್ರಣದ ಪುಟದ ನಡುವಿನಲ್ಲಿ ಇರಿಸಲಾಗುತ್ತದೆ. "
+
+#: ../libview/ev-print-operation.c:1893
+msgid "Select page size using document page size"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1895
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1977
+msgid "Page Handling"
+msgstr "ಪುಟವನ್ನು ನಿಭಾಯಿಸುವಿಕೆ"
+
+#: ../libview/ev-jobs.c:1438
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "%d ಪುಟವನ್ನು ಮುದ್ರಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "ಮೇಲಕ್ಕೆ ಚಲಿಸು"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "ಕೆಳಕ್ಕೆ ಚಲಿಸು"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "ನೋಟವನ್ನು ಮೇಲಕ್ಕೆ ಚಲಿಸು"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "ನೋಟವನ್ನು ಕೆಳಕ್ಕೆ ಚಲಿಸು"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "ದಸ್ತಾವೇಜು ನೋಟ"
+
+#: ../libview/ev-view-presentation.c:668
+msgid "Jump to page:"
+msgstr "ಈ ಪುಟಕ್ಕೆ ಹೋಗು:"
+
+#: ../libview/ev-view-presentation.c:970
+#, fuzzy
+msgid "End of presentation. Click to exit."
+msgstr "ಪ್ರದರ್ಶನದ ಕೊನೆಯನ್ನು ತಲುಪಿದೆ. ನಿರ್ಗಮಿಸಲು ಎಸ್ಕೇಪ್ ಅನ್ನು ಒತ್ತಿ."
+
+#: ../libview/ev-view.c:1727
+msgid "Go to first page"
+msgstr "ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು"
+
+#: ../libview/ev-view.c:1729
+msgid "Go to previous page"
+msgstr "ಹಿಂದಿನ ಪುಟಕ್ಕೆ ತೆರಳು"
+
+#: ../libview/ev-view.c:1731
+msgid "Go to next page"
+msgstr "ಮುಂದಿನ ಪುಟಕ್ಕೆ ತೆರಳು"
+
+#: ../libview/ev-view.c:1733
+msgid "Go to last page"
+msgstr "ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು"
+
+#: ../libview/ev-view.c:1735
+msgid "Go to page"
+msgstr "ಈ ಪುಟಕ್ಕೆ ತೆರಳು"
+
+#: ../libview/ev-view.c:1737
+msgid "Find"
+msgstr "ಪತ್ತೆ ಹಚ್ಚು"
+
+#: ../libview/ev-view.c:1765
+#, c-format
+msgid "Go to page %s"
+msgstr "%s ಪುಟಕ್ಕೆ ತೆರಳು"
+
+#: ../libview/ev-view.c:1771
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "“%s” ಕಡತದಲ್ಲಿನ %s ಕ್ಕೆ ತೆರಳು"
+
+#: ../libview/ev-view.c:1774
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” ಕಡತಕ್ಕೆ ತೆರಳು"
+
+#: ../libview/ev-view.c:1782
+#, c-format
+msgid "Launch %s"
+msgstr "%s ಅನ್ನು ಆರಂಭಿಸು"
+
+#: ../libview/ev-view.c:3926 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "ಪತ್ತೆ ಹಚ್ಚು:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5026
+msgid "Find Pre_vious"
+msgstr "ಹಿಂದಿನದನ್ನು ಪತ್ತೆ ಹಚ್ಚು(_v)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "ಹಿಂದೆ ಕಾಣಿಸುವ ಹುಡುಕು ವಾಕ್ಯವನ್ನು ಪತ್ತೆ ಮಾಡು"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5024
+msgid "Find Ne_xt"
+msgstr "ಮುಂದಿನದನ್ನು ಪತ್ತೆ ಹಚ್ಚು(_x)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "ಮುಂದೆ ಕಾಣಿಸುವ ಹುಡುಕು ವಾಕ್ಯವನ್ನು ಪತ್ತೆ ಮಾಡು"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "ಕೇಸ್ ಸಂವೇದಿ(_a)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "ಕೇಸ್ ಸಂವೇದಿ ಹುಡುಕಾಟದ ನಡುವೆ ಹೊರಳಿಸು"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s ದಸ್ತಾವೇಜಿಗಾಗಿ ಗುಪ್ತಪದ"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "%s ಅನ್ನು ಮಾರ್ಪಡಿಸಲಾಗುತ್ತಿದೆ"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "ಇತ್ತೀಚೆಗೆ ಬಳಸಲಾದ ದಸ್ತಾವೇಜನ್ನು ತೆರೆ"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"ಈ ದಸ್ತಾವೇಜು ಲಾಕ್ ಆಗಿದೆ ಹಾಗು ಒಂದು ಸರಿಯಾದ ಗುಪ್ತಪದವನ್ನು ನಮೂದಿಸಿದಲ್ಲಿ ಮಾತ್ರ ಇದನ್ನು "
+"ಓದಬಹುದಾಗಿದೆ."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "ದಸ್ತಾವೇಜಿನ ಲಾಕನ್ನು ತೆಗೆ(_U)"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "ಗುಪ್ತಪದವನ್ನು ನಮೂದಿಸು"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "ಗುಪ್ತಪದ ಅಗತ್ಯವಿದೆ"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "“%s” ದಸ್ತಾವೇಜು ಲಾಕ್ ಆಗಿದೆ ಹಾಗು ಅದನ್ನು ತೆರೆಯಲು ಒಂದು ಗುಪ್ತಪದದ ಅಗತ್ಯವಿದೆ."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "ಗುಪ್ತಪದ(_P):"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "ಗುಪ್ತಪದವನ್ನು ಈ ಕೂಡಲೆ ಮರೆತು ಬಿಡು(_i)"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "ನೀವು ನಿರ್ಗಮಿಸುವವರೆಗೂ ಗುಪ್ತಪದವನ್ನು ನೆನಪಿಟ್ಟುಕೊಳ್ಳಿ(_l)"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "ಯಾವಾಗಲು ನೆನಪಿಡು(_f)"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "ಗುಣಲಕ್ಷಣಗಳು"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "ಸಾಮಾನ್ಯ"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "ಅಕ್ಷರ ಶೈಲಿಗಳು"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "ದಸ್ತಾವೇಜು ಪರವಾನಗಿ"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "ಅಕ್ಷರಶೈಲಿ"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "ಅಕ್ಷರಶೈಲಿಯ ಮಾಹಿತಿಯನ್ನು ಕಲೆ ಹಾಕುತ್ತಿದೆ ... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "ಬಳಕೆಯ ನಿಯಮಗಳು"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "ಪಠ್ಯ ಪರವಾನಗಿ"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "ಹೆಚ್ಚಿನ ಮಾಹಿತಿ"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "ಅಟ್ಯಾಚ್‍ಮೆಂಟ್‍ಗಳು"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "ಪದರಗಳು"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "ಮುದ್ರಿಸು"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "ಪರಿವಿಡಿ"
+
+#: ../shell/ev-sidebar-thumbnails.c:962
+msgid "Thumbnails"
+msgstr "ತಂಬ್‍ನೈಲ್‍ಗಳು"
+
+#: ../shell/ev-window.c:831
+#, c-format
+msgid "Page %s — %s"
+msgstr "ಪುಟ %s — %s"
+
+#: ../shell/ev-window.c:833
+#, c-format
+msgid "Page %s"
+msgstr "ಪುಟ %s"
+
+#: ../shell/ev-window.c:1277
+msgid "The document contains no pages"
+msgstr "ದಸ್ತಾವೇಜು ಯಾವುದೆ ಹಾಳೆಗಳನ್ನು ಹೊಂದಿಲ್ಲ"
+
+#: ../shell/ev-window.c:1280
+msgid "The document contains only empty pages"
+msgstr "ದಸ್ತಾವೇಜು ಕೇವಲ ಖಾಲಿ ಹಾಳೆಗಳನ್ನು ಹೊಂದಿದೆ"
+
+#: ../shell/ev-window.c:1474 ../shell/ev-window.c:1640
+msgid "Unable to open document"
+msgstr "ದಸ್ತಾವೇಜನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ"
+
+#: ../shell/ev-window.c:1611
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "“%s” ಇಂದ ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ"
+
+#: ../shell/ev-window.c:1753 ../shell/ev-window.c:2030
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "ದಸ್ತಾವೇಜನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ (%d%%)"
+
+#: ../shell/ev-window.c:1786
+#, fuzzy
+msgid "Failed to load remote file."
+msgstr "ದಸ್ತಾವೇಜನ್ನು ಮರು ಲೋಡ್‌ಮಾಡುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ."
+
+#: ../shell/ev-window.c:1974
+#, c-format
+msgid "Reloading document from %s"
+msgstr "%s ಇಂದ ದಸ್ತಾವೇಜನ್ನು ಪುನಃ ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ"
+
+#: ../shell/ev-window.c:2006
+msgid "Failed to reload document."
+msgstr "ದಸ್ತಾವೇಜನ್ನು ಮರು ಲೋಡ್‌ಮಾಡುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ."
+
+#: ../shell/ev-window.c:2161
+msgid "Open Document"
+msgstr "ದಸ್ತಾವೇಜನ್ನು ತೆರೆ"
+
+#: ../shell/ev-window.c:2425
+#, c-format
+msgid "Saving document to %s"
+msgstr "ದಸ್ತಾವೇಜನ್ನು %s ಗೆ ಉಳಿಸಲಾಗುತ್ತಿದೆ"
+
+#: ../shell/ev-window.c:2428
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "ಲಗತ್ತನ್ನು %s ಗೆ ಉಳಿಸಲಾಗುತ್ತಿದೆ"
+
+#: ../shell/ev-window.c:2431
+#, c-format
+msgid "Saving image to %s"
+msgstr "ಚಿತ್ರವನ್ನು %s ಗೆ ಉಳಿಸಲಾಗುತ್ತಿದೆ"
+
+#: ../shell/ev-window.c:2475 ../shell/ev-window.c:2575
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "ಕಡತವನ್ನು “%s” ಆಗಿ ಉಳಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ."
+
+#: ../shell/ev-window.c:2506
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "ದಸ್ತಾವೇಜನ್ನು ಅಪ್‌ಲೋಡ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ (%d%%)"
+
+#: ../shell/ev-window.c:2510
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "ಲಗತ್ತನ್ನು ಅಪ್‌ಲೋಡ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ (%d%%)"
+
+#: ../shell/ev-window.c:2514
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "ಚಿತ್ರವನ್ನು ಅಪ್‌ಲೋಡ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ (%d%%)"
+
+#: ../shell/ev-window.c:2636
+msgid "Save a Copy"
+msgstr "ಒಂದು ಪ್ರತಿಯನ್ನು ಉಳಿಸು"
+
+#: ../shell/ev-window.c:2904
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "ಸರತಿಯಲ್ಲಿ %d ಮುದ್ರಣ ಕಾರ್ಯವು ಬಾಕಿ ಇವೆ"
+msgstr[1] "ಸರತಿಯಲ್ಲಿ %d ಮುದ್ರಣ ಕಾರ್ಯಗಳು ಬಾಕಿ ಇವೆ"
+
+#: ../shell/ev-window.c:3017
+#, c-format
+msgid "Printing job “%s”"
+msgstr "ಮುದ್ರಣ ಕಾರ್ಯ “%s”"
+
+#: ../shell/ev-window.c:3229
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "ಮುಚ್ಚುವ ಮೊದಲು ಮುದ್ರಣ ಕಾರ್ಯ “%s” ವು ಪೂರ್ಣಗೊಳ್ಳುವವರೆಗೂ ಕಾಯಬೇಕೆ?"
+
+#: ../shell/ev-window.c:3232
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"%d ಮುದ್ರಣ ಕಾರ್ಯಗಳು ಸಕ್ರಿಯವಾಗಿದೆ. ಮುಚ್ಚುವ ಮೊದಲು ಮುದ್ರಣವು ಪೂರ್ಣಗೊಳ್ಳುವವರೆಗೂ ಕಾಯಬೇಕೆ?"
+
+#: ../shell/ev-window.c:3244
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "ವಿಂಡೋವನ್ನು ಮುಚ್ಚಿದಲ್ಲಿ, ಬಾಕಿ ಇರುವ ಮುದ್ರಣ ಕಾರ್ಯಗಳು ಮುದ್ರಣಗೊಳ್ಳುವುದಿಲ್ಲ."
+
+#: ../shell/ev-window.c:3248
+msgid "Cancel _print and Close"
+msgstr "ಮುದ್ರಣವನ್ನು ರದ್ದುಗೊಳಿಸು ಹಾಗು ಮುಚ್ಚು(_p)"
+
+#: ../shell/ev-window.c:3252
+msgid "Close _after Printing"
+msgstr "ಮುದ್ರಣದ ನಂತರ ಮುಚ್ಚು(_a)"
+
+#: ../shell/ev-window.c:3814
+msgid "Toolbar Editor"
+msgstr "ಉಪಕರಣ ಪಟ್ಟಿ ಸಂಪಾದಕ"
+
+#: ../shell/ev-window.c:3953
+msgid "There was an error displaying help"
+msgstr "ನೆರವನ್ನು ತೋರಿಸುವಾಗ ಒಂದು ದೋಷ ಉಂಟಾಗಿದೆ"
+
+#: ../shell/ev-window.c:4164
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"ದಸ್ತಾವೇಜು ವೀಕ್ಷಕ.\n"
+"%s ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ (%s)"
+
+#: ../shell/ev-window.c:4195
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4199
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4203
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4228
+msgid "Evince"
+msgstr "ಎವಿನ್ಸ್‍"
+
+#: ../shell/ev-window.c:4231
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 Evince ಕತೃಗಳು"
+
+#: ../shell/ev-window.c:4237
+msgid "translator-credits"
+msgstr ""
+"ಶಂಕರ್ ಪ್ರಸಾದ್ ಎಂ. ವಿ. <[email protected]>, ರೇಣುಕಾ ಪ್ರಸಾದ್ <[email protected]."
+"in>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4507
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "ಈ ಪುಟದಲ್ಲಿ %d ಕಂಡು ಬಂದಿದೆ"
+msgstr[1] "ಈ ಪುಟದಲ್ಲಿ %d ಕಂಡು ಬಂದಿದೆ"
+
+#: ../shell/ev-window.c:4515
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "ಹುಡುಕಲು %3d%% ಬಾಕಿ ಉಳಿದಿವೆ"
+
+#: ../shell/ev-window.c:4992
+msgid "_File"
+msgstr "ಕಡತ(_F)"
+
+#: ../shell/ev-window.c:4993
+msgid "_Edit"
+msgstr "ಸಂಪಾದಿಸು(_E)"
+
+#: ../shell/ev-window.c:4994
+msgid "_View"
+msgstr "ನೋಟ(_V)"
+
+#: ../shell/ev-window.c:4995
+msgid "_Go"
+msgstr "ತೆರಳು(_G)"
+
+#: ../shell/ev-window.c:4996
+msgid "_Help"
+msgstr "ಸಹಾಯ(_H)"
+
+#. File menu
+#: ../shell/ev-window.c:4999 ../shell/ev-window.c:5264
+msgid "_Open…"
+msgstr "ತೆರೆ(_O)..."
+
+#: ../shell/ev-window.c:5000 ../shell/ev-window.c:5265
+msgid "Open an existing document"
+msgstr "ಈಗಿರುವ ಒಂದು ದಸ್ತಾವೇಜನ್ನು ತೆರೆ"
+
+#: ../shell/ev-window.c:5002
+msgid "Op_en a Copy"
+msgstr "ಒಂದು ಪ್ರತಿಯನ್ನು ತೆರೆ(_e)"
+
+#: ../shell/ev-window.c:5003
+msgid "Open a copy of the current document in a new window"
+msgstr "ಈಗಿರುವ ದಸ್ತಾವೇಜಿನ ಒಂದು ಪ್ರತಿಯನ್ನು ಒಂದು ಹೊಸ ವಿಂಡೊದಲ್ಲಿ ತೆರೆ"
+
+#: ../shell/ev-window.c:5005
+msgid "_Save a Copy…"
+msgstr "ಒಂದು ಪ್ರತಿಯನ್ನು ಉಳಿಸು(_S)…"
+
+#: ../shell/ev-window.c:5006
+msgid "Save a copy of the current document"
+msgstr "ಈಗಿರುವ ದಸ್ತಾವೇಜಿನ ಒಂದು ಪ್ರತಿಯನ್ನು ಉಳಿಸು"
+
+#: ../shell/ev-window.c:5008
+msgid "_Print…"
+msgstr "ಮುದ್ರಿಸು(_P)..."
+
+#: ../shell/ev-window.c:5011
+msgid "P_roperties"
+msgstr "ಗುಣಲಕ್ಷಣಗಳು(_r)"
+
+#: ../shell/ev-window.c:5019
+msgid "Select _All"
+msgstr "ಎಲ್ಲವನ್ನೂ ಆರಿಸು(_A)"
+
+#: ../shell/ev-window.c:5021
+msgid "_Find…"
+msgstr "ಪತ್ತೆ ಹಚ್ಚು(_F)..."
+
+#: ../shell/ev-window.c:5022
+msgid "Find a word or phrase in the document"
+msgstr "ಈ ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಒಂದು ಪದ ಅಥವ ವಾಕ್ಯವನ್ನು ಪತ್ತೆ ಹಚ್ಚು"
+
+#: ../shell/ev-window.c:5028
+msgid "T_oolbar"
+msgstr "ಉಪಕರಣಪಟ್ಟಿ(_o)"
+
+#: ../shell/ev-window.c:5030
+msgid "Rotate _Left"
+msgstr "ಎಡಕ್ಕೆ ತಿರುಗಿಸು(_L)"
+
+#: ../shell/ev-window.c:5032
+msgid "Rotate _Right"
+msgstr "ಬಲಕ್ಕೆ ತಿರುಗಿಸು(_R)"
+
+#: ../shell/ev-window.c:5043
+msgid "_Reload"
+msgstr "ಪುನಃ ಲೋಡ್ ಮಾಡು(_R)"
+
+#: ../shell/ev-window.c:5044
+msgid "Reload the document"
+msgstr "ದಸ್ತಾವೇಜನ್ನು ಪುನಃ ಲೋಡ್ ಮಾಡು"
+
+#: ../shell/ev-window.c:5047
+msgid "Auto_scroll"
+msgstr "ಸ್ವಯಂ ಸ್ಕ್ರೋಲ್ ಮಾಡು(_s)"
+
+#: ../shell/ev-window.c:5057
+msgid "_First Page"
+msgstr "ಮೊದಲ ಪುಟ(_F)"
+
+#: ../shell/ev-window.c:5058
+msgid "Go to the first page"
+msgstr "ಮೊದಲ ಪುಟಕ್ಕೆ ತೆರಳು"
+
+#: ../shell/ev-window.c:5060
+msgid "_Last Page"
+msgstr "ಕೊನೆಯ ಪುಟ(_L)"
+
+#: ../shell/ev-window.c:5061
+msgid "Go to the last page"
+msgstr "ಕೊನೆಯ ಪುಟಕ್ಕೆ ತೆರಳು"
+
+#. Help menu
+#: ../shell/ev-window.c:5065
+msgid "_Contents"
+msgstr "ವಿಷಯಗಳು(_C)"
+
+#: ../shell/ev-window.c:5068
+msgid "_About"
+msgstr "ಇದರ ಬಗ್ಗೆ(_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5072
+msgid "Leave Fullscreen"
+msgstr "ಪೂರ್ಣತೆರೆಯನ್ನು ಬಿಟ್ಟು ಬಿಡು"
+
+#: ../shell/ev-window.c:5073
+msgid "Leave fullscreen mode"
+msgstr "ಪೂರ್ಣತೆರೆಯ ಕ್ರಮವನ್ನು ಬಿಟ್ಟು ಬಿಡು"
+
+#: ../shell/ev-window.c:5075
+msgid "Start Presentation"
+msgstr "ಪ್ರದರ್ಶನವನ್ನು ಆರಂಭಿಸು"
+
+#: ../shell/ev-window.c:5076
+msgid "Start a presentation"
+msgstr "ಒಂದು ಪ್ರದರ್ಶನವನ್ನು ಆರಂಭಿಸು"
+
+#. View Menu
+#: ../shell/ev-window.c:5135
+msgid "_Toolbar"
+msgstr "ಉಪಕರಣಪಟ್ಟಿ(_T)"
+
+#: ../shell/ev-window.c:5136
+msgid "Show or hide the toolbar"
+msgstr "ಉಪಕರಣಪಟ್ಟಿಯನ್ನು ಕಾಣಿಸು ಅಥವ ಅಡಗಿಸು"
+
+#: ../shell/ev-window.c:5138
+msgid "Side _Pane"
+msgstr "ಬಲಬದಿಯ ಫಲಕ(_P)"
+
+#: ../shell/ev-window.c:5139
+msgid "Show or hide the side pane"
+msgstr "ಬಲಬದಿಯ ಫಲಕವನ್ನು ಕಾಣಿಸು ಅಥವ ಅಡಗಿಸು"
+
+#: ../shell/ev-window.c:5141
+msgid "_Continuous"
+msgstr "ನಿರಂತರ(_C)"
+
+#: ../shell/ev-window.c:5142
+msgid "Show the entire document"
+msgstr "ಸಂಪೂರ್ಣ ದಸ್ತಾವೇಜನ್ನು ತೋರಿಸು"
+
+#: ../shell/ev-window.c:5144
+msgid "_Dual"
+msgstr "ಇಬ್ಬುಗೆಯ(_D)"
+
+#: ../shell/ev-window.c:5145
+msgid "Show two pages at once"
+msgstr "ಎರಡು ಪುಟಗಳನ್ನು ಒಂದೇ ಬಾರಿಗೆ ತೋರಿಸು"
+
+#: ../shell/ev-window.c:5147
+msgid "_Fullscreen"
+msgstr "ಪೂರ್ಣತೆರೆ(_F)"
+
+#: ../shell/ev-window.c:5148
+msgid "Expand the window to fill the screen"
+msgstr "ವಿಂಡೊವನ್ನು ಪೂರ್ಣತೆರೆಯನ್ನು ಆಕ್ರಮಿಸುವಂತೆ ಹಿಗ್ಗಿಸು"
+
+#: ../shell/ev-window.c:5150
+msgid "Pre_sentation"
+msgstr "ಪ್ರದರ್ಶನ(_s)"
+
+#: ../shell/ev-window.c:5151
+msgid "Run document as a presentation"
+msgstr "ದಸ್ತಾವೇಜನ್ನು ಒಂದು ಪ್ರದರ್ಶನವಾಗಿ ಚಲಾಯಿಸು"
+
+#: ../shell/ev-window.c:5159
+msgid "_Inverted Colors"
+msgstr ""
+
+#: ../shell/ev-window.c:5160
+msgid "Show page contents with the colors inverted"
+msgstr ""
+
+#. Links
+#: ../shell/ev-window.c:5168
+msgid "_Open Link"
+msgstr "ಕೊಂಡಿಯನ್ನು ತೆರೆ(_O)"
+
+#: ../shell/ev-window.c:5170
+msgid "_Go To"
+msgstr "ಇಲ್ಲಿಗೆ ತೆರಳು(_G)"
+
+#: ../shell/ev-window.c:5172
+msgid "Open in New _Window"
+msgstr "ಹೊಸ ವಿಂಡೊಗಳಲ್ಲಿ ತೆರೆ(_W)"
+
+#: ../shell/ev-window.c:5174
+msgid "_Copy Link Address"
+msgstr "ಕೊಂಡಿ ವಿಳಾಸವನ್ನು ನಕಲಿಸು(_C)"
+
+#: ../shell/ev-window.c:5176
+msgid "_Save Image As…"
+msgstr "ಚಿತ್ರವನ್ನು ಹೀಗೆ ಉಳಿಸು(_S)..."
+
+#: ../shell/ev-window.c:5178
+msgid "Copy _Image"
+msgstr "ಚಿತ್ರವನ್ನು ನಕಲಿಸು(_I)"
+
+#: ../shell/ev-window.c:5183
+#, fuzzy
+msgid "_Open Attachment"
+msgstr "ಅಟ್ಯಾಚ್‍ಮೆಂಟನ್ನು ಉಳಿಸು"
+
+#: ../shell/ev-window.c:5185
+#, fuzzy
+msgid "_Save Attachment As…"
+msgstr "ಅಟ್ಯಾಚ್‍ಮೆಂಟನ್ನು ಉಳಿಸು"
+
+#: ../shell/ev-window.c:5238
+msgid "Zoom"
+msgstr "ಗಾತ್ರಬದಲಿಸು"
+
+#: ../shell/ev-window.c:5240
+msgid "Adjust the zoom level"
+msgstr "ಗಾತ್ರವನ್ನು ಹೊಂದಿಸಿ"
+
+#: ../shell/ev-window.c:5250
+msgid "Navigation"
+msgstr "ನ್ಯಾವಿಗೇಶನ್"
+
+#: ../shell/ev-window.c:5252
+msgid "Back"
+msgstr "ಹಿಂದಕ್ಕೆ"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5255
+msgid "Move across visited pages"
+msgstr "ಭೇಟಿ ನೀಡಲಾದ ಪುಟಗಳಾದ್ತಂತ ಚಲಿಸು"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5285
+msgid "Previous"
+msgstr "ಹಿಂದಿನ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5290
+msgid "Next"
+msgstr "ಮುಂದಿನ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5294
+msgid "Zoom In"
+msgstr "ಹಿಗ್ಗಿಸು"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5298
+msgid "Zoom Out"
+msgstr "ಕುಗ್ಗಿಸು"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5306
+msgid "Fit Width"
+msgstr "ಅಗಲಕ್ಕೆ ಹೊಂದಿಸು"
+
+#: ../shell/ev-window.c:5467 ../shell/ev-window.c:5484
+msgid "Unable to launch external application."
+msgstr "ಹೊರಗಿನ ಅನ್ವಯವನ್ನು ಆರಂಭಿಸಲಾಗಲಿಲ್ಲ."
+
+#: ../shell/ev-window.c:5541
+msgid "Unable to open external link"
+msgstr "ಹೊರಗಿನ ಕೊಂಡಿಯನ್ನು ತೆರೆಯಲಾಗಲಿಲ್ಲ"
+
+#: ../shell/ev-window.c:5708
+msgid "Couldn't find appropriate format to save image"
+msgstr "ಚಿತ್ರವನ್ನು ಉಳಿಸಲು ಸರಿಯಾದ ನಮೂನೆಯು ಕಂಡು ಬಂದಿಲ್ಲ"
+
+#: ../shell/ev-window.c:5750
+msgid "The image could not be saved."
+msgstr "ಚಿತ್ರವನ್ನು ಉಳಿಸಲಾಗಿಲ್ಲ."
+
+#: ../shell/ev-window.c:5782
+msgid "Save Image"
+msgstr "ಚಿತ್ರವನ್ನು ಉಳಿಸು"
+
+#: ../shell/ev-window.c:5849
+msgid "Unable to open attachment"
+msgstr "ಅಟ್ಯಾಚ್‍ಮೆಂಟನ್ನು ತೆರೆಯಲಾಗಿಲ್ಲ"
+
+#: ../shell/ev-window.c:5902
+msgid "The attachment could not be saved."
+msgstr "ಅಟ್ಯಾಚ್‍ಮೆಂಟನ್ನು ಉಳಿಸಲಾಗಿಲ್ಲ."
+
+#: ../shell/ev-window.c:5947
+msgid "Save Attachment"
+msgstr "ಅಟ್ಯಾಚ್‍ಮೆಂಟನ್ನು ಉಳಿಸು"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — ಗುಪ್ತಪದದ ಅಗತ್ಯವಿದೆ"
+
+#: ../shell/ev-utils.c:317
+msgid "By extension"
+msgstr "ವಿಸ್ತರಣೆಯ ಮೂಲಕ"
+
+#: ../shell/main.c:72 ../shell/main.c:251
+msgid "MATE Document Viewer"
+msgstr "MATE ದಸ್ತಾವೇಜು ವೀಕ್ಷಕ"
+
+#: ../shell/main.c:80
+#, fuzzy
+msgid "The page label of the document to display."
+msgstr "ತೋರಿಸಲು ದಸ್ತಾವೇಜಿನ ಪುಟ."
+
+#: ../shell/main.c:80
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:81
+#, fuzzy
+msgid "The page number of the document to display."
+msgstr "ತೋರಿಸಲು ದಸ್ತಾವೇಜಿನ ಪುಟ."
+
+#: ../shell/main.c:81
+msgid "NUMBER"
+msgstr "ಸಂಖ್ಯೆ"
+
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr "ಎವಿನ್ಸನ್ನು ಪೂರ್ಣತೆರೆ ವಿಧಾನದಲ್ಲಿ ಚಲಾಯಿಸು"
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr "ಎವಿನ್ಸನ್ನು ಪ್ರದರ್ಶನ ವಿಧಾನದಲ್ಲಿ ಚಲಾಯಿಸು"
+
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr "ಎವಿನ್ಸನ್ನು ಒಂದು ಪೂರ್ವವೀಕ್ಷಕವಾಗಿ(ಪ್ರಿವೀವರ್) ಚಲಾಯಿಸು"
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr "ದಸ್ತಾವೇಜಿನಲ್ಲಿ ಹುಡುಕಬೇಕಿರುವ ಪದ ಅಥವ ವಾಕ್ಯ"
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:89
+msgid "[FILE…]"
+msgstr "[FILE…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"ಲಭ್ಯವಿರುವ ಬೂಲಿಯನ್ ಆಯ್ಕೆಗಳೆಂದರೆ, ನಿಜವು ತಂಬ್‌ನೈಲಿಂಗ್ ಅನ್ನು ಶಕ್ತಗೊಳಿಸುತ್ತದೆ ಹಾಗು ತಪ್ಪು "
+"ಎನ್ನುವುದು ಹೊಸ ತಂಬ್‌ನೈಲ್ ಅನ್ನು ನಿರ್ಮಿಸುವುದನ್ನು ಅಶಕ್ತಗೊಳಿಸುತ್ತದೆ"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF ದಸ್ತಾವೇಜುಗಳು ತಂಬ್‍ನೈಲಿಂಗ್ ಅನ್ನು ಶಕ್ತಗೊಳಿಸು"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF ದಸ್ತಾವೇಜುಗಳಿಗಾಗಿ ತಂಬ್‍ನೈಲಿಂಗ್ ಆಜ್ಞೆ"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF ದಸ್ತಾವೇಜು ತಂಬ್‌ನೈಲರಿಗಾಗಿನ ಮಾನ್ಯವಾದ ಆಜ್ಞೆ ಮತ್ತು ಆರ್ಗ್ಯುಮೆಂಟ್‌ಗಳು. ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ "
+"ನಾಟಿಲಸ್ ತಂಬ್‌ನೈಲರ್ ದಸ್ತಾವೇಜನ್ನು ನೋಡಿ."
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU ದಸ್ತಾವೇಜು ಸರಿಯಲ್ಲದ ವಿನ್ಯಾಸವನ್ನು ಹೊಂದಿದೆ"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "“%s” ಕಡತವನ್ನು ಸೃಜಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ: %s"
+
+#~ msgid "Search string"
+#~ msgstr "ವಾಕ್ಯವನ್ನು ಹುಡುಕು"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "ಹುಡುಕ ಬೇಕಿರುವ ವಾಕ್ಯದ ಹೆಸರು"
+
+#~ msgid "Case sensitive"
+#~ msgstr "ಕೇಸ್ ಸಂವೇದಿ"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "ಒಂದು ಕೇಸ್ ಸಂವೇದಿ ಹುಡುಕಾಟಕ್ಕೆ TRUE"
+
+#~ msgid "Highlight color"
+#~ msgstr "ಹೈಲೈಟ್ ಬಣ್ಣ"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "ತಾಳೆಯಾದ ಎಲ್ಲಕ್ಕೂ ಹೈಲೈಟ್ ಬಣ್ಣ"
+
+#~ msgid "Current color"
+#~ msgstr "ಪ್ರಸಕ್ತ ಬಣ್ಣ"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "ಪ್ರಸಕ್ತ ತಾಳೆಯಾದ ಎಲ್ಲಕ್ಕೂ ಹೈಲೈಟ್ ಬಣ್ಣ"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "ಹಿಂದಿನ ದಸ್ತಾವೇಜಗಳನ್ನು ಮರಳಿ ಪಡೆಯಬೇಕೆ?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Evince ಅನ್ನು ಹಿಂದಿನ ಬಾರಿಗೆ ಬಳಸುವಾಗ ಅನಿರೀಕ್ಷಿತವಾಗಿ ನಿರ್ಗಮಿಸಿದಂತೆ ತೋರುತ್ತಿದೆ. "
+#~ "ಆಗ ತೆರೆಯಲಾಗಿದ್ದ ದಸ್ತಾವೇಜುಗಳನ್ನು ನೀವು ಮರಳಿ ಪಡೆಯಬಹುದು."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "ಮರಳಿ ಪಡೆಯಬೇಡ(_D)"
+
+#~ msgid "_Recover"
+#~ msgstr "ಮರಳಿ ಪಡೆ(_R)"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "ಕುಸಿತದಿಂದ ಮರಳಿ ಪಡೆಯುವಿಕೆ"
+
+#~ msgid "Print..."
+#~ msgstr "ಮುದ್ರಿಸು..."
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "ಸಾಂಕೇತಿಕ ಕೊಂಡಿ “%s” ಅನ್ನು ಸೃಜಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "ಒಂದು ಪ್ರತಿಯನ್ನು ತೆರೆಯಲಾಗಿಲ್ಲ."
+
+#~ msgid "The document doesn't support search"
+#~ msgstr "ದಸ್ತಾವೇಜು ಹುಡುಕಾಟವನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ"
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "ಒಂದು ಪ್ರತಿಯನ್ನು ಉಳಿಸು(_S)..."
+
+#~ msgid "Page Set_up..."
+#~ msgstr "ಪುಟದ ಸಿದ್ಧತೆಗಳು(_u)..."
+
+#~ msgid "Setup the page settings for printing"
+#~ msgstr "ಮುದ್ರಣಕ್ಕಾಗಿ ಪುಟದ ಸಿದ್ಧತೆಗಳನ್ನು ಹೊಂದಿಸು"
+
+#~ msgid "_Print..."
+#~ msgstr "ಮುದ್ರಿಸು(_P)..."
+
+#~ msgid "_Find..."
+#~ msgstr "ಪತ್ತೆ ಹಚ್ಚು(_F)..."
diff --git a/po/ko.po b/po/ko.po
new file mode 100644
index 00000000..680e74a4
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,1707 @@
+# evince korean translation
+# This file is distributed under the same license as the evince package.
+# Young-Ho Cha <ganadist at mizi dot com>, 2005
+# Changwoo Ryu <[email protected]>, 2006, 2007, 2008, 2009, 2010.
+#
+# 새로 번역하시는 분은 아래 translator-credits에 추가해 주세요.
+#
+# 주의:
+# - Evince는 "에빈스"로 음역
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-09-26 04:25+0900\n"
+"PO-Revision-Date: 2010-09-26 04:39+0900\n"
+"Last-Translator: Changwoo Ryu <[email protected]>\n"
+"Language-Team: MATE Korea <[email protected]>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "만화책 압축을 푸는 “%s” 명령을 실행하는데 오류: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "“%s” 명령이 만화책 압축을 푸는데 실패했습니다."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "“%s” 명령이 정상적으로 끝나지 않았습니다."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "만화책 MIME 형식이 아닙니다: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "이 종류의 만화책의 압축을 풀 명령을 찾지 못했습니다."
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "알 수 없는 MIME 형식"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "파일이 손상되었습니다"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "아카이브에 파일이 없습니다"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "%s에 그림 파일이 없습니다"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr " “%s” 삭제에 오류가 발생했습니다."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "오류 %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "만화책"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu 문서가 잘못되었습니다"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"문서가 여러 개 파일로 이루어져 있고, 그 파일 중에 접근할 수 없는 파일이 있습"
+"니다."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu 문서"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI 문서가 잘못되었습니다"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI 문서"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "이 문서는 퍼블릭 도메인입니다"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "예"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "아니오"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "트루타입"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "트루타입 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "알 수 없는 글꼴 형식"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "이름 없음"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "포함된 서브셋"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "포함됨"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "포함되지 않음"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF 문서"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "잘못된 문서"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "임프레스 슬라이드"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "오류 없음"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "메모리 부족"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "ZIP 시그너처를 찾을 수 없습니다"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "ZIP 파일이 잘못되었습니다"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "여러 파일로 된 ZIP은 지원하지 않습니다"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "파일을 열 수 없습니다"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "파일에서 데이터를 읽을 수 없습니다"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "ZIP 아카이브에서 파일을 찾을 수 없습니다"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "알 수 없는 오류"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "“%s” 문서를 읽어들이는데 실패했습니다"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "“%s” 문서를 저장하는데 실패했습니다"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript 문서"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "“%s” 첨부를 저장할 수 없습니다: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "“%s” 첨부를 열 수 없습니다: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "첨부를 열 수 없습니다: “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "%s (%s) 파일 형식은 지원하지 않습니다"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "모든 문서"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "모든 파일"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "임시 파일을 만드는데 실패했습니다: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "임시 디렉터리를 만드는데 실패했습니다: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "올바른 .desktop 파일이 아닙니다"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "desktop 파일 버전을 ('%s') 인식할 수 없습니다"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s 시작"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "명령행에서 문서를 지정할 수 없는 프로그램입니다"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "알 수 없는 실행 옵션: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "문서 URI는 'Type=Link' desktop 항목에 넘길 수 없습니다"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "실행할 수 있는 항목이 없습니다"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "세션 관리자에 연결하지 않습니다"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "설정을 저장할 파일을 지정합니다"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "<파일>"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "세션 관리 ID를 지정합니다"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "<ID>"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "세션 관리 옵션:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "세션 관리 옵션을 표시합니다"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s” 보이기"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "도구 모음에서 옮기기(_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "도구 모음에서 선택한 항목을 옮깁니다"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "도구 모음에서 제거(_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "도구 모음에서 선택한 항목을 제거합니다"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "도구 모음 삭제(_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "선택한 도구 모음을 제거합니다"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "구분선"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5761
+msgid "Best Fit"
+msgstr "알맞게 맞추기"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "페이지 너비에 맞추기"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4554
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "문서 보기"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "다중 페이지 문서를 봅니다"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "문서 제한 무시하기"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "복사하기나 인쇄 같은 문서제한을 무시합니다."
+
+# 도움말. 문장으로 번역
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "임시 파일을 삭제합니다"
+
+# 도움말. 문장으로 번역
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "설정 파일을 인쇄합니다"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "그놈 문서 미리 보기"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3185
+msgid "Failed to print document"
+msgstr "문서를 인쇄하는데 실패했습니다"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "선택한 '%s' 프린터가 없습니다"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5476
+msgid "_Previous Page"
+msgstr "이전 페이지(_P)"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5477
+msgid "Go to the previous page"
+msgstr "이전 페이지로 갑니다"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5479
+msgid "_Next Page"
+msgstr "다음 페이지(_N)"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5480
+msgid "Go to the next page"
+msgstr "다음 페이지로 갑니다"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5463
+msgid "Enlarge the document"
+msgstr "문서를 늘여서 봅니다"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5466
+msgid "Shrink the document"
+msgstr "문서를 줄여서 봅니다"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "인쇄"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5432
+msgid "Print this document"
+msgstr "이 문서를 인쇄합니다"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5578
+msgid "_Best Fit"
+msgstr "알맞게 맞추기(_B)"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5579
+msgid "Make the current document fill the window"
+msgstr "현재 문서를 창에 맞게 채웁니다"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5581
+msgid "Fit Page _Width"
+msgstr "페이지 너비에 맞추기(_W)"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5582
+msgid "Make the current document fill the window width"
+msgstr "현재 문서를 창 너비에 맞게 채웁니다"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5683
+msgid "Page"
+msgstr "페이지"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5684
+msgid "Select Page"
+msgstr "선택한 페이지"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "문서"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "제목:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "위치:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "주제:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "글쓴이:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "검색어:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "만든 도구:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "만든이:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "만든 날짜:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "수정 날짜:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "페이지 수:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "최적화:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "형식:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "보안:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "용지 크기:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "없음"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, 세로 (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, 가로 (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%02$d 페이지 중 %01$d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "%d 페이지 중에서"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "읽는 중…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "인쇄할 준비하는 중입니다…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "마치는 중입니다…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "%d번 페이지를 (전체 %d 페이지) 인쇄하는 중입니다…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "이 프린터에서는 인쇄를 지원하지 않습니다."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "페이지 선택이 잘못되었습니다"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "경고"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "인쇄 범위 선택 안에 아무 페이지도 없습니다"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "페이지 크기 조절:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "인쇄 가능 영역으로 줄이기"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "인쇄 가능 영역에 맞추기"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"문서 페이지를 프린터 페이지에 맞춰 크기를 조정합니다. 다음 중 하나를 선택하십"
+"시오:\n"
+"\n"
+"• \"없음\": 페이지 크기 조정을 하지 않습니다.\n"
+"\n"
+"• \"인쇄 가능 영역으로 줄이기\": 인쇄 가능 영역보다 큰 페이지를 축소해서 인"
+"쇄 가능 영역에 맞춥니다.\n"
+"\n"
+"• \"인쇄 가능 영역에 맞추기\": 페이지를 필요에 따라 확대하거나 축소해서 인쇄 "
+"가능 영역에 맞춥니다.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "자동 회전 및 가운데 정렬"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"문서 페이지에 맞게 프린터 페이지 방향을 회전합니다. 문서 페이지는 프린터 페이"
+"지 가운데에 맞춥니다."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "문서 페이지 크기를 사용해 페이지 크기 선택"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr "페이지를 문서 페이지와 같은 크기의 종이에 인쇄합니다."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "페이지 처리"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "%d 페이지를 인쇄하는데 실패했습니다: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "위로"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "아래로"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "뷰를 위로"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "뷰를 아래로"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "문서 보기"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "페이지로 이동:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "프리젠테이션이 끝났습니다. 나가려면 누르십시오."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "첫 페이지로 이동합니다"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "이전 페이지로 이동합니다"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "다음 페이지로 이동합니다"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "마지막 페이지로 이동합니다"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "지정한 페이지로 이동"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "찾기"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "%s 페이지로 이동"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "“%2$s” 파일의 %1$s(으)로 이동"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” 파일로 이동"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "%s 실행"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "찾기:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5449
+msgid "Find Pre_vious"
+msgstr "이전 찾기(_V)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "이전에 나오는 검색 문자열을 찾습니다"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5447
+msgid "Find Ne_xt"
+msgstr "다음 찾기(_X)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "다음에 나오는 검색 문자열을 찾습니다"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "대소문자 구분(_A)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "대소문자 구분 검색을 토글합니다"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "아이콘:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "메모"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "설명"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "키"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "도움말"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "새 문단"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "문단"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "입력"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "엑스표"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "동그라미"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "알 수 없음"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "추가 정보 속성"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "색:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "모양:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "투명"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "불투명"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "최초 창 상태:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "열기"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "닫기"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "프리젠테이션 모드로 실행 중입니다"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "문서 %s의 암호"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "%s 변환하는 중"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d개 문서 (전체 %d개) 변환하는 중"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "메타데이터를 변환하는 중"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"에빈스가 사용하는 메타데이터 형식이 바뀌어서, 옛날 데이터에서 옮겨 와야 합니"
+"다. 이 작업을 취소하면 메타데이터 저장 기능이 동작하지 않습니다."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "최근 사용한 문서를 엽니다"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "이 문서는 잠겨있고 올바른 암호를 입력해야 읽을 수 있습니다."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "문서 잠금 풀기(_U)"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "암호를 입력하십시오"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "암호가 필요합니다"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "“%s” 문서가 잠겨있어서 열려면 암호가 필요합니다."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "암호(_P):"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "즉시 암호 잊기(_I)"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "로그아웃할 때까지 암호 저장(_L)"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "계속 암호 기억(_F)"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "속성"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "일반"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "글꼴"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "문서 라이선스"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "글꼴"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "글꼴 정보 모으는 중… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "사용 약관"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "문서 라이선스"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "기타 정보"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "목록"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "추가 정보"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "텍스트"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "추가 정보 추가"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "추가"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "문서에 추가 정보가 없습니다"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "페이지 %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "첨부"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "레이어"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "인쇄…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "차례"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "미리 보기"
+
+#: ../shell/ev-window.c:875
+#, c-format
+msgid "Page %s — %s"
+msgstr "페이지 %s — %s"
+
+#: ../shell/ev-window.c:877
+#, c-format
+msgid "Page %s"
+msgstr "페이지 %s"
+
+#: ../shell/ev-window.c:1436
+msgid "The document contains no pages"
+msgstr "문서에 페이지가 없습니다"
+
+#: ../shell/ev-window.c:1439
+msgid "The document contains only empty pages"
+msgstr "문서에 빈 페이지만 들어 있습니다"
+
+#: ../shell/ev-window.c:1644 ../shell/ev-window.c:1810
+msgid "Unable to open document"
+msgstr "문서를 열 수 없음"
+
+#: ../shell/ev-window.c:1781
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "“%s”에서 문서를 읽어들이는 중입니다"
+
+#: ../shell/ev-window.c:1923 ../shell/ev-window.c:2202
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "문서를 다운로드하는 중입니다 (%d%%)"
+
+#: ../shell/ev-window.c:1956
+msgid "Failed to load remote file."
+msgstr "원격 파일을 읽어들이는데 실패했습니다."
+
+#: ../shell/ev-window.c:2146
+#, c-format
+msgid "Reloading document from %s"
+msgstr "문서를 %s에서 다시 읽는 중입니다"
+
+#: ../shell/ev-window.c:2178
+msgid "Failed to reload document."
+msgstr "문서를 다시 읽는데 실패했습니다."
+
+#: ../shell/ev-window.c:2333
+msgid "Open Document"
+msgstr "문서 열기"
+
+#: ../shell/ev-window.c:2631
+#, c-format
+msgid "Saving document to %s"
+msgstr "문서를 %s에 저장하는 중입니다"
+
+#: ../shell/ev-window.c:2634
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "첨부를 %s에 저장하는 중입니다"
+
+#: ../shell/ev-window.c:2637
+#, c-format
+msgid "Saving image to %s"
+msgstr "그림을 %s에 저장하는 중입니다"
+
+#: ../shell/ev-window.c:2681 ../shell/ev-window.c:2781
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "파일을 “%s”(으)로 저장할 수 없습니다."
+
+#: ../shell/ev-window.c:2712
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "문서를 업로드하는 중입니다 (%d%%)"
+
+#: ../shell/ev-window.c:2716
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "첨부를 업로드하는 중입니다 (%d%%)"
+
+#: ../shell/ev-window.c:2720
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "그림을 업로드하는 중입니다 (%d%%)"
+
+#: ../shell/ev-window.c:2844
+msgid "Save a Copy"
+msgstr "다른 이름으로 저장"
+
+#: ../shell/ev-window.c:3129
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "큐에 밀린 인쇄 작업이 %d개 있습니다"
+
+#: ../shell/ev-window.c:3242
+#, c-format
+msgid "Printing job “%s”"
+msgstr "인쇄 작업 “%s”"
+
+#: ../shell/ev-window.c:3420
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr "문서에 채워 넣은 필드가 있습니다. 복사물을 저장하지 않으면 바뀐 사항을 잃어버릴 수 있습니다."
+
+#: ../shell/ev-window.c:3424
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr "문서에 새로 추가하거나 수정한 추가 정보가 있습니다. 복사물을 저장하지 않으면 바뀐 사항을 잃어버릴 수 있습니다."
+
+#: ../shell/ev-window.c:3431
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "닫기 전에 “%s” 문서의 복사본을 저장하시겠습니까?"
+
+#: ../shell/ev-window.c:3450
+msgid "Close _without Saving"
+msgstr "저장하지 않고 닫기(_W)"
+
+#: ../shell/ev-window.c:3454
+msgid "Save a _Copy"
+msgstr "복사물 저장(_C)"
+
+#: ../shell/ev-window.c:3528
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "닫기 전에 “%s” 인쇄 작업을 마칠 때까지 기다리시겠습니까?"
+
+#: ../shell/ev-window.c:3531
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"진행 중인 인쇄 작업이 %d개 있습니다. 닫기 전에 인쇄를 마칠 때까지 기다리시겠"
+"습니까?"
+
+#: ../shell/ev-window.c:3543
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "창을 닫으면, 밀린 인쇄 작업은 인쇄하지 않습니다."
+
+#: ../shell/ev-window.c:3547
+msgid "Cancel _print and Close"
+msgstr "인쇄 취소 및 닫기(_P)"
+
+#: ../shell/ev-window.c:3551
+msgid "Close _after Printing"
+msgstr "인쇄 후 닫기(_A)"
+
+#: ../shell/ev-window.c:4171
+msgid "Toolbar Editor"
+msgstr "도구 모음 편집기"
+
+#: ../shell/ev-window.c:4338
+msgid "There was an error displaying help"
+msgstr "도움말을 표시하는데 오류가 발생했습니다"
+
+#: ../shell/ev-window.c:4550
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"문서 보기 프로그램.\n"
+"%s (%s) 사용"
+
+#: ../shell/ev-window.c:4581
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4585
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4589
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr "You should have received a copy of the GNU General Public License along with Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4614
+msgid "Evince"
+msgstr "에빈스"
+
+#: ../shell/ev-window.c:4617
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 The Evince authors"
+
+#: ../shell/ev-window.c:4623
+msgid "translator-credits"
+msgstr ""
+"차영호 <ganadist at mizi dot com>, 2005\n"
+"류창우 <[email protected]>, 2006, 2007, 2008"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4889
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "이 페이지에서 %d개 찾음"
+
+#: ../shell/ev-window.c:4894
+msgid "Not found"
+msgstr "없음"
+
+#: ../shell/ev-window.c:4900
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "찾는데 %3d%% 남음"
+
+#: ../shell/ev-window.c:5415
+msgid "_File"
+msgstr "파일(_F)"
+
+#: ../shell/ev-window.c:5416
+msgid "_Edit"
+msgstr "편집(_E)"
+
+#: ../shell/ev-window.c:5417
+msgid "_View"
+msgstr "보기(_V)"
+
+#: ../shell/ev-window.c:5418
+msgid "_Go"
+msgstr "이동(_G)"
+
+#: ../shell/ev-window.c:5419
+msgid "_Help"
+msgstr "도움말(_H)"
+
+#. File menu
+#: ../shell/ev-window.c:5422 ../shell/ev-window.c:5723
+msgid "_Open…"
+msgstr "열기(_O)…"
+
+#: ../shell/ev-window.c:5423 ../shell/ev-window.c:5724
+msgid "Open an existing document"
+msgstr "문서를 엽니다"
+
+#: ../shell/ev-window.c:5425
+msgid "Op_en a Copy"
+msgstr "복사본 열기(_E)"
+
+#: ../shell/ev-window.c:5426
+msgid "Open a copy of the current document in a new window"
+msgstr "현재 문서의 복사본을 새 창에서 엽니다"
+
+#: ../shell/ev-window.c:5428
+msgid "_Save a Copy…"
+msgstr "복사물 저장(_S)…"
+
+#: ../shell/ev-window.c:5429
+msgid "Save a copy of the current document"
+msgstr "현재 문서의 사본을 저장합니다"
+
+#: ../shell/ev-window.c:5431
+msgid "_Print…"
+msgstr "인쇄(_P)…"
+
+#: ../shell/ev-window.c:5434
+msgid "P_roperties"
+msgstr "속성(_R)"
+
+#: ../shell/ev-window.c:5442
+msgid "Select _All"
+msgstr "모두 선택(_A)"
+
+#: ../shell/ev-window.c:5444
+msgid "_Find…"
+msgstr "찾기(_F)…"
+
+#: ../shell/ev-window.c:5445
+msgid "Find a word or phrase in the document"
+msgstr "문서에서 단어나 문장을 찾습니다"
+
+#: ../shell/ev-window.c:5451
+msgid "T_oolbar"
+msgstr "도구 모음(_O)"
+
+#: ../shell/ev-window.c:5453
+msgid "Rotate _Left"
+msgstr "왼쪽으로 회전(_L)"
+
+#: ../shell/ev-window.c:5455
+msgid "Rotate _Right"
+msgstr "오른쪽으로 회전(_R)"
+
+#: ../shell/ev-window.c:5457
+msgid "Save Current Settings as _Default"
+msgstr "현재 설정을 기본값으로 저장(_D)"
+
+#: ../shell/ev-window.c:5468
+msgid "_Reload"
+msgstr "다시 읽기(_R)"
+
+#: ../shell/ev-window.c:5469
+msgid "Reload the document"
+msgstr "문서를 다시 읽습니다"
+
+#: ../shell/ev-window.c:5472
+msgid "Auto_scroll"
+msgstr "자동 스크롤(_S)"
+
+#: ../shell/ev-window.c:5482
+msgid "_First Page"
+msgstr "첫 페이지(_F)"
+
+#: ../shell/ev-window.c:5483
+msgid "Go to the first page"
+msgstr "첫 페이지로 갑니다"
+
+#: ../shell/ev-window.c:5485
+msgid "_Last Page"
+msgstr "마지막 페이지(_L)"
+
+#: ../shell/ev-window.c:5486
+msgid "Go to the last page"
+msgstr "마지막 페이지로 갑니다"
+
+#. Help menu
+#: ../shell/ev-window.c:5490
+msgid "_Contents"
+msgstr "차례(_C)"
+
+#: ../shell/ev-window.c:5493
+msgid "_About"
+msgstr "정보(_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5497
+msgid "Leave Fullscreen"
+msgstr "전체 화면 나가기"
+
+#: ../shell/ev-window.c:5498
+msgid "Leave fullscreen mode"
+msgstr "전체 화면에서 나갑니다"
+
+#: ../shell/ev-window.c:5500
+msgid "Start Presentation"
+msgstr "프리젠테이션 시작"
+
+#: ../shell/ev-window.c:5501
+msgid "Start a presentation"
+msgstr "프리젠테이션을 시작합니다"
+
+#. View Menu
+#: ../shell/ev-window.c:5560
+msgid "_Toolbar"
+msgstr "도구 모음(_T)"
+
+#: ../shell/ev-window.c:5561
+msgid "Show or hide the toolbar"
+msgstr "도구 모음을 보이거나 숨깁니다"
+
+#: ../shell/ev-window.c:5563
+msgid "Side _Pane"
+msgstr "가장자리 창(_P)"
+
+#: ../shell/ev-window.c:5564
+msgid "Show or hide the side pane"
+msgstr "가장자리 창을 보이거나 숨깁니다"
+
+#: ../shell/ev-window.c:5566
+msgid "_Continuous"
+msgstr "연속(_C)"
+
+#: ../shell/ev-window.c:5567
+msgid "Show the entire document"
+msgstr "문서를 연속해서 봅니다"
+
+#: ../shell/ev-window.c:5569
+msgid "_Dual"
+msgstr "두 페이지씩(_D)"
+
+#: ../shell/ev-window.c:5570
+msgid "Show two pages at once"
+msgstr "한번에 두 페이지씩 봅니다"
+
+#: ../shell/ev-window.c:5572
+msgid "_Fullscreen"
+msgstr "전체 화면(_F)"
+
+#: ../shell/ev-window.c:5573
+msgid "Expand the window to fill the screen"
+msgstr "화면에 꽉 차도록 창을 키웁니다"
+
+#: ../shell/ev-window.c:5575
+msgid "Pre_sentation"
+msgstr "프리젠테이션(_S)"
+
+#: ../shell/ev-window.c:5576
+msgid "Run document as a presentation"
+msgstr "프리젠테이션으로 문서를 보여줍니다"
+
+#: ../shell/ev-window.c:5584
+msgid "_Inverted Colors"
+msgstr "색 반전(_I)"
+
+#: ../shell/ev-window.c:5585
+msgid "Show page contents with the colors inverted"
+msgstr "페이지 내용을 색을 반전시켜 표시합니다"
+
+#. Links
+#: ../shell/ev-window.c:5593
+msgid "_Open Link"
+msgstr "링크 열기(_O)"
+
+#: ../shell/ev-window.c:5595
+msgid "_Go To"
+msgstr "이동(_G)"
+
+#: ../shell/ev-window.c:5597
+msgid "Open in New _Window"
+msgstr "새 창에서 열기(_W)"
+
+#: ../shell/ev-window.c:5599
+msgid "_Copy Link Address"
+msgstr "링크 주소 복사(_C)"
+
+#: ../shell/ev-window.c:5601
+msgid "_Save Image As…"
+msgstr "다른 이름으로 그림 저장(_S)…"
+
+#: ../shell/ev-window.c:5603
+msgid "Copy _Image"
+msgstr "그림 복사(_I)"
+
+#: ../shell/ev-window.c:5605
+msgid "Annotation Properties…"
+msgstr "추가 정보 속성…"
+
+#: ../shell/ev-window.c:5610
+msgid "_Open Attachment"
+msgstr "첨부 열기(_O)"
+
+#: ../shell/ev-window.c:5612
+msgid "_Save Attachment As…"
+msgstr "다른 이름으로 첨부 저장(_S)…"
+
+#: ../shell/ev-window.c:5697
+msgid "Zoom"
+msgstr "확대/축소"
+
+#: ../shell/ev-window.c:5699
+msgid "Adjust the zoom level"
+msgstr "확대/축소 수준 조절"
+
+#: ../shell/ev-window.c:5709
+msgid "Navigation"
+msgstr "둘러보기"
+
+#: ../shell/ev-window.c:5711
+msgid "Back"
+msgstr "뒤로"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5714
+msgid "Move across visited pages"
+msgstr "열었던 페이지로 이동합니다"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5744
+msgid "Previous"
+msgstr "이전"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5749
+msgid "Next"
+msgstr "다음"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5753
+msgid "Zoom In"
+msgstr "확대"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5757
+msgid "Zoom Out"
+msgstr "축소"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5765
+msgid "Fit Width"
+msgstr "너비 맞춤"
+
+#: ../shell/ev-window.c:5910 ../shell/ev-window.c:5927
+msgid "Unable to launch external application."
+msgstr "외부 프로그램을 실행할 수 없습니다."
+
+#: ../shell/ev-window.c:5984
+msgid "Unable to open external link"
+msgstr "외부 링크를 열 수 없습니다"
+
+#: ../shell/ev-window.c:6151
+msgid "Couldn't find appropriate format to save image"
+msgstr "그림을 저장할 적당한 형식을 찾을 수 없습니다"
+
+#: ../shell/ev-window.c:6193
+msgid "The image could not be saved."
+msgstr "그림을 저장할 수 없습니다."
+
+#: ../shell/ev-window.c:6225
+msgid "Save Image"
+msgstr "그림 저장"
+
+#: ../shell/ev-window.c:6353
+msgid "Unable to open attachment"
+msgstr "첨부를 열 수 없습니다"
+
+#: ../shell/ev-window.c:6406
+msgid "The attachment could not be saved."
+msgstr "첨부를 저장할 수 없습니다."
+
+#: ../shell/ev-window.c:6451
+msgid "Save Attachment"
+msgstr "첨부 저장"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — 암호 필요"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "확장자에 따라"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "그놈 문서 보기"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "표시할 문서의 페이지 레이블."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "<페이지>"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "표시할 문서의 페이지 번호."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "<번호>"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "에빈스를 전체 화면 모드로 실행합니다"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "에빈스를 프리젠테이션 모드로 실행합니다"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "에빈스를 미리 보기로 실행합니다"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "문서에서 찾을 단어나 문장"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "<문자열>"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[<파일>...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"참/거짓으로 설정 가능: 참이면 미리보기 만들기, 거짓이면 미리보기 만들기를 하"
+"지 않음"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF 문서의 미리보기 만들기 가능"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF 문서의 미리보기 만들기 명령"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF문서 미리보기 만들기의 올바른 명령과 인자. 노틸러스 미리보기 만들기 문서"
+"의 자세한 정보 참조."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "페이지 설정(_U)…"
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "인쇄와 관련해 페이지를 설정합니다"
diff --git a/po/ks.po b/po/ks.po
new file mode 100644
index 00000000..f16e6a52
--- /dev/null
+++ b/po/ks.po
@@ -0,0 +1,1393 @@
+# translation of evince.HEAD.po to Kashmiri
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Rakesh Pandit <[email protected]>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.HEAD.hi\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-07-03 03:16+0000\n"
+"PO-Revision-Date: 2008-06-28 06:20+0530\n"
+"Last-Translator: Rakesh Pandit <[email protected]>\n"
+"Language-Team: Kashmiri <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"X-Generator: KBabel 1.9.1\n"
+
+#: ../backend/comics/comics-document.c:163
+#, c-format
+msgid "File corrupted."
+msgstr "खराब फाइल"
+
+#: ../backend/comics/comics-document.c:197
+#, c-format
+msgid "No images found in archive %s"
+msgstr "कांह् फोटू छुंन: आरकाविव मंज %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "कॉमिक किताब"
+
+#: ../backend/djvu/djvu-document.c:247
+#, c-format
+msgid ""
+"The document is composed by several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "डीजावीयु कागजात"
+
+#: ../backend/dvi/dvi-document.c:94
+#, c-format
+msgid "File not available"
+msgstr "फाइल मेल न"
+
+#: ../backend/dvi/dvi-document.c:109
+#, c-format
+msgid "DVI document has incorrect format"
+msgstr "डीवी आई कागजातस छु गलत फारमेट"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "डीवी आई कागजात"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:688
+msgid "Yes"
+msgstr "आ"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:691
+msgid "No"
+msgstr "न"
+
+#: ../backend/pdf/ev-poppler.cc:765
+msgid "Type 1"
+msgstr "टय्प 1"
+
+#: ../backend/pdf/ev-poppler.cc:767
+msgid "Type 1C"
+msgstr "टय्प1C"
+
+#: ../backend/pdf/ev-poppler.cc:769
+msgid "Type 3"
+msgstr "टय्प 3"
+
+#: ../backend/pdf/ev-poppler.cc:771
+msgid "TrueType"
+msgstr "टरुटय्प"
+
+#: ../backend/pdf/ev-poppler.cc:773
+msgid "Type 1 (CID)"
+msgstr "टय्प 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:775
+msgid "Type 1C (CID)"
+msgstr "टय्प 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:777
+msgid "TrueType (CID)"
+msgstr "टरुटय्प (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Unknown font type"
+msgstr "खबरकुस फंट टय्प"
+
+#: ../backend/pdf/ev-poppler.cc:805
+msgid "No name"
+msgstr "काह नाव न"
+
+#: ../backend/pdf/ev-poppler.cc:813
+msgid "Embedded subset"
+msgstr "एंबेडेड हिस्स"
+
+#: ../backend/pdf/ev-poppler.cc:815
+msgid "Embedded"
+msgstr "एंबेडेड"
+
+#: ../backend/pdf/ev-poppler.cc:817
+msgid "Not embedded"
+msgstr "एंबेडेड छुन्न"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "पीडीएफ़ कागजात"
+
+#: ../backend/impress/impress-document.c:296
+#, fuzzy, c-format
+msgid "Remote files aren't supported"
+msgstr "पीडीएफ़ फायल हयको न बन्नवित"
+
+#: ../backend/impress/impress-document.c:307
+#, fuzzy, c-format
+msgid "Invalid document"
+msgstr "गलत कागजात"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "इंप्रेस स्लाइड"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "काह गलती न"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "पूर्र मेमरी न"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "जिप सीगनेचर हयोक न मिलित"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "गलत जिप फाइल"
+
+#: ../backend/impress/zip.c:65
+#, fuzzy
+msgid "Multi file zips are not supported"
+msgstr "मलटी फाइल जीप छीन चलान"
+
+#: ../backend/impress/zip.c:68
+#, fuzzy
+msgid "Cannot open the file"
+msgstr "फ़ाइल “%s” हयको न खुलित\n"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "यम फाइल पयेट्ठ हयको न परितथ"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "जीप आरकयिव मंज हयको न फाइल छंडित"
+
+#: ../backend/impress/zip.c:77
+#, fuzzy
+msgid "Unknown error"
+msgstr "खबरकुस्स गलती"
+
+#: ../backend/ps/ev-spectre.c:113
+#, fuzzy, c-format
+msgid "Failed to load document “%s”"
+msgstr "'%s' कागजात हयको न ठिक करितथ"
+
+#: ../backend/ps/ev-spectre.c:146
+#, fuzzy, c-format
+msgid "Failed to save document “%s”"
+msgstr "'%s' कागजात हयको न ठिक करितथ"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "पोस्टस्क्रिप्ट कागजात"
+
+#: ../libdocument/ev-attachment.c:303 ../libdocument/ev-attachment.c:324
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "एटेचमेंट हयको न सेव करिथ “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:360
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "एटेचमेंट हयको न खुलित्थ “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:393
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "एटेचमेंट हयको न खुलित्थ “%s”"
+
+#: ../libdocument/ev-document-factory.c:193
+#, fuzzy, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "मलटी फाइल जीप छीन चलान"
+
+#: ../libdocument/ev-document-factory.c:294
+#, c-format
+msgid "Unknown MIME Type"
+msgstr "पत्हयन्न कुस एम आई एम ई टायप"
+
+#: ../libdocument/ev-document-factory.c:349
+msgid "All Documents"
+msgstr "सर्री कागजात"
+
+#: ../libdocument/ev-document-factory.c:381
+msgid "All Files"
+msgstr "सर्री फ़ाइलें"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:439
+msgid "Co_nnect"
+msgstr ""
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:483
+msgid "Connect _anonymously"
+msgstr ""
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:492
+msgid "Connect as u_ser:"
+msgstr ""
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:529
+msgid "_Username:"
+msgstr ""
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:533
+msgid "_Domain:"
+msgstr ""
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:538
+#: ../data/evince-password.glade.h:4
+msgid "_Password:"
+msgstr "पासवर्ड: (_P)"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:553
+msgid "_Forget password immediately"
+msgstr ""
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:561
+#, fuzzy
+msgid "_Remember password until you logout"
+msgstr "यम सशेनुक पासवर्ड: थय्यव याद"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:569
+msgid "_Remember forever"
+msgstr ""
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:938
+#, c-format
+msgid "Show “_%s”"
+msgstr "हय्यव “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Move on Toolbar"
+msgstr "टुल्लबारस पय्टठ गस(_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Move the selected item on the toolbar"
+msgstr "तुलमुत आईटम पकन्य्यव टुल्लबारस पय्ठ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1403
+msgid "_Remove from Toolbar"
+msgstr "टुल्लबारस पय्ठ हटाव(_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1404
+msgid "Remove the selected item from the toolbar"
+msgstr "तुलमुत आईटम हट्य्यव टुल्लबारस पय्ठ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1405
+msgid "_Delete Toolbar"
+msgstr "टुल्लबारस हट्टयव(_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1406
+msgid "Remove the selected toolbar"
+msgstr "चयनित उपकरण-पट्टी हटायेंतुलमुत टुल्लबारस हट्टसव"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:441
+msgid "Separator"
+msgstr "अलग कर्रन वोल"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+#, fuzzy
+msgid "Running in presentation mode"
+msgstr "एवींस चलाएँ एक दस्तावेज प्रस्तुतीकरण"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:4623
+msgid "Best Fit"
+msgstr "सर्वोत्तम अनुरूप"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "अनुरूप पृष्ठ चौड़ाई"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+#, fuzzy
+msgid "70%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+#, fuzzy
+msgid "85%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:3729
+#: ../shell/ev-window-title.c:132
+#, c-format
+msgid "Document Viewer"
+msgstr "कागजात वुछनुक"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "वारयाह वरख कागजात"
+
+#: ../data/evince-password.glade.h:1
+#, fuzzy
+msgid "Password Entry"
+msgstr "पासवर्ड: (_P)"
+
+#: ../data/evince-password.glade.h:2
+msgid "Remember password for this session"
+msgstr "यम सशेनुक पासवर्ड: थय्यव याद"
+
+#: ../data/evince-password.glade.h:3
+msgid "Save password in keyring"
+msgstr "कीरिंग मंज लग्गयव पासवर्ड:"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b> लेखनवोल</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b> बनोव :</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b> बनावन वोल:</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b> फारमेट:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b> की-वर्डस:</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b> बदलोव:</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b> कच वरख:</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr "<b> ऑप्टीमाइज़्ड:</b>"
+
+#: ../data/evince-properties.glade.h:9
+#, fuzzy
+msgid "<b>Paper Size:</b>"
+msgstr "<b> पेज साय्ज:</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Producer:</b>"
+msgstr "<b> बनावन वोल:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Security:</b>"
+msgstr "<b> र्रच्छ:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Subject:</b>"
+msgstr "<b> सब्बजटक:</b>"
+
+#: ../data/evince-properties.glade.h:13
+msgid "<b>Title:</b>"
+msgstr "<b> टायटल</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "कागजात लिखव बिना रुकावटि"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "कागजात लिखव बिना रुकावटि यिथकंय कापी करुन या परंट"
+
+#: ../properties/ev-properties-main.c:111
+msgid "Document"
+msgstr "कागजात"
+
+#: ../properties/ev-properties-view.c:182
+msgid "None"
+msgstr "कय्ह न"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:207
+#: ../properties/ev-properties-view.c:369
+msgid "default:mm"
+msgstr "डिफालट:एमएम"
+
+#. Metric measurement (millimeters)
+#: ../properties/ev-properties-view.c:251
+#: ../properties/ev-properties-view.c:406
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f एमएम"
+
+#: ../properties/ev-properties-view.c:255
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f ईंच"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:279
+#: ../properties/ev-properties-view.c:417
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, पौट्टरैट (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:286
+#: ../properties/ev-properties-view.c:424
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, लैंडस्केप (%s)"
+
+#. Imperial measurement (inches)
+#: ../properties/ev-properties-view.c:401
+#, c-format
+msgid "%.2f x %.2f in"
+msgstr "%.2f x %.2f मंज"
+
+#: ../shell/eggfindbar.c:158
+msgid "Search string"
+msgstr "स्ट्रिंग छंडिव"
+
+#: ../shell/eggfindbar.c:159
+msgid "The name of the string to be found"
+msgstr "छांडनुक स्ट्रिंग नाव"
+
+#: ../shell/eggfindbar.c:172
+msgid "Case sensitive"
+msgstr "केस सेंसिटिव"
+
+#: ../shell/eggfindbar.c:173
+msgid "TRUE for a case sensitive search"
+msgstr "सही आक्ह केस सेंसेटिव छांडन खत्तर"
+
+#: ../shell/eggfindbar.c:180
+msgid "Highlight color"
+msgstr "हायलायट रंग"
+
+#: ../shell/eggfindbar.c:181
+msgid "Color of highlight for all matches"
+msgstr "सारनी मैलन वलय हुंद रंग"
+
+#: ../shell/eggfindbar.c:187
+msgid "Current color"
+msgstr "य: रंग"
+
+#: ../shell/eggfindbar.c:188
+msgid "Color of highlight for the current match"
+msgstr "मौजूदा मैच के लिये हाइलाइट का रंगमैल खयन्न वाल्यन हुंद हायलायट रंग"
+
+#: ../shell/eggfindbar.c:321
+msgid "Find:"
+msgstr "छंडिव:"
+
+#: ../shell/eggfindbar.c:330
+msgid "Find Previous"
+msgstr "पततिम छंडिव"
+
+#: ../shell/eggfindbar.c:334 ../shell/eggfindbar.c:337
+#, fuzzy
+msgid "Find previous occurrence of the search string"
+msgstr "पततिम स्टरिंग छंडिव"
+
+#: ../shell/eggfindbar.c:343
+msgid "Find Next"
+msgstr "दय्यम छंडिव"
+
+#: ../shell/eggfindbar.c:347 ../shell/eggfindbar.c:350
+msgid "Find next occurrence of the search string"
+msgstr "बेय्य छांडव स्टरिंग"
+
+#: ../shell/eggfindbar.c:359
+msgid "C_ase Sensitive"
+msgstr "केस सेंसेटिव (_a)"
+
+#: ../shell/eggfindbar.c:363 ../shell/eggfindbar.c:366
+#, fuzzy
+msgid "Toggle case sensitive search"
+msgstr "बद्दलिव केस सेंसेटिव छांडुन"
+
+#: ../shell/ev-jobs.c:702
+#, fuzzy, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "'%s' कागजात हयोकस न खुलित"
+
+#: ../shell/ev-open-recent-action.c:71
+#, fuzzy
+msgid "Open a recently used document"
+msgstr "काह खुल्लमुत कागजात खुलिव"
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d उक %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "%d मंज"
+
+#: ../shell/ev-password.c:88
+msgid "Password required"
+msgstr "पासवड जरुरत"
+
+#: ../shell/ev-password.c:89
+#, fuzzy, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "यम कागजात <i>%s</i> छी कुलुफ दित्त त यमन खोलन बरोठ छु आक्ख पासवड जरुरत"
+
+#: ../shell/ev-password.c:154
+msgid "Enter password"
+msgstr "पासवड दियव"
+
+#: ../shell/ev-password.c:260
+#, c-format
+msgid "Password for document %s"
+msgstr "%s कागजातन खत्तर पासवड"
+
+#: ../shell/ev-password.c:347
+msgid "Incorrect password"
+msgstr "गलत पासवड"
+
+#: ../shell/ev-password-view.c:111
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "कागजात छि बंद, त हयको खुलित सिरिफ पासवड तर्वित हयको वुचछित।"
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "कागजात खोल (_U)"
+
+#: ../shell/ev-properties-dialog.c:61
+msgid "Properties"
+msgstr "गुण"
+
+#: ../shell/ev-properties-dialog.c:94
+msgid "General"
+msgstr "आम"
+
+#: ../shell/ev-properties-dialog.c:104
+msgid "Fonts"
+msgstr "फ़ॉन्ट्स"
+
+#: ../shell/ev-properties-fonts.c:141
+msgid "Font"
+msgstr "फ़ॉन्ट"
+
+#: ../shell/ev-properties-fonts.c:152
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "फांटस बारे मंज छु जमा करान... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:675
+msgid "Attachments"
+msgstr "सयीत्त सामान"
+
+#: ../shell/ev-sidebar-links.c:266 ../shell/ev-view.c:3645
+msgid "Loading..."
+msgstr "लोड छु गसान..."
+
+#: ../shell/ev-sidebar-links.c:339
+msgid "Print..."
+msgstr "छप्पवयु..."
+
+#: ../shell/ev-sidebar-links.c:719
+msgid "Index"
+msgstr "निशान थवन वरुक"
+
+#: ../shell/ev-sidebar-thumbnails.c:727
+msgid "Thumbnails"
+msgstr "निशान"
+
+#: ../shell/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "स्क्रॉल हयोर"
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "स्क्रॉल बोन"
+
+#: ../shell/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "स्क्रॉल करिव हयोर"
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "स्क्रॉल करिव बोन"
+
+#: ../shell/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "कागजात वुच्छिव"
+
+#: ../shell/ev-view.c:1443
+msgid "Go to first page"
+msgstr "गोडनिकस वर्कस गच्छिव"
+
+#: ../shell/ev-view.c:1445
+msgid "Go to previous page"
+msgstr "पत्तिमस वर्कस गच्छिव"
+
+#: ../shell/ev-view.c:1447
+msgid "Go to next page"
+msgstr "दय्यमिस वर्कस गसिव"
+
+#: ../shell/ev-view.c:1449
+msgid "Go to last page"
+msgstr "गच्छिव अखिर वरुक"
+
+#: ../shell/ev-view.c:1451
+msgid "Go to page"
+msgstr "यथ वरकस पयठ गच्छिव"
+
+#: ../shell/ev-view.c:1453
+msgid "Find"
+msgstr "छांड"
+
+#: ../shell/ev-view.c:1481
+#, c-format
+msgid "Go to page %s"
+msgstr "%s वरकस पय्ठ गच्छ"
+
+#: ../shell/ev-view.c:1487
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "%s फायल पयठ गच्छिव “%s”"
+
+#: ../shell/ev-view.c:1490
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” फाइल पयठ गाच्छ"
+
+#: ../shell/ev-view.c:1498
+#, c-format
+msgid "Launch %s"
+msgstr "%s लांच करिव"
+
+#: ../shell/ev-view.c:2450
+msgid "End of presentation. Press Escape to exit."
+msgstr "हावुन मकलयोव। एसकेप दबाव बंद करन खत्तर।"
+
+#: ../shell/ev-view.c:3374
+#, fuzzy
+msgid "Jump to page:"
+msgstr "यथ वरकस पय्ठ गसिव"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:5156
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d यथ वर्रकस पय्यठ मेलि"
+msgstr[1] "%d यथ वर्रकस पय्यठ मेलि"
+
+#: ../shell/ev-view.c:5165
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% बचेमित छ: छांडन खत्तर"
+
+#: ../shell/ev-window.c:785
+#, c-format
+msgid "Page %s - %s"
+msgstr "वरुख %s - %s"
+
+#: ../shell/ev-window.c:787
+#, fuzzy, c-format
+msgid "Page %s"
+msgstr "वरुख %s"
+
+#: ../shell/ev-window.c:1200
+msgid "The document contains no pages"
+msgstr ""
+
+#: ../shell/ev-window.c:1432 ../shell/ev-window.c:1507
+msgid "Unable to open document"
+msgstr "कागजात हयको न खुलित"
+
+#: ../shell/ev-window.c:1704
+msgid "Open Document"
+msgstr "कागजात खुलिव"
+
+#: ../shell/ev-window.c:1765
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "सिमबालिक लिंक हयक न बन्यथ “%s”: %s"
+
+#: ../shell/ev-window.c:1794
+#, fuzzy
+msgid "Cannot open a copy."
+msgstr "फ़ाइल “%s” हयको न खुलित \n"
+
+#: ../shell/ev-window.c:2038 ../shell/ev-window.c:2088
+#, fuzzy, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "फाइल हयको न याथ नावस \"%s\" सेव करिथ।"
+
+#: ../shell/ev-window.c:2133
+msgid "Save a Copy"
+msgstr "एक प्रतिलिपि सहेजेंआक्ख नकल कर सा सेव"
+
+#: ../shell/ev-window.c:2254 ../shell/ev-window.c:3430
+#, fuzzy
+msgid "Failed to print document"
+msgstr "यथ पर्टंर पय्ठ हयको न पर्टं करिथ"
+
+#: ../shell/ev-window.c:2419
+msgid "Printing is not supported on this printer."
+msgstr "यथ पर्टंर पय्टठ हयको न पर्टं करिथ"
+
+#: ../shell/ev-window.c:2545 ../shell/ev-window.c:4415
+msgid "Print"
+msgstr "छपाई"
+
+#: ../shell/ev-window.c:3183
+msgid "Toolbar Editor"
+msgstr "टुलबार संपादक"
+
+#: ../shell/ev-window.c:3725
+#, fuzzy, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr "पोस्टसक्रिपट और पीडीएफ फाइल हावनपॉप्लर ईसतेमाल करिथ"
+
+#: ../shell/ev-window.c:3753
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:3757
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:3761
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:3785 ../shell/main.c:350
+msgid "Evince"
+msgstr "एवींस"
+
+#: ../shell/ev-window.c:3788
+#, fuzzy
+msgid "© 1996-2007 The Evince authors"
+msgstr "© 1996-2005 एवींस लेखन वय्यल"
+
+#: ../shell/ev-window.c:3794
+msgid "translator-credits"
+msgstr "राकेश पंडित ([email protected])"
+
+#: ../shell/ev-window.c:4327
+msgid "_File"
+msgstr "फ़ाइल (_F)"
+
+#: ../shell/ev-window.c:4328
+msgid "_Edit"
+msgstr "संपादन (_E)"
+
+#: ../shell/ev-window.c:4329
+msgid "_View"
+msgstr "वुच्छिव (_V)"
+
+#: ../shell/ev-window.c:4330
+msgid "_Go"
+msgstr "गच्छिव (_G)"
+
+#: ../shell/ev-window.c:4331
+msgid "_Help"
+msgstr "मदद (_H)"
+
+#. File menu
+#: ../shell/ev-window.c:4334 ../shell/ev-window.c:4513
+#: ../shell/ev-window.c:4585
+msgid "_Open..."
+msgstr "खूलिव (_O)..."
+
+#: ../shell/ev-window.c:4335 ../shell/ev-window.c:4586
+msgid "Open an existing document"
+msgstr "मौजूद कागजात खोल"
+
+#: ../shell/ev-window.c:4337
+#, fuzzy
+msgid "Op_en a Copy"
+msgstr "आक्ख नक्ल खोल"
+
+#: ../shell/ev-window.c:4338
+#, fuzzy
+msgid "Open a copy of the current document in a new window"
+msgstr "कागजातन हंज आक्ख नकल खोल नय्य विंडो मंज"
+
+#: ../shell/ev-window.c:4340 ../shell/ev-window.c:4515
+msgid "_Save a Copy..."
+msgstr "आक्ख नकल कर सेव...(_S)"
+
+#: ../shell/ev-window.c:4341
+msgid "Save a copy of the current document"
+msgstr "कागजातन हंज नकल कर सेव"
+
+#: ../shell/ev-window.c:4343
+#, fuzzy
+msgid "Print Set_up..."
+msgstr "छप्पाव..."
+
+#: ../shell/ev-window.c:4344
+msgid "Setup the page settings for printing"
+msgstr "छप्पावन खत्तर कर पेज खेटिंग"
+
+#: ../shell/ev-window.c:4346
+msgid "_Print..."
+msgstr "छप्पाव (_P)..."
+
+#: ../shell/ev-window.c:4347 ../shell/ev-window.c:4416
+msgid "Print this document"
+msgstr "कागजात छप्पवय्व"
+
+#: ../shell/ev-window.c:4349
+msgid "P_roperties"
+msgstr "गुण (_r)"
+
+#: ../shell/ev-window.c:4357
+msgid "Select _All"
+msgstr "सयरि तुलिव (_A)"
+
+#: ../shell/ev-window.c:4359
+msgid "_Find..."
+msgstr "छंडिव (_F)..."
+
+#: ../shell/ev-window.c:4360
+msgid "Find a word or phrase in the document"
+msgstr "कागजातन मंज छंडिव शब्द या मुहावरा"
+
+#: ../shell/ev-window.c:4362
+msgid "Find Ne_xt"
+msgstr "दय्यम छंडिव (_x)"
+
+#: ../shell/ev-window.c:4364
+msgid "Find Pre_vious"
+msgstr "पतिम छंडिव (_v)"
+
+#: ../shell/ev-window.c:4366
+msgid "T_oolbar"
+msgstr "टूलबार (_o)"
+
+#: ../shell/ev-window.c:4368
+msgid "Rotate _Left"
+msgstr "खोवुर घुमाव (_L)"
+
+#: ../shell/ev-window.c:4370
+msgid "Rotate _Right"
+msgstr "दच्छुन घुमाव (_R)"
+
+#: ../shell/ev-window.c:4375
+msgid "Enlarge the document"
+msgstr "कागजात बढाव"
+
+#: ../shell/ev-window.c:4378
+msgid "Shrink the document"
+msgstr "कागजात करिव कम"
+
+#: ../shell/ev-window.c:4380
+msgid "_Reload"
+msgstr "बय्य लोड करिव (_R)"
+
+#: ../shell/ev-window.c:4381
+msgid "Reload the document"
+msgstr "दस्तावेज पुनः लोड़ करोकागजात करिव बय्य लौड"
+
+#: ../shell/ev-window.c:4384
+msgid "Auto_scroll"
+msgstr "आटो सकराल"
+
+#. Go menu
+#: ../shell/ev-window.c:4388
+msgid "_Previous Page"
+msgstr "पतिम पेज (_P)"
+
+#: ../shell/ev-window.c:4389
+msgid "Go to the previous page"
+msgstr "पतिम पेजस पसठ गसव"
+
+#: ../shell/ev-window.c:4391
+msgid "_Next Page"
+msgstr "बरुठिम पेज(_N)"
+
+#: ../shell/ev-window.c:4392
+msgid "Go to the next page"
+msgstr "दय्यमस पेजस पयट्ठ"
+
+#: ../shell/ev-window.c:4394
+msgid "_First Page"
+msgstr "गडनियुक पेज (_F)"
+
+#: ../shell/ev-window.c:4395
+msgid "Go to the first page"
+msgstr "गयोढनिकस पेजस गसिव"
+
+#: ../shell/ev-window.c:4397
+msgid "_Last Page"
+msgstr "आखिर पेज(_L)"
+
+#: ../shell/ev-window.c:4398
+msgid "Go to the last page"
+msgstr "आखरिक पेजस गास"
+
+#. Help menu
+#: ../shell/ev-window.c:4402
+msgid "_Contents"
+msgstr "मंज (_C)"
+
+#: ../shell/ev-window.c:4405
+msgid "_About"
+msgstr "बारे मंज (_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4409
+msgid "Leave Fullscreen"
+msgstr "फुलस्क्रीन तराव"
+
+#: ../shell/ev-window.c:4410
+msgid "Leave fullscreen mode"
+msgstr "फुलस्क्रीन मोड तराव"
+
+#: ../shell/ev-window.c:4412
+#, fuzzy
+msgid "Start Presentation"
+msgstr "हावुन शरु करिव (_P)"
+
+#: ../shell/ev-window.c:4413
+#, fuzzy
+msgid "Start a presentation"
+msgstr "हावुन शरु करिव"
+
+#. View Menu
+#: ../shell/ev-window.c:4469
+msgid "_Toolbar"
+msgstr "टुल्लबार (_T)"
+
+#: ../shell/ev-window.c:4470
+msgid "Show or hide the toolbar"
+msgstr "टुल्लबार हयव या छुप्विव"
+
+#: ../shell/ev-window.c:4472
+msgid "Side _Pane"
+msgstr "दंदर (_P)"
+
+#: ../shell/ev-window.c:4473
+msgid "Show or hide the side pane"
+msgstr "दंदर हयव या छुप्विव"
+
+#: ../shell/ev-window.c:4475
+msgid "_Continuous"
+msgstr "लगातार (_C)"
+
+#: ../shell/ev-window.c:4476
+msgid "Show the entire document"
+msgstr "पूर कागजात हयव"
+
+#: ../shell/ev-window.c:4478
+msgid "_Dual"
+msgstr "दयम (_D)"
+
+#: ../shell/ev-window.c:4479
+msgid "Show two pages at once"
+msgstr "अके साथ ह्यव ज़ पेज"
+
+#: ../shell/ev-window.c:4481
+msgid "_Fullscreen"
+msgstr "फुलस्क्रीन (_F)"
+
+#: ../shell/ev-window.c:4482
+msgid "Expand the window to fill the screen"
+msgstr "विंडो बडाव स्क्रीन भरन खत्तर"
+
+#: ../shell/ev-window.c:4484
+#, fuzzy
+msgid "Pre_sentation"
+msgstr "हावुन (_P)"
+
+#: ../shell/ev-window.c:4485
+msgid "Run document as a presentation"
+msgstr "कागजात चल्लयव हावून खत्तर।"
+
+#: ../shell/ev-window.c:4487
+msgid "_Best Fit"
+msgstr "सारि खोत बराबर (_B)"
+
+#: ../shell/ev-window.c:4488
+msgid "Make the current document fill the window"
+msgstr "यम कागज सित्त बरिव विंडो"
+
+#: ../shell/ev-window.c:4490
+msgid "Fit Page _Width"
+msgstr "कागज खज्जर करिव बराबर (_W)"
+
+#: ../shell/ev-window.c:4491
+msgid "Make the current document fill the window width"
+msgstr "यम कागज्ज सित बरिव विंडो"
+
+#. Links
+#: ../shell/ev-window.c:4498
+msgid "_Open Link"
+msgstr "लिंक खुलिव (_O)"
+
+#: ../shell/ev-window.c:4500
+msgid "_Go To"
+msgstr "गच्छिव (_G)"
+
+#: ../shell/ev-window.c:4502
+msgid "Open in New _Window"
+msgstr "नय विंडो मंज खुलिव"
+
+#: ../shell/ev-window.c:4504
+msgid "_Copy Link Address"
+msgstr "लिंकस करिव नकल (_C)"
+
+#: ../shell/ev-window.c:4506
+#, fuzzy
+msgid "_Save Image As..."
+msgstr "सेव करिव...(_S)"
+
+#: ../shell/ev-window.c:4508
+msgid "Copy _Image"
+msgstr "ईमेज करिव नकल"
+
+#: ../shell/ev-window.c:4547
+msgid "Page"
+msgstr "कागज"
+
+#: ../shell/ev-window.c:4548
+msgid "Select Page"
+msgstr "पेज तुलिव"
+
+#: ../shell/ev-window.c:4559
+msgid "Zoom"
+msgstr "ज़ूम"
+
+#: ../shell/ev-window.c:4561
+msgid "Adjust the zoom level"
+msgstr "जूम लेबल करिव बराबर"
+
+#: ../shell/ev-window.c:4571
+msgid "Navigation"
+msgstr "नचव"
+
+#: ../shell/ev-window.c:4573
+msgid "Back"
+msgstr "पात्थ"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:4576
+msgid "Move across visited pages"
+msgstr "वुछमित पेज मंज पकिव"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4606
+msgid "Previous"
+msgstr "पतिम"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4611
+msgid "Next"
+msgstr "बरूठिम"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4615
+msgid "Zoom In"
+msgstr "ज़ूम इन"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4619
+msgid "Zoom Out"
+msgstr "ज़ूम आउट"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4627
+msgid "Fit Width"
+msgstr "खजर कर बराबर"
+
+#: ../shell/ev-window.c:4832
+#, fuzzy
+msgid "Unable to open external link"
+msgstr "नयबरिम लिंक छिन खुलान"
+
+#: ../shell/ev-window.c:4993
+msgid "Couldn't find appropriate format to save image"
+msgstr "ईमेज सेव करनुक फारमेट हयोकस न कमपलिट करिथ।"
+
+#: ../shell/ev-window.c:5033
+#, fuzzy
+msgid "The image could not be saved."
+msgstr "ईमेज हयकव न सेव करिथ।"
+
+#: ../shell/ev-window.c:5065
+#, fuzzy
+msgid "Save Image"
+msgstr "ईमेज बच्चयव"
+
+#: ../shell/ev-window.c:5124
+msgid "Unable to open attachment"
+msgstr "कागजात आय न खोलन्य"
+
+#: ../shell/ev-window.c:5176
+msgid "The attachment could not be saved."
+msgstr "एटेचमेंट हयकव न सेव करिथ।"
+
+#: ../shell/ev-window.c:5221
+#, fuzzy
+msgid "Save Attachment"
+msgstr "एटेचमेंट करिव सेव"
+
+#: ../shell/ev-window-title.c:145
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - पास्वड जरूरत"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "ऐक्सटनशन स्यीत"
+
+#: ../shell/main.c:59
+msgid "The page of the document to display."
+msgstr "हावन खत्तर कागजातन हुंद पेज"
+
+#: ../shell/main.c:59
+msgid "PAGE"
+msgstr "वरूकख"
+
+#: ../shell/main.c:60
+msgid "Run evince in fullscreen mode"
+msgstr "पूर्ण स्क्रीन मोड में एवींस चलायेंएवींस चल्लयव सर्यस्यह् स्क्रीनस।"
+
+#: ../shell/main.c:61
+msgid "Run evince in presentation mode"
+msgstr "एवींस चल्लयव हावून खत्तर।"
+
+#: ../shell/main.c:62
+msgid "Run evince as a previewer"
+msgstr "एवींस चल्लयव वुछन् खत्तर।"
+
+#: ../shell/main.c:63
+#, fuzzy
+msgid "The word or phrase to find in the document"
+msgstr "कागजात मंज शब्द या मुहावरह् छंडिव।"
+
+#: ../shell/main.c:63
+msgid "STRING"
+msgstr "सटर्रिंग"
+
+#: ../shell/main.c:66
+msgid "[FILE...]"
+msgstr "[फाइल...]"
+
+#: ../shell/main.c:333
+msgid "MATE Document Viewer"
+msgstr "गनोम कागजात वुच्छुनूक"
+
+#: ../shell/main.c:395
+msgid "Evince Document Viewer"
+msgstr "एवींस कागजात वुछिव।"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr "बूलियन छु सही थंबनेलन ठिक करान त: गल्त थंबनेलन बंद करान।"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "पीडीएफयूक थंबनेल चालू कर।"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "पीडीएफ कागज़ात खत्तर निशान कमांड।"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"कमांड त दलील पीडीएफ कागज़ात निशान खत्तर। ज्यादह् दलिलखत्तर वुछिव थंबनेल कागज़ात।"
+
+#~ msgid "BBox"
+#~ msgstr "बी-बाक्स"
+
+#~ msgid "Letter"
+#~ msgstr "चीठ"
+
+#~ msgid "Tabloid"
+#~ msgstr "टेब्लाइड"
+
+#~ msgid "Ledger"
+#~ msgstr "लेजर"
+
+#~ msgid "Legal"
+#~ msgstr "लीगल"
+
+#~ msgid "Statement"
+#~ msgstr "स्टेटमेन्ट"
+
+#~ msgid "Executive"
+#~ msgstr "एक्ज़ीक्यूटिव"
+
+#~ msgid "A0"
+#~ msgstr "ए0"
+
+#~ msgid "A1"
+#~ msgstr "ए1"
+
+#~ msgid "A2"
+#~ msgstr "ए2"
+
+#~ msgid "A3"
+#~ msgstr "ए3"
+
+#~ msgid "A4"
+#~ msgstr "ए4"
+
+#~ msgid "A5"
+#~ msgstr "ए५"
+
+#~ msgid "B4"
+#~ msgstr "बी4"
+
+#~ msgid "B5"
+#~ msgstr "बी5"
+
+#~ msgid "Folio"
+#~ msgstr "फोलियो"
+
+#~ msgid "Quarto"
+#~ msgstr "क्वार्टो"
+
+#~ msgid "10x14"
+#~ msgstr "१०X१४"
+
+#, fuzzy
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "फ़ाइल “%s” हयको न खुलित\n"
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "“%s” कागजात हयोकस न लोड करितथ। गोस्टसकरिप्ट इंटरपरेटर छुन्न पन्निस पाथस मंज।"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "इन्नकेपशुलेटिड पोस्टसकरिपट"
+
+#~ msgid "PostScript"
+#~ msgstr "पोस्टसकरिपट"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "इन्टरप्रेटर हयोक न करिथ"
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "ईसतेमाल करन्य एम आई एम ई टायप: “%s”"
+
+#~ msgid "Open “%s”"
+#~ msgstr "“%s” खोलें"
+
+#~ msgid "Empty"
+#~ msgstr "खाली"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "No document loaded."
+#~ msgstr "कोई दस्तावेज़ लोडेड नहीं."
+
+#~ msgid "Broken pipe."
+#~ msgstr "टूटा पाइप."
+
+#, fuzzy
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "फ़ाइल असंपीडित करने में त्रुटि: %s\n"
+
+#~ msgid "File is not readable."
+#~ msgstr "फ़ाइल पढ़ने योग्य नहीं है."
+
+#~ msgid "Document loaded."
+#~ msgstr "दास्तावेज़ लोड किया."
+
+#, fuzzy
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "आप एक मुद्रक पर मुद्रित करने की कोशिश कर रहे हैं जो \"%s\" ड्राइवर उपयोग करता है. "
+#~ "इस प्रोग्राम को पोस्ट-स्क्रिप्ट मुद्रक ड्राइवर की आवश्यकता है."
diff --git a/po/ku.po b/po/ku.po
new file mode 100644
index 00000000..60bc8634
--- /dev/null
+++ b/po/ku.po
@@ -0,0 +1,1287 @@
+# translation of evince.mate-2-12.po to Kurdish
+# Kurdish translation for evince
+# Copyright (c) (c) 2005 Canonical Ltd, and Rosetta Contributors 2005
+# This file is distributed under the same license as the evince package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2005.
+# Erdal Ronahi <[email protected]>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.mate-2-12\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-03-04 19:43+0100\n"
+"PO-Revision-Date: 2007-03-04 19:48+0100\n"
+"Last-Translator: Erdal Ronahi <[email protected]>\n"
+"Language-Team: Kurdish <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Rosetta-Version: 0.1\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.10.2\n"
+"X-Rosetta-Export-Date: 2007-02-28 23:18+0000\n"
+
+#: ../backend/comics/comics-document.c:148
+msgid "File corrupted."
+msgstr "Pel xera bûye."
+
+#: ../backend/comics/comics-document.c:184
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Di arşîva %s de wêne nehate dîtin"
+
+#: ../backend/djvu/djvu-document.c:159
+msgid "The document is composed by several files. One or more of such files cannot be accessed."
+msgstr ""
+
+#: ../backend/dvi/dvi-document.c:89
+msgid "File not available"
+msgstr "Pel ne gihişbar e"
+
+#: ../backend/dvi/dvi-document.c:104
+msgid "DVI document has incorrect format"
+msgstr "Belgeya DVI xwediyê celebê nederbasdar e"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:628
+msgid "Yes"
+msgstr "Erê"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:631
+msgid "No"
+msgstr "Na"
+
+#: ../backend/pdf/ev-poppler.cc:731
+msgid "Type 1"
+msgstr "Cureyê 1"
+
+#: ../backend/pdf/ev-poppler.cc:733
+msgid "Type 1C"
+msgstr "Cureyê 1C"
+
+#: ../backend/pdf/ev-poppler.cc:735
+msgid "Type 3"
+msgstr "Cureyê 3"
+
+#: ../backend/pdf/ev-poppler.cc:737
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:739
+msgid "Type 1 (CID)"
+msgstr "Cureyê 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:741
+msgid "Type 1C (CID)"
+msgstr "Cureyê 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:743
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:745
+msgid "Unknown font type"
+msgstr "Cureyê tîpan yê nenas"
+
+#: ../backend/pdf/ev-poppler.cc:771
+msgid "No name"
+msgstr "Bênav"
+
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Embedded subset"
+msgstr "Koma jêr ya veşartî"
+
+#: ../backend/pdf/ev-poppler.cc:781
+msgid "Embedded"
+msgstr "Veşartî"
+
+#: ../backend/pdf/ev-poppler.cc:783
+msgid "Not embedded"
+msgstr "Neveşartî"
+
+#: ../backend/impress/zip.c:50
+msgid "No error"
+msgstr ""
+
+#: ../backend/impress/zip.c:53
+msgid "Not enough memory"
+msgstr ""
+
+#: ../backend/impress/zip.c:56
+msgid "Cannot find zip signature"
+msgstr ""
+
+#: ../backend/impress/zip.c:59
+msgid "Invalid zip file"
+msgstr "Pelê zip ê nederbasdar"
+
+#: ../backend/impress/zip.c:62
+#, fuzzy
+msgid "Multi file zips are not supported"
+msgstr "Pêkhatina PDF nayê destekkirin"
+
+#: ../backend/impress/zip.c:65
+msgid "Cannot open the file"
+msgstr "Vekirina pelî serneket"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot read data from file"
+msgstr ""
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot find file in the zip archive"
+msgstr ""
+
+#: ../backend/impress/zip.c:74
+msgid "Unknown error"
+msgstr "Çewtiya nenas"
+
+#: ../backend/ps/gsdefaults.c:30
+msgid "BBox"
+msgstr "BBox"
+
+#: ../backend/ps/gsdefaults.c:31
+msgid "Letter"
+msgstr "Name"
+
+#: ../backend/ps/gsdefaults.c:32
+msgid "Tabloid"
+msgstr "Tabloid"
+
+#: ../backend/ps/gsdefaults.c:33
+msgid "Ledger"
+msgstr "Ledger"
+
+#: ../backend/ps/gsdefaults.c:34
+msgid "Legal"
+msgstr "Legal"
+
+#: ../backend/ps/gsdefaults.c:35
+msgid "Statement"
+msgstr "Statement"
+
+#: ../backend/ps/gsdefaults.c:36
+msgid "Executive"
+msgstr "Rayedar"
+
+#: ../backend/ps/gsdefaults.c:37
+msgid "A0"
+msgstr "A0"
+
+#: ../backend/ps/gsdefaults.c:38
+msgid "A1"
+msgstr "A1"
+
+#: ../backend/ps/gsdefaults.c:39
+msgid "A2"
+msgstr "A2"
+
+#: ../backend/ps/gsdefaults.c:40
+msgid "A3"
+msgstr "A3"
+
+#: ../backend/ps/gsdefaults.c:41
+msgid "A4"
+msgstr "A4"
+
+#: ../backend/ps/gsdefaults.c:42
+msgid "A5"
+msgstr "A5"
+
+#: ../backend/ps/gsdefaults.c:43
+msgid "B4"
+msgstr "B4"
+
+#: ../backend/ps/gsdefaults.c:44
+msgid "B5"
+msgstr "B5"
+
+#: ../backend/ps/gsdefaults.c:45
+msgid "Folio"
+msgstr "Folio"
+
+#: ../backend/ps/gsdefaults.c:46
+msgid "Quarto"
+msgstr "Quarto"
+
+#: ../backend/ps/gsdefaults.c:47
+msgid "10x14"
+msgstr "10x14"
+
+#: ../backend/ps/ps-document.c:172
+#: ../backend/ps/ps-document.c:186
+#, c-format
+msgid "Cannot open file “%s”.\n"
+msgstr "Pelê \"%s\" nayê vekirin.\n"
+
+#: ../backend/ps/ps-document.c:233
+#, c-format
+msgid "Failed to load document “%s”. Ghostscript interpreter was not found in path"
+msgstr "Dema belgeya \"%s\" dihate barkirin bi ser neket. Xebatkerê Ghostskrîpt di hundirê \"path\"ê de nehate dîtin."
+
+#: ../backend/ps/ps-document.c:250
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Barkirina belgeya \"%s\" bi ser neket"
+
+#: ../backend/ps/ps-document.c:439
+msgid "Encapsulated PostScript"
+msgstr "Encapsulated PostScript"
+
+#: ../backend/ps/ps-document.c:440
+msgid "PostScript"
+msgstr "PostScript"
+
+#: ../backend/ps/ps-interpreter.c:541
+msgid "Interpreter failed."
+msgstr "Şîroveker bi ser neket."
+
+#: ../backend/impress/impress-document.c:294
+#, fuzzy
+msgid "Remote files aren't supported"
+msgstr "Pêkhatina PDF nayê destekkirin"
+
+#: ../backend/impress/impress-document.c:305
+msgid "Invalid document"
+msgstr "Belgeya nederbasdar"
+
+#: ../libdocument/ev-attachment.c:303
+#: ../libdocument/ev-attachment.c:316
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Pêveka \"%s\" nehate tomarkirin: %s"
+
+#: ../libdocument/ev-attachment.c:348
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Pêveka \"%s\" venebû: %s"
+
+#: ../libdocument/ev-attachment.c:381
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Pêveka \"%s\" venebû"
+
+#: ../libdocument/ev-document-factory.c:291
+#: ../libdocument/ev-document-factory.c:405
+msgid "Unknown MIME Type"
+msgstr "Cureyê MIME yê Nenas"
+
+#: ../libdocument/ev-document-factory.c:302
+#, c-format
+msgid "Unhandled MIME type: “%s”"
+msgstr "Cureyê MIME ya nehate xebitandin: \"%s\""
+
+#: ../libdocument/ev-document-factory.c:446
+msgid "All Documents"
+msgstr "Hemû Belge"
+
+#: ../libdocument/ev-document-factory.c:454
+msgid "PostScript Documents"
+msgstr "Belgeyên PostScript"
+
+#: ../libdocument/ev-document-factory.c:464
+msgid "PDF Documents"
+msgstr "Belgeyên PDF"
+
+#: ../libdocument/ev-document-factory.c:474
+#: ../shell/ev-window.c:4669
+msgid "Images"
+msgstr "Wêne"
+
+#: ../libdocument/ev-document-factory.c:484
+msgid "DVI Documents"
+msgstr "Belgeyên DVI"
+
+#: ../libdocument/ev-document-factory.c:494
+msgid "Djvu Documents"
+msgstr "Belgeyên Djvu"
+
+#: ../libdocument/ev-document-factory.c:504
+msgid "Comic Books"
+msgstr "Pirtûkên Qerfî"
+
+#: ../libdocument/ev-document-factory.c:514
+msgid "Impress Slides"
+msgstr "Pêşanên Impressê"
+
+#: ../libdocument/ev-document-factory.c:522
+msgid "All Files"
+msgstr "Hemû Pel"
+
+#: ../cut-n-paste/recent-files/egg-recent-view-uimanager.c:205
+#, c-format
+msgid "Open “%s”"
+msgstr "\"%s\" Veke"
+
+#: ../cut-n-paste/recent-files/egg-recent-view-uimanager.c:322
+#: ../shell/ev-navigation-action.c:118
+msgid "Empty"
+msgstr "Vala"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:902
+#, c-format
+msgid "Show “_%s”"
+msgstr "\"_%s\" nîşan bide"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1362
+msgid "_Move on Toolbar"
+msgstr "Li Ser Darikê Amûran Bikşîne"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1363
+msgid "Move the selected item on the toolbar"
+msgstr "Hêmana hilbijartî li ser darikê amûran bibe"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1364
+msgid "_Remove from Toolbar"
+msgstr "Ji Darikê Amûran _Rake"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1365
+msgid "Remove the selected item from the toolbar"
+msgstr "Hêmana hatiye hilbijartin ji darikê amûran rake"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1366
+msgid "_Delete Toolbar"
+msgstr "Darikê Amûran _Jê Bibe"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1367
+msgid "Remove the selected toolbar"
+msgstr "Darikê amûran yê hilbijartî rake"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:439
+msgid "Separator"
+msgstr "Veqetîner"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+#, fuzzy
+msgid "Running in presentation mode"
+msgstr "Evince di moda pêşkêşiyê de bixebitîne"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48
+#: ../shell/ev-window.c:4322
+msgid "Best Fit"
+msgstr "Yek Rûpel"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Firehiya Rûpelê"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "%50"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "75%"
+msgstr "%75"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "100%"
+msgstr "%100"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "125%"
+msgstr "%125"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "150%"
+msgstr "%150"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "175%"
+msgstr "%175"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "200%"
+msgstr "%200"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "300%"
+msgstr "%300"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "400%"
+msgstr "%400"
+
+#: ../data/evince.desktop.in.in.h:1
+#: ../shell/ev-window.c:3484
+#: ../shell/ev-window-title.c:127
+msgid "Document Viewer"
+msgstr "Nîşanderê Belgeyan"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "Belgeyên pir-rûpelî nîşan bide"
+
+#: ../data/evince-password.glade.h:1
+#, fuzzy
+msgid "Password Entry"
+msgstr "Şî_fre:"
+
+#: ../data/evince-password.glade.h:2
+msgid "Remember password for this session"
+msgstr "Bo vê danişînê şîfreyê bibîr bîne"
+
+#: ../data/evince-password.glade.h:3
+msgid "Save password in keyring"
+msgstr "Şîfreyê li miftedankê de tomar bike"
+
+#: ../data/evince-password.glade.h:4
+msgid "_Password:"
+msgstr "Şî_fre:"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>Nivîskar:</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>Dîroka afirandinê:</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>Afirandêr:</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>Format:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b>Peyvên Mîna Mifteyan:</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>Hatiye guheandin:</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b>Hejmara Rûpelan:</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr "<b>Herî tekûz:</b>"
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Paper Size:</b>"
+msgstr "<b>Mezinahiya Kaxizê:</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Producer:</b>"
+msgstr "<b>Hilberîner:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Security:</b>"
+msgstr "<b>Ewlekarî:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Subject:</b>"
+msgstr "<b>Mijar:</b>"
+
+#: ../data/evince-properties.glade.h:13
+msgid "<b>Title:</b>"
+msgstr "<b>Sernivîs:</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Zorê bide sînorkirinên Belgeyan"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Sînorkirinên belgeyê yên wekî jibergirtin û nivîsînê diguherîne."
+
+#: ../properties/ev-properties-main.c:110
+msgid "Document"
+msgstr "Belge"
+
+#: ../properties/ev-properties-view.c:179
+msgid "None"
+msgstr "Tune"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:260
+msgid "default:mm"
+msgstr "pêşdanasînî:mm"
+
+#. Imperial measurement (inches)
+#: ../properties/ev-properties-view.c:292
+#, c-format
+msgid "%.2f x %.2f in"
+msgstr "%.2f x %.2f inç"
+
+#. Metric measurement (millimeters)
+#: ../properties/ev-properties-view.c:297
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:308
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr ""
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:315
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr ""
+
+#: ../shell/eggfindbar.c:157
+msgid "Search string"
+msgstr "Rêzika Lêgerînê"
+
+#: ../shell/eggfindbar.c:158
+msgid "The name of the string to be found"
+msgstr "Navê rêzika ku divê were dîtin"
+
+#: ../shell/eggfindbar.c:171
+msgid "Case sensitive"
+msgstr "Ji tîpên biçûk/MEZIN re bihîstyar"
+
+#: ../shell/eggfindbar.c:172
+msgid "TRUE for a case sensitive search"
+msgstr ""
+
+#: ../shell/eggfindbar.c:179
+msgid "Highlight color"
+msgstr "Rengê Biriqandinê"
+
+#: ../shell/eggfindbar.c:180
+msgid "Color of highlight for all matches"
+msgstr "Ji bo hemû hevalbendiyan rengê nîşankirinê"
+
+#: ../shell/eggfindbar.c:186
+msgid "Current color"
+msgstr "Rengê heyî"
+
+#: ../shell/eggfindbar.c:187
+msgid "Color of highlight for the current match"
+msgstr "Ji bo hevalbendiya derbasdar rengê nîşankirinê"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Bibîne:"
+
+#: ../shell/eggfindbar.c:329
+msgid "Find Previous"
+msgstr "Ya Berî Wê Bibîne"
+
+#: ../shell/eggfindbar.c:332
+msgid "Find previous occurrence of the search string"
+msgstr "Cihê berê yê rêzika lêgerînê hate dîtin bibîne"
+
+#: ../shell/eggfindbar.c:337
+msgid "Find Next"
+msgstr "Ya Dû re Bibîne"
+
+#: ../shell/eggfindbar.c:340
+msgid "Find next occurrence of the search string"
+msgstr "Cihê dûre yê rêzika lêgerînê lê hatiye dîtin bibîne"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Rewşa_histiyar"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr ""
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d ji %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "ji %d"
+
+#: ../shell/ev-password.c:83
+msgid "Password required"
+msgstr "Şîfre pêwîste e"
+
+#: ../shell/ev-password.c:84
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "Belgeya \"%s\" quflekirî ye û ji bo were vekirin şîfre pêwist e."
+
+#: ../shell/ev-password.c:149
+msgid "Enter password"
+msgstr "Şîfreyê binivîse"
+
+#: ../shell/ev-password.c:252
+#, c-format
+msgid "Password for document %s"
+msgstr "Ji bo belgeya %s şîfre"
+
+#: ../shell/ev-password.c:334
+msgid "Incorrect password"
+msgstr "Şîfreya Nederbasdar"
+
+#: ../shell/ev-password-view.c:111
+msgid "This document is locked and can only be read by entering the correct password."
+msgstr "Ev belge quflekirî ye û heke şîfreya rasteqîn were nivîsîn encax dikare were xwendin."
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "_Qufleya Belgeyê Rake"
+
+#: ../shell/ev-properties-dialog.c:61
+msgid "Properties"
+msgstr "Taybetmendî"
+
+#: ../shell/ev-properties-dialog.c:94
+msgid "General"
+msgstr "Giştî"
+
+#: ../shell/ev-properties-dialog.c:104
+msgid "Fonts"
+msgstr "Cureyên nivîsê"
+
+#: ../shell/ev-properties-fonts.c:139
+msgid "Font"
+msgstr "Cureyê nivîsê"
+
+#: ../shell/ev-properties-fonts.c:150
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "Agahiya curetîpan têne stendin... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:663
+msgid "Attachments"
+msgstr "Pêvek"
+
+#: ../shell/ev-sidebar-links.c:266
+#: ../shell/ev-view.c:2823
+msgid "Loading..."
+msgstr "Tê bar kirin..."
+
+#: ../shell/ev-sidebar-links.c:342
+msgid "Print..."
+msgstr "Çap..."
+
+#: ../shell/ev-sidebar-links.c:714
+msgid "Index"
+msgstr "Pêrist"
+
+#: ../shell/ev-sidebar-thumbnails.c:724
+msgid "Thumbnails"
+msgstr "Wêneyên biçûk"
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Up"
+msgstr "Bişemitîne Jor"
+
+#: ../shell/ev-view-accessible.c:43
+msgid "Scroll Down"
+msgstr "Bişemitîne Jêr"
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Up"
+msgstr ""
+
+#: ../shell/ev-view-accessible.c:50
+msgid "Scroll View Down"
+msgstr ""
+
+#: ../shell/ev-view-accessible.c:536
+msgid "Document View"
+msgstr "Dîtina Belgeyê"
+
+#: ../shell/ev-view.c:1414
+msgid "Go to first page"
+msgstr "Biçe rûpelê pêşîn"
+
+#: ../shell/ev-view.c:1416
+msgid "Go to previous page"
+msgstr "Biçe rûpelê berê"
+
+#: ../shell/ev-view.c:1418
+msgid "Go to next page"
+msgstr "Biçe rûpelê dû re"
+
+#: ../shell/ev-view.c:1420
+msgid "Go to last page"
+msgstr "Biçe rûpelê dawîn"
+
+#: ../shell/ev-view.c:1422
+msgid "Go to page"
+msgstr "Biçe rûpel"
+
+#: ../shell/ev-view.c:1424
+msgid "Find"
+msgstr "Bibîne"
+
+#: ../shell/ev-view.c:1451
+#, c-format
+msgid "Go to page %s"
+msgstr "Biçe rûpelê %s"
+
+#: ../shell/ev-view.c:1456
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Here %s di pelê “%s”"
+
+#: ../shell/ev-view.c:1459
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Biçe pelê \"%s\""
+
+#: ../shell/ev-view.c:1468
+#, c-format
+msgid "Launch %s"
+msgstr "%s bide destpêkirin"
+
+#: ../shell/ev-view.c:1858
+msgid "End of presentation. Press Escape to exit."
+msgstr ""
+
+#: ../shell/ev-view.c:2536
+msgid "Jump to page:"
+msgstr "Biçe rûpel:"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:4153
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d di vê rûpelê de hatiye dîtin"
+msgstr[1] "%d di vê rûpelê de hatine dîtin"
+
+#: ../shell/ev-view.c:4162
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% lêgerînê bibîr dixe"
+
+#: ../shell/ev-window.c:735
+#, c-format
+msgid "Page %s - %s"
+msgstr "Rûpela %s - %s"
+
+#: ../shell/ev-window.c:737
+#, c-format
+msgid "Page %s"
+msgstr "Rûpela %s"
+
+#: ../shell/ev-window.c:1314
+msgid "Unable to open document"
+msgstr "Belge nehate vekirin"
+
+#: ../shell/ev-window.c:1476
+msgid "Open Document"
+msgstr "Belgeyê Veke"
+
+#: ../shell/ev-window.c:1531
+#, fuzzy, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "Pêveka \"%s\" nehate tomarkirin: %s"
+
+#: ../shell/ev-window.c:1560
+msgid "Cannot open a copy."
+msgstr "Vekirina pelekî serneket."
+
+#: ../shell/ev-window.c:1843
+#, fuzzy, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "Barkirina belgeya \"%s\" bi ser neket"
+
+#: ../shell/ev-window.c:1904
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Pel wekî \"%s\" nehate tomarkirin."
+
+#: ../shell/ev-window.c:1925
+msgid "Save a Copy"
+msgstr "Kopiyekê Tomar bike"
+
+#: ../shell/ev-window.c:2006
+msgid "Failed to print document"
+msgstr "Dema belge dihate çapkirin bi ser neket"
+
+#: ../shell/ev-window.c:2125
+#: ../shell/ev-window.c:2310
+msgid "Printing is not supported on this printer."
+msgstr "Çapkirina di vê çaperê de nayê destekkirin."
+
+#: ../shell/ev-window.c:2235
+#: ../shell/ev-window.c:2361
+msgid "Print"
+msgstr "Çap"
+
+#: ../shell/ev-window.c:2300
+msgid "Generating PDF is not supported"
+msgstr "Pêkhatina PDF nayê destekkirin"
+
+#: ../shell/ev-window.c:2312
+#, c-format
+msgid "You were trying to print to a printer using the “%s” driver. This program requires a PostScript printer driver."
+msgstr "Tu dixwazî ajokerê \"%s\" bikar bîne û ji çaperê deranekê bistîne. Ev bername pêdiviya wê ji ajokera PostSkrîpt heye"
+
+#: ../shell/ev-window.c:2370
+msgid "Pages"
+msgstr "Rûpel"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:2737
+#: ../shell/ev-window.c:4132
+msgid "Leave Fullscreen"
+msgstr "Ji Dîmender Tije Derkeve"
+
+#: ../shell/ev-window.c:3109
+msgid "Toolbar Editor"
+msgstr "Sererastkerê Darikê Amûran"
+
+#: ../shell/ev-window.c:3480
+#, fuzzy, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Nîşanderkê Pelên PostSkrîpt û PDF\n"
+"Popplerên têne bikaranîn %s (%s)"
+
+#: ../shell/ev-window.c:3508
+msgid "Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:3512
+msgid "Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:3516
+msgid "You should have received a copy of the GNU General Public License along with Evince; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+
+#: ../shell/ev-window.c:3540
+#: ../shell/main.c:284
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:3543
+msgid "© 1996-2007 The Evince authors"
+msgstr "© 1996-2007 Nivîskarên Evince"
+
+#: ../shell/ev-window.c:3549
+msgid "translator-credits"
+msgstr "Erdal Ronahi <[email protected]>"
+
+#: ../shell/ev-window.c:4049
+msgid "_File"
+msgstr "_Pel"
+
+#: ../shell/ev-window.c:4050
+msgid "_Edit"
+msgstr "_Biguherîne"
+
+#: ../shell/ev-window.c:4051
+msgid "_View"
+msgstr "_Dîtin"
+
+#: ../shell/ev-window.c:4052
+msgid "_Go"
+msgstr "_Here"
+
+#: ../shell/ev-window.c:4053
+msgid "_Help"
+msgstr "_Alîkarî"
+
+#. File menu
+#: ../shell/ev-window.c:4056
+#: ../shell/ev-window.c:4228
+msgid "_Open..."
+msgstr "_Veke..."
+
+#: ../shell/ev-window.c:4057
+msgid "Open an existing document"
+msgstr "Belgeyeke heyî veke"
+
+#: ../shell/ev-window.c:4059
+msgid "Open a _Copy"
+msgstr "_Kopiyekê Veke"
+
+#: ../shell/ev-window.c:4060
+#, fuzzy
+msgid "Open a copy of the current document in a new window"
+msgstr "Belgeya derbasdar bila paceyê tije bike"
+
+#: ../shell/ev-window.c:4062
+#: ../shell/ev-window.c:4230
+msgid "_Save a Copy..."
+msgstr "Kopiyekê _Tomar Bike..."
+
+#: ../shell/ev-window.c:4063
+msgid "Save a copy of the current document"
+msgstr ""
+
+#: ../shell/ev-window.c:4065
+msgid "Print Set_up..."
+msgstr "_Veavakirina Çapê..."
+
+#: ../shell/ev-window.c:4066
+msgid "Setup the page settings for printing"
+msgstr ""
+
+#: ../shell/ev-window.c:4068
+msgid "_Print..."
+msgstr "_Çap..."
+
+#: ../shell/ev-window.c:4069
+msgid "Print this document"
+msgstr "Vê belgeyê çap bike"
+
+#: ../shell/ev-window.c:4071
+msgid "P_roperties"
+msgstr "Ta_ybetmentî"
+
+#: ../shell/ev-window.c:4080
+#: ../shell/ev-window.c:4082
+msgid "Select _All"
+msgstr "Hemûyî _Hilbijêre"
+
+#: ../shell/ev-window.c:4085
+msgid "_Find..."
+msgstr "_Bibîne..."
+
+#: ../shell/ev-window.c:4086
+msgid "Find a word or phrase in the document"
+msgstr "Di hundirê dokumanê de li pey an jî biwêjan bigere"
+
+#: ../shell/ev-window.c:4088
+msgid "Find Ne_xt"
+msgstr "Ya _piştr e bibîne"
+
+#: ../shell/ev-window.c:4090
+msgid "Find Pre_vious"
+msgstr "Ya _berê bibîne"
+
+#: ../shell/ev-window.c:4092
+msgid "T_oolbar"
+msgstr "_Darika amûran"
+
+#: ../shell/ev-window.c:4094
+msgid "Rotate _Left"
+msgstr "Bizivirîne _Çepê"
+
+#: ../shell/ev-window.c:4096
+msgid "Rotate _Right"
+msgstr "Bizivirîne _Rastê"
+
+#: ../shell/ev-window.c:4101
+msgid "Enlarge the document"
+msgstr "Belgeyê fireh bike"
+
+#: ../shell/ev-window.c:4104
+msgid "Shrink the document"
+msgstr "Belgeyê teng bike"
+
+#: ../shell/ev-window.c:4106
+msgid "_Reload"
+msgstr "_Nû Bike"
+
+#: ../shell/ev-window.c:4107
+msgid "Reload the document"
+msgstr "Belgeyê ji nû ve bar bike"
+
+#. Go menu
+#: ../shell/ev-window.c:4111
+msgid "_Previous Page"
+msgstr "Rûpelê _Berê"
+
+#: ../shell/ev-window.c:4112
+msgid "Go to the previous page"
+msgstr "Biçe rûpelê berê"
+
+#: ../shell/ev-window.c:4114
+msgid "_Next Page"
+msgstr "Rûpelê _Dû re"
+
+#: ../shell/ev-window.c:4115
+msgid "Go to the next page"
+msgstr "Biçe rûpelê pişt re"
+
+#: ../shell/ev-window.c:4117
+msgid "_First Page"
+msgstr "Rûpelê _Pêşîn"
+
+#: ../shell/ev-window.c:4118
+msgid "Go to the first page"
+msgstr "Biçe rûpelê pêşîn"
+
+#: ../shell/ev-window.c:4120
+msgid "_Last Page"
+msgstr "Rûpelê _Dawîn"
+
+#: ../shell/ev-window.c:4121
+msgid "Go to the last page"
+msgstr "Here rûpela dawî"
+
+#. Help menu
+#: ../shell/ev-window.c:4125
+msgid "_Contents"
+msgstr "_Naverok"
+
+#: ../shell/ev-window.c:4128
+msgid "_About"
+msgstr "_Der barê"
+
+#: ../shell/ev-window.c:4133
+msgid "Leave fullscreen mode"
+msgstr "Moda dîmender tije biterikîne"
+
+#. View Menu
+#: ../shell/ev-window.c:4184
+msgid "_Toolbar"
+msgstr "_Darikê Amûran"
+
+#: ../shell/ev-window.c:4185
+msgid "Show or hide the toolbar"
+msgstr "Darika amûran nîşan bide an veşêre"
+
+#: ../shell/ev-window.c:4187
+msgid "Side _Pane"
+msgstr "_Panela Kêlekê"
+
+#: ../shell/ev-window.c:4188
+msgid "Show or hide the side pane"
+msgstr "Panela kêlekê nîşan bide yan jî veşêre"
+
+#: ../shell/ev-window.c:4190
+msgid "_Continuous"
+msgstr "_Li dû hev"
+
+#: ../shell/ev-window.c:4191
+msgid "Show the entire document"
+msgstr "Tevî belgeyê nîşan bide"
+
+#: ../shell/ev-window.c:4193
+msgid "_Dual"
+msgstr "_Cot"
+
+#: ../shell/ev-window.c:4194
+msgid "Show two pages at once"
+msgstr "Bi carekê re du rûpelan nîşan bide"
+
+#: ../shell/ev-window.c:4196
+msgid "_Fullscreen"
+msgstr "_Dîmender tijî"
+
+#: ../shell/ev-window.c:4197
+msgid "Expand the window to fill the screen"
+msgstr "Bi qasî dîmenderê tije dike paceyê fireh bike"
+
+#: ../shell/ev-window.c:4199
+msgid "_Presentation"
+msgstr "_Pêşkeşî"
+
+#: ../shell/ev-window.c:4200
+msgid "Run document as a presentation"
+msgstr "Belgeyê wekî pêşkeşî bide xebitandin"
+
+#: ../shell/ev-window.c:4202
+msgid "_Best Fit"
+msgstr "_Yek Rûpel"
+
+#: ../shell/ev-window.c:4203
+msgid "Make the current document fill the window"
+msgstr "Belgeya derbasdar bila paceyê tije bike"
+
+#: ../shell/ev-window.c:4205
+msgid "Fit Page _Width"
+msgstr "_Firehiya Rûpelê"
+
+#: ../shell/ev-window.c:4206
+msgid "Make the current document fill the window width"
+msgstr ""
+
+#. Links
+#: ../shell/ev-window.c:4213
+msgid "_Open Link"
+msgstr "Girêdanê veke"
+
+#: ../shell/ev-window.c:4215
+msgid "_Go To"
+msgstr "_Biçe"
+
+#: ../shell/ev-window.c:4217
+msgid "Open in New _Window"
+msgstr "Di _Paceya Nû de veke"
+
+#: ../shell/ev-window.c:4219
+msgid "_Copy Link Address"
+msgstr "Navnîşana Girêdanê _Ji Ber Bigire"
+
+#: ../shell/ev-window.c:4221
+msgid "_Save Image As..."
+msgstr "Wêneyî Cuda _Tomar Bike..."
+
+#: ../shell/ev-window.c:4223
+msgid "Copy _Image"
+msgstr ""
+
+#: ../shell/ev-window.c:4262
+msgid "Page"
+msgstr "Rûpel"
+
+#: ../shell/ev-window.c:4263
+msgid "Select Page"
+msgstr "Rûpel Hilbijêre"
+
+#: ../shell/ev-window.c:4273
+msgid "Zoom"
+msgstr "Mezinahî"
+
+#: ../shell/ev-window.c:4275
+msgid "Adjust the zoom level"
+msgstr "Asta nêzîkbûnê mîheng bike"
+
+#: ../shell/ev-window.c:4285
+msgid "Navigation"
+msgstr ""
+
+#: ../shell/ev-window.c:4287
+msgid "Back"
+msgstr "Paşve"
+
+#: ../shell/ev-window.c:4289
+msgid "Move across visited pages"
+msgstr ""
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4305
+msgid "Previous"
+msgstr "Paş"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4310
+msgid "Next"
+msgstr "Pêş"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4314
+msgid "Zoom In"
+msgstr "Nêzîk bike"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4318
+msgid "Zoom Out"
+msgstr "Dûr bibe"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4326
+msgid "Fit Width"
+msgstr ""
+
+#: ../shell/ev-window.c:4638
+#, fuzzy
+msgid "The image could not be saved."
+msgstr "Pêvek nehate tomarkirin"
+
+#: ../shell/ev-window.c:4657
+msgid "Save Image"
+msgstr "Wêneyî tomar bike"
+
+#: ../shell/ev-window.c:4712
+msgid "Unable to open attachment"
+msgstr "Pêvek nehate vekirin"
+
+#: ../shell/ev-window.c:4759
+msgid "The attachment could not be saved."
+msgstr "Pêvek nehate tomarkirin"
+
+#: ../shell/ev-window.c:4783
+msgid "Save Attachment"
+msgstr "Pêvekê Tomar bike"
+
+#: ../shell/ev-window-title.c:141
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - Şîfre Pêwist e"
+
+#: ../shell/main.c:53
+msgid "The page of the document to display."
+msgstr "Rûpelê belgeya ku wê were nîşandan."
+
+#: ../shell/main.c:53
+msgid "PAGE"
+msgstr "RÛPEL"
+
+#: ../shell/main.c:54
+msgid "Run evince in fullscreen mode"
+msgstr "Evince di moda dîmender tije de bixebitîne"
+
+#: ../shell/main.c:55
+msgid "Run evince in presentation mode"
+msgstr "Evince di moda pêşkêşiyê de bixebitîne"
+
+#: ../shell/main.c:56
+msgid "Run evince as a previewer"
+msgstr "Evince wekî pêşdîtinê bixebitîne"
+
+#: ../shell/main.c:58
+msgid "[FILE...]"
+msgstr "[PEL...]"
+
+#: ../shell/main.c:269
+msgid "MATE Document Viewer"
+msgstr "Nîşanderê Belgeyan yê MATE"
+
+#: ../shell/main.c:310
+msgid "Evince Document Viewer"
+msgstr "Nîşanderê Belgeyên Evince"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid "Boolean options available, true enables thumbnailing and false disables the creation of new thumbnails"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Çalakiya wêneyên biçûk yên Pelên PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Ji bo belgehên PDF fermana wêneyên biçûk"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid "Valid command plus arguments for the PDF Document thumbnailer. See caja thumbnailer documentation for more information."
+msgstr "Ji bo wênekerê biçûk yê Pelê PDF parametreyên zêdek yên fermanên derbasdar. Ji bo agahiyên berfireh li belgeya wênekerên biçûk yên cajaê binihêre."
+
+#~ msgid "No document loaded."
+#~ msgstr "Tu belge nebarkirî."
+#~ msgid "Broken pipe."
+#~ msgstr "Lûleya şikestî."
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "Dema tengkirina pelê \"%s\" dihate vekirin çewtî derket:\n"
+#~ msgid "File is not readable."
+#~ msgstr "Pel nayê xwedin."
+#~ msgid "Document loaded."
+#~ msgstr "Belge hatiye barkirin."
+#~ msgid "_Remove Toolbar"
+#~ msgstr "Darika amûran jê _bibe"
+#~ msgid "*"
+#~ msgstr "*"
+#~ msgid "F_ind:"
+#~ msgstr "_Bibîne:"
+#~ msgid "_Previous"
+#~ msgstr "_Ya berê"
+#~ msgid "_Next"
+#~ msgstr "Ya _pêş"
+#~ msgid "Not found"
+#~ msgstr "Nehat dîtin"
+
diff --git a/po/lt.po b/po/lt.po
new file mode 100644
index 00000000..ae7120bb
--- /dev/null
+++ b/po/lt.po
@@ -0,0 +1,1818 @@
+# translation of lt.po to Lithuanian
+# Lithuanian translation of Evince.
+# Copyright (C) 2005-2009 The MATE Foundation.
+# This file is distributed under the same license as the Evince package.
+#
+#
+# Žygimantas Beručka <[email protected]>, 2005-2006, 2009.
+# Justina Klingaitė <[email protected]>, 2005.
+# Gintautas Miliauskas <[email protected]>, 2007, 2008.
+# Aurimas Černius <[email protected]>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: lt\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-08-17 17:36+0300\n"
+"PO-Revision-Date: 2010-08-16 22:51+0300\n"
+"Last-Translator: Aurimas Černius <[email protected]>\n"
+"Language-Team: Lietuvių <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: UTF-8\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
+"100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Klaida paleidžiant komandą „%s“ komiksų knygos „%s“ išskleidimui"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Komandai „%s“ nepavyko išskleisti komiksų knygos."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Komanda „%s“ normaliai nebaigė darbo."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Ne komiksų knygos MIME tipas: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Nepavyko rasti tinkamos komandos išskleisti šio tipo komiksų knygos"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Nežinomas MIME tipas"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Failas sugadintas"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Archyve nėra failų"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Archyve %s nereasta jokių paveikslėlių"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Įvyko klaida trinant „%s“"
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Klaida %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Komiksų knygos"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu dokumentas yra neteisingo formato"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Dokumentas sudarytas iš kelių failų. Vienas ar keli iš šių failų negali būti "
+"atverti."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu dokumentai"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI dokumentas yra neteisingo formato"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI dokumentai"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Šis darbas yra viešo naudojimo"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Taip"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Ne"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Nežinomas šrifto tipas"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Be pavadinimo"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Įmontuotas poaibis"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Įmontuotas"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Neįmontuotas"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF dokumentai"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Netaisyklingas dokumentas"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress skaidrės"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Nėra klaidos"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Trūksta atminties"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Nerastas zip parašas"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Netaisyklingas zip failas"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Kelių failų zip archyvai nepalaikomi"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Nepavyko atverti failo"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Nepavyko perskaityti duomenų iš failo"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Nepavyko rasti failo zip archyve"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Nežinoma klaida"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Nepavyko atverti dokumento „%s“"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Nepavyko įrašyti dokumento „%s“"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript dokumentai"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Nepavyko išsaugoti priedo „%s“: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Nepavyko atverti priedo „%s“: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Nepavyko atverti priedo „%s“"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Failo tipas %s (%s] nepalaikomas"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Visi dokumentai"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Visi failai"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Nepavyko sukurti laikinojo failo: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Nepavyko sukurti laikinojo katalogo: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Šis failas nėra taisyklingas .desktop failas"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Neatpažinta darbastalio failo versija „%s“"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Paleidžiama %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Programa nepriima dokumentų komandinėje eilutėje"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Neatpažintas paleidimo parametras: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Negalima perduoti dokumentų URI „Type=Link“ darbastalio įrašui"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Nepaleidžiamas elementas"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Atjungti nuo seanso valdyklės"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Nurodykite failą su įrašytais nustatymais"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FAILAS"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Nurodykite seanso valdymo ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Seanso valdymo parinktys:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Rodyti seanso valdymo parinktis"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Rodyti „_%s“"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Perkelti į įrankinę"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Perkelti pasirinktą elementą į įrankinę"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Pašalinti iš įrankinės"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Pašalinti pasirinktą elementą iš įrankinės"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Pašalinti įrankinę"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Pašalinti pasirinktą įrankinę"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Skirtukas"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "Geriausiai tinkantis"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Tinkantis prie puslapio pločio"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Dokumentų peržiūros programa"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Peržiūrėti kelių puslapių dokumentams"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Nepaisyti dokumento apribojimų"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Nepaisyti dokumento apribojimų, pvz., apsaugojimo nuo kopijavimo ar "
+"spausdinimo."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Trinti laikiną failą"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Spausdinimo nuostatų failas"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "MATE dokumentų peržiūros programa"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "Nepavyko išspausdinti dokumento"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Pasirinktas spausdintuvas „%s“ nerastas"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "_Ankstesnis puslapis"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "Eiti į ankstesnįjį puslapį"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "_Kitas puslapis"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "Eiti į kitą puslapį"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "Išdidinti dokumentą"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "Sutraukti dokumentą"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Spausdinti"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "Išspaudinti šį dokumentą"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "_Geriausiai tinkantis"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "Dokumentas užpildo visą langą"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "Tinkantis prie puslapio pl_očio"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "Dokumentas užpildo lango plotį"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "Puslapis"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "Pasirinkite puslapį"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokumentas"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Pavadinimas:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Vieta:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Tema:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Autorius:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Raktažodžiai:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Gamintojas:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Kūrėjas:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Sukurta:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Pakeista:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Puslapių skaičius:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimizuota:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Formatas:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Apsauga:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Lapo dydis:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Nėra"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f colių"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, stačias (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, gulsčias (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d iš %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "iš %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Įkeliama..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Ruošiamasi spausdinti..."
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Baigiama..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Spausdinamas %d iš %d puslapių..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Spausdinimas šiuo spausdintuvu nepalaikomas."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Netaisyklingas puslapio parinkimas"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Įspėjimas"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Pasirinktame spausdinimo rėžyje nėra nė vieno puslapio"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Puslapio mastelis:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Sumažinti iki spausdinamos dalies"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Pritaikyti prie spausdinamos dalies"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Keisti dokumento puslapių dydį pritaikant prie pasirinkto spausdintuvo "
+"puslapio. Pasirinkite vieną iš šių:\n"
+"\n"
+"• „Nekeisti“: puslapio dydis nebus keičiamas.\n"
+"\n"
+"• „Sumažinti iki spausdinamo ploto“: dokumento puslapiai, didesni nei "
+"spausdinamas plotas, bus sumažinti, kad tilptų į spausdintuvo puslapio "
+"spausdinamą dalį.\n"
+"\n"
+"• „Pritaikyti prie spausdinamo ploto“: dokumento puslapiai bus padidinti "
+"arba sumažinti pagal poreikį, pritaikant prie spausdintuvo puslapio "
+"spausdinamos dalis.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Automatiškai pasukti ir centruoti"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Pasukti spausdintuvo puslapį kiekvienam puslapiui, pritaikant jį prie "
+"dokumento puslapio orientacijos. Dokumento puslapiai bus centruojami "
+"spausdintuvo puslapyje."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Pasirinkti puslapio dydį pagal dokumento puslapio dydį"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Įjungus kiekvienas puslapis bus spausdinamas dokumento puslapio dydžio "
+"popieriaus lape."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Puslapių apdorojimas"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Nepavyko atspausdinti puslapio %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Slinkti aukštyn"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Slinkti žemyn"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Slinkti vaizdą aukštyn"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Slinkti vaizdą žemyn"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Dokumentų vaizdas"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Eiti į puslapį:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Pateikties pabaiga. Spauskite norėdami išeiti."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Eiti į pirmą puslapį"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Eiti į ankstesnį puslapį"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Eiti į kitą puslapį"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Eiti į paskutinį puslapį"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Eiti į puslapį"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Ieškoti"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Eiti į %s puslapį"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Eiti į %s faile „%s“"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Eiti į failą „%s“"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Paleisti %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Ieškoti:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "Ieškoti a_nkstesnio"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Ieškoti ankstesnio ieškomo užrašo pasikartojimo"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "Ieškoti _kito"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Ieškoti kito ieškomo užrašo pasikartojimo"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "S_kirti raidžių dydį"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Įjungti / išjungti raidžių registrui jautrią paiešką"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Piktograma:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Pastaba"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Komentaras"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Raktas"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Žinynas"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Nauja pastraipa"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Pastraipa"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Įterpti"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Kryželis"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Apskritimas"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Nežinoma"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Anotacijos savybės"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Spalva:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Stilius:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Permatomas"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Nepermatomas"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Pradinė lango būsena:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Atverti"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Užverti"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Pateikčių veiksena"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Dokumento „%s“ slaptažodis"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Konvertuojama %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "konvertuota %d iš %d dokumentų"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Konvertuojami meta duomenys"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Evince meta duomenų formatas pasikeitė ir turi būti perkeltas. Jei "
+"perkėlimas bus atšauktas, meta duomenų saugykla neveiks."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Atverti neseniai skaitytą dokumentą"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Šis dokumentas yra užrakintas ir jį galima perskaityti tik įvedus teisingą "
+"slaptažodį."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Atrakinti dokumentą"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Įveskite slaptažodį"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Reikalingas slaptažodis"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"Dokumentas „%s“ yra užrakintas, norint jį atverti reikalingas slaptažodis."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Slaptažodis:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Iškart _pamiršti slaptažodį"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "_Atsiminti slaptažodį šiam seansui"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Prisiminti _visam laikui"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Savybės"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Pagrindinės"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Šriftai"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Dokumento licencija"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Šriftas"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Renkama šriftų informacija... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Naudojimo sąlygos"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Teksto licencija"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Daugiau informacijos"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Sąrašas"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Anotacijos"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Tekstas"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Pridėti teksto anotaciją"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Pridėti"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Šiame dokumente nėra nė vienos anotacijos"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Puslapis %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Priedai"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Sluoksniai"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Spausdinti..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Rodyklė"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Miniatiūros"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "Puslapis %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "Puslapis %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "Šiame dokumente nėra nė vieno puslapio"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "Šiame dokumente yra tik tušti puslapiai"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "Nepavyko atverti dokumento"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Įkeliamas dokumentas iš „%s“"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Atsiunčiamas dokumentas (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "Nepavyko įkelti nutolusio failo."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Dokumentas įkeliamas iš naujo iš %s"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "Nepavyko įkelti dokumento iš naujo"
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "Atverti dokumentą"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "Dokumentas įrašomas į %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Priedas įrašomas į %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "Įrašomas paveikslėlis į %s"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Failo išsaugoti kaip „%s“ nepavyko."
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Siunčiamas dokumentas (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Siunčiamas priedas (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Siunčiamas paveikslėlis (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "Išsaugoti kopiją"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d neįvykdyta užduotis eilėje"
+msgstr[1] "%d neįvykdytos užduotys eilėje"
+msgstr[2] "%d neįvykdytų užduočių eilėje"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Spausdinimo užduotis „%s“"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Dokumentas turi formos laukų, kurie buvo užpildyti. Jei neišsaugosite "
+"kopijos, pakeitimai bus negrįžtamai prarasti."
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Dokumentas turi naujų arba pakeistų anotacijų. Jei neišsaugosite kopijos, "
+"pakeitimai bus negrįžtamai prarasti."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Išsaugoti dokumento „%s“ kopiją užveriant?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "Užverti _neišsaugant"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "Išsaugoti _kopiją"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Laukti, kol spausdinimo užduotis „%s“ baigs, prieš uždarant?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Yra %d aktyvių spausdinimo užduočių. Laukti, kol spausdinimas bus baigtas, "
+"prieš uždarant?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Jei užversite langą, spausdinimo užduotys bus neatliktos."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "Nutraukti _spausdinimą ir uždaryti"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "Uždaryti _išspausdinus"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "Įrankinės rengyklė"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "Rodant žinyną įvyko klaida"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Dokumentų peržiūros programa.\n"
+"Naudojama %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince yra laisva programinė įranga; galite ją platinti ir / ar modifikuoti "
+"GNU bendrosios viešosios licencijos sąlygomis, kurios paskelbtos Laisvosios "
+"programinės įrangos fondo; 2-osios arba (savo pasirinkimu) bet kurios "
+"vėlesnės licencijos versijos sąlygomis.\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince yra platinama tikintis, kad ji bus naudinga, bet NETEIKIANT JOKIŲ "
+"GARANTIJŲ; netgi be numanomų PARDAVIMO arba TINKAMUMO KONKREČIAM TIKSLUI "
+"garantijų. Dėl išsamesnės informacijos žiūrėkite GNU bendrąją viešąją "
+"licenciją.\n"
+
+#: ../shell/ev-window.c:4571
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Turėjote gauti GNU bendrosios viešosios licencijos kopiją kartu su Evince; "
+"jeigu negavote, rašykite The Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Evince autoriai"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"Žygimantas Beručka <[email protected]>,\n"
+"Justina Klingaitė <[email protected]>,\n"
+"Aurimas Černius <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "šiame puslapyje rastas %d"
+msgstr[1] "šiame puslapyje rasti %d"
+msgstr[2] "šiame puslapyje rasta %d"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "Nerasta"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "liko ieškoti %3d%%"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "_Failas"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "_Keisti"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "_Rodymas"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "_Eiti"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "_Žinynas"
+
+#. File menu
+#: ../shell/ev-window.c:5402 ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "_Atverti..."
+
+#: ../shell/ev-window.c:5403 ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "Atverti egzistuojantį dokumentą"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "Atverti _kopiją"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "Atverti šio dokumento kopiją naujame lange"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "Iš_saugoti kopiją..."
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "Išsaugoti šio dokumento kopiją"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "S_pausdinti..."
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "S_avybės"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "Pasirinkti _viską"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "_Ieškoti..."
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "Ieškoti dokumente žodžio ar frazės"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "Įr_ankinė"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "Pasukti _kairėn"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "Pasukti _dešinėn"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "Išsaugoti dabartinius nustatymus kaip _numatytuosius"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "_Perkrauti"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "Įkelti dokumentą iš naujo"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "Automatinė _slinktis"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "_Pirmas puslapis"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "Eiti į pirmą puslapį"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "_Paskutinis puslapis"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "Eiti į paskutinį puslapį"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "_Turinys"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "_Apie"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "Išjungti viso ekrano veikseną"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "Išjungti viso ekrano veikseną"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "Pradėti pateiktį"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "Rodyti dokumentą kaip pateiktį"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "Į_rankinė"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "Rodyti arba slėpti įrankinę"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "Šoninis _skydelis"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "Rodyti arba slėpti šoninį skydelį"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "_Vientisas"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "Rodyti visą dokumentą"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "_Dvigubas"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "Rodyti du puslapius iš karto"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "_Visame ekrane"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "Išplėsti langą per visą ekraną"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "_Pateikti"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "Paleisti dokumentą kaip prezentaciją"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "_Negatyvas"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "Rodyti puslapio turinio negatyvą"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "_Atverti nuorodą"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "_Eiti į"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "Atverti _naujame lange"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "_Kopijuoti nuorodos adresą"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "Įrašyti _paveikslėlį kaip..."
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "Kopijuoti _paveikslėlį"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "Anotacijos savybės..."
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "_Atverti priedą"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "_Įrašyti priedą"
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "Mastelis"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "Nustatyti vaizdo mastelį"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "Navigacija"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "Atgal"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "Eiti per aplankytus puslapius"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "Ankstesnis"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "Kitas"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "Pritraukti"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "Atitraukti"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "Tinka plotis"
+
+#: ../shell/ev-window.c:5890 ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "Nepavyko paleisti išorinės programos."
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "Nepavyko atverti išorinės nuorodos"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "Nepavyko rasti tinkamo formato paveikslėliui įrašyti"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "Paveikslėlio įrašyti nepavyko."
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "Įrašyti paveikslėlį"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "Nepavyko atverti priedo"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "Priedo išsaugoti nepavyko."
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "Įrašyti priedą"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Reikalingas slaptažodis"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Pagal plėtinį"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATE dokumentų peržiūros programa"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Rodytina dokumento puslapio etiketė."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "PUSLAPIS"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Rodytino dokumento puslapio numeris."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMERIS"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Paleisti Evince viso ekrano veiksenoje"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Paleisti Evince pateikčių veiksenoje"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Paleisti Evince kaip peržiūros programą"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Žodis ar frazė, ieškotina dokumente"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "SEKA"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FAILAS...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Galimos loginės parinktys: teigiama – įjungia miniatiūras, neigiama – "
+"išjungia"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Įjungti PDF dokumentų miniatiūras"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Miniatiūrų komanda PDF dokumentams"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Tinkama PDF dokumentų miniatiūrų kūrimo komanda su argumentais. Žiūrėkite "
+"Caja miniatiūrų generatoriaus dokumentaciją."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "Puslapio _nustatymai..."
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Nustatyti puslapio parametrus spausdinimui"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU dokumentas yra neteisingo formato"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "Nepavyko atverti failo „%s“: %s"
+
+#~ msgid "Search string"
+#~ msgstr "Ieškomas užrašas"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "Ieškomo užrašo pavadinimas"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Skirti raidžių dydį"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "TEIGIAMA paieškai skiriančiai raidžių dydį"
+
+#~ msgid "Highlight color"
+#~ msgstr "Paryškinimo spalva"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Visų atitikmenų paryškinimo spalva"
+
+#~ msgid "Current color"
+#~ msgstr "Esama spalva"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Esamo atitikmens paryškinimo spalva"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "Atkurti ankstesnius dokumentus?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Panašu, kad Evince netikėtai baigė darbą, kai paskutinį kartą buvo "
+#~ "paleista. Galite atkurti atidarytus dokumentus."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_Neatkurti"
+
+#~ msgid "_Recover"
+#~ msgstr "_Atkurti"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Atkūrimas po nulūžimo"
+
+#~ msgid "Print..."
+#~ msgstr "Spausdinti..."
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "Nepavyko sukurti simbolinės nuorodos „%s“: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "Nepavyko atverti kopijos."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "Iš_saugoti kopiją..."
+
+#~ msgid "_Print..."
+#~ msgstr "S_pausdinti..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Ieškoti..."
+
+#~ msgid "Co_nnect"
+#~ msgstr "_Prisijungti"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "Prisijungti _anonimiškai"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Prisijungti _naudotoju:"
+
+#~ msgid "_Username:"
+#~ msgstr "_Naudotojo vardas:"
+
+#~ msgid "_Domain:"
+#~ msgstr "_Sritis:"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "Iškart _pamiršti slaptažodį"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_Atsiminti slaptažodį šiam seansui"
+
+#~ msgid "_Remember forever"
+#~ msgstr "Prisiminti _visam laikui"
diff --git a/po/lv.po b/po/lv.po
new file mode 100644
index 00000000..85126371
--- /dev/null
+++ b/po/lv.po
@@ -0,0 +1,1783 @@
+# translation of lv.po to Latvian
+# Latvian translation for Evince.
+# Copyright © 2006 Mate i18n Project for Latvian.
+#
+# Raivis Dejus <[email protected]>, 2006.
+# Anita Reitere <[email protected]>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: lv\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug."
+"cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-02-03 16:30+0000\n"
+"PO-Revision-Date: 2010-03-07 16:32+0200\n"
+"Last-Translator: \n"
+"Language-Team: Latviešu <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
+"2);\n"
+"X-Generator: Lokalize 1.0\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Kļūda, palaižot komandu “%s”, lai atspiestu komiksu: %s"
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Komandai “%s” neizdevās atspiest komiksu."
+
+#: ../backend/comics/comics-document.c:183, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Šķiet, komandai “%s” gadījās problēmas."
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Nav komiksu MIME tips: %s"
+
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Neizdevās atrast īsto komandu šī komiksa tipa atspiešanai"
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Nezināms MIME Tips"
+
+#: ../backend/comics/comics-document.c:422
+#| msgid "File corrupted."
+msgid "File corrupted"
+msgstr "Bojāts fails"
+
+#: ../backend/comics/comics-document.c:435
+#| msgid "No images found in archive %s"
+msgid "No files in archive"
+msgstr "Arhīvā nav failu"
+
+#: ../backend/comics/comics-document.c:474
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Arhīvā %s attēli nav atrasti"
+
+#: ../backend/comics/comics-document.c:718
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Dzēšot “%s”, gadījās kļūda."
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr "Kļūda %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Komiksu grāmatas"
+
+#: ../backend/djvu/djvu-document.c:173
+#| msgid "DVI document has incorrect format"
+msgid "DjVu document has incorrect format"
+msgstr "DjVu dokumentam ir nepareizs formāts"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Šis dokuments sastāv no vairākiem failiem. Vismaz vienam no tiem nevar "
+"piekļūt."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+#| msgid "Djvu Documents"
+msgid "DjVu Documents"
+msgstr "DjVu dokumenti"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI dokumentam ir nepareizs formāts"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI dokumenti"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr "Šis darbs ir cilvēces kopīpašums"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "Jā"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "Nē"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "Nezināms fonta tips"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "Nav nosaukuma"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "Iegultā apakškopa"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "Iegultā"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "Nav iegultā"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF dokumenti"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+#| msgid "Print this document"
+msgid "Invalid document"
+msgstr "Nederīgs dokuments"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress slaidi"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Nav kļūdas"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Nav pietiekami daudz atmiņas"
+
+#: ../backend/impress/zip.c:59
+#| msgid "Cannot find zip signature"
+msgid "Cannot find ZIP signature"
+msgstr "Nevar atrast ZIP parakstu"
+
+#: ../backend/impress/zip.c:62
+#| msgid "Invalid zip file"
+msgid "Invalid ZIP file"
+msgstr "Nederīgs ZIP fails"
+
+#: ../backend/impress/zip.c:65
+#| msgid "Multi file zips are not supported"
+msgid "Multi file ZIPs are not supported"
+msgstr "Vairāku failu ZIP faili netiek atbalstīti"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Neizdodas atvērt failu"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Neizdodas nolasīt datus no faila"
+
+#: ../backend/impress/zip.c:74
+#| msgid "Cannot find file in the zip archive"
+msgid "Cannot find file in the ZIP archive"
+msgstr "ZIP arhīvā neizdodas atrast failu"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Nezināma kļūda"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Neizdevās ielādēt dokumentu “%s”"
+
+#: ../backend/ps/ev-spectre.c:135, c-format
+#| msgid "Failed to load document “%s”"
+msgid "Failed to save document “%s”"
+msgstr "Neizdevās saglabāt dokumentu “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript dokumenti"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Neizdevās saglabāt piesaistni “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Neizdevās atvērt piesaistni “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Neizdevās atvērt piesaistni “%s”"
+
+#: ../libdocument/ev-document-factory.c:168, c-format
+#| msgid "Multi file zips are not supported"
+msgid "File type %s (%s) is not supported"
+msgstr "Failu tips %s (%s) nav atbalstīts"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Visi dokumenti"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Visi faili"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Neizdevās izveidot pagaidu failu: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Neizdevās izveidot pagaidu mapi: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Šis nav derīgs .desktop fails"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Neatpazīta darbvirsmas faila versija '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Sāk %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Lietotne nepieņem dokumentus komandrindā"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Neatpazīta palaišanas opcija: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Nevar nodot dokumenta URI 'Typa=Link' darbvirsmas ierakstam"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Nav palaižama vienība"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Nepieslēgties sesiju pārvaldniekam"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Norādiet failu, kas satur saglabātu konfigurāciju"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+#| msgid "[FILE...]"
+msgid "FILE"
+msgstr "FAILS"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Norādiet sesiju pārvaldības ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Sesiju pārvaldības opcijas:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Rādīt sesiju pārvaldības opcijas"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "Rādīt “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "_Pārvietot uz rīkjoslu"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "Pārvietot izvēlēto elementu uz rīkjoslu"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "Noņemt no _rīkjoslas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "Aizvākt izvēlētos elementu no rīkjoslas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "_Dzēst rīkjoslu"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "Aizvākt izvēlēto rīkjoslu"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Atdalītājs"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:117
+#| msgid "Run evince in presentation mode"
+msgid "Running in presentation mode"
+msgstr "Evince darbojas prezentācijas režīmā"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5301
+msgid "Best Fit"
+msgstr "Labākā saderība"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Lappuses platumā"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+#| msgid "50%"
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+#| msgid "50%"
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4183
+#: ../shell/ev-window-title.c:149 ../shell/main.c:282
+#, c-format
+msgid "Document Viewer"
+msgstr "Dokumentu skatītājs"
+
+#: ../data/evince.desktop.in.in.h:2
+#| msgid "View multipage documents"
+msgid "View multi-page documents"
+msgstr "Skatīt lasāmus dokumentus"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Ignorēt dokumenta ierobežojumus"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Ignorēt dokumenta (piemēram, kopēšanas vai drukāšanas) ierobežojumus."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "Dzēst pagaidu failu"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "Drukāšanas iestatījumu fails"
+
+#: ../previewer/ev-previewer.c:143 ../previewer/ev-previewer.c:177
+#| msgid "MATE Document Viewer"
+msgid "MATE Document Previewer"
+msgstr "MATE Dokumentu priekšskatītājs"
+
+#: ../previewer/ev-previewer-window.c:95 ../shell/ev-window.c:2995
+msgid "Failed to print document"
+msgstr "Neizdevās izdrukāt dokumentu"
+
+#: ../previewer/ev-previewer-window.c:209
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Neizdevās atrast izvēlēto printeri '%s'"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:253 ../shell/ev-window.c:5050
+msgid "_Previous Page"
+msgstr "_Iepriekšējo lappusi"
+
+#: ../previewer/ev-previewer-window.c:254 ../shell/ev-window.c:5051
+msgid "Go to the previous page"
+msgstr "Pāriet uz iepriekšējo lappusi"
+
+#: ../previewer/ev-previewer-window.c:256 ../shell/ev-window.c:5053
+msgid "_Next Page"
+msgstr "_Nākamo lappusi"
+
+#: ../previewer/ev-previewer-window.c:257 ../shell/ev-window.c:5054
+msgid "Go to the next page"
+msgstr "Pāriet uz nākamo lappusi"
+
+#: ../previewer/ev-previewer-window.c:260 ../shell/ev-window.c:5037
+msgid "Enlarge the document"
+msgstr "Palielināt dokumentu"
+
+#: ../previewer/ev-previewer-window.c:263 ../shell/ev-window.c:5040
+msgid "Shrink the document"
+msgstr "Samazināt dokumentu"
+
+#: ../previewer/ev-previewer-window.c:266 ../libview/ev-print-operation.c:1315
+msgid "Print"
+msgstr "Drukāt"
+
+#: ../previewer/ev-previewer-window.c:267 ../shell/ev-window.c:5008
+msgid "Print this document"
+msgstr "Drukāt šo dokumentu"
+
+#: ../previewer/ev-previewer-window.c:273 ../shell/ev-window.c:5152
+msgid "_Best Fit"
+msgstr "La_bākā saderība"
+
+#: ../previewer/ev-previewer-window.c:274 ../shell/ev-window.c:5153
+msgid "Make the current document fill the window"
+msgstr "Panākt, lai dokuments aizpilda programmas logu"
+
+#: ../previewer/ev-previewer-window.c:276 ../shell/ev-window.c:5155
+msgid "Fit Page _Width"
+msgstr "_Lappuses platumā"
+
+#: ../previewer/ev-previewer-window.c:277 ../shell/ev-window.c:5156
+msgid "Make the current document fill the window width"
+msgstr "Pielāgot dokumenta izmēru loga platumam"
+
+#: ../previewer/ev-previewer-window.c:460 ../shell/ev-window.c:5223
+msgid "Page"
+msgstr "Lappuse"
+
+#: ../previewer/ev-previewer-window.c:461 ../shell/ev-window.c:5224
+msgid "Select Page"
+msgstr "Izvēlēties lappusi"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokuments"
+
+#: ../properties/ev-properties-view.c:60
+#| msgid "<b>Title:</b>"
+msgid "Title:"
+msgstr "Nosaukums:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Vieta:"
+
+#: ../properties/ev-properties-view.c:62
+#| msgid "<b>Subject:</b>"
+msgid "Subject:"
+msgstr "Tēma:"
+
+#: ../properties/ev-properties-view.c:63
+#| msgid "<b>Author:</b>"
+msgid "Author:"
+msgstr "Autors:"
+
+#: ../properties/ev-properties-view.c:64
+#| msgid "<b>Keywords:</b>"
+msgid "Keywords:"
+msgstr "Atslēgvārdi:"
+
+#: ../properties/ev-properties-view.c:65
+#| msgid "<b>Producer:</b>"
+msgid "Producer:"
+msgstr "Ražotājs:"
+
+#: ../properties/ev-properties-view.c:66
+#| msgid "<b>Creator:</b>"
+msgid "Creator:"
+msgstr "Veidotājs:"
+
+#: ../properties/ev-properties-view.c:67
+#| msgid "<b>Created:</b>"
+msgid "Created:"
+msgstr "Izveidots:"
+
+#: ../properties/ev-properties-view.c:68
+#| msgid "<b>Modified:</b>"
+msgid "Modified:"
+msgstr "Modificēts:"
+
+#: ../properties/ev-properties-view.c:69
+#| msgid "<b>Number of Pages:</b>"
+msgid "Number of Pages:"
+msgstr "Lappušu skaits:"
+
+#: ../properties/ev-properties-view.c:70
+#| msgid "<b>Optimized:</b>"
+msgid "Optimized:"
+msgstr "Optimizēts:"
+
+#: ../properties/ev-properties-view.c:71
+#| msgid "<b>Format:</b>"
+msgid "Format:"
+msgstr "Formāts:"
+
+#: ../properties/ev-properties-view.c:72
+#| msgid "<b>Security:</b>"
+msgid "Security:"
+msgstr "Drošība:"
+
+#: ../properties/ev-properties-view.c:73
+#| msgid "<b>Paper Size:</b>"
+msgid "Paper Size:"
+msgstr "Papīra izmērs:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1896
+msgid "None"
+msgstr "Nekas"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:284, c-format
+#| msgid "%.0f x %.0f mm"
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:288, c-format
+#| msgid "%.2f x %.2f in"
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f collas"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, portrets (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, ainava (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d no %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "no %d"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:341
+msgid "Preparing to print…"
+msgstr "Gatavojas drukāt..."
+
+#: ../libview/ev-print-operation.c:343
+msgid "Finishing…"
+msgstr "Pabeidz..."
+
+#: ../libview/ev-print-operation.c:345
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Drukā lappusi %d no %d..."
+
+#: ../libview/ev-print-operation.c:1169
+msgid "Printing is not supported on this printer."
+msgstr "Šis printeris neatbalsta drukāšanu."
+
+#: ../libview/ev-print-operation.c:1234
+#| msgid "Invalid zip file"
+msgid "Invalid page selection"
+msgstr "Nederīga lapas izvēle"
+
+#: ../libview/ev-print-operation.c:1235
+msgid "Warning"
+msgstr "Brīdinājums"
+
+#: ../libview/ev-print-operation.c:1237
+msgid "Your print range selection does not include any pages"
+msgstr "Drukājamo lappušu diapazonā nav lappušu"
+
+#: ../libview/ev-print-operation.c:1891
+msgid "Page Scaling:"
+msgstr "Mērogošana:"
+
+#: ../libview/ev-print-operation.c:1897
+msgid "Shrink to Printable Area"
+msgstr "Samazināt līdz drukāšanas apgabalam"
+
+#: ../libview/ev-print-operation.c:1898
+msgid "Fit to Printable Area"
+msgstr "Pielāgot drukāšanas apgabalam"
+
+#: ../libview/ev-print-operation.c:1901
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Mērogot dokumenta lapas, lai tās ietilptu printera lapā. Izvēlieties vienu "
+"no šīm iespējām:\n"
+"\n"
+"• \"Nedarīt neko\": Lappuses netiks mērogotas.\n"
+"\n"
+"• \"Samazināt līdz drukāšanas apgabalam\": Dokumenta lappuses, kas ir "
+"lielākas par drukājamo apgabalu, tiks samazinātas, lai tajā ietilptu.\n"
+"\n"
+"• \"Pielāgot drukāšanas apgabalam\": Dokumenta lappuses pēc vajadzības tiks "
+"palielinātas vai samazinātas, lai atbilstu drukājamā apgabala izmēriem.\n"
+
+#: ../libview/ev-print-operation.c:1913
+msgid "Auto Rotate and Center"
+msgstr "Automātiski pagriezt un iecentrēt"
+
+#: ../libview/ev-print-operation.c:1916
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Mainīt printera lapu orientāciju, lai tā atbilstu katras dokumenta lappuses "
+"orientācijai. Dokumenta lappuse tiks novietota printera lapas centrā."
+
+#: ../libview/ev-print-operation.c:1921
+msgid "Select page size using document page size"
+msgstr "Izvēlēties lapas izmēru, izmantojot dokumenta lapu izmēru"
+
+#: ../libview/ev-print-operation.c:1923
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Kad ieslēgts, katra lappuse tiks drukāta uz tāda paša izmēra papīra kā "
+"dokumentā."
+
+#: ../libview/ev-print-operation.c:2005
+msgid "Page Handling"
+msgstr "Lappušu apstrāde"
+
+#: ../libview/ev-jobs.c:1434, c-format
+#| msgid "Failed to print document"
+msgid "Failed to print page %d: %s"
+msgstr "Neizdevās izdrukāt lappusi %d: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Ritināt augšup"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Ritināt lejup"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Ritināt skatu augšup"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Ritināt skatu lejup"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Dokumenta skats"
+
+#: ../libview/ev-view-presentation.c:669
+#| msgid "Go to page"
+msgid "Jump to page:"
+msgstr "Iet uz lappusi:"
+
+#: ../libview/ev-view-presentation.c:979
+#| msgid "End of presentation. Press Escape to exit."
+msgid "End of presentation. Click to exit."
+msgstr "Prezentācijas beigas. Klikšķiniet, lai izietu."
+
+#: ../libview/ev-view.c:1724
+msgid "Go to first page"
+msgstr "Iet uz pirmo lapu"
+
+#: ../libview/ev-view.c:1726
+msgid "Go to previous page"
+msgstr "Iet uz iepriekšējo lapu"
+
+#: ../libview/ev-view.c:1728
+msgid "Go to next page"
+msgstr "Iet uz nākamo lapu"
+
+#: ../libview/ev-view.c:1730
+msgid "Go to last page"
+msgstr "Iet uz pēdējo lapu"
+
+#: ../libview/ev-view.c:1732
+msgid "Go to page"
+msgstr "Iet uz lapu"
+
+#: ../libview/ev-view.c:1734
+msgid "Find"
+msgstr "Meklēt"
+
+#: ../libview/ev-view.c:1762
+#, c-format
+msgid "Go to page %s"
+msgstr "Pāriet uz lapu %s"
+
+#: ../libview/ev-view.c:1768
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Iet uz %s failā “%s”"
+
+#: ../libview/ev-view.c:1771
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Iet uz failu “%s”"
+
+#: ../libview/ev-view.c:1779
+#, c-format
+msgid "Launch %s"
+msgstr "Palaist %s"
+
+#: ../libview/ev-view.c:3926 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+#| msgid "Loading..."
+msgid "Loading…"
+msgstr "Ielādē..."
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Meklēt:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5025
+msgid "Find Pre_vious"
+msgstr "Meklēt ie_priekšējo"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Atrast meklējamās virknes iepriekšējo parādīšanos tekstā"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5023
+msgid "Find Ne_xt"
+msgstr "Meklēt nā_kamo"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Atrast meklējamās virknes nākamo parādīšanos tekstā"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Reģistr_jūtīgs"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Pārslēgt meklēšanas lielo-mazo burtu jūtību"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Dokumenta %s parole"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Konvertē %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d no %d dokumentiem konvertēti"
+
+#: ../shell/ev-convert-metadata.c:164 ../shell/ev-convert-metadata.c:179
+msgid "Converting metadata"
+msgstr "Konvertē metadatus"
+
+#: ../shell/ev-convert-metadata.c:185
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Mainījies Evince metadatu formāts, tādēļ jāveic datu migrācija. Ja atcelsiet "
+"migrāciju, metadatu uzglabāšana vairs nestrādās."
+
+#: ../shell/ev-open-recent-action.c:72
+#| msgid "Open an existing document"
+msgid "Open a recently used document"
+msgstr "Atvērt nesen lietotu dokumentu"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "Dokuments ir slēgts. Lai to aplūkotu, ir jāievada pareizā parole."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "At_slēgt dokumentu"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Ievadiet paroli"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Nepieciešama parole"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "Dokuments “%s” ir slēgts. Lai to atvērtu, jāievada parole."
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Parole:"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "A_izmirst paroli nekavējoties"
+
+#: ../shell/ev-password-view.c:377
+#| msgid "Remember password for this session"
+msgid "Remember password until you _log out"
+msgstr "Atcerēties paroli _līdz sesijas beigām"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "Atcerēties _mūžīgi"
+
+#: ../shell/ev-properties-dialog.c:58
+msgid "Properties"
+msgstr "Parametri"
+
+#: ../shell/ev-properties-dialog.c:92
+msgid "General"
+msgstr "Vispārīgs"
+
+#: ../shell/ev-properties-dialog.c:102
+msgid "Fonts"
+msgstr "Fonti"
+
+#: ../shell/ev-properties-dialog.c:115
+#| msgid "Document Viewer"
+msgid "Document License"
+msgstr "Dokumenta licence"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Fonts"
+
+#: ../shell/ev-properties-fonts.c:162, c-format
+#| msgid "Gathering font information... %3d%%"
+msgid "Gathering font information… %3d%%"
+msgstr "Apkopo fontu informāciju... %3d%%"
+
+#: ../shell/ev-properties-license.c:138
+msgid "Usage terms"
+msgstr "Lietošanas noteikumi"
+
+#: ../shell/ev-properties-license.c:144
+msgid "Text License"
+msgstr "Teksta licence"
+
+#: ../shell/ev-properties-license.c:150
+msgid "Further Information"
+msgstr "Vairāk informācijas"
+
+#: ../shell/ev-sidebar-attachments.c:712
+msgid "Attachments"
+msgstr "Piesaistnes"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Slāņi"
+
+#: ../shell/ev-sidebar-links.c:335
+#| msgid "Print"
+msgid "Print…"
+msgstr "Drukāt..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Saturs"
+
+#: ../shell/ev-sidebar-thumbnails.c:956
+msgid "Thumbnails"
+msgstr "Sīktēli"
+
+#: ../shell/ev-window.c:829
+#, c-format
+msgid "Page %s — %s"
+msgstr "Lappuse %s — %s"
+
+#: ../shell/ev-window.c:831, c-format
+#| msgid "Pages"
+msgid "Page %s"
+msgstr "Lappuse %s"
+
+#: ../shell/ev-window.c:1275
+msgid "The document contains no pages"
+msgstr "Šis dokuments nesatur lappuses"
+
+#: ../shell/ev-window.c:1278
+msgid "The document contains only empty pages"
+msgstr "Šis dokuments satur tikai tukšas lappuses"
+
+#: ../shell/ev-window.c:1472 ../shell/ev-window.c:1638
+msgid "Unable to open document"
+msgstr "Neizdodas atvērt dokumentu"
+
+#: ../shell/ev-window.c:1609, c-format
+#| msgid "Failed to load document “%s”"
+msgid "Loading document from “%s”"
+msgstr "Ielādē dokumentu no “%s”"
+
+#: ../shell/ev-window.c:1751 ../shell/ev-window.c:2028
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Lejupielādē dokumentu (%d%%)"
+
+#: ../shell/ev-window.c:1784
+#| msgid "Failed to load document “%s”"
+msgid "Failed to load remote file."
+msgstr "Neizdevās ielādēt failu no cita datora."
+
+#: ../shell/ev-window.c:1972, c-format
+#| msgid "Reload the document"
+msgid "Reloading document from %s"
+msgstr "Pārlādē dokumentu no %s"
+
+#: ../shell/ev-window.c:2004
+#| msgid "Failed to print document"
+msgid "Failed to reload document."
+msgstr "Neizdevās pārlādēt dokumentu."
+
+#: ../shell/ev-window.c:2159
+msgid "Open Document"
+msgstr "Atvērt dokumentu"
+
+#: ../shell/ev-window.c:2423, c-format
+#| msgid "Shrink the document"
+msgid "Saving document to %s"
+msgstr "Saglabā dokumentu %s"
+
+#: ../shell/ev-window.c:2426
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Saglabā piesaistni %s"
+
+#: ../shell/ev-window.c:2429
+#, c-format
+msgid "Saving image to %s"
+msgstr "Saglabā attēlu %s"
+
+#: ../shell/ev-window.c:2473 ../shell/ev-window.c:2573
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Failu neizdevās saglabāt kā “%s”."
+
+#: ../shell/ev-window.c:2504
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Augšupielādē dokumentu (%d%%)"
+
+#: ../shell/ev-window.c:2508
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Augšupielādē piesaistni (%d%%)"
+
+#: ../shell/ev-window.c:2512
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Augšupielādē attēlu (%d%%)"
+
+#: ../shell/ev-window.c:2634
+msgid "Save a Copy"
+msgstr "Saglabāt kopiju"
+
+#: ../shell/ev-window.c:2939
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d uzdevums rindā"
+msgstr[1] "%d uzdevumi rindā"
+msgstr[2] "%d uzdevumi rindā"
+
+#: ../shell/ev-window.c:3052
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Drukā “%s”"
+
+#: ../shell/ev-window.c:3255
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Vai pirms iziešanas sagaidīt, kamēr izdrukāts “%s”?"
+
+#: ../shell/ev-window.c:3258
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "Aktīvi %d drukāšanas uzdevumi. Vai pirms iziešanas sagaidīt to beigas?"
+
+#: ../shell/ev-window.c:3270
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Ja aizvērsiet logu, rindā gaidošie uzdevumi netiks izdrukāti."
+
+#: ../shell/ev-window.c:3274
+msgid "Cancel _print and Close"
+msgstr "_Atcelt drukāšanu un iziet"
+
+#: ../shell/ev-window.c:3278
+msgid "Close _after Printing"
+msgstr "Iziet _pēc drukāšanas"
+
+#: ../shell/ev-window.c:3836
+msgid "Toolbar Editor"
+msgstr "Rīkjoslu redaktors"
+
+#: ../shell/ev-window.c:3968
+msgid "There was an error displaying help"
+msgstr "Gadījās kļūda, mēģinot parādīt palīdzību"
+
+#: ../shell/ev-window.c:4179, c-format
+#| msgid ""
+#| "Document Viewer.\n"
+#| "Using poppler %s (%s)"
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Dokumentu skatītājs\n"
+"Lieto %s (%s)"
+
+#: ../shell/ev-window.c:4210
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince ir brīva programmatūra; jūs varat to izplatīt tālāk un/vai modificēt "
+"saskaņā ar GNU Vispārējās publiskās licences noteikumiem, ko publicējis "
+"Brīvas programmatūras fonds; izmantojiet Licences versiju 2 vai (pēc jūsu "
+"izvēles) jebkuru vēlāku versiju.\n"
+
+#: ../shell/ev-window.c:4214
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince tiek izplatīta cerībā, ka tā būs noderīga, taču BEZ JEBKĀDĀM "
+"GARANTIJĀM; pat bez šķietamām KOMERCIĀLAS VĒRTĪBAS un PIEMĒROTĪBAS "
+"KONKRĒTIEM NOLŪKIEM garantijām. Sīkāku informāciju meklējiet GNU Vispārējā "
+"publiskajā licencē.\n"
+
+#: ../shell/ev-window.c:4218
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Jums vajadzēja saņemt GNU Vispārējās publiskās licences kopiju kopā ar šo "
+"programmu; ja jūs to nesaņēmāt, rakstiet uz Brīvas programmatūras fondu, "
+"Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA "
+"02111-1307 USA\n"
+
+#: ../shell/ev-window.c:4243
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4246
+#| msgid "© 1996-2007 The Evince authors"
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2010 Evince autori"
+
+#: ../shell/ev-window.c:4252
+msgid "translator-credits"
+msgstr ""
+"Raivis Dejus <[email protected]> "
+"Anita Reitere <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4503
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d atrasts šajā lapā"
+msgstr[1] "%d atrasti šajā lapā"
+msgstr[2] "%d atrasti šajā lapā"
+
+#: ../shell/ev-window.c:4511, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% vēl jāmeklē"
+
+#: ../shell/ev-window.c:4988
+msgid "_File"
+msgstr "_Fails"
+
+#: ../shell/ev-window.c:4989
+msgid "_Edit"
+msgstr "R_ediģēt"
+
+#: ../shell/ev-window.c:4990
+msgid "_View"
+msgstr "_Skats"
+
+#: ../shell/ev-window.c:4991
+msgid "_Go"
+msgstr "_Iet uz"
+
+#: ../shell/ev-window.c:4992
+msgid "_Help"
+msgstr "_Palīdzība"
+
+#. File menu
+#: ../shell/ev-window.c:4995 ../shell/ev-window.c:5263
+#| msgid "_Open..."
+msgid "_Open…"
+msgstr "At_vērt..."
+
+#: ../shell/ev-window.c:4996 ../shell/ev-window.c:5264
+msgid "Open an existing document"
+msgstr "Atvērt esošu dokumentu"
+
+#: ../shell/ev-window.c:4998
+#| msgid "Open a _Copy"
+msgid "Op_en a Copy"
+msgstr "Atvērt _kopiju"
+
+#: ../shell/ev-window.c:4999
+msgid "Open a copy of the current document in a new window"
+msgstr "Atvērt šī dokumenta kopiju jaunā logā"
+
+#: ../shell/ev-window.c:5001
+#| msgid "Save a Copy"
+msgid "_Save a Copy…"
+msgstr "_Saglabāt kopiju..."
+
+#: ../shell/ev-window.c:5002
+msgid "Save a copy of the current document"
+msgstr "Saglabāt šī dokumenta kopiju"
+
+#: ../shell/ev-window.c:5004
+msgid "Page Set_up…"
+msgstr "_Lapas iestatījumi"
+
+#: ../shell/ev-window.c:5005
+#| msgid "Setup the page settings for printing"
+msgid "Set up the page settings for printing"
+msgstr "Norādīt lapas iestatījumus drukāšanai"
+
+#: ../shell/ev-window.c:5007
+#| msgid "Print"
+msgid "_Print…"
+msgstr "_Drukāt..."
+
+#: ../shell/ev-window.c:5010
+msgid "P_roperties"
+msgstr "Pa_rametri"
+
+#: ../shell/ev-window.c:5018
+msgid "Select _All"
+msgstr "_Iezīmēt visu"
+
+#: ../shell/ev-window.c:5020
+#| msgid "Find"
+msgid "_Find…"
+msgstr "_Meklēt..."
+
+#: ../shell/ev-window.c:5021
+msgid "Find a word or phrase in the document"
+msgstr "Meklēt dokumentā kādu vārdu vai frāzi"
+
+#: ../shell/ev-window.c:5027
+msgid "T_oolbar"
+msgstr "Rīkj_osla"
+
+#: ../shell/ev-window.c:5029
+msgid "Rotate _Left"
+msgstr "Rotēt pa k_reisi"
+
+#: ../shell/ev-window.c:5031
+msgid "Rotate _Right"
+msgstr "Rotēt pa _labi"
+
+#: ../shell/ev-window.c:5042
+msgid "_Reload"
+msgstr "Pā_rlādēt"
+
+#: ../shell/ev-window.c:5043
+msgid "Reload the document"
+msgstr "Pārlādēt dokumentu"
+
+#: ../shell/ev-window.c:5046
+msgid "Auto_scroll"
+msgstr "Autoritinā_t"
+
+#: ../shell/ev-window.c:5056
+msgid "_First Page"
+msgstr "_Pirmo lappusi"
+
+#: ../shell/ev-window.c:5057
+msgid "Go to the first page"
+msgstr "Pāriet uz pirmo lappusi"
+
+#: ../shell/ev-window.c:5059
+msgid "_Last Page"
+msgstr "Pēdējo _lappusi"
+
+#: ../shell/ev-window.c:5060
+msgid "Go to the last page"
+msgstr "Pāriet uz pēdējo lappusi"
+
+#. Help menu
+#: ../shell/ev-window.c:5064
+msgid "_Contents"
+msgstr "_Satura rādītājs"
+
+#: ../shell/ev-window.c:5067
+msgid "_About"
+msgstr "P_ar"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5071
+msgid "Leave Fullscreen"
+msgstr "Pamest pilnekrānu"
+
+#: ../shell/ev-window.c:5072
+msgid "Leave fullscreen mode"
+msgstr "Pamest pilnekrāna režīmu"
+
+#: ../shell/ev-window.c:5074
+#| msgid "_Presentation"
+msgid "Start Presentation"
+msgstr "Sākt prezentāciju"
+
+#: ../shell/ev-window.c:5075
+#| msgid "Run document as a presentation"
+msgid "Start a presentation"
+msgstr "Palaist prezentāciju"
+
+#. View Menu
+#: ../shell/ev-window.c:5134
+msgid "_Toolbar"
+msgstr "Rīk_josla"
+
+#: ../shell/ev-window.c:5135
+msgid "Show or hide the toolbar"
+msgstr "Rādīt vai slēpt rīkjoslu"
+
+#: ../shell/ev-window.c:5137
+msgid "Side _Pane"
+msgstr "Sānu _panelis"
+
+#: ../shell/ev-window.c:5138
+msgid "Show or hide the side pane"
+msgstr "Rādīt vai slēpt sānu paneli"
+
+#: ../shell/ev-window.c:5140
+msgid "_Continuous"
+msgstr "_Nepārtraukts"
+
+#: ../shell/ev-window.c:5141
+msgid "Show the entire document"
+msgstr "Rādīt visu dokumentu"
+
+#: ../shell/ev-window.c:5143
+msgid "_Dual"
+msgstr "_Atvērums"
+
+#: ../shell/ev-window.c:5144
+msgid "Show two pages at once"
+msgstr "Rādīt divas lappuses vienlaikus"
+
+#: ../shell/ev-window.c:5146
+msgid "_Fullscreen"
+msgstr "Pilne_krāna"
+
+#: ../shell/ev-window.c:5147
+msgid "Expand the window to fill the screen"
+msgstr "Izplest logu pa visu ekrānu"
+
+#: ../shell/ev-window.c:5149
+#| msgid "_Presentation"
+msgid "Pre_sentation"
+msgstr "Pre_zentācija"
+
+#: ../shell/ev-window.c:5150
+msgid "Run document as a presentation"
+msgstr "Attēlot šo dokumentu kā prezentāciju"
+
+#: ../shell/ev-window.c:5158
+msgid "_Inverted Colors"
+msgstr "_Apgrieztas krāsas"
+
+#: ../shell/ev-window.c:5159
+msgid "Show page contents with the colors inverted"
+msgstr "Rādīt lapas saturu pretējās krāsās"
+
+#. Links
+#: ../shell/ev-window.c:5167
+msgid "_Open Link"
+msgstr "_Atvērt saiti"
+
+#: ../shell/ev-window.c:5169
+msgid "_Go To"
+msgstr "Pāriet _uz"
+
+#: ../shell/ev-window.c:5171
+msgid "Open in New _Window"
+msgstr "Atvērt jaunā _logā"
+
+#: ../shell/ev-window.c:5173
+msgid "_Copy Link Address"
+msgstr "_Kopēt saites adresi"
+
+#: ../shell/ev-window.c:5175
+msgid "_Save Image As…"
+msgstr "_Saglabāt attēlu kā..."
+
+#: ../shell/ev-window.c:5177
+msgid "Copy _Image"
+msgstr "Kopēt _attēlu"
+
+#: ../shell/ev-window.c:5182
+#| msgid "Attachments"
+msgid "_Open Attachment"
+msgstr "_Atvērt piesaistni"
+
+#: ../shell/ev-window.c:5184
+#| msgid "Attachments"
+msgid "_Save Attachment As…"
+msgstr "_Saglabāt piesaistni kā..."
+
+#: ../shell/ev-window.c:5237
+msgid "Zoom"
+msgstr "Tālummaiņa"
+
+#: ../shell/ev-window.c:5239
+msgid "Adjust the zoom level"
+msgstr "Noregulēt palielinājumu"
+
+#: ../shell/ev-window.c:5249
+msgid "Navigation"
+msgstr "Navigācija"
+
+#: ../shell/ev-window.c:5251
+msgid "Back"
+msgstr "Atpakaļ"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5254
+msgid "Move across visited pages"
+msgstr "Pārvietoties pa aplūkotajām lapām"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5284
+msgid "Previous"
+msgstr "Iepriekšējā"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5289
+msgid "Next"
+msgstr "Nākamā"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5293
+msgid "Zoom In"
+msgstr "Palielināt"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5297
+msgid "Zoom Out"
+msgstr "Samazināt"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5305
+msgid "Fit Width"
+msgstr "Piekārtot platumam"
+
+#: ../shell/ev-window.c:5466 ../shell/ev-window.c:5483
+msgid "Unable to launch external application."
+msgstr "Neizdevās palaist ārējo lietotni."
+
+#: ../shell/ev-window.c:5540
+#| msgid "Unable to open attachment"
+msgid "Unable to open external link"
+msgstr "Neizdevās atvērt ārējo saiti"
+
+#: ../shell/ev-window.c:5707
+msgid "Couldn't find appropriate format to save image"
+msgstr "Neizdevās atrast attēla saglabāšanai piemērotu formātu"
+
+#: ../shell/ev-window.c:5749
+#| msgid "The attachment could not be saved."
+msgid "The image could not be saved."
+msgstr "Neizdevās saglabāt attēlu."
+
+#: ../shell/ev-window.c:5781
+#| msgid "Images"
+msgid "Save Image"
+msgstr "Saglabāt attēlu"
+
+#: ../shell/ev-window.c:5848
+msgid "Unable to open attachment"
+msgstr "Neizdevās atvērt piesaistni"
+
+#: ../shell/ev-window.c:5901
+msgid "The attachment could not be saved."
+msgstr "Neizdevās saglabāt peisaistni."
+
+#: ../shell/ev-window.c:5946
+#| msgid "Attachments"
+msgid "Save Attachment"
+msgstr "Saglabāt piesaistni"
+
+#: ../shell/ev-window-title.c:162, c-format
+#| msgid "%s - Password Required"
+msgid "%s — Password Required"
+msgstr "%s — Nepieciešama parole"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "Pēc paplašinājuma"
+
+#: ../shell/main.c:70 ../shell/main.c:246
+msgid "MATE Document Viewer"
+msgstr "MATE Dokumentu skatītājs"
+
+#: ../shell/main.c:78
+msgid "The page of the document to display."
+msgstr "Attēlojamā dokumenta lappuse."
+
+#: ../shell/main.c:78
+msgid "PAGE"
+msgstr "LAPPUSE"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Palaist Evince pilnekrāna režīmā"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Palaist Evince prezentācijas režīmā"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Palaist Evince kā pirmsskatītāju"
+
+#: ../shell/main.c:82
+#| msgid "Find a word or phrase in the document"
+msgid "The word or phrase to find in the document"
+msgstr "Vārds vai frāze, ko meklēt dokumentā"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "VIRKNE"
+
+#: ../shell/main.c:86
+#| msgid "[FILE...]"
+msgid "[FILE…]"
+msgstr "[FAILS...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+#| msgid ""
+#| "Boolean options available, true enables thumbnailing and false disables "
+#| "the creation of new thumbnails"
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Pieejamās iespējas: patiess aktivizē sīktēlošanu, nepatiess atslēdz "
+"sīktēlu veidošanu"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Aktivizēt PDF dokumentu sīktēlu veidošanu"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF dokumentu sīktēlu komanda"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+#| msgid ""
+#| "Valid command plus arguments for the PDF Document thumbnailer. See "
+#| "caja thumbnailer documentation for more information."
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF sīktēlu veidotāja komanda ar argumentiem. Papildu informācijai "
+"aplūkojiet Caja sīktēlu veidotāja dokumentāciju."
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "Neapstrādāts MIME tips: “%s”"
+
+#~ msgid "Open “%s”"
+#~ msgstr "Atvērt “%s”"
+
+#~ msgid "Empty"
+#~ msgstr "Tukšs"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "Password Entry"
+#~ msgstr "Paroles ievads"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "Saglabāt paroles atslēgu saišķī"
+
+#~ msgid "File not available"
+#~ msgstr "Fails nav pieejams"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "Vēstule"
+
+#~ msgid "Tabloid"
+#~ msgstr "Tabloīds"
+
+#~ msgid "Ledger"
+#~ msgstr "Virsgrāmata"
+
+#~ msgid "Legal"
+#~ msgstr "Juridisks"
+
+#~ msgid "Statement"
+#~ msgstr "Paziņojums"
+
+#~ msgid "Executive"
+#~ msgstr "Izpildāms"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Folio"
+
+#~ msgid "Quarto"
+#~ msgstr "Kvarta formāts"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "No document loaded."
+#~ msgstr "Neviens dokuments nav ielādēts."
+
+#~ msgid "Broken pipe."
+#~ msgstr "Lauzta līnija."
+
+#~ msgid "Interpreter failed."
+#~ msgstr "Interpretatora kļūda."
+
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "Kļūda atkompresējot failu “%s”:\n"
+
+#~ msgid "Cannot open file “%s”.\n"
+#~ msgstr "Nevar atvērt failu “%s”.\n"
+
+#~ msgid "File is not readable."
+#~ msgstr "Fails nav lasāms."
+
+#~ msgid "Document loaded."
+#~ msgstr "Dokuments ielādēts."
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "Neizdevās ielādēt dokumentu “%s”. Ghostscript interpretators netika "
+#~ "atrasts ceļa mainīgajā"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "Iekapsulēts PostScript"
+
+#~ msgid "PostScript"
+#~ msgstr "PostScript"
+
+#~ msgid "Search string"
+#~ msgstr "Meklējamā virkne"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "Meklējamās virknes nosaukums"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Rakstzīmju jūtīgs"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "PATIESS rakstzīmjujūtīgai meklēšanai"
+
+#~ msgid "Highlight color"
+#~ msgstr "Izgaismošanas krāsa"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Krāsa kādā izgaismot visuas atrastās virknes"
+
+#~ msgid "Current color"
+#~ msgstr "Pašreizējā krāsa"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Pašreizējā krāsa kādā izgaismot visuas atrastās virknes"
+
+#~ msgid "Find Previous"
+#~ msgstr "Meklēt iepriekšējo"
+
+#~ msgid "Find Next"
+#~ msgstr "Meklēt nākamo"
+
+#~ msgid "Incorrect password"
+#~ msgstr "Nepareiza parole"
+
+#~ msgid "Print..."
+#~ msgstr "Drukāt..."
+
+#~ msgid "Couldn't create symlink “%s”: %s"
+#~ msgstr "Nevar izveidot simbolsaiti “%s”: %s"
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "Nevar atvērt kopiju."
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "PDF ģenerēšana nav tbalstīta"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "Jūs mēģinājāt drukāt izmantojot “%s” dzini. Šai programmai ir "
+#~ "nepieciešams PostScript printera dzinis."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Saglabāt kopiju..."
+
+#~ msgid "Print Set_up..."
+#~ msgstr "Drukāšnas uz_stādījumi..."
+
+#~ msgid "_Print..."
+#~ msgstr "_Drukāt..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Meklēt..."
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Evince dokumentu skatītājs"
diff --git a/po/mai.po b/po/mai.po
new file mode 100644
index 00000000..1e9a6f8b
--- /dev/null
+++ b/po/mai.po
@@ -0,0 +1,1404 @@
+# translation of evince.HEAD.po to Maithili
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Sangeeta Kumari <[email protected]>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.HEAD\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2009-03-14 20:12+0000\n"
+"PO-Revision-Date: 2009-03-15 16:08+0530\n"
+"Last-Translator: Sangeeta Kumari <[email protected]>\n"
+"Language-Team: Maithili <maithili.sf.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:131
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "अनजान MIME प्रकार"
+
+#: ../backend/comics/comics-document.c:165
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:186
+msgid "File corrupted."
+msgstr "फाइल खराब."
+
+#: ../backend/comics/comics-document.c:198
+msgid "No files in archive."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:230
+#, c-format
+msgid "No images found in archive %s"
+msgstr "अभिलेख %s मे कोनो चित्र नहि भेटल"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "कॉमिक पुस्तक"
+
+#: ../backend/djvu/djvu-document.c:174
+msgid "DJVU document has incorrect format"
+msgstr ""
+
+#: ../backend/djvu/djvu-document.c:251
+msgid ""
+"The document is composed of several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Djvu दस्ताबेज"
+
+#: ../backend/dvi/dvi-document.c:106
+msgid "DVI document has incorrect format"
+msgstr "DVI दस्ताबेजमे गलत प्रारूप "
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI दस्ताबेज"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:706
+msgid "Yes"
+msgstr "हँ"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:709
+msgid "No"
+msgstr "नहि"
+
+#: ../backend/pdf/ev-poppler.cc:783
+msgid "Type 1"
+msgstr "प्रकार 1"
+
+#: ../backend/pdf/ev-poppler.cc:785
+msgid "Type 1C"
+msgstr "प्रकार 1C"
+
+#: ../backend/pdf/ev-poppler.cc:787
+msgid "Type 3"
+msgstr "प्रकार 3"
+
+#: ../backend/pdf/ev-poppler.cc:789
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:791
+msgid "Type 1 (CID)"
+msgstr "प्रकार 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:793
+msgid "Type 1C (CID)"
+msgstr "प्रकार 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:795
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:797
+msgid "Unknown font type"
+msgstr "अज्ञात फाँट प्रकार"
+
+#: ../backend/pdf/ev-poppler.cc:823
+msgid "No name"
+msgstr "कोनो नाम नहि"
+
+#: ../backend/pdf/ev-poppler.cc:831
+msgid "Embedded subset"
+msgstr "अंतःस्थापित उपसमुच्चय"
+
+#: ../backend/pdf/ev-poppler.cc:833
+msgid "Embedded"
+msgstr "अंतःस्थापित"
+
+#: ../backend/pdf/ev-poppler.cc:835
+msgid "Not embedded"
+msgstr "अंतःस्थापित नहि"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF दस्ताबेज"
+
+#: ../backend/impress/impress-document.c:303
+#: ../backend/tiff/tiff-document.c:114
+msgid "Invalid document"
+msgstr ""
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "इंप्रेस स्लाइड"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "कोनो त्रुटि नहि"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "पर्याप्त स्मृति नहि अछि"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "जिप हस्ताक्षर नहि पाबि सकैत अछि"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "अवैध जिप फाइल"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr "मल्टी फाइल जिप समर्थित नहि अछि"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "फ़ाइल खोलि नहि सकैत अछि"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "फाइल सँ डाटा नहि पढ़ि सकैत अछि"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "जिप अभिलेखमे फाइल नहि पाबि सकैत अछि"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "अज्ञात त्रुटि"
+
+#: ../backend/ps/ev-spectre.c:113
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "'%s' दस्ताबेज लोड करबमे विफल"
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr ""
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "पोस्टस्क्रिप्ट दस्ताबेज"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "संलग्नक “%s” नहि सहेज सकल: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "संलग्नक “%s” नहि खोलि सकल: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "संलग्नक “%s” नहि खोलि सकल"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr ""
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "सबहि दस्ताबेज"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "सबहि फ़ाइलसभ"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:439
+msgid "Co_nnect"
+msgstr "कनेक्ट करू (_n)"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:483
+msgid "Connect _anonymously"
+msgstr "अनाम रूपेँ जोड़ू (_a)"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:492
+msgid "Connect as u_ser:"
+msgstr "प्रयोक्ता क' रूपेँ जुड़ू (_s):"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:529
+msgid "_Username:"
+msgstr "प्रयोक्ता नाम (_U):"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:533
+msgid "_Domain:"
+msgstr "डोमेन (_D):"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:538
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "कूटशब्द (_P):"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:553
+msgid "_Forget password immediately"
+msgstr ""
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:561
+msgid "_Remember password until you logout"
+msgstr ""
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:569
+msgid "_Remember forever"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s शुरू भ' रहल अछि"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "चलाबैबला मद नहि अछि "
+
+#: ../cut-n-paste/smclient/eggsmclient.c:224
+msgid "Disable connection to session manager"
+msgstr "सत्र प्रबंधकसँ संपर्क रद करू"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:227
+msgid "Specify file containing saved configuration"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggsmclient.c:227
+msgid "FILE"
+msgstr "फाइल"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:230
+msgid "Specify session management ID"
+msgstr "सत्र प्रबंधन आईडी निर्दिष्ट करू"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:230
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:244
+msgid "Session management options:"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggsmclient.c:245
+msgid "Show session management options"
+msgstr "सत्र प्रबंधन विकल्प देखाबू"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:918
+#, c-format
+msgid "Show “_%s”"
+msgstr "देखाबू “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1381
+msgid "_Move on Toolbar"
+msgstr "अओजारपट्टी पर लए जाउ (_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1382
+msgid "Move the selected item on the toolbar"
+msgstr "चयनित मदकेँ अओजारपट्टीमे घसकाबू"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1383
+msgid "_Remove from Toolbar"
+msgstr "अओजारपट्टी सँमेटाबू (_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1384
+msgid "Remove the selected item from the toolbar"
+msgstr "चयनित मदकेँ अओजारपट्टी सँ हटाबू"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1385
+msgid "_Delete Toolbar"
+msgstr "अओजारपट्टीमेटाबू (_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1386
+msgid "Remove the selected toolbar"
+msgstr "चयनित अओजारपट्टी हटाबू"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "विभाजक"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:117
+msgid "Running in presentation mode"
+msgstr "प्रस्तुती मोडमे चलि रहल अछि"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5296
+msgid "Best Fit"
+msgstr "सर्वोत्तम अनुरूप"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "पृष्ठ चओड़ाइसँ फिट करू"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr ""
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr ""
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4274
+#: ../shell/ev-window-title.c:149
+#, c-format
+msgid "Document Viewer"
+msgstr "दस्ताबेज प्रदर्शक"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "बहुलपृष्ठ दस्ताबेज देखू"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "दस्ताबेज प्रतिबंध पर लिखू"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "दस्ताबेज प्रतिबंध अध्यारोहित करू, कापी करै अथवा छापै क' प्रतिबंध क' जहिना."
+
+#: ../properties/ev-properties-main.c:113
+msgid "Document"
+msgstr "दस्तावेज"
+
+#: ../properties/ev-properties-view.c:59
+msgid "Title:"
+msgstr "शीर्षक:"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Location:"
+msgstr "स्थानः"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Subject:"
+msgstr "विषय:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Author:"
+msgstr "लेखक:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Keywords:"
+msgstr "बीजशब्द:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Producer:"
+msgstr ""
+
+#: ../properties/ev-properties-view.c:65
+msgid "Creator:"
+msgstr ""
+
+#: ../properties/ev-properties-view.c:66
+msgid "Created:"
+msgstr "बनएलक:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Modified:"
+msgstr "परिवर्धितः"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Number of Pages:"
+msgstr "पृष्ठ सभक संख्या:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Optimized:"
+msgstr ""
+
+#: ../properties/ev-properties-view.c:70
+msgid "Format:"
+msgstr "प्रारूप:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Security:"
+msgstr ""
+
+#: ../properties/ev-properties-view.c:72
+msgid "Paper Size:"
+msgstr ""
+
+#: ../properties/ev-properties-view.c:202
+msgid "None"
+msgstr "किछु नहि"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:227
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:271
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:275
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr ""
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:299
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, पोट्रैट (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:306
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, लैंडस्केप (%s)"
+
+#: ../libview/ev-jobs.c:949
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr ""
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "स्क्रॉल अप"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "स्क्रॉल डाउन"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "स्क्रॉल दृश्य उप्पर"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "स्क्रॉल दृश्य नीच्चाँ"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "दस्ताबेज प्रदर्शक"
+
+#: ../libview/ev-view.c:1417
+msgid "Go to first page"
+msgstr "प्रथम पृष्ठ पर जाउ"
+
+#: ../libview/ev-view.c:1419
+msgid "Go to previous page"
+msgstr "पछिला पृष्ठ पर जाउ"
+
+#: ../libview/ev-view.c:1421
+msgid "Go to next page"
+msgstr "अगिला पृष्ठमे जाउ"
+
+#: ../libview/ev-view.c:1423
+msgid "Go to last page"
+msgstr "अंतिम पृष्ठ पर जाउ"
+
+#: ../libview/ev-view.c:1425
+msgid "Go to page"
+msgstr "पृष्ठ पर जाउ"
+
+#: ../libview/ev-view.c:1427
+msgid "Find"
+msgstr "खोजू"
+
+#: ../libview/ev-view.c:1455
+#, c-format
+msgid "Go to page %s"
+msgstr "पृष्ठ %s पर जाउ"
+
+#: ../libview/ev-view.c:1461
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "%s मे “%s” फाइल पर जाउ"
+
+#: ../libview/ev-view.c:1464
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” फाइल पर जाउ"
+
+#: ../libview/ev-view.c:1472
+#, c-format
+msgid "Launch %s"
+msgstr "%s लाँच करू"
+
+#: ../libview/ev-view.c:2387
+msgid "End of presentation. Press Escape to exit."
+msgstr "प्रस्तुति क' अंत. बाहर निकलब क'लेल Escape दाबू"
+
+#: ../libview/ev-view.c:3280
+msgid "Jump to page:"
+msgstr "पृष्ठ पर जाउ:"
+
+#: ../libview/ev-view.c:3543 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:267
+msgid "Loading..."
+msgstr "लोड कए रहल..."
+
+#: ../shell/eggfindbar.c:146
+msgid "Search string"
+msgstr "स्ट्रिंग खोजू"
+
+#: ../shell/eggfindbar.c:147
+msgid "The name of the string to be found"
+msgstr "पाओल जाएबला स्ट्रिंग क' नाम"
+
+#: ../shell/eggfindbar.c:160
+msgid "Case sensitive"
+msgstr "स्थितिक प्रति संवेदनशील"
+
+#: ../shell/eggfindbar.c:161
+msgid "TRUE for a case sensitive search"
+msgstr "सही एकटा स्थिति संवेदनशील खोजबाक लेल"
+
+#: ../shell/eggfindbar.c:168
+msgid "Highlight color"
+msgstr "रँग उभारू"
+
+#: ../shell/eggfindbar.c:169
+msgid "Color of highlight for all matches"
+msgstr "सबहि मैच क'लेल उभार रँग"
+
+#: ../shell/eggfindbar.c:175
+msgid "Current color"
+msgstr "मोजुदा रँग"
+
+#: ../shell/eggfindbar.c:176
+msgid "Color of highlight for the current match"
+msgstr "मोजुदा मैच क'लेल उभारल रँग"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "खोजू:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5030
+msgid "Find Pre_vious"
+msgstr "पछिला खोजू (_v)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "खोज स्ट्रिंग क' पछिला उपस्थिति खोजू"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5028
+msgid "Find Ne_xt"
+msgstr "अगिला खोजू (_x)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "खोज स्ट्रिंग क' अगिला उपस्थिति खोजू"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "स्थिति क' प्रति संवेदनशील (_a)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "स्थिति संवेदनशील खोज टॉगल करू"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s दस्ताबेज क'लेल कूटशब्द"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr ""
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d %d क')"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "%d क'"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "दस्ताबेज तालाबन्न अछि आओर सही कूटशब्द दाखिल कए पढ़ल जाए सकैत अछि."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "दस्ताबेज खोलू (_U)"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "कूटशब्द दाखिल करू"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "कूटशब्द जरूरी"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "दस्ताबेज “%s” तालाबन्न अछि आओर खोलल जएबाक' पहिने कूटशब्द चाहैत अछि."
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr ""
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _logout"
+msgstr ""
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr ""
+
+#. Initial state
+#: ../shell/ev-print-operation.c:318
+msgid "Preparing to print ..."
+msgstr ""
+
+#: ../shell/ev-print-operation.c:320
+msgid "Finishing..."
+msgstr "समाप्त कए रहल अछि..."
+
+#: ../shell/ev-print-operation.c:322
+#, c-format
+msgid "Printing page %d of %d..."
+msgstr "%d केँ छापि रहल अछि %d पेज सँ..."
+
+#: ../shell/ev-print-operation.c:1010
+msgid "Printing is not supported on this printer."
+msgstr "एहि मुद्रक पर छपाइ समर्थित नहि अछि."
+
+#: ../shell/ev-print-operation.c:1136 ../shell/ev-window.c:5081
+msgid "Print"
+msgstr "छपाइ"
+
+#: ../shell/ev-properties-dialog.c:57
+msgid "Properties"
+msgstr "गुण"
+
+#: ../shell/ev-properties-dialog.c:91
+msgid "General"
+msgstr "सामान्य"
+
+#: ../shell/ev-properties-dialog.c:101
+msgid "Fonts"
+msgstr "फ़ॉन्ट"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "फ़ॉन्ट"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "फाँट सूचना पाबि रहल अछि... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "संलग्नक"
+
+#: ../shell/ev-sidebar-layers.c:395
+msgid "Layers"
+msgstr "परतसभ"
+
+#: ../shell/ev-sidebar-links.c:340
+msgid "Print..."
+msgstr "छापू..."
+
+#: ../shell/ev-sidebar-links.c:720
+msgid "Index"
+msgstr "सूची"
+
+#: ../shell/ev-sidebar-thumbnails.c:751
+msgid "Thumbnails"
+msgstr "लघु चित्र"
+
+#: ../shell/ev-window.c:843
+#, c-format
+msgid "Page %s - %s"
+msgstr ""
+
+#: ../shell/ev-window.c:845
+#, c-format
+msgid "Page %s"
+msgstr ""
+
+#: ../shell/ev-window.c:1267
+msgid "The document contains no pages"
+msgstr ""
+
+#: ../shell/ev-window.c:1491 ../shell/ev-window.c:1639
+msgid "Unable to open document"
+msgstr "दस्ताबेज खोलबामे असमर्थ"
+
+#: ../shell/ev-window.c:1613
+#, c-format
+msgid "Loading document from %s"
+msgstr ""
+
+#: ../shell/ev-window.c:1751 ../shell/ev-window.c:1944
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:1890
+#, c-format
+msgid "Reloading document from %s"
+msgstr ""
+
+#: ../shell/ev-window.c:1923
+msgid "Failed to reload document."
+msgstr ""
+
+#: ../shell/ev-window.c:2072
+msgid "Open Document"
+msgstr "दस्तावेज खोलू"
+
+#: ../shell/ev-window.c:2133
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "“%s” सांकेतिक लिंक नहि पाबि सकल: %s"
+
+#: ../shell/ev-window.c:2162
+msgid "Cannot open a copy."
+msgstr "कॉपी खोलि नहि सकैत अछि"
+
+#: ../shell/ev-window.c:2402
+#, c-format
+msgid "Saving document to %s"
+msgstr ""
+
+#: ../shell/ev-window.c:2405
+#, c-format
+msgid "Saving attachment to %s"
+msgstr ""
+
+#: ../shell/ev-window.c:2408
+#, c-format
+msgid "Saving image to %s"
+msgstr ""
+
+#: ../shell/ev-window.c:2453 ../shell/ev-window.c:2550
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "फाइल केँ “%s” रूपमे सहेजल नहि जाए सकल."
+
+#: ../shell/ev-window.c:2481
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:2485
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:2489
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:2596
+msgid "Save a Copy"
+msgstr "एकटा कापी सहेजू"
+
+#: ../shell/ev-window.c:2799
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../shell/ev-window.c:2855 ../shell/ev-window.c:3965
+msgid "Failed to print document"
+msgstr "दस्ताबेज छापबमे विफल"
+
+#: ../shell/ev-window.c:2912
+#, c-format
+msgid "Printing job “%s”"
+msgstr ""
+
+#: ../shell/ev-window.c:3109
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr ""
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+
+#: ../shell/ev-window.c:3124
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+
+#: ../shell/ev-window.c:3128
+msgid "Cancel _print and Close"
+msgstr ""
+
+#: ../shell/ev-window.c:3132
+msgid "Close _after Printing"
+msgstr ""
+
+#: ../shell/ev-window.c:3735
+msgid "Toolbar Editor"
+msgstr "अओजारपट्टी संपादक"
+
+#: ../shell/ev-window.c:3867
+msgid "There was an error displaying help"
+msgstr ""
+
+#: ../shell/ev-window.c:4270
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"दस्ताबेज प्रदर्शक.\n"
+"पाप्लर %s (%s) क' प्रयोग कए रहल अछि"
+
+#: ../shell/ev-window.c:4298
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince फ्री सोफ्टवेयर अछि; अहाँ एकरा पुनर्वितरित कए सकैत छी आओर/अथवा"
+"एकरा GNU जनरल पब्लिक लाइसेंस क' शर्त क' अधीन रूपांतरित कए सकैत छी"
+"जहिना जे फ्री सोफ्टवेयर फाउंडेशन क' द्वारा प्रकाशित कएल गेल अछि; अथवा तँ लाइसेंस क' संस्करण 2"
+"अथवा कोनो बादबला संस्करण (अहाँक विकल्प अनुसार).\n"
+
+#: ../shell/ev-window.c:4302
+msgid ""
+"Evince 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.\n"
+msgstr "Evince केँ एहि आशा सँ वितरित कएल गेल अछि जे ई उपयोगी हएताह, मुदा बिनु कोनो वारंटी क'; एतय तक जे बिनु कोनो मर्केंचेंटिबिलिटी अथवा खास उद्देश्य क'लेल फिटनेसक वारंटी क'. GNU जनरल पब्लिक लाइसेंसकेँ बेसी विस्तार क'लेल देखू.\n"
+
+#: ../shell/ev-window.c:4306
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"अहाँक GNU जनरल पब्लिक लाइसेंसक एकटा कापी Evince क' सँग प्राप्त कएनाइ चाही; जँ नहि, Free Software Foundation, Inc., 51 "
+"Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA केँ लिखू.\n"
+
+#. Manually set name and icon in win32
+#: ../shell/ev-window.c:4330 ../shell/main.c:382
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4333
+msgid "© 1996-2007 The Evince authors"
+msgstr "© 1996-2007 Evince लेखक"
+
+#: ../shell/ev-window.c:4339
+msgid "translator-credits"
+msgstr "संगीता कुमारी ([email protected])"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4557
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d एहि पृष्ठ पर भेटल"
+msgstr[1] "%d एहि पृष्ठ पर भेटल"
+
+#: ../shell/ev-window.c:4565
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% खोजबा क'लेल शेष"
+
+#: ../shell/ev-window.c:4993
+msgid "_File"
+msgstr "फाइल (_F)"
+
+#: ../shell/ev-window.c:4994
+msgid "_Edit"
+msgstr "संपादन (_E)"
+
+#: ../shell/ev-window.c:4995
+msgid "_View"
+msgstr "देखू (_V)"
+
+#: ../shell/ev-window.c:4996
+msgid "_Go"
+msgstr "जाउ (_G)"
+
+#: ../shell/ev-window.c:4997
+msgid "_Help"
+msgstr "मद्दति (_H)"
+
+#. File menu
+#: ../shell/ev-window.c:5000 ../shell/ev-window.c:5179
+#: ../shell/ev-window.c:5258
+msgid "_Open..."
+msgstr "खोलू (_O)..."
+
+#: ../shell/ev-window.c:5001 ../shell/ev-window.c:5259
+msgid "Open an existing document"
+msgstr "मोजुदा दस्ताबेज खोलू"
+
+#: ../shell/ev-window.c:5003
+msgid "Op_en a Copy"
+msgstr ""
+
+#: ../shell/ev-window.c:5004
+msgid "Open a copy of the current document in a new window"
+msgstr "नवीन विंडोमे मोजुदा दस्ताबेज क' कॉपीकेँ खोलू"
+
+#: ../shell/ev-window.c:5006 ../shell/ev-window.c:5181
+msgid "_Save a Copy..."
+msgstr "एकटा कापी सहेजू...(_S)"
+
+#: ../shell/ev-window.c:5007
+msgid "Save a copy of the current document"
+msgstr "मोजुदा दस्ताबेजक कापी सहेजू"
+
+#: ../shell/ev-window.c:5009
+msgid "Print Set_up..."
+msgstr "छपाइ सेटअप... (_u)"
+
+#: ../shell/ev-window.c:5010
+msgid "Setup the page settings for printing"
+msgstr "छपाइ लेल पृष्ठ विन्यास सेटअप करू"
+
+#: ../shell/ev-window.c:5012
+msgid "_Print..."
+msgstr "छापू... (_P)"
+
+#: ../shell/ev-window.c:5013 ../shell/ev-window.c:5082
+msgid "Print this document"
+msgstr "एहि दस्ताबेजकेँ छापू"
+
+#: ../shell/ev-window.c:5015
+msgid "P_roperties"
+msgstr "गुण (_r)"
+
+#: ../shell/ev-window.c:5023
+msgid "Select _All"
+msgstr "सबहि चुनू (_A)"
+
+#: ../shell/ev-window.c:5025
+msgid "_Find..."
+msgstr "खोजू (_F)..."
+
+#: ../shell/ev-window.c:5026
+msgid "Find a word or phrase in the document"
+msgstr "दस्ताबेजमे शब्द अथवा मुहावरा खोजू"
+
+#: ../shell/ev-window.c:5032
+msgid "T_oolbar"
+msgstr "अओजारपट्टी (_o)"
+
+#: ../shell/ev-window.c:5034
+msgid "Rotate _Left"
+msgstr "घुमाउ बामाँ (_L)"
+
+#: ../shell/ev-window.c:5036
+msgid "Rotate _Right"
+msgstr "घुमाउ दहिन्ना (_R)"
+
+#: ../shell/ev-window.c:5041
+msgid "Enlarge the document"
+msgstr "दस्ताबेज पैघ करू"
+
+#: ../shell/ev-window.c:5044
+msgid "Shrink the document"
+msgstr "दस्ताबेज घोकचाबू"
+
+#: ../shell/ev-window.c:5046
+msgid "_Reload"
+msgstr "पुनः लोड करू (_R)"
+
+#: ../shell/ev-window.c:5047
+msgid "Reload the document"
+msgstr "दस्ताबेज पुनः लोड़ करू"
+
+#: ../shell/ev-window.c:5050
+msgid "Auto_scroll"
+msgstr ""
+
+#. Go menu
+#: ../shell/ev-window.c:5054
+msgid "_Previous Page"
+msgstr "पछिला पृष्ठ (_P)"
+
+#: ../shell/ev-window.c:5055
+msgid "Go to the previous page"
+msgstr "पछिला पृष्ठ पर जाउ"
+
+#: ../shell/ev-window.c:5057
+msgid "_Next Page"
+msgstr "अगिला पृष्ठ (_N)"
+
+#: ../shell/ev-window.c:5058
+msgid "Go to the next page"
+msgstr "अगिला पृष्ठ पर जाउ"
+
+#: ../shell/ev-window.c:5060
+msgid "_First Page"
+msgstr "पहिल पृष्ठ (_F)"
+
+#: ../shell/ev-window.c:5061
+msgid "Go to the first page"
+msgstr "प्रथम पृष्ठ पर जाउ"
+
+#: ../shell/ev-window.c:5063
+msgid "_Last Page"
+msgstr "अंतिम पृष्ठ (_L)"
+
+#: ../shell/ev-window.c:5064
+msgid "Go to the last page"
+msgstr "अंतिम पृष्ठ पर जाउ"
+
+#. Help menu
+#: ../shell/ev-window.c:5068
+msgid "_Contents"
+msgstr "विषय सूची (_C)"
+
+#: ../shell/ev-window.c:5071
+msgid "_About"
+msgstr "क' संबंधमे (_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5075
+msgid "Leave Fullscreen"
+msgstr "फुलस्क्रीन छोड़ू"
+
+#: ../shell/ev-window.c:5076
+msgid "Leave fullscreen mode"
+msgstr "पूर्ण स्क्रीन छोड़ू"
+
+#: ../shell/ev-window.c:5078
+msgid "Start Presentation"
+msgstr ""
+
+#: ../shell/ev-window.c:5079
+msgid "Start a presentation"
+msgstr ""
+
+#. View Menu
+#: ../shell/ev-window.c:5135
+msgid "_Toolbar"
+msgstr "अओजारपट्टी (_T)"
+
+#: ../shell/ev-window.c:5136
+msgid "Show or hide the toolbar"
+msgstr "अओजारपट्टी नुकाबू अथवा देखाबू"
+
+#: ../shell/ev-window.c:5138
+msgid "Side _Pane"
+msgstr "किनार क' पट्टी (_P)"
+
+#: ../shell/ev-window.c:5139
+msgid "Show or hide the side pane"
+msgstr "किनारक पट्टीकेँ देखाबू आ नुकाबू"
+
+#: ../shell/ev-window.c:5141
+msgid "_Continuous"
+msgstr "निरन्तर (_C)"
+
+#: ../shell/ev-window.c:5142
+msgid "Show the entire document"
+msgstr "सौंसे दस्ताबेज देखाबू"
+
+#: ../shell/ev-window.c:5144
+msgid "_Dual"
+msgstr "दोहरा (_D)"
+
+#: ../shell/ev-window.c:5145
+msgid "Show two pages at once"
+msgstr "एक सँग दुनू पृष्ठ देखाबू"
+
+#: ../shell/ev-window.c:5147
+msgid "_Fullscreen"
+msgstr "फुलस्क्रीन (_F)"
+
+#: ../shell/ev-window.c:5148
+msgid "Expand the window to fill the screen"
+msgstr "विंडोकेँ स्क्रीन भरब क'लेल पसारू"
+
+#: ../shell/ev-window.c:5150
+msgid "Pre_sentation"
+msgstr ""
+
+#: ../shell/ev-window.c:5151
+msgid "Run document as a presentation"
+msgstr "एकटा दस्ताबेज प्रस्तुति चलाबू"
+
+#: ../shell/ev-window.c:5153
+msgid "_Best Fit"
+msgstr "सर्वोत्तम अनुरूप (_B)"
+
+#: ../shell/ev-window.c:5154
+msgid "Make the current document fill the window"
+msgstr "विंडो भरब क'लेल मोजुदा दस्ताबेज बनाबू"
+
+#: ../shell/ev-window.c:5156
+msgid "Fit Page _Width"
+msgstr "पृष्ठ चओड़ाइ अनुरूप बनाबू (_W)"
+
+#: ../shell/ev-window.c:5157
+msgid "Make the current document fill the window width"
+msgstr "विंडो चओड़ाइ भरब क'लेल मोजुदा दस्ताबेज बनाबू"
+
+#. Links
+#: ../shell/ev-window.c:5164
+msgid "_Open Link"
+msgstr "लिंक खोलू (_O)"
+
+#: ../shell/ev-window.c:5166
+msgid "_Go To"
+msgstr "एकरा पर जाउ (_G)"
+
+#: ../shell/ev-window.c:5168
+msgid "Open in New _Window"
+msgstr "नवीन विंडोमे खोलू (_W)"
+
+#: ../shell/ev-window.c:5170
+msgid "_Copy Link Address"
+msgstr "लिंक पता कापी करू (_C)"
+
+#: ../shell/ev-window.c:5172
+msgid "_Save Image As..."
+msgstr "बिंब एहि रूपमे सहेजू... (_S)"
+
+#: ../shell/ev-window.c:5174
+msgid "Copy _Image"
+msgstr ""
+
+#: ../shell/ev-window.c:5220
+msgid "Page"
+msgstr "पृष्ठ"
+
+#: ../shell/ev-window.c:5221
+msgid "Select Page"
+msgstr "पृष्ठ चुनू"
+
+#: ../shell/ev-window.c:5232
+msgid "Zoom"
+msgstr "ज़ूम"
+
+#: ../shell/ev-window.c:5234
+msgid "Adjust the zoom level"
+msgstr "जूम लेबल समायोजित करू"
+
+#: ../shell/ev-window.c:5244
+msgid "Navigation"
+msgstr "नेविगेशन"
+
+#: ../shell/ev-window.c:5246
+msgid "Back"
+msgstr "पाछाँ"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5249
+msgid "Move across visited pages"
+msgstr "देखल गेल पृष्ठ क' पार लए जाउ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5279
+msgid "Previous"
+msgstr "पछिला"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5284
+msgid "Next"
+msgstr "अगिला"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5288
+msgid "Zoom In"
+msgstr "ज़ूम इन"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5292
+msgid "Zoom Out"
+msgstr "ज़ूम आउट"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5300
+msgid "Fit Width"
+msgstr "चओड़ाइ अनुरूप बनाबू"
+
+#: ../shell/ev-window.c:5467 ../shell/ev-window.c:5485
+msgid "Unable to launch external application."
+msgstr ""
+
+#: ../shell/ev-window.c:5528
+msgid "Unable to open external link"
+msgstr ""
+
+#: ../shell/ev-window.c:5684
+msgid "Couldn't find appropriate format to save image"
+msgstr ""
+
+#: ../shell/ev-window.c:5723
+msgid "The image could not be saved."
+msgstr ""
+
+#: ../shell/ev-window.c:5755
+msgid "Save Image"
+msgstr "चित्र सहेजू"
+
+#: ../shell/ev-window.c:5817
+msgid "Unable to open attachment"
+msgstr "दस्ताबेज खोलबमे असमर्थ"
+
+#: ../shell/ev-window.c:5868
+msgid "The attachment could not be saved."
+msgstr "फाइल सहेजल नहि जाए सकल."
+
+#: ../shell/ev-window.c:5913
+msgid "Save Attachment"
+msgstr ""
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - कूटशब्द आवश्यक"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "विस्तार सँ"
+
+#: ../shell/main.c:59 ../shell/main.c:347
+msgid "MATE Document Viewer"
+msgstr "MATE दस्ताबेज प्रदर्शक"
+
+#: ../shell/main.c:67
+msgid "The page of the document to display."
+msgstr "देखाबै क'लेल दस्ताबेज क' पृष्ठ"
+
+#: ../shell/main.c:67
+msgid "PAGE"
+msgstr "पृष्ठ"
+
+#: ../shell/main.c:68
+msgid "Run evince in fullscreen mode"
+msgstr "पूर्ण स्क्रीन मोड मे एवींस चलाबू"
+
+#: ../shell/main.c:69
+msgid "Run evince in presentation mode"
+msgstr "दस्ताबेज प्रस्तुतिमे एवींस चलाबू"
+
+#: ../shell/main.c:70
+msgid "Run evince as a previewer"
+msgstr "पूर्वावलोकनकर्ता क' रूप मे एवींस चलाबू"
+
+#: ../shell/main.c:71
+msgid "The word or phrase to find in the document"
+msgstr ""
+
+#: ../shell/main.c:71
+msgid "STRING"
+msgstr "स्ट्रिंग"
+
+#: ../shell/main.c:75
+msgid "[FILE...]"
+msgstr "[फाइल...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"बूलियन विकल्प उपलब्ध, सही थंबनेलकेँ सक्रिय करैत अछि आओर गलत नवीन थंबनेल क' निर्माणकेँ "
+"निष्क्रिय करैत अछि"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF क' थंबनेल सक्षम करू"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF दस्ताबेज क'लेल लघु चित्र कमांड"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF दस्ताबेज थंबनेलर क'लेल वैध कमांड क' सँग तर्क. नॉटिलस थंबनेलर दस्ताबेजनकेँ बेसी"
+"सूचना क'लेल देखू."
+
diff --git a/po/mg.po b/po/mg.po
new file mode 100644
index 00000000..0265ad17
--- /dev/null
+++ b/po/mg.po
@@ -0,0 +1,1379 @@
+# Malagasy translation of EVINCE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Fano Rajaonarisoa <[email protected]>, 2006
+# Thierry Randrianiriana <[email protected]>, 2006-2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: EVINCE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-12-23 17:17+0000\n"
+"PO-Revision-Date: 2007-12-28 19:32+0300\n"
+"Last-Translator: Thierry Randrianiriana <[email protected]>\n"
+"Language-Team: MALAGASY <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#: ../backend/comics/comics-document.c:150
+msgid "File corrupted."
+msgstr "Rakitra simba."
+
+#: ../backend/comics/comics-document.c:186
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Tsy nisy sary tao anatin'ny tahirin-tsoratra %s"
+
+#: ../backend/djvu/djvu-document.c:165
+msgid ""
+"The document is composed by several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+
+#: ../backend/dvi/dvi-document.c:98
+msgid "File not available"
+msgstr "Tsy misy ilay rakitra"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Diso ny lamin'io tahirin-kevitra DVI io"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:675
+msgid "Yes"
+msgstr "Eny"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:678
+msgid "No"
+msgstr "Tsia"
+
+#: ../backend/pdf/ev-poppler.cc:751
+msgid "Type 1"
+msgstr "Karazana 1"
+
+#: ../backend/pdf/ev-poppler.cc:753
+msgid "Type 1C"
+msgstr "Karazana 1C"
+
+#: ../backend/pdf/ev-poppler.cc:755
+msgid "Type 3"
+msgstr "Karazana 3"
+
+#: ../backend/pdf/ev-poppler.cc:757
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:759
+msgid "Type 1 (CID)"
+msgstr "Karazana 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:761
+msgid "Type 1C (CID)"
+msgstr "Karazana 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:763
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:765
+msgid "Unknown font type"
+msgstr "Karazan'endri-tsoratra tsy fantatra"
+
+#: ../backend/pdf/ev-poppler.cc:791
+msgid "No name"
+msgstr "Tsy misy anarana"
+
+#: ../backend/pdf/ev-poppler.cc:799
+msgid "Embedded subset"
+msgstr "Zana-pitambarana voarakitra"
+
+#: ../backend/pdf/ev-poppler.cc:801
+msgid "Embedded"
+msgstr "Voarakitra"
+
+#: ../backend/pdf/ev-poppler.cc:803
+msgid "Not embedded"
+msgstr "Tsy voarakitra"
+
+#: ../backend/impress/zip.c:52
+msgid "No error"
+msgstr "Tsy misy diso"
+
+#: ../backend/impress/zip.c:55
+msgid "Not enough memory"
+msgstr ""
+
+#: ../backend/impress/zip.c:58
+msgid "Cannot find zip signature"
+msgstr ""
+
+#: ../backend/impress/zip.c:61
+msgid "Invalid zip file"
+msgstr ""
+
+#: ../backend/impress/zip.c:64
+#, fuzzy
+msgid "Multi file zips are not supported"
+msgstr "Tsy raisina an-tànana ny famoronana PDF"
+
+#: ../backend/impress/zip.c:67
+msgid "Cannot open the file"
+msgstr "Tsy voasokatra ny rakitra"
+
+#: ../backend/impress/zip.c:70
+msgid "Cannot read data from file"
+msgstr "Tsy voavaky ny karazan-daza avy amin'ny rakitra"
+
+#: ../backend/impress/zip.c:73
+msgid "Cannot find file in the zip archive"
+msgstr ""
+
+#: ../backend/impress/zip.c:76 ../shell/ev-window.c:4830
+msgid "Unknown error"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:30
+msgid "BBox"
+msgstr "BBox"
+
+#: ../backend/ps/gsdefaults.c:31
+msgid "Letter"
+msgstr "Taratasy"
+
+#: ../backend/ps/gsdefaults.c:32
+msgid "Tabloid"
+msgstr "Tabloîd"
+
+#: ../backend/ps/gsdefaults.c:33
+msgid "Ledger"
+msgstr "Bokim-bola"
+
+#: ../backend/ps/gsdefaults.c:34
+msgid "Legal"
+msgstr "Legal"
+
+#: ../backend/ps/gsdefaults.c:35
+#, fuzzy
+msgid "Statement"
+msgstr "Statement"
+
+#: ../backend/ps/gsdefaults.c:36
+msgid "Executive"
+msgstr "Executive"
+
+#: ../backend/ps/gsdefaults.c:37
+msgid "A0"
+msgstr "A0"
+
+#: ../backend/ps/gsdefaults.c:38
+msgid "A1"
+msgstr "A1"
+
+#: ../backend/ps/gsdefaults.c:39
+msgid "A2"
+msgstr "A2"
+
+#: ../backend/ps/gsdefaults.c:40
+msgid "A3"
+msgstr "A3"
+
+#: ../backend/ps/gsdefaults.c:41
+msgid "A4"
+msgstr "A4"
+
+#: ../backend/ps/gsdefaults.c:42
+msgid "A5"
+msgstr "A5"
+
+#: ../backend/ps/gsdefaults.c:43
+msgid "B4"
+msgstr "B4"
+
+#: ../backend/ps/gsdefaults.c:44
+msgid "B5"
+msgstr "B5"
+
+#: ../backend/ps/gsdefaults.c:45
+#, fuzzy
+msgid "Folio"
+msgstr "Folio"
+
+#: ../backend/ps/gsdefaults.c:46
+#, fuzzy
+msgid "Quarto"
+msgstr "Quarto"
+
+#: ../backend/ps/gsdefaults.c:47
+msgid "10x14"
+msgstr "10x14"
+
+#: ../backend/ps/ps-document.c:172 ../backend/ps/ps-document.c:186
+#, c-format
+msgid "Cannot open file “%s”."
+msgstr "Tsy voasokatra ny rakitra “%s”."
+
+#: ../backend/ps/ps-document.c:233
+#, c-format
+msgid ""
+"Failed to load document “%s”. Ghostscript interpreter was not found in path"
+msgstr ""
+"Tsy nahavita naka ny tahirin-kevitra “%s”. Tsy hita tanatin'ny mpamadi-teny "
+"Ghostscript"
+
+#: ../backend/ps/ps-document.c:250
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Tsy nahavita naka ny tahirin-kevitra “%s”"
+
+#: ../backend/ps/ps-document.c:433
+msgid "Encapsulated PostScript"
+msgstr "PostScript voafintina"
+
+#: ../backend/ps/ps-document.c:434
+msgid "PostScript"
+msgstr "PostScript"
+
+#: ../backend/ps/ps-interpreter.c:543
+msgid "Interpreter failed."
+msgstr "Tsy nandeha ny mpandika teny."
+
+#: ../backend/impress/impress-document.c:294
+msgid "Remote files aren't supported"
+msgstr ""
+
+#: ../backend/impress/impress-document.c:305
+msgid "Invalid document"
+msgstr "Tahirin-kevitra diso"
+
+#: ../libdocument/ev-attachment.c:303 ../libdocument/ev-attachment.c:316
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Tsy voaraikitra ny mpanaraka “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:348
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Tsy voasokatra ny mpanaraka “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:381
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Tsy voasokatra ny mpanaraka “%s”"
+
+#: ../libdocument/ev-document-factory.c:291
+#: ../libdocument/ev-document-factory.c:398
+msgid "Unknown MIME Type"
+msgstr "Karazana MIME tsy fantatra"
+
+#: ../libdocument/ev-document-factory.c:302
+#, c-format
+msgid "Unhandled MIME type: “%s”"
+msgstr "Karazana MIME tsy raisina an-tànana: “%s”"
+
+#: ../libdocument/ev-document-factory.c:439
+msgid "All Documents"
+msgstr "Ny tahirin-kevitra rehetra"
+
+#: ../libdocument/ev-document-factory.c:447
+msgid "PostScript Documents"
+msgstr "Tahirin-kevitra PostScript"
+
+#: ../libdocument/ev-document-factory.c:457
+msgid "PDF Documents"
+msgstr "Tahirin-kevitra PDF"
+
+#: ../libdocument/ev-document-factory.c:467 ../shell/ev-window.c:5054
+msgid "Images"
+msgstr "Sary"
+
+#: ../libdocument/ev-document-factory.c:477
+msgid "DVI Documents"
+msgstr "Tahirin-kevitra DVI"
+
+#: ../libdocument/ev-document-factory.c:487
+msgid "Djvu Documents"
+msgstr "Tahirin-kevitra Djvu"
+
+#: ../libdocument/ev-document-factory.c:497
+msgid "Comic Books"
+msgstr "Boky mahatsikaiky"
+
+#: ../libdocument/ev-document-factory.c:507
+msgid "Impress Slides"
+msgstr "Diapo Impress"
+
+#: ../libdocument/ev-document-factory.c:515
+msgid "All Files"
+msgstr "Ny rakitra rehetra"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:938
+#, c-format
+msgid "Show “_%s”"
+msgstr "Asehoy ny “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Move on Toolbar"
+msgstr "_Ataovy eo amin'ny anjan'ny fitaovana"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Move the selected item on the toolbar"
+msgstr "Mamindra ny singa voafaritra eo amin'ny anjam-pitaovana"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1403
+msgid "_Remove from Toolbar"
+msgstr "_Esory teo amin'ny anjan'ny fitaovana"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1404
+msgid "Remove the selected item from the toolbar"
+msgstr "Manesotra ny singa voafaritra teo amin'ny anjam-pitaovana"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1405
+msgid "_Delete Toolbar"
+msgstr "_Esory io anjam-pitaovana io"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1406
+msgid "Remove the selected toolbar"
+msgstr "Manesotra ny anjam-pitaovana voafaritra"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:441
+msgid "Separator"
+msgstr "Mpampisaraka"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+#, fuzzy
+msgid "Running in presentation mode"
+msgstr "Alefa toa fampisehoana ny evince"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:4645
+msgid "Best Fit"
+msgstr "Ny tena mety"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Ataovy mameno ny indran'ny pejy"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:3770
+#: ../shell/ev-window-title.c:126
+msgid "Document Viewer"
+msgstr "Mpaneho tahirin-kevitra"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "Maneho tahirin-kevitra maro pejy"
+
+#: ../data/evince-password.glade.h:1
+msgid "Password Entry"
+msgstr "Teny fanalahidy"
+
+#: ../data/evince-password.glade.h:2
+msgid "Remember password for this session"
+msgstr "Tadidio ny teny fanalahidiko amin'ity session ity"
+
+#: ../data/evince-password.glade.h:3
+msgid "Save password in keyring"
+msgstr "Mandraikitra ilay teny fanalahidy amin'ny rojo"
+
+#: ../data/evince-password.glade.h:4
+msgid "_Password:"
+msgstr "_Teny fanalahidy:"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>Mpanoratra:</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>Noforonina:</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>Mpamorona:</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>Lamina:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b>Teny fanalahidy:</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>Novana:</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b>Isan'ny pejy:</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr "<b>Nomena aina:</b>"
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Paper Size:</b>"
+msgstr "<b>Haben'ny taratrasy:</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Producer:</b>"
+msgstr "<b>Mpamokatra:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Security:</b>"
+msgstr "<b>Fiarovana:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Subject:</b>"
+msgstr "<b>Anton-dresaka:</b>"
+
+#: ../data/evince-properties.glade.h:13
+msgid "<b>Title:</b>"
+msgstr "<b>Lohateny:</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Dingano ireo fameperana amin'ilay tahirin-kevitra"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Dingano ireo fameperana amin'ilay tahirin-kevitra, toy ny famerana ny "
+"fandikana na fanontana."
+
+#: ../properties/ev-properties-main.c:110
+msgid "Document"
+msgstr "Tahirin-kevitra"
+
+#: ../properties/ev-properties-view.c:182
+msgid "None"
+msgstr "Tsy misy"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:207
+#: ../properties/ev-properties-view.c:367
+msgid "default:mm"
+msgstr ""
+
+#. Metric measurement (millimeters)
+#: ../properties/ev-properties-view.c:249
+#: ../properties/ev-properties-view.c:404
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr ""
+
+#: ../properties/ev-properties-view.c:253
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr ""
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:277
+#: ../properties/ev-properties-view.c:415
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr ""
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:284
+#: ../properties/ev-properties-view.c:422
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr ""
+
+#. Imperial measurement (inches)
+#: ../properties/ev-properties-view.c:399
+#, c-format
+msgid "%.2f x %.2f in"
+msgstr ""
+
+#: ../shell/eggfindbar.c:158
+msgid "Search string"
+msgstr "Hitady ilay laha-daza"
+
+#: ../shell/eggfindbar.c:159
+msgid "The name of the string to be found"
+msgstr "Ny anaran'ilay laha-daza hokarohina"
+
+#: ../shell/eggfindbar.c:172
+msgid "Case sensitive"
+msgstr "Manaja haben-tsoratra"
+
+#: ../shell/eggfindbar.c:173
+msgid "TRUE for a case sensitive search"
+msgstr "MARINA raha karoka manaja haben-tsoratra"
+
+#: ../shell/eggfindbar.c:180
+msgid "Highlight color"
+msgstr "Loko fanasongadinana"
+
+#: ../shell/eggfindbar.c:181
+msgid "Color of highlight for all matches"
+msgstr "Ny loko hanasongadinana ny teny hita rehetra"
+
+#: ../shell/eggfindbar.c:187
+msgid "Current color"
+msgstr "Ny loko izao"
+
+#: ../shell/eggfindbar.c:188
+msgid "Color of highlight for the current match"
+msgstr "Ny loko hanasongadinana ny teny hita izao"
+
+#: ../shell/eggfindbar.c:321
+msgid "Find:"
+msgstr "Karohy:"
+
+#: ../shell/eggfindbar.c:330
+msgid "Find Previous"
+msgstr "Aloha"
+
+#: ../shell/eggfindbar.c:334 ../shell/eggfindbar.c:337
+msgid "Find previous occurrence of the search string"
+msgstr "Mikaroka izay mitovy amin'ilay laha-daza any aloha"
+
+#: ../shell/eggfindbar.c:343
+msgid "Find Next"
+msgstr "Manaraka"
+
+#: ../shell/eggfindbar.c:347 ../shell/eggfindbar.c:350
+msgid "Find next occurrence of the search string"
+msgstr "Mikaroka izay mitovy amin'ilay laha-daza any aoriana"
+
+#: ../shell/eggfindbar.c:359
+msgid "C_ase Sensitive"
+msgstr "_Manaja haben-tsoratra"
+
+#: ../shell/eggfindbar.c:363 ../shell/eggfindbar.c:366
+msgid "Toggle case sensitive search"
+msgstr "Mampihatra na tsia ny karoka manaja haben-tsoratra"
+
+#: ../shell/ev-jobs.c:652
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "Tsy afaka namorona ny rakitra “%s”: %s"
+
+#: ../shell/ev-open-recent-action.c:70
+#, fuzzy
+msgid "Open a recently used document"
+msgstr "Manokatra tahirin-kevitra"
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d amin'ny %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "amin'ny %d"
+
+#: ../shell/ev-password.c:83
+msgid "Password required"
+msgstr "Mila teny fanalahidy"
+
+#: ../shell/ev-password.c:84
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"Voageja ny tahirin-kevitra “%s” ka mila teny fanalahidy izay vao mety "
+"sokafana."
+
+#: ../shell/ev-password.c:149
+msgid "Enter password"
+msgstr "Soraty ny teny fanalahidy"
+
+#: ../shell/ev-password.c:252
+#, c-format
+msgid "Password for document %s"
+msgstr "Teny fanalahidin'ny tahirin-kevitra %s"
+
+#: ../shell/ev-password.c:334
+msgid "Incorrect password"
+msgstr "Teny fanalahidy diso"
+
+#: ../shell/ev-password-view.c:111
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Voageja io tahirin-kevitra io ary tsy ho azo vakiana raha tsy manome ny teny "
+"fanalahidy marina ianao."
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "_Hamaha ilay tahirin-kevitra"
+
+#: ../shell/ev-properties-dialog.c:61
+msgid "Properties"
+msgstr "Toetoetra"
+
+#: ../shell/ev-properties-dialog.c:94
+msgid "General"
+msgstr "Ankapobe"
+
+#: ../shell/ev-properties-dialog.c:104
+msgid "Fonts"
+msgstr "endri-tsoratra"
+
+#: ../shell/ev-properties-fonts.c:141
+msgid "Font"
+msgstr "Endri-tsoratra"
+
+#: ../shell/ev-properties-fonts.c:152
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "Manangona ireo laza momba ny endri-tsoratra... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:670
+msgid "Attachments"
+msgstr "Mpanaraka"
+
+#: ../shell/ev-sidebar-links.c:266 ../shell/ev-view.c:3537
+msgid "Loading..."
+msgstr "Maka..."
+
+#: ../shell/ev-sidebar-links.c:342
+msgid "Print..."
+msgstr "Hanonta..."
+
+#: ../shell/ev-sidebar-links.c:722
+msgid "Index"
+msgstr "Fizahan-takila"
+
+#: ../shell/ev-sidebar-thumbnails.c:728
+msgid "Thumbnails"
+msgstr "Sary madinika"
+
+#: ../shell/ev-view-accessible.c:40
+msgid "Scroll Up"
+msgstr "Mampikorisa miakatra"
+
+#: ../shell/ev-view-accessible.c:41
+msgid "Scroll Down"
+msgstr "Mampikorisa midina"
+
+#: ../shell/ev-view-accessible.c:47
+msgid "Scroll View Up"
+msgstr "Mampikorisa ny seho miakatra"
+
+#: ../shell/ev-view-accessible.c:48
+msgid "Scroll View Down"
+msgstr "Mampikorisa ny seho midina"
+
+#: ../shell/ev-view-accessible.c:532
+msgid "Document View"
+msgstr "Sehon'ilay tahirin-kevitra"
+
+#: ../shell/ev-view.c:1440
+msgid "Go to first page"
+msgstr "Ho any amin'ny pejy voalohany"
+
+#: ../shell/ev-view.c:1442
+msgid "Go to previous page"
+msgstr "Mankany any amin'ny pejy eo aloha"
+
+#: ../shell/ev-view.c:1444
+msgid "Go to next page"
+msgstr "Mankany amin'ny pejy manaraka"
+
+#: ../shell/ev-view.c:1446
+msgid "Go to last page"
+msgstr "Ho any amin'ny pejy manaraka"
+
+#: ../shell/ev-view.c:1448
+msgid "Go to page"
+msgstr "Ho any amin'ny pejy"
+
+#: ../shell/ev-view.c:1450
+msgid "Find"
+msgstr "Tadiavo"
+
+#: ../shell/ev-view.c:1478
+#, c-format
+msgid "Go to page %s"
+msgstr "Ho any amin'ny pejy %s"
+
+#: ../shell/ev-view.c:1484
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Ho any amin'ny %s amin'ny rakitra “%s”"
+
+#: ../shell/ev-view.c:1487
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Ho any amin'ny “%s”"
+
+#: ../shell/ev-view.c:1495
+#, c-format
+msgid "Launch %s"
+msgstr "Handefa ny %s"
+
+#: ../shell/ev-view.c:2444
+msgid "End of presentation. Press Escape to exit."
+msgstr ""
+
+#: ../shell/ev-view.c:3260
+msgid "Jump to page:"
+msgstr "Ho any amin'ny pejy:"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:4939
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "in-%d hita anatin'ity pejy ity"
+msgstr[1] "in-%d hita anatin'ity pejy ity"
+
+#: ../shell/ev-view.c:4948
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% sisa tadiavina"
+
+#: ../shell/ev-window.c:781
+#, c-format
+msgid "Page %s - %s"
+msgstr ""
+
+#: ../shell/ev-window.c:783
+#, fuzzy, c-format
+msgid "Page %s"
+msgstr "Pejy"
+
+#: ../shell/ev-window.c:1421
+msgid "Unable to open document"
+msgstr "Tsy nahasokatra ilay tahirin-kevitra"
+
+#: ../shell/ev-window.c:1617
+msgid "Open Document"
+msgstr "Hanokatra ilay tahirin-kevitra"
+
+#: ../shell/ev-window.c:1687
+#, fuzzy, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "Tsy voaraikitra ny mpanaraka “%s”: %s"
+
+#: ../shell/ev-window.c:1716
+#, fuzzy
+msgid "Cannot open a copy."
+msgstr "Tsy voasokatra ny rakitra “%s”.\n"
+
+#: ../shell/ev-window.c:1961 ../shell/ev-window.c:2033
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Tsy voaraikitra ho “%s” ilay rakitra."
+
+#: ../shell/ev-window.c:2082
+msgid "Save a Copy"
+msgstr "Handraikitra dika mitovy"
+
+#: ../shell/ev-window.c:2214 ../shell/ev-window.c:3469
+msgid "Failed to print document"
+msgstr "Tsy nahavita nanonta ilay tahirin-kevitra"
+
+#: ../shell/ev-window.c:2378 ../shell/ev-window.c:2568
+msgid "Printing is not supported on this printer."
+msgstr "Tsy raisin'ity milina ity an-tànana ny fanontana."
+
+#: ../shell/ev-window.c:2504 ../shell/ev-window.c:2619
+#: ../shell/ev-window.c:4440
+msgid "Print"
+msgstr "Hanonta"
+
+#: ../shell/ev-window.c:2558
+msgid "Generating PDF is not supported"
+msgstr "Tsy raisina an-tànana ny famoronana PDF"
+
+#: ../shell/ev-window.c:2570
+#, c-format
+msgid ""
+"You were trying to print to a printer using the “%s” driver. This program "
+"requires a PostScript printer driver."
+msgstr ""
+"Nanandrana nanonta tamin'ny mpanonta-printy iray tamin'ny alalan'ny mpamily "
+"“%s” ianao. Mila mpamily PostScript io rindranasa io."
+
+#: ../shell/ev-window.c:2628
+msgid "Pages"
+msgstr "Pejy"
+
+#: ../shell/ev-window.c:3244
+msgid "Toolbar Editor"
+msgstr "Mpanova anjam-pitaovana"
+
+#: ../shell/ev-window.c:3766
+#, fuzzy, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Mpizaha rakitra PostScript sy PDF.\n"
+"Mampiasa ny poppler %s (%s)"
+
+#: ../shell/ev-window.c:3794
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Rindran'asa maimaimpoana ny Evince. Azonao zaraina ary/na ovaina mifanaraka "
+"amin'ireo fepetra voalaza anatin'ny fahazoan-dàlana ho an'ny besinimaro GNU "
+"izay navoakan'ny Free Software Foundation io rindran'asa io; na ilay andiany "
+"faha 2, na izay andiany taty afara (araka ny safidinao).\n"
+
+#: ../shell/ev-window.c:3798
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Ny Gcalctool dia naparitaka noho ny fiheverana fa hisy ilàna azy izy io. Tsy "
+"misy fiantohana mihitsy izy io, na dia ilay fiantohana (tsy voalaza an-"
+"tsoratra) ny FAHALAVORARIANY HO AN'NY VAROTRA na ny FETEZANY ANAOVANA "
+"ZAVATRA aza. Vakio ilay Fahazoan-dàlana ho an'ny besinimaro GNU hahalalanao "
+"ny antsipiriany.\n"
+
+#: ../shell/ev-window.c:3802
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Tokony nahazo dika mitovin'ny Fahazoan-dàlana ho an'ny besinimaro GNU ianao "
+"niaraka tamin'ny Gcalctool. Raha tsy nahazo izany ianao, dia manorata any "
+"amin'ny Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, "
+"Boston, MA 02110-1301, USA\n"
+
+#: ../shell/ev-window.c:3826 ../shell/main.c:344
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:3829
+#, fuzzy
+msgid "© 1996-2007 The Evince authors"
+msgstr "© 1996-2005 Ireo mpamolavola ny Evince "
+
+#: ../shell/ev-window.c:3835
+msgid "translator-credits"
+msgstr ""
+"Mpandrindra: Thierry Randrianiriana <[email protected]>\n"
+"Mpandika teny: Fanomezana Rajaonarisoa <[email protected]>"
+
+#: ../shell/ev-window.c:4352
+msgid "_File"
+msgstr "_Rakitra"
+
+#: ../shell/ev-window.c:4353
+msgid "_Edit"
+msgstr "_Fanovana"
+
+#: ../shell/ev-window.c:4354
+msgid "_View"
+msgstr "_Seho"
+
+#: ../shell/ev-window.c:4355
+msgid "_Go"
+msgstr "_Alefa"
+
+#: ../shell/ev-window.c:4356
+msgid "_Help"
+msgstr "_Toro-làlana"
+
+#. File menu
+#: ../shell/ev-window.c:4359 ../shell/ev-window.c:4536
+#: ../shell/ev-window.c:4607
+msgid "_Open..."
+msgstr "_Hanokatra..."
+
+#: ../shell/ev-window.c:4360 ../shell/ev-window.c:4608
+msgid "Open an existing document"
+msgstr "Manokatra tahirin-kevitra"
+
+#: ../shell/ev-window.c:4362
+#, fuzzy
+msgid "Op_en a Copy"
+msgstr "Handraikitra dika mitovy"
+
+#: ../shell/ev-window.c:4363
+#, fuzzy
+msgid "Open a copy of the current document in a new window"
+msgstr "Mandraikitra dika mitovy amin'io tahirin-kevitra io"
+
+#: ../shell/ev-window.c:4365 ../shell/ev-window.c:4538
+msgid "_Save a Copy..."
+msgstr "_Handraikitra dika mitovy..."
+
+#: ../shell/ev-window.c:4366
+msgid "Save a copy of the current document"
+msgstr "Mandraikitra dika mitovy amin'io tahirin-kevitra io"
+
+#: ../shell/ev-window.c:4368
+#, fuzzy
+msgid "Print Set_up..."
+msgstr "Hanonta..."
+
+#: ../shell/ev-window.c:4369
+msgid "Setup the page settings for printing"
+msgstr ""
+
+#: ../shell/ev-window.c:4371
+msgid "_Print..."
+msgstr "_Hanonta..."
+
+#: ../shell/ev-window.c:4372 ../shell/ev-window.c:4441
+msgid "Print this document"
+msgstr "Manonta ity tahirin-kevitra ity"
+
+#: ../shell/ev-window.c:4374
+msgid "P_roperties"
+msgstr "_Toetoetra"
+
+#: ../shell/ev-window.c:4382
+msgid "Select _All"
+msgstr "Farito izy _rehetra"
+
+#: ../shell/ev-window.c:4384
+msgid "_Find..."
+msgstr "_Karohy..."
+
+#: ../shell/ev-window.c:4385
+msgid "Find a word or phrase in the document"
+msgstr "Mikaroka teny na andian-teny ao anatin'ilay tahirin-kevitra"
+
+#: ../shell/ev-window.c:4387
+msgid "Find Ne_xt"
+msgstr "_Manaraka"
+
+#: ../shell/ev-window.c:4389
+msgid "Find Pre_vious"
+msgstr "_Aloha"
+
+#: ../shell/ev-window.c:4391
+msgid "T_oolbar"
+msgstr "_Anjam-pitaovana"
+
+#: ../shell/ev-window.c:4393
+msgid "Rotate _Left"
+msgstr "Ahodino _miankavia"
+
+#: ../shell/ev-window.c:4395
+msgid "Rotate _Right"
+msgstr "Ahodino mianka_vanana"
+
+#: ../shell/ev-window.c:4400
+msgid "Enlarge the document"
+msgstr "Alehibiazo ilay tahirin-kevitra"
+
+#: ../shell/ev-window.c:4403
+msgid "Shrink the document"
+msgstr "Akelezo ilay tahirin-kevitra"
+
+#: ../shell/ev-window.c:4405
+msgid "_Reload"
+msgstr "_Avereno aseho"
+
+#: ../shell/ev-window.c:4406
+msgid "Reload the document"
+msgstr "Mamerina maneho ilay tahirin-kevitra"
+
+#: ../shell/ev-window.c:4409
+msgid "Auto_scroll"
+msgstr ""
+
+#. Go menu
+#: ../shell/ev-window.c:4413
+msgid "_Previous Page"
+msgstr "_Pejy aloha"
+
+#: ../shell/ev-window.c:4414
+msgid "Go to the previous page"
+msgstr "Mankany amin'ny pejy aloha"
+
+#: ../shell/ev-window.c:4416
+msgid "_Next Page"
+msgstr "Pejy _manaraka"
+
+#: ../shell/ev-window.c:4417
+msgid "Go to the next page"
+msgstr "Mankany amin'ny pejy manaraka"
+
+#: ../shell/ev-window.c:4419
+msgid "_First Page"
+msgstr "Pejy _voalohany"
+
+#: ../shell/ev-window.c:4420
+msgid "Go to the first page"
+msgstr "Mankany amin'ny pejy voalohany"
+
+#: ../shell/ev-window.c:4422
+msgid "_Last Page"
+msgstr "_Pejy _farany"
+
+#: ../shell/ev-window.c:4423
+msgid "Go to the last page"
+msgstr "Mankany amin'ny pejy farany"
+
+#. Help menu
+#: ../shell/ev-window.c:4427
+msgid "_Contents"
+msgstr "_Mpiaty"
+
+#: ../shell/ev-window.c:4430
+msgid "_About"
+msgstr "_Mombamomba"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4434
+msgid "Leave Fullscreen"
+msgstr "Tsy mameno efijery intsony"
+
+#: ../shell/ev-window.c:4435
+msgid "Leave fullscreen mode"
+msgstr "Mitsahatra mameno efijery"
+
+#: ../shell/ev-window.c:4437
+#, fuzzy
+msgid "Start Presentation"
+msgstr "_Fampisehoana"
+
+#: ../shell/ev-window.c:4438
+#, fuzzy
+msgid "Start a presentation"
+msgstr "Mandefa ilay tahirin-kevitra tahaka ny hoe fampisehoana"
+
+#. View Menu
+#: ../shell/ev-window.c:4492
+msgid "_Toolbar"
+msgstr "_Anjam-pitaovana"
+
+#: ../shell/ev-window.c:4493
+msgid "Show or hide the toolbar"
+msgstr "Maneho na manafina ny anjam-pitaovana"
+
+#: ../shell/ev-window.c:4495
+msgid "Side _Pane"
+msgstr "_Tontonana an-tsisiny"
+
+#: ../shell/ev-window.c:4496
+msgid "Show or hide the side pane"
+msgstr "Maneho na manafina ny tontonana an-tsisiny"
+
+#: ../shell/ev-window.c:4498
+msgid "_Continuous"
+msgstr "_Mitohitohy"
+
+#: ../shell/ev-window.c:4499
+msgid "Show the entire document"
+msgstr "Maneho ilay tahirin-kevitra iray manontolo"
+
+#: ../shell/ev-window.c:4501
+msgid "_Dual"
+msgstr "_Roa"
+
+#: ../shell/ev-window.c:4502
+msgid "Show two pages at once"
+msgstr "Maneho pejy roa miaraka"
+
+#: ../shell/ev-window.c:4504
+msgid "_Fullscreen"
+msgstr "_Mameno efijery"
+
+#: ../shell/ev-window.c:4505
+msgid "Expand the window to fill the screen"
+msgstr "Mahatonga ny fikandrana hameno ny efijery"
+
+#: ../shell/ev-window.c:4507
+#, fuzzy
+msgid "Pre_sentation"
+msgstr "_Fampisehoana"
+
+#: ../shell/ev-window.c:4508
+msgid "Run document as a presentation"
+msgstr "Mandefa ilay tahirin-kevitra tahaka ny hoe fampisehoana"
+
+#: ../shell/ev-window.c:4510
+msgid "_Best Fit"
+msgstr "Ny _tena mety"
+
+#: ../shell/ev-window.c:4511
+msgid "Make the current document fill the window"
+msgstr "Mahatonga ity tahirin-kevitra ity hameno ny fikandrana"
+
+#: ../shell/ev-window.c:4513
+msgid "Fit Page _Width"
+msgstr "_Mameno ny indran'ny pejy"
+
+#: ../shell/ev-window.c:4514
+msgid "Make the current document fill the window width"
+msgstr "Mahatonga ity tahirin-kevitra ity hameno ny indran'ny fikandrana"
+
+#. Links
+#: ../shell/ev-window.c:4521
+msgid "_Open Link"
+msgstr "_Sokafy io rohy io"
+
+#: ../shell/ev-window.c:4523
+msgid "_Go To"
+msgstr "_Ho any amin'ny"
+
+#: ../shell/ev-window.c:4525
+msgid "Open in New _Window"
+msgstr ""
+
+#: ../shell/ev-window.c:4527
+msgid "_Copy Link Address"
+msgstr "_Adikao ny adiresiny"
+
+#: ../shell/ev-window.c:4529
+#, fuzzy
+msgid "_Save Image As..."
+msgstr "_Handraikitra dika mitovy..."
+
+#: ../shell/ev-window.c:4531
+msgid "Copy _Image"
+msgstr ""
+
+#: ../shell/ev-window.c:4570
+msgid "Page"
+msgstr "Pejy"
+
+#: ../shell/ev-window.c:4571
+msgid "Select Page"
+msgstr "Mamaritra ilay pejy"
+
+#: ../shell/ev-window.c:4582
+msgid "Zoom"
+msgstr "Zòma"
+
+#: ../shell/ev-window.c:4584
+msgid "Adjust the zoom level"
+msgstr "Manamboatra ny tahan'ny zòma"
+
+#: ../shell/ev-window.c:4594
+msgid "Navigation"
+msgstr ""
+
+#: ../shell/ev-window.c:4596
+msgid "Back"
+msgstr ""
+
+#: ../shell/ev-window.c:4598
+msgid "Move across visited pages"
+msgstr ""
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4628
+msgid "Previous"
+msgstr "Aloha"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4633
+msgid "Next"
+msgstr "Manaraka"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4637
+msgid "Zoom In"
+msgstr "Manalehibe"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4641
+msgid "Zoom Out"
+msgstr "Manakely"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4649
+msgid "Fit Width"
+msgstr "Mameno ny indra"
+
+#: ../shell/ev-window.c:4824
+#, fuzzy, c-format
+msgid "Invalid URI: “%s”"
+msgstr "Karazana MIME tsy raisina an-tànana: “%s”"
+
+#: ../shell/ev-window.c:4827
+#, c-format
+msgid "Unsupported URI: “%s”"
+msgstr ""
+
+#: ../shell/ev-window.c:4837
+#, fuzzy
+msgid "Unable to open external link"
+msgstr "Tsy nahasokatra ilay mpanaraka"
+
+#: ../shell/ev-window.c:5006
+#, fuzzy
+msgid "The image could not be saved."
+msgstr "Tsy nety noraiketina ilay mpanaraka."
+
+#: ../shell/ev-window.c:5041
+#, fuzzy
+msgid "Save Image"
+msgstr "Sary"
+
+#: ../shell/ev-window.c:5097
+msgid "Unable to open attachment"
+msgstr "Tsy nahasokatra ilay mpanaraka"
+
+#: ../shell/ev-window.c:5150
+msgid "The attachment could not be saved."
+msgstr "Tsy nety noraiketina ilay mpanaraka."
+
+#: ../shell/ev-window.c:5202
+#, fuzzy
+msgid "Save Attachment"
+msgstr "Mpanaraka"
+
+#: ../shell/ev-window-title.c:139
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - Mila teny fanalahidy"
+
+#: ../shell/main.c:60
+msgid "The page of the document to display."
+msgstr "Ny pejin'ilay tahirin-kevitra haseho."
+
+#: ../shell/main.c:60
+msgid "PAGE"
+msgstr "PEJY"
+
+#: ../shell/main.c:61
+msgid "Run evince in fullscreen mode"
+msgstr "Alefa mameno efijery ny evince"
+
+#: ../shell/main.c:62
+msgid "Run evince in presentation mode"
+msgstr "Alefa toa fampisehoana ny evince"
+
+#: ../shell/main.c:63
+msgid "Run evince as a previewer"
+msgstr "Alefa toa fitaovam-pizahana ny evince"
+
+#: ../shell/main.c:64
+#, fuzzy
+msgid "The word or phrase to find in the document"
+msgstr "Mikaroka teny na andian-teny ao anatin'ilay tahirin-kevitra"
+
+#: ../shell/main.c:64
+msgid "STRING"
+msgstr ""
+
+#: ../shell/main.c:67
+msgid "[FILE...]"
+msgstr "[RAKITRA...]"
+
+#: ../shell/main.c:327
+msgid "MATE Document Viewer"
+msgstr "Mpizaha tahirin-kevitry ny MATE"
+
+#: ../shell/main.c:387
+msgid "Evince Document Viewer"
+msgstr "Evince mpizaha tahirin-kevitra"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Misy safidy bolenina; ny marina mamela ny fanaovan-tsary madinika ary ny "
+"diso mampitsahatra ny famoronana sary madinika vaovao"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Mandefa ny fanaovan-tsary madinika ho an'ny tahirin-kevitra PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Baikon'ny fanaovana sary madinika ho an'ny tahirin-kevitra PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Baiko mitombina miaraka amin'ny tondriky ny mpanao sary madinika ho an'ny "
+"tahirin-kevitra PDF. Vakio ny loharanon-kevitry ny caja thumbnailer "
+"hahalalanao azy bebe kokoa."
+
+#~ msgid "Open “%s”"
+#~ msgstr "Sokafy ny “%s”"
+
+#~ msgid "Empty"
+#~ msgstr "Foana"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "No document loaded."
+#~ msgstr "Tsy misy tahirin-kevitra miseho."
+
+#~ msgid "Broken pipe."
+#~ msgstr "Fantsona simba."
+
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "Nisy olana teo am-panaborahana ny rakitra “%s”:\n"
+
+#~ msgid "File is not readable."
+#~ msgstr "Tsy mety vakiana ilay rakitra."
+
+#~ msgid "Document loaded."
+#~ msgstr "Azo ilay tehirin-kevitra."
diff --git a/po/mk.po b/po/mk.po
new file mode 100644
index 00000000..d9c644ad
--- /dev/null
+++ b/po/mk.po
@@ -0,0 +1,1331 @@
+# translation of mk.po to Macedonian
+# translation of evince.HEAD.po to
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# Арангел Ангов <[email protected]>, 2005.
+# Arangel Angov <[email protected]>, 2006, 2007, 2008.
+# Jovan Naumovski <[email protected]>, 2006, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: mk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-09-01 20:06+0000\n"
+"PO-Revision-Date: 2008-09-14 10:57+0200\n"
+"Last-Translator: Arangel Angov <[email protected]>\n"
+"Language-Team: Macedonian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural= n==1 || n%10==1 ? 0 : 1\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:169
+#, c-format
+msgid "File corrupted."
+msgstr "Датотеката е расипана."
+
+#: ../backend/comics/comics-document.c:203
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Не се пронајдени слики во архивата %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Стрипови"
+
+#: ../backend/djvu/djvu-document.c:247
+#, c-format
+msgid ""
+"The document is composed by several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+"Документот е составен од неколку датотеки. На една или повеќе од овие "
+"датотеките не може да им се пристапи."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Djvu документи"
+
+#: ../backend/dvi/dvi-document.c:94
+#, c-format
+msgid "File not available"
+msgstr "Датотеката не е достапна"
+
+#: ../backend/dvi/dvi-document.c:109
+#, c-format
+msgid "DVI document has incorrect format"
+msgstr "DVI документот е во неправилен формат"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI документи"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:688
+msgid "Yes"
+msgstr "Да"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:691
+msgid "No"
+msgstr "Не"
+
+#: ../backend/pdf/ev-poppler.cc:765
+msgid "Type 1"
+msgstr "Тип 1"
+
+#: ../backend/pdf/ev-poppler.cc:767
+msgid "Type 1C"
+msgstr "Тип 1Ц"
+
+#: ../backend/pdf/ev-poppler.cc:769
+msgid "Type 3"
+msgstr "Тип 3"
+
+#: ../backend/pdf/ev-poppler.cc:771
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:773
+msgid "Type 1 (CID)"
+msgstr "Тип 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:775
+msgid "Type 1C (CID)"
+msgstr "Тип 1Ц (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:777
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Unknown font type"
+msgstr "Непознат тип на фонт"
+
+#: ../backend/pdf/ev-poppler.cc:805
+msgid "No name"
+msgstr "Нема име"
+
+#: ../backend/pdf/ev-poppler.cc:813
+msgid "Embedded subset"
+msgstr "Вградено поставување"
+
+#: ../backend/pdf/ev-poppler.cc:815
+msgid "Embedded"
+msgstr "Вградено"
+
+#: ../backend/pdf/ev-poppler.cc:817
+msgid "Not embedded"
+msgstr "Надворешно"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF документи"
+
+#: ../backend/impress/impress-document.c:297
+#, c-format
+msgid "Remote files aren't supported"
+msgstr "Не се поддржани далечни датотеки"
+
+#: ../backend/impress/impress-document.c:308
+#, c-format
+msgid "Invalid document"
+msgstr "Невалиден документ"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress слајдови"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Нема грешка"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Нема доволно меморија"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "Не можам да најдам zip потпис"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "Невалидна zip датотека"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr "zip Архивите од повеќе датотеки не се поддржани"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Не можам да ја отворам датотеката"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Не можам да читам податоци од датотеката"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "Не можам да најдам датотека во zip архивата"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Непозната грешка"
+
+#: ../backend/ps/ev-spectre.c:113
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Не можам да го отворам документот “%s”"
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Не можам да го зачувам документот “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript документи"
+
+#: ../libdocument/ev-attachment.c:303 ../libdocument/ev-attachment.c:324
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Не можам да го зачувам приврзокот “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:360
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Не можам да го отворам приврзокот “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:393
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Не можам да го отворам приврзокот “%s”"
+
+#: ../libdocument/ev-document-factory.c:181
+#: ../libdocument/ev-document-factory.c:302
+#, c-format
+msgid "Unknown MIME Type"
+msgstr "Непознат MIME тип"
+
+#: ../libdocument/ev-document-factory.c:201
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Типот на датотека %s (%s) не е поддржан"
+
+#: ../libdocument/ev-document-factory.c:357
+msgid "All Documents"
+msgstr "Сите документи"
+
+#: ../libdocument/ev-document-factory.c:389
+msgid "All Files"
+msgstr "Сите датотеки"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:439
+msgid "Co_nnect"
+msgstr "Врз_и се"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:483
+msgid "Connect _anonymously"
+msgstr "Врзи се _анонимно"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:492
+msgid "Connect as u_ser:"
+msgstr "Врзи се како к_орисник"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:529
+msgid "_Username:"
+msgstr "_Корисничко име:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:533
+msgid "_Domain:"
+msgstr "_Домен:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:538
+#: ../data/evince-password.glade.h:4
+msgid "_Password:"
+msgstr "_Лозинка:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:553
+msgid "_Forget password immediately"
+msgstr "_Заборави ја лозинката веднаш"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:561
+msgid "_Remember password until you logout"
+msgstr "_Запамти ја лозинката за оваа сесија"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:569
+msgid "_Remember forever"
+msgstr "_Заборави засекогаш"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:139
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Датотеката не е валидна .desktop датотека"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:161
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Непозната верзија на desktop датотеката %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:872
+#, c-format
+msgid "Starting %s"
+msgstr "Подигнувам %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1006
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Апликацијата не прифаќа документи на командната линија"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1074
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Непозната опција за лансирање: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1276
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Не можам да пренесеам URl документи во desktop записи чиј што Тип=Врска"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1295
+#, c-format
+msgid "Not a launchable item"
+msgstr "Предметот не може да се лансира"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:185
+msgid "Disable connection to session manager"
+msgstr "Исклучи ја врската до менаџерот за сесии"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:188
+msgid "Specify file containing saved configuration"
+msgstr "Одредете ја датотеката со зачуваната конфигурација"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:188
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:191
+msgid "Specify session management ID"
+msgstr "Одредете ид. за менаџмент на сесиите"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:191
+msgid "ID"
+msgstr "Ид."
+
+#: ../cut-n-paste/smclient/eggsmclient.c:227
+msgid "Session Management Options"
+msgstr "Опции за менаџментот со сесии"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Show Session Management options"
+msgstr "Покажи опции за менаџмент со сесиите"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:938
+#, c-format
+msgid "Show “_%s”"
+msgstr "Прикажи “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Move on Toolbar"
+msgstr "_Помести на лентата со алатки"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Move the selected item on the toolbar"
+msgstr "Помести го избраниот предмет на лентата со алатки"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1403
+msgid "_Remove from Toolbar"
+msgstr "Отстрани од лентата со алатки"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1404
+msgid "Remove the selected item from the toolbar"
+msgstr "Отстрани го избраниот предмет од лентата со алатки"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1405
+msgid "_Delete Toolbar"
+msgstr "Отстрани лента со алатки"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1406
+msgid "Remove the selected toolbar"
+msgstr "Отстрани ја избраната лента со алатки"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:441
+msgid "Separator"
+msgstr "Разделувач"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+msgid "Running in presentation mode"
+msgstr "Извршувам во режим на презентација"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:4719
+msgid "Best Fit"
+msgstr "Најдобар изглед"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Вклопи се во широчината"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:3751
+#: ../shell/ev-window-title.c:132
+#, c-format
+msgid "Document Viewer"
+msgstr "Прегледувач за документи"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "Види повеќе документи"
+
+#: ../data/evince-password.glade.h:1
+msgid "Password Entry"
+msgstr "Внес на лозинка"
+
+#: ../data/evince-password.glade.h:2
+msgid "Remember password for this session"
+msgstr "Запамeти ја лозинката за оваа сесија"
+
+#: ../data/evince-password.glade.h:3
+msgid "Save password in keyring"
+msgstr "Зачувај ја лозинката во привезокот"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>Автор:</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>Креирано:</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>Креатор:</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>Формат:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b>Клучни зборови:</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>Променето на:</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b> Број на страници:</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr "<b>Оптимизирано:</b>"
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Paper Size:</b>"
+msgstr "<b>Големина на хартија:</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Producer:</b>"
+msgstr "<b>Продуцент:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Security:</b>"
+msgstr "<b>Безбедност:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Subject:</b>"
+msgstr "<b>Предмет:</b>"
+
+#: ../data/evince-properties.glade.h:13
+msgid "<b>Title:</b>"
+msgstr "<b>Наслов:</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Отстрани ги рестрикциите на документот"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Отстрани ги рестрикциите на документите, како рестрикциите за копирање или "
+"печатење"
+
+#: ../properties/ev-properties-main.c:114
+msgid "Document"
+msgstr "Документ"
+
+#: ../properties/ev-properties-view.c:180
+msgid "None"
+msgstr "Ништо"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:205
+#: ../properties/ev-properties-view.c:367
+msgid "default:mm"
+msgstr "default:mm"
+
+#. Metric measurement (millimeters)
+#: ../properties/ev-properties-view.c:249
+#: ../properties/ev-properties-view.c:404
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:253
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f инч"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:277
+#: ../properties/ev-properties-view.c:415
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Вертикално (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:284
+#: ../properties/ev-properties-view.c:422
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Хоризонтално (%s)"
+
+#. Imperial measurement (inches)
+#: ../properties/ev-properties-view.c:399
+#, c-format
+msgid "%.2f x %.2f in"
+msgstr "%.2f x %.2f in"
+
+#: ../shell/eggfindbar.c:146
+msgid "Search string"
+msgstr "Стринг за пребарување"
+
+#: ../shell/eggfindbar.c:147
+msgid "The name of the string to be found"
+msgstr "Името на стрингот кој што треба да биде најден"
+
+#: ../shell/eggfindbar.c:160
+msgid "Case sensitive"
+msgstr "Пази на големи и мали букви"
+
+#: ../shell/eggfindbar.c:161
+msgid "TRUE for a case sensitive search"
+msgstr "Штиклирано за пребарување само на мали и големи букви"
+
+#: ../shell/eggfindbar.c:168
+msgid "Highlight color"
+msgstr "Обележана боја"
+
+#: ../shell/eggfindbar.c:169
+msgid "Color of highlight for all matches"
+msgstr "Боја за облежување на сите совпаѓања"
+
+#: ../shell/eggfindbar.c:175
+msgid "Current color"
+msgstr "Тековна боја"
+
+#: ../shell/eggfindbar.c:176
+msgid "Color of highlight for the current match"
+msgstr "Боја за обележување на тековното совпаѓање"
+
+#: ../shell/eggfindbar.c:309
+msgid "Find:"
+msgstr "Најди:"
+
+#: ../shell/eggfindbar.c:318
+msgid "Find Previous"
+msgstr "Најди претходно"
+
+#: ../shell/eggfindbar.c:322 ../shell/eggfindbar.c:325
+msgid "Find previous occurrence of the search string"
+msgstr "Најди го претходното појавување на низата од букви за барање"
+
+#: ../shell/eggfindbar.c:331
+msgid "Find Next"
+msgstr "Пронајди следно"
+
+#: ../shell/eggfindbar.c:335 ../shell/eggfindbar.c:338
+msgid "Find next occurrence of the search string"
+msgstr "Најди го следното појавување на низата од букви за барање"
+
+#: ../shell/eggfindbar.c:347
+msgid "C_ase Sensitive"
+msgstr "Г_олеми и мали букви"
+
+#: ../shell/eggfindbar.c:351 ../shell/eggfindbar.c:354
+msgid "Toggle case sensitive search"
+msgstr "Пушти пребарување со разликување на мали-големи букви"
+
+#: ../shell/ev-jobs.c:962
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "Не успеав да ја креирам датотеката “%s”: %s"
+
+#: ../shell/ev-open-recent-action.c:73
+msgid "Open a recently used document"
+msgstr "Отвори скорешен документ"
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d од %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "од %d"
+
+#: ../shell/ev-password.c:88
+msgid "Password required"
+msgstr "Потребна е лозинка"
+
+#: ../shell/ev-password.c:89
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"Документот “%s” е заклучен и бара лозинка да внесете лозинка пред да можете "
+"да го отворите."
+
+#: ../shell/ev-password.c:154
+msgid "Enter password"
+msgstr "Внесете лозинка"
+
+#: ../shell/ev-password.c:260
+#, c-format
+msgid "Password for document %s"
+msgstr "Лозинка за документот %s"
+
+#: ../shell/ev-password.c:347
+msgid "Incorrect password"
+msgstr "Неточна лозинка"
+
+#: ../shell/ev-password-view.c:112
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Овој документ е заклучен и може да биде прочитан само со внесување на "
+"правата лозинка."
+
+#: ../shell/ev-password-view.c:121
+msgid "_Unlock Document"
+msgstr "_Отклучи документ"
+
+#: ../shell/ev-properties-dialog.c:57
+msgid "Properties"
+msgstr "Својства"
+
+#: ../shell/ev-properties-dialog.c:90
+msgid "General"
+msgstr "Општо"
+
+#: ../shell/ev-properties-dialog.c:100
+msgid "Fonts"
+msgstr "Фонтови"
+
+#: ../shell/ev-properties-fonts.c:139
+msgid "Font"
+msgstr "Фонт"
+
+#: ../shell/ev-properties-fonts.c:150
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "Собирам информации за фонтови... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:690
+msgid "Attachments"
+msgstr "Приврзоци"
+
+#: ../shell/ev-sidebar-links.c:267 ../shell/ev-view.c:3638
+msgid "Loading..."
+msgstr "Вчитувам..."
+
+#: ../shell/ev-sidebar-links.c:340
+msgid "Print..."
+msgstr "Отпечати..."
+
+#: ../shell/ev-sidebar-links.c:720
+msgid "Index"
+msgstr "Индекс"
+
+#: ../shell/ev-sidebar-thumbnails.c:731
+msgid "Thumbnails"
+msgstr "Сликички"
+
+#: ../shell/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Лизгај нагоре"
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Лизгај надолу"
+
+#: ../shell/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Лизгачки поглед за нагоре"
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Лизгачки поглед за надолу"
+
+#: ../shell/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Преглед на документ"
+
+#: ../shell/ev-view.c:1437
+msgid "Go to first page"
+msgstr "Оди на првата страница"
+
+#: ../shell/ev-view.c:1439
+msgid "Go to previous page"
+msgstr "Оди на претходната страница"
+
+#: ../shell/ev-view.c:1441
+msgid "Go to next page"
+msgstr "Оди на следната страница"
+
+#: ../shell/ev-view.c:1443
+msgid "Go to last page"
+msgstr "Оди на последната страница"
+
+#: ../shell/ev-view.c:1445
+msgid "Go to page"
+msgstr "Оди на страна"
+
+#: ../shell/ev-view.c:1447
+msgid "Find"
+msgstr "Најди"
+
+#: ../shell/ev-view.c:1475
+#, c-format
+msgid "Go to page %s"
+msgstr "Оди на страна %s"
+
+#: ../shell/ev-view.c:1481
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Оди до %s во датотеката “%s”"
+
+#: ../shell/ev-view.c:1484
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Оди на страна “%s”"
+
+#: ../shell/ev-view.c:1492
+#, c-format
+msgid "Launch %s"
+msgstr "Пушти %s"
+
+#: ../shell/ev-view.c:2444
+msgid "End of presentation. Press Escape to exit."
+msgstr "Крај на презентацијата. Притиснете Escape за излез."
+
+#: ../shell/ev-view.c:3368
+msgid "Jump to page:"
+msgstr "Оди оди до страница:"
+
+#: ../shell/ev-window.c:790
+#, c-format
+msgid "Page %s - %s"
+msgstr "Страница %s - %s"
+
+#: ../shell/ev-window.c:792
+#, c-format
+msgid "Page %s"
+msgstr "Страница %s"
+
+#: ../shell/ev-window.c:1201
+msgid "The document contains no pages"
+msgstr "Документот не содржи страници"
+
+#: ../shell/ev-window.c:1425 ../shell/ev-window.c:1500
+msgid "Unable to open document"
+msgstr "Не можам да го отворам документот"
+
+#: ../shell/ev-window.c:1697
+msgid "Open Document"
+msgstr "Отвори документ"
+
+#: ../shell/ev-window.c:1758
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "Не можам да креирам симболичка врска “%s”: %s"
+
+#: ../shell/ev-window.c:1787
+msgid "Cannot open a copy."
+msgstr "Не можам да отворам копија."
+
+#: ../shell/ev-window.c:2031 ../shell/ev-window.c:2081
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Оваа датотека не може да се зачува како “%s”."
+
+#: ../shell/ev-window.c:2126
+msgid "Save a Copy"
+msgstr "Зачувај копија"
+
+#: ../shell/ev-window.c:2247 ../shell/ev-window.c:3452
+msgid "Failed to print document"
+msgstr "Не можам да го испечатам документот"
+
+#: ../shell/ev-window.c:2412
+msgid "Printing is not supported on this printer."
+msgstr "Печатењето не е поддржано на овој печатач."
+
+#: ../shell/ev-window.c:2538 ../shell/ev-window.c:4511
+msgid "Print"
+msgstr "Отпечати"
+
+#: ../shell/ev-window.c:3205
+msgid "Toolbar Editor"
+msgstr "Уредувач на лентата за алатки"
+
+#: ../shell/ev-window.c:3747
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Прегледувач на документи.\n"
+"Користи poppler %s (%s)"
+
+#: ../shell/ev-window.c:3775
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince е слободен софтвер; Можете да го редистрибуирате и/или менуватeпод "
+"условите објавени во „GNU General Public License“ објавена од страна "
+"наФондацијата за слободен софтвер; без разлика на верзијата.\n"
+
+#: ../shell/ev-window.c:3779
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince(Evince) се дистрибуира со надеж дека ќе биде корисен, но без БИЛО "
+"КАКВИ ГАРАНЦИИ. За повеќе погледнете ја општата јавна ГНУ лиценца.\n"
+
+#: ../shell/ev-window.c:3783
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Заедно со Evince(Evince) треба да добиете и копија од општата и јавнаГНУ "
+"лиценца; доколку ја нема лиценцата пишете и на Фондацијата заслободен "
+"софтвер на следнава адреса: 59 Temple Place, Suite 330, Boston, MA 02111-"
+"1307 USA\n"
+
+#: ../shell/ev-window.c:3807
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:3810
+msgid "© 1996-2007 The Evince authors"
+msgstr "© 1996-2007 Авторите на Evince"
+
+#: ../shell/ev-window.c:3816
+msgid "translator-credits"
+msgstr ""
+"Арангел Ангов ([email protected])\n"
+"\n"
+"Слободен Софтвер Македонија\n"
+"http://www.slobodensoftver.org.mk"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4032
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d пронајден на оваа страна"
+msgstr[1] "%d пронајдени на оваа страна"
+msgstr[2] "%d пронајдени на оваа страна"
+
+#: ../shell/ev-window.c:4040
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% останати за пребарување"
+
+#: ../shell/ev-window.c:4423
+msgid "_File"
+msgstr "_Датотека"
+
+#: ../shell/ev-window.c:4424
+msgid "_Edit"
+msgstr "_Уреди"
+
+#: ../shell/ev-window.c:4425
+msgid "_View"
+msgstr "_Поглед"
+
+#: ../shell/ev-window.c:4426
+msgid "_Go"
+msgstr "_Оди"
+
+#: ../shell/ev-window.c:4427
+msgid "_Help"
+msgstr "_Помош"
+
+#. File menu
+#: ../shell/ev-window.c:4430 ../shell/ev-window.c:4609
+#: ../shell/ev-window.c:4681
+msgid "_Open..."
+msgstr "_Отвори..."
+
+#: ../shell/ev-window.c:4431 ../shell/ev-window.c:4682
+msgid "Open an existing document"
+msgstr "Отвори постоечки документ"
+
+#: ../shell/ev-window.c:4433
+msgid "Op_en a Copy"
+msgstr "От_вори копија"
+
+#: ../shell/ev-window.c:4434
+msgid "Open a copy of the current document in a new window"
+msgstr "Отвори копија од тековниот документ во нов прозорец"
+
+#: ../shell/ev-window.c:4436 ../shell/ev-window.c:4611
+msgid "_Save a Copy..."
+msgstr "_Зачувај копија..."
+
+#: ../shell/ev-window.c:4437
+msgid "Save a copy of the current document"
+msgstr "Зачувај копија од тековниот документ"
+
+#: ../shell/ev-window.c:4439
+msgid "Print Set_up..."
+msgstr "Пос_тавување за печатење..."
+
+#: ../shell/ev-window.c:4440
+msgid "Setup the page settings for printing"
+msgstr "Поставете ја страницата за печатење"
+
+#: ../shell/ev-window.c:4442
+msgid "_Print..."
+msgstr "_Отпечати..."
+
+#: ../shell/ev-window.c:4443 ../shell/ev-window.c:4512
+msgid "Print this document"
+msgstr "Отпечати го овој документ"
+
+#: ../shell/ev-window.c:4445
+msgid "P_roperties"
+msgstr "С_војства"
+
+#: ../shell/ev-window.c:4453
+msgid "Select _All"
+msgstr "Избери _сѐ"
+
+#: ../shell/ev-window.c:4455
+msgid "_Find..."
+msgstr "_Најди..."
+
+#: ../shell/ev-window.c:4456
+msgid "Find a word or phrase in the document"
+msgstr "Барај збор или фраза во документот"
+
+#: ../shell/ev-window.c:4458
+msgid "Find Ne_xt"
+msgstr "Најди сл_едно"
+
+#: ../shell/ev-window.c:4460
+msgid "Find Pre_vious"
+msgstr "Најди пре_тходно"
+
+#: ../shell/ev-window.c:4462
+msgid "T_oolbar"
+msgstr "Л_ента со алатки"
+
+#: ../shell/ev-window.c:4464
+msgid "Rotate _Left"
+msgstr "Ротирај _лево"
+
+#: ../shell/ev-window.c:4466
+msgid "Rotate _Right"
+msgstr "Ротирај _десно"
+
+#: ../shell/ev-window.c:4471
+msgid "Enlarge the document"
+msgstr "Зголеми го документот"
+
+#: ../shell/ev-window.c:4474
+msgid "Shrink the document"
+msgstr "Намали го документот"
+
+#: ../shell/ev-window.c:4476
+msgid "_Reload"
+msgstr "_Освежи"
+
+#: ../shell/ev-window.c:4477
+msgid "Reload the document"
+msgstr "Освежи го документот"
+
+#: ../shell/ev-window.c:4480
+msgid "Auto_scroll"
+msgstr "Авто_лизгање"
+
+#. Go menu
+#: ../shell/ev-window.c:4484
+msgid "_Previous Page"
+msgstr "_Претходна страница"
+
+#: ../shell/ev-window.c:4485
+msgid "Go to the previous page"
+msgstr "Оди на претходната страна"
+
+#: ../shell/ev-window.c:4487
+msgid "_Next Page"
+msgstr "_Следна страница"
+
+#: ../shell/ev-window.c:4488
+msgid "Go to the next page"
+msgstr "Оди на следната страна"
+
+#: ../shell/ev-window.c:4490
+msgid "_First Page"
+msgstr "_Прва страница"
+
+#: ../shell/ev-window.c:4491
+msgid "Go to the first page"
+msgstr "Оди на првата страна"
+
+#: ../shell/ev-window.c:4493
+msgid "_Last Page"
+msgstr "По_следна страница"
+
+#: ../shell/ev-window.c:4494
+msgid "Go to the last page"
+msgstr "Оди на последната страна"
+
+#. Help menu
+#: ../shell/ev-window.c:4498
+msgid "_Contents"
+msgstr "_Содржина"
+
+#: ../shell/ev-window.c:4501
+msgid "_About"
+msgstr "_За"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4505
+msgid "Leave Fullscreen"
+msgstr "Напушти цел екран"
+
+#: ../shell/ev-window.c:4506
+msgid "Leave fullscreen mode"
+msgstr "Напушти режим на цел екран"
+
+#: ../shell/ev-window.c:4508
+msgid "Start Presentation"
+msgstr "Пушти презентација"
+
+#: ../shell/ev-window.c:4509
+msgid "Start a presentation"
+msgstr "Пушти презентација"
+
+#. View Menu
+#: ../shell/ev-window.c:4565
+msgid "_Toolbar"
+msgstr "_Лента со алатки"
+
+#: ../shell/ev-window.c:4566
+msgid "Show or hide the toolbar"
+msgstr "Покажи или скриј ја лентата со алатки"
+
+#: ../shell/ev-window.c:4568
+msgid "Side _Pane"
+msgstr "Странична _површина"
+
+#: ../shell/ev-window.c:4569
+msgid "Show or hide the side pane"
+msgstr "Покажи ја или скриј ја страничната површина"
+
+#: ../shell/ev-window.c:4571
+msgid "_Continuous"
+msgstr "_Во продолжение"
+
+#: ../shell/ev-window.c:4572
+msgid "Show the entire document"
+msgstr "Покажи го целиот документ"
+
+#: ../shell/ev-window.c:4574
+msgid "_Dual"
+msgstr "_Двојно"
+
+#: ../shell/ev-window.c:4575
+msgid "Show two pages at once"
+msgstr "Покажи две страници одеднаш"
+
+#: ../shell/ev-window.c:4577
+msgid "_Fullscreen"
+msgstr "_Цел екран"
+
+#: ../shell/ev-window.c:4578
+msgid "Expand the window to fill the screen"
+msgstr "Прошири го прозорецот на цел екран"
+
+#: ../shell/ev-window.c:4580
+msgid "Pre_sentation"
+msgstr "Пре_зентација"
+
+#: ../shell/ev-window.c:4581
+msgid "Run document as a presentation"
+msgstr "Пушти го документот како презентација"
+
+#: ../shell/ev-window.c:4583
+msgid "_Best Fit"
+msgstr "_Најдобар изглед"
+
+#: ../shell/ev-window.c:4584
+msgid "Make the current document fill the window"
+msgstr "Тековниот документ да го исполни прозорецот"
+
+#: ../shell/ev-window.c:4586
+msgid "Fit Page _Width"
+msgstr "Вклопи во _широчина"
+
+#: ../shell/ev-window.c:4587
+msgid "Make the current document fill the window width"
+msgstr "Тековниот документ да ја исполни широчината на прозорецот"
+
+#. Links
+#: ../shell/ev-window.c:4594
+msgid "_Open Link"
+msgstr "_Отвори врска"
+
+#: ../shell/ev-window.c:4596
+msgid "_Go To"
+msgstr "_Оди"
+
+#: ../shell/ev-window.c:4598
+msgid "Open in New _Window"
+msgstr "Отвори во нов _прозорец"
+
+#: ../shell/ev-window.c:4600
+msgid "_Copy Link Address"
+msgstr "_Копирај адреса на врската"
+
+#: ../shell/ev-window.c:4602
+msgid "_Save Image As..."
+msgstr "_Зачувај ја сликата како..."
+
+#: ../shell/ev-window.c:4604
+msgid "Copy _Image"
+msgstr "Копирај ја _сликата"
+
+#: ../shell/ev-window.c:4643
+msgid "Page"
+msgstr "Страница"
+
+#: ../shell/ev-window.c:4644
+msgid "Select Page"
+msgstr "Изберете страна"
+
+#: ../shell/ev-window.c:4655
+msgid "Zoom"
+msgstr "Зум"
+
+#: ../shell/ev-window.c:4657
+msgid "Adjust the zoom level"
+msgstr "Променете го нивото на зум"
+
+#: ../shell/ev-window.c:4667
+msgid "Navigation"
+msgstr "Навигација"
+
+#: ../shell/ev-window.c:4669
+msgid "Back"
+msgstr "Назаф"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:4672
+msgid "Move across visited pages"
+msgstr "Движете се низ посетените страници"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4702
+msgid "Previous"
+msgstr "Претходна"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4707
+msgid "Next"
+msgstr "Следна"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4711
+msgid "Zoom In"
+msgstr "Зумирај"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4715
+msgid "Zoom Out"
+msgstr "Одзумирај"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4723
+msgid "Fit Width"
+msgstr "Вклопи во широчина"
+
+#: ../shell/ev-window.c:4928
+msgid "Unable to open external link"
+msgstr "Не можам да ја отворам надворешната врска"
+
+#: ../shell/ev-window.c:5089
+msgid "Couldn't find appropriate format to save image"
+msgstr "Не можев да најдам соодветен формат за зачувување на сликата"
+
+#: ../shell/ev-window.c:5129
+msgid "The image could not be saved."
+msgstr "Сликата не може да се зачува."
+
+#: ../shell/ev-window.c:5161
+msgid "Save Image"
+msgstr "Зачувај ја сликата"
+
+#: ../shell/ev-window.c:5220
+msgid "Unable to open attachment"
+msgstr "Не можам да го отворам приврзокот"
+
+#: ../shell/ev-window.c:5272
+msgid "The attachment could not be saved."
+msgstr "Приврзокот не може да се зачува."
+
+#: ../shell/ev-window.c:5317
+msgid "Save Attachment"
+msgstr "Зачувај го додатокот"
+
+#: ../shell/ev-window-title.c:145
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - потребна е лозинка"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "По проширување"
+
+#: ../shell/main.c:52
+msgid "The page of the document to display."
+msgstr "Страната за приказ од документот."
+
+#: ../shell/main.c:52
+msgid "PAGE"
+msgstr "СТРАНА"
+
+#: ../shell/main.c:53
+msgid "Run evince in fullscreen mode"
+msgstr "Пушти на цел екран"
+
+#: ../shell/main.c:54
+msgid "Run evince in presentation mode"
+msgstr "Пушти како презентација"
+
+#: ../shell/main.c:55
+msgid "Run evince as a previewer"
+msgstr "Пушти како прегледувач"
+
+#: ../shell/main.c:56
+msgid "The word or phrase to find in the document"
+msgstr "Зборот или фразата за барање во документот"
+
+#: ../shell/main.c:56
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:59
+msgid "[FILE...]"
+msgstr "[ДАТОТЕКА...]"
+
+#: ../shell/main.c:325
+msgid "MATE Document Viewer"
+msgstr "Прегледувач за документи за MATE"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Достапни се boolean опции, штиклирано вклучува сликички, одштиклирано "
+"исклучува креирање на нови сликички"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Вклучи правење на сликичи од PDF документи"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Команда за сликички во PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Валидна командата плус аргументите за сликичките во PDF документ. Проверете "
+"ја документацијата на Наутилус за повеќе информации."
+
diff --git a/po/ml.po b/po/ml.po
new file mode 100644
index 00000000..a2d0ac72
--- /dev/null
+++ b/po/ml.po
@@ -0,0 +1,1638 @@
+# translation of ml.po to
+# translation of evince.master.ml.po to
+# translation of evince.HEAD.ml.po to
+# This file is distributed under the same license as the evince package.
+# Copyright (C) 2006-2008 evince'S COPYRIGHT HOLDER.
+# Ani Peter <[email protected]>, 2006, 2009.
+# Santhosh Thottingal <[email protected]> , 2008
+msgid ""
+msgstr ""
+"Project-Id-Version: ml\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-04-13 16:02+0000\n"
+"PO-Revision-Date: 2010-04-14 14:53+0530\n"
+"Last-Translator: \n"
+"Language-Team: <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "ചിത്രകഥാപുസ്തകം ഡീകംപ്രസ് ചെയ്യുന്നതിനുള്ള “%s” കമാന്‍ഡ് ലഭ്യമാക്കുന്നതില്‍ പിശക്: %s "
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "ചിത്രകഥാപുസ്തകം ഡീകംപ്രസ് ചെയ്യുന്നതില്‍ “%s” കമാന്‍ഡ് പരാജയപ്പെട്ടു."
+
+#: ../backend/comics/comics-document.c:183
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "“%s” കമാന്‍ഡ് ശരിയായി അവസാനിച്ചില്ല."
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "ഒരു കോമിക് പുസ്തക MIME തരത്തിലുള്ളതല്ല: %s"
+
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "ഇതരത്തിലുള്ള ചിത്രകഥാപുസ്തകം ഡീകംപ്രസ് ചെയ്യുവാനുള്ള കമാന്‍ഡ് ലഭ്യമാക്കുവാന്‍ സാധ്യമല്ല"
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "അപരിചിതമായ MIME രീതി"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "ഫയലിനു് തകരാറു സംഭവിച്ചിരിക്കുന്നു"
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "ആര്‍ക്കൈവില്‍ ഫയലുകള്‍ ലഭ്യമല്ല"
+
+#: ../backend/comics/comics-document.c:474
+#, c-format
+msgid "No images found in archive %s"
+msgstr "ആര്‍ക്കൈവ് %s-ല്‍ ഇമേജുകള്‍ ലഭ്യമല്ല"
+
+#: ../backend/comics/comics-document.c:718
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "“%s” വെട്ടി നീക്കുന്നതില്‍ പിശക്."
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr "പിശക് %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "ഹാസ്യ പുസ്തകങ്ങള്‍"
+
+#: ../backend/djvu/djvu-document.c:173
+#, fuzzy
+msgid "DjVu document has incorrect format"
+msgstr "DVI രേഖ തെറ്റായ രീതിയിലാണു്"
+
+#: ../backend/djvu/djvu-document.c:250
+#, fuzzy
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"രേഖ പലതരത്തിലുള്ള ഫയലുകള്‍ കൂടിചേര്‍ന്നതാകുന്നു. അതിലൊന്നോ അതിലധികമോ ഫയലുകളിലേക്ക് "
+"പ്രവേശിക്കുവാന്‍ സാധ്യമാകുന്നതല്ല."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+#, fuzzy
+msgid "DjVu Documents"
+msgstr "Djvu രേഖകള്‍"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI രേഖ തെറ്റായ രീതിയിലാണു്"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI രേഖകള്‍"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr ""
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "ഉവ്വു്"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "ഇല്ല"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "രീതി 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "രീതി 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "രീതി 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "ട്രൂടൈപ്പ്"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "ടൈപ്പ് 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "ടൈപ്പ് 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "ട്രൂടൈപ്പ് (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "അപരിചിതമായ രീതിയിലുളള അക്ഷരസഞ്ചയം"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "പേരില്ല"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "എംബഡ്ഡട് സബ്സെറ്റ്"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "എംബഡ്ഡട്"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "എംബഡ്ഡട് അല്ല"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "പി ഡി എഫ് രേഖകള്‍"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "അസാധുവായ രേഖ"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "ഇംപ്രസ്സ് സ്ലൈഡുകള്‍"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "പിശകില്ല"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "ആവശ്യത്തിനുള്ള മെമ്മറി ലഭ്യമല്ല"
+
+#: ../backend/impress/zip.c:59
+#, fuzzy
+msgid "Cannot find ZIP signature"
+msgstr "സിപ്പിനുള്ള ഒപ്പു് കണ്ടുപിടിക്കുവാന്‍ സാധ്യമായില്ല"
+
+#: ../backend/impress/zip.c:62
+#, fuzzy
+msgid "Invalid ZIP file"
+msgstr "തെറ്റായ സിപ്പ് ഫയല്‍"
+
+#: ../backend/impress/zip.c:65
+#, fuzzy
+msgid "Multi file ZIPs are not supported"
+msgstr "മള്‍ട്ടി ഫയല്‍ സിപ്പുകളെ പിന്തുണയ്ക്കുന്നില്ല"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "ഫയല്‍ തുറക്കുവാന്‍ സാധ്യമല്ല"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "ഫയലില്‍ നിന്നും ഡേറ്റാ ലഭ്യമാക്കുവാന്‍ സാധ്യമല്ല"
+
+#: ../backend/impress/zip.c:74
+#, fuzzy
+msgid "Cannot find file in the ZIP archive"
+msgstr "സിപ്പ് ശേഖരണത്തില്‍ ഫയല്‍ കണ്ടുപിടിക്കുവാന്‍ സാധ്യമല്ല"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "അപരിചിതമായ പിശകു്"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "“%s” രേഖ ലോഡ് ചെയ്യുന്നതില്‍ പരാജയപ്പെട്ടിരിക്കുന്നു"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "“%s” രേഖ സൂക്ഷിക്കുന്നതില്‍ പരാജയപ്പെട്ടിരിക്കുന്നു"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "പോസ്റ്റ് സ്ക്രിപ്റ്റ് രേഖകള്‍"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "അറ്റാച്ച്മെന്റ് “%s” സൂക്ഷിയ്ക്കുവാന്‍ സാധ്യമായില്ല: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "അറ്റാച്ച്മെന്റ് “%s” തുറക്കുവാന്‍ സാധ്യമായില്ല: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "അറ്റാച്ച്മെന്റ് “%s” തുറക്കുവാന്‍ സാധ്യമായില്ല"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "%s (%s) തരം ഫയലുകള്‍ പിന്തുണയ്ക്കുന്നില്ല"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "എല്ലാ രേഖകളും"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "എല്ലാ ഫയലുകളും"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, fuzzy, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "ഒരു താല്‍ക്കാലിക ഡയറക്ടറി ഉണ്ടാക്കുന്നതില്‍ പരാജയം."
+
+#: ../libdocument/ev-file-helpers.c:308
+#, fuzzy, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "ഒരു താല്‍ക്കാലിക ഡയറക്ടറി ഉണ്ടാക്കുന്നതില്‍ പരാജയം."
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "സാധുവായ ഒരു .desktop ഫയല്‍ അല്ല"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "തിരിച്ചറിയാനാകാത്ത പണിയിട ഫയല്‍ പതിപ്പു് '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s തുടങ്ങുന്നു"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "ആജ്ഞാമേഖലയില്‍ നിന്നും ഡൊക്യുമെന്റുകള്‍ പ്രയോഗം സ്വികരിക്കുന്നതല്ല"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "തിരിച്ചറിയാന്‍ കഴിയാത്ത തുടങ്ങുന്നതിനുള്ള ഐച്ഛികം: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "'Type=Link' പണിയിട അംഗത്തിലേക്കു് ഡോക്യുമെന്റ് URI അയക്കാന്‍ കഴിയില്ല"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "തുടങ്ങാന്‍ പറ്റാത്ത ഇനം"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "സെഷന്‍ മാനേജറിലേയ്ക്കുള്ള ബന്ധം നിര്‍ജ്ജീവമാക്കുക"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "സജ്ജീകരണങ്ങള്‍ സൂക്ഷിച്ച ഫയല്‍ പറയുക"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "സെഷന്‍ മാനേജ്മെന്റ് ഐഡി പറയുക"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "സെഷന്‍ മാനേജ്മെന്റ് ഉപാധികള്‍:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "സെഷന്‍ മാനേജ്മെന്റിനുള്ള ഉപാധികള്‍ കാണിയ്ക്കുക"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s” കാണിക്കുക"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "ടൂള്‍ ബാറില്‍ മാറ്റുക "
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "തെരഞ്ഞെടുത്ത വസ്തുവിനെ ടൂള്‍ ബാറില്‍ മാറ്റുക"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "ടൂള്‍ ബാറില്‍ നിന്നും _നീക്കം ചെയ്യുക"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "തെരഞ്ഞെടുത്ത വസ്തുവിനെ ടൂള്‍ ബാറില്‍ നിന്നും നീക്കം ചെയ്യുക"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "ടൂള്‍ ബാര്‍ _നീക്കം ചെയ്യുക"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "തെരഞ്ഞെടുത്ത ടൂള്‍ ബാര്‍ നീക്കം ചെയ്യുക"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "വിടവടയാളം"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+msgid "Running in presentation mode"
+msgstr "അവതരണ രീതിയില്‍ പ്രവര്‍ത്തിപ്പിക്കുന്നു"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5301
+msgid "Best Fit"
+msgstr "ഏറ്റവും അനുയോജ്യമായ വലുപ്പം"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "പേജിന്റെ വീതിയനുസരിച്ച് ജാലകത്തില്‍ താള്‍ പ്രദര്‍ശിപ്പിക്കുക"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4167
+#: ../shell/ev-window-title.c:149 ../shell/main.c:287
+#, c-format
+msgid "Document Viewer"
+msgstr "രേഖാദര്‍ശിനി"
+
+#: ../data/evince.desktop.in.in.h:2
+#, fuzzy
+msgid "View multi-page documents"
+msgstr "അനവധി പേജുകളുളള രേഖ കാണുക"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "രേഖയിലുള്ള പരിമിതികളെ മാറ്റി എഴുതുക"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"രേഖയിലുള്ള പരിമിതികളെ മാറ്റി എഴുതുക, പകര്‍ത്തുവാനോ പ്രിന്റ് ചെയ്യുവാനോ ഉള്ള പരിമിതി പോലെ."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "താല്‍ക്കാലിക ഫയല്‍ വെട്ടി നീക്കുക"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "സജ്ജീകരണ ഫയല്‍ പ്രിന്റ് ചെയ്യുക"
+
+#: ../previewer/ev-previewer.c:143 ../previewer/ev-previewer.c:177
+msgid "MATE Document Previewer"
+msgstr "ഗ്നോം രേഖാദര്‍ശിനി"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:2965
+msgid "Failed to print document"
+msgstr "രേഖ പ്രിന്‍റ് ചെയ്യുന്നതില്‍ പരാജയപ്പെട്ടു"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "തെരഞ്ഞെടുത്ത പ്രിന്റര്‍ '%s' ലഭ്യമല്ല"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5050
+msgid "_Previous Page"
+msgstr "തൊട്ട് മുമ്പുളള താള്‍ "
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5051
+msgid "Go to the previous page"
+msgstr "മുമ്പുള്ള താളിലേയ്ക്കു് പോകുക"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5053
+msgid "_Next Page"
+msgstr "_അടുത്ത താള്‍"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5054
+msgid "Go to the next page"
+msgstr "തൊട്ടടുത്ത താളിലേയ്ക്കു് പോകുക"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5037
+msgid "Enlarge the document"
+msgstr "രേഖ വലുതാക്കുക"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5040
+msgid "Shrink the document"
+msgstr "രേഖ ചെറുതാക്കുക"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "അച്ചടിയ്ക്കുക"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5008
+msgid "Print this document"
+msgstr "ഈ രേഖ അച്ചടിക്കുക"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5152
+msgid "_Best Fit"
+msgstr "_അനുയോജ്യമായ വലുപ്പം"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5153
+msgid "Make the current document fill the window"
+msgstr "നിലവിലുളള രേഖ സ്ക്രീന്റെ പരാമാവധി വലുപ്പത്തില്‍ ആക്കി ജാലകം നിറയ്ക്കുക"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5155
+msgid "Fit Page _Width"
+msgstr "പേജിന്റെ _വീതിയനുസരിച്ചു്"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5156
+msgid "Make the current document fill the window width"
+msgstr ""
+"നിലവിലുളള രേഖയുടെ വീതിയനുസരിച്ച് സ്ക്രീന്റെ പരാമാവധി വലുപ്പത്തില്‍ ആക്കി ജാലകം നിറയ്ക്കുക"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5223
+msgid "Page"
+msgstr "താള്‍"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5224
+msgid "Select Page"
+msgstr "താള്‍ തെരഞ്ഞെടുക്കുക"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "രേഖ"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "തലക്കെട്ട്:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "സ്ഥാനം:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "വിഷയം:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "രചയിതാവു്:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "കീ വേര്‍ഡുകള്‍:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "നിര്‍മ്മാതാവ്:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "സൃഷ്ടികര്‍ത്താവ്:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "സൃഷ്ടിച്ചത്:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "മാറ്റം വരുത്തിയത്:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "പേജുകളുടെ എണ്ണം:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "ഒപ്റ്റിമൈസ്ഡ്:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "രീതി:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "സുരക്ഷിതത്വം:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "പേപ്പറിന്റെ വ്യാപ്തി:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1868
+msgid "None"
+msgstr "ഒന്നുമില്ല"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:284
+#, fuzzy, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:288
+#, fuzzy, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f ഇഞ്ച്"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, ചിത്രം (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, ലാന്‍ഡ്സ്കെയിപ്പ് (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d-ന്റെ %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "%d-ന്റെ"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+#, fuzzy
+msgid "Preparing to print…"
+msgstr "പ്രിന്റ് ചെയ്യുന്നതിനായി പ്രിന്റ് ചെയ്യുക..."
+
+#: ../libview/ev-print-operation.c:336
+#, fuzzy
+msgid "Finishing…"
+msgstr "പൂര്‍ത്തിയാക്കുന്നു..."
+
+#: ../libview/ev-print-operation.c:338
+#, fuzzy, c-format
+msgid "Printing page %d of %d…"
+msgstr "താള്‍ %d പ്രിന്റ് ചെയ്യുന്നു, മൊത്തം %d..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "ഈ അച്ചടിയന്ത്രത്തില്‍ അച്ചടിയ്ക്കുവാന്‍ ഈ കമ്പ്യൂട്ടറില്‍ പിന്തുണ ലഭ്യമല്ല."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "തെറ്റായ താള്‍ സജ്ജീകരണം"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "മുന്നറിയിപ്പു്"
+
+#: ../libview/ev-print-operation.c:1229
+#, fuzzy
+msgid "Your print range selection does not include any pages"
+msgstr "നിങ്ങള്‍ തെരഞ്ഞെടുത്ത പ്രിന്റ് പരിധിയില്‍ ഒരു താളും ഉള്‍പ്പെടുന്നില്ല"
+
+#: ../libview/ev-print-operation.c:1863
+msgid "Page Scaling:"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1869
+msgid "Shrink to Printable Area"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1870
+msgid "Fit to Printable Area"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1873
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1885
+msgid "Auto Rotate and Center"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1888
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1893
+msgid "Select page size using document page size"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1895
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1977
+msgid "Page Handling"
+msgstr ""
+
+#: ../libview/ev-jobs.c:1438
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "%d താള്‍ പ്രിന്റ് ചെയ്യുന്നതില്‍ പരാജയം: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "കീബോര്‍ഡ് ഉപയോഗിച്ച് മുകളിലേക്ക് പോവുക"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "കീബോര്‍ഡ് ഉപയോഗിച്ച് താഴേക്ക് പോവുക"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "കാഴ്ച മുകളിലേക്ക് ആക്കുക"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "കാഴ്ച താഴേക്കാക്കുക"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "രേഖാ കാഴ്ച"
+
+#: ../libview/ev-view-presentation.c:668
+msgid "Jump to page:"
+msgstr "പോകേണ്ട താള്‍:"
+
+#: ../libview/ev-view-presentation.c:970
+#, fuzzy
+msgid "End of presentation. Click to exit."
+msgstr "അവതരണം അവസാനിച്ചിരിക്കുന്നു. പുറത്ത് കടക്കുന്നതിനായി Esc അമര്‍ത്തുക."
+
+#: ../libview/ev-view.c:1727
+msgid "Go to first page"
+msgstr "ആദ്യത്തെ താളിലേയ്ക്കു് പോകുക"
+
+#: ../libview/ev-view.c:1729
+msgid "Go to previous page"
+msgstr "മുമ്പുളള താളിലേയ്ക്കു് പോകുക"
+
+#: ../libview/ev-view.c:1731
+msgid "Go to next page"
+msgstr "അടുത്ത താളിലേയ്ക്കു് പോകുക"
+
+#: ../libview/ev-view.c:1733
+msgid "Go to last page"
+msgstr "അവസാന താളിലേയ്ക്കു് പോകുക"
+
+#: ../libview/ev-view.c:1735
+msgid "Go to page"
+msgstr "പോകേണ്ട താള്‍"
+
+#: ../libview/ev-view.c:1737
+msgid "Find"
+msgstr "കണ്ടുപിടിക്കുക"
+
+#: ../libview/ev-view.c:1765
+#, c-format
+msgid "Go to page %s"
+msgstr "%s താളിലേയ്ക്കു് പോകുക"
+
+#: ../libview/ev-view.c:1771
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "“%s” ഫയലിലുളള %s-ലേക്ക് പോകുക"
+
+#: ../libview/ev-view.c:1774
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” ഫയലിലേക്ക് പോകുക"
+
+#: ../libview/ev-view.c:1782
+#, c-format
+msgid "Launch %s"
+msgstr "%s പ്രദര്‍ശിപ്പിക്കുക"
+
+#: ../libview/ev-view.c:3926 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+#, fuzzy
+msgid "Loading…"
+msgstr "ലഭ്യമാക്കുന്നു..."
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "കണ്ടുപിടിക്കേണ്ടതു്:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5025
+msgid "Find Pre_vious"
+msgstr "_മുമ്പുള്ളതു് കണ്ടു പിടിക്കുക"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "തിരച്ചില്‍ നടത്തുന്ന വാചകം ഇതിന് മുന്പ് ഏത് വരിയില്‍ ഉളളത് എന്ന് കണ്ടുപിടിക്കുക"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5023
+msgid "Find Ne_xt"
+msgstr "_അടുത്തത് കണ്ടു പിടിക്കുക"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "തിരച്ചില്‍ നടത്തുന്ന വാചകം ഇതിന് ശേഷം ഏത് വരിയില്‍ ഉളളത് എന്ന് കണ്ടുപിടിക്കുക"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_കേസ് സെന്‍സിറ്റീവ്"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "കേസ് സെന്‍സിറ്റീവ് തിരച്ചില്‍ ടൊഗിള്‍ ചെയ്യുക"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s രേഖയ്ക്കുളള അടയാളവാക്കു്"
+
+#: ../shell/ev-convert-metadata.c:88
+#, fuzzy, c-format
+msgid "Converting %s"
+msgstr "%s തുടങ്ങുന്നു"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "ഏറ്റവും ഒടുവില്‍ ഉപയോഗിച്ച ഒരു രേഖ തുറക്കുക"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "രേഖ പൂട്ടിയ അവസ്ഥയിലാണു്. ഇത് ലഭ്യമാക്കുന്നതിനായി ശരിയായ അടയാളവാക്കു് നല്‍കേണ്ടതാണ്."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "രേഖയുടെ _പൂട്ട് തുറക്കുക"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "അടയാളവാക്കു് നല്‍കുക"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "അടയാളവാക്കു് ആവശ്യമുണ്ട്"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "രേഖ “%s” പൂട്ടിയിരിക്കുന്നു, അത് തുറക്കുന്നതിനായി ഒരു അടയാളവാക്കു് ആവശ്യമാണ്."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "അടയാള_വാക്കു്:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "അടയാളവാക്കു് ഉടന്‍ _മറക്കുക"
+
+#: ../shell/ev-password-view.c:380
+#, fuzzy
+msgid "Remember password until you _log out"
+msgstr "_പുറത്തുപോകുന്നതുവരെ അടയാളവാക്കു് ഓര്‍ത്തുവെയ്ക്കുക "
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "എക്കാലത്തേയ്ക്കുമായി _ഓര്‍ത്തുവെയ്ക്കുക"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "ഗുണഗണങ്ങള്‍"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "സാധാരണ"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "അക്ഷരസഞ്ചയങ്ങള്‍"
+
+#: ../shell/ev-properties-dialog.c:118
+#, fuzzy
+msgid "Document License"
+msgstr "രേഖാദര്‍ശിനി"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "അക്ഷരസഞ്ചയം"
+
+#: ../shell/ev-properties-fonts.c:162
+#, fuzzy, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "അക്ഷരസഞ്ചയം സംബന്ധിച്ചുളള വിവരങ്ങള്‍ ലഭ്യമാക്കുന്നു...%3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr ""
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "അറ്റാച്ച്മെന്റുകള്‍"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "ലേയറുകള്‍"
+
+#: ../shell/ev-sidebar-links.c:335
+#, fuzzy
+msgid "Print…"
+msgstr "അച്ചടിയ്ക്കുക"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "സൂചിക"
+
+#: ../shell/ev-sidebar-thumbnails.c:962
+msgid "Thumbnails"
+msgstr "നഖചിത്രങ്ങള്‍"
+
+#: ../shell/ev-window.c:836
+#, fuzzy, c-format
+msgid "Page %s — %s"
+msgstr "താള്‍ %s - %s"
+
+#: ../shell/ev-window.c:838
+#, c-format
+msgid "Page %s"
+msgstr "%s താള്‍"
+
+#: ../shell/ev-window.c:1282
+msgid "The document contains no pages"
+msgstr "ഈ രേഖയില്‍ താളുകളൊന്നും ഇല്ല"
+
+#: ../shell/ev-window.c:1285
+msgid "The document contains only empty pages"
+msgstr "ഈ രേഖയില്‍ ശൂന്യമായ താളുകള്‍ മാത്രമേയുള്ളൂ"
+
+#: ../shell/ev-window.c:1479 ../shell/ev-window.c:1645
+msgid "Unable to open document"
+msgstr "രേഖ തുറക്കുവാന്‍ സാധ്യമായില്ല"
+
+#: ../shell/ev-window.c:1616
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "“%s”-ല്‍ നിന്നും രേഖ ലഭ്യമാക്കുന്നു"
+
+#: ../shell/ev-window.c:1758 ../shell/ev-window.c:2035
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "രേഖ ഡൌണ്‍ലോട് ചെയ്യുന്നു (%d%%)"
+
+#: ../shell/ev-window.c:1791
+#, fuzzy
+msgid "Failed to load remote file."
+msgstr "രേഖ വീണ്ടും ലഭ്യമാക്കുന്നതില്‍ പരാജയപ്പെട്ടു."
+
+#: ../shell/ev-window.c:1979
+#, c-format
+msgid "Reloading document from %s"
+msgstr "%s-ല്‍ നിന്നും രേഖ വീണ്ടും എടുക്കുന്നു"
+
+#: ../shell/ev-window.c:2011
+msgid "Failed to reload document."
+msgstr "രേഖ വീണ്ടും ലഭ്യമാക്കുന്നതില്‍ പരാജയപ്പെട്ടു."
+
+#: ../shell/ev-window.c:2166
+msgid "Open Document"
+msgstr "രേഖ തുറക്കുക"
+
+#: ../shell/ev-window.c:2430
+#, c-format
+msgid "Saving document to %s"
+msgstr "%s-ലേക്കു് രേഖ സൂക്ഷിക്കുക"
+
+#: ../shell/ev-window.c:2433
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "%s-ലേക്കു് അറ്റാച്ച്മെന്റ് സൂക്ഷിക്കുക"
+
+#: ../shell/ev-window.c:2436
+#, c-format
+msgid "Saving image to %s"
+msgstr "%s-ലേക്കു് ചിത്രം സൂക്ഷിക്കുന്നു"
+
+#: ../shell/ev-window.c:2480 ../shell/ev-window.c:2580
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "“%s” ആയി ഫയല്‍ സൂക്ഷിയ്ക്കുവാന്‍ സാധ്യമായില്ല."
+
+#: ../shell/ev-window.c:2511
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "രേഖ അപ്‌ലോഡ് ചെയ്യുന്നു (%d%%)"
+
+#: ../shell/ev-window.c:2515
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "അറ്റാച്മെന്റ് അപ്‌ലോഡ് ചെയ്യുന്നു (%d%%)"
+
+#: ../shell/ev-window.c:2519
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "ചിത്രം അപ്‌ലോഡ് ചെയ്യുന്നു (%d%%)"
+
+#: ../shell/ev-window.c:2641
+msgid "Save a Copy"
+msgstr "ഒരു പകര്‍പ്പ് സൂക്ഷിയ്ക്കുക"
+
+#: ../shell/ev-window.c:2909
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "ക്യൂവില്‍ %d ജോലി ബാക്കിയുണ്ടു്"
+msgstr[1] "ക്യൂവില്‍ %d ജോലികള്‍ ബാക്കിയുണ്ടു്"
+
+#: ../shell/ev-window.c:3022
+#, c-format
+msgid "Printing job “%s”"
+msgstr "“%s” ജോലി പ്രിന്റ് ചെയ്യുന്നു"
+
+#: ../shell/ev-window.c:3234
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr ""
+"അടയ്ക്കുന്നതിനു് മുമ്പായി “%s” ജോലി പ്രിന്റ് ചെയ്യുന്നതു് പൂര്‍ത്തിയാകുന്നതു് വരെ കാത്തിരിക്കണമോ?"
+
+#: ../shell/ev-window.c:3237
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"%d പ്രിന്റ് ജോലികള്‍ സജീവമാണു്. അടയ്ക്കുന്നതിനു് മുമ്പായി പ്രിന്റ് പൂര്‍ത്തിയാക്കുന്നതിനായി "
+"കാത്തിരിക്കുക?"
+
+#: ../shell/ev-window.c:3249
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "നിങ്ങള്‍ ജാലകം അടച്ചാല്‍, ബാക്കിയുള്ള പ്രിന്റ് ചെയ്യുവാനുള്ള ജോലികള്‍ നടപ്പിലാകുന്നതല്ല."
+
+#: ../shell/ev-window.c:3253
+msgid "Cancel _print and Close"
+msgstr "_പ്രിന്റ് ചെയ്യുന്നതു് റദ്ദാക്കി അടയ്ക്കുക"
+
+#: ../shell/ev-window.c:3257
+msgid "Close _after Printing"
+msgstr "പ്രിന്റ് ചെയ്യുന്നതിനു് _ശേഷം അടയ്ക്കുക"
+
+#: ../shell/ev-window.c:3819
+msgid "Toolbar Editor"
+msgstr "ടൂള്‍ ബാര്‍ എഡിറ്റര്‍"
+
+#: ../shell/ev-window.c:3952
+msgid "There was an error displaying help"
+msgstr "സഹായം ലഭ്യമാക്കുന്നതില്‍ ഒരു പിശക്"
+
+#: ../shell/ev-window.c:4163
+#, fuzzy, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"രേഖ നിരീക്ഷക്കുന്നതിനുളള സംവിധാനം.\n"
+"പോപ്ളര്‍ %s (%s) ഉപയോഗിക്കുന്നു"
+
+#: ../shell/ev-window.c:4194
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"എവിന്‍സ് ഒരു ഒരു സ്വതന്ത്ര സോഫ്റ്റ്‌വെയര്‍ ആണു്; സ്വതന്ത്ര സോഫ്റ്റ്‌വെയര്‍ ഫൌണ്ടേഷന്‍ പ്രസിദ്ധീകരിച്ചഗ്നു "
+"ജനറല്‍ പബ്ലിക് ലൈസന്‍സ് അനുസരിച്ചു് നിങ്ങള്‍ക്കിതു് വീണ്ടും വിതരണം ചെയ്യാവുന്നതും "
+"മാറ്റങ്ങള്‍വരുത്താവുന്നതുമാണു്; ലൈസന്‍സിന്റെ ലക്കം 2 അല്ലെങ്കില്‍ (നിങ്ങള്‍ തെരഞ്ഞെടുക്കുന്ന) അതിനു് "
+"ശേഷമുള്ളഏതെങ്കിലും ലക്കമോ ഉപയോഗിക്കാം.\n"
+
+#: ../shell/ev-window.c:4198
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"എവിന്‍സ് നിങ്ങള്‍ക്കു് പ്രയോജനപ്പെടും എന്ന പ്രതീക്ഷയില്‍ വിതരണം ചെയ്യുന്നതാണു്,പക്ഷേ, ഇതിനു് ഒരു "
+"വാറണ്ടിയും ലഭ്യമല്ല; വ്യാപാരയോഗ്യതയോ ഒരു പ്രത്യേക കാര്യത്തിനു്ചേരുന്നതാണെന്നോ പരോക്ഷമായി "
+"ഉള്‍‌ക്കൊള്ളുന്ന വാറണ്ടി പോലും ഇല്ല. കൂടുതല്‍ വിവരങ്ങള്‍ക്കു്ഗ്നു ജനറല്‍ പബ്ലിക് ലൈസന്‍സ് കാണുക.\n"
+
+#: ../shell/ev-window.c:4202
+#, fuzzy
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Evince-നോടൊപ്പം നിങ്ങള്‍ക്ക് GNU General Public License-ന്റെ ഒരു പകര്‍പ്പും "
+"ലഭിച്ചിട്ടുണ്ടാവണം; ഇല്ലായെങ്കില്‍, ദയവായി താഴെ പറയുന്ന മേല്‍വിലാസത്തിലേക്ക് എഴുതുക: Free "
+"Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-"
+"1307 USA\n"
+
+#: ../shell/ev-window.c:4227
+msgid "Evince"
+msgstr "എവിന്‍സ്"
+
+#: ../shell/ev-window.c:4230
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 എവിന്‍സ് രചയിതാക്കള്‍"
+
+#: ../shell/ev-window.c:4236
+msgid "translator-credits"
+msgstr ""
+"അനി പീറ്റര്‍ <[email protected]>\n"
+"സന്തോഷ് തോട്ടിങ്ങല്‍ <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4506
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d ഈ താളില്‍ കണ്ടുകിട്ടിയിരിക്കുന്നു"
+msgstr[1] "%d ഈ താളില്‍ കണ്ടുകിട്ടിയിരിക്കുന്നു"
+
+#: ../shell/ev-window.c:4514
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% ബാക്കി തെരയുവാനുണ്ട്"
+
+#: ../shell/ev-window.c:4991
+msgid "_File"
+msgstr "_ഫയല്‍"
+
+#: ../shell/ev-window.c:4992
+msgid "_Edit"
+msgstr "_ചിട്ട"
+
+#: ../shell/ev-window.c:4993
+msgid "_View"
+msgstr "_കാഴ്ച"
+
+#: ../shell/ev-window.c:4994
+msgid "_Go"
+msgstr "_പോവുക"
+
+#: ../shell/ev-window.c:4995
+msgid "_Help"
+msgstr "_സഹായം"
+
+#. File menu
+#: ../shell/ev-window.c:4998 ../shell/ev-window.c:5263
+#, fuzzy
+msgid "_Open…"
+msgstr "_തുറക്കുക..."
+
+#: ../shell/ev-window.c:4999 ../shell/ev-window.c:5264
+msgid "Open an existing document"
+msgstr "നിലവിലുളള ഒരു രേഖ തുറക്കുക"
+
+#: ../shell/ev-window.c:5001
+msgid "Op_en a Copy"
+msgstr "ഒരു പകര്‍പ്പ് തു_റക്കുക"
+
+#: ../shell/ev-window.c:5002
+msgid "Open a copy of the current document in a new window"
+msgstr "നിലവിലുളള രേഖയുടെ ഒരു പകര്‍പ്പ് പുതിയ ജാലകത്തില്‍ തുറക്കുക"
+
+#: ../shell/ev-window.c:5004
+#, fuzzy
+msgid "_Save a Copy…"
+msgstr "ഒരു പകര്‍പ്പ് സൂക്ഷിയ്ക്കുക"
+
+#: ../shell/ev-window.c:5005
+msgid "Save a copy of the current document"
+msgstr "നിലവിലുളള രേഖയുടെ ഒരു പകര്‍പ്പ് സൂക്ഷിയ്ക്കുക"
+
+#: ../shell/ev-window.c:5007
+#, fuzzy
+msgid "_Print…"
+msgstr "അച്ചടിയ്ക്കുക"
+
+#: ../shell/ev-window.c:5010
+msgid "P_roperties"
+msgstr "ഗു_ണഗണങ്ങള്‍"
+
+#: ../shell/ev-window.c:5018
+msgid "Select _All"
+msgstr "_എല്ലാം തെരഞ്ഞെടുക്കുക "
+
+#: ../shell/ev-window.c:5020
+#, fuzzy
+msgid "_Find…"
+msgstr "കണ്ടുപിടിക്കുക"
+
+#: ../shell/ev-window.c:5021
+msgid "Find a word or phrase in the document"
+msgstr "രേഖയില്‍ ഒരു വാക്ക് ആല്ലങ്കില്‍ വാചകം കണ്ടെത്തുക"
+
+#: ../shell/ev-window.c:5027
+msgid "T_oolbar"
+msgstr "_ടൂള്‍ ബാര്‍ "
+
+#: ../shell/ev-window.c:5029
+msgid "Rotate _Left"
+msgstr "_ഇടത്തേക്ക് തിരിയ്ക്കുക"
+
+#: ../shell/ev-window.c:5031
+msgid "Rotate _Right"
+msgstr "_വലത്തേയ്ക്ക തിരിയ്ക്കുക"
+
+#: ../shell/ev-window.c:5042
+msgid "_Reload"
+msgstr "_വീണ്ടും എടുക്കുക"
+
+#: ../shell/ev-window.c:5043
+msgid "Reload the document"
+msgstr "രേഖ വീണ്ടും എടുക്കുക"
+
+#: ../shell/ev-window.c:5046
+msgid "Auto_scroll"
+msgstr "ഓട്ടോ_സ്ക്രോള്‍"
+
+#: ../shell/ev-window.c:5056
+msgid "_First Page"
+msgstr "_ആദ്യത്തെ താള്‍"
+
+#: ../shell/ev-window.c:5057
+msgid "Go to the first page"
+msgstr "ആദ്യത്തെ താളിലേയ്ക്കു് പോകുക"
+
+#: ../shell/ev-window.c:5059
+msgid "_Last Page"
+msgstr "അ_വസാനത്തെ താള്‍"
+
+#: ../shell/ev-window.c:5060
+msgid "Go to the last page"
+msgstr "അവസാനത്തെ താളിലേയ്ക്കു് പോകുക"
+
+#. Help menu
+#: ../shell/ev-window.c:5064
+msgid "_Contents"
+msgstr "_ഉളളടക്കം"
+
+#: ../shell/ev-window.c:5067
+msgid "_About"
+msgstr "_എവിന്‍സിനെപ്പറ്റി"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5071
+msgid "Leave Fullscreen"
+msgstr "പൂര്‍ണ്ണസ്ക്രീനില്‍ നിന്നും പുറത്ത് കടക്കുക"
+
+#: ../shell/ev-window.c:5072
+msgid "Leave fullscreen mode"
+msgstr "പൂര്‍ണ്ണസ്ക്രീനില്‍ നിന്നും പുറത്ത് കടക്കുക"
+
+#: ../shell/ev-window.c:5074
+msgid "Start Presentation"
+msgstr "അവതരണം ആരംഭിക്കുക"
+
+#: ../shell/ev-window.c:5075
+msgid "Start a presentation"
+msgstr "ഒരു അവതരണം ആരംഭിക്കുക"
+
+#. View Menu
+#: ../shell/ev-window.c:5134
+msgid "_Toolbar"
+msgstr "_ടൂള്‍ ബാര്‍"
+
+#: ../shell/ev-window.c:5135
+msgid "Show or hide the toolbar"
+msgstr "ടൂള്‍ ബാര്‍ ദൃശ്യമാക്കുകയോ അദൃശ്യമാക്കുകയോ ചെയ്യുക"
+
+#: ../shell/ev-window.c:5137
+msgid "Side _Pane"
+msgstr "_പാര്‍ശ്വപട്ട"
+
+#: ../shell/ev-window.c:5138
+msgid "Show or hide the side pane"
+msgstr "പാര്‍ശ്വപട്ട ദൃശ്യമാക്കുകയോ അദൃശ്യമാക്കുകയോ ചെയ്യുക"
+
+#: ../shell/ev-window.c:5140
+msgid "_Continuous"
+msgstr "_തുടരെയുളള"
+
+#: ../shell/ev-window.c:5141
+msgid "Show the entire document"
+msgstr "രേഖ മുഴുവന്‍ കാണിക്കുക"
+
+#: ../shell/ev-window.c:5143
+msgid "_Dual"
+msgstr "_ഇരട്ടയായ"
+
+#: ../shell/ev-window.c:5144
+msgid "Show two pages at once"
+msgstr "രണ്ട് പേജുകള്‍ ഒരേ സ്ക്രീനില്‍ കാണിക്കുക"
+
+#: ../shell/ev-window.c:5146
+msgid "_Fullscreen"
+msgstr "_പരമാവധി വലുപ്പത്തിലുളള സ്ക്രീന്‍"
+
+#: ../shell/ev-window.c:5147
+msgid "Expand the window to fill the screen"
+msgstr "സ്ക്രീന്‍ മുഴുവന്‍ നിറയ്ക്കുന്നതിനായി ജാലകം വികസിപ്പിക്കുക"
+
+#: ../shell/ev-window.c:5149
+msgid "Pre_sentation"
+msgstr "അവ_തരണം"
+
+#: ../shell/ev-window.c:5150
+msgid "Run document as a presentation"
+msgstr "ഒരു അവതരണം ആയി രേഖ പ്രവര്‍ത്തിപ്പിക്കുക"
+
+#: ../shell/ev-window.c:5158
+msgid "_Inverted Colors"
+msgstr ""
+
+#: ../shell/ev-window.c:5159
+msgid "Show page contents with the colors inverted"
+msgstr ""
+
+#. Links
+#: ../shell/ev-window.c:5167
+msgid "_Open Link"
+msgstr "_കണ്ണി തുറക്കുക"
+
+#: ../shell/ev-window.c:5169
+msgid "_Go To"
+msgstr "_പോകേണ്ടതു് "
+
+#: ../shell/ev-window.c:5171
+msgid "Open in New _Window"
+msgstr "പുതിയ _ജാലകത്തില്‍ തുറക്കുക"
+
+#: ../shell/ev-window.c:5173
+msgid "_Copy Link Address"
+msgstr "കണ്ണി വിലാസം _പകര്‍ത്തുക"
+
+#: ../shell/ev-window.c:5175
+#, fuzzy
+msgid "_Save Image As…"
+msgstr "ചിത്രം പേരു് മാറ്റി _സൂക്ഷിയ്ക്കുക..."
+
+#: ../shell/ev-window.c:5177
+msgid "Copy _Image"
+msgstr "_ചിത്രം പകര്‍ത്തുക"
+
+#: ../shell/ev-window.c:5182
+#, fuzzy
+msgid "_Open Attachment"
+msgstr "അറ്റാച്ച്മെന്റ് സൂക്ഷിക്കുക"
+
+#: ../shell/ev-window.c:5184
+#, fuzzy
+msgid "_Save Attachment As…"
+msgstr "അറ്റാച്ച്മെന്റ് സൂക്ഷിക്കുക"
+
+#: ../shell/ev-window.c:5237
+msgid "Zoom"
+msgstr "വലുതാക്കുക"
+
+#: ../shell/ev-window.c:5239
+msgid "Adjust the zoom level"
+msgstr "വലുപ്പം ക്രമീകരിക്കുക"
+
+#: ../shell/ev-window.c:5249
+msgid "Navigation"
+msgstr "നാവിഗേഷന്‍"
+
+#: ../shell/ev-window.c:5251
+msgid "Back"
+msgstr "പുറകോട്ട്"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5254
+msgid "Move across visited pages"
+msgstr "സന്ദര്‍ശിച്ച താളുകളിലൂടെ നീങ്ങുക"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5284
+msgid "Previous"
+msgstr "മുമ്പുള്ള"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5289
+msgid "Next"
+msgstr "അടുത്ത"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5293
+msgid "Zoom In"
+msgstr "വലുതാക്കുക"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5297
+msgid "Zoom Out"
+msgstr "ചെറുതാക്കുക"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5305
+msgid "Fit Width"
+msgstr "വീതിയനുസരിച്ച്"
+
+#: ../shell/ev-window.c:5466 ../shell/ev-window.c:5483
+msgid "Unable to launch external application."
+msgstr "പുറത്തുനിന്നുള്ള പ്രയോഗം ലഭ്യമാക്കുവാന്‍ സാധ്യമല്ല."
+
+#: ../shell/ev-window.c:5540
+msgid "Unable to open external link"
+msgstr "പുറത്തേക്കുള്ള ഒരു കണ്ണി തുറക്കുവാന്‍ സാധ്യമല്ല"
+
+#: ../shell/ev-window.c:5707
+msgid "Couldn't find appropriate format to save image"
+msgstr "ഇമേജ് സൂക്ഷിക്കുന്നതിനുള്ള ശരിയായ ഒരു രീതി ലഭ്യമായില്ല"
+
+#: ../shell/ev-window.c:5749
+msgid "The image could not be saved."
+msgstr "ഇമേജ് സൂക്ഷിക്കുവാന്‍ സാധ്യമായില്ല."
+
+#: ../shell/ev-window.c:5781
+msgid "Save Image"
+msgstr "ഇമേജ് സൂക്ഷിക്കുക"
+
+#: ../shell/ev-window.c:5848
+msgid "Unable to open attachment"
+msgstr "അറ്റാച്ച്മെന്റ് തുറക്കുവാന്‍ സാധ്യമല്ല"
+
+#: ../shell/ev-window.c:5901
+msgid "The attachment could not be saved."
+msgstr "അറ്റാച്ച്മെന്റ് സൂക്ഷിയ്ക്കുവാന്‍ സാധ്യമല്ല."
+
+#: ../shell/ev-window.c:5946
+msgid "Save Attachment"
+msgstr "അറ്റാച്ച്മെന്റ് സൂക്ഷിക്കുക"
+
+#: ../shell/ev-window-title.c:162
+#, fuzzy, c-format
+msgid "%s — Password Required"
+msgstr "%s - അടയാളവാക്കു് ആവശ്യമാണ്"
+
+#: ../shell/ev-utils.c:317
+msgid "By extension"
+msgstr "എക്സ്റ്റെന്‍ഷന്‍ അനുസരിച്ച്"
+
+#: ../shell/main.c:72 ../shell/main.c:251
+msgid "MATE Document Viewer"
+msgstr "MATE രേഖാദര്‍ശിനി"
+
+#: ../shell/main.c:80
+#, fuzzy
+msgid "The page label of the document to display."
+msgstr "പ്രദര്‍ശിപ്പിക്കുന്നതിനുളള രേഖയുടെ താള്‍."
+
+#: ../shell/main.c:80
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:81
+#, fuzzy
+msgid "The page number of the document to display."
+msgstr "പ്രദര്‍ശിപ്പിക്കുന്നതിനുളള രേഖയുടെ താള്‍."
+
+#: ../shell/main.c:81
+msgid "NUMBER"
+msgstr ""
+
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr "സ്ക്രീനിന്റെ പരമാവധി വലിപ്പത്തിലുളള രീതിയില്‍ evince പ്രവര്‍ത്തിപ്പിക്കുക"
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr "അവതരണ രീതിയില്‍ evince പ്രവര്‍ത്തിപ്പിക്കുക"
+
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr "പ്രീവ്യൂവര്‍ രീതിയില്‍ evince പ്രവര്‍ത്തിപ്പിക്കുക"
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr "രേഖയില്‍ കണ്ടുപിടിക്കുവാനുള്ള വാക്ക് അല്ലെങ്കില്‍ വാചകം"
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:89
+#, fuzzy
+msgid "[FILE…]"
+msgstr "[FILE...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+#, fuzzy
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"ബൂളിയന്‍ ഉപാധികള്‍ ലഭ്യമാണ്, ട്രൂ എന്നാല്‍ തംബ്നെയിലിങ് സജ്ജമാക്കുന്നു, ഫാള്‍സ് എന്നാല്‍ പുതിയ "
+"തംബ്നെയില്‍ ഉണ്ടാക്കുന്നത് നിര്‍ജ്ജീവമാക്കുന്നു"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "പിഡിഎഫ് രേഖകള്‍ക്കുള്ള തംബ്നെയിലിങ് സജ്ജമാക്കുക"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "പിഡിഎഫ് രേഖകള്‍ക്കുള്ള തംബ്നെയില്‍ കമാന്‍ഡ്"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+#, fuzzy
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"പിഡിഎഫ് രേഖകള്‍ക്കുള്ള തംബ്നെയിലറിനുള്ള ശരിയായ കമാന്‍ഡുകളും ആര്‍ഗ്യുമെന്റുകളും. കൂടുതല്‍ "
+"വിവരങ്ങള്‍ക്കായി നോട്ടിലസ് തംബ്നെയിലര്‍ രേഖകള്‍ കാണുക."
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU രേഖ തെറ്റായ രീതിയിലാണു്"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "“%s” ഫയല്‍ ഉണ്ടാക്കുന്നതില്‍ പരാജയം: %s"
+
+#~ msgid "Search string"
+#~ msgstr "തിരയേണ്ട വാചകം"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "കണ്ടുപിടിക്കേണ്ട വാചകത്തിന്റെ (സ്ട്രിങ്) പേരു്"
+
+#~ msgid "Case sensitive"
+#~ msgstr "കേസ് സെന്‍സിറ്റീവ്"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "ഒരു കേസ് സെന്‍സിറ്റീവ് തിരച്ചിലിന് ട്രൂ ആണ്"
+
+#~ msgid "Highlight color"
+#~ msgstr "നിറം എടുത്ത് കാണിക്കുക"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "ചേര്‍ച്ചയുളള എല്ലാ വാചകങ്ങള്‍ക്ക് കൊടുക്കണ്ട നിറം"
+
+#~ msgid "Current color"
+#~ msgstr "നിലവിലുളള നിറം"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "നിലവില്‍ പൊരുത്തമുളള വാചകത്തിന്റെ നിറം"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "മുമ്പുള്ള രേഖകള്‍ വീണ്ടെടുക്കണമോ?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "അവസാനമായി പ്രവര്‍ത്തിക്കുമ്പോള്‍ എവിന്‍സ് അപ്രതീക്ഷിതമായ പുറത്തു് കടന്നിരിക്കുന്നു. അപ്പോള്‍ "
+#~ "ഉപയോഗത്തിലുണ്ടായിരുന്ന രേഖകള്‍ നിങ്ങള്‍ക്കു് വീണ്ടെടുക്കാം."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_വീണ്ടെടുക്കേണ്ട"
+
+#~ msgid "_Recover"
+#~ msgstr "_വീണ്ടെടുക്കുക"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "തകരാറുള്ളവ വീണ്ടെടുക്കല്‍"
+
+#~ msgid "Print..."
+#~ msgstr "അച്ചടിക്കുക..."
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "സിംകണ്ണി “%s” ഉണ്ടാക്കുവാന്‍ സാധ്യമായില്ല"
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "പകര്‍പ്പ് തുറക്കുവാന്‍ സാധ്യമായില്ല."
+
+#~ msgid "The document doesn't support search"
+#~ msgstr "ഈ രേഖയില്‍ തെരച്ചില്‍ പിന്തുണയ്ക്കുന്നില്ല"
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "ഒരു _പകര്‍പ്പ് സൂക്ഷിയ്ക്കുക..."
+
+#~ msgid "Page Set_up..."
+#~ msgstr "താള്‍ ടി ക്രമി_കരണം..."
+
+#~ msgid "Setup the page settings for printing"
+#~ msgstr "അച്ചടിക്കുന്നതിനായി താള്‍ ക്രമികരണങ്ങള്‍ സജ്ജമാക്കുക"
+
+#~ msgid "_Print..."
+#~ msgstr "_അച്ചടിക്കുക."
+
+#~ msgid "_Find..."
+#~ msgstr "_കണ്ടു പിടിക്കുക..."
diff --git a/po/mn.po b/po/mn.po
new file mode 100644
index 00000000..752800ef
--- /dev/null
+++ b/po/mn.po
@@ -0,0 +1,1601 @@
+# Evince Document Viewer
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Urangua <[email protected]>, 2009, 2010.
+# Dulmandakh Sukhbaatar <[email protected]>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: "
+"http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-03-19 14:34+0000\n"
+"PO-Revision-Date: 2010-03-23 04:09+0200\n"
+"Last-Translator: Badral <[email protected]>\n"
+"Language-Team: mongolian <[email protected]>\n"
+"Language: mn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.3\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Зурагт ном задлах “%s” командыг гүйцэтгэхэд алдаа гарлаа: %s"
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Зурагт ном задлах “%s” командыг биелүүлэх амжилтгүй боллоо."
+
+#: ../backend/comics/comics-document.c:183
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "“%s” команд хэвийн байдлаар дууссангүй."
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr " MIME төрлийн зурагт ном биш байна: %s"
+
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Энэ төрлийн зурагт номыг задлах тохиромжтой команд олсонгүй"
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Танигдахгүй MIME төрөл"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "Файл гэмтсэн байна"
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "Архивд файл байхгүй байна"
+
+#: ../backend/comics/comics-document.c:474
+#, c-format
+msgid "No images found in archive %s"
+msgstr "%s архиваас зураг олдсонгүй"
+
+#: ../backend/comics/comics-document.c:718
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr " \"%s\"-ийг устгахад алдаа гарсан байна."
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr " %s алдаа "
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Зурагт ном"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu баримт бичиг нь буруу форматтай байна"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Уг баримт бичиг нь хэд хэдэн файлаас бүрдсэн байна. Нэг буюу түүнээс дээш "
+"иймэрхүү файлд хандах боломжгүй. "
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu баримт бичиг"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI баримт бичиг буруу форматтай байна. "
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI Баримт бичиг"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr "Энэ бүтээл нийтийн домэйнд байна"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "Тийм"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "Үгүй"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "Төрөл 1 "
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "Төрөл 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "Төрөл 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "ТрүүТайп"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "Төрөл 1(CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "Төрөл 1C CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "ТрүүТайп (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "Фонтны танигдахгүй төрөл "
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "Нэр өгөөгүй байна"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "Оруулсан зүйлс"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "Оруулсан "
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "Оруулаагүй"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF Баримт бичиг"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Буруу баримт бичиг"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Слайд оруулах"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Алдаа гараагүй"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Санах ой хүрэхгүй байна"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "ZIP нууц кодыг олох боломжгүй "
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Хүчингүй ZIP файл "
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Олон файлын ZIP-ийг дэмжихгүй "
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Уг файлыг нээх боломжгүй"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Файлаас өгөгдөл унших боломжгүй"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "ZIP-ийн архиваас файл олох боломжгүй"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Тодорхойгүй алдаа "
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr " “%s” баримтыг ачаалах амжилтгүй боллоо"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr " “%s” баримтыг хадгалах амжилтгүй боллоо"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "ПостСкрипт баримтууд"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "“%s” хавсралтыг хадгалж чадсангүй: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "“%s” хавсралтыг нээж чадсангүй: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "“%s” хавсралтыг нээж чадсангүй"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "%s (%s) файлын төрлийг дэмжихгүй"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Бүх баримт бичиг"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Бүх файл"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Түр зуурын хавтас нээх амжилтгүй боллоо: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Түр зуурын хавтас нээх амжилтгүй боллоо: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Файл нь зөв .desktop файл биш байна"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Дэсктоп файлын танигдахгүй Хувилбар '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s-ийг эхлүүлж байна"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Командын мөрний баримт бичгийг програм хүлээн авахгүй байна"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Танигдахгүй эхлүүлэх сонголт: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"URIs баримт бичгийг 'Type=Link' дэсктопын оролт руу оруулах боломжгүй байна"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Нээж болох зүйл биш байна"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Сэшн менежерт холбогдох боломжгүй болгох"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Тохиргоо сануулсан файлыг ялган харуулах"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "ФАЙЛ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Сэшн менежментийн ID-г ялган харуулах"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Сэшн менежментийн сонголтууд:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Сэшн менежментийн сонголтуудыг харуулах"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s”-ийг харуулах"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "_Хэрэгслийн мөрөнд шилжих"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "Хэрэгслийн мөрний сонгогдсон зүйл рүү шилжих"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "_Хэрэгслийн мөрнөөс устгах"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "Сонгогдсон зүйлийг хэрэгслийн мөрнөөс устгах"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "_Хэрэгслийн мөрийг устгах"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "Сонгогдсон хэрэгслийн мөрийг устгах"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Тусгаарлагч"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+msgid "Running in presentation mode"
+msgstr "Үзүүлэнгийн горим дээр ажиллаж байна"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5341
+msgid "Best Fit"
+msgstr "Нарийн тааруулах"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Хуудасны өргөнтэй тааруулах"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4205
+#: ../shell/ev-window-title.c:149 ../shell/main.c:282
+#, c-format
+msgid "Document Viewer"
+msgstr "Баримт бичиг үзүүлэгч"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Олон хуудаст баримт бичиг үзэх"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Баримт бичгийн хязгаарлалтыг үл хайхрах"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Хуулах, хэвлэхийг хориглох гэх мэт баримт бичгийн хязгаарлалтыг үл хайхрана."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "Түр зуурын файлыг устгах"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "Тохиргооны файлыг хэвлэх"
+
+#: ../previewer/ev-previewer.c:143 ../previewer/ev-previewer.c:177
+msgid "MATE Document Previewer"
+msgstr "ГНОУМ баримт бичиг урьдчилан үзүүлэгч"
+
+#: ../previewer/ev-previewer-window.c:90 ../shell/ev-window.c:3005
+msgid "Failed to print document"
+msgstr "Баримт бичиг хэвлэх амжилтгүй боллоо"
+
+#: ../previewer/ev-previewer-window.c:204
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Сонгосон '%s' хэвлэгч олдсонгүй "
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:248 ../shell/ev-window.c:5090
+msgid "_Previous Page"
+msgstr "_Өмнөх хуудас"
+
+#: ../previewer/ev-previewer-window.c:249 ../shell/ev-window.c:5091
+msgid "Go to the previous page"
+msgstr "Өмнөх хуудсанд очих"
+
+#: ../previewer/ev-previewer-window.c:251 ../shell/ev-window.c:5093
+msgid "_Next Page"
+msgstr "_Дараах хуудас"
+
+#: ../previewer/ev-previewer-window.c:252 ../shell/ev-window.c:5094
+msgid "Go to the next page"
+msgstr "Дараах хуудсанд очих"
+
+#: ../previewer/ev-previewer-window.c:255 ../shell/ev-window.c:5077
+msgid "Enlarge the document"
+msgstr "Баримт бичиг томсгох"
+
+#: ../previewer/ev-previewer-window.c:258 ../shell/ev-window.c:5080
+msgid "Shrink the document"
+msgstr "Баримт бичиг жижигсгэх"
+
+#: ../previewer/ev-previewer-window.c:261 ../libview/ev-print-operation.c:1315
+msgid "Print"
+msgstr "Хэвлэх "
+
+#: ../previewer/ev-previewer-window.c:262 ../shell/ev-window.c:5048
+msgid "Print this document"
+msgstr "Уг баримт бичгийг хэвлэх"
+
+#: ../previewer/ev-previewer-window.c:268 ../shell/ev-window.c:5192
+msgid "_Best Fit"
+msgstr "_Нарийн тааруулах"
+
+#: ../previewer/ev-previewer-window.c:269 ../shell/ev-window.c:5193
+msgid "Make the current document fill the window"
+msgstr "Нээлттэй байгаа баримт бичгээ цонх дүүргэж байршуулах "
+
+#: ../previewer/ev-previewer-window.c:271 ../shell/ev-window.c:5195
+msgid "Fit Page _Width"
+msgstr "Хуудасны өргөнтэй тааруулах"
+
+#: ../previewer/ev-previewer-window.c:272 ../shell/ev-window.c:5196
+msgid "Make the current document fill the window width"
+msgstr "Нээлттэй байгаа баримт бичгээ цонхны өргөнийг дүүргэж байршуулах"
+
+#: ../previewer/ev-previewer-window.c:455 ../shell/ev-window.c:5263
+msgid "Page"
+msgstr "Хуудас "
+
+#: ../previewer/ev-previewer-window.c:456 ../shell/ev-window.c:5264
+msgid "Select Page"
+msgstr "Хуудсаа сонгох "
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Баримт бичиг"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Гарчиг:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Байршил:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Сэдэв: "
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "Зохиогч:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Түлхүүр үг:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Гүйцэтгэгч:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Бүтээгч:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Бүтээсэн:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Өөрчилсөн:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Хуудасны дугаар:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Оновчтой болгосон:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Формат:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Аюулгүй байдал:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Хуудасны хэмжээ: "
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1896
+msgid "None"
+msgstr "Хоосон"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "өгөгдмөл:mm"
+
+#: ../properties/ev-properties-view.c:284
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f мм"
+
+#: ../properties/ev-properties-view.c:288
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f инч"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Босоо (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Хэвтээ (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d -ийн %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr " %d-ийн "
+
+#. Initial state
+#: ../libview/ev-print-operation.c:341
+msgid "Preparing to print…"
+msgstr "Хэвлэхээр бэлтгэж байна..."
+
+#: ../libview/ev-print-operation.c:343
+msgid "Finishing…"
+msgstr "Дуусч байна..."
+
+#: ../libview/ev-print-operation.c:345
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "%d-ийн %d хуудсыг хэвлэж байна..."
+
+#: ../libview/ev-print-operation.c:1169
+msgid "Printing is not supported on this printer."
+msgstr "Уг хэвлэгч дээр хэвлэх боломжгүй байна."
+
+#: ../libview/ev-print-operation.c:1234
+msgid "Invalid page selection"
+msgstr "Болохгүй хуудас сонгосон байна"
+
+#: ../libview/ev-print-operation.c:1235
+msgid "Warning"
+msgstr "Анхааруулга "
+
+#: ../libview/ev-print-operation.c:1237
+msgid "Your print range selection does not include any pages"
+msgstr "Хэвлэгчийн тань хэвлэх хуудасны сонголт хийгдээгүй байна"
+
+#: ../libview/ev-print-operation.c:1891
+msgid "Page Scaling:"
+msgstr "Хуудасны хэмжээс:"
+
+#: ../libview/ev-print-operation.c:1897
+msgid "Shrink to Printable Area"
+msgstr "Хэвлэх хэсэгт жижигрүүлэх"
+
+#: ../libview/ev-print-operation.c:1898
+msgid "Fit to Printable Area"
+msgstr "Хэвлэх хэсэгт тааруулах"
+
+#: ../libview/ev-print-operation.c:1901
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Баримт бичгийн хуудсаа сонгож авсан хэвлэгчийн хуудсанд тааруулан хэмжээг нь "
+"тохируулна. Үүний тулд дараах сонголтоос хийнэ үү:\n"
+"\n"
+"• \"Хийхгүй\": Хуудасны хэмжээг тохируулахгүй. \n"
+"\n"
+"• \"Хэвлэх хэсэгт жижигрүүлэх\": Хэвлэх хэсгээс том хуудсыг хэвлэгчийн "
+"хуудасны хэвлэх хэсэгт тааруулан багасгадаг.\n"
+"\n"
+"• \"Хэвлэх хэсэгт тааруулах\": Хэвлэгчийн хуудасны хэвлэгчийн хэсэгт "
+"тааруулахын тулд хуудсыг томосгох буюу багасгадаг.\n"
+
+#: ../libview/ev-print-operation.c:1913
+msgid "Auto Rotate and Center"
+msgstr "Автоматаар эргүүлэх буюу голлуулах"
+
+#: ../libview/ev-print-operation.c:1916
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Баримт бичгийн хуудас бүрийн чигийг тааруулахын тулд хуудас бүрийн "
+"хэвлэгчийн хуудасны чигийг эргүүлнэ. Баримт бичгийн хуудас хэвлэгчийн "
+"хуудсан дотор голлоно."
+
+#: ../libview/ev-print-operation.c:1921
+msgid "Select page size using document page size"
+msgstr "Баримт бичгийн хуудасны хэмжээг ашиглан хуудасны хэмжээг сонгох"
+
+#: ../libview/ev-print-operation.c:1923
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Тохируулсан бол хуудас бүр баримт бичгийн хуудастай ижил "
+"хэмжээгээрхэвлэгдэнэ."
+
+#: ../libview/ev-print-operation.c:2005
+msgid "Page Handling"
+msgstr "Хуудас боловсруулалт"
+
+#: ../libview/ev-jobs.c:1434
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "%d хуудсыг хэвлэх амжилтгүй боллоо: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Дээш нь гүйлгэх"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Доош нь гүйлгэх "
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Харагдцыг дээш нь гүйлгэх "
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Харагдцыг доош нь гүйлгэх "
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Баримт бичгийн харагдац"
+
+#: ../libview/ev-view-presentation.c:668
+msgid "Jump to page:"
+msgstr "Хуудас руу очих:"
+
+#: ../libview/ev-view-presentation.c:970
+msgid "End of presentation. Click to exit."
+msgstr "Үзүүлэн дууслаа. Хулганаараа товшин гарна уу."
+
+#: ../libview/ev-view.c:1724
+msgid "Go to first page"
+msgstr "Эхний хуудсанд очих"
+
+#: ../libview/ev-view.c:1726
+msgid "Go to previous page"
+msgstr "Өмнөх хуудсанд очих"
+
+#: ../libview/ev-view.c:1728
+msgid "Go to next page"
+msgstr "Дараах хуудсанд очих"
+
+#: ../libview/ev-view.c:1730
+msgid "Go to last page"
+msgstr "Сүүлийн хуудсанд очих"
+
+#: ../libview/ev-view.c:1732
+msgid "Go to page"
+msgstr "Хуудсанд очих"
+
+#: ../libview/ev-view.c:1734
+msgid "Find"
+msgstr "Хайж олох"
+
+#: ../libview/ev-view.c:1762
+#, c-format
+msgid "Go to page %s"
+msgstr "%s хуудсанд очих"
+
+#: ../libview/ev-view.c:1768
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "“%s” файл дээрх %s -д очих"
+
+#: ../libview/ev-view.c:1771
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s”файлд очих"
+
+#: ../libview/ev-view.c:1779
+#, c-format
+msgid "Launch %s"
+msgstr "%s-ийг нээх "
+
+#: ../libview/ev-view.c:3923 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Ачаалж байна..."
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Хайж олох:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5065
+msgid "Find Pre_vious"
+msgstr "Өмнөхийг хайж олох"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Хайлтын үгний өмнөх тохиолдлыг хайж олох"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5063
+msgid "Find Ne_xt"
+msgstr "Дараагийнхыг хайж олох"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Хайлтын үгний дараагийн тохиолдлыг хайж олох"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Үсгийн хэмжээг ялгана"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Хайлтыг үсгийн хэмжээ таниж хийх"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s баримт бичгийн нууц үг"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr " %s-ийг хувиргаж байна"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d -ийн %d баримт бичгийг хувиргалаа"
+
+#: ../shell/ev-convert-metadata.c:164 ../shell/ev-convert-metadata.c:179
+msgid "Converting metadata"
+msgstr "Мета-өгөгдлийг хувиргах"
+
+#: ../shell/ev-convert-metadata.c:185
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Эвинсийг хэрэглэдэг мета-өгөгдлийн формат нь өөрчлөгдсөн тул үүнийг "
+"шилжүүлэх хэрэгтэй. Шилжүүлэлт цуцлагдвал мета-өгөгдлийн санах ой ажиллахгүй."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Сүүлд хэрэглэсэн баримт бичгийг нээх "
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Уг баримт бичиг түгжигдсэн бөгөөд та зөв нууц үгийг нь оруулснаар үүнд "
+"нэвтрэн зөвхөн унших боломжтой болно."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "_Баримт бичгийн түгжээг тайлах"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Нууц үгээ оруулах"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Нууц үг оруулах хэрэгтэй"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"“%s” баримт бичиг түгжигдсэн бөгөөд нээхийн тулд нууц үг оруулах хэрэгтэй. "
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_ Нууц үг:"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "Нэн даруй нууц үгийг мартах"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _log out"
+msgstr "Гарах хүртлээ нууц үгээ санах"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "Байнга санах"
+
+#: ../shell/ev-properties-dialog.c:58
+msgid "Properties"
+msgstr "Шинж чанар"
+
+#: ../shell/ev-properties-dialog.c:92
+msgid "General"
+msgstr "Ерөнхий "
+
+#: ../shell/ev-properties-dialog.c:102
+msgid "Fonts"
+msgstr "Фонт "
+
+#: ../shell/ev-properties-dialog.c:115
+msgid "Document License"
+msgstr "Баримт бичгийн лиценз"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Фонт "
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Фонтны мэдээлэл цуглуулж байна... %3d%% "
+
+#: ../shell/ev-properties-license.c:138
+msgid "Usage terms"
+msgstr "Хэрэглээний нөхцөл"
+
+#: ../shell/ev-properties-license.c:144
+msgid "Text License"
+msgstr "Бичвэрийн Лиценз"
+
+#: ../shell/ev-properties-license.c:150
+msgid "Further Information"
+msgstr "Дэлгэрэнгүй мэдээлэл"
+
+#: ../shell/ev-sidebar-attachments.c:712
+msgid "Attachments"
+msgstr "Хавсралт"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Давхарга"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Хэвлэх..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Үзүүлэлт "
+
+#: ../shell/ev-sidebar-thumbnails.c:956
+msgid "Thumbnails"
+msgstr "Ерөнхийлөн харуулах "
+
+#: ../shell/ev-window.c:839
+#, c-format
+msgid "Page %s — %s"
+msgstr "%s - %s хуудас"
+
+#: ../shell/ev-window.c:841
+#, c-format
+msgid "Page %s"
+msgstr "%s Хуудас"
+
+#: ../shell/ev-window.c:1285
+msgid "The document contains no pages"
+msgstr "Уг баримт бичиг хуудасгүй байна"
+
+#: ../shell/ev-window.c:1288
+msgid "The document contains only empty pages"
+msgstr "Уг баримт бичиг зөвхөн хоосон хуудастай байна"
+
+#: ../shell/ev-window.c:1482 ../shell/ev-window.c:1648
+msgid "Unable to open document"
+msgstr "Баримт бичиг нээх боломжгүй "
+
+#: ../shell/ev-window.c:1619
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "“%s”-ээс баримт бичиг ачаалж байна"
+
+#: ../shell/ev-window.c:1761 ../shell/ev-window.c:2038
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "(%d%%) баримт бичгийг татаж байна"
+
+#: ../shell/ev-window.c:1794
+msgid "Failed to load remote file."
+msgstr "Алсын файл ачаалах амжилтгүй боллоо. "
+
+#: ../shell/ev-window.c:1982
+#, c-format
+msgid "Reloading document from %s"
+msgstr "%s-ээс баримт бичиг ахин ачаалж байна"
+
+#: ../shell/ev-window.c:2014
+msgid "Failed to reload document."
+msgstr "Баримт бичиг ахин ачаалах амжилтгүй боллоо."
+
+#: ../shell/ev-window.c:2169
+msgid "Open Document"
+msgstr "Баримт бичиг нээх"
+
+#: ../shell/ev-window.c:2433
+#, c-format
+msgid "Saving document to %s"
+msgstr "Баримт бичгийг %s -д хадгалж байна"
+
+#: ../shell/ev-window.c:2436
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Хавсралтыг %s -д хадгалж байна"
+
+#: ../shell/ev-window.c:2439
+#, c-format
+msgid "Saving image to %s"
+msgstr "Зургийг %s-д хадгалж байна"
+
+#: ../shell/ev-window.c:2483 ../shell/ev-window.c:2583
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Уг файлыг “%s” болгон хадгалж чадсангүй."
+
+#: ../shell/ev-window.c:2514
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "(%d%%) баримт бичгийг оруулж байна"
+
+#: ../shell/ev-window.c:2518
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "(%d%%) хавсралтыг оруулж байна"
+
+#: ../shell/ev-window.c:2522
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "(%d%%) зургийг оруулж байна"
+
+#: ../shell/ev-window.c:2644
+msgid "Save a Copy"
+msgstr "Хуулбарыг хадгалах"
+
+#: ../shell/ev-window.c:2949
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d ажил хүлээлгэнд байна"
+msgstr[1] "%d ажил хүлээлгэнд байна"
+
+#: ../shell/ev-window.c:3062
+#, c-format
+msgid "Printing job “%s”"
+msgstr "“%s” ажлыг хэвлэж байна"
+
+#: ../shell/ev-window.c:3274
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Хаахаасаа өмнө “%s” хэвлэгдэж буй ажлыг дуустал хүлээх үү?"
+
+#: ../shell/ev-window.c:3277
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "Идэвхтэй %d хэвлэх ажил байна. Хэвлэгдэж дуусахыг хүлээх үү?"
+
+#: ../shell/ev-window.c:3289
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Цонхоо хаавал хэвлэгдэхээр хүлээлгэнд байгаа ажлууд хэвлэгдэхгүй."
+
+#: ../shell/ev-window.c:3293
+msgid "Cancel _print and Close"
+msgstr "Хэвлэхийг цуцлаад хаах"
+
+#: ../shell/ev-window.c:3297
+msgid "Close _after Printing"
+msgstr "Хэвлэсний дараа хаах"
+
+#: ../shell/ev-window.c:3858
+msgid "Toolbar Editor"
+msgstr "Хэрэгслийн мөрийн засварлагч"
+
+#: ../shell/ev-window.c:3990
+msgid "There was an error displaying help"
+msgstr "Тусламж хүссэн алдаа гарсан байна"
+
+#: ../shell/ev-window.c:4201
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Баримт бичиг үзүүлэгч\n"
+"%s-ийг хэрэглэж байна (%s)"
+
+#: ../shell/ev-window.c:4232
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Эвинс нь чөлөөт програм хангамж тул Чөлөөт програм хангамжийн сангаас "
+"гаргадаг Олон нийтийн ерөнхий лицензийн 2-р хувилбар болон сүүлийн үеийн "
+"хүссэн хувилбарынхаа нөхцөлд нийцүүлэн өөрчлөн ахин түгээх боломжтой.\n"
+
+#: ../shell/ev-window.c:4236
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Бид Эвинсийг хэрэгцээтэй гэж үзсний үндсэн дээр түгээж байгаа ч ямар нэг "
+"баталгаа, худалдааны буюу тодорхой зорилгод нийцсэн баталгаагүйгээр "
+"түгээдэг. Дэлгэрэнгүй мэдээлэл авахыг хүсвэл ГНУ Олон нийтийн ерөнхий "
+"лицензтэй танилцана уу.\n"
+
+#: ../shell/ev-window.c:4240
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Та Эвинсээс гадна Олон нийтийн ерөнхий лицензийн хуулбарыг авсан байх "
+"шаардлагатай ба, хэрэв аваагүй бол Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA гэсэн хаягаар шуудан илгээнэ "
+"үү\n"
+
+#: ../shell/ev-window.c:4265
+msgid "Evince"
+msgstr "Эвинс"
+
+#: ../shell/ev-window.c:4268
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 Эвинсийн зохиогчид"
+
+#: ../shell/ev-window.c:4274
+msgid "translator-credits"
+msgstr "Орчуулсан: Дөлмандах"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4543
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "Энэ хуудсанд %d олдлоо"
+msgstr[1] "Энэ хуудсанд %d олдлоо"
+
+#: ../shell/ev-window.c:4551
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Хайлт хийхэд %3d%% үлдсэн байна"
+
+#: ../shell/ev-window.c:5028
+msgid "_File"
+msgstr "_Файл"
+
+#: ../shell/ev-window.c:5029
+msgid "_Edit"
+msgstr "_Засварлах"
+
+#: ../shell/ev-window.c:5030
+msgid "_View"
+msgstr "_Үзэх"
+
+#: ../shell/ev-window.c:5031
+msgid "_Go"
+msgstr "_Орох"
+
+#: ../shell/ev-window.c:5032
+msgid "_Help"
+msgstr "_Тусламж"
+
+#. File menu
+#: ../shell/ev-window.c:5035 ../shell/ev-window.c:5303
+msgid "_Open…"
+msgstr "_Нээх..."
+
+#: ../shell/ev-window.c:5036 ../shell/ev-window.c:5304
+msgid "Open an existing document"
+msgstr "Байгаа баримт бичгийг нээх"
+
+#: ../shell/ev-window.c:5038
+msgid "Op_en a Copy"
+msgstr "Хуулбарыг нээх"
+
+#: ../shell/ev-window.c:5039
+msgid "Open a copy of the current document in a new window"
+msgstr "Нээлттэй байгаа баримт бичгийн хуулбарыг шинэ цонхонд нээх "
+
+#: ../shell/ev-window.c:5041
+msgid "_Save a Copy…"
+msgstr "_Хуулбарыг хадгалах..."
+
+#: ../shell/ev-window.c:5042
+msgid "Save a copy of the current document"
+msgstr "Нээлттэй байгаа баримт бичгийн хуулбарыг хадгалах"
+
+#: ../shell/ev-window.c:5044
+msgid "Page Set_up…"
+msgstr "Хуудасны тохиргоо..."
+
+#: ../shell/ev-window.c:5045
+msgid "Set up the page settings for printing"
+msgstr "Хуудасны тохиргоог хэвлэхэд тохируулан хийх"
+
+#: ../shell/ev-window.c:5047
+msgid "_Print…"
+msgstr "_Хэвлэх..."
+
+#: ../shell/ev-window.c:5050
+msgid "P_roperties"
+msgstr "Шинж чанар"
+
+#: ../shell/ev-window.c:5058
+msgid "Select _All"
+msgstr "Бүгдийг_сонгох"
+
+#: ../shell/ev-window.c:5060
+msgid "_Find…"
+msgstr "_Хайх..."
+
+#: ../shell/ev-window.c:5061
+msgid "Find a word or phrase in the document"
+msgstr "Баримт бичгээс үг болон холбоо үг хайх "
+
+#: ../shell/ev-window.c:5067
+msgid "T_oolbar"
+msgstr "Хэрэгслийн мөр"
+
+#: ../shell/ev-window.c:5069
+msgid "Rotate _Left"
+msgstr "Зүүн тал руу эргүүлэх"
+
+#: ../shell/ev-window.c:5071
+msgid "Rotate _Right"
+msgstr "Баруун тал руу эргүүлэх"
+
+#: ../shell/ev-window.c:5082
+msgid "_Reload"
+msgstr "_Ахин ачаалах"
+
+#: ../shell/ev-window.c:5083
+msgid "Reload the document"
+msgstr "Баримт бичгийг дахин ачаалах "
+
+#: ../shell/ev-window.c:5086
+msgid "Auto_scroll"
+msgstr "Автоматаар гүйлгэх"
+
+#: ../shell/ev-window.c:5096
+msgid "_First Page"
+msgstr "_Эхний хуудас"
+
+#: ../shell/ev-window.c:5097
+msgid "Go to the first page"
+msgstr "Эхний хуудсанд очих"
+
+#: ../shell/ev-window.c:5099
+msgid "_Last Page"
+msgstr "_ Сүүлийн хуудас"
+
+#: ../shell/ev-window.c:5100
+msgid "Go to the last page"
+msgstr "Сүүлийн хуудсанд очих"
+
+#. Help menu
+#: ../shell/ev-window.c:5104
+msgid "_Contents"
+msgstr "_Агуулагдхуун"
+
+#: ../shell/ev-window.c:5107
+msgid "_About"
+msgstr "_Тухай"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5111
+msgid "Leave Fullscreen"
+msgstr "Дэлгэц дүүрэн үлдээх "
+
+#: ../shell/ev-window.c:5112
+msgid "Leave fullscreen mode"
+msgstr "Дэлгэц дүүрэн горимоор үлдээх "
+
+#: ../shell/ev-window.c:5114
+msgid "Start Presentation"
+msgstr "Үзүүлэн эхлүүлэх"
+
+#: ../shell/ev-window.c:5115
+msgid "Start a presentation"
+msgstr "Үзүүлэн эхлүүлэх"
+
+#. View Menu
+#: ../shell/ev-window.c:5174
+msgid "_Toolbar"
+msgstr "_Хэрэгслийн мөр"
+
+#: ../shell/ev-window.c:5175
+msgid "Show or hide the toolbar"
+msgstr "Хэрэгслийн мөрийг харуулах буюу нуух"
+
+#: ../shell/ev-window.c:5177
+msgid "Side _Pane"
+msgstr "Хажуугийн_шугам"
+
+#: ../shell/ev-window.c:5178
+msgid "Show or hide the side pane"
+msgstr "Хажуугийн шугамыг харуулах буюу нуух"
+
+#: ../shell/ev-window.c:5180
+msgid "_Continuous"
+msgstr "_Үргэлжлэх"
+
+#: ../shell/ev-window.c:5181
+msgid "Show the entire document"
+msgstr "Баримт бичгийг бүхлээр нь үзүүлэх"
+
+#: ../shell/ev-window.c:5183
+msgid "_Dual"
+msgstr "_Зэрэг"
+
+#: ../shell/ev-window.c:5184
+msgid "Show two pages at once"
+msgstr "Хоёр хуудсыг нэгэн зэрэг харуулах"
+
+#: ../shell/ev-window.c:5186
+msgid "_Fullscreen"
+msgstr "_Дэлгэц дүүрэн"
+
+#: ../shell/ev-window.c:5187
+msgid "Expand the window to fill the screen"
+msgstr "Цонхыг өргөсгөж дэлгэцийг дүүргэх"
+
+#: ../shell/ev-window.c:5189
+msgid "Pre_sentation"
+msgstr "Үзүүлэн "
+
+#: ../shell/ev-window.c:5190
+msgid "Run document as a presentation"
+msgstr "Баримт бичгийг үзүүлэн байдлаар ажиллуулах"
+
+#: ../shell/ev-window.c:5198
+msgid "_Inverted Colors"
+msgstr "_Хувиргасан өнгө"
+
+#: ../shell/ev-window.c:5199
+msgid "Show page contents with the colors inverted"
+msgstr "Хувиргасан өнгөтэй хуудасны агуулагдхууныг харуулах"
+
+#. Links
+#: ../shell/ev-window.c:5207
+msgid "_Open Link"
+msgstr "_Холбоосыг нээх"
+
+#: ../shell/ev-window.c:5209
+msgid "_Go To"
+msgstr "_Орох"
+
+#: ../shell/ev-window.c:5211
+msgid "Open in New _Window"
+msgstr "Шинэ цонхонд нээх"
+
+#: ../shell/ev-window.c:5213
+msgid "_Copy Link Address"
+msgstr "_Холбоосын хаягийг хуулах"
+
+#: ../shell/ev-window.c:5215
+msgid "_Save Image As…"
+msgstr "_Зургийг өөр форматаар хадгалах..."
+
+#: ../shell/ev-window.c:5217
+msgid "Copy _Image"
+msgstr "Зургийг хуулах"
+
+#: ../shell/ev-window.c:5222
+msgid "_Open Attachment"
+msgstr "_Хавсралтыг нээх"
+
+#: ../shell/ev-window.c:5224
+msgid "_Save Attachment As…"
+msgstr "_Хавсралтыг өөр форматаар хадгалах..."
+
+#: ../shell/ev-window.c:5277
+msgid "Zoom"
+msgstr "Зургийн хэмжээг өөрчлөх"
+
+#: ../shell/ev-window.c:5279
+msgid "Adjust the zoom level"
+msgstr "Зургийн хэмжээг өөрчлөх түвшнийг тохируулах"
+
+#: ../shell/ev-window.c:5289
+msgid "Navigation"
+msgstr "Залуур"
+
+#: ../shell/ev-window.c:5291
+msgid "Back"
+msgstr "Буцах"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5294
+msgid "Move across visited pages"
+msgstr "Үзсэн хуудсууд руу шилжих"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5324
+msgid "Previous"
+msgstr "Өмнөх "
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5329
+msgid "Next"
+msgstr "Дараах"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5333
+msgid "Zoom In"
+msgstr "Зургийг томруулах"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5337
+msgid "Zoom Out"
+msgstr "Зургийг жижигрүүлэх"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5345
+msgid "Fit Width"
+msgstr "Өргөнийг тохируулах"
+
+#: ../shell/ev-window.c:5506 ../shell/ev-window.c:5523
+msgid "Unable to launch external application."
+msgstr "Нэмэлт програм ажиллуулах боломжгүй."
+
+#: ../shell/ev-window.c:5580
+msgid "Unable to open external link"
+msgstr "Нэмэлт холбоос нээх боломжгүй"
+
+#: ../shell/ev-window.c:5747
+msgid "Couldn't find appropriate format to save image"
+msgstr "Зургийг хадгалах тохиромжтой формат олдсонгүй"
+
+#: ../shell/ev-window.c:5789
+msgid "The image could not be saved."
+msgstr "Зураг хадгалагдсангүй."
+
+#: ../shell/ev-window.c:5821
+msgid "Save Image"
+msgstr "Зураг хадгалах"
+
+#: ../shell/ev-window.c:5888
+msgid "Unable to open attachment"
+msgstr "Хавсралт нээх боломжгүй байна"
+
+#: ../shell/ev-window.c:5941
+msgid "The attachment could not be saved."
+msgstr "Хавсралт хадгалагдсангүй."
+
+#: ../shell/ev-window.c:5986
+msgid "Save Attachment"
+msgstr "Хавсралтыг хадгалах "
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s - Нууц үгээ оруулах хэрэгтэй"
+
+#: ../shell/ev-utils.c:315
+msgid "By extension"
+msgstr "Өргөтгөлөөр "
+
+#: ../shell/main.c:70 ../shell/main.c:246
+msgid "MATE Document Viewer"
+msgstr "ГНОУМ баримт бичиг үзүүлэгч"
+
+#: ../shell/main.c:78
+msgid "The page of the document to display."
+msgstr "Нээх баримт бичгийн хуудас"
+
+#: ../shell/main.c:78
+msgid "PAGE"
+msgstr "ХУУДАС"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Эвинсийг дэлгэц дүүрэн горимоор ажиллуулах"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Эвинсийг үзүүлэнгийн горимоор ажиллуулах"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Эвинсийг урьдчилан үзүүлэгч болгон ажиллуулах"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Баримт бичгээс хайх үг болон холбоо үг"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "БИЧВЭР"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[ФАЙЛ...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Бүүлин сонголтууд бий: үнэн гэдэг нь ерөнхийлөн харуулах боломжтой болгох ба "
+"худал гэдэг нь шинэ ерөнхийлөн харуулагч үүсгэх боломжгүй болгоно"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF баримт бичгийг ерөнхийлөн харуулах боломжтой болгох"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF баримт бичгийн ерөнхийлөн харуулах команд"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Зөв команд нь PDF баримт бичгийн ерөнхийлөн харуулагчид параметр оруулдаг. "
+"Дэлгэрэнгүй мэдээлэл авахыг хүсвэл ерөнхийлөн харуулагчийн баримтжуулалт "
+"Наутилистай танилцана уу."
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU баримт буруу форматтай байна"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "“%s” файлыг үүсгэх амжилтгүй боллоо: %s"
+
+#~ msgid "Search string"
+#~ msgstr "Мөр хайх"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "Хайж олох мөрийн нэр"
+
+#~ msgid "Highlight color"
+#~ msgstr "Тодруулсан өнгө"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Бүх илэрцийг тодруулсан өнгө "
+
+#~ msgid "Current color"
+#~ msgstr "Хэрэглэж буй өнгө "
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Хамгийн сүүлийн илэрцийг тодруулсан өнгө "
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "Өмнөх баримт бичгүүдээ сэргээх үү? "
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Эвинсийг сүүлд ажиллуулахад санаандгүй гарчихсан юм шиг байна.Та нээлттэй "
+#~ "байсан баримтуудыг сэргээх боломжтой."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_Сэргээхгүй"
+
+#~ msgid "_Recover"
+#~ msgstr "_Сэргээх "
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Сэргээлт амжилтгүй боллоо. "
+
+#~ msgid "Print..."
+#~ msgstr "Хэвлэх "
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Хуулбарыг хадгалах..."
+
+#~ msgid "_Print..."
+#~ msgstr "_Хэвлэх..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Хайх..."
diff --git a/po/mr.po b/po/mr.po
new file mode 100644
index 00000000..589db931
--- /dev/null
+++ b/po/mr.po
@@ -0,0 +1,1711 @@
+# translation of mr.po to Marathi
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# Sameer N. Ingole <[email protected]>, 2006.
+# Rahul Bhalerao <[email protected]>, 2006.
+# Sandeep Shedmake <[email protected]>, 2008, 2009.
+# Sandeep Shedmake <[email protected]>, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: mr\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-07-26 09:19+0000\n"
+"PO-Revision-Date: 2010-07-26 17:07+0530\n"
+"Last-Translator: Sandeep Shedmake <[email protected]>\n"
+"Language-Team: Marathi <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "कॉमीक पुस्तक डीकंप्रेस् करण्यासाठी आदेश “%s” प्रक्षेपीत करतेवेळी त्रुटी: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "कॉमीक पुस्तक डीकंप्रेस करतेवेळी आदेश “%s” अपयशी."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "आदेश “%s” योग्यरित्या समाप्त झाले नाही."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "कॉमीक पुस्तक MIME प्रकार नाही: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "या प्रकारचे कॉमीक पुस्तक डिकंप्रेस् करण्यास योग्य आदेश आढळले नाही"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "अपरिचीत MIME प्रकार"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "फाइल सदोषीत"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "आर्काइव्हमध्ये फाइल्स् आढळले नाही"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "%s गठ्ठ्यात प्रतीमा मिळाल्या नाहीत"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "“%s” नष्ट करतेवेळी त्रुटी आढळळी."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "त्रुटी %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "चित्राक्षर पुस्तक"
+
+#: ../backend/djvu/djvu-document.c:173
+#, fuzzy
+msgid "DjVu document has incorrect format"
+msgstr "DVI दस्तऐवजाची रचना चुक आहे"
+
+#: ../backend/djvu/djvu-document.c:250
+#, fuzzy
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"दस्तऐवज अनेक फाइलचे समायोजन आहे. एक किंवा त्यापेक्षा जास्त फाइल करीता प्रवेश प्राप्त होऊ "
+"शकत नाही."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+#, fuzzy
+msgid "DjVu Documents"
+msgstr "Djvu दस्तऐवज"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI दस्तऐवजाची रचना चुक आहे"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI दस्तऐवज"
+
+#: ../backend/pdf/ev-poppler.cc:521
+msgid "This work is in the Public Domain"
+msgstr ""
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:774
+msgid "Yes"
+msgstr "होय"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:777
+msgid "No"
+msgstr "नाही"
+
+#: ../backend/pdf/ev-poppler.cc:905
+msgid "Type 1"
+msgstr "प्रकार १"
+
+#: ../backend/pdf/ev-poppler.cc:907
+msgid "Type 1C"
+msgstr "प्रकार १C"
+
+#: ../backend/pdf/ev-poppler.cc:909
+msgid "Type 3"
+msgstr "प्रकार ३"
+
+#: ../backend/pdf/ev-poppler.cc:911
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:913
+msgid "Type 1 (CID)"
+msgstr "प्रकार १ (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:915
+msgid "Type 1C (CID)"
+msgstr "प्रकार १C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:917
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:919
+msgid "Unknown font type"
+msgstr "अपरिचीत फॉंटचा प्रकार"
+
+#: ../backend/pdf/ev-poppler.cc:945
+msgid "No name"
+msgstr "नाव नाही"
+
+#: ../backend/pdf/ev-poppler.cc:953
+msgid "Embedded subset"
+msgstr "एंबेडेड उपसमूह"
+
+#: ../backend/pdf/ev-poppler.cc:955
+msgid "Embedded"
+msgstr "एंबेडेड"
+
+#: ../backend/pdf/ev-poppler.cc:957
+msgid "Not embedded"
+msgstr "एंबेडेड नसलेले"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF दस्तऐवज"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "अवैध दस्तऐवज"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "इंप्रेस स्लाइडस्"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "त्रुटी नाही"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "अतिरीक्त स्मृती नाही"
+
+#: ../backend/impress/zip.c:59
+#, fuzzy
+msgid "Cannot find ZIP signature"
+msgstr "zip स्वाक्षरी आढळली नाही"
+
+#: ../backend/impress/zip.c:62
+#, fuzzy
+msgid "Invalid ZIP file"
+msgstr "अवैध zip फाइल"
+
+#: ../backend/impress/zip.c:65
+#, fuzzy
+msgid "Multi file ZIPs are not supported"
+msgstr "बहु फाइल zip समर्थीत नाही"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "फाइल उघडू शकत नाही"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "फाइल पासून माहिती वाचू शकत नाही"
+
+#: ../backend/impress/zip.c:74
+#, fuzzy
+msgid "Cannot find file in the ZIP archive"
+msgstr "zip संचयन मध्ये फाइल शोधू शकले नाही"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "अपरिचीत त्रुटी"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "“%s” दस्तऐवज वाचण्यास असमर्थ"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "“%s” दस्तऐवज संचयीत करण्यास अपयशी"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "पोस्टस्क्रिप्ट दस्तऐवज"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "जोडणी “%s” संग्रहीत करु शकत नाही: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "जोडणी “%s” उघडू शकत नाही: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "जोडणी “%s” उघडू शकत नाही"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "फाइल प्रकार %s (%s) समर्थीत नाही"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "सर्व दस्तऐवज"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "सर्व फाइल्स"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, fuzzy, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "तात्पुर्ती डिरेक्ट्री निर्माण करण्यास अपयशी."
+
+#: ../libdocument/ev-file-helpers.c:308
+#, fuzzy, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "तात्पुर्ती डिरेक्ट्री निर्माण करण्यास अपयशी."
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "फाइल वैध .desktop फाइल नाही"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "अपरिचीत डेस्कटॉप फाइल आवृत्ती '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s सुरू करत आहे"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "अनुप्रयोग आदेश ओळ पासून दस्तऐवज स्वीकारत नाही"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "अपरिचीत प्रक्षेपन पर्याय: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "'Type=Link' डेस्कटॉप नोंदणी करीता दस्तऐवजातील URIs पाठवू शकत नाही"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "चालवण्यायोग्य प्रोग्राम उपलब्ध नाही"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "सत्र व्यवस्थपानशी जुळवणी अकार्यान्वती करा"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "संचयीत संयोजना समाविष्ठीत फाइल निर्देशीत करा"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "सत्र व्यवस्थापन ID निश्चित करा"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "सत्र व्यवस्थपान पर्याय:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "सत्र व्यवस्थपान पर्याय दाखवा"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s” दाखवा"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "साधनपट्टीवर हलवा (_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "निवडलेली बाब साधनपट्टिकेवर हलवा"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "साधनपट्टिकेवरुन काढा (_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "निवडलेली बाब साधनपट्टिकेवरुन काढून टाका"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "साधनपट्टी काढून टाका (_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "निवडलेली साधनपट्टिका काढून टाका"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "विभाजक"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5517
+msgid "Best Fit"
+msgstr "सर्वोत्तम बसणारे"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "पानाच्या रुंदीत बसवा"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "५०%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+#, fuzzy
+msgid "800%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+#, fuzzy
+msgid "1600%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+#, fuzzy
+msgid "3200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+#, fuzzy
+msgid "6400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4304
+#: ../shell/ev-window-title.c:149 ../shell/main.c:313
+#, c-format
+msgid "Document Viewer"
+msgstr "दस्तऐवज दर्शक"
+
+#: ../data/evince.desktop.in.in.h:2
+#, fuzzy
+msgid "View multi-page documents"
+msgstr "अनेक दस्तऐवज बघा"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "दस्तऐवजावरील निर्बंध झुगारुन टाका"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "प्रत तयार करणे अथवा मुद्रण करण्याप्रमाणेच दस्तऐवजावरील निर्बंध झुगारुन टाका."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "तात्पुर्ती फाइल नष्ट करा"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "संयोजना फाइलची छपाई करत आहे"
+
+#: ../previewer/ev-previewer.c:147 ../previewer/ev-previewer.c:181
+msgid "MATE Document Previewer"
+msgstr "MATE दस्तऐवज पूर्वदर्शक"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3065
+msgid "Failed to print document"
+msgstr "दस्तऐवज मुद्रित करण्यात अशमर्थ"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "नीवडलेले छपाईयंत्र '%s' आढळले नाही"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5232
+msgid "_Previous Page"
+msgstr "मागील पान(_P)"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5233
+msgid "Go to the previous page"
+msgstr "मागील पानावर जा"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5235
+msgid "_Next Page"
+msgstr "पुढील पान(_N)"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5236
+msgid "Go to the next page"
+msgstr "पुढील पानावर जा"
+
+# msgstr "दस्तावेज मोठे करुन दर्शवा"
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5219
+msgid "Enlarge the document"
+msgstr "दस्तऐवज मोठे करा"
+
+# msgstr "दस्तावेज आखूड करुन दर्शवा"
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5222
+msgid "Shrink the document"
+msgstr "दस्तऐवज आखूड करा"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "मुद्रण"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5190
+msgid "Print this document"
+msgstr "हा दस्तऐवज मुद्रित करा"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5334
+msgid "_Best Fit"
+msgstr "सर्वोत्तम आकार (_B)"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5335
+msgid "Make the current document fill the window"
+msgstr "चालु दस्तऐवज पटल भरेल असे करा"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5337
+msgid "Fit Page _Width"
+msgstr "पान रुंदीत बसवा(_W)"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5338
+msgid "Make the current document fill the window width"
+msgstr "चालु दस्तऐवज खिडकीची रुंदी भरेल असे करा"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5439
+msgid "Page"
+msgstr "पान"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5440
+msgid "Select Page"
+msgstr "पान निवडा"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "दस्तऐवज"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "शिर्षक:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "ठिकाण:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "विषय:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "लेखक:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "मुख्यशब्द:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "उत्पादक:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "निर्माता:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "निर्माण केलेले:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "बदल दिनांक:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "पानांची संख्या:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "अनुकूल केलेले:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "स्वरूप:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "सुरक्षा:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "कागदाचा आकार:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "काही नाही"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "मुलभूत:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, fuzzy, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, fuzzy, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f इंच"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, उभे (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, आडवे (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d पैकी %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "चा %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+#, fuzzy
+msgid "Loading…"
+msgstr "वाचतोय..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+#, fuzzy
+msgid "Preparing to print…"
+msgstr "छपाई करीता तयार करत आहे ..."
+
+#: ../libview/ev-print-operation.c:336
+#, fuzzy
+msgid "Finishing…"
+msgstr "संपवित आहे..."
+
+#: ../libview/ev-print-operation.c:338
+#, fuzzy, c-format
+msgid "Printing page %d of %d…"
+msgstr "%d पैकी %d पानाची छपाई करत आहे..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "हा मुद्रकावर मुद्रणास पाठिंबा नाही."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "अवैध पान नीवड"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "सावधानता"
+
+#: ../libview/ev-print-operation.c:1229
+#, fuzzy
+msgid "Your print range selection does not include any pages"
+msgstr "तुमच्या छपाई व्याप्ती नीवड मध्ये पान समाविष्टीत नाही"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "पानाचे आकार बदल:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "छपाईजोगी क्षेत्रकरीता संकुचन करा"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "छपाईजोगी क्षेत्रात बसवा"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"नीवडलेले छपाईयंत्र पान बसवण्यासाठी दस्तऐवज पाने प्रमाणीत करा. खालीलपैकी एक नीवडा:\n"
+"\n"
+"• \"None\": पानाचे स्केलिंग चालवले जात नाही.\n"
+"\n"
+"• \"Shrink to Printable Area\": छपाईयंत्र पानाला छपाईजोगी क्षेत्रात बसवण्याकरीता "
+"छपाईजोगी क्षेत्रपेक्षा मोठे दस्तऐवज पानांचे आकार लहान केले जातात.\n"
+"\n"
+"• \"Fit to Printable Area\": छपाईयंत्र पानाला छपाईजोगी क्षेत्रात बसवण्याकरीता "
+"दस्तऐवज पानांचे आकार आवश्यकताप्रमाणे मोठे किंवा लहान केले जातात.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "स्वयं फिरवा व मध्यभागी आणा"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"प्रत्येक दस्तऐवज पानाची दिशा जुळवण्यासाठी छपाईयंत्र पानाची दिशा बदला. दस्तऐवज पाने "
+"छपाईयंत्र पानाच्या मध्यभागी स्थीत होतील."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "पानाची हाताळणी"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "पान %d ची छपाई करण्यास अपयशी: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "वर सरकवा"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "खाली सरकवा"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "दृश्य वर सरकवा"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "दृश्य खाली सरकवा"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "दस्तऐवज"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "पानावर जा:"
+
+#: ../libview/ev-view-presentation.c:968
+#, fuzzy
+msgid "End of presentation. Click to exit."
+msgstr "प्रस्तुतीकरण समाप्त. बाहेर पडण्याकरीता Escape दाबा."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "पहील्या पानावर जा"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "मागील पानावर जा"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "पुढील पानावर जा"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "शेवटल्या पानावर जा"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "पानावर जा"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "शोधा"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "%s पानावर जा"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "फाइल “%s” वर स्थीत %s वर जा"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” फाइलकडे जा"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "%s सुरू करा"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "शोधा:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5207
+msgid "Find Pre_vious"
+msgstr "मागील शोधा(_v)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "आधी आढळलेल्या शोध अक्षरमाला"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5205
+msgid "Find Ne_xt"
+msgstr "पुढिल शोधा(_x)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "पुढली आढळणारी अक्षरमाला शोधा"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "केस सेंसिटीव्ह(_a)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "केस सेंसिटीव्ह शोध उलट करा"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+#, fuzzy
+msgid "Note"
+msgstr "काही नाही"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+#, fuzzy
+msgid "Comment"
+msgstr "दस्तऐवज"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+#, fuzzy
+msgid "Help"
+msgstr "मदत(_H)"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+#, fuzzy
+msgid "Unknown"
+msgstr "अपरिचीत त्रुटी"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+#, fuzzy
+msgid "Annotation Properties"
+msgstr "वैशिष्ट्ये"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+#, fuzzy
+msgid "Style:"
+msgstr "शिर्षक:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+#, fuzzy
+msgid "Open"
+msgstr "उघडा (_O)..."
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr ""
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "प्रस्तुतीकरण पध्दतीत कार्यरत आहे"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s दस्तऐवजाकरीता परवलीचा शब्द"
+
+#: ../shell/ev-convert-metadata.c:88
+#, fuzzy, c-format
+msgid "Converting %s"
+msgstr "%s सुरू करत आहे"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "नुकतेच वापरलेले दस्तऐवज उघडा"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "हा दस्तऐवज कुलूपबंद आहे आणि फक्त योग्य परवलीचा शब्द दिल्यावरच वाचले जाउ शकते."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "दस्तऐवजाचे कुलूप उघडा(_U)"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "परवलीचा शब्द द्या"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "परवलीचा शब्द आवश्यक"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "दस्तऐवज “%s” कुलूपबंद आहे आणि ते उघडण्यापूर्वी परवलीचा शब्दाची गरज आहे."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "परवलीचा शब्द(_P):"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "परवलीचा शब्द ताबडतोब विसरा (_i)"
+
+#: ../shell/ev-password-view.c:380
+#, fuzzy
+msgid "Remember password until you _log out"
+msgstr "वापरकर्ता बदले पर्यंत परवलीचा शब्द लक्षात ठेवा (_R)"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "नेहमीकरीता लक्षात ठेवा (_f)"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "वैशिष्ट्ये"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "सामान्य"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "फॉंट्स"
+
+#: ../shell/ev-properties-dialog.c:118
+#, fuzzy
+msgid "Document License"
+msgstr "दस्तऐवज दर्शक"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "फॉंट"
+
+#: ../shell/ev-properties-fonts.c:162
+#, fuzzy, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "फॉंटची माहिती गोळा केली जातेय... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr ""
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr ""
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+#, fuzzy
+msgid "Annotations"
+msgstr "ठिकाण:"
+
+#: ../shell/ev-sidebar-annotations.c:209
+#, fuzzy
+msgid "Text"
+msgstr "पुढिल"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr ""
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr ""
+
+#: ../shell/ev-sidebar-annotations.c:364
+#, fuzzy
+msgid "Document contains no annotations"
+msgstr "दस्तऐवजात पान नाही"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, fuzzy, c-format
+msgid "Page %d"
+msgstr "पान %s"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "जोडण्या"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "स्तर"
+
+#: ../shell/ev-sidebar-links.c:335
+#, fuzzy
+msgid "Print…"
+msgstr "मुद्रण"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "निर्देशिका"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "छोट्या प्रतीमा"
+
+#: ../shell/ev-window.c:855
+#, fuzzy, c-format
+msgid "Page %s — %s"
+msgstr "पान %s - %s"
+
+#: ../shell/ev-window.c:857
+#, c-format
+msgid "Page %s"
+msgstr "पान %s"
+
+#: ../shell/ev-window.c:1322
+msgid "The document contains no pages"
+msgstr "दस्तऐवजात पान नाही"
+
+#: ../shell/ev-window.c:1325
+msgid "The document contains only empty pages"
+msgstr "दस्तऐवजात फक्त रिकामे पान आढळले"
+
+#: ../shell/ev-window.c:1525 ../shell/ev-window.c:1691
+msgid "Unable to open document"
+msgstr "दस्तऐवज उघडण्यास अशक्य"
+
+#: ../shell/ev-window.c:1662
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "“%s” पासून दस्तऐवज लोड करत आहे"
+
+#: ../shell/ev-window.c:1804 ../shell/ev-window.c:2082
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "दस्तऐवज (%d%%) डाऊनलोड करत आहे"
+
+#: ../shell/ev-window.c:1837
+#, fuzzy
+msgid "Failed to load remote file."
+msgstr "दस्तऐवज पुन्हदाखल करण्यास अशक्य."
+
+#: ../shell/ev-window.c:2026
+#, c-format
+msgid "Reloading document from %s"
+msgstr "%s पासून दस्तऐवज पुन्ह दाखल करत आहे"
+
+#: ../shell/ev-window.c:2058
+msgid "Failed to reload document."
+msgstr "दस्तऐवज पुन्हदाखल करण्यास अशक्य."
+
+#: ../shell/ev-window.c:2213
+msgid "Open Document"
+msgstr "दस्तऐवज उघडा"
+
+# msgstr "दस्तावेज आखूड करुन दर्शवा"
+#: ../shell/ev-window.c:2511
+#, c-format
+msgid "Saving document to %s"
+msgstr "दस्तऐवज %s करीता साठवत आहे"
+
+#: ../shell/ev-window.c:2514
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "%s शी जुळवणी साठवत आहे"
+
+#: ../shell/ev-window.c:2517
+#, c-format
+msgid "Saving image to %s"
+msgstr "प्रतिमा %s करीता साठवत आहे"
+
+#: ../shell/ev-window.c:2561 ../shell/ev-window.c:2661
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "फाइल “%s” नुरूप साठवा."
+
+#: ../shell/ev-window.c:2592
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "दस्तऐवज (%d%%) अपलोड करत आहे"
+
+#: ../shell/ev-window.c:2596
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "जुळवणी (%d%%) अपलोड करत आहे"
+
+#: ../shell/ev-window.c:2600
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "प्रतिमा (%d%%) करत आहे"
+
+#: ../shell/ev-window.c:2724
+msgid "Save a Copy"
+msgstr "एक प्रत साठवा"
+
+#: ../shell/ev-window.c:3009
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d उर्वरीत कार्य रांगेत"
+msgstr[1] "%d उर्वरीत कार्य रांगेत"
+
+#: ../shell/ev-window.c:3122
+#, c-format
+msgid "Printing job “%s”"
+msgstr "कार्य “%s” ची छपाई करा"
+
+#: ../shell/ev-window.c:3336
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "छपाई कार्य “%s” पूर्णपणे बंद होण्यापूर्वी समाप्त होईपर्यंत थांबायचे?"
+
+#: ../shell/ev-window.c:3339
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "%d छपाई क्रिया सक्रीय आहे. छपाई कार्य पूर्णपणे बंद होण्यापूर्वी समाप्त होईपर्यंत थांबायचे?"
+
+#: ../shell/ev-window.c:3351
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "खिडकी बंद केल्यास, उर्वरीत छपाई कार्य छपाईकृत होणार नाही."
+
+#: ../shell/ev-window.c:3355
+msgid "Cancel _print and Close"
+msgstr "छपाई व बंद करा रद्द करा (_p)"
+
+#: ../shell/ev-window.c:3359
+msgid "Close _after Printing"
+msgstr "छपाई नंतर बंद करा (_a)"
+
+#: ../shell/ev-window.c:3949
+msgid "Toolbar Editor"
+msgstr "साधनपट्टी संपादक"
+
+#: ../shell/ev-window.c:4088
+msgid "There was an error displaying help"
+msgstr "मदत दर्शवितेवेळी त्रुटी आढळली"
+
+#: ../shell/ev-window.c:4300
+#, fuzzy, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"दस्तऐवजक प्रदर्शक.\n"
+"पॉप्लर %s (%s) वापरत आहे"
+
+#: ../shell/ev-window.c:4331
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4335
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4339
+#, fuzzy
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:4364
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4367
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 Evince लेखक"
+
+#: ../shell/ev-window.c:4373
+msgid "translator-credits"
+msgstr ""
+"Sameer N. Ingole <[email protected]>, 2006; राहुल भालेराव <b.rahul."
+"[email protected]>, 2006; संदिप शेडमाके <[email protected]>, 2008, 2009; "
+"संदिप शेडमाके <[email protected]>, 2009, 2010."
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4658
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d या पानावर मिळाले"
+msgstr[1] "%d या पानावर मिळालेत"
+
+#: ../shell/ev-window.c:4666
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% शोधायचे उरलेत"
+
+#: ../shell/ev-window.c:5173
+msgid "_File"
+msgstr "फाइल(_F)"
+
+#: ../shell/ev-window.c:5174
+msgid "_Edit"
+msgstr "संपादा(_E)"
+
+#: ../shell/ev-window.c:5175
+msgid "_View"
+msgstr "पहा(_V)"
+
+#: ../shell/ev-window.c:5176
+msgid "_Go"
+msgstr "जा(_G)"
+
+#: ../shell/ev-window.c:5177
+msgid "_Help"
+msgstr "मदत(_H)"
+
+#. File menu
+#: ../shell/ev-window.c:5180 ../shell/ev-window.c:5479
+#, fuzzy
+msgid "_Open…"
+msgstr "उघडा (_O)..."
+
+#: ../shell/ev-window.c:5181 ../shell/ev-window.c:5480
+msgid "Open an existing document"
+msgstr "अस्तित्वात असलेले दस्तऐवज उघडा"
+
+#: ../shell/ev-window.c:5183
+msgid "Op_en a Copy"
+msgstr "प्रत उघडा (_e)"
+
+#: ../shell/ev-window.c:5184
+msgid "Open a copy of the current document in a new window"
+msgstr "सद्याचे दस्तऐवजाची प्रत नविन चौकटीत उघडा"
+
+#: ../shell/ev-window.c:5186
+#, fuzzy
+msgid "_Save a Copy…"
+msgstr "एक प्रत साठवा"
+
+#: ../shell/ev-window.c:5187
+msgid "Save a copy of the current document"
+msgstr "सध्याच्या दस्तऐवजाची एक प्रत साठवा"
+
+#: ../shell/ev-window.c:5189
+#, fuzzy
+msgid "_Print…"
+msgstr "मुद्रण"
+
+#: ../shell/ev-window.c:5192
+msgid "P_roperties"
+msgstr "गुणधर्म (_r)"
+
+#: ../shell/ev-window.c:5200
+msgid "Select _All"
+msgstr "सर्व निवडा(_A)"
+
+#: ../shell/ev-window.c:5202
+#, fuzzy
+msgid "_Find…"
+msgstr "शोधा"
+
+#: ../shell/ev-window.c:5203
+msgid "Find a word or phrase in the document"
+msgstr "एखादा शब्द अथवा वाक्य दस्तऐवजात शोधा"
+
+#: ../shell/ev-window.c:5209
+msgid "T_oolbar"
+msgstr "साधनपट्टी(_o)"
+
+#: ../shell/ev-window.c:5211
+msgid "Rotate _Left"
+msgstr "डावीकडे फिरवा(_L)"
+
+#: ../shell/ev-window.c:5213
+msgid "Rotate _Right"
+msgstr "उजवीकडे फिरवा(_R)"
+
+#: ../shell/ev-window.c:5224
+msgid "_Reload"
+msgstr "पुन्हा वाचा(_R)"
+
+#: ../shell/ev-window.c:5225
+msgid "Reload the document"
+msgstr "दस्तऐवज पुन्हा वाचा"
+
+#: ../shell/ev-window.c:5228
+msgid "Auto_scroll"
+msgstr "आपोआप हलवा (_s)"
+
+#: ../shell/ev-window.c:5238
+msgid "_First Page"
+msgstr "पहीले पान(_F)"
+
+#: ../shell/ev-window.c:5239
+msgid "Go to the first page"
+msgstr "पहील्या पानावर जा"
+
+#: ../shell/ev-window.c:5241
+msgid "_Last Page"
+msgstr "शेवटले पान(_L)"
+
+#: ../shell/ev-window.c:5242
+msgid "Go to the last page"
+msgstr "शेवटल्या पानावर जा"
+
+#. Help menu
+#: ../shell/ev-window.c:5246
+msgid "_Contents"
+msgstr "समाविष्टे(_C)"
+
+#: ../shell/ev-window.c:5249
+msgid "_About"
+msgstr "एव्हींस बद्दल(_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5253
+msgid "Leave Fullscreen"
+msgstr "फुलस्क्रीन सोडा"
+
+# msgstr "पूर्ण मोठ्यापडदा स्थितीत सोडा"
+#: ../shell/ev-window.c:5254
+msgid "Leave fullscreen mode"
+msgstr "पुर्णपडदा पध्दती सोडा"
+
+#: ../shell/ev-window.c:5256
+msgid "Start Presentation"
+msgstr "प्रस्तुतीकरण सुरू करा"
+
+#: ../shell/ev-window.c:5257
+msgid "Start a presentation"
+msgstr "प्रस्तुतीकरण सुरू करा"
+
+#. View Menu
+#: ../shell/ev-window.c:5316
+msgid "_Toolbar"
+msgstr "साधनपट्टी(_T)"
+
+#: ../shell/ev-window.c:5317
+msgid "Show or hide the toolbar"
+msgstr "साधनपट्टी दाखवा अथवा लपवा"
+
+#: ../shell/ev-window.c:5319
+msgid "Side _Pane"
+msgstr "बाजुची फळी(_P)"
+
+#: ../shell/ev-window.c:5320
+msgid "Show or hide the side pane"
+msgstr "बाजुची फळी दाखवा अथवा लपवा"
+
+#: ../shell/ev-window.c:5322
+msgid "_Continuous"
+msgstr "सतत (_C)"
+
+#: ../shell/ev-window.c:5323
+msgid "Show the entire document"
+msgstr "संपूर्ण दस्तऐवज दाखवा"
+
+#: ../shell/ev-window.c:5325
+msgid "_Dual"
+msgstr "दुहेरी(_D)"
+
+#: ../shell/ev-window.c:5326
+msgid "Show two pages at once"
+msgstr "दोन पाने एकदम दाखवा"
+
+#: ../shell/ev-window.c:5328
+msgid "_Fullscreen"
+msgstr "पुर्णपटल(_F)"
+
+#: ../shell/ev-window.c:5329
+msgid "Expand the window to fill the screen"
+msgstr "पटल पूर्णपणे व्यापण्याकरीता खिडकीचे प्रसरण करा"
+
+#: ../shell/ev-window.c:5331
+msgid "Pre_sentation"
+msgstr "प्रस्तुतीकरण (_s)"
+
+#: ../shell/ev-window.c:5332
+msgid "Run document as a presentation"
+msgstr "दस्तऐवज प्रस्तुतीकरण म्हणुन चालवा"
+
+#: ../shell/ev-window.c:5340
+msgid "_Inverted Colors"
+msgstr ""
+
+#: ../shell/ev-window.c:5341
+msgid "Show page contents with the colors inverted"
+msgstr ""
+
+#. Links
+#: ../shell/ev-window.c:5349
+msgid "_Open Link"
+msgstr "दुवा उघडा(_O)"
+
+#: ../shell/ev-window.c:5351
+msgid "_Go To"
+msgstr "इथे जा(_G)"
+
+#: ../shell/ev-window.c:5353
+msgid "Open in New _Window"
+msgstr "नविन चैकटीत उघडा (_W)"
+
+#: ../shell/ev-window.c:5355
+msgid "_Copy Link Address"
+msgstr "लिंक पत्ताचे प्रत बनवा (_C)"
+
+#: ../shell/ev-window.c:5357
+#, fuzzy
+msgid "_Save Image As…"
+msgstr "प्रतिमा संचयीत करा (_S)..."
+
+#: ../shell/ev-window.c:5359
+msgid "Copy _Image"
+msgstr "प्रतिमा उघडा (_I)"
+
+#: ../shell/ev-window.c:5361
+msgid "Annotation Properties…"
+msgstr ""
+
+#: ../shell/ev-window.c:5366
+#, fuzzy
+msgid "_Open Attachment"
+msgstr "जोडणी संचयीत करा"
+
+#: ../shell/ev-window.c:5368
+#, fuzzy
+msgid "_Save Attachment As…"
+msgstr "जोडणी संचयीत करा"
+
+#: ../shell/ev-window.c:5453
+msgid "Zoom"
+msgstr "मोठे/लहान करा"
+
+#: ../shell/ev-window.c:5455
+msgid "Adjust the zoom level"
+msgstr "झूम स्थिती सुस्थीत करा"
+
+#: ../shell/ev-window.c:5465
+msgid "Navigation"
+msgstr "संचार"
+
+#: ../shell/ev-window.c:5467
+msgid "Back"
+msgstr "मागे"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5470
+msgid "Move across visited pages"
+msgstr "भेट दिलेले पानांशी संचार करा"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5500
+msgid "Previous"
+msgstr "मागील"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5505
+msgid "Next"
+msgstr "पुढिल"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5509
+msgid "Zoom In"
+msgstr "मोठे करा"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5513
+msgid "Zoom Out"
+msgstr "लहान करा"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5521
+msgid "Fit Width"
+msgstr "रुंदीत बसवा"
+
+#: ../shell/ev-window.c:5682 ../shell/ev-window.c:5699
+msgid "Unable to launch external application."
+msgstr "बाहेरील अनुप्रयोग प्रक्षेपीत करणे अशक्य."
+
+#: ../shell/ev-window.c:5756
+msgid "Unable to open external link"
+msgstr "बाहेरील जोडणी उघडण्यास अपयशी"
+
+#: ../shell/ev-window.c:5923
+msgid "Couldn't find appropriate format to save image"
+msgstr "प्रतिमा संचयीत करण्याकरीता योग्य प्रकार आढळला नाही"
+
+#: ../shell/ev-window.c:5965
+msgid "The image could not be saved."
+msgstr "प्रतिमा संचयीत करु शकत नाही."
+
+#: ../shell/ev-window.c:5997
+msgid "Save Image"
+msgstr "प्रतिमा संचयीत करा"
+
+#: ../shell/ev-window.c:6125
+msgid "Unable to open attachment"
+msgstr "जोडणी उघडण्यास असमर्थ"
+
+#: ../shell/ev-window.c:6178
+msgid "The attachment could not be saved."
+msgstr "जोडणी सुरक्षीत करु शकत नाही."
+
+#: ../shell/ev-window.c:6223
+msgid "Save Attachment"
+msgstr "जोडणी संचयीत करा"
+
+#: ../shell/ev-window-title.c:162
+#, fuzzy, c-format
+msgid "%s — Password Required"
+msgstr "%s - परवलीचा शब्द आवश्यक"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "विस्तार द्वारे"
+
+#: ../shell/main.c:72 ../shell/main.c:277
+msgid "MATE Document Viewer"
+msgstr "MATE दस्तऐवज दर्शक"
+
+#: ../shell/main.c:80
+#, fuzzy
+msgid "The page label of the document to display."
+msgstr "दाखविण्याजोगी दस्तऐवजाचे पान."
+
+#: ../shell/main.c:80
+msgid "PAGE"
+msgstr "पान"
+
+#: ../shell/main.c:81
+#, fuzzy
+msgid "The page number of the document to display."
+msgstr "दाखविण्याजोगी दस्तऐवजाचे पान."
+
+#: ../shell/main.c:81
+msgid "NUMBER"
+msgstr ""
+
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr "पुर्णपटल स्थितीत एव्हींस चालवा"
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr "प्रस्तुतीकरण स्थितीत एव्हींस चालवा"
+
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr "एव्हींस पुर्वदर्शक म्हणुन चालवा"
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr "दस्तऐवजात शोधायचे एखादे शब्द किंवा वाक्य"
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "अक्षरमाळा"
+
+#: ../shell/main.c:89
+#, fuzzy
+msgid "[FILE…]"
+msgstr "[फाइल...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+#, fuzzy
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"द्विस्थीती पर्याय उपलब्ध, खरे निवडल्यास छोट्या प्रतीमा तयार केल्या जातात आणि खोटे "
+"छोट्या प्रतीमा तयार करण्यास प्रतिबंध करते"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF दस्तऐवजांच्या छोट्या प्रतीमा करा"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF दस्तऐवजांच्या छोट्या प्रतीमा करण्याचा आदेश"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+#, fuzzy
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF दस्तऐवज थंबनेलर करीताचे वैध आदेश व तर्क. अधिक माहिती करीता नॉटिलस थंबनेलर दस्तऐवज "
+"पहा."
+
diff --git a/po/ms.po b/po/ms.po
new file mode 100644
index 00000000..4b150bc9
--- /dev/null
+++ b/po/ms.po
@@ -0,0 +1,1680 @@
+# Malay translation for evince.
+# Copyright (C) 2010 evince's COPYRIGHT HOLDER
+# This file is distributed under the same license as the evince package.
+# Umarzuki Bin Mochlis Moktar <[email protected]>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-02-18 17:07+0000\n"
+"PO-Revision-Date: 2010-02-28 22:05+0730\n"
+"Last-Translator: Umarzuki bin Mochlis Moktar <[email protected]>\n"
+"Language-Team: Malay <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:183
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Bukan jenis MIME buku komik: %s"
+
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Jenis Mime Tidak Diketahui"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "Fail telah rosak"
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "Tiada fail didalam arkib"
+
+#: ../backend/comics/comics-document.c:474
+#, fuzzy, c-format
+msgid "No images found in archive %s"
+msgstr ""
+"Tiada fail faks ditemui:\n"
+"%1\n"
+
+#: ../backend/comics/comics-document.c:718
+#, fuzzy, c-format
+msgid "There was an error deleting “%s”."
+msgstr ""
+"Terdapat rakat memapar bantuan: \n"
+"%s"
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr "Ralat %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Buku Komik"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "Format dokumen DjVu telah salah"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid "The document is composed of several files. One or more of these files cannot be accessed."
+msgstr ""
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Dokument-dokumen DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Format dokumen DVI telah salah"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Dokumen-dokumen DVI"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr ""
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "Ya"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "Tidak"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "Jenis 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "Jenis 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "Jenis 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "Jenis 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "Jenis 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "Jenis font tidak diketahui"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "Tiada nama"
+
+#: ../backend/pdf/ev-poppler.cc:996
+#, fuzzy
+msgid "Embedded subset"
+msgstr "Dokumen terbenam"
+
+#: ../backend/pdf/ev-poppler.cc:998
+#, fuzzy
+msgid "Embedded"
+msgstr "Dokumen terbenam"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+#, fuzzy
+msgid "Not embedded"
+msgstr "Dokumen terbenam"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+#, fuzzy
+msgid "PDF Documents"
+msgstr "Dokumen/Diagram"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Dokumen tidak sah"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+#, fuzzy
+msgid "Impress Slides"
+msgstr "&Lengahkan antara slaid:"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Tiada ralat"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Memori tidak mencukupi"
+
+#: ../backend/impress/zip.c:59
+#, fuzzy
+msgid "Cannot find ZIP signature"
+msgstr "Tidak dapat mencari testregression bolehlaksana."
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Fail ZIP tidak sah"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr ""
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Gagal membuka file"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Tidak dapat data baca dari fail"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Tidak jumpa fail di dalam arkib ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Ralat yang tidak diketahui"
+
+#: ../backend/ps/ev-spectre.c:102
+#, fuzzy, c-format
+msgid "Failed to load document “%s”"
+msgstr "Ralat: gagal untuk memuatkan parameter"
+
+#: ../backend/ps/ev-spectre.c:135
+#, fuzzy, c-format
+msgid "Failed to save document “%s”"
+msgstr "Tidak dapat menyimpan maklumat dokumen."
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+#, fuzzy
+msgid "PostScript Documents"
+msgstr "Dokumen/Diagram"
+
+#: ../libdocument/ev-attachment.c:304
+#: ../libdocument/ev-attachment.c:325
+#, fuzzy, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Tidak dapat menyimpan fail sumber:"
+
+#: ../libdocument/ev-attachment.c:373
+#, fuzzy, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Tak dapat membuka path fail '%s': %s\n"
+
+#: ../libdocument/ev-attachment.c:408
+#, fuzzy, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Tak dapat membuka path fail '%s': %s\n"
+
+#: ../libdocument/ev-document-factory.c:168
+#, fuzzy, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Jenis imej '%s'tidak disokong"
+
+#: ../libdocument/ev-document-factory.c:359
+#, fuzzy
+msgid "All Documents"
+msgstr "Tutup semua dokumen yang dibuka."
+
+#: ../libdocument/ev-document-factory.c:391
+#, fuzzy
+msgid "All Files"
+msgstr "Semua Fail"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, fuzzy, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Tidak dapat mencipta fail sementara"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, fuzzy, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Lokasi direktori sementara untuk digunakan"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, fuzzy, c-format
+msgid "File is not a valid .desktop file"
+msgstr "'%s' bukan fail BMP yang sah"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, fuzzy, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "%s: fail `%s' tidak mempunyai versi disokong %d\n"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, fuzzy, c-format
+msgid "Starting %s"
+msgstr "** Memulakan %1 **"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, fuzzy, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "%s: pilihan `%s' adalah kabur\n"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, fuzzy, c-format
+msgid "Not a launchable item"
+msgstr "<qt>Anda belum memilih butiran: <b>%1</b>.</qt>"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+#, fuzzy
+msgid "Disable connection to session manager"
+msgstr "Matikan hubungan kepada pengurus sesi"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Nyatakan fail yang mengandungi tetapan tersimpan"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+#: ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "FAIL"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+#, fuzzy
+msgid "Specify session management ID"
+msgstr "Tentukan ID pengurusan sesi"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+#, fuzzy
+msgid "Session management options:"
+msgstr "Tentukan ID pengurusan sesi"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+#, fuzzy
+msgid "Show session management options"
+msgstr "Tentukan ID pengurusan sesi"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "Tunjuk “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "_Alih ke Bar Alatan"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+#, fuzzy
+msgid "Move the selected item on the toolbar"
+msgstr "Pindah teks atau item dipilih ke papan klip"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "Buang Da_ripada Bar Alatan"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+#, fuzzy
+msgid "Remove the selected item from the toolbar"
+msgstr "Buang aplikasi dipilih daripada senarai."
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "Pa_dam Bar Alatan"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+#, fuzzy
+msgid "Remove the selected toolbar"
+msgstr "&Alih Keluar Hubungan yang Dipilih"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Pemisah"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+#, fuzzy
+msgid "Running in presentation mode"
+msgstr "Opsyen untuk Mod Persembahan"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48
+#: ../shell/ev-window.c:5301
+msgid "Best Fit"
+msgstr "Sesuai Muat"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Muat Ke Lebar"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1
+#: ../shell/ev-window.c:4183
+#: ../shell/ev-window-title.c:149
+#: ../shell/main.c:282
+#, c-format
+msgid "Document Viewer"
+msgstr "Pemapar Dokumen"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Paparkan "
+
+#: ../data/evince.schemas.in.h:1
+#, fuzzy
+msgid "Override document restrictions"
+msgstr "Dokumen Perkataan Applixware"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "Hapuskan Fail Sementara"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "Cetak fail tetapan"
+
+#: ../previewer/ev-previewer.c:143
+#: ../previewer/ev-previewer.c:177
+msgid "MATE Document Previewer"
+msgstr "Prapapar Dokumen MATE"
+
+#: ../previewer/ev-previewer-window.c:95
+#: ../shell/ev-window.c:2995
+msgid "Failed to print document"
+msgstr "Gagal mencetak dokumen"
+
+#: ../previewer/ev-previewer-window.c:209
+#, fuzzy, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Pemacu untuk pencetak <b>%1</b> tidak ditemui."
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:253
+#: ../shell/ev-window.c:5050
+msgid "_Previous Page"
+msgstr "_Halaman Terdahulu"
+
+#: ../previewer/ev-previewer-window.c:254
+#: ../shell/ev-window.c:5051
+msgid "Go to the previous page"
+msgstr "Pergi ke halaman terdahulu"
+
+#: ../previewer/ev-previewer-window.c:256
+#: ../shell/ev-window.c:5053
+msgid "_Next Page"
+msgstr "Halaman Seterus_nya"
+
+#: ../previewer/ev-previewer-window.c:257
+#: ../shell/ev-window.c:5054
+msgid "Go to the next page"
+msgstr "Pergi ke halaman seterusnya"
+
+#: ../previewer/ev-previewer-window.c:260
+#: ../shell/ev-window.c:5037
+#, fuzzy
+msgid "Enlarge the document"
+msgstr "Dokumen AbiWord"
+
+#: ../previewer/ev-previewer-window.c:263
+#: ../shell/ev-window.c:5040
+#, fuzzy
+msgid "Shrink the document"
+msgstr "Dokumen AbiWord"
+
+#: ../previewer/ev-previewer-window.c:266
+#: ../libview/ev-print-operation.c:1315
+msgid "Print"
+msgstr "Cetak"
+
+#: ../previewer/ev-previewer-window.c:267
+#: ../shell/ev-window.c:5008
+msgid "Print this document"
+msgstr "Cetak dokumen ini"
+
+#: ../previewer/ev-previewer-window.c:273
+#: ../shell/ev-window.c:5152
+msgid "_Best Fit"
+msgstr "Sesuai _Muat"
+
+#: ../previewer/ev-previewer-window.c:274
+#: ../shell/ev-window.c:5153
+#, fuzzy
+msgid "Make the current document fill the window"
+msgstr "Tutup tetingkap ini atau dokumen"
+
+#: ../previewer/ev-previewer-window.c:276
+#: ../shell/ev-window.c:5155
+msgid "Fit Page _Width"
+msgstr "Muat Ke _Lebar"
+
+#: ../previewer/ev-previewer-window.c:277
+#: ../shell/ev-window.c:5156
+msgid "Make the current document fill the window width"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:460
+#: ../shell/ev-window.c:5223
+msgid "Page"
+msgstr "Halaman"
+
+#: ../previewer/ev-previewer-window.c:461
+#: ../shell/ev-window.c:5224
+#, fuzzy
+msgid "Select Page"
+msgstr "Pilih Page Down"
+
+#: ../properties/ev-properties-main.c:116
+#, fuzzy
+msgid "Document"
+msgstr "Document"
+
+#: ../properties/ev-properties-view.c:60
+#, fuzzy
+msgid "Title:"
+msgstr "Tajuk:"
+
+#: ../properties/ev-properties-view.c:61
+#, fuzzy
+msgid "Location:"
+msgstr "Lokasi:"
+
+#: ../properties/ev-properties-view.c:62
+#, fuzzy
+msgid "Subject:"
+msgstr "- Tajuk: "
+
+#: ../properties/ev-properties-view.c:63
+#, fuzzy
+msgid "Author:"
+msgstr "Pengarang:"
+
+#: ../properties/ev-properties-view.c:64
+#, fuzzy
+msgid "Keywords:"
+msgstr "Kata kunci"
+
+#: ../properties/ev-properties-view.c:65
+#, fuzzy
+msgid "Producer:"
+msgstr "Pengeluar"
+
+#: ../properties/ev-properties-view.c:66
+#, fuzzy
+msgid "Creator:"
+msgstr "Pencipta"
+
+#: ../properties/ev-properties-view.c:67
+#, fuzzy
+msgid "Created:"
+msgstr "Dicipta:"
+
+#: ../properties/ev-properties-view.c:68
+#, fuzzy
+msgid "Modified:"
+msgstr "Diubahsuai:"
+
+#: ../properties/ev-properties-view.c:69
+#, fuzzy
+msgid "Number of Pages:"
+msgstr "Bilangan halaman:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Dioptimumkan:"
+
+#: ../properties/ev-properties-view.c:71
+#, fuzzy
+msgid "Format:"
+msgstr "Format"
+
+#: ../properties/ev-properties-view.c:72
+#, fuzzy
+msgid "Security:"
+msgstr "Keselamatan"
+
+#: ../properties/ev-properties-view.c:73
+#, fuzzy
+msgid "Paper Size:"
+msgstr "_Saiz kertas:"
+
+#: ../properties/ev-properties-view.c:211
+#: ../libview/ev-print-operation.c:1896
+#, fuzzy
+msgid "None"
+msgstr "Tiada"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+#, fuzzy
+msgid "default:mm"
+msgstr "_URL piawai:"
+
+#: ../properties/ev-properties-view.c:284
+#, fuzzy, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f kb/s"
+
+#: ../properties/ev-properties-view.c:288
+#, fuzzy, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f KB"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, fuzzy, c-format
+msgid "%s, Portrait (%s)"
+msgstr "Potret"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, fuzzy, c-format
+msgid "%s, Landscape (%s)"
+msgstr "Landskap"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d of %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "dari %d"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:341
+#, fuzzy
+msgid "Preparing to print…"
+msgstr "Bersedia untuk memuat naik pemacu ke hos %1"
+
+#: ../libview/ev-print-operation.c:343
+msgid "Finishing…"
+msgstr "Menyudahkan..."
+
+#: ../libview/ev-print-operation.c:345
+#, fuzzy, c-format
+msgid "Printing page %d of %d…"
+msgstr "Saiz Halaman dan Kualiti Pencetakan"
+
+#: ../libview/ev-print-operation.c:1169
+msgid "Printing is not supported on this printer."
+msgstr "Mencetak tidak disokong oleh pencetak ini."
+
+#: ../libview/ev-print-operation.c:1234
+#, fuzzy
+msgid "Invalid page selection"
+msgstr "Pemilihan Warna Dialog"
+
+#: ../libview/ev-print-operation.c:1235
+#, fuzzy
+msgid "Warning"
+msgstr "Amaran"
+
+#: ../libview/ev-print-operation.c:1237
+#, fuzzy
+msgid "Your print range selection does not include any pages"
+msgstr "Pilihan julat cetakan tidak termasuk mana-mana laman "
+
+#: ../libview/ev-print-operation.c:1891
+#, fuzzy
+msgid "Page Scaling:"
+msgstr "Laman HTML"
+
+#: ../libview/ev-print-operation.c:1897
+#, fuzzy
+msgid "Shrink to Printable Area"
+msgstr "Had Luas Ganda (bagi %1)"
+
+#: ../libview/ev-print-operation.c:1898
+#, fuzzy
+msgid "Fit to Printable Area"
+msgstr "Had Luas Ganda (bagi %1)"
+
+#: ../libview/ev-print-operation.c:1901
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as required to fit the printable area of the printer page.\n"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1913
+#, fuzzy
+msgid "Auto Rotate and Center"
+msgstr "Putar di sekeling paksi X dan Y"
+
+#: ../libview/ev-print-operation.c:1916
+msgid "Rotate printer page orientation of each page to match orientation of each document page. Document pages will be centered within the printer page."
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1921
+msgid "Select page size using document page size"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1923
+msgid "When enabled, each page will be printed on the same size paper as the document page."
+msgstr ""
+
+#: ../libview/ev-print-operation.c:2005
+#, fuzzy
+msgid "Page Handling"
+msgstr "Pengendalian Ralat"
+
+#: ../libview/ev-jobs.c:1434
+#, fuzzy, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Skalakan cetakan kepada saiz halaman"
+
+#: ../libview/ev-view-accessible.c:41
+#, fuzzy
+msgid "Scroll Up"
+msgstr "Skrol Atas"
+
+#: ../libview/ev-view-accessible.c:42
+#, fuzzy
+msgid "Scroll Down"
+msgstr "Skrol Bawah"
+
+#: ../libview/ev-view-accessible.c:48
+#, fuzzy
+msgid "Scroll View Up"
+msgstr "Skrol Baris Atas"
+
+#: ../libview/ev-view-accessible.c:49
+#, fuzzy
+msgid "Scroll View Down"
+msgstr "Skrol Baris ke Bawah"
+
+#: ../libview/ev-view-accessible.c:533
+#, fuzzy
+msgid "Document View"
+msgstr "Lihat Maklumat Dokumen"
+
+#: ../libview/ev-view-presentation.c:669
+#, fuzzy
+msgid "Jump to page:"
+msgstr "&Muat Halaman"
+
+#: ../libview/ev-view-presentation.c:979
+#, fuzzy
+msgid "End of presentation. Click to exit."
+msgstr "Persembahan tamat. Klik untuk keluar."
+
+#: ../libview/ev-view.c:1724
+#, fuzzy
+msgid "Go to first page"
+msgstr "Alih ke halaman pertama dokumen"
+
+#: ../libview/ev-view.c:1726
+#, fuzzy
+msgid "Go to previous page"
+msgstr "Pergi ke artikel sebelumnya"
+
+#: ../libview/ev-view.c:1728
+#, fuzzy
+msgid "Go to next page"
+msgstr "Pergi ke artikel seterusnya"
+
+#: ../libview/ev-view.c:1730
+#, fuzzy
+msgid "Go to last page"
+msgstr "Alih ke halaman terakhir dokument"
+
+#: ../libview/ev-view.c:1732
+#, fuzzy
+msgid "Go to page"
+msgstr "&Pergi ke Halaman..."
+
+#: ../libview/ev-view.c:1734
+#, fuzzy
+msgid "Find"
+msgstr "Cari"
+
+#: ../libview/ev-view.c:1762
+#, fuzzy, c-format
+msgid "Go to page %s"
+msgstr "&Pergi ke Halaman..."
+
+#: ../libview/ev-view.c:1768
+#, fuzzy, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Keterangan fail untuk pencetak IOR pada"
+
+#: ../libview/ev-view.c:1771
+#, fuzzy, c-format
+msgid "Go to file “%s”"
+msgstr "Pergi ke pelayar fail"
+
+#: ../libview/ev-view.c:1779
+#, fuzzy, c-format
+msgid "Launch %s"
+msgstr "Lancar &Kmail"
+
+#: ../libview/ev-view.c:3926
+#: ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Memuatkan..."
+
+#: ../shell/eggfindbar.c:320
+#, fuzzy
+msgid "Find:"
+msgstr "cari"
+
+#: ../shell/eggfindbar.c:329
+#: ../shell/ev-window.c:5025
+#, fuzzy
+msgid "Find Pre_vious"
+msgstr "Cari &Sebelumnya"
+
+#: ../shell/eggfindbar.c:333
+#, fuzzy
+msgid "Find previous occurrence of the search string"
+msgstr "Panggil semula rentetan cari/ganti terdahulu"
+
+#: ../shell/eggfindbar.c:337
+#: ../shell/ev-window.c:5023
+#, fuzzy
+msgid "Find Ne_xt"
+msgstr "Cari _lagi"
+
+#: ../shell/eggfindbar.c:341
+#, fuzzy
+msgid "Find next occurrence of the search string"
+msgstr "Panggil semula rentetan cari/ganti seterusnya"
+
+#: ../shell/eggfindbar.c:348
+#, fuzzy
+msgid "C_ase Sensitive"
+msgstr "Huruf bes&ar/kecil berpengaruh"
+
+#: ../shell/eggfindbar.c:351
+#, fuzzy
+msgid "Toggle case sensitive search"
+msgstr "Toggle pencarian case sensitif"
+
+#: ../shell/ev-keyring.c:102
+#, fuzzy, c-format
+msgid "Password for document %s"
+msgstr "Katalaluan untuk root:"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Menukarkan %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, fuzzy, c-format
+msgid "%d of %d documents converted"
+msgstr "Dokumen/Diagram"
+
+#: ../shell/ev-convert-metadata.c:164
+#: ../shell/ev-convert-metadata.c:179
+#, fuzzy
+msgid "Converting metadata"
+msgstr "Downloading Metadata"
+
+#: ../shell/ev-convert-metadata.c:185
+msgid "The metadata format used by Evince has changed, and hence it needs to be migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+
+#: ../shell/ev-open-recent-action.c:72
+#, fuzzy
+msgid "Open a recently used document"
+msgstr "Buka dalam Dokumen Baru"
+
+#: ../shell/ev-password-view.c:144
+msgid "This document is locked and can only be read by entering the correct password."
+msgstr ""
+
+#: ../shell/ev-password-view.c:153
+#: ../shell/ev-password-view.c:269
+#, fuzzy
+msgid "_Unlock Document"
+msgstr "Dokumen AbiWord"
+
+#: ../shell/ev-password-view.c:261
+#, fuzzy
+msgid "Enter password"
+msgstr "Masukkan Kata Laluan"
+
+#: ../shell/ev-password-view.c:301
+#, fuzzy
+msgid "Password required"
+msgstr "Antaramuka diperkukan"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+
+#: ../shell/ev-password-view.c:332
+#, fuzzy
+msgid "_Password:"
+msgstr "_Katalaluan: "
+
+#: ../shell/ev-password-view.c:365
+#, fuzzy
+msgid "Forget password _immediately"
+msgstr "Kirim faks segera"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _log out"
+msgstr "Ingat katalaluan sehingga anda _log keluar"
+
+#: ../shell/ev-password-view.c:389
+#, fuzzy
+msgid "Remember _forever"
+msgstr "Na&fikan Selamanya"
+
+#: ../shell/ev-properties-dialog.c:58
+#, fuzzy
+msgid "Properties"
+msgstr "Ciri-ciri"
+
+#: ../shell/ev-properties-dialog.c:92
+#, fuzzy
+msgid "General"
+msgstr "Umum"
+
+#: ../shell/ev-properties-dialog.c:102
+#, fuzzy
+msgid "Fonts"
+msgstr "Fon"
+
+#: ../shell/ev-properties-dialog.c:115
+#, fuzzy
+msgid "Document License"
+msgstr "Persetujuan &Lesen"
+
+#: ../shell/ev-properties-fonts.c:135
+#, fuzzy
+msgid "Font"
+msgstr "Font"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Mengumpulkan maklumat font... %3d%%"
+
+#: ../shell/ev-properties-license.c:138
+#, fuzzy
+msgid "Usage terms"
+msgstr "Penggunaan: %s <dir>\n"
+
+#: ../shell/ev-properties-license.c:144
+#, fuzzy
+msgid "Text License"
+msgstr "Persetujuan &Lesen"
+
+#: ../shell/ev-properties-license.c:150
+#, fuzzy
+msgid "Further Information"
+msgstr "Maklumat/Kalendar"
+
+#: ../shell/ev-sidebar-attachments.c:712
+#, fuzzy
+msgid "Attachments"
+msgstr "&Lampiran"
+
+#: ../shell/ev-sidebar-layers.c:401
+#, fuzzy
+msgid "Layers"
+msgstr "Lapisan"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Cetak..."
+
+#: ../shell/ev-sidebar-links.c:750
+#, fuzzy
+msgid "Index"
+msgstr "Indeks"
+
+#: ../shell/ev-sidebar-thumbnails.c:956
+#, fuzzy
+msgid "Thumbnails"
+msgstr "Mencipta thumbnails"
+
+#: ../shell/ev-window.c:829
+#, fuzzy, c-format
+msgid "Page %s — %s"
+msgstr "Halaman"
+
+#: ../shell/ev-window.c:831
+#, fuzzy, c-format
+msgid "Page %s"
+msgstr "Halaman"
+
+#: ../shell/ev-window.c:1275
+#, fuzzy
+msgid "The document contains no pages"
+msgstr "%s:%d tidak mengandungi nama method."
+
+#: ../shell/ev-window.c:1278
+msgid "The document contains only empty pages"
+msgstr "Dokumen hanya mengandungi halaman kosong"
+
+#: ../shell/ev-window.c:1472
+#: ../shell/ev-window.c:1638
+#, fuzzy
+msgid "Unable to open document"
+msgstr "Tak dapat Membuka Fail"
+
+#: ../shell/ev-window.c:1609
+#, fuzzy, c-format
+msgid "Loading document from “%s”"
+msgstr "Memuatkan Kumpulan Dari LDAP"
+
+#: ../shell/ev-window.c:1751
+#: ../shell/ev-window.c:2028
+#, fuzzy, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Dokumen AbiWord"
+
+#: ../shell/ev-window.c:1784
+#, fuzzy
+msgid "Failed to load remote file."
+msgstr "Tidak dapat menyimpan fail jauh."
+
+#: ../shell/ev-window.c:1972
+#, fuzzy, c-format
+msgid "Reloading document from %s"
+msgstr "Muat semula dokumen semasa dari cakera."
+
+#: ../shell/ev-window.c:2004
+#, fuzzy
+msgid "Failed to reload document."
+msgstr "Ulangmuat dokumen semasa yang dipaparkan"
+
+#: ../shell/ev-window.c:2159
+#, fuzzy
+msgid "Open Document"
+msgstr "Dokumen yang hendak dibuka"
+
+#: ../shell/ev-window.c:2423
+#, fuzzy, c-format
+msgid "Saving document to %s"
+msgstr "Dokumen yang hendak dibuka"
+
+#: ../shell/ev-window.c:2426
+#, fuzzy, c-format
+msgid "Saving attachment to %s"
+msgstr "Ralat semasa menyimpan ke '%1'."
+
+#: ../shell/ev-window.c:2429
+#, fuzzy, c-format
+msgid "Saving image to %s"
+msgstr "Klip ke imej"
+
+#: ../shell/ev-window.c:2473
+#: ../shell/ev-window.c:2573
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Fail tidak dapat disimpan sebagai “%s”."
+
+#: ../shell/ev-window.c:2504
+#, fuzzy, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Dokumen AbiWord"
+
+#: ../shell/ev-window.c:2508
+#, fuzzy, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Lampiran bawah"
+
+#: ../shell/ev-window.c:2512
+#, fuzzy, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Imej AutoCAD"
+
+#: ../shell/ev-window.c:2634
+#, fuzzy
+msgid "Save a Copy"
+msgstr "Simpan Salinan Imej"
+
+#: ../shell/ev-window.c:2939
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d kerja tetangguh dalam giliran"
+
+#: ../shell/ev-window.c:3052
+#, fuzzy, c-format
+msgid "Printing job “%s”"
+msgstr "Jenis kerja tidak diketahui %u"
+
+#: ../shell/ev-window.c:3255
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Tunggu hingga kerja mencetak “%s” selesai sebelum tutup?"
+
+#: ../shell/ev-window.c:3258
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+
+#: ../shell/ev-window.c:3270
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+
+#: ../shell/ev-window.c:3274
+#, fuzzy
+msgid "Cancel _print and Close"
+msgstr ""
+"Cetak dan\n"
+"Simpan Seting"
+
+#: ../shell/ev-window.c:3278
+#, fuzzy
+msgid "Close _after Printing"
+msgstr "Mod penjimatan tenaga selepas pencetakan"
+
+#: ../shell/ev-window.c:3836
+#, fuzzy
+msgid "Toolbar Editor"
+msgstr "Editor GFlare"
+
+#: ../shell/ev-window.c:3968
+#, fuzzy
+msgid "There was an error displaying help"
+msgstr ""
+"Terdapat rakat memapar bantuan: \n"
+"%s"
+
+#: ../shell/ev-window.c:4179
+#, fuzzy, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr "Pelungsur bantuan default"
+
+#: ../shell/ev-window.c:4210
+msgid "Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:4214
+msgid "Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:4218
+msgid "You should have received a copy of the GNU General Public License along with Evince; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr "anda sepatutunya telah menerima satu salinan GNU General Public License bersama Evince; jika tidak, tulis kepada Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:4243
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4246
+#, fuzzy
+msgid "© 1996–2009 The Evince authors"
+msgstr "Senarai penulis program"
+
+#: ../shell/ev-window.c:4252
+#, fuzzy
+msgid "translator-credits"
+msgstr "Hasbullah Bin Pit <[email protected]>, Merlimau."
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4503
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d dijumpai pada halaman ini"
+
+#: ../shell/ev-window.c:4511
+#, fuzzy, c-format
+msgid "%3d%% remaining to search"
+msgstr "Tetapkan indeks untuk memulakan carian"
+
+#: ../shell/ev-window.c:4988
+#, fuzzy
+msgid "_File"
+msgstr "_Fail"
+
+#: ../shell/ev-window.c:4989
+#, fuzzy
+msgid "_Edit"
+msgstr "_Edit"
+
+#: ../shell/ev-window.c:4990
+#, fuzzy
+msgid "_View"
+msgstr "_Lihat"
+
+#: ../shell/ev-window.c:4991
+#, fuzzy
+msgid "_Go"
+msgstr "_Pergi ke"
+
+#: ../shell/ev-window.c:4992
+#, fuzzy
+msgid "_Help"
+msgstr "_Bantuan"
+
+#. File menu
+#: ../shell/ev-window.c:4995
+#: ../shell/ev-window.c:5263
+msgid "_Open…"
+msgstr "_Buka..."
+
+#: ../shell/ev-window.c:4996
+#: ../shell/ev-window.c:5264
+#, fuzzy
+msgid "Open an existing document"
+msgstr "Buka dokumen yang ada untuk diedit"
+
+#: ../shell/ev-window.c:4998
+#, fuzzy
+msgid "Op_en a Copy"
+msgstr "Simpan Salinan Imej"
+
+#: ../shell/ev-window.c:4999
+msgid "Open a copy of the current document in a new window"
+msgstr "Buka satu salinan dokumen terkini dalam tetingkap baru"
+
+#: ../shell/ev-window.c:5001
+#, fuzzy
+msgid "_Save a Copy…"
+msgstr "simpan sebagai"
+
+#: ../shell/ev-window.c:5002
+#, fuzzy
+msgid "Save a copy of the current document"
+msgstr ""
+"Tidak dapat menyimpan dokumen \n"
+"'%1'"
+
+#: ../shell/ev-window.c:5004
+#, fuzzy
+msgid "Page Set_up…"
+msgstr "Setkan Bentangan Halaman"
+
+#: ../shell/ev-window.c:5005
+msgid "Set up the page settings for printing"
+msgstr "Tetapkan tetapan laman untuk mencetak"
+
+#: ../shell/ev-window.c:5007
+msgid "_Print…"
+msgstr "C_etak..."
+
+#: ../shell/ev-window.c:5010
+msgid "P_roperties"
+msgstr "Ci_ri-ciri"
+
+#: ../shell/ev-window.c:5018
+#, fuzzy
+msgid "Select _All"
+msgstr "Pilih _Semua"
+
+#: ../shell/ev-window.c:5020
+msgid "_Find…"
+msgstr "_Cari..."
+
+#: ../shell/ev-window.c:5021
+msgid "Find a word or phrase in the document"
+msgstr "Cari satu ayat atau frasa "
+
+#: ../shell/ev-window.c:5027
+msgid "T_oolbar"
+msgstr "Bar a_lat"
+
+#: ../shell/ev-window.c:5029
+#, fuzzy
+msgid "Rotate _Left"
+msgstr "Margin Kiri"
+
+#: ../shell/ev-window.c:5031
+#, fuzzy
+msgid "Rotate _Right"
+msgstr "Margin kanan"
+
+#: ../shell/ev-window.c:5042
+#, fuzzy
+msgid "_Reload"
+msgstr "&Ulangmuat"
+
+#: ../shell/ev-window.c:5043
+#, fuzzy
+msgid "Reload the document"
+msgstr "Ulangmuat dokumen semasa yang dipaparkan"
+
+#: ../shell/ev-window.c:5046
+#, fuzzy
+msgid "Auto_scroll"
+msgstr "Offset skrol"
+
+#: ../shell/ev-window.c:5056
+#, fuzzy
+msgid "_First Page"
+msgstr "Halaman &Pertama"
+
+#: ../shell/ev-window.c:5057
+#, fuzzy
+msgid "Go to the first page"
+msgstr "Alih ke halaman pertama dokumen"
+
+#: ../shell/ev-window.c:5059
+#, fuzzy
+msgid "_Last Page"
+msgstr "Halaman &Terakhir"
+
+#: ../shell/ev-window.c:5060
+#, fuzzy
+msgid "Go to the last page"
+msgstr "Alih ke halaman terakhir dokument"
+
+#. Help menu
+#: ../shell/ev-window.c:5064
+#, fuzzy
+msgid "_Contents"
+msgstr "_Kandungan"
+
+#: ../shell/ev-window.c:5067
+#, fuzzy
+msgid "_About"
+msgstr "_Perihal"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5071
+#, fuzzy
+msgid "Leave Fullscreen"
+msgstr "&Lihat layar penuh"
+
+#: ../shell/ev-window.c:5072
+#, fuzzy
+msgid "Leave fullscreen mode"
+msgstr "Togol mod skrinpenuh"
+
+#: ../shell/ev-window.c:5074
+#, fuzzy
+msgid "Start Presentation"
+msgstr "Persembahan Applixware"
+
+#: ../shell/ev-window.c:5075
+#, fuzzy
+msgid "Start a presentation"
+msgstr "Persembahan Applixware"
+
+#. View Menu
+#: ../shell/ev-window.c:5134
+#, fuzzy
+msgid "_Toolbar"
+msgstr "_Toolbar"
+
+#: ../shell/ev-window.c:5135
+#, fuzzy
+msgid "Show or hide the toolbar"
+msgstr "Papar atau sorok senaraimain"
+
+#: ../shell/ev-window.c:5137
+#, fuzzy
+msgid "Side _Pane"
+msgstr "Bekas 1 (Tepi)"
+
+#: ../shell/ev-window.c:5138
+#, fuzzy
+msgid "Show or hide the side pane"
+msgstr "Papar atau sembunyi pemberitahuan dan tugas"
+
+#: ../shell/ev-window.c:5140
+#, fuzzy
+msgid "_Continuous"
+msgstr "&Bersambung"
+
+#: ../shell/ev-window.c:5141
+#, fuzzy
+msgid "Show the entire document"
+msgstr "Pilih seluruh teks dokumen semasa."
+
+#: ../shell/ev-window.c:5143
+#, fuzzy
+msgid "_Dual"
+msgstr "Duaan "
+
+#: ../shell/ev-window.c:5144
+msgid "Show two pages at once"
+msgstr "Tunjuk dua halaman sekaligus"
+
+#: ../shell/ev-window.c:5146
+#, fuzzy
+msgid "_Fullscreen"
+msgstr "_Skrinpenuh"
+
+#: ../shell/ev-window.c:5147
+msgid "Expand the window to fill the screen"
+msgstr "Kembangkan tingkap untuk penuhkan skrin"
+
+#: ../shell/ev-window.c:5149
+#, fuzzy
+msgid "Pre_sentation"
+msgstr "Pra_lihat"
+
+#: ../shell/ev-window.c:5150
+#, fuzzy
+msgid "Run document as a presentation"
+msgstr "Dokumen persembahan KPresenter Baru:"
+
+#: ../shell/ev-window.c:5158
+#, fuzzy
+msgid "_Inverted Colors"
+msgstr "Pemetaan warna..."
+
+#: ../shell/ev-window.c:5159
+msgid "Show page contents with the colors inverted"
+msgstr "Tunjuk kandungan halaman dengan warna disongsangkan"
+
+#. Links
+#: ../shell/ev-window.c:5167
+#, fuzzy
+msgid "_Open Link"
+msgstr "Buka Pautan"
+
+#: ../shell/ev-window.c:5169
+#, fuzzy
+msgid "_Go To"
+msgstr "&Pergi Ke..."
+
+#: ../shell/ev-window.c:5171
+#, fuzzy
+msgid "Open in New _Window"
+msgstr "Buka dalam Tetingkap Baru"
+
+#: ../shell/ev-window.c:5173
+#, fuzzy
+msgid "_Copy Link Address"
+msgstr "Salin Alamat &Pautan"
+
+#: ../shell/ev-window.c:5175
+#, fuzzy
+msgid "_Save Image As…"
+msgstr "Simpan Salinan Imej"
+
+#: ../shell/ev-window.c:5177
+#, fuzzy
+msgid "Copy _Image"
+msgstr "Salin Imej"
+
+#: ../shell/ev-window.c:5182
+#, fuzzy
+msgid "_Open Attachment"
+msgstr "&Buka Lampiran"
+
+#: ../shell/ev-window.c:5184
+#, fuzzy
+msgid "_Save Attachment As…"
+msgstr "Fail tidak dapat disimpan:"
+
+#: ../shell/ev-window.c:5237
+#, fuzzy
+msgid "Zoom"
+msgstr "Zum"
+
+#: ../shell/ev-window.c:5239
+#, fuzzy
+msgid "Adjust the zoom level"
+msgstr "Aras Maksima Zoom"
+
+#: ../shell/ev-window.c:5249
+#, fuzzy
+msgid "Navigation"
+msgstr "Pemanduan arah"
+
+#: ../shell/ev-window.c:5251
+#, fuzzy
+msgid "Back"
+msgstr "Undur"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5254
+msgid "Move across visited pages"
+msgstr "Alih sepanjang halaman yang telah dilihat"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5284
+#, fuzzy
+msgid "Previous"
+msgstr "Terdahulu"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5289
+#, fuzzy
+msgid "Next"
+msgstr "Seterusnya"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5293
+#, fuzzy
+msgid "Zoom In"
+msgstr "Zum Ke dalam"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5297
+#, fuzzy
+msgid "Zoom Out"
+msgstr "Zum Ke luar"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5305
+#, fuzzy
+msgid "Fit Width"
+msgstr "Muat Lebar"
+
+#: ../shell/ev-window.c:5466
+#: ../shell/ev-window.c:5483
+msgid "Unable to launch external application."
+msgstr "Tidak dapat lancarkan aplikasi luaran."
+
+#: ../shell/ev-window.c:5540
+#, fuzzy
+msgid "Unable to open external link"
+msgstr "Buka Pautan di dalam &Pelayar Luar"
+
+#: ../shell/ev-window.c:5707
+msgid "Couldn't find appropriate format to save image"
+msgstr "Tidak dapat jumpa format sesuai untuk simpan imej"
+
+#: ../shell/ev-window.c:5749
+#, fuzzy
+msgid "The image could not be saved."
+msgstr "Fail tidak dapat disimpan"
+
+#: ../shell/ev-window.c:5781
+#, fuzzy
+msgid "Save Image"
+msgstr "Simpan Imej"
+
+#: ../shell/ev-window.c:5848
+#, fuzzy
+msgid "Unable to open attachment"
+msgstr "Tak dapat Membuka Fail"
+
+#: ../shell/ev-window.c:5901
+#, fuzzy
+msgid "The attachment could not be saved."
+msgstr "Fail tidak dapat disimpan"
+
+#: ../shell/ev-window.c:5946
+#, fuzzy
+msgid "Save Attachment"
+msgstr "Simpan Lampiran"
+
+#: ../shell/ev-window-title.c:162
+#, fuzzy, c-format
+msgid "%s — Password Required"
+msgstr "Antaramuka diperkukan"
+
+#: ../shell/ev-utils.c:330
+#, fuzzy
+msgid "By extension"
+msgstr "Sambungan GIMP"
+
+#: ../shell/main.c:70
+#: ../shell/main.c:246
+#, fuzzy
+msgid "MATE Document Viewer"
+msgstr "Pelungsur bantuan default"
+
+#: ../shell/main.c:78
+#, fuzzy
+msgid "The page of the document to display."
+msgstr "Alih ke halaman pertama dokumen"
+
+#: ../shell/main.c:78
+#, fuzzy
+msgid "PAGE"
+msgstr "Halaman"
+
+#: ../shell/main.c:79
+#, fuzzy
+msgid "Run evince in fullscreen mode"
+msgstr "Rupa bentuk Piawai dalam Mod Skrin Penuh"
+
+#: ../shell/main.c:80
+#, fuzzy
+msgid "Run evince in presentation mode"
+msgstr "Menjalankan saluran dalam mod uji fail."
+
+#: ../shell/main.c:81
+#, fuzzy
+msgid "Run evince as a previewer"
+msgstr "&Jalankan sebagai pengguna lain"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Ayat atau frasa untuk mencari dokumen"
+
+#: ../shell/main.c:82
+#, fuzzy
+msgid "STRING"
+msgstr "AYAT"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FAIL...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid "Boolean options available: true enables thumbnailing and false disables the creation of new thumbnails"
+msgstr "Pilihab boolean sedia ada: benar membolehkan thumbnail dan palsu tidak membenarkan mencipta thumbnail baru"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Benarkan thumb untuk Dokumen PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Arahan thumbnail untuk Dokumen PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid "Valid command plus arguments for the PDF Document thumbnailer. See Caja thumbnailer documentation for more information."
+msgstr ""
+
diff --git a/po/nb.po b/po/nb.po
new file mode 100644
index 00000000..7de271bd
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,1710 @@
+# Norwegian translation of evince (bokmål dialect).
+# Copyright (C) 2000-2003, 2005 Free Software Foundation, Inc.
+# Kjartan Maraas <[email protected]>, 2000-2010.
+# Terance Edward Sola <[email protected]>, 2005.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince 2.31.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-08-21 12:08+0200\n"
+"PO-Revision-Date: 2010-08-21 12:08+0200\n"
+"Last-Translator: Kjartan Maraas <[email protected]>\n"
+"Language-Team: Norwegian bokmal <[email protected]>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Feil under oppstart av kommando «%s» for å dekomprimere tegneserien: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Kommando «%s» feilet ved dekomprimering av tegneserien."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Kommandoen «%s» avsluttet ikke på normal måte."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Ikke en MIME-type for en tegneserie: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Kan ikke finne en passende kommando for å dekomprimere denne typen "
+"tegneserien"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Ukjent MIME-type"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Filen er korrupt"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Ingen filer i arkivet"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Ingen bilder funnet i arkiv %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Det oppsto en feil ved sletting av «%s»."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Feil %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Tegneserier"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu-dokumentet har feil format"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Dette dokumentet består av flere filer. En eller flere av disse filene kan "
+"ikke aksesseres."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu-dokumenter"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI-dokumentet har feil format"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI-dokumenter"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Dette arbeidet er Public Domain"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Ja"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Nei"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Ukjent skrifttype"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Uten navn"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Innebygd subsett"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Innebygd"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Ikke innebygd"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF-dokumenter"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Ugyldig dokument"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Lysbilder fra Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Ingen feil"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Ikke nok minne"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Kan ikke finne signatur for ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Ugyldig ZIP-fil"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "ZIP-arkiver over flere filer er ikke støttet"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Kan ikke åpne filen"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Kan ikke lese fra filen"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Kan ikke finne filen i ZIP-arkivet"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Ukjent feil"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Kunne ikke åpne dokument «%s»"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Kunne ikke lagre dokument «%s»"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript-dokumenter"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Kunne ikke lagre vedlegg «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Kunne ikke åpne vedlegg «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Kunne ikke åpne vedlegg «%s»"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Filtype %s (%s) er ikke støttet"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Alle dokumenter"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Alle filer"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Klarte ikke å lage en midlertidig fil: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Klarte ikke å lage en midlertidig katalog: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Filen er ikke en gyldig .desktop-fil"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Kjenner ikke igjen versjon «%s» i .desktop-fil"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Starter %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Programmet tar ikke dokumenter på kommandolinjen"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Kjenner ikke igjen oppstartsalternativ: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Kan ikke gi URIer til dokumenter til en oppføring av type «Types=Link»"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Oppføringen kan ikke startes"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Slå av forbindelse til sesjonshåndterer"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Oppgi fil med lagret konfigurasjon"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FIL"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Oppgi ID for sesjonshåndtering"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Alternativer for sesjonshåndtering"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Vis alternativer for sesjonshåndtering"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Vis «_%s»"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Flytt på verktøylinje"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Flytt valgt oppføring på verktøylinjen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "Fje_rn verktøylinje"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Fjern valgt oppføring fra verktøylinjen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "F_jern verktøylinje"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Fjern valgt verktøylinje"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Skillelinje"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "Beste tilpasning"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Tilpass til sidebredde"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Dokumentvisning"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Vis dokumenter med mange sider"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Overstyr begrensninger satt i dokumentet"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Overstyr dokumentbegrensninger som f.eks mulighet til å kopiere eller skrive "
+"ut."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Slett midlertidig fil"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Skriv ut fil med innstillinger"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "MATE dokumentvisning"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "Klarte ikke å skrive ut dokumentet"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Valgt skriver, «%s», ble ikke funnet"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "_Forrige side"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "Gå til forrige side"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "_Neste side"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "Gå til neste side"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "Forstørr dokumentet"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "Komprimer dokumentet"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Skriv ut"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "Skriv ut dette dokumentet"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "_Beste tilpasning"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "La dokumentet fylle hele vinduet"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "Tilpass til side_bredde"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "La dokumentet fylle vinduet i bredden"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "Side"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "Velg side"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokument"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Tittel:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Lokasjon:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Emne:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Forfatter:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Nøkkelord:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Produsert av:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Opprettet av:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Opprettet:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Endret:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Antall sider:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimalisert:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Format:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Sikkerhet:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Papirstørrelse:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Ingen"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f tomme"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, portrett (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, landskap (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d av %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "av %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Laster…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Forbereder utskrift…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Fullfører…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Skriver ut side %d av %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Utskrift støttes ikke på denne skriveren."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Ugyldig sideutvalg"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Advarsel"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Ingen sider i området som er valgt for utskrift"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Skalering av side:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Krymp til utskriftsområde"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Tilpass utskriftsområde"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Skaler dokumentets sider til å passe til skriverens sidestørrelse. Velg fra "
+"en av følgende:\n"
+"\n"
+"• «None»: Ingen skalering av sidene utføres.\n"
+"\n"
+"• «Shrink to Printable Area»: Dokumentsider som er større enn "
+"utskriftsområdet reduseres til å passe til skriverens utskriftsområde.\n"
+"\n"
+"• «Fit to Printable Area»: Dokumentets sider forstørres eller forminskes til "
+"å passe utskriftsområdet for skriveren etter behov.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Roter og sentrer automatisk"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Roter skriverens sideorientering for hver side til å passe orientering i "
+"dokumentet. Dokumentets sider vil bli sentrert innenfor utskriftsområdet."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Velg sidestørrelse ved bruk av dokumentets sidestørrelse"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Hver side vil bli skrevet ut på samme papirstørrelse som dokumentets "
+"sidestørrelse hvis dette slås på."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Sidehåndtering"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Klarte ikke å skrive ut side %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Rull opp"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Rull ned"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Rull visning opp"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Rull visning ned"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Dokumentvisning"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Gå til side:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Slutt på presentasjonen. Klikk for å avslutte."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Gå til første side"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Gå til forrige side"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Gå til neste side"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Gå til siste side"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Gå til side"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Søk"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Gå til side %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Gå til %s i fil «%s»"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Gå til fil «%s»"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Start %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Finn:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "Finn forri_ge"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Finn forrige oppføring av søkestrengen"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "Finn ne_ste"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Finn neste oppøring av søkestrengen"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Skill mellom små og store bokstaver"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Slå av/på søk som skiller mellom små/store bokstaver"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Ikon:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Notat"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Kommentar"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Nøkkel"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Hjelp"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Nytt avsnitt"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Avsnitt"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Sett inn"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Kryss"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Sirkel"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Ukjent"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Egenskaper for anmerkninger"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Farge:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Stil:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Gjennomsiktig"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Ugjennomsiktig"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Opprinnelig tilstand for vindu:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Åpne"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Lukk"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Kjører i presentasjonsmodus"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Passord for dokument %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Konverterer %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d av %d dokumenter konvertert"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Konverterer metadata"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Metadataformatet som brukes av Evince har endret seg og må derfor migreres. "
+"Hvis migreringen avbrytes vil ikke metadatalageret fungere."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Åpne et nylig brukt dokument"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Dette dokumentet er låst og kan kun leses etter å ha oppgitt korrekt passord."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Lås opp dokument"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Oppgi passord"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Passord kreves"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "Dokumentet «%s» er låst og krever et passord før det kan åpnes."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Passord:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Glem passordet _med en gang"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Husk passordet til du _logger ut"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Husk _for alltid"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Egenskaper"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Generelt"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Skrifter"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Dokumentlisens"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Skrifttype"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Samler informasjon om skrifter… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Vilkår for bruk"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Tekstlisens"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Videre informasjon"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Liste"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Notater"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Tekst"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Legg til tekstanmerkning"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Legg til"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Dokumentet inneholder ingen notater"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Side %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Vedlegg"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Lag"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Skriv ut…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Indeks"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Miniatyrer"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "Side %s - %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "Side %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "Dokumentet inneholder ingen sider"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "Dokumentet inneholder kun tomme sider"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "Kan ikke åpne dokument"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Laster dokument fra «%s»"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Laster ned dokument (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "Klarte ikke å laste ekstern fil."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Leser dokument fra %s på nytt"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "Klarte ikke å lese dokumentet på nytt."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "Åpne dokument"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "Lagrer dokumentet til %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Lagrer vedlegg til %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "Lagrer bilde til %s"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Filen kunne ikke lagres som «%s»."
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Laster opp dokument (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Laster opp vedlegg (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Laster opp bilde (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "Lagre en kopi"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d utestående jobb i køen"
+msgstr[1] "%d utestående jobber i køen"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Skriver ut jobb %s"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Dokumentet inneholder skjemafelter som ikke er fylt ut. Hvis du ikke lagrer "
+"en kopi vil disse endringene gå tapt."
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Dokumentet inneholder nye eller endrede anmerkninger. Hvis du ikke lagrer en "
+"kopi vil disse endringene gå tapt."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Lagre en kopi av dokument «%s» før programmet lukkes?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "Fortsett _uten å lagre"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "Lagre en _kopi"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Vent med å lukke programmet til utskriftsjobb %s er fullført?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Det er %d aktive utskriftsjobber. Vent med å lukke programmet til disse er "
+"fullført?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Hvis du lukker vinduet vil utestående utskriftsjobber ikke bli fullført."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "Avbryt _utskrift og lukk"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "Lukk etter ut_skrift"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "Redigering av verktøylinje"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "Det oppsto en feil ved visning av hjelp"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Dokumentvisning.\n"
+"Bruker %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince er fri programvare; du kan redistribuere programmet og eller endre "
+"det i henhold til betingelsene gitt i GNU General Public License som "
+"publisert av Free Software Foundation; enten versjon 2 av lisensen, eller "
+"(hvis du ønsker) enhver senere versjon.\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince distribueres i håp om at programmet vil være nyttig, men UTEN NOEN "
+"GARANTI; selv ikke en implisitt garanti for at det er SALGBART eller PASSER "
+"ET SPESIELT FORMÅL. Se Gnu General Public License for flere detaljer.\n"
+
+#: ../shell/ev-window.c:4571
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Du skal ha mottatt en kopi av GNU General Public License sammen med Evince; "
+"hvis ikke kan du skrive til Free Software Foundation, Inc.,51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Evince-utviklerene"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr "Kjartan Maraas <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d funnet på denne siden"
+msgstr[1] "%d funnet på denne siden"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "Ikke funnet"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% igjen å søke i"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "_Fil"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "R_ediger"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "_Vis"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "_Gå til"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "_Hjelp"
+
+#. File menu
+#: ../shell/ev-window.c:5402 ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "_Åpne…"
+
+#: ../shell/ev-window.c:5403 ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "Åpne et eksisterende dokument"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "Åpn_e en kopi"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "Åpne en kopi av dette dokumentet i et nytt vindu"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "_Lagre en kopi…"
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "Lagre en kopi av dette dokumentet"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "_Skriv ut…"
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "E_genskaper"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "Velg _alt"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "_Søk…"
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "Finn et ord eller en frase i dokumentet"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "V_erktøylinje"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "Roter til _venstre"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "_Roter til høyre"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "Lagre nåværende innstillinger som _forvalg"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "L_es på nytt"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "Les dokumentet på nytt"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "Automati_sk rulling"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "_Første side"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "Gå til den første siden"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "S_iste side"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "Gå til den siste siden"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "_Innhold"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "_Om"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "Forlat fullskjerm"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "Forlat fullskjerm-modus"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "Start presentasjon"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "Start en presentasjon"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "Verk_tøylinje"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "Vis eller skjul verktøylinjen"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "Si_defelt"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "Vis eller skjul sidelinjen"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "_Sammenhengende"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "Vis hele dokumentet"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "_Tosidig"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "Vis to sider samtidig"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "_Fullskjerm"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "Utvid vinduet så det fyller skjermen"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "Pre_sentasjon"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "Vis dokumentet som en presentasjon"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "_Inverterte farger"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "Vis sideinnhold med fargene snudd om"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "_Åpne lenke"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "_Gå til"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "Åpne i nytt _vindu"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "_Kopier lenkeadressen"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "Lagre bilde _som…"
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "Kopier b_ilde"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "Egenskaper for anmerkninger…"
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "_Åpne vedlegg"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "Lagre vedlegg _som…"
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "Juster nivå for zoom"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "Navigasjon"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "Tilbake"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "Bla gjennom sider du har sett på"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "Forrige"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "Neste"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "Zoom inn"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "Zoom ut"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "Tilpass bredde"
+
+#: ../shell/ev-window.c:5890 ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "Kan ikke starte eksternt program."
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "Kan ikke åpne ekstern lenke."
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "Kunne ikke finne passende format for å lagre filen"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "Bildet kunne ikke lagres."
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "Lagre bilde"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "Kan ikke åpne vedlegg"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "Vedlegget kunne ikke lagres."
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "Lagre vedlegg"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s - passord kreves"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Etter utvidelse"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATE dokumentvisning"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Etikett for side i dokumentet som skal vises."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "SIDE"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Nummer på siden i dokumentet som skal vises."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMMER"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Kjør evince i fullskjerm-modus"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Kjør evince i presentasjonsmodus"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Kjør evince som forhåndsvisning"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Ord eller frase som skal finnes i dokumentet"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "STRENG"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FIL…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Boolske verdier tilgjengelig: «true» aktiverer miniatyrer og «false» "
+"deaktiverer oppretting av nye miniatyrer."
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Aktiver generering av miniatyrer for PDF-dokumenter"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Miniatyrbildekommando for PDF-dokumenter"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Gyldig kommando pluss argumenter for PDF-dokument miniatyrbilder. Se i "
+"Caja sin miniatyrbildedokumentasjon for mer informasjon."
diff --git a/po/nds.po b/po/nds.po
new file mode 100644
index 00000000..19960a53
--- /dev/null
+++ b/po/nds.po
@@ -0,0 +1,1464 @@
+# Low German translation for evince.
+# Copyright (C) 2009 evince's COPYRIGHT HOLDER
+# This file is distributed under the same license as the evince package.
+# Nils-Christoph Fiedler <[email protected]>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2009-11-30 11:09+0000\n"
+"PO-Revision-Date: 2010-03-19 15:33+0100\n"
+"Last-Translator: Nils-Christoph Fiedler <[email protected]>\n"
+"Language-Team: Low German <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+#: ../backend/comics/comics-document.c:177
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:191
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:200
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:357
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:364
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+
+#: ../backend/comics/comics-document.c:402
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Unbekannter MIME Typ"
+
+#: ../backend/comics/comics-document.c:429
+msgid "File corrupted"
+msgstr "Datei im dutt"
+
+#: ../backend/comics/comics-document.c:441
+msgid "No files in archive"
+msgstr "Keene Datei im Archiv"
+
+#: ../backend/comics/comics-document.c:480
+#, c-format
+msgid "No images found in archive %s"
+msgstr "In de Verteeknis %s künn keene Billers funnen werrn"
+
+#: ../backend/comics/comics-document.c:724
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Künn \"%s\" nich akerat löschen."
+
+#: ../backend/comics/comics-document.c:861
+#, c-format
+msgid "Error %s"
+msgstr "Fehler %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Comics"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DJVU document has incorrect format"
+msgstr "DJVU Dokument het nich akerates Format"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid "The document is composed of several files. One or more of such files cannot be accessed."
+msgstr ""
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Djvu Dokumente"
+
+#: ../backend/dvi/dvi-document.c:107
+msgid "DVI document has incorrect format"
+msgstr "DVI Dokument het nich akerates Format"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI Dokumente"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr ""
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "Ja"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "Nee"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Type 1"
+msgstr "Typ 1"
+
+#: ../backend/pdf/ev-poppler.cc:926
+msgid "Type 1C"
+msgstr "Typ 1C"
+
+#: ../backend/pdf/ev-poppler.cc:928
+msgid "Type 3"
+msgstr "Typ 3"
+
+#: ../backend/pdf/ev-poppler.cc:930
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:932
+msgid "Type 1 (CID)"
+msgstr "Typ 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:934
+msgid "Type 1C (CID)"
+msgstr "Typ 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:936
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:938
+msgid "Unknown font type"
+msgstr "Unbekannte Schriftart"
+
+#: ../backend/pdf/ev-poppler.cc:964
+msgid "No name"
+msgstr "Keen Naam"
+
+#: ../backend/pdf/ev-poppler.cc:972
+msgid "Embedded subset"
+msgstr ""
+
+#: ../backend/pdf/ev-poppler.cc:974
+msgid "Embedded"
+msgstr "Inbett"
+
+#: ../backend/pdf/ev-poppler.cc:976
+msgid "Not embedded"
+msgstr "nich inbett"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF Dokumente"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Nich akerates Dokument"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr ""
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Keen Fehler"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Nich genug Spieker"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "Künn ZIP Unnerschrieven nich finnen"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "Nich akerate ZIP Datei"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr ""
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Künn de Datei nich opmaken"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Künn Daten in datei nich lesen"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr ""
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Unbekannter Fehler"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Künn Dokument \"%s\" nich laden"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Künn dokument \"%s\" nich spiekern"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript Dokumente"
+
+#: ../libdocument/ev-attachment.c:304
+#: ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Künn Anhangen \"%s\" nich spiekern: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Künn Anhangen \"%s\" nich opmaken: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Künn Anhangen \"%s\" nich opmaken"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Dateityp %s (%s) is nich unnerstütt"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "All Dokumente"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "All Dateien"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr ""
+
+#: ../libdocument/ev-file-helpers.c:223
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Datei is keene akerate .desktop Datei"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, fuzzy, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Dateiverschoon '%s' vu'm Schrievdisk nich erkannt"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Starte %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, fuzzy, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Anwendung akzepteert keen Dokumente över de Befehlszeile"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Unbekannte Startoption: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, fuzzy, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Dokumenten-Adressen (URIs) ködd nich an een Desktop-Eindrag mit »Type=Link« övergeven warn"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Keen startbares Element"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Deaktivert de Verbinnen to'm Törnoppasser"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr ""
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+#: ../previewer/ev-previewer.c:46
+#: ../previewer/ev-previewer.c:47
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Törnoppassens ID ingeven"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Törnoppassensoptschoonen:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Törnoppassensoptschoonen opwiesen"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "Wies op “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "Op de Warktüügbalken _verschuven"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "Dat utwählte Element op de Warktüügbalken verschuven"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "Ut de Warktüügbalken _löschen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "Utwähltes Element ut Warktüügbalken löschen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "Warktüügbalken _löschen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "Utwählten Warktüügbalken löschen"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Deeler"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:117
+msgid "Running in presentation mode"
+msgstr "Lööpt in Vordragsmodus"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48
+#: ../shell/ev-window.c:5387
+msgid "Best Fit"
+msgstr "Best Anpassen"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Sietenbrede ännern"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1
+#: ../shell/ev-window.c:4263
+#: ../shell/ev-window-title.c:149
+#: ../shell/main.c:280
+#, c-format
+msgid "Document Viewer"
+msgstr "Dokumentkieker"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "Unnerscheedliche Dokumente opwiesen"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr ""
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+
+#: ../previewer/ev-previewer.c:45
+msgid "Delete the temporary file"
+msgstr "Twüschentiedliche Datei löschen"
+
+#: ../previewer/ev-previewer.c:46
+msgid "Print settings file"
+msgstr "Druckinstellendatei"
+
+#: ../previewer/ev-previewer.c:141
+#: ../previewer/ev-previewer.c:175
+msgid "MATE Document Previewer"
+msgstr "MATE Dokument Utblick"
+
+#: ../previewer/ev-previewer-window.c:95
+#: ../shell/ev-window.c:2985
+msgid "Failed to print document"
+msgstr "Künn dat Dokument nich drucken"
+
+#: ../previewer/ev-previewer-window.c:209
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr ""
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:253
+#: ../shell/ev-window.c:5136
+msgid "_Previous Page"
+msgstr "Een Siet _torügg"
+
+#: ../previewer/ev-previewer-window.c:254
+#: ../shell/ev-window.c:5137
+msgid "Go to the previous page"
+msgstr "To lester Siet geihn"
+
+#: ../previewer/ev-previewer-window.c:256
+#: ../shell/ev-window.c:5139
+msgid "_Next Page"
+msgstr "Een Siet _vor"
+
+#: ../previewer/ev-previewer-window.c:257
+#: ../shell/ev-window.c:5140
+msgid "Go to the next page"
+msgstr "To nähster Siet geihn"
+
+#: ../previewer/ev-previewer-window.c:260
+#: ../shell/ev-window.c:5123
+msgid "Enlarge the document"
+msgstr "Dokument gröter maken"
+
+#: ../previewer/ev-previewer-window.c:263
+#: ../shell/ev-window.c:5126
+msgid "Shrink the document"
+msgstr "Dokument lütter maken"
+
+#: ../previewer/ev-previewer-window.c:266
+#: ../shell/ev-print-operation.c:1319
+msgid "Print"
+msgstr "Drucken"
+
+#: ../previewer/ev-previewer-window.c:267
+#: ../shell/ev-window.c:5094
+msgid "Print this document"
+msgstr "Düsses Dokument drucken"
+
+#: ../previewer/ev-previewer-window.c:273
+#: ../shell/ev-window.c:5238
+msgid "_Best Fit"
+msgstr "Dat, wat am Besten _passt"
+
+#: ../previewer/ev-previewer-window.c:274
+#: ../shell/ev-window.c:5239
+msgid "Make the current document fill the window"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:276
+#: ../shell/ev-window.c:5241
+msgid "Fit Page _Width"
+msgstr "Sieten_brede ännern"
+
+#: ../previewer/ev-previewer-window.c:277
+#: ../shell/ev-window.c:5242
+msgid "Make the current document fill the window width"
+msgstr ""
+
+#: ../previewer/ev-previewer-window.c:462
+#: ../shell/ev-window.c:5309
+msgid "Page"
+msgstr "Siet"
+
+#: ../previewer/ev-previewer-window.c:463
+#: ../shell/ev-window.c:5310
+msgid "Select Page"
+msgstr "Siet utwählen"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokument"
+
+#: ../properties/ev-properties-view.c:59
+msgid "Title:"
+msgstr "Titel:"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Location:"
+msgstr "Ort:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Subject:"
+msgstr "Verwennen:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Author:"
+msgstr "Schriever:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Keywords:"
+msgstr "Slötelwöör:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Producer:"
+msgstr "Produzent:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Creator:"
+msgstr "Urheber:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Created:"
+msgstr "Erstellt:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Modified:"
+msgstr "Ännert:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Number of Pages:"
+msgstr "Sietentaal:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Optimized:"
+msgstr "Better makt:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Format:"
+msgstr "Format:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Security:"
+msgstr "Sekerheit:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Paper Size:"
+msgstr "Papiergröte:"
+
+#: ../properties/ev-properties-view.c:202
+msgid "None"
+msgstr "Keen"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:227
+msgid "default:mm"
+msgstr "Standard:mm"
+
+#: ../properties/ev-properties-view.c:271
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:275
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:299
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Portrait (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:306
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Landschapt (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d vun %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "vun %d"
+
+#: ../libview/ev-jobs.c:1426
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr ""
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Nah boven rollen"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Runner rollen"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr ""
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr ""
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Dokumentansicht"
+
+#: ../libview/ev-view.c:1766
+msgid "Go to first page"
+msgstr "To de erste Siet wesseln"
+
+#: ../libview/ev-view.c:1768
+msgid "Go to previous page"
+msgstr "To lester Siet geihn"
+
+#: ../libview/ev-view.c:1770
+msgid "Go to next page"
+msgstr "To nähster Siet geihn"
+
+#: ../libview/ev-view.c:1772
+msgid "Go to last page"
+msgstr "To de leste Siet wesseln"
+
+#: ../libview/ev-view.c:1774
+msgid "Go to page"
+msgstr "To Siet wesseln"
+
+#: ../libview/ev-view.c:1776
+msgid "Find"
+msgstr "Finnen"
+
+#: ../libview/ev-view.c:1804
+#, c-format
+msgid "Go to page %s"
+msgstr "To Siet %s wesseln"
+
+#: ../libview/ev-view.c:1810
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr ""
+
+#: ../libview/ev-view.c:1813
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Geih to Datei \"%s\""
+
+#: ../libview/ev-view.c:1821
+#, c-format
+msgid "Launch %s"
+msgstr "%s starten"
+
+#: ../libview/ev-view.c:3096
+msgid "End of presentation. Press Escape to exit."
+msgstr ""
+
+#: ../libview/ev-view.c:4042
+msgid "Jump to page:"
+msgstr "To Siet hüppen:"
+
+#: ../libview/ev-view.c:4324
+#: ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading..."
+msgstr "Lade..."
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Finnen:"
+
+#: ../shell/eggfindbar.c:329
+#: ../shell/ev-window.c:5111
+msgid "Find Pre_vious"
+msgstr "_Vorige finnen"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr ""
+
+#: ../shell/eggfindbar.c:337
+#: ../shell/ev-window.c:5109
+msgid "Find Ne_xt"
+msgstr "_Nähsten finnen"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr ""
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr ""
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr ""
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Passwoord för dat Dokument %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:164
+#: ../shell/ev-convert-metadata.c:179
+msgid "Converting metadata"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:185
+msgid "The metadata format used by Evince has changed, and hence it needs to be migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr ""
+
+#: ../shell/ev-password-view.c:144
+msgid "This document is locked and can only be read by entering the correct password."
+msgstr ""
+
+#: ../shell/ev-password-view.c:153
+#: ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "_Slute Dokument op"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Passwoord ingeven"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Passwoord nödig"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Passwoord:"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "Passwoord just wedder _vergeten"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _logout"
+msgstr "Passwoord merken bit _Avmellen"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "Jümmers _merken"
+
+#. Initial state
+#: ../shell/ev-print-operation.c:345
+msgid "Preparing to print ..."
+msgstr ""
+
+#: ../shell/ev-print-operation.c:347
+msgid "Finishing..."
+msgstr "Beenne..."
+
+#: ../shell/ev-print-operation.c:349
+#, c-format
+msgid "Printing page %d of %d..."
+msgstr "Drucke Siet %d vun %d..."
+
+#: ../shell/ev-print-operation.c:1173
+#, fuzzy
+msgid "Printing is not supported on this printer."
+msgstr "Drucken wird auf diesem Drucker nicht unterstützt"
+
+#: ../shell/ev-print-operation.c:1238
+msgid "Invalid page selection"
+msgstr "Nich akerate Sietenutwahl"
+
+#: ../shell/ev-print-operation.c:1239
+msgid "Warning"
+msgstr "Oppassen!"
+
+#: ../shell/ev-print-operation.c:1241
+msgid "Your print range selection does not include any page"
+msgstr ""
+
+#: ../shell/ev-properties-dialog.c:58
+msgid "Properties"
+msgstr "Eegenschapten"
+
+#: ../shell/ev-properties-dialog.c:92
+msgid "General"
+msgstr "Allgemeen"
+
+#: ../shell/ev-properties-dialog.c:102
+msgid "Fonts"
+msgstr "Schriftarten"
+
+#: ../shell/ev-properties-dialog.c:115
+msgid "Document License"
+msgstr "Dokumentlizenz"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Schriftart"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:138
+msgid "Usage terms"
+msgstr "Gebrukregeln"
+
+#: ../shell/ev-properties-license.c:144
+msgid "Text License"
+msgstr "textlizenz"
+
+#: ../shell/ev-properties-license.c:150
+msgid "Further Information"
+msgstr "Mehr Informatschoonen"
+
+#: ../shell/ev-sidebar-attachments.c:712
+msgid "Attachments"
+msgstr "Anhangen"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr ""
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print..."
+msgstr "Drucken..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Index"
+
+#: ../shell/ev-sidebar-thumbnails.c:956
+msgid "Thumbnails"
+msgstr "Utblickbillers"
+
+#: ../shell/ev-window.c:830
+#, c-format
+msgid "Page %s - %s"
+msgstr "Siet %s - %s"
+
+#: ../shell/ev-window.c:832
+#, c-format
+msgid "Page %s"
+msgstr "Siet %s"
+
+#: ../shell/ev-window.c:1265
+msgid "The document contains no pages"
+msgstr "dat Dokument het keene Sieten in"
+
+#: ../shell/ev-window.c:1268
+msgid "The document contains only empty pages"
+msgstr ""
+
+#: ../shell/ev-window.c:1462
+#: ../shell/ev-window.c:1628
+msgid "Unable to open document"
+msgstr "Künn dat Dokument nich opmaken"
+
+#: ../shell/ev-window.c:1599
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Lade Dokument vun \"%s\""
+
+#: ../shell/ev-window.c:1741
+#: ../shell/ev-window.c:2018
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Lade Dokument daal (%d%%)"
+
+#: ../shell/ev-window.c:1774
+msgid "Failed to load remote file."
+msgstr ""
+
+#: ../shell/ev-window.c:1962
+#, c-format
+msgid "Reloading document from %s"
+msgstr ""
+
+#: ../shell/ev-window.c:1994
+msgid "Failed to reload document."
+msgstr ""
+
+#: ../shell/ev-window.c:2149
+msgid "Open Document"
+msgstr "Dokument opmaken"
+
+#: ../shell/ev-window.c:2413
+#, c-format
+msgid "Saving document to %s"
+msgstr "Spieker Dokument nah %s"
+
+#: ../shell/ev-window.c:2416
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Spieker Anhangen nah %s"
+
+#: ../shell/ev-window.c:2419
+#, c-format
+msgid "Saving image to %s"
+msgstr "Bill spiekern nah %s"
+
+#: ../shell/ev-window.c:2463
+#: ../shell/ev-window.c:2563
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr ""
+
+#: ../shell/ev-window.c:2494
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:2498
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:2502
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr ""
+
+#: ../shell/ev-window.c:2624
+msgid "Save a Copy"
+msgstr "Kopie spiekern"
+
+#: ../shell/ev-window.c:2929
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d Opdrag tövt in Reeg"
+msgstr[1] "%d Opdräge töven in Reeg"
+
+#: ../shell/ev-window.c:3042
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Drucke Opdrag \"%s\""
+
+#: ../shell/ev-window.c:3245
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr ""
+
+#: ../shell/ev-window.c:3248
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+
+#: ../shell/ev-window.c:3260
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+
+#: ../shell/ev-window.c:3264
+msgid "Cancel _print and Close"
+msgstr "_Druck avbreken un sluten"
+
+#: ../shell/ev-window.c:3268
+msgid "Close _after Printing"
+msgstr "_Achter Drucken sluten"
+
+#: ../shell/ev-window.c:3892
+msgid "Toolbar Editor"
+msgstr "Warktüügbalkenbewarker"
+
+#: ../shell/ev-window.c:4024
+#, fuzzy
+msgid "There was an error displaying help"
+msgstr "Beim aufrufen der Hilfefunktion ist ein Fehler aufgetreten: %s"
+
+#: ../shell/ev-window.c:4259
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+
+#: ../shell/ev-window.c:4288
+msgid "Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:4292
+msgid "Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:4296
+msgid "You should have received a copy of the GNU General Public License along with Evince; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+
+#: ../shell/ev-window.c:4320
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4323
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 De Evince Schrievers"
+
+#: ../shell/ev-window.c:4329
+msgid "translator-credits"
+msgstr "Nils-Christoph Fiedler <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4584
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d op düsse Siet funnen"
+msgstr[1] "%d op düsse Siet funnen"
+
+#: ../shell/ev-window.c:4592
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr ""
+
+#: ../shell/ev-window.c:5074
+msgid "_File"
+msgstr "_Datei"
+
+#: ../shell/ev-window.c:5075
+msgid "_Edit"
+msgstr "_Bewarken"
+
+#: ../shell/ev-window.c:5076
+msgid "_View"
+msgstr "_Ansicht"
+
+#: ../shell/ev-window.c:5077
+msgid "_Go"
+msgstr "_Denn man to"
+
+#: ../shell/ev-window.c:5078
+msgid "_Help"
+msgstr "_Hölp"
+
+#. File menu
+#: ../shell/ev-window.c:5081
+#: ../shell/ev-window.c:5349
+msgid "_Open..."
+msgstr "_Opmaken..."
+
+#: ../shell/ev-window.c:5082
+#: ../shell/ev-window.c:5350
+msgid "Open an existing document"
+msgstr ""
+
+#: ../shell/ev-window.c:5084
+msgid "Op_en a Copy"
+msgstr "Eene K_opiie opmaken"
+
+#: ../shell/ev-window.c:5085
+msgid "Open a copy of the current document in a new window"
+msgstr ""
+
+#: ../shell/ev-window.c:5087
+msgid "_Save a Copy..."
+msgstr "_Eene Kopie spiekern..."
+
+#: ../shell/ev-window.c:5088
+msgid "Save a copy of the current document"
+msgstr ""
+
+#: ../shell/ev-window.c:5090
+msgid "Page Set_up..."
+msgstr "Sieten_instellens..."
+
+#: ../shell/ev-window.c:5091
+msgid "Setup the page settings for printing"
+msgstr ""
+
+#: ../shell/ev-window.c:5093
+msgid "_Print..."
+msgstr "_Drucken..."
+
+#: ../shell/ev-window.c:5096
+msgid "P_roperties"
+msgstr "E_egenschapten"
+
+#: ../shell/ev-window.c:5104
+msgid "Select _All"
+msgstr "_Allens markeren"
+
+#: ../shell/ev-window.c:5106
+msgid "_Find..."
+msgstr "_Finnen..."
+
+#: ../shell/ev-window.c:5107
+msgid "Find a word or phrase in the document"
+msgstr ""
+
+#: ../shell/ev-window.c:5113
+msgid "T_oolbar"
+msgstr "_Warktüügbalken"
+
+#: ../shell/ev-window.c:5115
+msgid "Rotate _Left"
+msgstr "Nah _links dreihn"
+
+#: ../shell/ev-window.c:5117
+msgid "Rotate _Right"
+msgstr "Nah _rechts dreihn"
+
+#: ../shell/ev-window.c:5128
+msgid "_Reload"
+msgstr "_Opfrischen"
+
+#: ../shell/ev-window.c:5129
+msgid "Reload the document"
+msgstr "Düsses Dokument opfrischen"
+
+#: ../shell/ev-window.c:5132
+msgid "Auto_scroll"
+msgstr "_Vun alleen rollen"
+
+#: ../shell/ev-window.c:5142
+msgid "_First Page"
+msgstr "_Erste Siet"
+
+#: ../shell/ev-window.c:5143
+msgid "Go to the first page"
+msgstr "To de erste Siet wesseln"
+
+#: ../shell/ev-window.c:5145
+msgid "_Last Page"
+msgstr "_Leste Siet"
+
+#: ../shell/ev-window.c:5146
+msgid "Go to the last page"
+msgstr "To de leste Siet wesseln"
+
+#. Help menu
+#: ../shell/ev-window.c:5150
+msgid "_Contents"
+msgstr "_Inholls"
+
+#: ../shell/ev-window.c:5153
+msgid "_About"
+msgstr "_Över"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5157
+msgid "Leave Fullscreen"
+msgstr "Fullbill verloten"
+
+#: ../shell/ev-window.c:5158
+msgid "Leave fullscreen mode"
+msgstr "Fullbill sluten"
+
+#: ../shell/ev-window.c:5160
+msgid "Start Presentation"
+msgstr "Präsentatschoon starten"
+
+#: ../shell/ev-window.c:5161
+#, fuzzy
+msgid "Start a presentation"
+msgstr "Präsentatschoon starten"
+
+#. View Menu
+#: ../shell/ev-window.c:5220
+msgid "_Toolbar"
+msgstr "_Warktüügbalken"
+
+#: ../shell/ev-window.c:5221
+msgid "Show or hide the toolbar"
+msgstr "Warktüügbalken opwiesen or verbargen"
+
+#: ../shell/ev-window.c:5223
+msgid "Side _Pane"
+msgstr "_Sietenrebeet"
+
+#: ../shell/ev-window.c:5224
+msgid "Show or hide the side pane"
+msgstr ""
+
+#: ../shell/ev-window.c:5226
+msgid "_Continuous"
+msgstr ""
+
+#: ../shell/ev-window.c:5227
+msgid "Show the entire document"
+msgstr "Dat heele Dokument opwiesen"
+
+#: ../shell/ev-window.c:5229
+msgid "_Dual"
+msgstr "_Twejfach"
+
+#: ../shell/ev-window.c:5230
+msgid "Show two pages at once"
+msgstr "Twej Sieten op eenmol opwiesen"
+
+#: ../shell/ev-window.c:5232
+msgid "_Fullscreen"
+msgstr "_Fullbill"
+
+#: ../shell/ev-window.c:5233
+msgid "Expand the window to fill the screen"
+msgstr ""
+
+#: ../shell/ev-window.c:5235
+msgid "Pre_sentation"
+msgstr "Präsentat_schoon"
+
+#: ../shell/ev-window.c:5236
+msgid "Run document as a presentation"
+msgstr "Dokument as Vordrag opmaken"
+
+#: ../shell/ev-window.c:5244
+msgid "_Inverted Colors"
+msgstr "_Klöörs umdreihn"
+
+#: ../shell/ev-window.c:5245
+msgid "Show page contents with the colors inverted"
+msgstr ""
+
+#. Links
+#: ../shell/ev-window.c:5253
+msgid "_Open Link"
+msgstr "_Verknüppen opmaken"
+
+#: ../shell/ev-window.c:5255
+msgid "_Go To"
+msgstr "_Denn man to"
+
+#: ../shell/ev-window.c:5257
+msgid "Open in New _Window"
+msgstr "In nejem _Finster opmaken"
+
+#: ../shell/ev-window.c:5259
+msgid "_Copy Link Address"
+msgstr "_Verknüppenanskrivt koperen"
+
+#: ../shell/ev-window.c:5261
+msgid "_Save Image As..."
+msgstr "_Bill spiekern as..."
+
+#: ../shell/ev-window.c:5263
+msgid "Copy _Image"
+msgstr "Bill _koperen"
+
+#: ../shell/ev-window.c:5268
+msgid "_Open Attachment"
+msgstr "Anhangen _opmaken"
+
+#: ../shell/ev-window.c:5270
+msgid "_Save Attachment As..."
+msgstr "Anhangen _spiekern as..."
+
+#: ../shell/ev-window.c:5323
+msgid "Zoom"
+msgstr "Gröte"
+
+#: ../shell/ev-window.c:5325
+msgid "Adjust the zoom level"
+msgstr "Gröte ännern"
+
+#: ../shell/ev-window.c:5335
+msgid "Navigation"
+msgstr "Navigatschoon"
+
+#: ../shell/ev-window.c:5337
+msgid "Back"
+msgstr "Torügg"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5340
+msgid "Move across visited pages"
+msgstr ""
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5370
+msgid "Previous"
+msgstr "Een' torügg"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5375
+msgid "Next"
+msgstr "Een' vor"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5379
+msgid "Zoom In"
+msgstr "Gröter maken"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5383
+msgid "Zoom Out"
+msgstr "Lütter maken"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5391
+msgid "Fit Width"
+msgstr "Brede ännern"
+
+#: ../shell/ev-window.c:5552
+#: ../shell/ev-window.c:5569
+msgid "Unable to launch external application."
+msgstr ""
+
+#: ../shell/ev-window.c:5609
+msgid "Unable to open external link"
+msgstr ""
+
+#: ../shell/ev-window.c:5776
+msgid "Couldn't find appropriate format to save image"
+msgstr ""
+
+#: ../shell/ev-window.c:5818
+msgid "The image could not be saved."
+msgstr ""
+
+#: ../shell/ev-window.c:5850
+msgid "Save Image"
+msgstr "Bill spiekern"
+
+#: ../shell/ev-window.c:5917
+msgid "Unable to open attachment"
+msgstr "Künn Anhangen nich opmaken"
+
+#: ../shell/ev-window.c:5970
+msgid "The attachment could not be saved."
+msgstr ""
+
+#: ../shell/ev-window.c:6015
+msgid "Save Attachment"
+msgstr "Anhang spiekern"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - Passwoord nödig"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "Nah Erwietern"
+
+#: ../shell/main.c:68
+#: ../shell/main.c:244
+msgid "MATE Document Viewer"
+msgstr "MATE Dokumentopwieser"
+
+#: ../shell/main.c:76
+msgid "The page of the document to display."
+msgstr ""
+
+#: ../shell/main.c:76
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:77
+msgid "Run evince in fullscreen mode"
+msgstr "Evince in Fullbill lööpen laten"
+
+#: ../shell/main.c:78
+msgid "Run evince in presentation mode"
+msgstr "Evince in Vordragsmodus lööpen laten"
+
+#: ../shell/main.c:79
+msgid "Run evince as a previewer"
+msgstr ""
+
+#: ../shell/main.c:80
+msgid "The word or phrase to find in the document"
+msgstr "Dat Woort or de Deel, de in düssen Dokumentä funnen werrn schall"
+
+#: ../shell/main.c:80
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:84
+msgid "[FILE...]"
+msgstr "[FILE...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid "Boolean options available, true enables thumbnailing and false disables the creation of new thumbnails"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid "Valid command plus arguments for the PDF Document thumbnailer. See caja thumbnailer documentation for more information."
+msgstr ""
+
diff --git a/po/ne.po b/po/ne.po
new file mode 100644
index 00000000..53d3db07
--- /dev/null
+++ b/po/ne.po
@@ -0,0 +1,1302 @@
+# translation of evince.HEAD.ne.po to Nepali
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# Pawan Chitrakar <[email protected]>, 2005.
+# Shiva Prasad Pokharel <[email protected]>, 2005.
+# Mahesh Subedi <[email protected]>, 2006.
+# Shyam Krishna Bal <[email protected]>, 2006.
+# Narayan Kumar Magar <[email protected]>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.HEAD.ne\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-09-05 12:50+0100\n"
+"PO-Revision-Date: 2007-10-09 11:41+0545\n"
+"Last-Translator: Narayan Kumar Magar <[email protected]>\n"
+"Language-Team: Nepali <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:150
+msgid "File corrupted."
+msgstr "दूषित फाइल ।"
+
+#: ../backend/comics/comics-document.c:186
+#, c-format
+msgid "No images found in archive %s"
+msgstr "संग्रह %s मा कुनै पनि छवि फेला परेन"
+
+#: ../backend/djvu/djvu-document.c:165
+msgid ""
+"The document is composed by several files. One or more of such files cannot "
+"be accessed."
+msgstr "कागजात धेरै फाइलहरूद्वारा सिर्जना गरिएको हो । एक वा धेरै त्यस्ता फाइलहरूको पहुँच प्राप्त गर्न सक्दैन ।"
+
+#: ../backend/dvi/dvi-document.c:98
+msgid "File not available"
+msgstr "फाइल उपलब्ध छैन"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI कागजात गलत ढाचाँमा छ"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:701
+msgid "Yes"
+msgstr "हो"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:704
+msgid "No"
+msgstr "होइन"
+
+#: ../backend/pdf/ev-poppler.cc:777
+msgid "Type 1"
+msgstr "प्रकार १"
+
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Type 1C"
+msgstr "प्रकार १C"
+
+#: ../backend/pdf/ev-poppler.cc:781
+msgid "Type 3"
+msgstr "प्रकार ३"
+
+#: ../backend/pdf/ev-poppler.cc:783
+msgid "TrueType"
+msgstr "सत्य प्रकार"
+
+#: ../backend/pdf/ev-poppler.cc:785
+msgid "Type 1 (CID)"
+msgstr "प्रकार १ (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:787
+msgid "Type 1C (CID)"
+msgstr "प्रकार १C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:789
+msgid "TrueType (CID)"
+msgstr "सत्य प्रकार (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:791
+msgid "Unknown font type"
+msgstr "फन्ट प्रकार अज्ञात"
+
+#: ../backend/pdf/ev-poppler.cc:817
+msgid "No name"
+msgstr "नाम छैन"
+
+#: ../backend/pdf/ev-poppler.cc:825
+msgid "Embedded subset"
+msgstr "सम्मिलित सबसेट"
+
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "Embedded"
+msgstr "सम्मिलित"
+
+#: ../backend/pdf/ev-poppler.cc:829
+msgid "Not embedded"
+msgstr "सम्मिलित होइन"
+
+#: ../backend/impress/zip.c:52
+msgid "No error"
+msgstr "त्रुटि छैन"
+
+#: ../backend/impress/zip.c:55
+msgid "Not enough memory"
+msgstr "प्रशस्त स्मृति छैन"
+
+#: ../backend/impress/zip.c:58
+msgid "Cannot find zip signature"
+msgstr "जिप हस्ताक्षर फेला पार्न सक्दैन"
+
+#: ../backend/impress/zip.c:61
+msgid "Invalid zip file"
+msgstr "अवैध जिप फाइल"
+
+#: ../backend/impress/zip.c:64
+msgid "Multi file zips are not supported"
+msgstr "बहुविध फाइल जिपहरू समर्थित छैनन्"
+
+#: ../backend/impress/zip.c:67
+msgid "Cannot open the file"
+msgstr "फाइल खोल्न सक्दैन"
+
+#: ../backend/impress/zip.c:70
+msgid "Cannot read data from file"
+msgstr "फाइलबाट डेटा पढ्न सक्दैन"
+
+#: ../backend/impress/zip.c:73
+msgid "Cannot find file in the zip archive"
+msgstr "जिप सङ्ग्रहमा फाइल फेला पार्न सक्दैन"
+
+#: ../backend/impress/zip.c:76
+msgid "Unknown error"
+msgstr "अज्ञात त्रुटि"
+
+#: ../backend/ps/gsdefaults.c:30
+msgid "BBox"
+msgstr "बि-बाकस"
+
+#: ../backend/ps/gsdefaults.c:31
+msgid "Letter"
+msgstr "चिठ्ठि"
+
+#: ../backend/ps/gsdefaults.c:32
+msgid "Tabloid"
+msgstr "टेबलायड"
+
+#: ../backend/ps/gsdefaults.c:33
+msgid "Ledger"
+msgstr "लेजर"
+
+#: ../backend/ps/gsdefaults.c:34
+msgid "Legal"
+msgstr "कानुनी"
+
+#: ../backend/ps/gsdefaults.c:35
+msgid "Statement"
+msgstr "भनाई"
+
+#: ../backend/ps/gsdefaults.c:36
+msgid "Executive"
+msgstr "कार्यकारिणी"
+
+#: ../backend/ps/gsdefaults.c:37
+msgid "A0"
+msgstr "ए०"
+
+#: ../backend/ps/gsdefaults.c:38
+msgid "A1"
+msgstr "ए१"
+
+#: ../backend/ps/gsdefaults.c:39
+msgid "A2"
+msgstr "ए२"
+
+#: ../backend/ps/gsdefaults.c:40
+msgid "A3"
+msgstr "ए३"
+
+#: ../backend/ps/gsdefaults.c:41
+msgid "A4"
+msgstr "ए४"
+
+#: ../backend/ps/gsdefaults.c:42
+msgid "A5"
+msgstr "ए५"
+
+#: ../backend/ps/gsdefaults.c:43
+msgid "B4"
+msgstr "बि४"
+
+#: ../backend/ps/gsdefaults.c:44
+msgid "B5"
+msgstr "बि५"
+
+#: ../backend/ps/gsdefaults.c:45
+msgid "Folio"
+msgstr "फोलिओ"
+
+#: ../backend/ps/gsdefaults.c:46
+msgid "Quarto"
+msgstr "क्वर्टो"
+
+#: ../backend/ps/gsdefaults.c:47
+msgid "10x14"
+msgstr "१०x१४"
+
+#: ../backend/ps/ps-document.c:172 ../backend/ps/ps-document.c:186
+#, c-format
+msgid "Cannot open file “%s”."
+msgstr "“%s” फाइल खोल्न सक्दैन ।"
+
+#: ../backend/ps/ps-document.c:233
+#, c-format
+msgid "Failed to load document “%s”. Ghostscript interpreter was not found in path"
+msgstr "“%s” कागजात लोड गर्न असफल भयो । घोस्टस्क्रिप्ट अनुवादक मार्गमा फेला परेको थिएन"
+
+#: ../backend/ps/ps-document.c:250
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "“%s” कागजात लोड गर्न असफल भयो"
+
+#: ../backend/ps/ps-document.c:433
+msgid "Encapsulated PostScript"
+msgstr "इनक्याप्सुलेट गरिएको पोष्टस्क्रिप्ट"
+
+#: ../backend/ps/ps-document.c:434
+msgid "PostScript"
+msgstr "पोष्टस्क्रिप्ट"
+
+#: ../backend/ps/ps-interpreter.c:543
+msgid "Interpreter failed."
+msgstr "व्याख्याकार असफल ।"
+
+#: ../backend/impress/impress-document.c:294
+msgid "Remote files aren't supported"
+msgstr "टाढाको फाइलहरू समर्थित छैनन्"
+
+#: ../backend/impress/impress-document.c:305
+msgid "Invalid document"
+msgstr "अवैध कागजात"
+
+#: ../libdocument/ev-attachment.c:303 ../libdocument/ev-attachment.c:316
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "“%s” संलग्नता बचत गर्न सकेन: %s"
+
+#: ../libdocument/ev-attachment.c:348
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "“%s” संलग्नता खोल्न सकेन: %s"
+
+#: ../libdocument/ev-attachment.c:381
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "“%s” संलग्नता खोल्न सकेन"
+
+#: ../libdocument/ev-document-factory.c:291
+#: ../libdocument/ev-document-factory.c:398
+msgid "Unknown MIME Type"
+msgstr "अज्ञात माइम प्रकार"
+
+#: ../libdocument/ev-document-factory.c:302
+#, c-format
+msgid "Unhandled MIME type: “%s”"
+msgstr "ह्याण्डल नगरिएको माइम प्रकार: “%s”"
+
+#: ../libdocument/ev-document-factory.c:439
+msgid "All Documents"
+msgstr "सबै कागजातहरु"
+
+#: ../libdocument/ev-document-factory.c:447
+msgid "PostScript Documents"
+msgstr "पोष्टस्क्रिप्ट कागजातहरु"
+
+#: ../libdocument/ev-document-factory.c:457
+msgid "PDF Documents"
+msgstr "पि डि यफ कागजातहरु"
+
+#: ../libdocument/ev-document-factory.c:467 ../shell/ev-window.c:4950
+msgid "Images"
+msgstr "छविहरू"
+
+#: ../libdocument/ev-document-factory.c:477
+msgid "DVI Documents"
+msgstr "डि भि आइ कागजातहरु"
+
+#: ../libdocument/ev-document-factory.c:487
+msgid "Djvu Documents"
+msgstr "Djvu कागजातहरू"
+
+#: ../libdocument/ev-document-factory.c:497
+msgid "Comic Books"
+msgstr "कमिक पुस्तकहरू"
+
+#: ../libdocument/ev-document-factory.c:507
+msgid "Impress Slides"
+msgstr "स्लाइड इम्प्रेस गर्नुहोस्"
+
+#: ../libdocument/ev-document-factory.c:515
+msgid "All Files"
+msgstr "सबै फाइलहरू"
+
+#: ../cut-n-paste/recent-files/egg-recent-view-uimanager.c:205
+#, c-format
+msgid "Open “%s”"
+msgstr "“%s” खोल्नुहोस्"
+
+#: ../cut-n-paste/recent-files/egg-recent-view-uimanager.c:322
+msgid "Empty"
+msgstr "रित्तो"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:938
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s” देखाउनुहोस्"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Move on Toolbar"
+msgstr "उपकरणपट्टीमा सार्नुहोस्"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Move the selected item on the toolbar"
+msgstr "चयन गरिएको वस्तु उपकरणपट्टीमा सार्नुहोस्"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1403
+msgid "_Remove from Toolbar"
+msgstr "उपकरणपट्टीबाट हटाउनुहोस्"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1404
+msgid "Remove the selected item from the toolbar"
+msgstr "उपकरणपट्टीबाट चयन गरिएको वस्तु हटाउनुहोस्"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1405
+msgid "_Delete Toolbar"
+msgstr "उपकरणपट्टी मेट्नुहोस्"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1406
+msgid "Remove the selected toolbar"
+msgstr "चयन गरिएको उपकरणपट्टी हटाउनुहोस्"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:441
+msgid "Separator"
+msgstr "विभाजक"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+msgid "Running in presentation mode"
+msgstr "प्रस्तुति मोडमा चलिरहेको छ"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:4538
+msgid "Best Fit"
+msgstr "सवै भन्दा मिलेको"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "पृष्ठको चौडाई मिलाउनुहोस्"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "५०%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "७०%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "८५%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "१००%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "१२५%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "१५०%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "१७५%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "२००%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "३००%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "४००%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:3669
+#: ../shell/ev-window-title.c:126
+msgid "Document Viewer"
+msgstr "कागजात दृश्यक"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "बहुपृष्ठ कागजात दृश्य गर्नुहोस्"
+
+#: ../data/evince-password.glade.h:1
+msgid "Password Entry"
+msgstr "पासवर्ड प्रविष्टि"
+
+#: ../data/evince-password.glade.h:2
+msgid "Remember password for this session"
+msgstr "यो सत्रका लागि पासवर्ड सम्झनुहोस्"
+
+#: ../data/evince-password.glade.h:3
+msgid "Save password in keyring"
+msgstr "किरिङ्मा पासवर्ड वचत गर्नुहोस्"
+
+#: ../data/evince-password.glade.h:4
+msgid "_Password:"
+msgstr "पासवर्ड:"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>लेखक:</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>सिर्जना गरेको:</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>सर्जक:</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>ढाचाँ:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b>शब्दकुज्जीहरू:</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>परिमार्जन गरिएको:</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b>पृष्ठहरुको सङ्ख्या:</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr "<b>अप्टिमाइज गरिएको:</b>"
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Paper Size:</b>"
+msgstr "<b>कागज साइज:</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Producer:</b>"
+msgstr "<b>निर्माता:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Security:</b>"
+msgstr "<b>सुरक्षा:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Subject:</b>"
+msgstr "<b>विषय:</b>"
+
+#: ../data/evince-properties.glade.h:13
+msgid "<b>Title:</b>"
+msgstr "<b>शीर्षक:</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "कागजात निषेधहरू मिच्नुहोस्"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "कागजात अवरोधहरू अधिलेखन गर्नुहोस्, जस्तै प्रतिलिपी गर्नुमा अवरोध वा मुद्रन गर्नमा अवरोध । "
+
+#: ../properties/ev-properties-main.c:110
+msgid "Document"
+msgstr "कागजातहरू"
+
+#: ../properties/ev-properties-view.c:182
+msgid "None"
+msgstr "कुनै पनि होइन"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:207
+#: ../properties/ev-properties-view.c:367
+msgid "default:mm"
+msgstr "पुर्वनिर्धारित:मिलिमिटर"
+
+#. Metric measurement (millimeters)
+#: ../properties/ev-properties-view.c:249
+#: ../properties/ev-properties-view.c:404
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:253
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f इन्च"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:277
+#: ../properties/ev-properties-view.c:415
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, पोर्ट्रेट (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:284
+#: ../properties/ev-properties-view.c:422
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, ल्याण्डस्केप (%s)"
+
+#. Imperial measurement (inches)
+#: ../properties/ev-properties-view.c:399
+#, c-format
+msgid "%.2f x %.2f in"
+msgstr "%.2f x %.2f in"
+
+#: ../shell/eggfindbar.c:158
+msgid "Search string"
+msgstr "स्ट्रिङ खोज्नुहोस"
+
+#: ../shell/eggfindbar.c:159
+msgid "The name of the string to be found"
+msgstr "स्ट्रिङको नाम पत्ता लगाउन"
+
+#: ../shell/eggfindbar.c:172
+msgid "Case sensitive"
+msgstr "केस सम्वेदनशील"
+
+#: ../shell/eggfindbar.c:173
+msgid "TRUE for a case sensitive search"
+msgstr "अति सम्वेदनशील खोजाईका लागि सत्य"
+
+#: ../shell/eggfindbar.c:180
+msgid "Highlight color"
+msgstr "रंगलाई हाइलाइट गर्नुहोस"
+
+#: ../shell/eggfindbar.c:181
+msgid "Color of highlight for all matches"
+msgstr "सवै म्याचहरुलाई हाइलाइट गर्ने रंग"
+
+#: ../shell/eggfindbar.c:187
+msgid "Current color"
+msgstr "हालको रंग"
+
+#: ../shell/eggfindbar.c:188
+msgid "Color of highlight for the current match"
+msgstr "चालु म्याचहरुलाई हाइलाइट गर्ने रंग"
+
+#: ../shell/eggfindbar.c:321
+msgid "Find:"
+msgstr "फेला पार्नुहोस्:"
+
+#: ../shell/eggfindbar.c:330
+msgid "Find Previous"
+msgstr "अघिल्लो फेला पार्नुहोस्"
+
+#: ../shell/eggfindbar.c:334 ../shell/eggfindbar.c:337
+msgid "Find previous occurrence of the search string"
+msgstr "खोजी स्ट्रिङको अघिल्लो घटना फेला पार्नुहोस्"
+
+#: ../shell/eggfindbar.c:343
+msgid "Find Next"
+msgstr "पछिल्लो फेला पार्नुहोस्"
+
+#: ../shell/eggfindbar.c:347 ../shell/eggfindbar.c:350
+msgid "Find next occurrence of the search string"
+msgstr "खोजी स्ट्रिङको पछिल्‍‌लो घटना फेला पार्नुहोस्"
+
+#: ../shell/eggfindbar.c:359
+msgid "C_ase Sensitive"
+msgstr "केस सम्वेदनशील"
+
+#: ../shell/eggfindbar.c:363 ../shell/eggfindbar.c:366
+msgid "Toggle case sensitive search"
+msgstr "केस सम्वेदनशील खोजी टगल गर्नुहोस्"
+
+#: ../shell/ev-jobs.c:642
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "“%s” फाइल सिर्जना गर्न असफल भयो: %s"
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d को %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "को %d"
+
+#: ../shell/ev-password.c:83
+msgid "Password required"
+msgstr "पासवर्ड चाहियो"
+
+#: ../shell/ev-password.c:84
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "“%s” कागजात ताल्‍‌चा लगाइएको छ र यो खोल्‍‌नु भन्दा पहिला पासवर्ड आवश्यक हुन्छ ।"
+
+#: ../shell/ev-password.c:149
+msgid "Enter password"
+msgstr "पासवर्ड प्रविष्टि गर्नुहोस्"
+
+#: ../shell/ev-password.c:252
+#, c-format
+msgid "Password for document %s"
+msgstr "कागजात %s का लागि पासवर्ड"
+
+#: ../shell/ev-password.c:334
+msgid "Incorrect password"
+msgstr "गलत पासवर्ड"
+
+#: ../shell/ev-password-view.c:111
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "यो कागजात लक गरिएको छ र यसलाई ठिक पासवर्ड प्रविष्टि गरेर मात्र पढ्न सकिन्छ ।"
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "कागजात ताल्चा खोल्नुहोस्"
+
+#: ../shell/ev-properties-dialog.c:61
+msgid "Properties"
+msgstr "गुणहरू"
+
+#: ../shell/ev-properties-dialog.c:94
+msgid "General"
+msgstr "साधारण"
+
+#: ../shell/ev-properties-dialog.c:104
+msgid "Fonts"
+msgstr "फन्टहरू"
+
+#: ../shell/ev-properties-fonts.c:141
+msgid "Font"
+msgstr "फन्ट"
+
+#: ../shell/ev-properties-fonts.c:152
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "फन्ट सूचना सामेल... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:670
+msgid "Attachments"
+msgstr "संलग्नता"
+
+#: ../shell/ev-sidebar-links.c:266 ../shell/ev-view.c:3491
+msgid "Loading..."
+msgstr "लोड हुँदैछ..."
+
+#: ../shell/ev-sidebar-links.c:342
+msgid "Print..."
+msgstr "मुद्रण गर्नुहोस्..."
+
+#: ../shell/ev-sidebar-links.c:722
+msgid "Index"
+msgstr "अनुक्रमणिका"
+
+#: ../shell/ev-sidebar-thumbnails.c:729
+msgid "Thumbnails"
+msgstr "थम्बनेलहरू"
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Up"
+msgstr "माथि स्क्रोल गर्नुहोस्"
+
+#: ../shell/ev-view-accessible.c:43
+msgid "Scroll Down"
+msgstr "तल स्क्रोल गर्नुहोस्"
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Up"
+msgstr "दृश्य माथि स्क्रोल गर्नुहोस्"
+
+#: ../shell/ev-view-accessible.c:50
+msgid "Scroll View Down"
+msgstr "दृश्य तल स्क्रोल गर्नुहोस्"
+
+#: ../shell/ev-view-accessible.c:536
+msgid "Document View"
+msgstr "कागजात दृश्य"
+
+#: ../shell/ev-view.c:1423
+msgid "Go to first page"
+msgstr "पहिलो पृष्ठमा जानुहोस्"
+
+#: ../shell/ev-view.c:1425
+msgid "Go to previous page"
+msgstr "अघिल्लो पृष्ठमा जानुहोस्"
+
+#: ../shell/ev-view.c:1427
+msgid "Go to next page"
+msgstr "पछिल्‍‌लो पृष्ठमा जानुहोस्"
+
+#: ../shell/ev-view.c:1429
+msgid "Go to last page"
+msgstr "अन्तिम पृष्ठमा जानुहोस्"
+
+#: ../shell/ev-view.c:1431
+msgid "Go to page"
+msgstr "पृष्ठमा जानुहोस्"
+
+#: ../shell/ev-view.c:1433
+msgid "Find"
+msgstr "फेला पार्नुहोस्"
+
+#: ../shell/ev-view.c:1461
+#, c-format
+msgid "Go to page %s"
+msgstr "%s पानामा जानुहोस्"
+
+#: ../shell/ev-view.c:1467
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "“%s” फाइलमा %s मा जानुहोस्"
+
+#: ../shell/ev-view.c:1470
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” फाइलमा जानुहोस्"
+
+#: ../shell/ev-view.c:1478
+#, c-format
+msgid "Launch %s"
+msgstr "%s सुरु गर्नुहोस्"
+
+#: ../shell/ev-view.c:2419
+msgid "End of presentation. Press Escape to exit."
+msgstr "प्रस्तुतिको समाप्ति । निस्कनका लागि इस्केप थिच्नुहोस् ।"
+
+#: ../shell/ev-view.c:3214
+msgid "Jump to page:"
+msgstr "पृष्ठमा जानुहोस्:"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:4851
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "यो पृष्ठमा %d भेट्टियो"
+msgstr[1] "यो पृष्ठमा %d भेट्टियो"
+
+#: ../shell/ev-view.c:4860
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% खोजका लागि वाँकी"
+
+#: ../shell/ev-window.c:746
+#, c-format
+msgid "Page %s - %s"
+msgstr "पृष्ठ %s - %s"
+
+#: ../shell/ev-window.c:748
+#, c-format
+msgid "Page %s"
+msgstr "पृष्ठ %s"
+
+#: ../shell/ev-window.c:1369
+msgid "Unable to open document"
+msgstr "कागजात खोल्न अक्षम छ"
+
+#: ../shell/ev-window.c:1559
+msgid "Open Document"
+msgstr "कागजात खोल्नुहोस्"
+
+#: ../shell/ev-window.c:1629
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "“%s” प्रणाली लिङ्क सिर्जना गर्न सकेन: %s"
+
+#: ../shell/ev-window.c:1658
+msgid "Cannot open a copy."
+msgstr "प्रतिलिपि खोल्न सक्दैन ।"
+
+#: ../shell/ev-window.c:1940 ../shell/ev-window.c:2012
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "“%s” को रुपमा फाइल बचत गर्न सकेन ।"
+
+#: ../shell/ev-window.c:2061
+msgid "Save a Copy"
+msgstr "एउटा प्रतिलिपि बचत गर्नुहोस्"
+
+#: ../shell/ev-window.c:2159 ../shell/ev-window.c:3369
+msgid "Failed to print document"
+msgstr "कागजात मुद्रण गर्न असफल भयो"
+
+#: ../shell/ev-window.c:2321 ../shell/ev-window.c:2500
+msgid "Printing is not supported on this printer."
+msgstr "यस मुद्रकमा मुद्रण कार्य समर्थन गरिदैन ।"
+
+#: ../shell/ev-window.c:2436 ../shell/ev-window.c:2551
+#: ../shell/ev-window.c:4347
+msgid "Print"
+msgstr "मुद्रण गर्नुहोस्"
+
+#: ../shell/ev-window.c:2490
+msgid "Generating PDF is not supported"
+msgstr "पि डि यफ उत्पन्न गर्ने काम समर्थन गरेन"
+
+#: ../shell/ev-window.c:2502
+#, c-format
+msgid ""
+"You were trying to print to a printer using the “%s” driver. This program "
+"requires a PostScript printer driver."
+msgstr ""
+"%s ड्राइभर प्रयोग गरिरहेको एउटा मुद्रकमा तपाईँले मुद्रण गर्न प्रयास गरिरहनु भएको थियो । यो कार्यक्रमलाई "
+"एउटा पोष्टस्क्रिप्ट मुद्रक ड्राइभर आवश्यक पर्दछ ।"
+
+#: ../shell/ev-window.c:2560
+msgid "Pages"
+msgstr "पृष्ठहरू"
+
+#: ../shell/ev-window.c:3150
+msgid "Toolbar Editor"
+msgstr "उपकरणपट्टी सम्पादक"
+
+#: ../shell/ev-window.c:3665
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"कागजात दर्शक ।\n"
+"पोपलर प्रयोग गर्दै %s (%s)"
+
+#: ../shell/ev-window.c:3693
+msgid ""
+"Evince 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.\n"
+msgstr "इभाइन्स स्वतन्त्र सफ्टवेयर हो, तपाईँले यसलाई स्वतन्त्र सफ्टवेयर संस्थाद्वारा प्रकाशित जिएनयु सामान्य सार्वजनिक ईजाजतपत्रको शर्त भित्र रहेर;वा ईजाजतपत्रको संस्करण २, वा (तपाईको विकल्प )मा पछिका कुनै संस्करणबाट पुनर्वितरण गर्न र/वा परिमार्जन गर्न सक्नुहुन्छ ।\n"
+
+#: ../shell/ev-window.c:3697
+msgid ""
+"Evince 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.\n"
+msgstr "इभाइन्स उपयोगि हुने आशामा तर कुनै वारेन्टि विना, यद्यपि व्यापारिकरण वा कुनै निश्चित उदेश्यसँगको कुनै सूचीत वारेन्टि विना नै वितरण गरिएको हो । अरु विस्तृत विवरणका लागि जिएनयु साधारण सार्वजनिक ईजाजतपत्र हेर्नुहोस् ।\n"
+
+#: ../shell/ev-window.c:3701
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr "तपाईले इभाइन्स सँगसँगै जिएनयु साधारण सार्वजनिक इजाजतपत्रको प्रतिलिपि प्राप्त गर्नु पर्दछ, यदि नभएमा, स्वतन्त्र सफ्टवेयर संस्था, इन्क.,५९ टेम्पल प्लेस,सुट ३३०, वोस्टोन, एमए ०२१११-१३०७ यु एस ए लाई लेख्नुहोस्\n"
+
+#: ../shell/ev-window.c:3725 ../shell/main.c:331
+msgid "Evince"
+msgstr "इभाइन्स"
+
+#: ../shell/ev-window.c:3728
+msgid "© 1996-2007 The Evince authors"
+msgstr "© १९९६-२००७ इभाइन्स लेखकहरु"
+
+#: ../shell/ev-window.c:3734
+msgid "translator-credits"
+msgstr "Mahesh Subedi<[email protected]>"
+
+#: ../shell/ev-window.c:4258
+msgid "_File"
+msgstr "फाइल"
+
+#: ../shell/ev-window.c:4259
+msgid "_Edit"
+msgstr "सम्पादन गर्नुहोस्"
+
+#: ../shell/ev-window.c:4260
+msgid "_View"
+msgstr "दृश्य"
+
+#: ../shell/ev-window.c:4261
+msgid "_Go"
+msgstr "जानुहोस्"
+
+#: ../shell/ev-window.c:4262
+msgid "_Help"
+msgstr "मद्दत"
+
+#. File menu
+#: ../shell/ev-window.c:4265 ../shell/ev-window.c:4443
+msgid "_Open..."
+msgstr "खोल्नुहोस्..."
+
+#: ../shell/ev-window.c:4266
+msgid "Open an existing document"
+msgstr "अवस्थित रहेको कागजात खोल्नुहोस्"
+
+#: ../shell/ev-window.c:4268
+msgid "Op_en a Copy"
+msgstr "एउटा प्रतिलिपि खोल्नुहोस्"
+
+#: ../shell/ev-window.c:4269
+msgid "Open a copy of the current document in a new window"
+msgstr "हालको कागजातको एउटा प्रतिलिपि नयाँ सञ्झ्यालमा खोल्नुहोस्"
+
+#: ../shell/ev-window.c:4271 ../shell/ev-window.c:4445
+msgid "_Save a Copy..."
+msgstr "एउटा प्रतिलिपि बचत गर्नुहोस्..."
+
+#: ../shell/ev-window.c:4272
+msgid "Save a copy of the current document"
+msgstr "चालु कागजातलाई एउटा प्रतिलिपि बचत गर्नुहोस्"
+
+#: ../shell/ev-window.c:4274
+msgid "Print Set_up..."
+msgstr "मुद्रण सेटअप गर्नुहोस्..."
+
+#: ../shell/ev-window.c:4275
+msgid "Setup the page settings for printing"
+msgstr "मुद्रणका लागि पृष्ठ सेटिङ सेटअप गर्नुहोस्"
+
+#: ../shell/ev-window.c:4277
+msgid "_Print..."
+msgstr "मुद्रण गर्नुहोस्..."
+
+#: ../shell/ev-window.c:4278 ../shell/ev-window.c:4348
+msgid "Print this document"
+msgstr "यो कागजातलाई मुद्रण गर्नुहोस्"
+
+#: ../shell/ev-window.c:4280
+msgid "P_roperties"
+msgstr "गुणहरू"
+
+#: ../shell/ev-window.c:4289 ../shell/ev-window.c:4291
+msgid "Select _All"
+msgstr "सबै छान्नुहोस्"
+
+#: ../shell/ev-window.c:4294
+msgid "_Find..."
+msgstr "फेला पार्नुहोस्..."
+
+#: ../shell/ev-window.c:4295
+msgid "Find a word or phrase in the document"
+msgstr "कागजातमा शब्द वा वाक्याशं फेलापार्नुहोस्"
+
+#: ../shell/ev-window.c:4297
+msgid "Find Ne_xt"
+msgstr "अर्को फेला पार्नुहोस्"
+
+#: ../shell/ev-window.c:4299
+msgid "Find Pre_vious"
+msgstr "अघिल्लो फेला पार्नुहोस्"
+
+#: ../shell/ev-window.c:4301
+msgid "T_oolbar"
+msgstr "उपकरणपट्टी"
+
+#: ../shell/ev-window.c:4303
+msgid "Rotate _Left"
+msgstr "बायाँ घुमाउनुहोस्"
+
+#: ../shell/ev-window.c:4305
+msgid "Rotate _Right"
+msgstr "दायाँ घुमाउनुहोस्"
+
+#: ../shell/ev-window.c:4310
+msgid "Enlarge the document"
+msgstr "कागजातलाई ठूलो बनाउनुहोस्"
+
+#: ../shell/ev-window.c:4313
+msgid "Shrink the document"
+msgstr "कागजात खुम्च्याउनुहोस्"
+
+#: ../shell/ev-window.c:4315
+msgid "_Reload"
+msgstr "पुन:लोड गर्नुहोस्"
+
+#: ../shell/ev-window.c:4316
+msgid "Reload the document"
+msgstr "कागजातलाई पुन:लोड गर्नुहोस"
+
+#. Go menu
+#: ../shell/ev-window.c:4320
+msgid "_Previous Page"
+msgstr "अघिल्लो पृष्ठ"
+
+#: ../shell/ev-window.c:4321
+msgid "Go to the previous page"
+msgstr "अघिल्लो पृष्ठमा जानुहोस्"
+
+#: ../shell/ev-window.c:4323
+msgid "_Next Page"
+msgstr "अर्को पृष्ठ"
+
+#: ../shell/ev-window.c:4324
+msgid "Go to the next page"
+msgstr "अर्को पृष्ठमा जानुहोस्"
+
+#: ../shell/ev-window.c:4326
+msgid "_First Page"
+msgstr "पहिलो पृष्ठ"
+
+#: ../shell/ev-window.c:4327
+msgid "Go to the first page"
+msgstr "पहिलो पृष्ठमा जानुहोस्"
+
+#: ../shell/ev-window.c:4329
+msgid "_Last Page"
+msgstr "अन्तिम पृष्ठ"
+
+#: ../shell/ev-window.c:4330
+msgid "Go to the last page"
+msgstr "अन्तिम पृष्ठमा जानुहोस्"
+
+#. Help menu
+#: ../shell/ev-window.c:4334
+msgid "_Contents"
+msgstr "सामाग्रीहरू"
+
+#: ../shell/ev-window.c:4337
+msgid "_About"
+msgstr "बारेमा"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4341
+msgid "Leave Fullscreen"
+msgstr "पुर्णपर्दालाई छाड्नुहोस"
+
+#: ../shell/ev-window.c:4342
+msgid "Leave fullscreen mode"
+msgstr "पूरा पर्दा मोड छोड्नुहोस्"
+
+#: ../shell/ev-window.c:4344
+msgid "Start Presentation"
+msgstr "प्रस्तुती सुरु गर्नुहोस्"
+
+#: ../shell/ev-window.c:4345
+msgid "Start a presentation"
+msgstr "प्रस्तुति सुरु गर्नुहोस्"
+
+#. View Menu
+#: ../shell/ev-window.c:4399
+msgid "_Toolbar"
+msgstr "उपकरणपट्टी"
+
+#: ../shell/ev-window.c:4400
+msgid "Show or hide the toolbar"
+msgstr "उपकरणपट्टी देखाउनुहोस् वा लुकाउनुहोस्"
+
+#: ../shell/ev-window.c:4402
+msgid "Side _Pane"
+msgstr "साइड फलक"
+
+#: ../shell/ev-window.c:4403
+msgid "Show or hide the side pane"
+msgstr "छेउ फलक देखाउनुहोस् वा लुकाउनुहोस"
+
+#: ../shell/ev-window.c:4405
+msgid "_Continuous"
+msgstr "निरन्तरता"
+
+#: ../shell/ev-window.c:4406
+msgid "Show the entire document"
+msgstr "सम्पूर्णकागजात देखाउनुहोस्"
+
+#: ../shell/ev-window.c:4408
+msgid "_Dual"
+msgstr "दोहोरो"
+
+#: ../shell/ev-window.c:4409
+msgid "Show two pages at once"
+msgstr "दुइ कागजात एकै पटक देखाउनुहोस्"
+
+#: ../shell/ev-window.c:4411
+msgid "_Fullscreen"
+msgstr "पूरा पर्दा"
+
+#: ../shell/ev-window.c:4412
+msgid "Expand the window to fill the screen"
+msgstr "पर्दा भर्नका लागि सञ्झ्याल वढाउनुहोस्"
+
+#: ../shell/ev-window.c:4414
+msgid "_Presentation"
+msgstr "प्रस्तुती"
+
+#: ../shell/ev-window.c:4415
+msgid "Run document as a presentation"
+msgstr "प्रस्तुति जस्तै कागजात चलाउनुहोस्"
+
+#: ../shell/ev-window.c:4417
+msgid "_Best Fit"
+msgstr "सवै भन्दा मिलेको"
+
+#: ../shell/ev-window.c:4418
+msgid "Make the current document fill the window"
+msgstr "हालको कागजातलाई सञ्झ्याल भरिने बनाउनुहोस्"
+
+#: ../shell/ev-window.c:4420
+msgid "Fit Page _Width"
+msgstr "पृष्ठको चौडाई मिलाउनुहोस्"
+
+#: ../shell/ev-window.c:4421
+msgid "Make the current document fill the window width"
+msgstr "सञ्झ्याल चौडाई भर्न हालको कागजात वनाउनुहोस्"
+
+#. Links
+#: ../shell/ev-window.c:4428
+msgid "_Open Link"
+msgstr "लिङ्क खोल्नुहोस्"
+
+#: ../shell/ev-window.c:4430
+msgid "_Go To"
+msgstr "जानुहोस्"
+
+#: ../shell/ev-window.c:4432
+msgid "Open in New _Window"
+msgstr "नयाँ सञ्झ्यालमा खोल्नुहोस्"
+
+#: ../shell/ev-window.c:4434
+msgid "_Copy Link Address"
+msgstr "लिङ्क ठेगाना प्रतिलिपि बनाउनुहोस्"
+
+#: ../shell/ev-window.c:4436
+msgid "_Save Image As..."
+msgstr "यस रुपमा छवि बचत गर्नुहोस्..."
+
+#: ../shell/ev-window.c:4438
+msgid "Copy _Image"
+msgstr "छवि प्रतिलिपि बनाउनुहोस्"
+
+#: ../shell/ev-window.c:4477
+msgid "Page"
+msgstr "पृष्ठ"
+
+#: ../shell/ev-window.c:4478
+msgid "Select Page"
+msgstr "पृष्ठ चयन गर्नुहोस्"
+
+#: ../shell/ev-window.c:4489
+msgid "Zoom"
+msgstr "जूम"
+
+#: ../shell/ev-window.c:4491
+msgid "Adjust the zoom level"
+msgstr "जूम स्तर समायोजन गर्नुहोस्"
+
+#: ../shell/ev-window.c:4501
+msgid "Navigation"
+msgstr "नेभिगेसन"
+
+#: ../shell/ev-window.c:4503
+msgid "Back"
+msgstr "पछाडि"
+
+#: ../shell/ev-window.c:4505
+msgid "Move across visited pages"
+msgstr "पहिला खोलिएका पृष्ठहरूमा जानुहोस्"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4521
+msgid "Previous"
+msgstr "अघिल्लो"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4526
+msgid "Next"
+msgstr "अर्को"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4530
+msgid "Zoom In"
+msgstr "जूम इन"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4534
+msgid "Zoom Out"
+msgstr "जुम आउट"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4542
+msgid "Fit Width"
+msgstr "चौडाइ मिलाउनुहोस"
+
+#: ../shell/ev-window.c:4732
+msgid "Unable to open external link"
+msgstr "बाह्य लिङ्क खोल्न अक्षम छ"
+
+#: ../shell/ev-window.c:4734
+#, c-format
+msgid "Invalid URI: “%s”"
+msgstr "अवैध यूआरएल: “%s”"
+
+#: ../shell/ev-window.c:4902
+msgid "The image could not be saved."
+msgstr "छविलाई बचत गर्न सकेन ।"
+
+#: ../shell/ev-window.c:4937
+msgid "Save Image"
+msgstr "छवि बचत गर्नुहोस्"
+
+#: ../shell/ev-window.c:4993
+msgid "Unable to open attachment"
+msgstr "संलग्नता खोल्न अक्षम छ"
+
+#: ../shell/ev-window.c:5046
+msgid "The attachment could not be saved."
+msgstr "संलग्नतालाई बचत गर्न सकिएन ।"
+
+#: ../shell/ev-window.c:5098
+msgid "Save Attachment"
+msgstr "संलग्नता बचत गर्नुहोस्"
+
+#: ../shell/ev-window-title.c:139
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - पासवर्ड आवश्यक्ता"
+
+#: ../shell/main.c:59
+msgid "The page of the document to display."
+msgstr "कागजातको पृष्ठ प्रर्दशन गर्न"
+
+#: ../shell/main.c:59
+msgid "PAGE"
+msgstr "पृष्ठ"
+
+#: ../shell/main.c:60
+msgid "Run evince in fullscreen mode"
+msgstr "पूरा पर्दा मोडमा इभान्स चलाउनुहोस्"
+
+#: ../shell/main.c:61
+msgid "Run evince in presentation mode"
+msgstr "प्रस्तुति मोडमा इभान्स चलाउनुहोस्"
+
+#: ../shell/main.c:62
+msgid "Run evince as a previewer"
+msgstr "एउटा पूर्वदर्शकको रुपमा इभान्स चलाउनुहोस्"
+
+#: ../shell/main.c:65
+msgid "[FILE...]"
+msgstr "[FILE...]"
+
+#: ../shell/main.c:314
+msgid "MATE Document Viewer"
+msgstr "जिनोम कागजात दर्शक"
+
+#: ../shell/main.c:374
+msgid "Evince Document Viewer"
+msgstr "इभाइन्स कागजात दृश्यक"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"बुलियन विकल्पहरू उपलब्ध छ, थम्बनेलको सत्य सक्षमहरू र गलत अक्षमहरूले नयाँ थम्बनेलहरुको सिर्जना "
+"गर्दछ "
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "पि डि एफ कागजातहरुको थम्बनेल गर्ने सक्षम पार्नुहोस्"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "पि डि एफ कागजातहरुका लागि थम्बनेल्स आदेश"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF कागजात थम्बनेलरका लागि वैध आदेश र तर्कहरू । धेरै जानकारीका लागि नटिलस थम्बनेलर "
+"मिसिलीकरण हर्नुहोस् ।"
+
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 00000000..abc6f7c2
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,1801 @@
+# Dutch translation for Evince
+#
+# This file is distributed under the same license as the Evince package.
+#
+# Tino Meinen <[email protected]>, 2005, 2006
+# Reinout van Schouwen <[email protected]>, 2005, 2009
+# Wouter Bolsterlee <[email protected]>, 2006–2010
+#
+# Sommigen vinden 'viewer' niet mooi en willen
+# daar 'weergave' van maken: Documentweergave of
+# Documentenweergave. Persoonlijk geef ik voorlopig
+# de voorkeur aan 'viewer': kort en duidelijk.
+# (eventueel zou kunnen: Documenten inzien)
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-09-19 18:14+0200\n"
+"PO-Revision-Date: 2010-09-19 18:14+0200\n"
+"Last-Translator: Wouter Bolsterlee <[email protected]>\n"
+"Language-Team: Dutch <[email protected]>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Er is een fout opgetreden bij het uitvoeren van opdracht ʻ%sʼ teneinde het "
+"stripboek %s uit te pakken"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "De opdracht ʻ%sʼ is mislukt bij het uitpakken van het stripboek."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "De opdracht ʻ%sʼ is abnormaal afgesloten."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Geen stripboek-MIME-type: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Kan geen passende opdracht vinden om dit type stripboek uit te pakken"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Onbekend MIME-type"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Bestand is beschadigd"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Geen bestanden in archief"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Geen afbeeldingen gevonden in archief %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Er is een fout opgetreden bij het verwijderen van ʻ%sʼ."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Fout %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Stripboeken"
+
+# ongeldig/onjuist/foutief
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu-document heeft onjuist formaat"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Dit document bestaat uit meerdere bestanden. Een van deze bestanden kan niet "
+"benaderd worden."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu-documenten"
+
+# ongeldig/onjuist/foutief
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI-document heeft onjuist formaat"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI-documenten"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Dit werk is in het publieke domein"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Ja"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Nee"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Onbekend soort lettertype"
+
+# geen/naamloos/zonder naam/geen naam
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Naamloos"
+
+# deel/onderdeel
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Ingebed deel"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Ingebed"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Niet ingebed"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF-documenten"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Ongeldig document"
+
+# Vrije vertaling (Wouter Bolsterlee)
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress-presentatie"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Geen fout"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Onvoldoende geheugen"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Kan ZIP-signatuur niet vinden"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Ongeldig ZIP-bestand"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "ZIP-bestanden met meerdere bestanden worden niet ondersteund"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Kan het bestand niet openen"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Kan gegevens van bestand niet lezen"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Kan bestand in zipbestand niet vinden"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Onbekende fout"
+
+# niet in staat/kon
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Open van document ‘%s’ mislukt"
+
+# niet in staat/kon
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Opslaan van document ‘%s’ mislukt"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript-documenten"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "De bijlage ‘%s’ kon niet opgeslagen worden: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "De bijlage ‘%s’ kon niet geopend worden: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "De bijlage ‘%s’ kon niet geopend worden"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Bestandstype %s (%s) wordt niet ondersteund"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Alle documenten"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Alle bestanden"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Aanmaken van een tijdelijk bestand mislukt: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Aanmaken van een tijdelijke map mislukt: %s."
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Bestand is geen geldig desktop-bestand"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Onbekende versie ‘%s’ van desktop-bestand"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s starten"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "De toepassing accepteert geen documenten op de opdrachtregel"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Onbekende opstartoptie: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Kan geen document-URI's naar een desktopbestand met ‘Type=Link’ sturen"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Geen uitvoerbaar item"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Verbinding met sessiebeheer uitschakelen"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Bestand met opgeslagen instellingen opgeven"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "BESTAND"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Sessiebeheer-ID opgeven"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opties voor sessiebeheer:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Opties voor sessiebeheer tonen"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "‘%s’ tonen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "Ver_plaatsen op werkbalk"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Geselecteerd item op de werkbalk verplaatsen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "Ver_wijderen van werkbalk"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Geselecteerd item van de werkbalk verwijderen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "Werkbalk _verwijderen"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "De geselecteerde werkbalk verwijderen"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Scheidingsteken"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5761
+msgid "Best Fit"
+msgstr "Passend"
+
+# korte label (is net zo duidelijk om 'passend' weg te laten)
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Paginabreed"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+# Misschien Evince documentenviewer
+# viewer is ook nederlands
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4554
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Documentenviewer"
+
+# Dit is de tooltip die in het hoofdmenu bij het programma Evince verschijnt
+# multipagina-documenten. Vrij vertaald (Wouter Bolsterlee).
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Documenten weergeven"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Documentrestricties negeren"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Documentrestricties, zoals een beperking op kopiëren of afdrukken, negeren."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Tijdelijk bestand wissen"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Het instellingenbestand afdrukken"
+
+# Misschien Evince documentenviewer
+# viewer is ook nederlands
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "MATE documentenpreviewer"
+
+# niet in staat/kon
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3185
+msgid "Failed to print document"
+msgstr "Afdrukken van het document is mislukt"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Kan de geselecteerde printer ʻ%sʼ niet vinden."
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5476
+msgid "_Previous Page"
+msgstr "Vo_rige pagina"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5477
+msgid "Go to the previous page"
+msgstr "Ga naar de vorige pagina"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5479
+msgid "_Next Page"
+msgstr "V_olgende pagina"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5480
+msgid "Go to the next page"
+msgstr "Ga naar de volgende pagina"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5463
+msgid "Enlarge the document"
+msgstr "Het document vergroten"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5466
+msgid "Shrink the document"
+msgstr "Het document verkleinen"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Afdrukken"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5432
+msgid "Print this document"
+msgstr "Dit document afdrukken"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5578
+msgid "_Best Fit"
+msgstr "_Passend"
+
+# de pagina laten passen in het venster
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5579
+msgid "Make the current document fill the window"
+msgstr "Het huidige document passend weergeven in het venster"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5581
+msgid "Fit Page _Width"
+msgstr "Pagina_breed passend"
+
+# de breedte van de pagina laten passen in het venster
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5582
+msgid "Make the current document fill the window width"
+msgstr "Het huidige document passend maken op de breedte van het venster"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5683
+msgid "Page"
+msgstr "Pagina"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5684
+msgid "Select Page"
+msgstr "Pagina selecteren"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Document"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Titel:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Locatie:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Onderwerp:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Auteur:"
+
+# Sleutelwoorden/trefwoorden
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Trefwoorden:"
+
+# hier wordt het programma weergegeven waarmee het document
+# is gemaakt: dus bijv:
+# Programma: Acrobat distiller 6.0.1. for Macintosh
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Programma:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Maker:"
+
+# er komt te staan: Aangemaakt op: [datum]
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Aangemaakt op:"
+
+# gewijzigd/aangepast
+# Er komt te staan: Laatste wijziging: [datum]
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Laatste wijziging:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Aantal pagina's:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Geoptimaliseerd:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Formaat:"
+
+# er komt te staan: beveiliging: ja/nee
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Beveiliging:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Papierformaat"
+
+# Niets/geen
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Geen"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, staand (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, liggend (%s)"
+
+# misschien beter: uit (ipv van): pagina 1 uit 5
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d uit %d)"
+
+# misschien beter: uit (ipv van): pagina 1 uit 5
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "uit %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Laden…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Afdrukken voorbereiden…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Afronden…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Pagina %d van %d afdrukken…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Afdrukken is niet mogelijk met deze printer."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Ongeldige paginaselectie"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Waarschuwing"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Het geselecteerde afdrukbereik bevat geen enkele pagina"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Schalen van pagina's:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Verkleinen tot afdrukbaar gebied"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Schalen naar afdrukbaar gebied"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Documentpagina's schalen zodat deze op de printerpagina's passen. Kies een "
+"van de volgende opties:\n"
+"\n"
+"• ‘Geen’: pagina's worden niet geschaald.\n"
+"\n"
+"• ‘Verkleinen tot afdrukbaar gebied’: Documentpagina's groter dan het "
+"afdrukbare gebied worden verkleind zodat deze op een printerpagina passen.\n"
+"\n"
+"• ‘Schalen naar afdrukbaar gebied’: Documentpagina's worden vergroot of "
+"verkleind zodat deze op het afdrukbare gebied op een printerpagina passen.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Automatisch roteren en centreren"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Paginaoriëntatie van printer zo roteren dat deze overeenkomt met de "
+"paginaoriëntatie van documentpagina's. Documentpagina's zullen gecentreerd "
+"worden op de printerpagina."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Paginagrootte kiezen aan de hand van de documentpaginagrootte"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Indien ingeschakeld zal iedere pagina afgedrukt worden op dezelfde "
+"paginagrootte als de documentpagina's."
+
+# betere vertaling?
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Pagina-afhandeling"
+
+# niet in staat/kon
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Afdrukken van pagina %d is mislukt: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Omhoog schuiven"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Omlaag schuiven"
+
+# Wat wordt hier precies bedoeld?
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Beeld omhoog schuiven"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Beeld omlaag schuiven"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Documentbeeld"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Ga naar pagina:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Einde van presentatie. Klik om af te sluiten."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Ga naar de eerste pagina"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Ga naar de vorige pagina"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Ga naar de volgende pagina"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Ga naar de laatste pagina"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Ga naar pagina"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Zoeken"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Ga naar pagina %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Ga naar %s in bestand ‘%s’"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Ga naar bestand ‘%s’"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "%s opstarten"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Zoeken:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5449
+msgid "Find Pre_vious"
+msgstr "Vo_rige zoeken"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Zoeken naar vorige positie waar de zoekreeks voorkomt"
+
+# volgende zoeken/volgende
+# Ik heb het hier kort gehouden, en het is ws net zo duidelijk
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5447
+msgid "Find Ne_xt"
+msgstr "V_olgende zoeken"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Zoeken naar volgende positie waar de zoekreeks voorkomt"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Hoofdlettergevoelig"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Hoofdlettergevoelige zoekopdracht"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Pictogram:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Notitie"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Opmerking"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Sleutel"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Hulp"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Nieuwe alinea"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Alinea"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Toevoeging"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Kruis"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Circle"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Onbekend"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Annotatie-eigenschappen"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Kleur:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Style:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Transparant"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Ondoorzichtig"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Initiële weergave:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Openen"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Sluiten"
+
+# Dit is de reden die opgegeven wordt voor het tijdelijk uitschakelen van de
+# schermbeveiliging (Wouter Bolsterlee)
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Diapresentatie bezig"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Wachtwoord voor document %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Conversie van %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d van %d documenten geconverteerd"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Metadata converteren"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Het metadataformaat van Evince is veranderd, zodat de oude instellingen "
+"gemigreerd dienen te worden. Als de migratie onderbroken wordt zal de "
+"metadata-opslag niet meer werken."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Een recentelijk geopend document heropenen"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Het document is beveiligd en kan alleen gelezen worden door het juiste "
+"wachtwoord te geven."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Document vrijgeven"
+
+# invoeren hier met opzet weggelaten
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Voer wachtwoord in"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Wachtwoord vereist"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"Het document ‘%s’ is beveiligd en vereist een wachtwoord voordat het geopend "
+"kan worden."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Wachtwoord:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Wachtwoord direct _vergeten"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Wachtwoord onthouden tot _afmelden"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Voor _altijd onthouden"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Eigenschappen"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Algemeen"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Lettertypes"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Documentlicentie"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Lettertype"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Lettertype-informatie verzamelen… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Gebruiksvoorwaarden"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Licentie-tekst"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Meer informatie"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Lijst"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Annotaties"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Tekst"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Tekstannotatie toevoegen"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Toevoegen"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Dit document bevat geen annotaties"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Pagina %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Bijlagen"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Lagen"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Afdrukken…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Index"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Miniaturen"
+
+#: ../shell/ev-window.c:875
+#, c-format
+msgid "Page %s — %s"
+msgstr "Page %s — %s"
+
+#: ../shell/ev-window.c:877
+#, c-format
+msgid "Page %s"
+msgstr "Pagina %s"
+
+#: ../shell/ev-window.c:1436
+msgid "The document contains no pages"
+msgstr "Het document heeft geen bladzijden"
+
+#: ../shell/ev-window.c:1439
+msgid "The document contains only empty pages"
+msgstr "Het document bevat slechts lege pagina's"
+
+#: ../shell/ev-window.c:1644 ../shell/ev-window.c:1810
+msgid "Unable to open document"
+msgstr "Kon het document niet openen"
+
+#: ../shell/ev-window.c:1781
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Document van ʻ%sʼ laden"
+
+#: ../shell/ev-window.c:1923 ../shell/ev-window.c:2202
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Document downloaden (%d%%)"
+
+# niet in staat/kon
+#: ../shell/ev-window.c:1956
+msgid "Failed to load remote file."
+msgstr "Kon document op afstand niet laden."
+
+#: ../shell/ev-window.c:2146
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Document van %s herladen"
+
+# niet in staat/kon
+#: ../shell/ev-window.c:2178
+msgid "Failed to reload document."
+msgstr "Kon document niet herladen"
+
+#: ../shell/ev-window.c:2333
+msgid "Open Document"
+msgstr "Document openen"
+
+#: ../shell/ev-window.c:2631
+#, c-format
+msgid "Saving document to %s"
+msgstr "Document opslaan naar %s"
+
+#: ../shell/ev-window.c:2634
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Bijlage opslaan naar %s"
+
+#: ../shell/ev-window.c:2637
+#, c-format
+msgid "Saving image to %s"
+msgstr "Afbeelding opslaan naar %s"
+
+#: ../shell/ev-window.c:2681 ../shell/ev-window.c:2781
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Het bestand kon niet worden opgeslagen als ‘%s’."
+
+#: ../shell/ev-window.c:2712
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Document uploaden (%d%%)"
+
+#: ../shell/ev-window.c:2716
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Bijlage uploaden (%d%%)"
+
+#: ../shell/ev-window.c:2720
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Afbeelding uploaden (%d%%)"
+
+#: ../shell/ev-window.c:2844
+msgid "Save a Copy"
+msgstr "Een kopie opslaan"
+
+#: ../shell/ev-window.c:3129
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "Eén taak in de wachtrij"
+msgstr[1] "%d taken in de wachtrij"
+
+#: ../shell/ev-window.c:3242
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Afdrukken van taak ‘%s’"
+
+#: ../shell/ev-window.c:3420
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Het document bevat ingevulde formuliervelden. Als het document niet wordt "
+"opgeslagen, zullen deze wijzigingen verloren gaan."
+
+#: ../shell/ev-window.c:3424
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Het document bevat nieuwe of aangepaste annotaties. Als het document niet "
+"wordt opgeslagen, zullen deze wijzigingen verloren gaan."
+
+#: ../shell/ev-window.c:3431
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Kopie van document ‘%s’ opslaan alvorens af te sluiten?"
+
+#: ../shell/ev-window.c:3450
+msgid "Close _without Saving"
+msgstr "Sluiten _zonder opslaan"
+
+#: ../shell/ev-window.c:3454
+msgid "Save a _Copy"
+msgstr "Een _kopie opslaan"
+
+#: ../shell/ev-window.c:3528
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Wachten tot afdruktaak ‘%s’ voltooid alvorens af te sluiten?"
+
+#: ../shell/ev-window.c:3531
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Er zijn %d afdruktaken actief. Wachten tot deze voltooird zijn alvorens af "
+"te sluiten?"
+
+#: ../shell/ev-window.c:3543
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Als het venster gesloten wordt, zullen afdruktaken in de wachtrij niet meer "
+"uitgevoerd worden."
+
+#: ../shell/ev-window.c:3547
+msgid "Cancel _print and Close"
+msgstr "Afdrukken annuleren en sl_uiten"
+
+#: ../shell/ev-window.c:3551
+msgid "Close _after Printing"
+msgstr "Sluiten na _afdrukken"
+
+#: ../shell/ev-window.c:4171
+msgid "Toolbar Editor"
+msgstr "Werkbalk-editor"
+
+#: ../shell/ev-window.c:4338
+msgid "There was an error displaying help"
+msgstr "Er is een fout opgetreden bij het tonen van de hulp."
+
+#: ../shell/ev-window.c:4550
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Documentenviewer\n"
+"Maakt gebruik van %s (%s)"
+
+#: ../shell/ev-window.c:4581
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince is vrije software; u mag het opnieuw distribueren en/of wijzigen\n"
+"onder de voorwaarden van de GNU General Public License zoals gepubliceerd\n"
+"door de Free Software Foundation; ofwel versie 2 van deze licentie of\n"
+"(zo u wilt) een latere versie.\n"
+
+#: ../shell/ev-window.c:4585
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince wordt gedistibueerd in de hoop dat het nuttig zal zijn,\n"
+"maar ZONDER ENIGE GARANTIE; zonder zelfs de geïmpliceerde garantie\n"
+"van VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de\n"
+"GNU General Public License voor meer details.\n"
+
+#: ../shell/ev-window.c:4589
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"U moet een kopie van de GNU General Public License hebben gekregen\n"
+"samen met Evince; zoniet, schrijf dan naar de Free Software Foundation,\n"
+"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4614
+msgid "Evince"
+msgstr "Evince"
+
+# makers/auteurs
+#: ../shell/ev-window.c:4617
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 De auteurs van Evince"
+
+#: ../shell/ev-window.c:4623
+msgid "translator-credits"
+msgstr ""
+"Tino Meinen\n"
+"Wouter Bolsterlee\n"
+"Reinout van Schouwen\n"
+"Kijk voor meer informatie op http://nl.mate.org/"
+
+# overeenkomsten/gevonden/maal/keer gevonden
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4889
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d keer op deze pagina gevonden"
+msgstr[1] "%d keer op deze pagina gevonden"
+
+#: ../shell/ev-window.c:4894
+msgid "Not found"
+msgstr "Niet gevonden"
+
+#: ../shell/ev-window.c:4900
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Nog %3d%% te doorzoeken"
+
+#: ../shell/ev-window.c:5415
+msgid "_File"
+msgstr "_Bestand"
+
+#: ../shell/ev-window.c:5416
+msgid "_Edit"
+msgstr "Be_werken"
+
+#: ../shell/ev-window.c:5417
+msgid "_View"
+msgstr "Beel_d"
+
+# in overeenstemming met Caja: Ga naar
+#: ../shell/ev-window.c:5418
+msgid "_Go"
+msgstr "_Ga naar"
+
+#: ../shell/ev-window.c:5419
+msgid "_Help"
+msgstr "_Hulp"
+
+#. File menu
+#: ../shell/ev-window.c:5422 ../shell/ev-window.c:5723
+msgid "_Open…"
+msgstr "_Openen…"
+
+#: ../shell/ev-window.c:5423 ../shell/ev-window.c:5724
+msgid "Open an existing document"
+msgstr "Een bestaand document openen"
+
+#: ../shell/ev-window.c:5425
+msgid "Op_en a Copy"
+msgstr "Een _kopie openen"
+
+#: ../shell/ev-window.c:5426
+msgid "Open a copy of the current document in a new window"
+msgstr "Een kopie van het huidige document openen in een nieuw venster"
+
+# Mnemonic gelijk aan "Opslaan _als" (Wouter Bolsterlee)
+#: ../shell/ev-window.c:5428
+msgid "_Save a Copy…"
+msgstr "Een kopie opsl_aan…"
+
+#: ../shell/ev-window.c:5429
+msgid "Save a copy of the current document"
+msgstr "Sla een kopie van het huidige document op"
+
+#: ../shell/ev-window.c:5431
+msgid "_Print…"
+msgstr "Af_drukken…"
+
+#: ../shell/ev-window.c:5434
+msgid "P_roperties"
+msgstr "_Eigenschappen"
+
+#: ../shell/ev-window.c:5442
+msgid "Select _All"
+msgstr "_Alles selecteren"
+
+#: ../shell/ev-window.c:5444
+msgid "_Find…"
+msgstr "_Zoeken…"
+
+# zinsdeel/zin/frase
+#: ../shell/ev-window.c:5445
+msgid "Find a word or phrase in the document"
+msgstr "Een woord of een zin in het document zoeken"
+
+#: ../shell/ev-window.c:5451
+msgid "T_oolbar"
+msgstr "_Werkbalk"
+
+# Linksom/naar links
+#: ../shell/ev-window.c:5453
+msgid "Rotate _Left"
+msgstr "_Linksom draaien"
+
+# rechtsom/naar rechts
+#: ../shell/ev-window.c:5455
+msgid "Rotate _Right"
+msgstr "_Rechtsom draaien"
+
+#: ../shell/ev-window.c:5457
+msgid "Save Current Settings as _Default"
+msgstr "Huidige instellingen als _standaard opslaan"
+
+#: ../shell/ev-window.c:5468
+msgid "_Reload"
+msgstr "He_rladen"
+
+#: ../shell/ev-window.c:5469
+msgid "Reload the document"
+msgstr "Het document herladen"
+
+#: ../shell/ev-window.c:5472
+msgid "Auto_scroll"
+msgstr "Automatisch _schuiven"
+
+#: ../shell/ev-window.c:5482
+msgid "_First Page"
+msgstr "_Eerste pagina"
+
+#: ../shell/ev-window.c:5483
+msgid "Go to the first page"
+msgstr "Ga naar de eerste pagina"
+
+#: ../shell/ev-window.c:5485
+msgid "_Last Page"
+msgstr "_Laatste pagina"
+
+#: ../shell/ev-window.c:5486
+msgid "Go to the last page"
+msgstr "Ga naar de laatste pagina"
+
+# Sneltoets op 'h' gezet
+# beter zichtbaar de de 'i' en komt overeen met emacs
+#. Help menu
+#: ../shell/ev-window.c:5490
+msgid "_Contents"
+msgstr "In_houd"
+
+#: ../shell/ev-window.c:5493
+msgid "_About"
+msgstr "I_nfo"
+
+# schermvullend
+# kde gebruikt Volledig scherm
+#. Toolbar-only
+#: ../shell/ev-window.c:5497
+msgid "Leave Fullscreen"
+msgstr "Volledig scherm verlaten"
+
+#: ../shell/ev-window.c:5498
+msgid "Leave fullscreen mode"
+msgstr "Schermvullende modus verlaten"
+
+#: ../shell/ev-window.c:5500
+msgid "Start Presentation"
+msgstr "Presentatie"
+
+#: ../shell/ev-window.c:5501
+msgid "Start a presentation"
+msgstr "Document als een diapresentatie tonen"
+
+#. View Menu
+#: ../shell/ev-window.c:5560
+msgid "_Toolbar"
+msgstr "_Werkbalk"
+
+#: ../shell/ev-window.c:5561
+msgid "Show or hide the toolbar"
+msgstr "De werkbalk tonen of verbergen"
+
+#: ../shell/ev-window.c:5563
+msgid "Side _Pane"
+msgstr "_Zijpaneel"
+
+#: ../shell/ev-window.c:5564
+msgid "Show or hide the side pane"
+msgstr "Het zijpaneel tonen of verbergen"
+
+#: ../shell/ev-window.c:5566
+msgid "_Continuous"
+msgstr "_Doorlopend"
+
+# hele/gehele/complete document
+#: ../shell/ev-window.c:5567
+msgid "Show the entire document"
+msgstr "Het gehele document tonen"
+
+# Duaal is zo'n raar woord
+#: ../shell/ev-window.c:5569
+msgid "_Dual"
+msgstr "_Twee"
+
+#: ../shell/ev-window.c:5570
+msgid "Show two pages at once"
+msgstr "Twee pagina's tegelijk tonen"
+
+# schermvullend
+# kde gebruikt: vollgedig scherm
+#: ../shell/ev-window.c:5572
+msgid "_Fullscreen"
+msgstr "_Volledig scherm"
+
+#: ../shell/ev-window.c:5573
+msgid "Expand the window to fill the screen"
+msgstr "Het venster schermvullend maken"
+
+#: ../shell/ev-window.c:5575
+msgid "Pre_sentation"
+msgstr "Pre_sentatie"
+
+#: ../shell/ev-window.c:5576
+msgid "Run document as a presentation"
+msgstr "Document als een diapresentatie tonen"
+
+#: ../shell/ev-window.c:5584
+msgid "_Inverted Colors"
+msgstr "_Omgekeerde kleuren"
+
+#: ../shell/ev-window.c:5585
+msgid "Show page contents with the colors inverted"
+msgstr "Pagina's tonen met omgekeerde kleuren"
+
+# link/verwijzing
+#. Links
+#: ../shell/ev-window.c:5593
+msgid "_Open Link"
+msgstr "Verwijzing _openen"
+
+# in overeenstemming met Caja: Ga naar
+#: ../shell/ev-window.c:5595
+msgid "_Go To"
+msgstr "_Ga naar"
+
+#: ../shell/ev-window.c:5597
+msgid "Open in New _Window"
+msgstr "In _nieuw venster openen"
+
+# verwijzing/verwijzingsadres/link-adres
+#: ../shell/ev-window.c:5599
+msgid "_Copy Link Address"
+msgstr "Verwijzingsadres _kopiëren"
+
+#: ../shell/ev-window.c:5601
+msgid "_Save Image As…"
+msgstr "Afbeelding op_slaan als…"
+
+#: ../shell/ev-window.c:5603
+msgid "Copy _Image"
+msgstr "_Afbeelding kopiëren"
+
+#: ../shell/ev-window.c:5605
+msgid "Annotation Properties…"
+msgstr "Annotatie-eigenschappen…"
+
+#: ../shell/ev-window.c:5610
+msgid "_Open Attachment"
+msgstr "Bijlage _openen"
+
+#: ../shell/ev-window.c:5612
+msgid "_Save Attachment As…"
+msgstr "Bijlage op_slaan als…"
+
+# Zoomen
+#: ../shell/ev-window.c:5697
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../shell/ev-window.c:5699
+msgid "Adjust the zoom level"
+msgstr "Het zoomniveau aanpassen"
+
+#: ../shell/ev-window.c:5709
+msgid "Navigation"
+msgstr "Navigatie"
+
+#: ../shell/ev-window.c:5711
+msgid "Back"
+msgstr "Terug"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#. translators: this is the history action
+#: ../shell/ev-window.c:5714
+msgid "Move across visited pages"
+msgstr "Navigeren naar bezochte pagina's"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5744
+msgid "Previous"
+msgstr "Vorige"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5749
+msgid "Next"
+msgstr "Volgende"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5753
+msgid "Zoom In"
+msgstr "Inzoomen"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5757
+msgid "Zoom Out"
+msgstr "Uitzoomen"
+
+# knoptekst?
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5765
+msgid "Fit Width"
+msgstr "Breedte"
+
+# niet in staat/kon
+#: ../shell/ev-window.c:5910 ../shell/ev-window.c:5927
+msgid "Unable to launch external application."
+msgstr "De externe verwijzing kon niet geopend worden"
+
+# niet in staat/kon
+#: ../shell/ev-window.c:5984
+msgid "Unable to open external link"
+msgstr "De externe verwijzing kon niet geopend worden"
+
+#: ../shell/ev-window.c:6151
+msgid "Couldn't find appropriate format to save image"
+msgstr "Kon geen geschikt formaat voor opslaan van afbeelding vinden"
+
+#: ../shell/ev-window.c:6193
+msgid "The image could not be saved."
+msgstr "De afbeelding kon niet worden opgeslagen."
+
+#: ../shell/ev-window.c:6225
+msgid "Save Image"
+msgstr "Afbeelding opslaan"
+
+# niet in staat/kon
+#: ../shell/ev-window.c:6353
+msgid "Unable to open attachment"
+msgstr "De bijlage kon niet geopend worden"
+
+#: ../shell/ev-window.c:6406
+msgid "The attachment could not be saved."
+msgstr "De bijlage kon niet worden opgeslagen."
+
+#: ../shell/ev-window.c:6451
+msgid "Save Attachment"
+msgstr "Bijlage opslaan"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Wachtwoord vereist"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Op toevoeging"
+
+# Misschien Evince documentenviewer
+# viewer is ook nederlands
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATE documentenviewer"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Het paginalabel van het weer te geven document."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "PAGINA"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Het paginanummer van het weer te geven document."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMMER"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Starten met volledig scherm"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Starten als diapresentatie"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Starten in voorbeeldmodus"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Woord of zinsnede waarnaar gezocht moet worden"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[BESTAND…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Geeft aan of miniaturen gemaakt worden. Indien uitgeschakeld worden geen "
+"nieuwe miniaturen gemaakt."
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Miniaturen aanzetten voor PDF-documenten"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Opdracht voor miniaturen bij PDF-documenten"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Opdracht en bijbehorende argumenten voor het maken van miniaturen van PDF-"
+"documenten. Meer informatie is beschikbaar in de documentatie voor ‘Caja "
+"thumbnailer’."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "Afdrukin_stellingen…"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "De afdrukinstellingen wijzigen"
diff --git a/po/nn.po b/po/nn.po
new file mode 100644
index 00000000..b61fffdc
--- /dev/null
+++ b/po/nn.po
@@ -0,0 +1,1920 @@
+# translation of nn.po to Norwegian Nynorsk
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# Åsmund Skjæveland <[email protected]>, 2006-2008.
+# Torstein Adolf Winterseth <[email protected]>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: nn\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug."
+"cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-07-20 15:08+0000\n"
+"PO-Revision-Date: 2010-07-27 14:48+0200\n"
+"Last-Translator: Torstein Adolf Winterseth <[email protected]>\n"
+"Language-Team: Engelsk (Storbritannia) <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 1.0\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Feil under oppstart av kommando «%s» for å dekomprimera teikneeserien: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Kommando «%s» feila ved dekomprimering av teikneserien."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Kommandoen «%s» avslutta ikkje på normal måte."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Ikkje ein MIME-type for ein teikneserie: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Kan ikkje finna ein passande kommando for å dekomprimera denne typen "
+"teikneserie"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Ukjend MIME-type"
+
+#: ../backend/comics/comics-document.c:492
+#| msgid "File corrupted."
+msgid "File corrupted"
+msgstr "Fila er øydelagd."
+
+#: ../backend/comics/comics-document.c:505
+#| msgid "No images found in archive %s"
+msgid "No files in archive"
+msgstr "Ingen filer i arkivet"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Fann ingen bilete i arkivet %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Det oppstod ein feil når «%s» skulle slettast."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Feil %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Teikneseriar"
+
+#: ../backend/djvu/djvu-document.c:173
+#| msgid "DVI document has incorrect format"
+msgid "DjVu document has incorrect format"
+msgstr "DjVu-dokumentet har feil format"
+
+#: ../backend/djvu/djvu-document.c:250
+#| msgid ""
+#| "The document is composed by several files. One or more of such files "
+#| "cannot be accessed."
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Dokumentet er sete saman av fleire filer, og éi eller fleire av dei er ikkje "
+"mogleg å få tak på."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+#| msgid "Djvu Documents"
+msgid "DjVu Documents"
+msgstr "DjVu-dokument"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI-dokumentet har feil format"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI-dokument"
+
+#: ../backend/pdf/ev-poppler.cc:521
+msgid "This work is in the Public Domain"
+msgstr "Dette verket er i offentleg domene"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:774
+msgid "Yes"
+msgstr "Ja"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:777
+msgid "No"
+msgstr "Nei"
+
+#: ../backend/pdf/ev-poppler.cc:905
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:907
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:909
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:911
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:913
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:915
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:917
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:919
+msgid "Unknown font type"
+msgstr "Ukjend type skrift"
+
+#: ../backend/pdf/ev-poppler.cc:945
+msgid "No name"
+msgstr "Utan namn"
+
+#: ../backend/pdf/ev-poppler.cc:953
+msgid "Embedded subset"
+msgstr "Innebygd utval"
+
+#: ../backend/pdf/ev-poppler.cc:955
+msgid "Embedded"
+msgstr "Innebygd"
+
+#: ../backend/pdf/ev-poppler.cc:957
+msgid "Not embedded"
+msgstr "Ikkje innebygd"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF-dokument"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Ugyldig dokument"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress-lysark"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Ingen feil"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Ikkje nok minne"
+
+#: ../backend/impress/zip.c:59
+#| msgid "Cannot find zip signature"
+msgid "Cannot find ZIP signature"
+msgstr "Klarte ikkje å finna ZIP-signatur"
+
+#: ../backend/impress/zip.c:62
+#| msgid "Invalid zip file"
+msgid "Invalid ZIP file"
+msgstr "Ugyldig ZIP-fil"
+
+#: ../backend/impress/zip.c:65
+#| msgid "Multi file zips are not supported"
+msgid "Multi file ZIPs are not supported"
+msgstr "ZIP-arkiv som går over fleire filer er ikkje støtta"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Klarte ikkje å opna fila"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Klarte ikkje å lesa data frå fila"
+
+#: ../backend/impress/zip.c:74
+#| msgid "Cannot find file in the zip archive"
+msgid "Cannot find file in the ZIP archive"
+msgstr "Klarte ikkje å finna fila i ZIP-arkivet"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Ukjend feil"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Klarte ikkje å lasta dokumentet «%s»"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Klarte ikkje å lagra dokumentet «%s»"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript-dokument"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Klarte ikkje å lagra vedlegget «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Klarte ikkje å opna vedlegget «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Klarte ikkje å opna vedlegget «%s»"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+#| msgid "Multi file zips are not supported"
+msgid "File type %s (%s) is not supported"
+msgstr "Filtype %s (%s) er ikkje støtta"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Alle dokument"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Alle filer"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+#| msgid "Failed to create file “%s”: %s"
+msgid "Failed to create a temporary file: %s"
+msgstr "Klarte ikkje å laga ei mellombels fil: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+#| msgid "Failed to create file “%s”: %s"
+msgid "Failed to create a temporary directory: %s"
+msgstr "Klarte ikkje å laga ei mellombels mappe: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Fila er ikkje ei gyldig .desktop-fil"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Kjenner ikkje igjen versjonen til .desktop-fila «%s»"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Startar %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Programmet godtek ikkje dokument frå kommandolinja"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Kjenner ikkje igjen oppstartsvalet %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"Kan ikkje senda dokument-URI-ar til ei skrivebordsoppføring med «Type=Link»"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Ikkje ei køyrbar oppføring."
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Slå av tilkoplinga til økthandsamaren"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Oppgje fil som inneheld lagra oppsett"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+#| msgid "[FILE...]"
+msgid "FILE"
+msgstr "FIL"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Oppgje økthandsamings-ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Val til øktstyring:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Vis val for øktstyring"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Vis «_%s»"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Flytt på verktøylinja"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Flytt det valte elementet på verktøylinja"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Fjern frå verktøylinja"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Fjern det valte elementet frå verktøylinja"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Fjern verktøylinja"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Fjern den valde verktøylinja"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Skiljefelt"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5517
+msgid "Best Fit"
+msgstr "Beste tilpassing"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Tilpass sidebreidda"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+#| msgid "100%"
+msgid "800%"
+msgstr "800 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+#| msgid "100%"
+msgid "1600%"
+msgstr "1600 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+#| msgid "200%"
+msgid "3200%"
+msgstr "3200 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+#| msgid "400%"
+msgid "6400%"
+msgstr "3400 %"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4304
+#: ../shell/ev-window-title.c:149 ../shell/main.c:313
+#, c-format
+msgid "Document Viewer"
+msgstr "Dokumentframsynar"
+
+#: ../data/evince.desktop.in.in.h:2
+#| msgid "View multipage documents"
+msgid "View multi-page documents"
+msgstr "Vis dokument med mange sider"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Overstyr dokumentavgrensingar"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Overstyr dokumentavgrensingar, slik som avgrensingar på utskrift og "
+"kopiering."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "Slett mellombels fil"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "Skriv ut fil med innstillingar"
+
+#: ../previewer/ev-previewer.c:147 ../previewer/ev-previewer.c:181
+#| msgid "MATE Document Viewer"
+msgid "MATE Document Previewer"
+msgstr "MATE dokumentframsynar"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3065
+msgid "Failed to print document"
+msgstr "Klarte ikkje å skriva ut dokumentet"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Den valde skrivaren «%s» vart ikkje funnen"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5232
+msgid "_Previous Page"
+msgstr "_Førre side"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5233
+msgid "Go to the previous page"
+msgstr "Gå til førre side"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5235
+msgid "_Next Page"
+msgstr "_Neste side"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5236
+msgid "Go to the next page"
+msgstr "Gå til neste side"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5219
+msgid "Enlarge the document"
+msgstr "Forstørr dokumentet"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5222
+msgid "Shrink the document"
+msgstr "Forminsk dokumentet"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Skriv ut"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5190
+msgid "Print this document"
+msgstr "Skriv ut dette dokumentet"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5334
+msgid "_Best Fit"
+msgstr "_Beste tilpassing"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5335
+msgid "Make the current document fill the window"
+msgstr "Fyll vindauget med dokumentet"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5337
+msgid "Fit Page _Width"
+msgstr "Tilpass side_breidda"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5338
+msgid "Make the current document fill the window width"
+msgstr "Fyll vindaugebreidda med dokumentet"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5439
+msgid "Page"
+msgstr "Side"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5440
+msgid "Select Page"
+msgstr "Vel side"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokument"
+
+#: ../properties/ev-properties-view.c:60
+#| msgid "<b>Title:</b>"
+msgid "Title:"
+msgstr "Tittel:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Stad:"
+
+#: ../properties/ev-properties-view.c:62
+#| msgid "<b>Subject:</b>"
+msgid "Subject:"
+msgstr "Emne:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+#| msgid "<b>Author:</b>"
+msgid "Author:"
+msgstr "Forfattar:"
+
+#: ../properties/ev-properties-view.c:64
+#| msgid "<b>Keywords:</b>"
+msgid "Keywords:"
+msgstr "Nøkkelord:"
+
+#: ../properties/ev-properties-view.c:65
+#| msgid "<b>Producer:</b>"
+msgid "Producer:"
+msgstr "Produsert av:"
+
+#: ../properties/ev-properties-view.c:66
+#| msgid "<b>Creator:</b>"
+msgid "Creator:"
+msgstr "Oppretta av:"
+
+#: ../properties/ev-properties-view.c:67
+#| msgid "<b>Created:</b>"
+msgid "Created:"
+msgstr "Oppretta:"
+
+#: ../properties/ev-properties-view.c:68
+#| msgid "<b>Modified:</b>"
+msgid "Modified:"
+msgstr "Endra:"
+
+#: ../properties/ev-properties-view.c:69
+#| msgid "<b>Number of Pages:</b>"
+msgid "Number of Pages:"
+msgstr "Tal på sider:"
+
+#: ../properties/ev-properties-view.c:70
+#| msgid "<b>Optimized:</b>"
+msgid "Optimized:"
+msgstr "Optimert:"
+
+#: ../properties/ev-properties-view.c:71
+#| msgid "<b>Format:</b>"
+msgid "Format:"
+msgstr "Format:"
+
+#: ../properties/ev-properties-view.c:72
+#| msgid "<b>Security:</b>"
+msgid "Security:"
+msgstr "Tryggleik:"
+
+#: ../properties/ev-properties-view.c:73
+#| msgid "<b>Paper Size:</b>"
+msgid "Paper Size:"
+msgstr "Papirstorleik:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Ingen"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+#| msgid "%.0f x %.0f mm"
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+#| msgid "%.2f x %.2f inch"
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f tomme"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, ståande (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, liggjande (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d av %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "av %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+#| msgid "Loading..."
+msgid "Loading…"
+msgstr "Lastar …"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Førebur utskrift …"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Fullfører …"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Skriv ut side %d av %d …"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Utskrift er ikkje støtta på denne skrivaren."
+
+#: ../libview/ev-print-operation.c:1226
+#| msgid "Invalid zip file"
+msgid "Invalid page selection"
+msgstr "Ugyldig sideutval"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Åtvaring"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Området valt for utskrift inneheld ingen sider"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Skalering av side:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Krymp til utskriftsområde"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Tilpass utskriftsområde"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Skaler sidene til dokumentet til å passa til sidestorleiken til skrivaren. "
+"Vel éin av følgjande:\n"
+"\n"
+"• «None»: Ingen skalering av sidene vert utførd.\n"
+"\n"
+"• «Shrink to Printable Area»: Dokumentsider som er større enn "
+"utskriftsområdet vert forminska til å passa til utskriftsområde.\n"
+"\n"
+"• «Fit to Printable Area»: Sidene til dokumentet vert forstørra eller "
+"forminska til "
+"å passa utskriftsområdet til skrivaren etter behov.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Roter og sentrer automatisk"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Roter sideorienteringa til skrivaren for kvar side til å passa orientering i "
+"dokumentet. Sidene til dokumentet vil sentrerast innenfor utskriftsområdet."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Vel sidestorleik ved bruk av sidestorleiken til dokumentet"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Kvar side vil verta skrivne ut på same papirstorleik som sidestorleiken til "
+"dokumentet om dette vert slått på."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Sidehandtering"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+#| msgid "Failed to print document"
+msgid "Failed to print page %d: %s"
+msgstr "Klarte ikkje å skriva ut side %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Rull opp"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Rull ned"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Rull synsfeltet opp"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Rull synsfeltet ned"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Dokumentframsyning"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Gå til side:"
+
+#: ../libview/ev-view-presentation.c:968
+#| msgid "End of presentation. Press Escape to exit."
+msgid "End of presentation. Click to exit."
+msgstr "Slutten av presentasjonen. Trykk for å avslutta."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Gå til første side"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Gå til førre side"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Gå til neste side"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Gå til siste side"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Gå til side"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Finn"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Gå til side %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Gå til %s i fila «%s»"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Gå til fil «%s»"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Start %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Finn:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5207
+msgid "Find Pre_vious"
+msgstr "Finn f_ørre"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Finn førre oppføring av søkjestrengen"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5205
+msgid "Find Ne_xt"
+msgstr "Finn ne_ste"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Finn neste oppøring av søkjestrengen"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "S_kil mellom store og små bokstavar"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Skil eller ikkje skil på små og store bokstavar"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Ikon:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+#| msgid "None"
+msgid "Note"
+msgstr "Merknad"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+#| msgid "Document"
+msgid "Comment"
+msgstr "Kommentar"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Nøkkel"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+#| msgid "_Help"
+msgid "Help"
+msgstr "Hjelp"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Nytt avsnitt"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Avsnitt"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Set inn"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Kross"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Sirkel"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+#| msgid "Unknown error"
+msgid "Unknown"
+msgstr "Ukjend"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+#| msgid "Properties"
+msgid "Annotation Properties"
+msgstr "Kommentareigenskapar"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Farge:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Stil:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Gjennomsiktig"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Ugjennomsiktig"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Innleiande vindaugtilstand:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+#| msgid "_Open..."
+msgid "Open"
+msgstr "Opna"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Lukk"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Køyr i presentasjonsmodus"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Passord for dokumentet %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Konverterer %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d av %d dokument konverterte"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Konverterer metadata"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Metadataformatet som vert brukt av Evince har endrs seg og må difor "
+"migrerast. "
+"Om migreringa vert avbroten vil ikkje metadatalageret fungera."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Opna eit nyleg brukt dokument"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "Dokumentet er låst og kan berre lesast ved å skriva rett passord."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "L_ås opp dokumentet"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Skriv passord"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Treng passord"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "Dokumentet «%s» er låst og treng eit passord for å opnast."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Passord:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Gløym passordet _med ein gong"
+
+#: ../shell/ev-password-view.c:380
+#| msgid "Remember password for this session"
+msgid "Remember password until you _log out"
+msgstr "Hugs passordet til du _loggar ut"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Hugs _for alltid"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Eigenskapar"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Allmennt"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Skrifter"
+
+#: ../shell/ev-properties-dialog.c:118
+#| msgid "Document Viewer"
+msgid "Document License"
+msgstr "Dokumentlisens"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Skrift"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+#| msgid "Gathering font information... %3d%%"
+msgid "Gathering font information… %3d%%"
+msgstr "Samlar informasjon om skrifer … %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Vilkår for bruk"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Tekstlisens"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Vidare informasjon"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Liste"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Kommentarar"
+
+#: ../shell/ev-sidebar-annotations.c:209
+#| msgid "Next"
+msgid "Text"
+msgstr "Tekst"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Legg til tekstkommentar"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Legg til"
+
+#: ../shell/ev-sidebar-annotations.c:364
+#| msgid "Run document as a presentation"
+msgid "Document contains no annotations"
+msgstr "Dokumentet inneheld ingen kommentarar"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+#| msgid "Page %s"
+msgid "Page %d"
+msgstr "Side %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Vedlegg"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Lag"
+
+#: ../shell/ev-sidebar-links.c:335
+#| msgid "Print"
+msgid "Print…"
+msgstr "Skriv ut …"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Register"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Miniatyrar"
+
+#: ../shell/ev-window.c:855
+#, c-format
+#| msgid "Page %s - %s"
+msgid "Page %s — %s"
+msgstr "Side %s – %s"
+
+#: ../shell/ev-window.c:857
+#, c-format
+msgid "Page %s"
+msgstr "Side %s"
+
+#: ../shell/ev-window.c:1322
+msgid "The document contains no pages"
+msgstr "Dokumentet inneheld ingen sider"
+
+#: ../shell/ev-window.c:1325
+msgid "The document contains only empty pages"
+msgstr "Dokumentet inneheld kun tomme sider"
+
+#: ../shell/ev-window.c:1525 ../shell/ev-window.c:1691
+msgid "Unable to open document"
+msgstr "Klarte ikkje å opna dokumentet"
+
+#: ../shell/ev-window.c:1662
+#, c-format
+#| msgid "Failed to load document “%s”"
+msgid "Loading document from “%s”"
+msgstr "Lastar dokument frå «%s»"
+
+#: ../shell/ev-window.c:1804 ../shell/ev-window.c:2082
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Lastar ned dokument (%d%%)"
+
+#: ../shell/ev-window.c:1837
+#| msgid "Failed to create file “%s”: %s"
+msgid "Failed to load remote file."
+msgstr "Klarte ikkje å lasta ekstern fil."
+
+#: ../shell/ev-window.c:2026
+#, c-format
+#| msgid "Reload the document"
+msgid "Reloading document from %s"
+msgstr "Les dokument frå %s på nytt"
+
+#: ../shell/ev-window.c:2058
+#| msgid "Failed to print document"
+msgid "Failed to reload document."
+msgstr "Klarte ikkje å lesa dokumentet på nytt."
+
+#: ../shell/ev-window.c:2213
+msgid "Open Document"
+msgstr "Opna dokument"
+
+#: ../shell/ev-window.c:2511
+#, c-format
+#| msgid "Shrink the document"
+msgid "Saving document to %s"
+msgstr "Lagrar dokumentet til %s"
+
+#: ../shell/ev-window.c:2514
+#, c-format
+#| msgid "Save Attachment"
+msgid "Saving attachment to %s"
+msgstr "Lagrar vedlegg til %s"
+
+#: ../shell/ev-window.c:2517
+#, c-format
+msgid "Saving image to %s"
+msgstr "Lagrar bilete til %s"
+
+#: ../shell/ev-window.c:2561 ../shell/ev-window.c:2661
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Fila kunne ikkje lagrast som «%s»."
+
+#: ../shell/ev-window.c:2592
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Lastar opp dokument (%d%%)"
+
+#: ../shell/ev-window.c:2596
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Lastar opp vedlegg (%d%%)"
+
+#: ../shell/ev-window.c:2600
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Lastar opp bilete (%d%%)"
+
+#: ../shell/ev-window.c:2724
+msgid "Save a Copy"
+msgstr "Lagra ein kopi"
+
+#: ../shell/ev-window.c:3009
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d uteståande jobb i køa"
+msgstr[1] "%d uteståande jobbar i køa"
+
+#: ../shell/ev-window.c:3122
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Skriv ut jobb %s"
+
+#: ../shell/ev-window.c:3336
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Vent med å lukka programmet til utskriftsjobb %s er fullførd?"
+
+#: ../shell/ev-window.c:3339
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Det er %d aktive utskriftsjobbar. Vent med å lukka programmet til desse er "
+"fullførde?"
+
+#: ../shell/ev-window.c:3351
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Viss du lukkar vindauget vil uteståande utskriftsjobbar ikkje verta "
+"fullførde."
+
+#: ../shell/ev-window.c:3355
+msgid "Cancel _print and Close"
+msgstr "Avbryt _utskrift og lukk"
+
+#: ../shell/ev-window.c:3359
+msgid "Close _after Printing"
+msgstr "Lukk etter ut_skrift"
+
+#: ../shell/ev-window.c:3949
+msgid "Toolbar Editor"
+msgstr "Verktøylinjeredigering"
+
+#: ../shell/ev-window.c:4088
+msgid "There was an error displaying help"
+msgstr "Det oppstod ein feil ved vising av hjelp"
+
+#: ../shell/ev-window.c:4300
+#, c-format
+#| msgid ""
+#| "Document Viewer.\n"
+#| "Using poppler %s (%s)"
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Dokumentframsynar.\n"
+"Brukar %s (%s)"
+
+#: ../shell/ev-window.c:4331
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince er fri programvare. Du kan vidareformidla det og/eller "
+"endra det under vilkåra i GNU General Public License publisert av Free "
+"Software Foundation, anten versjon 2 av lisensen, eller, om du ønskjer, ein "
+"nyare versjon.\n"
+
+#: ../shell/ev-window.c:4335
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince er gjort tilgjengeleg med håp om at det vil vera til nytte, men "
+"UTAN NOKON GARANTI, og heller ikkje med nokon indirekte garanti om at det "
+"vil vera OMSETJELEG eller EIGNA TIL NOKO SPESIELT FORMÅL. Sjå GNU General "
+"Public License for meir informasjon.\n"
+
+#: ../shell/ev-window.c:4339
+#| msgid ""
+#| "You should have received a copy of the GNU General Public License along "
+#| "with Evince; if not, write to the Free Software Foundation, Inc., 59 "
+#| "Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Du bør ha motteken ein kopi av GNU General Public License saman med "
+"programmet. Dersom det ikkje er tilfellet, skriv til Free Software "
+"Foundation, Inc., 51 Franklin St, Fifth Floor, "
+"Boston, MA 02110-1301, USA\n"
+
+#: ../shell/ev-window.c:4364
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4367
+#| msgid "© 1996-2007 The Evince authors"
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Utviklarane av Evince"
+
+#: ../shell/ev-window.c:4373
+msgid "translator-credits"
+msgstr ""
+"Åsmund Skjæveland <[email protected]>\n"
+"Torstein Winterseth <[email protected]>\n"
+"\n"
+"Send feilmeldingar og kommentarar til <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4658
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d funnen på denne sida"
+msgstr[1] "%d funne på denne sida"
+
+#: ../shell/ev-window.c:4666
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% att å søka i"
+
+#: ../shell/ev-window.c:5173
+msgid "_File"
+msgstr "_Fil"
+
+#: ../shell/ev-window.c:5174
+msgid "_Edit"
+msgstr "_Rediger"
+
+#: ../shell/ev-window.c:5175
+msgid "_View"
+msgstr "_Vis"
+
+#: ../shell/ev-window.c:5176
+msgid "_Go"
+msgstr "_Gå"
+
+#: ../shell/ev-window.c:5177
+msgid "_Help"
+msgstr "_Hjelp"
+
+#. File menu
+#: ../shell/ev-window.c:5180 ../shell/ev-window.c:5479
+#| msgid "_Open..."
+msgid "_Open…"
+msgstr "_Opna …"
+
+#: ../shell/ev-window.c:5181 ../shell/ev-window.c:5480
+msgid "Open an existing document"
+msgstr "Opna eit eksisterande dokument"
+
+#: ../shell/ev-window.c:5183
+msgid "Op_en a Copy"
+msgstr "Opn_a ein kopi"
+
+#: ../shell/ev-window.c:5184
+msgid "Open a copy of the current document in a new window"
+msgstr "Opna ein kopi av det noverande dokumentet i eit nytt vindauge"
+
+#: ../shell/ev-window.c:5186
+#| msgid "Save a Copy"
+msgid "_Save a Copy…"
+msgstr "Lagra ein kopi …"
+
+#: ../shell/ev-window.c:5187
+msgid "Save a copy of the current document"
+msgstr "Lagra ein kopi av det noverande dokumentet"
+
+#: ../shell/ev-window.c:5189
+#| msgid "Print"
+msgid "_Print…"
+msgstr "_Skriv ut …"
+
+#: ../shell/ev-window.c:5192
+msgid "P_roperties"
+msgstr "Eigenskapa_r"
+
+#: ../shell/ev-window.c:5200
+msgid "Select _All"
+msgstr "Merk _alt"
+
+#: ../shell/ev-window.c:5202
+#| msgid "Find"
+msgid "_Find…"
+msgstr "_Finn …"
+
+#: ../shell/ev-window.c:5203
+msgid "Find a word or phrase in the document"
+msgstr "Finn eit ord eller ei setning i dokumentet"
+
+#: ../shell/ev-window.c:5209
+msgid "T_oolbar"
+msgstr "V_erktøylinje"
+
+#: ../shell/ev-window.c:5211
+msgid "Rotate _Left"
+msgstr "Roter til _venstre"
+
+#: ../shell/ev-window.c:5213
+msgid "Rotate _Right"
+msgstr "Roter til _høgre"
+
+#: ../shell/ev-window.c:5224
+msgid "_Reload"
+msgstr "_Last om att"
+
+#: ../shell/ev-window.c:5225
+msgid "Reload the document"
+msgstr "Last dokumentet om att"
+
+#: ../shell/ev-window.c:5228
+msgid "Auto_scroll"
+msgstr "Automati_sk rulling"
+
+#: ../shell/ev-window.c:5238
+msgid "_First Page"
+msgstr "_Første side"
+
+#: ../shell/ev-window.c:5239
+msgid "Go to the first page"
+msgstr "Gå til første side"
+
+#: ../shell/ev-window.c:5241
+msgid "_Last Page"
+msgstr "_Siste side"
+
+#: ../shell/ev-window.c:5242
+msgid "Go to the last page"
+msgstr "Gå til siste side"
+
+#. Help menu
+#: ../shell/ev-window.c:5246
+msgid "_Contents"
+msgstr "I_nnhald"
+
+#: ../shell/ev-window.c:5249
+msgid "_About"
+msgstr "_Om"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5253
+msgid "Leave Fullscreen"
+msgstr "Forlat fullskjerm"
+
+#: ../shell/ev-window.c:5254
+msgid "Leave fullscreen mode"
+msgstr "Forlat fullskjermmodus"
+
+#: ../shell/ev-window.c:5256
+msgid "Start Presentation"
+msgstr "Start presentasjon"
+
+#: ../shell/ev-window.c:5257
+msgid "Start a presentation"
+msgstr "Start ein presentasjon"
+
+#. View Menu
+#: ../shell/ev-window.c:5316
+msgid "_Toolbar"
+msgstr "_Verktøylinje"
+
+#: ../shell/ev-window.c:5317
+msgid "Show or hide the toolbar"
+msgstr "Vis eller gøym verktøylinja"
+
+#: ../shell/ev-window.c:5319
+msgid "Side _Pane"
+msgstr "Side_panel"
+
+#: ../shell/ev-window.c:5320
+msgid "Show or hide the side pane"
+msgstr "Vis eller gøym sidepanelet"
+
+#: ../shell/ev-window.c:5322
+msgid "_Continuous"
+msgstr "_Samanhengande"
+
+#: ../shell/ev-window.c:5323
+msgid "Show the entire document"
+msgstr "Vis heile dokumentet"
+
+#: ../shell/ev-window.c:5325
+msgid "_Dual"
+msgstr "_Dobbel"
+
+#: ../shell/ev-window.c:5326
+msgid "Show two pages at once"
+msgstr "Vis to sider samtidig"
+
+#: ../shell/ev-window.c:5328
+msgid "_Fullscreen"
+msgstr "_Fullskjerm"
+
+#: ../shell/ev-window.c:5329
+msgid "Expand the window to fill the screen"
+msgstr "Utvid vindauget så det fyller heile skjermen"
+
+#: ../shell/ev-window.c:5331
+msgid "Pre_sentation"
+msgstr "Pre_sentasjon"
+
+#: ../shell/ev-window.c:5332
+msgid "Run document as a presentation"
+msgstr "Vis dokumentet som ein presentasjon"
+
+#: ../shell/ev-window.c:5340
+msgid "_Inverted Colors"
+msgstr "_Inverterte fargar"
+
+#: ../shell/ev-window.c:5341
+msgid "Show page contents with the colors inverted"
+msgstr "Vis sideinnhald med fargane snutt om"
+
+#. Links
+#: ../shell/ev-window.c:5349
+msgid "_Open Link"
+msgstr "_Opna lenkje"
+
+#: ../shell/ev-window.c:5351
+msgid "_Go To"
+msgstr "_Gå til"
+
+#: ../shell/ev-window.c:5353
+msgid "Open in New _Window"
+msgstr "Opna i nytt _vindauge"
+
+#: ../shell/ev-window.c:5355
+msgid "_Copy Link Address"
+msgstr "_Kopier lenkjeadresse"
+
+#: ../shell/ev-window.c:5357
+#| msgid "_Save Image As..."
+msgid "_Save Image As…"
+msgstr "_Lagra bilete som …"
+
+#: ../shell/ev-window.c:5359
+msgid "Copy _Image"
+msgstr "Kopier b_ilete"
+
+#: ../shell/ev-window.c:5361
+msgid "Annotation Properties…"
+msgstr "Kommentareigenskapar …"
+
+#: ../shell/ev-window.c:5366
+#| msgid "Save Attachment"
+msgid "_Open Attachment"
+msgstr "_Opna vedlegg"
+
+#: ../shell/ev-window.c:5368
+#| msgid "Save Attachment"
+msgid "_Save Attachment As…"
+msgstr "_Lagra vedlegg som …"
+
+#: ../shell/ev-window.c:5453
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../shell/ev-window.c:5455
+msgid "Adjust the zoom level"
+msgstr "Juster zoomnivået"
+
+#: ../shell/ev-window.c:5465
+msgid "Navigation"
+msgstr "Navigasjon"
+
+#: ../shell/ev-window.c:5467
+msgid "Back"
+msgstr "Tilbake"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5470
+msgid "Move across visited pages"
+msgstr "Gå gjennom vitja sider"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5500
+msgid "Previous"
+msgstr "Førre"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5505
+msgid "Next"
+msgstr "Neste"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5509
+msgid "Zoom In"
+msgstr "Zoom inn"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5513
+msgid "Zoom Out"
+msgstr "Zoom ut"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5521
+msgid "Fit Width"
+msgstr "Tilpass breidda"
+
+#: ../shell/ev-window.c:5682 ../shell/ev-window.c:5699
+#| msgid "Unable to open external link"
+msgid "Unable to launch external application."
+msgstr "Klarte ikkje starta eksternt program."
+
+#: ../shell/ev-window.c:5756
+msgid "Unable to open external link"
+msgstr "Klarte ikkje opna ekstern lenkje"
+
+#: ../shell/ev-window.c:5923
+msgid "Couldn't find appropriate format to save image"
+msgstr "Klarte ikkje finna høveleg format å lagra biletet i"
+
+#: ../shell/ev-window.c:5965
+msgid "The image could not be saved."
+msgstr "Biletet kunne ikkje lagrast."
+
+#: ../shell/ev-window.c:5997
+msgid "Save Image"
+msgstr "Lagra bilete"
+
+#: ../shell/ev-window.c:6125
+msgid "Unable to open attachment"
+msgstr "Klarte ikkje å opna dokumentet"
+
+#: ../shell/ev-window.c:6178
+msgid "The attachment could not be saved."
+msgstr "Vedlegget kunne ikkje lagrast."
+
+#: ../shell/ev-window.c:6223
+msgid "Save Attachment"
+msgstr "Lagra vedlegg"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+#| msgid "%s - Password Required"
+msgid "%s — Password Required"
+msgstr "%s – Treng passord"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Etter filtype"
+
+#: ../shell/main.c:72 ../shell/main.c:277
+msgid "MATE Document Viewer"
+msgstr "MATE dokumentframsynar"
+
+#: ../shell/main.c:80
+#| msgid "The page of the document to display."
+msgid "The page label of the document to display."
+msgstr "Side i dokumentet som skal visast."
+
+#: ../shell/main.c:80
+msgid "PAGE"
+msgstr "SIDE"
+
+#: ../shell/main.c:81
+#| msgid "The page of the document to display."
+msgid "The page number of the document to display."
+msgstr "Side i dokumentet som skal visast."
+
+#: ../shell/main.c:81
+msgid "NUMBER"
+msgstr "NUMMER"
+
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr "Køyr Evince i fullskjerm"
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr "Køyr Evince som ein presentasjonsvisar"
+
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr "Køyr Evince som førehandsvisar"
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr "Ord eller uttrykk å finna i dokumentet"
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "STRENG"
+
+#: ../shell/main.c:89
+#| msgid "[FILE...]"
+msgid "[FILE…]"
+msgstr "[FIL …]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+#| msgid ""
+#| "Boolean options available, true enables thumbnailing and false disables "
+#| "the creation of new thumbnails"
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Boolske val tilgjengelege: «true» slår på miniatyrar og «false» slår av "
+"oppretting av nye miniatyrar"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Slå på generering av miniatyrar av PDF-dokument"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Miniatyrkommando for PDF-dokument"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+#| msgid ""
+#| "Valid command plus arguments for the PDF Document thumbnailer. See "
+#| "caja thumbnailer documentation for more information."
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Gyldig kommando pluss argument for miniatyrgeneratoren for PDF-dokument. Sjå "
+"dokumentasjonen til Caja' miniatyrdokumentasjon for meir informasjon."
+
+#~ msgid "File not available"
+#~ msgstr "Fila ikkje tilgjengeleg"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "Eksterne filer er ikkje støtta"
+
+#~ msgid "BBox"
+#~ msgstr "BBox (ramme)"
+
+#~ msgid "Letter"
+#~ msgstr "Letter"
+
+#~ msgid "Tabloid"
+#~ msgstr "Tabloid"
+
+#~ msgid "Ledger"
+#~ msgstr "Ledger"
+
+#~ msgid "Legal"
+#~ msgstr "Legal"
+
+#~ msgid "Statement"
+#~ msgstr "Statement"
+
+#~ msgid "Executive"
+#~ msgstr "Executive"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Folio"
+
+#~ msgid "Quarto"
+#~ msgstr "Quarto"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "Klarte ikkje opna fila «%s»."
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "Klarte ikkje å lasta dokumentet «%s». GhostScript-tolkar ikkje funnen i "
+#~ "søkestien"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "Encapsulated PostScript"
+
+#~ msgid "PostScript"
+#~ msgstr "PostScript"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "Tolkar feila."
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "Ikkje handsama MIME-type: «%s»"
+
+#~ msgid "Password Entry"
+#~ msgstr "Passordfelt"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "Lagra passordet på nøkkelringen"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f × %.2f tommar"
+
+#~ msgid "Search string"
+#~ msgstr "Søkjetekst"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "Namn på strengen du vil finna"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Skil mellom store og små bokstavar"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "TRUE i eit store/små bokstavar-kjenslevart søk"
+
+#~ msgid "Highlight color"
+#~ msgstr "Framhevingsfarge"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Farge å framheva alle treff med"
+
+#~ msgid "Current color"
+#~ msgstr "Noverande farge"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Farge å framheva noverande treff med"
+
+#~ msgid "Find Previous"
+#~ msgstr "Finn førre"
+
+#~ msgid "Find Next"
+#~ msgstr "Finn neste"
+
+#~ msgid "Incorrect password"
+#~ msgstr "Feil passord"
+
+#~ msgid "Print..."
+#~ msgstr "Skriv ut ..."
+
+#~ msgid "Couldn't create symlink “%s”: %s"
+#~ msgstr "Klarte ikkje laga den symbolske lenkja «%s»: %s"
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "Klarte ikkje opna ein kopi."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Lagra ein kopi ..."
+
+#~ msgid "Print Set_up..."
+#~ msgstr "Skrivaro_ppsett ..."
+
+#~ msgid "Setup the page settings for printing"
+#~ msgstr "Set opp sideoppsettet ved utskrift"
+
+#~ msgid "_Print..."
+#~ msgstr "S_kriv ut ..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Finn ..."
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Evince Dokumentframsynar"
diff --git a/po/oc.po b/po/oc.po
new file mode 100644
index 00000000..d3b050a0
--- /dev/null
+++ b/po/oc.po
@@ -0,0 +1,1304 @@
+# Translation of oc.po to Occitan
+# Occitan translation of evince.
+# Copyright (C) 2007 The Free Software Foundation, Inc.
+# This file is distributed under the GNU General Public License Version 2.
+#
+#
+# Yannig Marchegay (Kokoyaya) <[email protected]>, 2007.
+# Yannig Marchegay (Kokoyaya) <[email protected]>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: oc\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-02-19 20:19+0100\n"
+"PO-Revision-Date: 2008-02-13 11:30+0100\n"
+"Last-Translator: Yannig Marchegay (Kokoyaya) <[email protected]>\n"
+"Language-Team: Occitan <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ../backend/comics/comics-document.c:163
+#, c-format
+msgid "File corrupted."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:197
+#, c-format
+msgid "No images found in archive %s"
+msgstr ""
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr ""
+
+#: ../backend/djvu/djvu-document.c:167
+#, c-format
+msgid ""
+"The document is composed by several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Documents Djvu"
+
+#: ../backend/dvi/dvi-document.c:98
+#, c-format
+msgid "File not available"
+msgstr "Fichièrs pas disponible"
+
+#: ../backend/dvi/dvi-document.c:113
+#, c-format
+msgid "DVI document has incorrect format"
+msgstr ""
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Documents DVI"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:674
+msgid "Yes"
+msgstr "Òc"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:677
+msgid "No"
+msgstr "Non"
+
+#: ../backend/pdf/ev-poppler.cc:750
+msgid "Type 1"
+msgstr "Tipe 1"
+
+#: ../backend/pdf/ev-poppler.cc:752
+msgid "Type 1C"
+msgstr "Tpe 1C"
+
+#: ../backend/pdf/ev-poppler.cc:754
+msgid "Type 3"
+msgstr "Tipe 3"
+
+#: ../backend/pdf/ev-poppler.cc:756
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:758
+msgid "Type 1 (CID)"
+msgstr ""
+
+#: ../backend/pdf/ev-poppler.cc:760
+msgid "Type 1C (CID)"
+msgstr ""
+
+#: ../backend/pdf/ev-poppler.cc:762
+msgid "TrueType (CID)"
+msgstr ""
+
+#: ../backend/pdf/ev-poppler.cc:764
+msgid "Unknown font type"
+msgstr ""
+
+#: ../backend/pdf/ev-poppler.cc:790
+msgid "No name"
+msgstr "Pas de nom"
+
+#: ../backend/pdf/ev-poppler.cc:798
+msgid "Embedded subset"
+msgstr ""
+
+#: ../backend/pdf/ev-poppler.cc:800
+msgid "Embedded"
+msgstr ""
+
+#: ../backend/pdf/ev-poppler.cc:802
+msgid "Not embedded"
+msgstr ""
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Documents PDF"
+
+#: ../backend/impress/impress-document.c:296
+#, c-format
+msgid "Remote files aren't supported"
+msgstr ""
+
+#: ../backend/impress/impress-document.c:307
+#, c-format
+msgid "Invalid document"
+msgstr ""
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr ""
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Pas cap d'error"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Pas pro de memòria"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr ""
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr ""
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr ""
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Impossible de dobrir lo fichièr"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr ""
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr ""
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Error desconeguda"
+
+#: ../backend/ps/ev-spectre.c:113 ../backend/ps/ps-document.c:248
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr ""
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Impossible de dobrir lo document \"%s\""
+
+#: ../backend/ps/gsdefaults.c:30
+msgid "BBox"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:31
+msgid "Letter"
+msgstr "Letra"
+
+#: ../backend/ps/gsdefaults.c:32
+msgid "Tabloid"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:33
+msgid "Ledger"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:34
+msgid "Legal"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:35
+msgid "Statement"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:36
+msgid "Executive"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:37
+msgid "A0"
+msgstr "A0"
+
+#: ../backend/ps/gsdefaults.c:38
+msgid "A1"
+msgstr "A1"
+
+#: ../backend/ps/gsdefaults.c:39
+msgid "A2"
+msgstr "A2"
+
+#: ../backend/ps/gsdefaults.c:40
+msgid "A3"
+msgstr "A3"
+
+#: ../backend/ps/gsdefaults.c:41
+msgid "A4"
+msgstr "A4"
+
+#: ../backend/ps/gsdefaults.c:42
+msgid "A5"
+msgstr "A5"
+
+#: ../backend/ps/gsdefaults.c:43
+msgid "B4"
+msgstr "B4"
+
+#: ../backend/ps/gsdefaults.c:44
+msgid "B5"
+msgstr "B5"
+
+#: ../backend/ps/gsdefaults.c:45
+msgid "Folio"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:46
+msgid "Quarto"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:47
+msgid "10x14"
+msgstr "10x14"
+
+#: ../backend/ps/ps-document.c:170 ../backend/ps/ps-document.c:184
+#, c-format
+msgid "Cannot open file “%s”."
+msgstr "Impossible de dobrir lo fichièr \"%s\"."
+
+#: ../backend/ps/ps-document.c:231
+#, c-format
+msgid ""
+"Failed to load document “%s”. Ghostscript interpreter was not found in path"
+msgstr ""
+
+#: ../backend/ps/ps-document.c:431
+msgid "Encapsulated PostScript"
+msgstr ""
+
+#: ../backend/ps/ps-document.c:432
+msgid "PostScript"
+msgstr "PostScript"
+
+#: ../backend/ps/ps-interpreter.c:543
+msgid "Interpreter failed."
+msgstr ""
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Documents PostScript"
+
+#: ../libdocument/ev-attachment.c:303 ../libdocument/ev-attachment.c:324
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr ""
+
+#: ../libdocument/ev-attachment.c:360
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr ""
+
+#: ../libdocument/ev-attachment.c:393
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr ""
+
+#: ../libdocument/ev-document-factory.c:177
+#: ../libdocument/ev-document-factory.c:295
+#, c-format
+msgid "Unknown MIME Type"
+msgstr ""
+
+#: ../libdocument/ev-document-factory.c:196
+#, c-format
+msgid "Unhandled MIME type: “%s”"
+msgstr ""
+
+#: ../libdocument/ev-document-factory.c:350
+msgid "All Documents"
+msgstr "Totes los documents"
+
+#: ../libdocument/ev-document-factory.c:382
+msgid "All Files"
+msgstr "Totes los fichièrs"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:938
+#, c-format
+msgid "Show “_%s”"
+msgstr "Visualizar “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Move on Toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Move the selected item on the toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1403
+msgid "_Remove from Toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1404
+msgid "Remove the selected item from the toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1405
+msgid "_Delete Toolbar"
+msgstr "_Suprimir la barra d'espleches"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1406
+msgid "Remove the selected toolbar"
+msgstr ""
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:441
+msgid "Separator"
+msgstr "Separador"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+msgid "Running in presentation mode"
+msgstr ""
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:4390
+msgid "Best Fit"
+msgstr ""
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr ""
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300 %"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400 %"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:3517
+#: ../shell/ev-window-title.c:132
+#, c-format
+msgid "Document Viewer"
+msgstr "Visualizaire de documents"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr ""
+
+#: ../data/evince-password.glade.h:1
+msgid "Password Entry"
+msgstr ""
+
+#: ../data/evince-password.glade.h:2
+msgid "Remember password for this session"
+msgstr ""
+
+#: ../data/evince-password.glade.h:3
+msgid "Save password in keyring"
+msgstr ""
+
+#: ../data/evince-password.glade.h:4
+msgid "_Password:"
+msgstr "Mot de _pas :"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>Autor :</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>Creat :</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>Creator :</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>Format :</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr ""
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>Modificat :</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b>Nombre de paginas :</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr ""
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Paper Size:</b>"
+msgstr "<b>Talha de papièr :</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Producer:</b>"
+msgstr ""
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Security:</b>"
+msgstr "<b>Seguritat :</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Subject:</b>"
+msgstr "<b>Subjècte :</b>"
+
+#: ../data/evince-properties.glade.h:13
+msgid "<b>Title:</b>"
+msgstr "<b>Títol :</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr ""
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+
+#: ../properties/ev-properties-main.c:111
+msgid "Document"
+msgstr "Document"
+
+#: ../properties/ev-properties-view.c:182
+msgid "None"
+msgstr "Pas cap"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:207
+#: ../properties/ev-properties-view.c:367
+msgid "default:mm"
+msgstr "Defau"
+
+#. Metric measurement (millimeters)
+#: ../properties/ev-properties-view.c:249
+#: ../properties/ev-properties-view.c:404
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:253
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr ""
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:277
+#: ../properties/ev-properties-view.c:415
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr ""
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:284
+#: ../properties/ev-properties-view.c:422
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr ""
+
+#. Imperial measurement (inches)
+#: ../properties/ev-properties-view.c:399
+#, c-format
+msgid "%.2f x %.2f in"
+msgstr ""
+
+#: ../shell/eggfindbar.c:158
+msgid "Search string"
+msgstr ""
+
+#: ../shell/eggfindbar.c:159
+msgid "The name of the string to be found"
+msgstr ""
+
+#: ../shell/eggfindbar.c:172
+msgid "Case sensitive"
+msgstr "Respectar la cassa"
+
+#: ../shell/eggfindbar.c:173
+msgid "TRUE for a case sensitive search"
+msgstr ""
+
+#: ../shell/eggfindbar.c:180
+msgid "Highlight color"
+msgstr ""
+
+#: ../shell/eggfindbar.c:181
+msgid "Color of highlight for all matches"
+msgstr ""
+
+#: ../shell/eggfindbar.c:187
+msgid "Current color"
+msgstr ""
+
+#: ../shell/eggfindbar.c:188
+msgid "Color of highlight for the current match"
+msgstr ""
+
+#: ../shell/eggfindbar.c:321
+msgid "Find:"
+msgstr "Recercar :"
+
+#: ../shell/eggfindbar.c:330
+msgid "Find Previous"
+msgstr "Recercar lo precedent"
+
+#: ../shell/eggfindbar.c:334 ../shell/eggfindbar.c:337
+msgid "Find previous occurrence of the search string"
+msgstr ""
+
+#: ../shell/eggfindbar.c:343
+msgid "Find Next"
+msgstr "Recercar lo seguent"
+
+#: ../shell/eggfindbar.c:347 ../shell/eggfindbar.c:350
+msgid "Find next occurrence of the search string"
+msgstr ""
+
+#: ../shell/eggfindbar.c:359
+msgid "C_ase Sensitive"
+msgstr ""
+
+#: ../shell/eggfindbar.c:363 ../shell/eggfindbar.c:366
+msgid "Toggle case sensitive search"
+msgstr ""
+
+#: ../shell/ev-jobs.c:650
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr ""
+
+#: ../shell/ev-open-recent-action.c:71
+msgid "Open a recently used document"
+msgstr ""
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d sus %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "sus %d"
+
+#: ../shell/ev-password.c:88
+msgid "Password required"
+msgstr "Un mot de santa Clara fa mestièr"
+
+#: ../shell/ev-password.c:89
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+
+#: ../shell/ev-password.c:154
+msgid "Enter password"
+msgstr "Picatz lo mot de pas"
+
+#: ../shell/ev-password.c:260
+#, c-format
+msgid "Password for document %s"
+msgstr "Mot de pas pel document %s"
+
+#: ../shell/ev-password.c:347
+msgid "Incorrect password"
+msgstr ""
+
+#: ../shell/ev-password-view.c:111
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "_Desvarrolhar lo document"
+
+#: ../shell/ev-properties-dialog.c:61
+msgid "Properties"
+msgstr "Propietats"
+
+#: ../shell/ev-properties-dialog.c:94
+msgid "General"
+msgstr "General"
+
+#: ../shell/ev-properties-dialog.c:104
+msgid "Fonts"
+msgstr "Poliças"
+
+#: ../shell/ev-properties-fonts.c:141
+msgid "Font"
+msgstr "Poliça"
+
+#: ../shell/ev-properties-fonts.c:152
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr ""
+
+#: ../shell/ev-sidebar-attachments.c:675
+msgid "Attachments"
+msgstr "Estacaments"
+
+#: ../shell/ev-sidebar-links.c:266 ../shell/ev-view.c:3642
+msgid "Loading..."
+msgstr "Cargament..."
+
+#: ../shell/ev-sidebar-links.c:339
+msgid "Print..."
+msgstr "Estampar..."
+
+#: ../shell/ev-sidebar-links.c:719
+msgid "Index"
+msgstr "Indèx"
+
+#: ../shell/ev-sidebar-thumbnails.c:728
+msgid "Thumbnails"
+msgstr "Miniaturas"
+
+#: ../shell/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr ""
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr ""
+
+#: ../shell/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr ""
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr ""
+
+#: ../shell/ev-view-accessible.c:533
+msgid "Document View"
+msgstr ""
+
+#: ../shell/ev-view.c:1442
+msgid "Go to first page"
+msgstr "Anar a la primièra pagina"
+
+#: ../shell/ev-view.c:1444
+msgid "Go to previous page"
+msgstr "Anar a la pagina precedenta"
+
+#: ../shell/ev-view.c:1446
+msgid "Go to next page"
+msgstr "Anar a la pagina seguenta"
+
+#: ../shell/ev-view.c:1448
+msgid "Go to last page"
+msgstr "Anar a la darrièra pagina"
+
+#: ../shell/ev-view.c:1450
+msgid "Go to page"
+msgstr "Anar a la pagina"
+
+#: ../shell/ev-view.c:1452
+msgid "Find"
+msgstr "Recercar"
+
+#: ../shell/ev-view.c:1480
+#, c-format
+msgid "Go to page %s"
+msgstr "Anar a la pagina %s"
+
+#: ../shell/ev-view.c:1486
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr ""
+
+#: ../shell/ev-view.c:1489
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Anar al fichièr \"%s\""
+
+#: ../shell/ev-view.c:1497
+#, c-format
+msgid "Launch %s"
+msgstr "Aviar %s"
+
+#: ../shell/ev-view.c:2448
+msgid "End of presentation. Press Escape to exit."
+msgstr ""
+
+#: ../shell/ev-view.c:3371
+msgid "Jump to page:"
+msgstr ""
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:5149
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../shell/ev-view.c:5158
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr ""
+
+#: ../shell/ev-window.c:750
+#, c-format
+msgid "Page %s - %s"
+msgstr "Pagina %s - %s"
+
+#: ../shell/ev-window.c:752
+#, c-format
+msgid "Page %s"
+msgstr "Pagina %s"
+
+#: ../shell/ev-window.c:1381
+msgid "Unable to open document"
+msgstr "Impossible de dobrir lo document"
+
+#: ../shell/ev-window.c:1542
+msgid "Open Document"
+msgstr "Dobrir un document"
+
+#: ../shell/ev-window.c:1603
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr ""
+
+#: ../shell/ev-window.c:1632
+msgid "Cannot open a copy."
+msgstr "Impossible de dobrir una còpia."
+
+#: ../shell/ev-window.c:1876 ../shell/ev-window.c:1926
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr ""
+
+#: ../shell/ev-window.c:1971
+msgid "Save a Copy"
+msgstr ""
+
+#: ../shell/ev-window.c:2092 ../shell/ev-window.c:3218
+msgid "Failed to print document"
+msgstr ""
+
+#: ../shell/ev-window.c:2256
+msgid "Printing is not supported on this printer."
+msgstr ""
+
+#: ../shell/ev-window.c:2382 ../shell/ev-window.c:4184
+msgid "Print"
+msgstr "Estampar"
+
+#: ../shell/ev-window.c:2996
+msgid "Toolbar Editor"
+msgstr "_Barra d'espleches"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+
+#: ../shell/ev-window.c:3541
+msgid ""
+"Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:3545
+msgid ""
+"Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:3549
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+
+#: ../shell/ev-window.c:3573 ../shell/main.c:349
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:3576
+msgid "© 1996-2007 The Evince authors"
+msgstr "© 1996-2007 Los autors d'Evince"
+
+#: ../shell/ev-window.c:3582
+msgid "translator-credits"
+msgstr "Yannig Marchegay (Kokoyaya) <[email protected]>"
+
+#: ../shell/ev-window.c:4096
+msgid "_File"
+msgstr "_Fichièr"
+
+#: ../shell/ev-window.c:4097
+msgid "_Edit"
+msgstr "_Edicion"
+
+#: ../shell/ev-window.c:4098
+msgid "_View"
+msgstr "_Visualizacion"
+
+#: ../shell/ev-window.c:4099
+msgid "_Go"
+msgstr "_Anar"
+
+#: ../shell/ev-window.c:4100
+msgid "_Help"
+msgstr "_Ajuda"
+
+#. File menu
+#: ../shell/ev-window.c:4103 ../shell/ev-window.c:4280
+#: ../shell/ev-window.c:4352
+msgid "_Open..."
+msgstr "_Dobrir..."
+
+#: ../shell/ev-window.c:4104 ../shell/ev-window.c:4353
+msgid "Open an existing document"
+msgstr ""
+
+#: ../shell/ev-window.c:4106
+msgid "Op_en a Copy"
+msgstr ""
+
+#: ../shell/ev-window.c:4107
+msgid "Open a copy of the current document in a new window"
+msgstr ""
+
+#: ../shell/ev-window.c:4109 ../shell/ev-window.c:4282
+msgid "_Save a Copy..."
+msgstr ""
+
+#: ../shell/ev-window.c:4110
+msgid "Save a copy of the current document"
+msgstr ""
+
+#: ../shell/ev-window.c:4112
+msgid "Print Set_up..."
+msgstr ""
+
+#: ../shell/ev-window.c:4113
+msgid "Setup the page settings for printing"
+msgstr ""
+
+#: ../shell/ev-window.c:4115
+msgid "_Print..."
+msgstr "_Estampar..."
+
+#: ../shell/ev-window.c:4116 ../shell/ev-window.c:4185
+msgid "Print this document"
+msgstr "Estampar lo document"
+
+#: ../shell/ev-window.c:4118
+msgid "P_roperties"
+msgstr "P_ropietats"
+
+#: ../shell/ev-window.c:4126
+msgid "Select _All"
+msgstr "Seleccionar un fichièr"
+
+#: ../shell/ev-window.c:4128
+msgid "_Find..."
+msgstr "_Recercar..."
+
+#: ../shell/ev-window.c:4129
+msgid "Find a word or phrase in the document"
+msgstr ""
+
+#: ../shell/ev-window.c:4131
+msgid "Find Ne_xt"
+msgstr "Recercar lo seguent"
+
+#: ../shell/ev-window.c:4133
+msgid "Find Pre_vious"
+msgstr "Recercar lo _precedent"
+
+#: ../shell/ev-window.c:4135
+msgid "T_oolbar"
+msgstr "B_arra d'espleches"
+
+#: ../shell/ev-window.c:4137
+msgid "Rotate _Left"
+msgstr ""
+
+#: ../shell/ev-window.c:4139
+msgid "Rotate _Right"
+msgstr ""
+
+#: ../shell/ev-window.c:4144
+msgid "Enlarge the document"
+msgstr ""
+
+#: ../shell/ev-window.c:4147
+msgid "Shrink the document"
+msgstr ""
+
+#: ../shell/ev-window.c:4149
+msgid "_Reload"
+msgstr "_Tornar cargar"
+
+#: ../shell/ev-window.c:4150
+msgid "Reload the document"
+msgstr ""
+
+#: ../shell/ev-window.c:4153
+msgid "Auto_scroll"
+msgstr ""
+
+#. Go menu
+#: ../shell/ev-window.c:4157
+msgid "_Previous Page"
+msgstr "Pagina _precedenta"
+
+#: ../shell/ev-window.c:4158
+msgid "Go to the previous page"
+msgstr ""
+
+#: ../shell/ev-window.c:4160
+msgid "_Next Page"
+msgstr "Pagina _seguenta"
+
+#: ../shell/ev-window.c:4161
+msgid "Go to the next page"
+msgstr ""
+
+#: ../shell/ev-window.c:4163
+msgid "_First Page"
+msgstr "_Primièra pagina"
+
+#: ../shell/ev-window.c:4164
+msgid "Go to the first page"
+msgstr ""
+
+#: ../shell/ev-window.c:4166
+msgid "_Last Page"
+msgstr "_Darrièra pagina"
+
+#: ../shell/ev-window.c:4167
+msgid "Go to the last page"
+msgstr ""
+
+#. Help menu
+#: ../shell/ev-window.c:4171
+msgid "_Contents"
+msgstr "_Ensenhador"
+
+#: ../shell/ev-window.c:4174
+msgid "_About"
+msgstr "_A prepaus"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4178
+msgid "Leave Fullscreen"
+msgstr ""
+
+#: ../shell/ev-window.c:4179
+msgid "Leave fullscreen mode"
+msgstr ""
+
+#: ../shell/ev-window.c:4181
+msgid "Start Presentation"
+msgstr ""
+
+#: ../shell/ev-window.c:4182
+msgid "Start a presentation"
+msgstr ""
+
+#. View Menu
+#: ../shell/ev-window.c:4236
+msgid "_Toolbar"
+msgstr "_Barra d'espleches"
+
+#: ../shell/ev-window.c:4237
+msgid "Show or hide the toolbar"
+msgstr ""
+
+#: ../shell/ev-window.c:4239
+msgid "Side _Pane"
+msgstr ""
+
+#: ../shell/ev-window.c:4240
+msgid "Show or hide the side pane"
+msgstr ""
+
+#: ../shell/ev-window.c:4242
+msgid "_Continuous"
+msgstr ""
+
+#: ../shell/ev-window.c:4243
+msgid "Show the entire document"
+msgstr ""
+
+#: ../shell/ev-window.c:4245
+msgid "_Dual"
+msgstr ""
+
+#: ../shell/ev-window.c:4246
+msgid "Show two pages at once"
+msgstr ""
+
+#: ../shell/ev-window.c:4248
+msgid "_Fullscreen"
+msgstr "Ecran _complet"
+
+#: ../shell/ev-window.c:4249
+msgid "Expand the window to fill the screen"
+msgstr ""
+
+#: ../shell/ev-window.c:4251
+msgid "Pre_sentation"
+msgstr "Pre_sentacion"
+
+#: ../shell/ev-window.c:4252
+msgid "Run document as a presentation"
+msgstr ""
+
+#: ../shell/ev-window.c:4254
+msgid "_Best Fit"
+msgstr ""
+
+#: ../shell/ev-window.c:4255
+msgid "Make the current document fill the window"
+msgstr ""
+
+#: ../shell/ev-window.c:4257
+msgid "Fit Page _Width"
+msgstr ""
+
+#: ../shell/ev-window.c:4258
+msgid "Make the current document fill the window width"
+msgstr ""
+
+#. Links
+#: ../shell/ev-window.c:4265
+msgid "_Open Link"
+msgstr "_Dobrir lo ligam"
+
+#: ../shell/ev-window.c:4267
+msgid "_Go To"
+msgstr "_Anar a"
+
+#: ../shell/ev-window.c:4269
+msgid "Open in New _Window"
+msgstr "Dobrir dins una fenèstra novèla"
+
+#: ../shell/ev-window.c:4271
+msgid "_Copy Link Address"
+msgstr "_Copiar l'adreça del ligam"
+
+#: ../shell/ev-window.c:4273
+msgid "_Save Image As..."
+msgstr "_Enregistrar l'imatge coma..."
+
+#: ../shell/ev-window.c:4275
+msgid "Copy _Image"
+msgstr "Copiar l'_imatge"
+
+#: ../shell/ev-window.c:4314
+msgid "Page"
+msgstr "Pagina"
+
+#: ../shell/ev-window.c:4315
+msgid "Select Page"
+msgstr "Seleccionar la pagina"
+
+#: ../shell/ev-window.c:4326
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../shell/ev-window.c:4328
+msgid "Adjust the zoom level"
+msgstr ""
+
+#: ../shell/ev-window.c:4338
+msgid "Navigation"
+msgstr "Navegacion"
+
+#: ../shell/ev-window.c:4340
+msgid "Back"
+msgstr "Precedent"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:4343
+msgid "Move across visited pages"
+msgstr ""
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4373
+msgid "Previous"
+msgstr "Precedent"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4378
+msgid "Next"
+msgstr "Seguent"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4382
+msgid "Zoom In"
+msgstr "Agrandir lo zoom"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4386
+msgid "Zoom Out"
+msgstr "Reduire el zoom"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4394
+msgid "Fit Width"
+msgstr ""
+
+#: ../shell/ev-window.c:4607
+msgid "Unable to open external link"
+msgstr ""
+
+#: ../shell/ev-window.c:4777
+msgid "Couldn't find appropriate format to save image"
+msgstr ""
+
+#: ../shell/ev-window.c:4813
+msgid "The image could not be saved."
+msgstr ""
+
+#: ../shell/ev-window.c:4845
+msgid "Save Image"
+msgstr "Enregistrar l'imatge"
+
+#: ../shell/ev-window.c:4904
+msgid "Unable to open attachment"
+msgstr ""
+
+#: ../shell/ev-window.c:4956
+msgid "The attachment could not be saved."
+msgstr ""
+
+#: ../shell/ev-window.c:5001
+msgid "Save Attachment"
+msgstr ""
+
+#: ../shell/ev-window-title.c:145
+#, c-format
+msgid "%s - Password Required"
+msgstr ""
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr ""
+
+#: ../shell/main.c:58
+msgid "The page of the document to display."
+msgstr ""
+
+#: ../shell/main.c:58
+msgid "PAGE"
+msgstr "PAGINA"
+
+#: ../shell/main.c:59
+msgid "Run evince in fullscreen mode"
+msgstr ""
+
+#: ../shell/main.c:60
+msgid "Run evince in presentation mode"
+msgstr ""
+
+#: ../shell/main.c:61
+msgid "Run evince as a previewer"
+msgstr ""
+
+#: ../shell/main.c:62
+msgid "The word or phrase to find in the document"
+msgstr ""
+
+#: ../shell/main.c:62
+msgid "STRING"
+msgstr ""
+
+#: ../shell/main.c:65
+msgid "[FILE...]"
+msgstr "[FICHIÈR...]"
+
+#: ../shell/main.c:332
+msgid "MATE Document Viewer"
+msgstr ""
+
+#: ../shell/main.c:392
+msgid "Evince Document Viewer"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+
+#~ msgid "Pages"
+#~ msgstr "Paginas"
diff --git a/po/or.po b/po/or.po
new file mode 100644
index 00000000..00ff88c0
--- /dev/null
+++ b/po/or.po
@@ -0,0 +1,1598 @@
+# translation of evince.master.or.po to Oriya
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# Subhransu Behera <[email protected]>, 2006.
+# Manoj Kumar Giri <[email protected]>, 2008, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.master.or\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-05-04 12:28+0000\n"
+"PO-Revision-Date: 2010-05-17 23:35+0530\n"
+"Last-Translator: Manoj Kumar Giri <[email protected]>\n"
+"Language-Team: Oriya <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "କମିକ ବହିକୁ ସଙ୍କୋଚନ କରିବା ପାଇଁ “%s” ନିର୍ଦ୍ଦେଶକୁ ଆରମ୍ଭ କରିବାରେ ତ୍ରୁଟି: %s"
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "ନିର୍ଦ୍ଦେଶ “%s” କମିକ ବହିକୁ ଅସ୍ଥାୟୀ ଡିରେକ୍ଟୋରୀ ଭିତରେ ସଙ୍କୋଚନ କରିବାରେ ବିଫଳ।"
+
+#: ../backend/comics/comics-document.c:183
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "ନିର୍ଦ୍ଦେଶ “%s” ସାଧାରଣ ଭାବରେ ସମାପ୍ତ ହୋଇନଥିଲା।"
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "ଗୋଟିଏ ହାସ୍ୟସ୍ପଦ ବହି MIME ପ୍ରକାର ନୁହଁ: %s"
+
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "ଏହି ପ୍ରକାର କମିକ ବହିକୁ ପ୍ରସାରଣ କରିବା ପାଇଁ ସଠିକ ନିର୍ଦ୍ଦେଶ ପାଇବେ ନାହିଁ"
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "ଅଜଣା MIME ପ୍ରକାର"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "ଫାଇଲ କ୍ଷତିଗ୍ରସ୍ତ ହୋଇଛି"
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "ଅଭିଲେଖରେ କୌଣସି ଫାଇଲ ନାହିଁ।"
+
+#: ../backend/comics/comics-document.c:474
+#, c-format
+msgid "No images found in archive %s"
+msgstr "%s ଅଭିଲେଖରେ କୌଣସି ପ୍ରତିଛବି ମିଳିଲା ନାହିଁ"
+
+#: ../backend/comics/comics-document.c:718
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "“%s” କୁ ଅପସାରଣ କରିବା ସମୟରେ ଗୋଟିଏ ତ୍ରୁଟି।"
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr "ତ୍ରୁଟି %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "ହାସ୍ଯରସାତ୍ମକ ବହି"
+
+#: ../backend/djvu/djvu-document.c:173
+#, fuzzy
+#| msgid "DVI document has incorrect format"
+msgid "DjVu document has incorrect format"
+msgstr "DVI ଦଲିଲର ଭୂଲ ଫର୍ମାଟ ଅଛି"
+
+#: ../backend/djvu/djvu-document.c:250
+#, fuzzy
+#| msgid ""
+#| "The document is composed of several files. One or more of such files "
+#| "cannot be accessed."
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr "ଦଲିଲଟି ଅନେକ ଫାଇଲ ଦ୍ୱାରା ରଚନା କରାଯାଇଛି। ଏହିପରି ଏକ ବା ଅଧିକ ଫାଇଲରେ ପ୍ରବେଶ କରିପାରିବେ ନାହିଁ।"
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+#, fuzzy
+#| msgid "Djvu Documents"
+msgid "DjVu Documents"
+msgstr "Djvu ଦଲିଲ"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI ଦଲିଲର ଭୂଲ ଫର୍ମାଟ ଅଛି"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI ଦଲିଲ"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr ""
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "ହଁ"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "ନାଁ"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "ପ୍ରକାର 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "ପ୍ରକାର 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "ପ୍ରକାର 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "ପ୍ରକାର 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "ପ୍ରକାର 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "ଅଜଣା ଅକ୍ଷରରୂପ ପ୍ରକାର"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "କୌଣସି ନାମ ନାହିଁ"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "ସନ୍ନିବେଶିତ ଉପସେଟ"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "ସନ୍ନିହିତ"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "ସନ୍ନିବେଶିତ ନୁହେଁ"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF ଦଲିଲ"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "ଅବୈଧ ଦଲିଲ"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "ଇମ୍ପ୍ରେସ ସ୍ଲାଇଡ"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "କୌଣସି ତ୍ରୁଟି ନାହିଁ"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "ଯଥେଷ୍ଟ ସ୍ମୃତିସ୍ଥାନ ନାହିଁ"
+
+#: ../backend/impress/zip.c:59
+#, fuzzy
+#| msgid "Cannot find zip signature"
+msgid "Cannot find ZIP signature"
+msgstr "ଜିପ ହସ୍ତାକ୍ଷର ମିଳିଲା ନାହିଁ"
+
+#: ../backend/impress/zip.c:62
+#, fuzzy
+#| msgid "Invalid zip file"
+msgid "Invalid ZIP file"
+msgstr "ଅବୈଧ ଜିପ ଫାଇଲ"
+
+#: ../backend/impress/zip.c:65
+#, fuzzy
+#| msgid "Multi file zips are not supported"
+msgid "Multi file ZIPs are not supported"
+msgstr "ଏକାଧିକ ଫାଇଲକୁ ଜିପକରିବା ସମର୍ଥିତ ନୁହେଁ"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "ଏହି ଫାଇଲକୁ ଖୋଲି ପାରିବ ନାହିଁ"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "ଫାଇଲରୁ ତଥ୍ୟ ପଢ଼ିପାରିବେ ନାହିଁ"
+
+#: ../backend/impress/zip.c:74
+#, fuzzy
+#| msgid "Cannot find file in the zip archive"
+msgid "Cannot find file in the ZIP archive"
+msgstr "ଜିପ ଅଭିଲେଖାଗାରରେ ଫାଇଲ ଖୋଜିପାରିବେ ନାହିଁ"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "ଅଜଣା ତ୍ରୁଟି"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "“%s” ଦଲିଲକୁ ଧାରଣ କରିବାରେ ବିଫଳ"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "“%s” ଦଲିଲକୁ ସଂରକ୍ଷଣ କରିବାରେ ବିଫଳ"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "ପୋଷ୍ଟସ୍କ୍ରିପ୍ଟ ଦଲିଲ"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "“%s” ସଂଲଗ୍ନକକୁ ସଂରକ୍ଷିତ କରିପାରିଲା ନାହିଁ: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "“%s” ସଂଲଗ୍ନକକୁ ଖୋଲି ପାରିଲା ନାହିଁ: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "“%s” ସଂଲଗ୍ନକକୁ ଖୋଲି ପାରିଲା ନାହିଁ"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "ଫାଇଲ ପ୍ରକାର %s (%s) ସମର୍ଥିତ ନୁହେଁ"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "ସମସ୍ତ ଦଲିଲ"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "ସମସ୍ତ ଫାଇଲ"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, fuzzy, c-format
+#| msgid "Failed to create a temporary directory."
+msgid "Failed to create a temporary file: %s"
+msgstr "ଅସ୍ଥାୟୀ ଡିରେକ୍ଟୋରୀ ନିର୍ମାଣ କରିବାରେ ବିଫଳ।"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, fuzzy, c-format
+#| msgid "Failed to create a temporary directory."
+msgid "Failed to create a temporary directory: %s"
+msgstr "ଅସ୍ଥାୟୀ ଡିରେକ୍ଟୋରୀ ନିର୍ମାଣ କରିବାରେ ବିଫଳ।"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "ଫାଇଲଟି ଗୋଟିଏ ବୈଧ .desktop ଫାଇଲ ନୁହଁ"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "ଅଚିହ୍ନା ଡେସ୍କଟପ ଫାଇଲ ସଂସ୍କରଣ '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s କୁ ଆରମ୍ଭ କରୁଅଛି"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "ନିର୍ଦ୍ଦେଶନାମାରେ ପ୍ରୟୋଗଟି ଦଲିଲ ଗ୍ରହଣ କରେନାହିଁ"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "ଅଚିହ୍ନା ଆରମ୍ଭ ବିକଳ୍ପ: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "ଦଲିଲ URI ଗୁଡ଼ିକୁ 'ପ୍ରକାର=ସଂଯୋଗ' ଡେସ୍କଟପ ଭରଣକୁ ପଠାଯାଇପାରିବ ନାହିଁ"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "ଗୋଟିଏ ଆରମ୍ଭ କରିବା ବସ୍ତୁ ନୁହଁ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "ଅଧିବେଶନ ପରିଚାଳକଙ୍କ ପ୍ରତି ସଂଯୋଗ ନିଷ୍କ୍ରିୟ କରନ୍ତୁ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "ସଂରକ୍ଷିତ ବିନ୍ୟାସ ଧାରଣ କରିଥିବା ଫାଇଲକୁ ଦର୍ଶାନ୍ତୁ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "ଫାଇଲ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "ଅଧିବେଶନ ପରିଚାଳନ ID ଉଲ୍ଲେଖ କରନ୍ତୁ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "ଅଧିବେଶନ ପରିଚାଳନା ବିକଳ୍ପଗୁଡ଼ିକ:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "ଅଧିବେଶନ ପରିଚାଳନା ବିକଳ୍ପଗୁଡ଼ିକୁ ଦର୍ଶାନ୍ତୁ"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s”କୁ ଦର୍ଶାନ୍ତୁ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "ସାଧନ ପଟି ଉପରେ ଚଲାନ୍ତୁ (_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "ଚୟିତ ବସ୍ତୁକୁ ସାଧନ ପଟିକୁ ଘୁଞ୍ଚାନ୍ତୁ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "ସାଧନପଟିରୁ କାଢ଼ିଦିଅନ୍ତୁ (_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "ସାଧନ ପଟିରୁ ଚୟିତ ବସ୍ତୁକୁ ଅପସାରଣ କରନ୍ତୁ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "ସାଧନ ପଟିକୁ ଅପସାରଣ କରନ୍ତୁ (_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "ଚୟିତ ସାଧନ ପଟିକୁ ଅପସାରଣ କରନ୍ତୁ"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "ବିଭାଜକ"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+msgid "Running in presentation mode"
+msgstr "ଉପସ୍ଥାପନ ଧାରାରେ ଚାଲୁଅଛି"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5380
+msgid "Best Fit"
+msgstr "ସର୍ବତ୍କ୍ରୁଷ୍ଟ ମେଳକ"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "ପ୍ରୁଷ୍ଠା ଓସାର ସହିତ ମେଳ କରନ୍ତୁ"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "୫୦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "୭୦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "୧୦୦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "୧୫୦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "୨୦୦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "୪୦୦%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4232
+#: ../shell/ev-window-title.c:149 ../shell/main.c:296
+#, c-format
+msgid "Document Viewer"
+msgstr "ଦଲିଲ ପ୍ରଦର୍ଶକ"
+
+#: ../data/evince.desktop.in.in.h:2
+#, fuzzy
+#| msgid "View multipage documents"
+msgid "View multi-page documents"
+msgstr "ଏକାଧିକ ପ୍ରୁଷ୍ଠା ବିଶିଷ୍ଟ ଦଲିଲକୁ ଦେଖନ୍ତୁ"
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "ଅସ୍ଥାୟୀ ଫାଇଲକୁ ଅପସାରଣ କରନ୍ତୁ"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "ମୁଦ୍ରଣୀ ବିନ୍ୟାସ ଫାଇଲ"
+
+#: ../previewer/ev-previewer.c:143 ../previewer/ev-previewer.c:177
+msgid "MATE Document Previewer"
+msgstr "MATE ଦଲିଲ ପ୍ରାକ ପ୍ରଦର୍ଶକ"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3020
+msgid "Failed to print document"
+msgstr "ଦଲିଲ ମୂଦ୍ରଣ କରିବାରେ ବିଫଳ"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "ବଚ୍ଛିତ ମୁଦ୍ରଣୀ '%s' ମିଳିଲା ନାହିଁ"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5129
+msgid "_Previous Page"
+msgstr "ପୂର୍ବବର୍ତ୍ତୀ ପ୍ରୁଷ୍ଠା (_P)"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5130
+msgid "Go to the previous page"
+msgstr "ପୂର୍ବବର୍ତ୍ତୀ ପ୍ରୁଷ୍ଠାକୁ ଯାଆନ୍ତୁ"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5132
+msgid "_Next Page"
+msgstr "ପରବର୍ତ୍ତୀ ପ୍ରୁଷ୍ଠା (_N)"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5133
+msgid "Go to the next page"
+msgstr "ପରବର୍ତ୍ତୀ ପ୍ରୁଷ୍ଠାକୁ ଯାଆନ୍ତୁ"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5116
+msgid "Enlarge the document"
+msgstr "ଦଲିଲକୁ ସମ୍ପ୍ରସାରିତ କରନ୍ତୁ"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5119
+msgid "Shrink the document"
+msgstr "ଦଲିଲକୁ ସଙ୍କୁଚିତ କରନ୍ତୁ"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "ମୂଦ୍ରଣ କରନ୍ତୁ"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5087
+msgid "Print this document"
+msgstr "ଏହି ଦଲିଲକୁ ମୂଦ୍ରଣ କରନ୍ତୁ"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5231
+msgid "_Best Fit"
+msgstr "ସର୍ବତ୍କ୍ରୁଷ୍ଟ ମେଳକ (_B)"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5232
+msgid "Make the current document fill the window"
+msgstr "ସମ୍ପ୍ରତିକ ଦଲିଲର ଆକାରକୁ ୱିଣ୍ଡୋ ଭରଣ ପର୍ଯ୍ଯନ୍ତ ପରିବର୍ତ୍ତିତ କରନ୍ତୁ"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5234
+msgid "Fit Page _Width"
+msgstr "ପ୍ରୁଷ୍ଠା ଓସାର ସହିତ ମେଳ କରନ୍ତୁ (_W)"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5235
+msgid "Make the current document fill the window width"
+msgstr "ସମ୍ପ୍ରତିକ ଦଲିଲକୁ ୱିଣ୍ଡୋ ଅସାର ଅନୁଯାୟୀ ମେଳ କରନ୍ତୁ"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5302
+msgid "Page"
+msgstr "ପୃଷ୍ଠା"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5303
+msgid "Select Page"
+msgstr "ପ୍ରୁଷ୍ଠା ଚୟନ କରନ୍ତୁ"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "ଦଲିଲ"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "ଶୀର୍ଷକ:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "ଅବସ୍ଥାନ:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "ବିଷୟ:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "ଲେଖକ:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "ସୂଚକ ଶବ୍ଦ:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "ପ୍ରଯୋଜକ:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "ସ୍ରଷ୍ଟା:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "ସ୍ରୁଷ୍ଟ:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "ପରବର୍ତ୍ତନ କରାଯାଇଛି:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "ପ୍ରୁଷ୍ଠା ସଂଖ୍ଯା:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "ଅନୁକୂଳୀତ:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "ସଜ୍ଜିକରଣ ଶୈଳୀ:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "ସୁରକ୍ଷା:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "ପୃଷ୍ଠା ଆକାର:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "କିଛି ନୁହେଁ"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "ପୂର୍ବନିର୍ଧାରିତ:ମିଲିମିଟର"
+
+#: ../properties/ev-properties-view.c:284
+#, fuzzy, c-format
+#| msgid "%.0f x %.0f mm"
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f ମିଲିମିଟର"
+
+#: ../properties/ev-properties-view.c:288
+#, fuzzy, c-format
+#| msgid "%.2f x %.2f inch"
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f ଇଞ୍ଚ"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, ଚିତ୍ରପଟ (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, କଡୁଆ (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d %d ର)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "%d ର"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+#, fuzzy
+#| msgid "Preparing to print ..."
+msgid "Preparing to print…"
+msgstr "ମୁଦ୍ରଣ କରିବା ପାଇଁ ପ୍ରସ୍ତୁତ ହେଉଅଛି ..."
+
+#: ../libview/ev-print-operation.c:336
+#, fuzzy
+#| msgid "Finishing..."
+msgid "Finishing…"
+msgstr "ସମାପ୍ତ କରୁଅଛି..."
+
+#: ../libview/ev-print-operation.c:338
+#, fuzzy, c-format
+#| msgid "Printing page %d of %d..."
+msgid "Printing page %d of %d…"
+msgstr "%d ର %d ପୃଷ୍ଠାକୁ ମୁଦ୍ରଣ କରୁଅଛି..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "ଏହି ମୂଦ୍ରଣୀରେ ମୂଦ୍ରଣ ପ୍ରକ୍ରିୟା ସମର୍ଥିତ ନୁହେଁ।"
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "ଅବୈଧ ପୃଷ୍ଠା ଚୟନ"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "ଚେତାବନୀ"
+
+#: ../libview/ev-print-operation.c:1229
+#, fuzzy
+#| msgid "Your print range selection does not include any page"
+msgid "Your print range selection does not include any pages"
+msgstr "ଆପଣଙ୍କର ମୁଦ୍ରଣ ପରିସର ଚୟନ କୌଣସି ପୃଷ୍ଠାକୁ ଅନ୍ତର୍ଭୁକ୍ତ କରେନାହିଁ"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr ""
+
+#: ../libview/ev-jobs.c:1438
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "ପୃଷ୍ଠା %d କୁ ମୂଦ୍ରଣ କରିବାରେ ବିଫଳ: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "ଉପରକୁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "ତଳକୁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "ଦ୍ରୁଶ୍ଯକୁ ଉପରକୁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "ଦ୍ରୁଶ୍ଯକୁ ତଳକୁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "ଦଲିଲ ଦ୍ରୁଶ୍ଯ"
+
+#: ../libview/ev-view-presentation.c:673
+msgid "Jump to page:"
+msgstr "ପ୍ରୁଷ୍ଠାକୁ ଯାଆନ୍ତୁ:"
+
+#: ../libview/ev-view-presentation.c:975
+#, fuzzy
+#| msgid "End of presentation. Press Escape to exit."
+msgid "End of presentation. Click to exit."
+msgstr "ଉପସ୍ଥାପନ ସମାପ୍ତି. ପ୍ରସ୍ଥାନ କରିବା ପାଇଁ Escapeକୁ ଦବାନ୍ତୁ."
+
+#: ../libview/ev-view.c:1727
+msgid "Go to first page"
+msgstr "ପ୍ରଥମ ପ୍ରୁଷ୍ଠାକୁ ଯାଆନ୍ତୁ"
+
+#: ../libview/ev-view.c:1729
+msgid "Go to previous page"
+msgstr "ପୂର୍ବବର୍ତ୍ତୀ ପ୍ରୁଷ୍ଠାକୁ ଯାଆନ୍ତୁ"
+
+#: ../libview/ev-view.c:1731
+msgid "Go to next page"
+msgstr "ପରବର୍ତ୍ତୀ ପ୍ରୁଷ୍ଠାକୁ ଯାଆନ୍ତୁ"
+
+#: ../libview/ev-view.c:1733
+msgid "Go to last page"
+msgstr "ଶେଷ ପ୍ରୁଷ୍ଠାକୁ ଯାଆନ୍ତୁ"
+
+#: ../libview/ev-view.c:1735
+msgid "Go to page"
+msgstr "ଏହି ପ୍ରୁଷ୍ଠାକୁ ଯାଆନ୍ତୁ"
+
+#: ../libview/ev-view.c:1737
+msgid "Find"
+msgstr "ଖୋଜନ୍ତୁ"
+
+#: ../libview/ev-view.c:1765
+#, c-format
+msgid "Go to page %s"
+msgstr "%s ପ୍ରୁଷ୍ଠାକୁ ଯାଆନ୍ତୁ"
+
+#: ../libview/ev-view.c:1771
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "%s କୁ ଯାଆନ୍ତୁ %s ଫାଇଲରେ"
+
+#: ../libview/ev-view.c:1774
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” ଫାଇଲକୁ ଯାଆନ୍ତୁ"
+
+#: ../libview/ev-view.c:1782
+#, c-format
+msgid "Launch %s"
+msgstr "%s କୁ ଚଳାନ୍ତୁ"
+
+#: ../libview/ev-view.c:3926 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+#, fuzzy
+#| msgid "Loading..."
+msgid "Loading…"
+msgstr "ଧାରଣ କରନ୍ତୁ ..."
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "ଖୋଜନ୍ତୁ:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5104
+msgid "Find Pre_vious"
+msgstr "ପୂର୍ବବର୍ତ୍ତୀ ଖୋଜନ୍ତୁ (_v)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "ସନ୍ଧାନ ପଂକ୍ତିର ପୂର୍ବବର୍ତ୍ତୀ ଉପସ୍ଥିତିକୁ ଖୋଜନ୍ତୁ"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5102
+msgid "Find Ne_xt"
+msgstr "ପରବର୍ତ୍ତୀ ଖୋଜନ୍ତୁ (_x)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "ସନ୍ଧାନ ପଂକ୍ତିର ପରବର୍ତ୍ତୀ ଉପସ୍ଥିତିକୁ ଖୋଜନ୍ତୁ"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "ଅକ୍ଷର ନିର୍ଦ୍ଦିଷ୍ଟ (_a)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "ଅକ୍ଷର ନିର୍ଦ୍ଦିଷ୍ଟ ଅନୁସନ୍ଧାନକୁ ଅଦଳବଦଳ କରନ୍ତୁ"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s ଦଲିଲ ପାଇଁ ପ୍ରବେଶ ସଙ୍କେତ"
+
+#: ../shell/ev-convert-metadata.c:88
+#, fuzzy, c-format
+#| msgid "Starting %s"
+msgid "Converting %s"
+msgstr "ରୂପାନ୍ତରିତ କରୁଛି %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "ନିକଟରେ ବ୍ୟବହୃତ ହୋଇଥିବା ଗୋଟିଏ ଦଲିଲକୁ ଖୋଲନ୍ତୁ"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "ଏହି ଦଲିଲଟି ତାଳକିତ ଅଛେ ଏବଂ କେବଳ ସଠିକ ପ୍ରବେଶ ସଙ୍କେତ ଭରଣ କରି ଏହାକୁ ପଢିହେବ।"
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "ଦଲଲିକୁ ଅନ-ଲକ କରନ୍ତୁ (_U)"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "ପ୍ରବେଶ ସଙ୍କେତ ଭରଣ କରନ୍ତୁ"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "ପ୍ରବେଶ ସଙ୍କେତ ଆବଶ୍ଯକ"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "“%s” ଦଲିଲଟି ତାଳକିତ ଅଛି ଏବଂ ଏହାକୁ ଖୋଲିବା ପାଇଁ ଗୋଟିଏ ପ୍ରବେଶ ସଙ୍କେତ ଆବଶ୍ଯକ।"
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "ପ୍ରବେଶ ସଂଙ୍କେତ (_P):"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "ଅତିଶିଘ୍ର ପ୍ରବେଶ ସଂକେତକୁ ଭୁଲିଯାଆନ୍ତୁ (_i)"
+
+#: ../shell/ev-password-view.c:380
+#, fuzzy
+#| msgid "Remember password until you _logout"
+msgid "Remember password until you _log out"
+msgstr "ଲଗଆଉଟ ହେବା ପର୍ଯ୍ୟନ୍ତ ପ୍ରବେଶ ସଙ୍କେତକୁ ମନେ ରଖନ୍ତୁ (_l)"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "ସବୁଦିନ ପାଇଁ ମନେରଖନ୍ତୁ (_f)"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "ଗୁଣଧର୍ମ"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "ସାଧାରଣ"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "ଅକ୍ଷରରୂପଗୁଡ଼ିକ"
+
+#: ../shell/ev-properties-dialog.c:118
+#, fuzzy
+#| msgid "Document Viewer"
+msgid "Document License"
+msgstr "ଦଲିଲ ପ୍ରଦର୍ଶକ"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "ଅକ୍ଷରରୂପ"
+
+#: ../shell/ev-properties-fonts.c:162
+#, fuzzy, c-format
+#| msgid "Gathering font information... %3d%%"
+msgid "Gathering font information… %3d%%"
+msgstr "ଅକ୍ଷରରୂପ ସୂଚନାକୁ ସଂଗ୍ରହ କରୁଅଛି... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr ""
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "ସଂଲଗ୍ନକ"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "ସ୍ତରଗୁଡ଼ିକ"
+
+#: ../shell/ev-sidebar-links.c:335
+#, fuzzy
+#| msgid "Print"
+msgid "Print…"
+msgstr "ମୂଦ୍ରଣ କରନ୍ତୁ"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "ଅନୁକ୍ରମଣିକା"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "କ୍ଷୁଦ୍ର ଚିତ୍ର"
+
+#: ../shell/ev-window.c:840
+#, fuzzy, c-format
+#| msgid "Page %s - %s"
+msgid "Page %s — %s"
+msgstr "ପୃଷ୍ଠା %s - %s"
+
+#: ../shell/ev-window.c:842
+#, c-format
+msgid "Page %s"
+msgstr "ପ୍ରୁଷ୍ଠା %s"
+
+#: ../shell/ev-window.c:1300
+msgid "The document contains no pages"
+msgstr "ଦଲିଲରେ କୋଣସି ପୃଷ୍ଠା ନାହିଁ"
+
+#: ../shell/ev-window.c:1303
+msgid "The document contains only empty pages"
+msgstr "ଦଲିଲରେ କେବଳ ଖାଲି ପୃଷ୍ଠାଗୁଡ଼ିକ ଅଛି"
+
+#: ../shell/ev-window.c:1497 ../shell/ev-window.c:1663
+msgid "Unable to open document"
+msgstr "ଦଲିଲକୁ ଖୋଲିବାରେ ଅସମର୍ଥ"
+
+#: ../shell/ev-window.c:1634
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "“%s”ରୁ ଦଲିଲ ଧାରଣ କରୁଅଛି"
+
+#: ../shell/ev-window.c:1776 ../shell/ev-window.c:2054
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "ଦଲିଲ ଧାରଣ କରୁଅଛି (%d%%)"
+
+#: ../shell/ev-window.c:1809
+#, fuzzy
+#| msgid "Failed to reload document."
+msgid "Failed to load remote file."
+msgstr "ଦଲିଲକୁ ପୁନର୍ଧାରଣ କରିବାରେ ବିଫଳ"
+
+#: ../shell/ev-window.c:1998
+#, c-format
+msgid "Reloading document from %s"
+msgstr "ଦଲିଲକୁ ପୁନର୍ଧାରଣ କରୁଅଛି %s"
+
+#: ../shell/ev-window.c:2030
+msgid "Failed to reload document."
+msgstr "ଦଲିଲକୁ ପୁନର୍ଧାରଣ କରିବାରେ ବିଫଳ"
+
+#: ../shell/ev-window.c:2185
+msgid "Open Document"
+msgstr "ଦଲିଲ ଖୋଲନ୍ତୁ"
+
+#: ../shell/ev-window.c:2483
+#, c-format
+msgid "Saving document to %s"
+msgstr "ଦଲିଲକୁ %sରେ ସଂରକ୍ଷଣ କରୁଅଛି"
+
+#: ../shell/ev-window.c:2486
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "%s ରେ ସଂଲଗ୍ନକୁ ସଂରକ୍ଷଣ କରୁଅଛି"
+
+#: ../shell/ev-window.c:2489
+#, c-format
+msgid "Saving image to %s"
+msgstr "%s ରେ ପ୍ରତିଛବିକୁ ସଂରକ୍ଷଣ କରୁଅଛି"
+
+#: ../shell/ev-window.c:2533 ../shell/ev-window.c:2633
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "ଫାଇଲକୁ “%s” ଭାବରେ ସଂରକ୍ଷଣ କରନ୍ତୁ।"
+
+#: ../shell/ev-window.c:2564
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "ଦଲିଲ ଧାରଣ କରୁଅଛି (%d%%)"
+
+#: ../shell/ev-window.c:2568
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "ସଂସଲଗ୍ନକୁ ଧାରଣ କରୁଅଛି (%d%%)"
+
+#: ../shell/ev-window.c:2572
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "ପ୍ରତିଛବିକୁ ଧାରଣ କରୁଅଛି (%d%%)"
+
+#: ../shell/ev-window.c:2696
+msgid "Save a Copy"
+msgstr "ଗୋଟିଏ ପ୍ରତିଲିପି ସଂରକ୍ଷଣ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:2964
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "ଧାଡ଼ିରେ ଥିବା %d ବଳକା କାର୍ଯ୍ୟ"
+msgstr[1] "ଧାଡ଼ିରେ ଥିବା %d ବଳକା କାର୍ଯ୍ୟ"
+
+#: ../shell/ev-window.c:3077
+#, c-format
+msgid "Printing job “%s”"
+msgstr "କାର୍ଯ୍ୟ “%s”କୁ ମୁଦ୍ରଣ କରୁଅଛି"
+
+#: ../shell/ev-window.c:3289
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "ବନ୍ଦ ହେବା ପୂର୍ବରୁ ମୁଦ୍ରଣ କାର୍ଯ୍ୟ “%s” ସମାପ୍ତ ହେବା ପର୍ଯ୍ୟନ୍ତ ଅପେକ୍ଷା କରିବେ କି?"
+
+#: ../shell/ev-window.c:3292
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"ସେଠାରେ %d ଟି ମୁଦ୍ରଣୀ କାର୍ଯ୍ୟ ସକ୍ରିୟ ଅଛି। ବନ୍ଦ ହେବା ପୂର୍ବରୁ ମୁଦ୍ରଣୀ ସମାପ୍ତ ହେବା ପର୍ଯ୍ୟନ୍ତ "
+"ଅପେକ୍ଷା କରିବେ କି?"
+
+#: ../shell/ev-window.c:3304
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "ଯଦି ଆପଣ ଏହି ୱିଣ୍ଡୋକୁ ବନ୍ଦ କରିଦିଅନ୍ତି, ତେବେ ବଳକା ମୁଦ୍ରଣୀ କାର୍ଯ୍ୟଗୁଡ଼ିକୁ ମୁଦ୍ରଣ କରାଯାଇପାରିବ ନାହିଁ।"
+
+#: ../shell/ev-window.c:3308
+msgid "Cancel _print and Close"
+msgstr "ମୁଦ୍ରଣ କରନ୍ତୁ ଏବଂ ବନ୍ଦକରନ୍ତୁକୁ ବାତିଲ କରନ୍ତୁ (_p)"
+
+#: ../shell/ev-window.c:3312
+msgid "Close _after Printing"
+msgstr "ମୁଦ୍ରଣ ପରେ ବନ୍ଦ କରନ୍ତୁ (_a)"
+
+#: ../shell/ev-window.c:3878
+msgid "Toolbar Editor"
+msgstr "ସାଧନ ପଟି ସମ୍ପାଦକ"
+
+#: ../shell/ev-window.c:4017
+msgid "There was an error displaying help"
+msgstr "ସହାୟତା ପ୍ରଦର୍ଶନ କରିବା ସମୟରେ ଗୋଟିଏ ତ୍ରୁଟି"
+
+#: ../shell/ev-window.c:4228
+#, fuzzy, c-format
+#| msgid ""
+#| "Document Viewer.\n"
+#| "Using poppler %s (%s)"
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"ଦଲିଲ ପ୍ରଦର୍ଶକ।\n"
+"ପୋପ୍ଲର %s (%s) ବ୍ଯବହାର କରୁଅଛି"
+
+#: ../shell/ev-window.c:4259
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4263
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 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.\n"
+
+#: ../shell/ev-window.c:4267
+#, fuzzy
+#| msgid ""
+#| "You should have received a copy of the GNU General Public License along "
+#| "with Evince; if not, write to the Free Software Foundation, Inc., 59 "
+#| "Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:4292
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4295
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 The Evince authors"
+
+#: ../shell/ev-window.c:4301
+msgid "translator-credits"
+msgstr "ଶୁଭ୍ରାଂଶୁ ବେହେରା <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4575
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "ଏହି ପ୍ରୁଷ୍ଠାରେ %d ମିଳିଲା"
+msgstr[1] "ଏହି ପ୍ରୁଷ୍ଠାରେ %d ମିଳିଲା"
+
+#: ../shell/ev-window.c:4583
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "ସନ୍ଧାନ କରିବା ପାଇଁ %3d%% ବଳକା ଅଛି"
+
+#: ../shell/ev-window.c:5070
+msgid "_File"
+msgstr "ଫାଇଲ (_F)"
+
+#: ../shell/ev-window.c:5071
+msgid "_Edit"
+msgstr "ସମ୍ପାଦନ କରନ୍ତୁ (_E)"
+
+#: ../shell/ev-window.c:5072
+msgid "_View"
+msgstr "ଦ୍ରୁଶ୍ଯ (_V)"
+
+#: ../shell/ev-window.c:5073
+msgid "_Go"
+msgstr "ଯାଆନ୍ତୁ (_G)"
+
+#: ../shell/ev-window.c:5074
+msgid "_Help"
+msgstr "ସହାୟତା (_H)"
+
+#. File menu
+#: ../shell/ev-window.c:5077 ../shell/ev-window.c:5342
+#, fuzzy
+#| msgid "_Open..."
+msgid "_Open…"
+msgstr "ଖୋଲନ୍ତୁ ... (_O)"
+
+#: ../shell/ev-window.c:5078 ../shell/ev-window.c:5343
+msgid "Open an existing document"
+msgstr "ଗୋଟିଏ ଅବସ୍ଥିତ ଦଲିଲକୁ ଖୋଲନ୍ତୁ"
+
+#: ../shell/ev-window.c:5080
+msgid "Op_en a Copy"
+msgstr "ଗୋଟିଏ ନକଲକୁ ଖୋଲନ୍ତୁ (_e)"
+
+#: ../shell/ev-window.c:5081
+msgid "Open a copy of the current document in a new window"
+msgstr "ବର୍ତ୍ତମାନ ଦଲିଲର ଗୋଟିଏ ନକଲକୁ ନୂତନ ୱିଣ୍ଡୋରେ ଖୋଲନ୍ତୁ"
+
+#: ../shell/ev-window.c:5083
+#, fuzzy
+#| msgid "Save a Copy"
+msgid "_Save a Copy…"
+msgstr "ଗୋଟିଏ ପ୍ରତିଲିପି ସଂରକ୍ଷଣ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5084
+msgid "Save a copy of the current document"
+msgstr "ବର୍ତ୍ତମାନ ଦଲିଲର ଗୋଟିଏ ନକଲକୁ ସଂରକ୍ଷିତ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5086
+#, fuzzy
+#| msgid "Print"
+msgid "_Print…"
+msgstr "ମୂଦ୍ରଣ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5089
+msgid "P_roperties"
+msgstr "ଗୁଣଧର୍ମ (_r)"
+
+#: ../shell/ev-window.c:5097
+msgid "Select _All"
+msgstr "ସବୁକିଛି ଚୟନ କରନ୍ତୁ (_A)"
+
+#: ../shell/ev-window.c:5099
+#, fuzzy
+#| msgid "Find"
+msgid "_Find…"
+msgstr "ଖୋଜନ୍ତୁ"
+
+#: ../shell/ev-window.c:5100
+msgid "Find a word or phrase in the document"
+msgstr "ଦଲିଲରେ ଗୋଟିଏ ଶବ୍ଦ କିମ୍ବା ବାକ୍ଯାଂଶକୁ ଖୋଜନ୍ତୁ"
+
+#: ../shell/ev-window.c:5106
+msgid "T_oolbar"
+msgstr "ସାଧନ ପଟି (_o)"
+
+#: ../shell/ev-window.c:5108
+msgid "Rotate _Left"
+msgstr "ବାମକୁ ଘୂରାନ୍ତୁ (_L)"
+
+#: ../shell/ev-window.c:5110
+msgid "Rotate _Right"
+msgstr "ଡାହାଣକୁ ଘୂରାନ୍ତୁ (_R)"
+
+#: ../shell/ev-window.c:5121
+msgid "_Reload"
+msgstr "ପୁନର୍ଧାରଣ କରନ୍ତୁ (_R)"
+
+#: ../shell/ev-window.c:5122
+msgid "Reload the document"
+msgstr "ଦଲିଲକୁ ପୁନର୍ଧାରଣ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5125
+msgid "Auto_scroll"
+msgstr "ସ୍ୱୟଂ ଦୃଶ୍ୟବଦଳ (_s)"
+
+#: ../shell/ev-window.c:5135
+msgid "_First Page"
+msgstr "ପ୍ରଥମ ପ୍ରୁଷ୍ଠା (_F)"
+
+#: ../shell/ev-window.c:5136
+msgid "Go to the first page"
+msgstr "ପ୍ରଥମ ପ୍ରୁଷ୍ଠାକୁ ଯାଆନ୍ତୁ"
+
+#: ../shell/ev-window.c:5138
+msgid "_Last Page"
+msgstr "ଶେଷ ପ୍ରୁଷ୍ଠା (_L)"
+
+#: ../shell/ev-window.c:5139
+msgid "Go to the last page"
+msgstr "ଶେଷ ପ୍ରୁଷ୍ଠାକୁ ଯାଆନ୍ତୁ"
+
+#. Help menu
+#: ../shell/ev-window.c:5143
+msgid "_Contents"
+msgstr "ସୂଚୀପତ୍ର (_C)"
+
+#: ../shell/ev-window.c:5146
+msgid "_About"
+msgstr "ବିବରଣୀ (_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5150
+msgid "Leave Fullscreen"
+msgstr "ସମ୍ପୂର୍ଣ୍ଣ ପରଦା ଧାରାକୁ ଛାଡନ୍ତୁ"
+
+#: ../shell/ev-window.c:5151
+msgid "Leave fullscreen mode"
+msgstr "ସମ୍ପୂର୍ଣ୍ଣ ପରଦା ଅବସ୍ଥାକୁ ଛାଡନ୍ତୁ"
+
+#: ../shell/ev-window.c:5153
+msgid "Start Presentation"
+msgstr "ଉପସ୍ଥାପନ କରିବା ଆରମ୍ଭ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5154
+msgid "Start a presentation"
+msgstr "ଗୋଟିଏ ଉପସ୍ଥାପନ ଆରମ୍ଭ କରନ୍ତୁ"
+
+#. View Menu
+#: ../shell/ev-window.c:5213
+msgid "_Toolbar"
+msgstr "ସାଧନ ପଟି (_T)"
+
+#: ../shell/ev-window.c:5214
+msgid "Show or hide the toolbar"
+msgstr "ସାଧନ ପଟିକୁ ଦେଖାନ୍ତୁ କିମ୍ବା ଲୁକ୍କାୟିତ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5216
+msgid "Side _Pane"
+msgstr "ପାର୍ଶ୍ବ ଫଳକ (_P)"
+
+#: ../shell/ev-window.c:5217
+msgid "Show or hide the side pane"
+msgstr "ପାର୍ଶ୍ବ ଫଳକକୁ ଦେଖାନ୍ତୁ କିମ୍ବା ଲୁକ୍କୟିତ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5219
+msgid "_Continuous"
+msgstr "ନିରବିଚ୍ଛିନ୍ନ (_C) "
+
+#: ../shell/ev-window.c:5220
+msgid "Show the entire document"
+msgstr "ସମ୍ପୂର୍ଣ୍ଣ ଦଲିଲକୁ ଦେଖାନ୍ତୁ"
+
+#: ../shell/ev-window.c:5222
+msgid "_Dual"
+msgstr "ଦ୍ବୟ (_D)"
+
+#: ../shell/ev-window.c:5223
+msgid "Show two pages at once"
+msgstr "ଦୁଇଟି ପ୍ରୁଷ୍ଠାକୁ ଏକତ୍ର ଦେଖାନ୍ତୁ"
+
+#: ../shell/ev-window.c:5225
+msgid "_Fullscreen"
+msgstr "ସମ୍ପୂର୍ଣ ପରଦା (_F)"
+
+#: ../shell/ev-window.c:5226
+msgid "Expand the window to fill the screen"
+msgstr "ପରଦା ପୂର୍ଣ୍ଣ ହେବା ପର୍ଯ୍ଯନ୍ତ ୱିଣ୍ଡୋକୁ ପ୍ରସାରିତ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5228
+msgid "Pre_sentation"
+msgstr "ଉପସ୍ଥାପନ (_s)"
+
+#: ../shell/ev-window.c:5229
+msgid "Run document as a presentation"
+msgstr "ଦଲିଲକୁ ଗୋଟିଏ ଉପସ୍ଥାପନ ଭାବରେ ଚଳାନ୍ତୁ"
+
+#: ../shell/ev-window.c:5237
+msgid "_Inverted Colors"
+msgstr ""
+
+#: ../shell/ev-window.c:5238
+msgid "Show page contents with the colors inverted"
+msgstr ""
+
+#. Links
+#: ../shell/ev-window.c:5246
+msgid "_Open Link"
+msgstr "ସଂଯୋଗ ଖୋଲନ୍ତୁ (_O)"
+
+#: ../shell/ev-window.c:5248
+msgid "_Go To"
+msgstr "ଏଠାକୁ ଯାଆନ୍ତୁ (_G)"
+
+#: ../shell/ev-window.c:5250
+msgid "Open in New _Window"
+msgstr "ନୂତନ ୱିଣ୍ଡୋରେ ଖୋଲନ୍ତୁ (_W)"
+
+#: ../shell/ev-window.c:5252
+msgid "_Copy Link Address"
+msgstr "ସଂଯୋଗ ଠିକଣା ନକଲ କରନ୍ତୁ (_C)"
+
+#: ../shell/ev-window.c:5254
+#, fuzzy
+#| msgid "_Save Image As..."
+msgid "_Save Image As…"
+msgstr "ପ୍ରତିଛବିକୁ ଏହିପରି ସଂରକ୍ଷଣ କରନ୍ତୁ (_S)..."
+
+#: ../shell/ev-window.c:5256
+msgid "Copy _Image"
+msgstr "ପ୍ରତିଛବିକୁ ନକଲ କରନ୍ତୁ (_I)"
+
+#: ../shell/ev-window.c:5261
+#, fuzzy
+#| msgid "Save Attachment"
+msgid "_Open Attachment"
+msgstr "ସଂଲଗ୍ନକୁ ସଂରକ୍ଷଣ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5263
+#, fuzzy
+#| msgid "Save Attachment"
+msgid "_Save Attachment As…"
+msgstr "ସଂଲଗ୍ନକୁ ସଂରକ୍ଷଣ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5316
+msgid "Zoom"
+msgstr "ସାନବଡ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5318
+msgid "Adjust the zoom level"
+msgstr "ସାନବଡ କରିବା ସ୍ତରକୁ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5328
+msgid "Navigation"
+msgstr "ପଥପଦର୍ଶନ"
+
+#: ../shell/ev-window.c:5330
+msgid "Back"
+msgstr "ପଛକୁ"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5333
+msgid "Move across visited pages"
+msgstr "ପରିଦର୍ଶିତ ପୃଷ୍ଠାଗୁଡ଼ିକ ଚାରିପଟେ ଗତି କରନ୍ତୁ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5363
+msgid "Previous"
+msgstr "ପୂର୍ବବର୍ତ୍ତୀ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5368
+msgid "Next"
+msgstr "ପରବର୍ତ୍ତୀ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5372
+msgid "Zoom In"
+msgstr "ବଡ କରନ୍ତୁ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5376
+msgid "Zoom Out"
+msgstr "ସାନ କରନ୍ତୁ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5384
+msgid "Fit Width"
+msgstr "ଓସାର ସହିତ ମେଳ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5545 ../shell/ev-window.c:5562
+msgid "Unable to launch external application."
+msgstr "ବାର୍ହ୍ୟ ପ୍ରୟୋଗକୁ ଆରମ୍ଭ କରିବାରେ ଅସମର୍ଥ।"
+
+#: ../shell/ev-window.c:5619
+msgid "Unable to open external link"
+msgstr "ବାର୍ହ୍ୟ ସଂଲଗ୍ନକକୁ ଖୋଲିବାରେ ଅସମର୍ଥ"
+
+#: ../shell/ev-window.c:5786
+msgid "Couldn't find appropriate format to save image"
+msgstr "ପ୍ରତିଛବିକୁ ସଂରକ୍ଷଣ କରିବା ପାଇଁ ଉପଯୁକ୍ତ ଶୈଳୀ ମିଳୁନାହିଁ"
+
+#: ../shell/ev-window.c:5828
+msgid "The image could not be saved."
+msgstr "ପ୍ରତିଛବିକୁ ସଂରକ୍ଷଣ କରିପାରିଲା ନାହିଁ."
+
+#: ../shell/ev-window.c:5860
+msgid "Save Image"
+msgstr "ଚିତ୍ରକୁ ସଂରକ୍ଷଣ କରନ୍ତୁ"
+
+#: ../shell/ev-window.c:5927
+msgid "Unable to open attachment"
+msgstr "ସଂଲଗ୍ନକକୁ ଖୋଲିବାରେ ଅସମର୍ଥ"
+
+#: ../shell/ev-window.c:5980
+msgid "The attachment could not be saved."
+msgstr "ସଂଲଗ୍ନକକୁ ସଂରକ୍ଷଣ କରିପାରିଲା ନାହିଁ।"
+
+#: ../shell/ev-window.c:6025
+msgid "Save Attachment"
+msgstr "ସଂଲଗ୍ନକକୁ ସଂରକ୍ଷଣ କରନ୍ତୁ"
+
+#: ../shell/ev-window-title.c:162
+#, fuzzy, c-format
+#| msgid "%s - Password Required"
+msgid "%s — Password Required"
+msgstr "%s - ପ୍ରବେଶ ସଙ୍କେତ ଆବଶ୍ଯକ"
+
+#: ../shell/ev-utils.c:317
+msgid "By extension"
+msgstr "ଅନୁଲଗ୍ନ ଦ୍ୱାରା"
+
+#: ../shell/main.c:72 ../shell/main.c:260
+msgid "MATE Document Viewer"
+msgstr "ନୋମ ଦଲିଲ ପ୍ରଦର୍ଶକ"
+
+#: ../shell/main.c:80
+#, fuzzy
+#| msgid "The page of the document to display."
+msgid "The page label of the document to display."
+msgstr "ପ୍ରଦର୍ଶନ କରିବା ପାଇଁ ଦଲିଲର ପ୍ରୁଷ୍ଠା"
+
+#: ../shell/main.c:80
+msgid "PAGE"
+msgstr "ପ୍ରୁଷ୍ଠା"
+
+#: ../shell/main.c:81
+#, fuzzy
+#| msgid "The page of the document to display."
+msgid "The page number of the document to display."
+msgstr "ପ୍ରଦର୍ଶନ କରିବା ପାଇଁ ଦଲିଲର ପ୍ରୁଷ୍ଠା"
+
+#: ../shell/main.c:81
+msgid "NUMBER"
+msgstr "ସଂଖ୍ଯା"
+
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr "evince କୁ ସମ୍ପୂର୍ଣ୍ଣ ଧାରାରେ ଚଳାନ୍ତୁ"
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr "evince ଉପସ୍ଥାପନ ଧାରାରେ ଚଳାନ୍ତୁ"
+
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr "evince କୁ ପ୍ରାକଦର୍ଶକ ଭାବରେ ଚଲାନ୍ତୁ"
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr "ଦଲିଲରେ ଖୋଜିବା ପାଇଁ ଗୋଟିଏ ଶବ୍ଦ କିମ୍ବା ବାକ୍ଯାଂଶ"
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:89
+#, fuzzy
+#| msgid "[FILE...]"
+msgid "[FILE…]"
+msgstr "[ଫାଇଲ ...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+#, fuzzy
+#| msgid ""
+#| "Boolean options available, true enables thumbnailing and false disables "
+#| "the creation of new thumbnails"
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr "ବୁଲିଆନ ବିକଳ୍ପ ଉପଲବ୍ଧ, ସତ କ୍ଷୁଦ୍ରଚିତ୍ରକୁ ସକ୍ରିୟ କରିଥାଏ ଏବଂ ମିଛ ନୂତନ କ୍ଷୁଦ୍ରଚିତ୍ର ନିର୍ମାଣକୁ ନିଷ୍କ୍ରିୟ କରିଥାଏ"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF ଦଲିଲର କ୍ଷୁଦ୍ର ଚିତ୍ରଣ ପ୍ରକ୍ରିୟାକୁ ସକ୍ରିୟ କରନ୍ତୁ"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF ଦଲିଲ ପାଇଁ କ୍ଷୁଦ୍ର ଚିତ୍ର ନିର୍ଦ୍ଦେଶ"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+#, fuzzy
+#| msgid ""
+#| "Valid command plus arguments for the PDF Document thumbnailer. See "
+#| "caja thumbnailer documentation for more information."
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF ଦଲିଲ କ୍ଷୁଦ୍ରଚିତ୍ରଣ ପାଇଁ ବୈଧ ନିର୍ଦ୍ଦେଶ ସହିତ ସ୍ୱତନ୍ତ୍ରଚର. ନଟିଲସ କ୍ଷୁଦ୍ରଚିତ୍ରଣ ଦଲିଲିକରଣ ପାଇଁ ଅଧିକ "
+"ସୂଚନା."
+
diff --git a/po/pa.po b/po/pa.po
new file mode 100644
index 00000000..bf3b31c0
--- /dev/null
+++ b/po/pa.po
@@ -0,0 +1,1950 @@
+# translation of evince.HEAD.po to Punjabi
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Amanpreet Singh Alam <[email protected]>, 2005,2006,2007,2008, 2009.
+# A S Alam <[email protected]>, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.HEAD\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-08-14 09:01+0000\n"
+"PO-Revision-Date: 2010-08-17 07:27+0530\n"
+"Last-Translator: A S Alam <[email protected]>\n"
+"Language-Team: Punjabi/Panjabi <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Lokalize 1.0\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "ਕਾਮਿਕ ਕਿਤਾਬ ਡੀਕੰਪਰੈੱਸ ਕਰਨ ਵਾਸਤੇ ਕਮਾਂਡ “%s” ਚਲਾਉਣ ਦੌਰਾਨ ਗਲਤੀ: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "ਕਾਮਿਕ ਕਿਤਾਬ ਡੀਕੰਪਰੈੱਸ ਕਰਨ ਲਈ ਕਮਾਂਡ “%s” ਫੇਲ੍ਹ ਹੋਈ।"
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "ਕਮਾਂਡ “%s” ਅਸਧਾਰਨ ਢੰਗ ਨਾਲ ਬੰਦ ਹੋ ਗਈ।"
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "ਇੱਕ ਕਾਮਿਕ ਬੁੱਕ MIME ਕਿਸਮ ਨਹੀਂ: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "ਇਸ ਕਿਸਮ ਦੀ ਕਾਮਿਕ ਕਿਤਾਬ ਨੂੰ ਡੀਕੰਪਰੈੱਸ ਕਰਨ ਵਾਸਤੇ ਢੁੱਕਵੀ ਕਮਾਂਡ ਨਹੀਂ ਲੱਭੀ"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "ਅਣਜਾਣ MIME ਟਾਈਪ"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "ਫਾਇਲ ਨਿਕਾਰਾ ਹੈ"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "ਅਕਾਇਵ ਵਿੱਚ ਫਾਇਲ ਨਹੀਂ ਹੈ"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "ਅਕਾਇਵ %s ਵਿੱਚ ਕੋਈ ਚਿੱਤਰ ਨਹੀਂ ਮਿਲਿਆ"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "“%s” ਹਟਾਉਣ ਦੌਰਾਨ ਗਲਤੀ ਹੈ।"
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "ਗਲਤੀ %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "ਹਾਸਰਸ ਕਿਤਾਬਾਂ"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu ਡੌਕੂਮੈਂਟ 'ਚ ਗਲਤ ਫਾਰਮੈਟ ਹੈ"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr "ਡੌਕੂਮੈਂਟ ਕਈ ਫਾਇਲਾਂ ਨਾਲ ਬਣਾਇਆ ਗਿਆ ਹੈ। ਇੰਨ੍ਹਾਂ ਵਿੱਚੋਂ ਇੱਕ ਜਾਂ ਵੱਧ ਫਾਇਲਾਂ ਨੂੰ ਵਰਤਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ ਹੈ।"
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu ਡੌਕੂਮੈਂਟ"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI ਡੌਕੂਮੈਂਟ 'ਚ ਗਲਤ ਫਾਰਮੈਟ ਹੈ"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI ਡੌਕੂਮੈਂਟ"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "ਇਹ ਕੰਮ ਪਬਲਿਕ ਡੋਮੇਨ ਵਿੱਚ ਹੈ"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "ਹਾਂ"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "ਨਹੀਂ"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type ੧"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type ੩"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "ਅਣਜਾਣ ਫੋਂਟ ਟਾਈਪ"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "ਕੋਈ ਨਾਂ ਨਹੀਂ"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "ਇੰਬੈੱਡ ਸਬ-ਸੈੱਟ"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "ਇੰਬੈੱਡ"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "ਇੰਬੈੱਡ ਨਹੀਂ"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF ਡੌਕੂਮੈਂਟ"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "ਗਲਤ ਡੌਕੂਮੈਂਟ"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "ਐਮਪਰੈੱਸ ਸਲਾਇਡਾਂ"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "ਕੋਈ ਗਲਤੀ ਨਹੀਂ"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "ਲੋੜੀਦੀ ਮੈਮੋਰੀ ਨਹੀਂ ਹੈ"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "ਜ਼ਿਪ ਦਸਤਖਤ ਨਹੀਂ ਲੱਭੇ ਜਾ ਸਕਦੇ"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "ਗਲਤ ਜ਼ਿਪ ਫਾਇਲ"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "ਮਲਟੀ-ਫਾਇਲ ਜ਼ਿਪ ਸਹਾਇਕ ਨਹੀਂ ਹੈ"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "ਫਾਇਲ ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕਦੀ ਹੈ"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "ਫਾਇਲ ਤੋਂ ਡਾਟਾ ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "ਜ਼ਿਪ ਆਕਾਇਵ 'ਚ ਫਾਇਲ ਨਹੀਂ ਲੱਭੀ ਜਾ ਸਕਦੀ"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "ਅਣਜਾਣ ਗਲਤੀ"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "ਡੌਕੂਮੈਂਟ “%s” ਨੂੰ ਲੋਡ ਕਰਨ ਲਈ ਫੇਲ੍ਹ"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "ਡੌਕੂਮੈਂਟ “%s” ਸੰਭਾਲਣ ਲਈ ਫੇਲ੍ਹ"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "ਪੋਸਟ-ਸਕਰਿਪਟ ਡੌਕੂਮੈਂਟ"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "ਨੱਥੀ “%s” ਸੰਭਾਲਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "ਨੱਥੀ “%s” ਨੂੰ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "ਨੱਥੀ “%s” ਨੂੰ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "ਫਾਇਲ ਟਾਈਪ %s (%s) ਸਹਿਯੋਗੀ ਹੈ"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "ਸਭ ਡੌਕੂਮੈਂਟ"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "ਸਭ ਫਾਇਲਾਂ"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "ਆਰਜ਼ੀ ਫਾਇਲ ਬਣਾਉਣ ਲਈ ਫੇਲ੍ਹ: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "ਆਰਜ਼ੀ ਡਾਇਰੈਕਟਰੀ ਬਣਾਉਣ ਲਈ ਫੇਲ੍ਹ: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "ਫਾਇਲ ਠੀਕ .desktop ਫਾਇਲ ਨਹੀਂ"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "ਬੇਪਛਾਣ ਡੈਸਕਟਾਪ ਫਾਇਲ ਵਰਜਨ '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s ਸ਼ੁਰੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "ਐਪਲੀਕੇਸ਼ਨ ਕਮਾਂਡ ਲਾਈਨ ਤੋਂ ਡੌਕੂਮੈਂਟ ਮਨਜ਼ੂਰ ਨਹੀਂ ਕਰਦੀ"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "ਬੇਪਛਾਣ ਲਾਂਚ ਚੋਣ: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "ਡੌਕੂਮੈਂਟ URIs 'Type=Link' ਡੈਸਕਟਾਪ ਐਂਟਰੀ ਨੂੰ ਦਿੱਤਾ ਨਹੀਂ ਜਾ ਸਕਦਾ"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "ਚਲਾਉਣਯੋਗ ਆਈਟਮ ਨਹੀਂ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "ਸ਼ੈਸ਼ਨ ਮੈਨੇਜਰ ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਆਯੋਗ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "ਸੰਰਚਨਾ ਸੰਭਾਲਣ ਵਾਲੀ ਫਾਇਲ ਦਿਓ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "ਫਾਇਲ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "ਸ਼ੈਸ਼ਨ ਪਰਬੰਧ ID ਦਿਓ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "ਸ਼ੈਸ਼ਨ ਪਰਬੰਧ ਚੋਣਾਂ:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "ਸ਼ੈਸ਼ਨ ਪਰਬੰਧ ਚੋਣਾਂ ਵੇਖੋ"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s” ਵੇਖੋ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "ਟੂਲਬਾਰ ਉੱਤੇ ਹਿਲਾਓ(_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "ਟੂਲਾਰ ਉੱਤੇ ਚੁਣੀ ਆਈਟਮ ਏਧਰ-ਓਧਰ ਕਰੋ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "ਟੂਲਬਾਰ ਤੋਂ ਹਟਾਓ(_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "ਟੂਲਬਾਰ ਤੋਂ ਚੁਣੀ ਆਈਟਮ ਹਟਾਓ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "ਟੂਲਬਾਰ ਹਟਾਓ(_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "ਚੁਣੀ ਟੂਲਬਾਰ ਹਟਾਓ"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "ਵੱਖਰੇਵਾਂ"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "ਵਧੀਆ ਫਿੱਟ"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "ਪੇਜ਼ ਚੌੜਾਈ ਫਿੱਟ"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "੫੦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "੭੦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "੮੫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "੧੦੦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "੧੨੫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "੧੫੦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "੧੭੫%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "੨੦੦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "੩੦੦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "੪੦੦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+#| msgid "100%"
+msgid "800%"
+msgstr "੮੦੦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+#| msgid "100%"
+msgid "1600%"
+msgstr "੧੬੦੦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+#| msgid "200%"
+msgid "3200%"
+msgstr "੩੨੦੦%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+#| msgid "400%"
+msgid "6400%"
+msgstr "੬੪੦੦%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "ਡੌਕੂਮੈਂਟ ਦਰਸ਼ਕ"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "ਮਲਟੀ-ਪੇਜ਼ ਡੌਕੂਮੈਂਟ ਵੇਖੋ"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "ਡੌਕੂਮੈਂਟ ਪਾਬੰਦੀਆਂ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰੋ"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "ਡੌਕੂਮੈਂਟ ਪਾਬੰਦੀਆਂ, ਜਿਵੇਂ ਕਿ ਕਾਪੀ ਜਾਂ ਪਰਿੰਟ ਆਦਿ ਲਈ ਪਾਬੰਦੀ, ਨੂੰ ਅਣਡਿੱਠਾ ਕਰੋ।"
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "ਆਰਜ਼ੀ ਫਾਇਲਾਂ ਹਟਾਓ"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "ਸੈਟਿੰਗ ਫਾਇਲ ਪਰਿੰਟ ਕਰੋ"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "ਗਨੋਮ ਡੌਕੂਮੈਂਟ ਦਰਸ਼ਕ"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "ਡੌਕੂਮੈਂਟ ਪਰਿੰਟ ਕਰਨ ਲਈ ਫੇਲ੍ਹ"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "ਚੁਣਿਆ ਪਰਿੰਟ '%s' ਲੱਭਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "ਪੇਜ਼ ਪਿੱਛੇ(_P)"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "ਪਿਛਲੇ ਪੇਜ਼ ਉੱਤੇ ਜਾਓ"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "ਪੇਜ਼ ਅੱਗੇ(_N)"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "ਅਗਲੇ ਪੇਜ਼ ਉੱਤੇ ਜਾਓ"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "ਡੌਕੂਮੈਂਟ ਵੱਡਾ ਕਰੋ"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "ਡੌਕੂਮੈਂਟ ਸੁੰਘੜੋ"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "ਪਰਿੰਟ ਕਰੋ"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "ਇਹ ਡੌਕੂਮੈਂਟ ਪਰਿੰਟ ਕਰੋ"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "ਵਧੀਆ ਫਿੱਟ(_B)"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "ਮੌਜੂਦਾ ਡੌਕੂਮੈਂਟ ਨੂੰ ਪੂਰੀ ਸਕਰੀਨ ਉੱਤੇ ਫਿੱਟ ਕਰੋ"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "ਪੇਜ਼ ਚੌੜਾਈ ਫਿੱਟ(_W)"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "ਮੌਜੂਦਾ ਡੌਕੂਮੈਂਟ ਨੂੰ ਵਿੰਡੋ ਚੌੜਾਈ 'ਚ ਫਿੱਟ ਕਰੋ"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "ਪੇਜ਼"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "ਪੇਜ਼ ਚੁਣੋ"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "ਡੌਕੂਮੈਂਟ"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "ਟਾਈਟਲ:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "ਟਿਕਾਣਾ:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "ਵਿਸ਼ਾ:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "ਲੇਖਕ:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "ਸ਼ਬਦ:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "ਪਰੋਡਿਊਸਰ:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "ਕਰੀਏਟਰ:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "ਬਣਾਇਆ:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "ਸੋਧ ਕੀਤੀ:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "ਪੇਜ਼ਾਂ ਦੀ ਗਿਣਤੀ:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "ਅਨੁਕੂਲ:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "ਫਾਰਮੈਟ:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "ਸੁਰੱਖਿਆ:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "ਪੇਪਰ ਸਾਈਜ਼:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "ਕੋਈ ਨਹੀਂ"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f ਇੰਚ"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, ਪੋਰਟਰੇਟ (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, ਲੈਡਸਕੇਪ (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%2$d ਵਿੱਚੋਂ %1$d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr ", %d ਵਿੱਚੋਂ"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "ਪਰਿੰਟ ਲਈ ਤਿਆਰ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "ਮੁਕੰਮਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "%2$d ਵਿਚੋਂ %1$d ਪੇਜ਼ ਪਰਿੰਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "ਇਸ ਪਰਿੰਟਰ ਉੱਤੇ ਪਰਿੰਟਿੰਗ ਸਹਾਇਕ ਨਹੀਂ ਹੈ।"
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "ਗਲਤ ਪੇਜ਼ ਚੋਣ"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "ਚੇਤਾਵਨੀ"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "ਤੁਹਾਡੀ ਪਰਿੰਟ ਰੇਜ਼ ਵਿੱਚ ਕੋਈ ਵੀ ਪੇਜ਼ ਸ਼ਾਮਲ ਨਹੀਂ ਹੈ"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "ਪੇਜ਼ ਸਕੇਲਿੰਗ:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "ਪਰਿੰਟ ਹੋਣ ਯੋਗ ਖੇਤਰ ਲਈ ਸੁੰਘੜੋ"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "ਪਰਿੰਟ ਹੋਣਯੋਗ ਖੇਤਰ ਲਈ ਫਿੱਟ"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"ਡੌਕੂਮੈਂਟ ਪੇਜ਼ ਨੂੰ ਚੁਣੇ ਪਰਿੰਟਰ ਪੇਜ਼ ਮੁਤਾਬਕ ਸਕੇਲ ਕਰੋ। ਹੇਠ ਦਿੱਤਿਆਂ ਵਿੱਚੋਂ ਕਿਸੇ ਨੂੰ ਚੁਣੋ:\n"
+"\n"
+"• \"None (ਕੋਈ ਨਹੀਂ)\": ਕੋਈ ਪੇਜ਼ ਸਕੇਲਿੰਗ ਨਹੀਂ ਕੀਤੀ ਜਾਵੇਗੀ।\n"
+"\n"
+"• \"Shrink to Printable Area (ਪਰਿੰਟ ਹੋਣ ਯੋਗ ਖੇਤਰ ਲਈ ਸੁੰਘੜੋ)\": ਡੌਕੂਮੈਂਟ ਪੇਜ਼, ਜੋ ਕਿ ਪਰਿੰਟ "
+"ਹੋਣ ਖੇਤਰ ਤੋਂ ਵੱਧ ਹੋਵੇਗਾ, ਨੂੰ ਪਰਿੰਟਰ ਪੇਜ਼ ਦੇ ਪਰਿੰਟ ਹੋਣ ਯੋਗ ਖੇਤਰ ਮੁਤਾਬਕ ਘਟਾਇਆ ਜਾਵੇਗਾ।\n"
+"\n"
+"• \"Fit to Printable Area (ਪਰਿੰਟ ਯੋਗ ਖੇਤਰ ਵਿੱਚ ਫਿੱਟ)\": ਡੌਕੂਮੈਂਟ ਪੇਜ਼ਾਂ ਨੂੰ ਪਰਿੰਟਰ ਪੇਜ਼ ਦੇ "
+"ਪਰਿੰਟ ਹੋਣ ਯੋਗ ਖੇਤਰ ਵਿੱਚ ਫਿੱਟ ਕਰਨ ਲਈ ਵੱਡਾ ਜਾਂ ਛੋਟਾ ਕੀਤਾ ਜਾਵੇਗਾ।\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "ਆਟੋ ਘੁੰਮਾਓ ਅਤੇ ਸੈਂਟਰ"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"ਹਰੇਕ ਪੇਜ਼ ਲਈ ਪਰਿੰਟਰ ਪੇਜ਼ ਸਥਿਤੀ ਨੂੰ ਡੌਕੂਮੈਂਟ ਪੇਜ਼ ਦੀ ਸਥਿਤੀ ਮੁਤਾਬਕ ਘੁੰਮਾਉ। ਡੌਕੂਮੈਂਟ ਪੇਜ਼ ਨੂੰ ਪਰਿੰਟਰ ਪੇਜ਼ ਦੇ "
+"ਸੈਂਟਰ ਵਿੱਚ ਰੱਖਿਆ ਜਾਵੇਗਾ।"
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "ਡੌਕੂਮੈਂਟ ਪੇਜ਼ ਸਾਈਜ਼ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਪੇਜ਼ ਸਾਈਜ਼ ਚੁਣੋ"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"ਜਦੋਂ ਚਾਲੂ ਕੀਤਾ ਤਾਂ ਹਰੇਕ ਪੇਜ਼ ਨੂੰ ਉਸੇ ਪੇਪਰ ਸਾਈਜ਼ ਮੁਤਾਬਕ ਪਰਿੰਟ ਕੀਤਾ ਜਾਵੇਗਾ, ਜਿਵੇਂ ਕਿ ਡੌਕੂਮੈਂਟ ਪੇਜ਼ ਦਾ "
+"ਹੈ।"
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "ਪੇਜ਼ ਹੈਡਲਿੰਗ"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "ਪੇਜ਼ %d ਪਰਿੰਟ ਕਰਨ ਲਈ ਫੇਲ੍ਹ: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "ਉੱਤੇ ਜਾਓ"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "ਹੇਠਾਂ ਜਾਓ"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "ਝਲਕ ਉੱਤੇ ਲੈ ਜਾਓ"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "ਝਲਕ ਹੇਠਾਂ ਲੈ ਜਾਓ"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "ਡੌਕੂਮੈਂਟ ਝਲਕ"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "ਪੇਜ਼ ਉੱਤੇ ਜਾਓ:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "ਪਰਿਜ਼ੈੱਨਟੇਸ਼ਨ ਪੂਰੀ ਹੋਈ। ਬੰਦ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ।"
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "ਪਹਿਲੇ ਪੇਜ਼ 'ਤੇ ਜਾਓ"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "ਪਿਛਲੇ ਪੇਜ਼ 'ਤੇ ਜਾਓ"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "ਅਗਲੇ ਪੇਜ਼ 'ਤੇ ਜਾਓ"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "ਆਖਰੀ ਪੇਜ਼ 'ਤੇ ਜਾਓ"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "ਪੇਜ਼ ਉੱਤੇ ਜਾਓ"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "ਖੋਜ"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "ਪੇਜ਼ %s ਉੱਤੇ ਜਾਓ"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "ਫਾਇਲ “%2$s” ਵਿੱਚ %1$s ਉੱਤੇ ਜਾਓ"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "ਫਾਇਲ “%s” ਉੱਤੇ ਜਾਓ"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "%s ਚਲਾਓ"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "ਖੋਜ:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "ਪਿੱਛੇ ਖੋਜ(_v)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "ਖੋਜ ਦੀ ਸਤਰ ਦੀ ਪਿਛਲੀ ਮੌਜੂਦਗੀ ਖੋਜੋ"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "ਅੱਗੇ ਖੋਜ(_x)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "ਖੋਜ ਸਤਰ ਦੀ ਅਗਲੀ ਮੌਜੂਦਗੀ ਦੀ ਖੋਜ ਕਰੋ"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "ਅੱਖਰ ਅਕਾਰ 'ਤੇ ਨਿਰਭਰ(_a)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "ਅੱਖਰ ਆਕਾਰ ਨਿਰਭਰ ਖੋਜ ਬਦਲੋ"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "ਆਈਕਾਨ:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+#| msgid "None"
+msgid "Note"
+msgstr "ਨੋਟ"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+#| msgid "Document"
+msgid "Comment"
+msgstr "ਟਿੱਪਣੀ"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "ਸਵਿੱਚ"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+#| msgid "_Help"
+msgid "Help"
+msgstr "ਮੱਦਦ"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "ਨਵਾਂ ਪ੍ਹੈਰਾ"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "ਪ੍ਹੈਰਾ"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "ਸ਼ਾਮਲ"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "ਕਾਂਟਾ"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "ਚੱਕਰ"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+#| msgid "Unknown error"
+msgid "Unknown"
+msgstr "ਅਣਜਾਣ"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+#| msgid "Properties"
+msgid "Annotation Properties"
+msgstr "ਵਿਆਖਿਆ ਵਿਸ਼ੇਸ਼ਤਾ"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "ਰੰਗ:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+#| msgid "Title:"
+msgid "Style:"
+msgstr "ਸਟਾਈਲ:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "ਪਾਰਦਰਸ਼ੀ"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "ਬਲੌਰੀਪਨ"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "ਸ਼ੁਰੂਆਤੀ ਵਿੰਡੋ ਹਾਲਤ:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+#| msgid "_Open…"
+msgid "Open"
+msgstr "ਖੋਲ੍ਹੋ"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "ਬੰਦ ਕਰੋ"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "ਪਰਿਜ਼ੈੱਨਟੇਸ਼ਨ ਮੋਡ ਵਿੱਚ ਚੱਲ ਰਿਹਾ ਹੈ"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "ਡੌਕੂਮੈਂਟ %s ਲਈ ਪਾਸਵਰਡ"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "%s ਬਦਲਿਆ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%2$d ਵਿੱਚੋਂ %1$d ਡੌਕੂਮੈਂਟ ਬਦਲੇ"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "ਮੇਟਾਡਾਟਾ ਬਦਲਿਆ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"ਈਵੈਨਸ ਵਲੋਂ ਵਰਤਿਆ ਮੇਟਾਡਾਟਾ ਫਾਰਮੈਟ ਬਦਲਿਆ ਗਿਆ ਹੈ ਅਤੇ ਇਸਕਰਕੇ ਇਸ ਨੂੰ ਮਾਈਗਰੇਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ। ਜੇ "
+"ਮਾਈਗਰੇਸ਼ਨ ਨੂੰ ਰੱਦ ਕੀਤਾ ਤਾਂ ਮੇਟਾਡਾਟਾ ਸਟੋਰੇਜ਼ ਸਟੋਰੇਜ਼ ਕੰਮ ਨਹੀਂ ਕਰੇਗਾ।"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "ਇੱਕ ਤਾਜ਼ਾ ਵਰਤੇ ਡੌਕੂਮੈਂਟ ਨੂੰ ਖੋਲ੍ਹੋ"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "ਇਹ ਡੌਕੂਮੈਂਟ ਲਾਕ ਹੈ ਅਤੇ ਠੀਕ ਪਾਸਵਰਡ ਦੇਣ ਉਪਰੰਤ ਹੀ ਪੜ੍ਹਿਆ ਜਾ ਸਕਦਾ ਹੈ।"
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "ਡੌਕੂਮੈਂਟ ਤਾਲਾ ਖੋਲ੍ਹੋ(_U)"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "ਪਾਸਵਰਡ ਦਿਓ"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਹੈ"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "ਡੌਕੂਮੈਂਟ “%s” ਲਾਕ ਹੈ ਅਤੇ ਇਸ ਨੂੰ ਖੋਲ੍ਹਣ ਤੋਂ ਪਹਿਲਾਂ ਪਾਸਵਰਡ ਦੀ ਲੋੜ ਹੈ।"
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "ਪਾਸਵਰਡ(_P):"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "ਪਾਸਵਰਡ ਤੁਰੰਤ ਭੁੱਲ ਜਾਓ(_i)"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "ਤੁਹਾਡੇ ਲਾਗ ਆਉਟ ਹੋਣ ਤੱਕ ਪਾਸਵਰਡ ਯਾਦ ਰੱਖੋ(_l)"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "ਹਮੇਸ਼ਾ ਯਾਦ ਰੱਖੋ(_f)"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "ਵਿਸ਼ੇਸ਼ਤਾ"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "ਸਧਾਰਨ"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "ਫੋਂਟ"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "ਡੌਕੂਮੈਂਟ ਲਾਈਸੈਂਸ"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "ਫੋਂਟ"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "ਫੋਂਟ ਜਾਣਕਾਰੀ ਲਈ ਜਾ ਰਹੀ ਹੈ… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "ਵਰਤੋਂ ਸ਼ਰਤਾਂ"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "ਟੈਕਸਟ ਲਾਈਸੈਂਸ"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "ਹੋਰ ਜਾਣਕਾਰੀ"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "ਲਿਸਟ"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+#| msgid "Location:"
+msgid "Annotations"
+msgstr "ਵਿਆਖਿਆ"
+
+#: ../shell/ev-sidebar-annotations.c:209
+#| msgid "Next"
+msgid "Text"
+msgstr "ਟੈਕਸਟ"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "ਟੈਕਸਟ ਵਿਆਖਿਆ ਸ਼ਾਮਲ"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "ਸ਼ਾਮਲ"
+
+#: ../shell/ev-sidebar-annotations.c:364
+#| msgid "The document contains no pages"
+msgid "Document contains no annotations"
+msgstr "ਡੌਕੂਮੈਂਟ ਵਿੱਚ ਕੋਈ ਵਿਆਖਿਆ ਨਹੀਂ ਹੈ"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+#| msgid "Page %s"
+msgid "Page %d"
+msgstr "%d ਪੇਜ਼"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "ਅਟੈਂਚਮੈਂਟ"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "ਪਰਤਾਂ"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "ਪਰਿੰਟ…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "ਇੰਡੈਕਸ"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "ਥੰਮਨੇਲ"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "ਪੇਜ਼ %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "%s ਪੇਜ਼"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "ਡੌਕੂਮੈਂਟ ਵਿੱਚ ਕੋਈ ਪੇਜ਼ ਨਹੀਂ ਹੈ"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "ਡੌਕੂਮੈਂਟ ਵਿੱਚ ਕੇਵਲ ਖਾਲੀ ਪੇਜ਼ ਹਨ"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "ਡੌਕੂਮੈਂਟ ਖੋਲ੍ਹਣ ਲਈ ਅਸਮਰੱਥ"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "“%s”\" ਤੋਂ ਡੌਕੂਮੈਂਟ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "ਡੌਕੂਮੈਂਟ (%d%%) ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "ਰਿਮੋਟ ਫਾਇਲ ਲੋਡ ਕਰਨ ਲਈ ਫੇਲ੍ਹ।"
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "%s ਤੋਂ ਡੌਕੂਮੈਂਟ ਮੁੜ-ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "ਡੌਕੂਮੈਂਟ ਮੁੜ-ਲੋਡ ਕਰਨ ਲਈ ਫੇਲ੍ਹ।"
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "ਡੌਕੂਮੈਂਟ ਖੋਲ੍ਹੋ"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "ਡੌਕੂਮੈਂਟ %s ਵਜੋਂ ਸੰਭਾਲਿਆ ਜਾਂਦਾ ਹੈ"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "ਅਟੈਚਮੈਂਟ %s ਉੱਤੇ ਸੰਭਾਲੀ ਜਾ ਰਹੀ ਹੈ"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "%s ਲਈ ਚਿੱਤਰ ਸੰਭਾਲਿਆ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "ਫਾਇਲ “%s” ਵਜੋਂ ਸੰਭਾਲੀ ਨਹੀਂ ਜਾ ਸਕੀ।"
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "ਡੌਕੂਮੈਂਟ (%d%%) ਅੱਪਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "ਅਟੈਚਮੈਂਟ (%d%%) ਅੱਪਲੋਡ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "ਚਿੱਤਰ (%d%%) ਅੱਪਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "ਕਾਪੀ ਸੰਭਾਲੋ"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "ਕਤਾਰ ਵਿੱਚ %d ਬਾਕੀ ਕੰਮ"
+msgstr[1] "ਕਤਾਰ ਵਿੱਚ ਬਾਕੀ %d ਕੰਮ"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "ਪਰਿੰਟਿੰਗ ਕੰਮ “%s”"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"ਡੌਕੂਮੈਂਟ ਵਿੱਚ ਫਾਰਮ ਖੇਤਰ ਹਨ, ਜਿੰਨ੍ਹਾਂ ਨੂੰ ਭਰਿਆ ਗਿਆ ਹੈ। ਜੇ ਤੁਸੀਂ ਕਾਪੀ ਨਾ ਸੰਭਾਲੀ ਤਾਂ ਬਦਲਾਅ ਪੱਕੇ ਤੌਰ ਉੱਤੇ "
+"ਹੀ ਖਤਮ ਹੋ ਜਾਣਗੇ।"
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"ਡੌਕੂਮੈਂਟ 'ਚ ਨਵੀਆਂ ਜਾਂ ਸੋਧੀਆਂ ਗਈਆਂ ਵਿਆਖਿਆ ਹੈ। ਜੇ ਤੁਸੀਂ ਕਾਪੀ ਨਾ ਸੰਭਾਲੀ ਤਾਂ ਬਦਲਾਅ ਪੱਕੇ ਤੌਰ ਉੱਤੇ "
+"ਹੀ ਖਤਮ ਹੋ ਜਾਣਗੇ।"
+
+#: ../shell/ev-window.c:3413
+#, c-format
+#| msgid "Wait until print job “%s” finishes before closing?"
+msgid "Save a copy of document “%s” before closing?"
+msgstr "ਕੀ ਬੰਦ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਡੌਕੂਮੈਂਟ “%s” ਦੀ ਕਾਪੀ ਸੰਭਾਲਣੀ ਹੈ?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "ਬਿਨਾਂ ਸੰਭਾਲੇ ਬੰਦ ਕਰੋ(_w)"
+
+#: ../shell/ev-window.c:3436
+#| msgid "Save a Copy"
+msgid "Save a _Copy"
+msgstr "ਕਾਪੀ ਸੰਭਾਲੋ(_C)"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "ਕੀ ਬੰਦ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਪਰਿੰਟਿੰਗ ਕੰਮ “%s” ਪੂਰਾ ਹੋਣ ਦੀ ਉਡੀਕ ਕਰਨੀ ਹੈ?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "%d ਪਰਿੰਟਿੰਗ ਕੰਮ ਚਾਲੂ ਹਨ। ਕੀ ਤੁਸੀਂ ਬੰਦ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਛਪਾਈ ਪੂਰੀ ਕਰਨੀ ਚਾਹੁੰਦੇ ਹੋ?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "ਜੇ ਤੁਸੀਂ ਵਿੰਡੋ ਬੰਦ ਕਰ ਦਿੱਤੀ ਤਾਂ ਬਾਕੀ ਛਪਾਈ ਕੰਮ ਛਾਪਿਆ ਨਹੀਂ ਜਾਵੇਗਾ।"
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "ਪਰਿੰਟਿੰਗ ਰੱਦ ਕਰਕੇ ਬੰਦ ਕਰੋ(_p)"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "ਪਰਿੰਟ ਕਰਨ ਦੇ ਬਾਅਦ ਬੰਦ ਕਰੋ(_a)"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "ਟੂਲਬਾਰ ਐਡੀਟਰ"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "ਮੱਦਦ ਵੇਖਾਉਣ ਦੇ ਦੌਰਾਨ ਗਲਤੀ"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"ਡੌਕੂਮੈਂਟ ਦਰਸ਼ਕ ਹੈ।\n"
+"%s (%s) ਦੀ ਵਰਤੋਂ ਕਰਕੇ"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"ਈਵੇਨਸ ਇੱਕ ਮੁਕਤ ਸਾਫਟਵੇਅਰ ਹੈ, ਜਿਸ ਨੂੰ ਫਰੀ ਸਾਫਟਵੇਅਰ ਫਾਊਂਨਡੇਸ਼ਨ ਵਲੋਂ ਜਾਰੀ ਗਨੂ ਜਰਨਲ ਪਬਲਿਕ ਲਾਇਸੈਂਸ "
+"ਦੇ ਵਰਜਨ ੨ ਜਾਂ (ਤੁਹਾਡੀ ਚੋਣ ਮੁਤਾਬਕ) ਨਵੇਂ ਵਰਜਨ ਅਧੀਨ ਵੰਡਿਆ ਅਤੇ/ਜਾਂ ਸੋਧਿਆ ਜਾ ਸਕਦਾ ਹੈ।\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"ਈਵੇਨਸ ਨੂੰ ਇਸ ਭਰੋਸੇ ਨਾਲ ਵੰਡਿਆ ਜਾ ਰਿਹਾ ਹੈ ਕਿ ਉਹ ਲਾਭਦਾਇਕ ਹੋਵੇਗਾ, ਪਰ ਬਿਨਾਂ ਕਿਸੇ ਵਾਰੰਟੀ ਦੇ, "
+"ਬਿਨਾਂ ਕਿਸੇ ਖਾਸ ਮਕਸਦ ਲਈ ਠੀਕ ਜਾਂ ਲਾਭਦਾਇਕ ਰਹਿਣ ਦੇ। ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ ਗਨੂ ਜਰਨਲ ਪਬਲਿਕ "
+"ਲਾਇਸੈਂਸ ਨੂੰ ਵੇਖੋ।\n"
+
+#: ../shell/ev-window.c:4571
+#| msgid ""
+#| "You should have received a copy of the GNU General Public License along "
+#| "with Evince; if not, write to the Free Software Foundation, Inc., 59 "
+#| "Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"ਤੁਸੀਂ ਗਨੂ ਜਰਨਲ ਪਬਲਿਕ ਲਾਇਸੈਂਸ ਦੀ ਨਕਲ ਈਵੇਨਸ ਨਾਲ ਪਰਾਪਤ ਕੀਤੀ ਹੋਵੇਗੀ, ਜੇਕਰ ਨਹੀਂ ਤਾਂ ਫਰੀ "
+"ਸਾਫਟਵੇਅਰ ਫਾਊਂਨਡੇਸ਼ਨ ੫੧ ਫਰੈਕਲਿਨ ਸਟਰੀਟ, ਪੰਜਵੀਂ ਮੰਜ਼ਲ, ਬੋਸਟਨ, ਐਮ ਏ ੦੨੧੧੦-੧੩੦੧ ਅਮਰੀਕਾ ਤੋਂ ਪਰਾਪਤ ਕਰਨ ਲਈ "
+"ਲਿਖੋ।\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "ਈਵਨੇਸ"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© ੧੯੯੬-੨੦੦੯ Evince ਲੇਖਕ"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"ਅਮਨਪਰੀਤ ਸਿੰਘ ਆਲਮ\n"
+"Punjabi Open Source Team\n"
+"http://www.satluj.com"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "ਇਸ ਪੇਜ਼ ਉੱਤੇ %d ਮਿਲਿਆ"
+msgstr[1] "ਇਸ ਪੇਜ਼ ਉੱਤੇ %d ਮਿਲੇ"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "ਨਹੀਂ ਲੱਭਿਆ"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% ਖੋਜਣ ਲਈ ਬਾਕੀ"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "ਫਾਇਲ(_F)"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "ਸੋਧ(_E)"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "ਵੇਖੋ(_V)"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "ਜਾਓ(_G)"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "ਮੱਦਦ(_H)"
+
+#. File menu
+#: ../shell/ev-window.c:5402 ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "ਖੋਲ੍ਹੋ(_O)…"
+
+#: ../shell/ev-window.c:5403 ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "ਮੌਜੂਦਾ ਡੌਕੂਮੈਂਟ ਖੋਲ੍ਹੋ"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "ਇੱਕ ਕਾਪੀ ਖੋਲ੍ਹੋ(_e)"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "ਮੌਜੂਦਾ ਡੌਕੂਮੈਂਟ ਦੀ ਕਾਪੀ ਨਵੀਂ ਵਿੰਡੋ 'ਚ ਖੋਲ੍ਹੋ"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "ਕਾਪੀ ਸੰਭਾਲੋ(_S)…"
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "ਮੌਜੂਦਾ ਡੌਕੂਮੈਂਟ ਦੀ ਇੱਕ ਕਾਪੀ ਸੰਭਾਲੋ"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "ਪਰਿੰਟ ਕਰੋ(_P)…"
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "ਵਿਸ਼ੇਸ਼ਤਾ(_r)"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "ਸਭ ਚੁਣੋ(_A)"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "ਖੋਜੋ(_F)…"
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "ਡੌਕੂਮੈਂਟ 'ਚ ਸ਼ਬਦ ਜਾਂ ਪ੍ਹੈਰਾ ਖੋਜੋ"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "ਟੂਲਬਾਰ(_o)"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "ਖੱਬੇ ਘੁੰਮਾਓ(_L)"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "ਸੱਜੇ ਘੁੰਮਾਓ(_R)"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "ਮੌਜੂਦਾ ਸੈਟਿੰਗ ਨੂੰ ਡਿਫਾਲਟ ਵਜੋਂ ਸੰਭਾਲੋ(_D)"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "ਮੁੜ-ਲੋਡ(_R)"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "ਡੌਕੂਮੈਂਟ ਮੁੜ ਲੋਡ ਕਰੋ"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "ਆਟੋ ਸਕਰੋਲ(_s)"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "ਪਹਿਲਾਂ ਪੇਜ਼(_F)"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "ਪਹਿਲੇ ਪੇਜ਼ ਉੱਤੇ ਜਾਓ"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "ਆਖਰੀ ਪੇਜ਼(_L)"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "ਆਖਰੀ ਪੇਜ਼ ਉੱਤੇ ਜਾਓ"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "ਸਮੱਗਰੀ(_C)"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "ਇਸ ਬਾਰੇ(_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "ਪੂਰੀ ਸਕਰੀਨ ਛੱਡੋ"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "ਪੂਰੀ ਸਕਰੀਨ ਢੰਗ ਛੱਡੋ"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "ਪਰਿਜ਼ੈੱਨਟੇਸ਼ਨ ਸ਼ੁਰੂ"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "ਇੱਕ ਪਰਿਜ਼ੈੱਨਟੇਸ਼ਨ ਸ਼ੁਰੂ ਕਰੋ"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "ਟੂਲਬਾਰ(_T)"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "ਟੂਲਬਾਰ ਵੇਖੋ ਜਾਂ ਓਹਲੇ"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "ਬਾਹੀ(_P)"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "ਬਾਹੀ ਵੇਖੋ ਜਾਂ ਓਹਲੇ"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "ਲਗਾਤਾਰ(_C)"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "ਪੂਰਾ ਡੌਕੂਮੈਂਟ ਵੇਖੋ"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "ਦੂਹਰਾ(_D)"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "ਇੱਕ ਵਾਰ ਹੀ ਦੋ ਪੇਜ਼ ਵੇਖੋ"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "ਪੂਰੀ ਸਕਰੀਨ(_F)"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "ਵਿੰਡੋ ਨੂੰ ਪੂਰੀ ਸਕਰੀਨ ਉੱਤੇ ਫੈਲਾਓ"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "ਪਰਿਜ਼ੈੱਨਟੇਸ਼ਨ(_s)"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "ਡੌਕੂਮੈਂਟ ਨੂੰ ਪਰਿਜ਼ੈੱਨਟੇਸ਼ਨ ਦੇ ਰੂਪ 'ਚ ਚਲਾਓ"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "ਉਲਟ ਰੰਗ(_I)"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "ਉਲਟ ਰੰਗਾਂ ਨਾਲ ਪੇਜ਼ ਸਮਗੱਰੀ ਵੇਖੋ"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "ਲਿੰਕ ਖੋਲ੍ਹੋ(_O)"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "ਜਾਓ(_G)"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਖੋਲ੍ਹੋ(_W)"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "ਲਿੰਕ ਐਡਰੈੱਸ ਕਾਪੀ ਕਰੋ(_C)"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "ਚਿੱਤਰ ਇੰਝ ਸੰਭਾਲੋ(_S)…"
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "ਚਿੱਤਰ ਕਾਪੀ ਕਰੋ(_I)"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "ਵਿਆਖਿਆ ਵਿਸ਼ੇਸ਼ਤਾ…"
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "ਅਟੈਚਮੈਂਟ ਖੋਲ੍ਹੋ(_O)"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "ਅਟੈਚਮੈਂਟ ਇੰਝ ਸੰਭਾਲੋ(_S)…"
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "ਜ਼ੂਮ"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "ਜ਼ੂਮ ਲੈਵਲ ਅਡਜੱਸਟ ਕਰੋ"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "ਨੇਵੀਗੇਸ਼ਨ"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "ਪਿੱਛੇ"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "ਖੋਲ੍ਹੇ ਪੇਜ਼ਾਂ ਵਿੱਚ ਜਾਓ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "ਪਿੱਛੇ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "ਅੱਗੇ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "ਜ਼ੂਮ ਇਨ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "ਜ਼ੂਮ ਆਉਟ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "ਚੌੜਾਈ ਫਿੱਟ"
+
+#: ../shell/ev-window.c:5890 ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "ਬਾਹਰੀ ਐਪਲੀਕੇਸ਼ਨ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਅਸਮਰੱਥ"
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "ਬਾਹਰੀ ਲਿੰਕ ਖੋਲ੍ਹਣ ਲਈ ਅਸਮਰੱਥ"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "ਚਿੱਤਰ ਸੰਭਾਲਣ ਲਈ ਢੁੱਕਵਾਂ ਫਾਰਮੈਟ ਨਹੀਂ ਮਿਲਿਆ"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "ਚਿੱਤਰ ਸੰਭਾਲਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਹੈ।"
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "ਚਿੱਤਰ ਸੰਭਾਲੋ"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "ਅਟੈਂਚਮੈਂਟ ਖੋਲ੍ਹਣ ਲਈ ਅਸਮਰੱਥ ਹੈ"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "ਅਟੈਂਚਮੈਂਟ ਨੂੰ ਸੰਭਾਲਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ ਹੈ।"
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "ਅਟੈਂਚਮੈਂਟ ਸੰਭਾਲੋ"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — ਪਾਸਵਰਡ ਚਾਹੀਦਾ ਹੈ"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "ਇਕਸਟੈਨਸ਼ਨ ਨਾਲ"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "ਗਨੋਮ ਡੌਕੂਮੈਂਟ ਦਰਸ਼ਕ"
+
+#: ../shell/main.c:77
+#| msgid "The page of the document to display."
+msgid "The page label of the document to display."
+msgstr "ਵੇਖਾਉਣ ਲਈ ਡੌਕੂਮੈਂਟ ਦਾ ਪੇਜ਼ ਲੇਬਲ ਹੈ।"
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "ਪੇਜ਼"
+
+#: ../shell/main.c:78
+#| msgid "The page of the document to display."
+msgid "The page number of the document to display."
+msgstr "ਵੇਖਾਉਣ ਲਈ ਡੌਕੂਮੈਂਟ ਦਾ ਪੇਜ਼ ਨੰਬਰ ਹੈ।"
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "ਨੰਬਰ"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "ਈਵਨੇਸ ਨੂੰ ਪੂਰੀ ਸਕਰੀਨ ਮੋਡ ਨਾਲ ਚਲਾਓ"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "ਈਵਨੇਸ ਨੂੰ ਪਰਿਜ਼ੈੱਨਟੇਸ਼ਨ ਮੋਡ 'ਚ ਚਲਾਓ"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "ਈਵਨੇਸ ਨੂੰ ਝਲਕ-ਦਰਸ਼ਕ ਵਾਂਗ ਚਲਾਓ"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "ਡੌਕੂਮੈਂਟ 'ਚ ਸ਼ਬਦ ਜਾਂ ਪ੍ਹੈਰਾ ਖੋਜੋ"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "ਲਾਈਨ"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[ਫਾਇਲ…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr "ਬੁਲੀਅਨ ਚੋਣਾਂ ਉਪਲੱਬਧ ਹਨ: ਸਹੀਂ ਨਾਲ ਥੰਮਨੇਲ ਯੋਗ ਹੋਵੇਗਾ ਅਤੇ ਗਲਤ ਨਾਲ ਨਵੇਂ ਥੰਮਨੇਲ ਨਹੀਂ ਬਣ ਸਕਣਗੇ।"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF ਡੌਕੂਮੈਂਟ ਲਈ ਥੰਮਨੇਲ ਯੋਗ"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF ਡੌਕੂਮੈਂਟ ਲਈ ਥੰਮਨੇਲ ਕਮਾਂਡ"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr "PDF ਡੌਕੂਮੈਂਟ ਥੰਮਨੇਲਰ ਲਈ ਠੀਕ ਕਮਾਂਡ ਅਤੇ ਮੁੱਲ। ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ ਨਟਾਲਿਸ ਥੰਮਨੇਲਰ ਡੌਕੂਮੈਂਟ ਵੇਖੋ।"
+
+#~| msgid "Page Set_up..."
+#~ msgid "Page Set_up…"
+#~ msgstr "ਪੇਜ਼ ਸੈੱਟਅੱਪ(_u)…"
+
+#~| msgid "Setup the page settings for printing"
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "ਪਰਿੰਟ ਕਰਨ ਲਈ ਸਫ਼ਾ ਸੈਟਿੰਗ ਸੈਟਅੱਪ"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU ਡੌਕੂਮੈਂਟ 'ਚ ਗਲਤ ਫਾਰਮੈਟ ਹੈ"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "ਫਾਇਲ “%s” ਬਣਾਉਣ ਲਈ ਫੇਲ੍ਹ: %s"
+
+#~ msgid "Search string"
+#~ msgstr "ਸ਼ਬਦ ਖੋਜ"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "ਖੋਜ ਲਈ ਸਤਰ ਦਾ ਨਾਂ"
+
+#~ msgid "Case sensitive"
+#~ msgstr "ਆਕਾਰ ਪ੍ਰਤੀ ਸੰਵੇਦਨਸ਼ੀਲ"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "TRUE ਜੇਕਰ ਖੋਜ ਅੱਖਰ ਅਕਾਰ ਨੂੰ ਧਿਆਨ 'ਚ ਰੱਖ ਕੇ ਕਰਨੀ ਹੈ"
+
+#~ msgid "Highlight color"
+#~ msgstr "ਹਾਈਲਾਈਟ ਰੰਗ"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "ਸਭ ਮੇਲਾਂ ਨੂੰ ਹਾਈਲਾਈਟ ਕਰਨ ਲਈ ਰੰਗ"
+
+#~ msgid "Current color"
+#~ msgstr "ਮੌਜੂਦਾ ਰੰਗ"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "ਮੌਜੂਦਾ ਮੇਲਾਂ ਨੂੰ ਹਾਈਲਾਈਟ ਲਈ ਰੰਗ"
+
+#~| msgid "Reload the document"
+#~ msgid "Recover previous documents?"
+#~ msgstr "ਪਿਛਲਾ ਡੌਕੂਮੈਂਟ ਮੁੜ-ਪ੍ਰਾਪਤ ਕਰਨਾ ਹੈ?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "ਈਵਨੈਸ ਪਿਛਲੀ ਵਾਰ ਚੱਲਣ ਦੌਰਾਨ ਅਚਾਨਕ ਬੰਦ ਹੋ ਗਿਆ ਜਾਪਦਾ ਹੈ। ਤੁਸੀਂ ਖੁੱਲ੍ਹੇ ਡੌਕੂਮੈਂਟ ਮੁੜ-ਪ੍ਰਾਪਤ ਕਰ "
+#~ "ਸਕਦੇ ਹੋ।"
+
+#~ msgid "_Don't Recover"
+#~ msgstr "ਮੁੜ-ਪ੍ਰਾਪਤ ਨਾ ਕਰੋ(_D)"
+
+#~ msgid "_Recover"
+#~ msgstr "ਮੁੜ-ਪ੍ਰਾਪਤ ਕਰੋ(_R)"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "ਕਰੈਸ਼ ਮੁੜ-ਪ੍ਰਾਪਤੀ"
+
+#~ msgid "Print..."
+#~ msgstr "ਪਰਿੰਟ ਕਰੋ..."
+
+#~| msgid "Couldn't create symlink “%s”: %s"
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "symlink “%s” ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "ਕਾਪੀ ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕਦੀ ਹੈ।"
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "ਇੱਕ ਕਾਪੀ ਸੰਭਾਲੋ(_S)..."
+
+#~ msgid "_Print..."
+#~ msgstr "ਪਰਿੰਟ ਕਰੋ(_P)..."
+
+#~ msgid "_Find..."
+#~ msgstr "ਖੋਜ(_F)..."
+
+#~ msgid "Co_nnect"
+#~ msgstr "ਕੁਨੈਕਟ ਕਰੋ(_n)"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "ਅਗਿਆਤ ਦੇ ਤੌਰ ਉੱਤੇ ਕੁਨੈਕਟ(_a)"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "ਯੂਜ਼ਰ ਵਜੋਂ ਕੁਨੈਕਟ(_s):"
+
+#~ msgid "_Username:"
+#~ msgstr "ਯੂਜ਼ਰ ਨਾਂ(_U):"
+
+#~ msgid "_Domain:"
+#~ msgstr "ਡੋਮੇਨ(_D):"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "ਪਾਸਵਰਡ ਤੁਰੰਤ ਭੁੱਲ ਜਾਓ(_F)"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "ਪਾਸਵਰਡ ਯਾਦ ਰੱਖੋ, ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਲਾਗਆਉਟ ਨਹੀਂ ਕਰਦੇ(_R)"
+
+#~ msgid "_Remember forever"
+#~ msgstr "ਹਮੇਸ਼ਾ ਪਾਸਵਰਡ ਯਾਦ ਰੱਖੋ(_R)"
+
+#~ msgid "File not available"
+#~ msgstr "ਫਾਇਲ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "ਰਿਮੋਟ ਫਾਇਲ ਸਹਿਯੋਗੀ ਨਹੀਂ ਹੈ"
+
+#~ msgid "Find Previous"
+#~ msgstr "ਪਿੱਛੇ ਖੋਜ"
+
+#~ msgid "Find Next"
+#~ msgstr "ਅੱਗੇ ਖੋਜ"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "ਪੱਤਰ"
+
+#~ msgid "Tabloid"
+#~ msgstr "ਸਮਾਚਾਰ ਪੱਤਰ"
+
+#~ msgid "Ledger"
+#~ msgstr "ਲੈਡਰ"
+
+#~ msgid "Legal"
+#~ msgstr "ਲੀਗਲ"
+
+#~ msgid "Statement"
+#~ msgstr "ਸਟੇਟਮਿੰਟ"
+
+#~ msgid "Executive"
+#~ msgstr "ਐਕਜ਼ੀਕਿਊਟਿਵ"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "ਫੋਲੀਓ"
+
+#~ msgid "Quarto"
+#~ msgstr "ਕੁਆਟਰਜ਼"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "ਫਾਇਲ “%s” ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕਦੀ ਹੈ।"
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr "“%s” ਡੌਕੂਮੈਂਟ ਲੋਡ ਕਰਨ ਲਈ ਫੇਲ੍ਹ ਹੈ। ਗੋਸਟ-ਸਕ੍ਰਿਪਟ ਇੰਟਰਪਰੇਟਰ ਮਾਰਗ ਵਿੱਚ ਨਹੀਂ ਮਿਲਿਆ ਹੈ।"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "ਇੰਕੈਪਸੂਲੇਟਡ ਪੋਸਟ-ਸਕ੍ਰਿਪਟ"
+
+#~ msgid "PostScript"
+#~ msgstr "ਪੋਸਟ-ਸਕ੍ਰਿਪਟ"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "ਇੰਟਰ-ਪਰੇਟਰ ਫੇਲ੍ਹ ਹੋਇਆ ਹੈ।"
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "ਗ਼ੈਰ-ਹੈਂਡਲ MIME ਟਾਈਪ: “%s”"
+
+#~ msgid "Password Entry"
+#~ msgstr "ਪਾਸਵਰਡ ਐਂਟਰੀ"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "ਪਾਸਵਰਡ ਛੱਲੇ (keyring) 'ਚ ਸੰਭਾਲੋ"
+
+#~ msgid "<b>Title:</b>"
+#~ msgstr "<b>ਟਾਇਟਲ:</b>"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f in"
+
+#~ msgid "Incorrect password"
+#~ msgstr "ਗਲਤ ਪਾਸਵਰਡ"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "PDF ਬਣਾਉਣ ਲਈ ਸਹਾਇਕ ਨਹੀਂ"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "ਤੁਸੀਂ ਇੱਕ ਪਰਿੰਟਰ ਉੱਤੇ “%s” ਡਰਾਇਵਰ ਨਾਲ ਪਰਿੰਟ ਕਰਨ ਦੀ ਕੋਸ਼ਸ਼ ਕਰ ਰਹੇ ਹੋ। ਇਹ ਪਰੋਗਰਾਮ ਨੂੰ ਇੱਕ "
+#~ "ਪੋਸਟਸਕਰਿਪਟ ਪਰਿੰਟਰ ਡਰਾਇਵਰ ਦੀ ਲੋੜ ਹੈ।"
+
+#~ msgid "Pages"
+#~ msgstr "ਪੇਜ਼"
+
+#~ msgid "Invalid URI: “%s”"
+#~ msgstr "ਗਲਤ URI: “%s”"
+
+#~ msgid "Unsupported URI: “%s”"
+#~ msgstr "ਗ਼ੈਰ-ਸਹਾਇਕ URI: “%s”"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "ਈਵਨੇਸ ਡੌਕੂਮੈਂਟ ਦਰਸ਼ਕ"
+
+#~ msgid "Images"
+#~ msgstr "ਚਿੱਤਰ"
+
+#~ msgid "Open “%s”"
+#~ msgstr "“%s” ਖੋਲ੍ਹੋ"
+
+#~ msgid "Empty"
+#~ msgstr "ਖਾਲੀ"
+
+#~ msgid "75%"
+#~ msgstr "75%"
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 00000000..ec723fec
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,1723 @@
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+# Aviary.pl
+# Jeśli masz jakiekolwiek uwagi odnoszące się do tłumaczenia lub chcesz
+# pomóc w jego rozwijaniu i pielęgnowaniu, napisz do nas:
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-09-14 19:16+0200\n"
+"PO-Revision-Date: 2010-09-14 13:23+0200\n"
+"Last-Translator: Piotr Drąg <[email protected]>\n"
+"Language-Team: Polish <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+"X-Poedit-Language: Polish\n"
+"X-Poedit-Country: Poland\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Błąd podczas uruchamiania polecenia \"%s\", aby dekompresować komiks: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr ""
+"Wykonanie polecenia \"%s\" podczas dekompresowania komiksu się nie powiodło."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Polecenie \"%s\" nie zakończyło działania normalnie."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "To nie jest typ MIME komiksu: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Nie można znaleźć odpowiedniego polecenia do dekompresji tego typu komiksu"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Nieznany typ MIME"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Uszkodzony plik"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Nie odnaleziono plików w archiwum"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Nie odnaleziono obrazów w archiwum %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Wystąpił błąd podczas usuwania \"%s\"."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Błąd %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Komiksy"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "Dokument DjVu ma niepoprawny format"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Ten dokument jest złożony z kilku plików. Brak dostępu do jednego lub kilku "
+"z nich."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Dokumenty DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Dokument DVI ma niepoprawny format"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Dokumenty DVI"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Ta praca znajduje się w domenie publicznej"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Tak"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Nie"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Nieznany typ czcionki"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Bez nazwy"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Osadzony podzestaw"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Osadzone"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Niesadzone"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Dokumenty PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Nieprawidłowy dokument"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Slajdy prezentacji"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Bez błędu"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Brak pamięci"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Nie można odnaleźć podpisu ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Nieprawidłowy plik ZIP"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Wieloplikowe archiwa ZIP nie są obsługiwane"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Nie można otworzyć pliku"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Nie można odczytać danych z pliku"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Nie można odnaleźć pliku w archiwum ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Nieznany błąd"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Wczytanie dokumentu \"%s\" się nie powiodło"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Zapisanie dokumentu \"%s\" się nie powiodło"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Dokumenty PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Nie można zapisać załącznika \"%s\": %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Nie można otworzyć załącznika \"%s\": %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Nie można otworzyć załącznika \"%s\""
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Plik typu %s (%s) nie jest obsługiwany"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Wszystkie dokumenty"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Wszystkie pliki"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Utworzenie pliku tymczasowego się nie powiodło: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Utworzenie katalogu tymczasowego się nie powiodło: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Nieprawidłowy plik .desktop"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Nierozpoznana wersja pliku .desktop \"%s\""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Uruchamianie %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Program nie przyjmuje dokumentów w wierszu poleceń"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Nierozpoznana opcja uruchamiania: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"Nie można przekazać adresów URI dokumentów do wpisu .desktop \"Type=Link\""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Nie można uruchomić elementu"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Rozłącza połączenie z menedżerem sesji"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Określa plik zawierający zapisaną konfigurację"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "PLIK"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Określa identyfikator zarządzania sesji"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "Identyfikator"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opcje zarządzania sesją:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Wyświetla opcje zarządzania sesją"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Wyświetl \"_%s\""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Przesuń na pasku narzędziowym"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Przesuwa zaznaczony obiekt na pasku narzędziowym"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Usuń z paska narzędziowego"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Usuwa zaznaczony obiekt z paska narzędziowego"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Usuń pasek narzędziowy"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "_Przesuń zaznaczony pasek narzędziowy"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Separator"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5761
+msgid "Best Fit"
+msgstr "Dopasuj"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Dopasuj do szerokości"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4554
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Przeglądarka dokumentów"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Wyświetlanie wielostronicowych dokumentów"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Bez uwzględniania ograniczeń dokumentu"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Bez uwzględniania ograniczeń dokumentu, takich jak ograniczenie kopiowania "
+"lub drukowania."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Usuwa plik tymczasowy"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Drukuje plik ustawień"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Przeglądarka podglądu dokumentów środowiska MATE"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3185
+msgid "Failed to print document"
+msgstr "Wydrukowanie dokumentu się nie powiodło"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Nie można odnaleźć wybranej drukarki \"%s\""
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5476
+msgid "_Previous Page"
+msgstr "Poprzednia _strona"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5477
+msgid "Go to the previous page"
+msgstr "Przechodzi do poprzedniej strony"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5479
+msgid "_Next Page"
+msgstr "_Następna strona"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5480
+msgid "Go to the next page"
+msgstr "Przechodzi do następnej strony"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5463
+msgid "Enlarge the document"
+msgstr "Powiększa widok dokumentu"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5466
+msgid "Shrink the document"
+msgstr "Zmniejsza widok dokumentu"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Wydrukuj"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5432
+msgid "Print this document"
+msgstr "Drukuje bieżący dokument"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5578
+msgid "_Best Fit"
+msgstr "Najlepsze d_opasowanie"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5579
+msgid "Make the current document fill the window"
+msgstr "Dopasowuje rozmiar dokumentu do rozmiaru okna"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5581
+msgid "Fit Page _Width"
+msgstr "Dopasowanie do _szerokości"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5582
+msgid "Make the current document fill the window width"
+msgstr "Dopasowuje szerokość dokumentu do szerokości okna"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5683
+msgid "Page"
+msgstr "Strona"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5684
+msgid "Select Page"
+msgstr "Wybiera stronę"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokument"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Tytuł:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Położenie:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Temat:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Autor:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Słowa kluczowe:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Producent:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Twórca:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Utworzono:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Zmodyfikowano:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Liczba stron:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optymalizacja:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Format:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Zabezpieczenia:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Rozmiar papieru:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Brak"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f cali"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, pionowo (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, poziomo (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d z %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "z %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Wczytywanie…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Przygotowywanie do wydruku…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Kończenie…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Drukowanie strony %d z %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Drukowanie na tej drukarce nie jest obsługiwane."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Nieprawidłowy wybór strony"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Ostrzeżenie"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Wybór zakresu wydruku nie zawiera żadnej strony"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Skalowanie strony:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Zmniejszenie do drukowalnego obszaru"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Dopasowanie do drukowalnego obszaru"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Skalowanie stron dokumentu, aby pasowały do wybranej strony drukarki. Proszę "
+"wybrać jedną opcję z poniższych:\n"
+"\n"
+"• \"Brak\": żadne skalowanie strony nie będzie wykonywane.\n"
+"\n"
+"• \"Zmniejszenie do drukowalnego obszaru\": strony dokumentu większe niż "
+"obszar drukowalny będą zmniejszane, aby pasować do drukowalnego obszaru "
+"stron drukarki.\n"
+"\n"
+"• \"Dopasowanie do drukowalnego obszaru\": strony dokumentów będą "
+"powiększane lub zmniejszane, aby dopasować do obszaru drukowalnego stron "
+"drukarki.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Automatyczne obracanie i wyśrodkowanie"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Obraca układ strony drukarki każdej strony na pasujący do układu stron "
+"dokumentu. Strony dokumentu będą wyśrodkowane na stronie drukarki."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Wybór rozmiaru strony na podstawie rozmiaru stron dokumentu"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Kiedy jest włączone, każda strona będzie drukowana na tym samym rozmiarze "
+"papieru, który używają strony dokumentu."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Obsługa stron"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Wydrukowanie strony %d się nie powiodło: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Przewinięcie w górę"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Przewinięcie w dół"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Przewinięcie widoku w górę"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Przewinięcie widoku w dół"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Widok dokumentów"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Przejdź do strony:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Koniec prezentacji. Kliknięcie zamknie okno."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Przejdź do pierwszej strony"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Przejdź do poprzedniej strony"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Przejdź do następnej strony"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Przejdź do ostatniej strony"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Przejdź do strony"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Znajdź"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Przejdź do strony %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Przejdź do %s z pliku \"%s\""
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Przejdź do pliku \"%s\""
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Uruchom %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Znajdź:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5449
+msgid "Find Pre_vious"
+msgstr "Znajdź p_oprzednie"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Wyszukuje poprzednie wystąpienie szukanego napisu"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5447
+msgid "Find Ne_xt"
+msgstr "Znajdź _następne"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Wyszukuje następne wystąpienie szukanego napisu"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Rozróżnianie wielkości liter"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Włącza rozróżnianie wielkości liter przy wyszukiwaniu"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Ikona:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Notatka"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Komentarz"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Klucz"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Pomoc"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Nowy akapit"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Akapit"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Wstawka"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Krzyżyk"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Kółko"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Nieznana"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Właściwości adnotacji"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Kolor:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Styl:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Przezroczysty"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Nieprzezroczysty"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Początkowy stan okna:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Otwarte"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Zamknięte"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Praca w trybie prezentacji"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Hasło dla dokumentu %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Konwertowanie %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "Przekonwertowano dokumentów: %d z %d"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Konwertowanie metadanych"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Format metadanych używany przez program Evince został zmieniony, dlatego "
+"musi zostać wykonana migracja. Jeśli zostanie ona anulowana, pamięć "
+"metadanych nie będzie działała."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Otwiera ostatnio używany dokument"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Ten dokument jest zablokowany, jego otwarcie wymaga wprowadzenia poprawnego "
+"hasła."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "Odblok_uj dokument"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Proszę wprowadzić hasło"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Wymagane hasło"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"Dokument \"%s\" jest zablokowany, jego otwarcie wymaga wprowadzenia hasła."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Hasło:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "_Bez zapamiętania hasła"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "_Zapamiętanie hasła do wylogowania"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Z_apamiętanie na zawsze"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Właściwości"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Ogólne"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Czcionki"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Licencja dokumentu"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Czcionka"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Zbieranie informacji o czcionce… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Warunki używania"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Tekst licencji"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Więcej informacji"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Lista"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Adnotacje"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Tekst"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Dodanie adnotacji tekstowej"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Dodawanie"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Dokument nie zawiera adnotacji"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Strona %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Załączniki"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Warstwy"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Wydrukuj…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Indeks"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Miniatury"
+
+#: ../shell/ev-window.c:875
+#, c-format
+msgid "Page %s — %s"
+msgstr "Strona %s — %s"
+
+#: ../shell/ev-window.c:877
+#, c-format
+msgid "Page %s"
+msgstr "Strona %s"
+
+#: ../shell/ev-window.c:1436
+msgid "The document contains no pages"
+msgstr "Dokument nie zawiera stron"
+
+#: ../shell/ev-window.c:1439
+msgid "The document contains only empty pages"
+msgstr "Dokument zawiera tylko puste strony"
+
+#: ../shell/ev-window.c:1644 ../shell/ev-window.c:1810
+msgid "Unable to open document"
+msgstr "Nie można otworzyć dokumentu"
+
+#: ../shell/ev-window.c:1781
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Wczytywanie dokumentu z \"%s\""
+
+#: ../shell/ev-window.c:1923 ../shell/ev-window.c:2202
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Pobieranie dokumentu (%d%%)"
+
+#: ../shell/ev-window.c:1956
+msgid "Failed to load remote file."
+msgstr "Wczytanie zdalnego pliku się nie powiodło."
+
+#: ../shell/ev-window.c:2146
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Ponowne wczytywanie dokumentu z %s"
+
+#: ../shell/ev-window.c:2178
+msgid "Failed to reload document."
+msgstr "Ponowne wczytanie dokumentu się nie powiodło."
+
+#: ../shell/ev-window.c:2333
+msgid "Open Document"
+msgstr "Otwarcie dokumentu"
+
+#: ../shell/ev-window.c:2631
+#, c-format
+msgid "Saving document to %s"
+msgstr "Zapisywanie dokumentu do %s"
+
+#: ../shell/ev-window.c:2634
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Zapisywanie załącznika do %s"
+
+#: ../shell/ev-window.c:2637
+#, c-format
+msgid "Saving image to %s"
+msgstr "Zapisywanie obrazu do %s"
+
+#: ../shell/ev-window.c:2681 ../shell/ev-window.c:2781
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Nie można zapisać pliku jako \"%s\"."
+
+#: ../shell/ev-window.c:2712
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Wysyłanie dokumentu (%d%%)"
+
+#: ../shell/ev-window.c:2716
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Wysyłanie załącznika (%d%%)"
+
+#: ../shell/ev-window.c:2720
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Wysyłanie obrazu (%d%%)"
+
+#: ../shell/ev-window.c:2844
+msgid "Save a Copy"
+msgstr "Zapis kopii"
+
+#: ../shell/ev-window.c:3129
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d oczekujące zadanie w kolejce"
+msgstr[1] "%d oczekujące zadania w kolejce"
+msgstr[2] "%d oczekujących zadań w kolejce"
+
+#: ../shell/ev-window.c:3242
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Drukowanie zadania \"%s\""
+
+#: ../shell/ev-window.c:3420
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Dokument zawiera pola formularza, które zostały wypełnione. Jeśli kopia nie "
+"zostanie zapisana, to zmiany zostaną bezpowrotnie utracone."
+
+#: ../shell/ev-window.c:3424
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Dokument zawiera nowe lub zmienione adnotacje. Jeśli kopia nie zostanie "
+"zapisana, to zmiany zostaną bezpowrotnie utracone."
+
+#: ../shell/ev-window.c:3431
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Zapisać kopię dokumentu \"%s\" przed zamknięciem?"
+
+#: ../shell/ev-window.c:3450
+msgid "Close _without Saving"
+msgstr "Zamknij _bez zapisywania"
+
+#: ../shell/ev-window.c:3454
+msgid "Save a _Copy"
+msgstr "Zapisz _kopię"
+
+#: ../shell/ev-window.c:3528
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Poczekać na ukończenie zadania wydruku \"%s\" przed zamknięciem?"
+
+#: ../shell/ev-window.c:3531
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Aktywnych zadań wydruku: %d. Poczekać na ukończenie wydruku przed "
+"zamknięciem?"
+
+#: ../shell/ev-window.c:3543
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Zamknięcie okna spowoduje anulowanie wydruku oczekujących zadań."
+
+#: ../shell/ev-window.c:3547
+msgid "Cancel _print and Close"
+msgstr "Anuluj _drukowanie i zamknij"
+
+#: ../shell/ev-window.c:3551
+msgid "Close _after Printing"
+msgstr "_Zamknij po wydrukowaniu"
+
+#: ../shell/ev-window.c:4171
+msgid "Toolbar Editor"
+msgstr "Edytor paska narzędziowego"
+
+#: ../shell/ev-window.c:4338
+msgid "There was an error displaying help"
+msgstr "Wystąpił błąd podczas wyświetlania pomocy"
+
+#: ../shell/ev-window.c:4550
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Przeglądarka dokumentów\n"
+"Używa biblioteki poppler %s (%s)"
+
+#: ../shell/ev-window.c:4581
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Program Evince jest wolnym oprogramowaniem; można go rozprowadzać dalej i/"
+"lub modyfikować na warunkach Powszechnej Licencji Publicznej GNU, wydanej "
+"przez Fundację Wolnego Oprogramowania (Free Software Foundation) - według "
+"wersji drugiej tej Licencji lub którejś z późniejszych wersji.\n"
+
+#: ../shell/ev-window.c:4585
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Program Evince rozpowszechniany jest z nadzieją, iż będzie on użyteczny - "
+"jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI "
+"HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ. W celu uzyskania "
+"bliższych informacji należy zapoznać się z Powszechną Licencją Publiczną "
+"GNU.\n"
+
+#: ../shell/ev-window.c:4589
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Z pewnością wraz z programem Evince dostarczono także egzemplarz Powszechnej "
+"Licencji Publicznej GNU (GNU General Public License); jeśli nie - proszę "
+"napisać do Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, "
+"Boston, MA 02110-130159 USA.\n"
+
+#: ../shell/ev-window.c:4614
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4617
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 Autorzy programu Evince"
+
+#: ../shell/ev-window.c:4623
+msgid "translator-credits"
+msgstr "Aviary.pl <[email protected]>, 2008, 2009, 2010"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4889
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d wystąpienie na tej stronie"
+msgstr[1] "%d wystąpienia na tej stronie"
+msgstr[2] "%d wystąpień na tej stronie"
+
+#: ../shell/ev-window.c:4894
+msgid "Not found"
+msgstr "Nie odnaleziono"
+
+#: ../shell/ev-window.c:4900
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% pozostałych do przeszukania"
+
+#: ../shell/ev-window.c:5415
+msgid "_File"
+msgstr "_Plik"
+
+#: ../shell/ev-window.c:5416
+msgid "_Edit"
+msgstr "_Edycja"
+
+#: ../shell/ev-window.c:5417
+msgid "_View"
+msgstr "_Widok"
+
+#: ../shell/ev-window.c:5418
+msgid "_Go"
+msgstr "Przej_dź"
+
+#: ../shell/ev-window.c:5419
+msgid "_Help"
+msgstr "Pomo_c"
+
+#. File menu
+#: ../shell/ev-window.c:5422 ../shell/ev-window.c:5723
+msgid "_Open…"
+msgstr "_Otwórz…"
+
+#: ../shell/ev-window.c:5423 ../shell/ev-window.c:5724
+msgid "Open an existing document"
+msgstr "Otwiera istniejący dokument"
+
+#: ../shell/ev-window.c:5425
+msgid "Op_en a Copy"
+msgstr "Otwórz _kopię"
+
+#: ../shell/ev-window.c:5426
+msgid "Open a copy of the current document in a new window"
+msgstr "Otwiera kopię bieżącego dokumentu w nowym oknie"
+
+#: ../shell/ev-window.c:5428
+msgid "_Save a Copy…"
+msgstr "_Zapisz kopię…"
+
+#: ../shell/ev-window.c:5429
+msgid "Save a copy of the current document"
+msgstr "Zapisuje kopię bieżącego dokumentu"
+
+#: ../shell/ev-window.c:5431
+msgid "_Print…"
+msgstr "Wy_drukuj…"
+
+#: ../shell/ev-window.c:5434
+msgid "P_roperties"
+msgstr "Wł_aściwości"
+
+#: ../shell/ev-window.c:5442
+msgid "Select _All"
+msgstr "Z_aznacz wszystko"
+
+#: ../shell/ev-window.c:5444
+msgid "_Find…"
+msgstr "_Znajdź…"
+
+#: ../shell/ev-window.c:5445
+msgid "Find a word or phrase in the document"
+msgstr "Wyszukuje w dokumencie podane słowo lub wyrażenie"
+
+#: ../shell/ev-window.c:5451
+msgid "T_oolbar"
+msgstr "Pasek _narzędziowy"
+
+#: ../shell/ev-window.c:5453
+msgid "Rotate _Left"
+msgstr "Obróć w _lewo"
+
+#: ../shell/ev-window.c:5455
+msgid "Rotate _Right"
+msgstr "Obróć w p_rawo"
+
+#: ../shell/ev-window.c:5457
+msgid "Save Current Settings as _Default"
+msgstr "Zapisz bieżące ustawienia jako _domyślne"
+
+#: ../shell/ev-window.c:5468
+msgid "_Reload"
+msgstr "Wczy_taj ponownie"
+
+#: ../shell/ev-window.c:5469
+msgid "Reload the document"
+msgstr "Wczytuje ponownie bieżący dokument"
+
+#: ../shell/ev-window.c:5472
+msgid "Auto_scroll"
+msgstr "_Automatyczne przewijanie"
+
+#: ../shell/ev-window.c:5482
+msgid "_First Page"
+msgstr "Pie_rwsza strona"
+
+#: ../shell/ev-window.c:5483
+msgid "Go to the first page"
+msgstr "Przechodzi do pierwszej strony"
+
+#: ../shell/ev-window.c:5485
+msgid "_Last Page"
+msgstr "_Ostatnia strona"
+
+#: ../shell/ev-window.c:5486
+msgid "Go to the last page"
+msgstr "Przechodzi do ostatniej strony"
+
+#. Help menu
+#: ../shell/ev-window.c:5490
+msgid "_Contents"
+msgstr "_Spis treści"
+
+#: ../shell/ev-window.c:5493
+msgid "_About"
+msgstr "_O programie"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5497
+msgid "Leave Fullscreen"
+msgstr "Opuść tryb pełnoekranowy"
+
+#: ../shell/ev-window.c:5498
+msgid "Leave fullscreen mode"
+msgstr "Opuszcza tryb pełnoekranowy"
+
+#: ../shell/ev-window.c:5500
+msgid "Start Presentation"
+msgstr "Wyświetl prezentację"
+
+#: ../shell/ev-window.c:5501
+msgid "Start a presentation"
+msgstr "Wyświetla prezentację"
+
+#. View Menu
+#: ../shell/ev-window.c:5560
+msgid "_Toolbar"
+msgstr "Pasek _narzędziowy"
+
+#: ../shell/ev-window.c:5561
+msgid "Show or hide the toolbar"
+msgstr "Wyświetla lub ukrywa pasek narzędziowy"
+
+#: ../shell/ev-window.c:5563
+msgid "Side _Pane"
+msgstr "Panel _boczny"
+
+#: ../shell/ev-window.c:5564
+msgid "Show or hide the side pane"
+msgstr "Wyświetla lub ukrywa panel boczny"
+
+#: ../shell/ev-window.c:5566
+msgid "_Continuous"
+msgstr "_Ciągły"
+
+#: ../shell/ev-window.c:5567
+msgid "Show the entire document"
+msgstr "Wyświetla cały dokument"
+
+#: ../shell/ev-window.c:5569
+msgid "_Dual"
+msgstr "Po_dwójny"
+
+#: ../shell/ev-window.c:5570
+msgid "Show two pages at once"
+msgstr "Wyświetla dwie strony naraz"
+
+#: ../shell/ev-window.c:5572
+msgid "_Fullscreen"
+msgstr "Pełny _ekran"
+
+#: ../shell/ev-window.c:5573
+msgid "Expand the window to fill the screen"
+msgstr "Wyświetla dokument w trybie pełnoekranowym"
+
+#: ../shell/ev-window.c:5575
+msgid "Pre_sentation"
+msgstr "Pre_zentacja"
+
+#: ../shell/ev-window.c:5576
+msgid "Run document as a presentation"
+msgstr "Wyświetla dokument jako prezentację"
+
+#: ../shell/ev-window.c:5584
+msgid "_Inverted Colors"
+msgstr "Odwrócone _kolory"
+
+#: ../shell/ev-window.c:5585
+msgid "Show page contents with the colors inverted"
+msgstr "Wyświetla zawartość strony z odwróconymi kolorami"
+
+#. Links
+#: ../shell/ev-window.c:5593
+msgid "_Open Link"
+msgstr "_Otwórz odnośnik"
+
+#: ../shell/ev-window.c:5595
+msgid "_Go To"
+msgstr "_Przejdź do"
+
+#: ../shell/ev-window.c:5597
+msgid "Open in New _Window"
+msgstr "Ot_wórz w nowym oknie"
+
+#: ../shell/ev-window.c:5599
+msgid "_Copy Link Address"
+msgstr "_Skopiuj adres odnośnika"
+
+#: ../shell/ev-window.c:5601
+msgid "_Save Image As…"
+msgstr "_Zapisz obraz jako…"
+
+#: ../shell/ev-window.c:5603
+msgid "Copy _Image"
+msgstr "Skopiuj _obraz"
+
+#: ../shell/ev-window.c:5605
+msgid "Annotation Properties…"
+msgstr "Właściwości adnotacji…"
+
+#: ../shell/ev-window.c:5610
+msgid "_Open Attachment"
+msgstr "_Otwórz załącznik"
+
+#: ../shell/ev-window.c:5612
+msgid "_Save Attachment As…"
+msgstr "Zapi_sz załącznik jako…"
+
+#: ../shell/ev-window.c:5697
+msgid "Zoom"
+msgstr "Powiększenie"
+
+#: ../shell/ev-window.c:5699
+msgid "Adjust the zoom level"
+msgstr "Dostosowuje powiększenie dokumentu"
+
+#: ../shell/ev-window.c:5709
+msgid "Navigation"
+msgstr "Nawigacja"
+
+#: ../shell/ev-window.c:5711
+msgid "Back"
+msgstr "Wstecz"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5714
+msgid "Move across visited pages"
+msgstr "Przechodzi pomiędzy odwiedzonymi stronami"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5744
+msgid "Previous"
+msgstr "Poprzednia"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5749
+msgid "Next"
+msgstr "Następna"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5753
+msgid "Zoom In"
+msgstr "Powiększ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5757
+msgid "Zoom Out"
+msgstr "Pomniejsz"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5765
+msgid "Fit Width"
+msgstr "Dopasuj do szerokości"
+
+#: ../shell/ev-window.c:5910 ../shell/ev-window.c:5927
+msgid "Unable to launch external application."
+msgstr "Nie można uruchomić zewnętrznego programu."
+
+#: ../shell/ev-window.c:5984
+msgid "Unable to open external link"
+msgstr "Nie można otworzyć zewnętrznego odnośnika"
+
+#: ../shell/ev-window.c:6151
+msgid "Couldn't find appropriate format to save image"
+msgstr "Nie można odnaleźć odpowiedniego formatu, aby zapisać obraz"
+
+#: ../shell/ev-window.c:6193
+msgid "The image could not be saved."
+msgstr "Nie można zapisać obrazu."
+
+#: ../shell/ev-window.c:6225
+msgid "Save Image"
+msgstr "Zapis obrazu"
+
+#: ../shell/ev-window.c:6353
+msgid "Unable to open attachment"
+msgstr "Nie można otworzyć załącznika"
+
+#: ../shell/ev-window.c:6406
+msgid "The attachment could not be saved."
+msgstr "Nie można zapisać załącznika."
+
+#: ../shell/ev-window.c:6451
+msgid "Save Attachment"
+msgstr "Zapis załącznika"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — wymagane hasło"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Wg rozszerzenia"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Przeglądarka dokumentów dla środowiska MATE"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Etykieta strony dokumentu do wyświetlenia."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "STRONA"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Numer strony dokumentu do wyświetlenia."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMER"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Uruchamia program Evince w trybie pełnoekranowym"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Uruchamia program Evince w trybie prezentacji"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Uruchamia program Evince w trybie podglądu"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Słowo lub wyrażenie do wyszukania w dokumencie"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "CIĄG"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[PLIK…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Dostępne są dwie opcje: \"true\" włącza miniatury, \"false\" wyłącza "
+"tworzenie nowych miniatur"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Tworzenie miniatur dokumentów PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Polecenie tworzenia miniatur dla dokumentów PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Prawidłowe polecenie wraz z parametrami dla generatora miniatur PDF. Więcej "
+"informacji można znaleźć w dokumentacji generatora miniatur programu "
+"Caja."
diff --git a/po/ps.po b/po/ps.po
new file mode 100644
index 00000000..553eb380
--- /dev/null
+++ b/po/ps.po
@@ -0,0 +1,1241 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.head\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-07-14 03:15+0000\n"
+"PO-Revision-Date: 2008-07-14 16:24-0800\n"
+"Last-Translator: Zabeeh Khan <[email protected]>\n"
+"Language-Team: Pashto <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Pashto, Pushto\n"
+"X-Poedit-Country: AFGHANISTAN\n"
+
+#: ../backend/comics/comics-document.c:169
+#, c-format
+msgid "File corrupted."
+msgstr ".اندرغله دوتنه"
+
+#: ../backend/comics/comics-document.c:203
+#, c-format
+msgid "No images found in archive %s"
+msgstr "ارشيو کې کوم انځور ونه موندل شو %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "ټوکي کتابونه"
+
+#: ../backend/djvu/djvu-document.c:247
+#, c-format
+msgid "The document is composed by several files. One or more of such files cannot be accessed."
+msgstr ""
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "لاسوندونه Djvu"
+
+#: ../backend/dvi/dvi-document.c:94
+#, c-format
+msgid "File not available"
+msgstr "دوتنه نه شته"
+
+#: ../backend/dvi/dvi-document.c:109
+#, c-format
+msgid "DVI document has incorrect format"
+msgstr "لاسوند ناسمه بڼه لري DVI"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "لاسوندونه DVI"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:688
+msgid "Yes"
+msgstr "هو"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:691
+msgid "No"
+msgstr "نه"
+
+#: ../backend/pdf/ev-poppler.cc:765
+msgid "Type 1"
+msgstr "۱ ډول"
+
+#: ../backend/pdf/ev-poppler.cc:767
+msgid "Type 1C"
+msgstr "۱C ډول"
+
+#: ../backend/pdf/ev-poppler.cc:769
+msgid "Type 3"
+msgstr "۳ ډول"
+
+#: ../backend/pdf/ev-poppler.cc:771
+msgid "TrueType"
+msgstr ""
+
+#: ../backend/pdf/ev-poppler.cc:773
+msgid "Type 1 (CID)"
+msgstr "(CID) ۱ ډول"
+
+#: ../backend/pdf/ev-poppler.cc:775
+msgid "Type 1C (CID)"
+msgstr "(CID) ۱C ډول"
+
+#: ../backend/pdf/ev-poppler.cc:777
+msgid "TrueType (CID)"
+msgstr ""
+
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Unknown font type"
+msgstr "د ليکبڼې ناپېژندل شوی ډول"
+
+#: ../backend/pdf/ev-poppler.cc:805
+msgid "No name"
+msgstr "هېڅ نوم"
+
+#: ../backend/pdf/ev-poppler.cc:813
+msgid "Embedded subset"
+msgstr ""
+
+#: ../backend/pdf/ev-poppler.cc:815
+msgid "Embedded"
+msgstr "راتاو"
+
+#: ../backend/pdf/ev-poppler.cc:817
+msgid "Not embedded"
+msgstr "نا راتاو"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "لاسوندونه PDF"
+
+#: ../backend/impress/impress-document.c:296
+#, c-format
+msgid "Remote files aren't supported"
+msgstr "لر دوتنې منلې نه دي"
+
+#: ../backend/impress/impress-document.c:307
+#, c-format
+msgid "Invalid document"
+msgstr "ناسم لاسوند"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr ""
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "هېڅ تېروتنه"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "دومره ياد نشته"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "زېپ لاسليک نه شي موندلی"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "ناسم زېپ دوتنه"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr "ګڼ دوتني زېپونه منلي نه دي"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "دوتنه نه شي پرانيستلی"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "له دوتنې اومتوک نه شي لوستلی"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "په زېپ ارشيو کې دوتنه نه شي موندلی"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "ناپېژندلې تېروتنه"
+
+#: ../backend/ps/ev-spectre.c:113
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "لاسوند په لېښلو کې پاتې راغی “%s” د"
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "لاسوند په ساتلو کې پاتې راغی “%s” د"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "لاسوندونه PostScript"
+
+#: ../libdocument/ev-attachment.c:303
+#: ../libdocument/ev-attachment.c:324
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "%s :نښلن نه شي ساتلی “%s”"
+
+#: ../libdocument/ev-attachment.c:360
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "%s :نښلن نه شي پرانيستلی “%s”"
+
+#: ../libdocument/ev-attachment.c:393
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "نښلن نه شي پرانيستلی “%s”"
+
+#: ../libdocument/ev-document-factory.c:193
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "دوتنه ډول منلی نه دی (%s) %s"
+
+#: ../libdocument/ev-document-factory.c:294
+#, c-format
+msgid "Unknown MIME Type"
+msgstr "ډول MIME ناپېژندلی"
+
+#: ../libdocument/ev-document-factory.c:349
+msgid "All Documents"
+msgstr "ټول لاسوندونه"
+
+#: ../libdocument/ev-document-factory.c:381
+msgid "All Files"
+msgstr "ټولې دوتنې"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:439
+msgid "Co_nnect"
+msgstr "نښ_لېدل"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:483
+msgid "Connect _anonymously"
+msgstr "بېنومه نښلېدل_"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:492
+msgid "Connect as u_ser:"
+msgstr ":لکه ک_ارن نښلېدل"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:529
+msgid "_Username:"
+msgstr ":کارننوم_"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:533
+msgid "_Domain:"
+msgstr ":شپول_"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:538
+#: ../data/evince-password.glade.h:4
+msgid "_Password:"
+msgstr ":تېرنويې_"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:553
+msgid "_Forget password immediately"
+msgstr "دستي له ياده ويستل_"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:561
+msgid "_Remember password until you logout"
+msgstr "تېرنويې تر وتون ياد ساتل_"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:569
+msgid "_Remember forever"
+msgstr "تل ياد ساتل_"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:938
+#, c-format
+msgid "Show “_%s”"
+msgstr "ښودل “%s_”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Move on Toolbar"
+msgstr "توکپټه کې خوځول_"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Move the selected item on the toolbar"
+msgstr "ټاکل شوی توکی په توکپټه کې خوځول"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1403
+msgid "_Remove from Toolbar"
+msgstr "له توکپټې ړنګول_"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1404
+msgid "Remove the selected item from the toolbar"
+msgstr "ټاکل شوی توکی له توکپټې ړنګول"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1405
+msgid "_Delete Toolbar"
+msgstr "توکپټه ړنګول_"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1406
+msgid "Remove the selected toolbar"
+msgstr "ټاکل شوې توکپټه ړنګول"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:441
+msgid "Separator"
+msgstr "بېلند"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+msgid "Running in presentation mode"
+msgstr ""
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48
+#: ../shell/ev-window.c:4623
+msgid "Best Fit"
+msgstr "ښه برابرول"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "د مخ پلنوالی برابرول"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "۵۰٪"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "۷۰٪"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "۸۵٪"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "۱۰۰٪"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "۱۲۵٪"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "۱۵۰٪"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "۱۷۵٪"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "۲۰۰٪"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "۳۰۰٪"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "۴۰۰٪"
+
+#: ../data/evince.desktop.in.in.h:1
+#: ../shell/ev-window.c:3729
+#: ../shell/ev-window-title.c:132
+#, c-format
+msgid "Document Viewer"
+msgstr "لاسوند ليدانی"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "ګڼ لاسوندونه ليدل"
+
+#: ../data/evince-password.glade.h:1
+msgid "Password Entry"
+msgstr "تېرنويې ننوت"
+
+#: ../data/evince-password.glade.h:2
+msgid "Remember password for this session"
+msgstr "د دې ناستې لپاره تېرنويې ياد ساتل"
+
+#: ../data/evince-password.glade.h:3
+msgid "Save password in keyring"
+msgstr ""
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>:ليکوال</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>:جوړ شوی</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>:جوړوونکی</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>:بڼه</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b>:اروييونه</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>:بدل شوی</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b>:د مخونو شمېر</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr ""
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Paper Size:</b>"
+msgstr "<b>:د پاڼې کچ</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Producer:</b>"
+msgstr ""
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Security:</b>"
+msgstr "<b>:خونديتوب</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Subject:</b>"
+msgstr "<b>:سرليک</b>"
+
+#: ../data/evince-properties.glade.h:13
+msgid "<b>Title:</b>"
+msgstr "<b>:سرليک</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr ""
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+
+#: ../properties/ev-properties-main.c:111
+msgid "Document"
+msgstr "لاسوند"
+
+#: ../properties/ev-properties-view.c:182
+msgid "None"
+msgstr "هېڅ"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:207
+#: ../properties/ev-properties-view.c:369
+msgid "default:mm"
+msgstr ""
+
+#. Metric measurement (millimeters)
+#: ../properties/ev-properties-view.c:251
+#: ../properties/ev-properties-view.c:406
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f مم"
+
+#: ../properties/ev-properties-view.c:255
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f اېنچه"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:279
+#: ../properties/ev-properties-view.c:417
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "(%s) تيک ،%s"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:286
+#: ../properties/ev-properties-view.c:424
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "(%s) پسوریز ،%s"
+
+#. Imperial measurement (inches)
+#: ../properties/ev-properties-view.c:401
+#, c-format
+msgid "%.2f x %.2f in"
+msgstr "%.2f x %.2f اېنچه"
+
+#: ../shell/eggfindbar.c:158
+msgid "Search string"
+msgstr "مزی پلټل"
+
+#: ../shell/eggfindbar.c:159
+msgid "The name of the string to be found"
+msgstr "د موندل کېدونکي مزي نوم"
+
+#: ../shell/eggfindbar.c:172
+msgid "Case sensitive"
+msgstr ""
+
+#: ../shell/eggfindbar.c:173
+msgid "TRUE for a case sensitive search"
+msgstr ""
+
+#: ../shell/eggfindbar.c:180
+msgid "Highlight color"
+msgstr "ځلېدو رنګ"
+
+#: ../shell/eggfindbar.c:181
+msgid "Color of highlight for all matches"
+msgstr "د ټولو سارو لپاره د ځلېدو رنګ"
+
+#: ../shell/eggfindbar.c:187
+msgid "Current color"
+msgstr "اوسنی رنګ"
+
+#: ../shell/eggfindbar.c:188
+msgid "Color of highlight for the current match"
+msgstr "د اوسني ساري لپاره د ځلېدو رنګ"
+
+#: ../shell/eggfindbar.c:321
+msgid "Find:"
+msgstr ":لټول"
+
+#: ../shell/eggfindbar.c:330
+msgid "Find Previous"
+msgstr "مخکنی لټول"
+
+#: ../shell/eggfindbar.c:334
+#: ../shell/eggfindbar.c:337
+msgid "Find previous occurrence of the search string"
+msgstr "د پلټن مزي مخکنی ساری لټول"
+
+#: ../shell/eggfindbar.c:343
+msgid "Find Next"
+msgstr "راتلونکی لټول"
+
+#: ../shell/eggfindbar.c:347
+#: ../shell/eggfindbar.c:350
+msgid "Find next occurrence of the search string"
+msgstr "د پلټن مزي راتلونکی ساری لټول"
+
+#: ../shell/eggfindbar.c:359
+msgid "C_ase Sensitive"
+msgstr ""
+
+#: ../shell/eggfindbar.c:363
+#: ../shell/eggfindbar.c:366
+msgid "Toggle case sensitive search"
+msgstr ""
+
+#: ../shell/ev-jobs.c:702
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "%s :دوتنې په جوړولو کې پاتې راغی “%s” د"
+
+#: ../shell/ev-open-recent-action.c:71
+msgid "Open a recently used document"
+msgstr "اوس کارول شوی لاسوند پرانيستل"
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d له %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "%d له"
+
+#: ../shell/ev-password.c:88
+msgid "Password required"
+msgstr "تېرنويې اړينه ده"
+
+#: ../shell/ev-password.c:89
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr ".لاسوند کولپ دی او د پرانيستلو لپاره يې تېرنويې اړينه ده “%s”"
+
+#: ../shell/ev-password.c:154
+msgid "Enter password"
+msgstr "تېرنويې وليکئ"
+
+#: ../shell/ev-password.c:260
+#, c-format
+msgid "Password for document %s"
+msgstr "لاسوند تېرنويې %s"
+
+#: ../shell/ev-password.c:347
+msgid "Incorrect password"
+msgstr "ناسمه تېرنويې"
+
+#: ../shell/ev-password-view.c:111
+msgid "This document is locked and can only be read by entering the correct password."
+msgstr ".دا لاسوند کولپ دی او يوازې هله يې لوستلی شئ چې سمه تېرنويې وليکئ"
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "لاسوند ناکولپول_"
+
+#: ../shell/ev-properties-dialog.c:61
+msgid "Properties"
+msgstr "ځانتياوې"
+
+#: ../shell/ev-properties-dialog.c:94
+msgid "General"
+msgstr "ټولګړي"
+
+#: ../shell/ev-properties-dialog.c:104
+msgid "Fonts"
+msgstr "ليکبڼې"
+
+#: ../shell/ev-properties-fonts.c:141
+msgid "Font"
+msgstr "ليکبڼه"
+
+#: ../shell/ev-properties-fonts.c:152
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "%3d%% ...د ليکبڼې خبرتياوې ټولول کيږي"
+
+#: ../shell/ev-sidebar-attachments.c:675
+msgid "Attachments"
+msgstr "نښلن"
+
+#: ../shell/ev-sidebar-links.c:266
+#: ../shell/ev-view.c:3647
+msgid "Loading..."
+msgstr "...لېښل کيږي"
+
+#: ../shell/ev-sidebar-links.c:339
+msgid "Print..."
+msgstr "...چاپول"
+
+#: ../shell/ev-sidebar-links.c:719
+msgid "Index"
+msgstr "لړيال"
+
+#: ../shell/ev-sidebar-thumbnails.c:727
+msgid "Thumbnails"
+msgstr "بټه نوکي"
+
+#: ../shell/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "بره رغښتل"
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "ښکته رغښتل"
+
+#: ../shell/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "ليد بره رغښتل"
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "ليد ښکته رغښتل"
+
+#: ../shell/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "لاسوند ليد"
+
+#: ../shell/ev-view.c:1443
+msgid "Go to first page"
+msgstr "لومړي مخ ته ورتلل"
+
+#: ../shell/ev-view.c:1445
+msgid "Go to previous page"
+msgstr "مخکني مخ ته ورتلل"
+
+#: ../shell/ev-view.c:1447
+msgid "Go to next page"
+msgstr "راتلونکي مخ ته ورتلل"
+
+#: ../shell/ev-view.c:1449
+msgid "Go to last page"
+msgstr "وروستي مخ ته ورتلل"
+
+#: ../shell/ev-view.c:1451
+msgid "Go to page"
+msgstr "مخ ته ورتلل"
+
+#: ../shell/ev-view.c:1453
+msgid "Find"
+msgstr "لټول"
+
+#: ../shell/ev-view.c:1481
+#, c-format
+msgid "Go to page %s"
+msgstr "مخ ته ورتلل %s"
+
+#: ../shell/ev-view.c:1487
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "ته ورتلل %s دوتنه کې “%s” په"
+
+#: ../shell/ev-view.c:1490
+#, c-format
+msgid "Go to file “%s”"
+msgstr "دوتنې نه ورتلل “%s”"
+
+#: ../shell/ev-view.c:1498
+#, c-format
+msgid "Launch %s"
+msgstr "پېلول %s"
+
+#: ../shell/ev-view.c:2450
+msgid "End of presentation. Press Escape to exit."
+msgstr ""
+
+#: ../shell/ev-view.c:3374
+msgid "Jump to page:"
+msgstr ":مخ ته ټوپ وهل"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:5158
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../shell/ev-view.c:5167
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr ""
+
+#: ../shell/ev-window.c:785
+#, c-format
+msgid "Page %s - %s"
+msgstr "%s - %s مخ"
+
+#: ../shell/ev-window.c:787
+#, c-format
+msgid "Page %s"
+msgstr "مخ %s"
+
+#: ../shell/ev-window.c:1200
+msgid "The document contains no pages"
+msgstr "لاسوند مخونه نه لري"
+
+#: ../shell/ev-window.c:1432
+#: ../shell/ev-window.c:1507
+msgid "Unable to open document"
+msgstr "لاسوند نه شي پرانيستلی"
+
+#: ../shell/ev-window.c:1704
+msgid "Open Document"
+msgstr "لاسوند پرانيستل"
+
+#: ../shell/ev-window.c:1765
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr ""
+
+#: ../shell/ev-window.c:1794
+msgid "Cannot open a copy."
+msgstr "لمېسه نه شي پرانيستلی"
+
+#: ../shell/ev-window.c:2038
+#: ../shell/ev-window.c:2088
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr ".ونه ساتل شوه “%s” دوتنه لکه"
+
+#: ../shell/ev-window.c:2133
+msgid "Save a Copy"
+msgstr "لمېسه ساتل"
+
+#: ../shell/ev-window.c:2254
+#: ../shell/ev-window.c:3430
+msgid "Failed to print document"
+msgstr "لاسوند چاپولو کې پاتې راغی"
+
+#: ../shell/ev-window.c:2419
+msgid "Printing is not supported on this printer."
+msgstr ".په دې چاپګر باندې چاپونه منلې نه ده"
+
+#: ../shell/ev-window.c:2545
+#: ../shell/ev-window.c:4415
+msgid "Print"
+msgstr "چاپول"
+
+#: ../shell/ev-window.c:3183
+msgid "Toolbar Editor"
+msgstr "توکپټه سمونګر"
+
+#: ../shell/ev-window.c:3725
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+".لاسوند ليدانی\n"
+"کاروي (%s) %s چې پاپلر"
+
+#: ../shell/ev-window.c:3753
+msgid "Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:3757
+msgid "Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:3761
+msgid "You should have received a copy of the GNU General Public License along with Evince; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+
+#: ../shell/ev-window.c:3785
+#: ../shell/main.c:350
+msgid "Evince"
+msgstr "اېوېنس"
+
+#: ../shell/ev-window.c:3788
+msgid "© 1996-2007 The Evince authors"
+msgstr "چاپرښتې ۱۹۹۶-۲۰۰۷ د اېوېنس ليکوالان"
+
+#: ../shell/ev-window.c:3794
+msgid "translator-credits"
+msgstr ""
+"Zabeeh Khan <[email protected]>\n"
+"The Pathanisation Project <[email protected]>"
+
+#: ../shell/ev-window.c:4327
+msgid "_File"
+msgstr "دوتنه_"
+
+#: ../shell/ev-window.c:4328
+msgid "_Edit"
+msgstr "سمون_"
+
+#: ../shell/ev-window.c:4329
+msgid "_View"
+msgstr "ليد_"
+
+#: ../shell/ev-window.c:4330
+msgid "_Go"
+msgstr "ورتګ_"
+
+#: ../shell/ev-window.c:4331
+msgid "_Help"
+msgstr "مرسته_"
+
+#. File menu
+#: ../shell/ev-window.c:4334
+#: ../shell/ev-window.c:4513
+#: ../shell/ev-window.c:4585
+msgid "_Open..."
+msgstr "...پرانيستل_"
+
+#: ../shell/ev-window.c:4335
+#: ../shell/ev-window.c:4586
+msgid "Open an existing document"
+msgstr "شته لاسوند پرانيستل"
+
+#: ../shell/ev-window.c:4337
+msgid "Op_en a Copy"
+msgstr "لمېسه پر_انيستل"
+
+#: ../shell/ev-window.c:4338
+msgid "Open a copy of the current document in a new window"
+msgstr "د اوسني لاسوند يوه لمېسه په نوې کړکۍ کې پرانيستل"
+
+#: ../shell/ev-window.c:4340
+#: ../shell/ev-window.c:4515
+msgid "_Save a Copy..."
+msgstr "...لمېسه ساتل_"
+
+#: ../shell/ev-window.c:4341
+msgid "Save a copy of the current document"
+msgstr "د اوسني لاسوند يوه لمېسه ساتل"
+
+#: ../shell/ev-window.c:4343
+msgid "Print Set_up..."
+msgstr "...مخ امس_ته"
+
+#: ../shell/ev-window.c:4344
+msgid "Setup the page settings for printing"
+msgstr "د چاپولو لپاره د مخ امستنې امستل"
+
+#: ../shell/ev-window.c:4346
+msgid "_Print..."
+msgstr "...چاپول_"
+
+#: ../shell/ev-window.c:4347
+#: ../shell/ev-window.c:4416
+msgid "Print this document"
+msgstr "دا لاسوند چاپول"
+
+#: ../shell/ev-window.c:4349
+msgid "P_roperties"
+msgstr "ځ_انتياوې"
+
+#: ../shell/ev-window.c:4357
+msgid "Select _All"
+msgstr "ټول ټاکل_"
+
+#: ../shell/ev-window.c:4359
+msgid "_Find..."
+msgstr "...لټول_"
+
+#: ../shell/ev-window.c:4360
+msgid "Find a word or phrase in the document"
+msgstr "په لاسوند کې کومه ويې يا څرګندۍ لټول"
+
+#: ../shell/ev-window.c:4362
+msgid "Find Ne_xt"
+msgstr "را_تلونکی لټول"
+
+#: ../shell/ev-window.c:4364
+msgid "Find Pre_vious"
+msgstr "مخک_نی لټول"
+
+#: ../shell/ev-window.c:4366
+msgid "T_oolbar"
+msgstr "ت_وکپټه"
+
+#: ../shell/ev-window.c:4368
+msgid "Rotate _Left"
+msgstr "کيڼ چورلول_"
+
+#: ../shell/ev-window.c:4370
+msgid "Rotate _Right"
+msgstr "ښي چورلول_"
+
+#: ../shell/ev-window.c:4375
+msgid "Enlarge the document"
+msgstr "لاسوند لويول"
+
+#: ../shell/ev-window.c:4378
+msgid "Shrink the document"
+msgstr "لاسوند وړول"
+
+#: ../shell/ev-window.c:4380
+msgid "_Reload"
+msgstr "بيالېښل_"
+
+#: ../shell/ev-window.c:4381
+msgid "Reload the document"
+msgstr "لاسوند بيالېښل"
+
+#: ../shell/ev-window.c:4384
+msgid "Auto_scroll"
+msgstr "خپله رغښتل"
+
+#. Go menu
+#: ../shell/ev-window.c:4388
+msgid "_Previous Page"
+msgstr "مخکنی مخ_"
+
+#: ../shell/ev-window.c:4389
+msgid "Go to the previous page"
+msgstr "مخکني مخ ته ورتلل"
+
+#: ../shell/ev-window.c:4391
+msgid "_Next Page"
+msgstr "راتلونکی مخ_"
+
+#: ../shell/ev-window.c:4392
+msgid "Go to the next page"
+msgstr "راتلونکي مخ ته ورتلل"
+
+#: ../shell/ev-window.c:4394
+msgid "_First Page"
+msgstr "لومړی مخ_"
+
+#: ../shell/ev-window.c:4395
+msgid "Go to the first page"
+msgstr "لومړي مخ ته ورتلل"
+
+#: ../shell/ev-window.c:4397
+msgid "_Last Page"
+msgstr "وروستی مخ_"
+
+#: ../shell/ev-window.c:4398
+msgid "Go to the last page"
+msgstr "وروستي مخ ته ورتلل"
+
+#. Help menu
+#: ../shell/ev-window.c:4402
+msgid "_Contents"
+msgstr "منځپانګې_"
+
+#: ../shell/ev-window.c:4405
+msgid "_About"
+msgstr "په اړه_"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4409
+msgid "Leave Fullscreen"
+msgstr "ټوله پرده پرېښودل"
+
+#: ../shell/ev-window.c:4410
+msgid "Leave fullscreen mode"
+msgstr "د ټولې پردې اکر پرېښودل"
+
+#: ../shell/ev-window.c:4412
+msgid "Start Presentation"
+msgstr ""
+
+#: ../shell/ev-window.c:4413
+msgid "Start a presentation"
+msgstr ""
+
+#. View Menu
+#: ../shell/ev-window.c:4469
+msgid "_Toolbar"
+msgstr "توکپټه_"
+
+#: ../shell/ev-window.c:4470
+msgid "Show or hide the toolbar"
+msgstr "توکپټه ښودل يا پټول"
+
+#: ../shell/ev-window.c:4472
+msgid "Side _Pane"
+msgstr "څنګ _چوکاټ"
+
+#: ../shell/ev-window.c:4473
+msgid "Show or hide the side pane"
+msgstr "د څنګ چوکاټ ښودل يا پټول"
+
+#: ../shell/ev-window.c:4475
+msgid "_Continuous"
+msgstr "پرله پسې_"
+
+#: ../shell/ev-window.c:4476
+msgid "Show the entire document"
+msgstr "ټول لاسوند ښودل"
+
+#: ../shell/ev-window.c:4478
+msgid "_Dual"
+msgstr "دوه_"
+
+#: ../shell/ev-window.c:4479
+msgid "Show two pages at once"
+msgstr "په يو مهال دوه مخه ښودل"
+
+#: ../shell/ev-window.c:4481
+msgid "_Fullscreen"
+msgstr "ټوله پرده_"
+
+#: ../shell/ev-window.c:4482
+msgid "Expand the window to fill the screen"
+msgstr "کړکۍ غځول چې پرده ډکه کړي"
+
+#: ../shell/ev-window.c:4484
+msgid "Pre_sentation"
+msgstr ""
+
+#: ../shell/ev-window.c:4485
+msgid "Run document as a presentation"
+msgstr ""
+
+#: ../shell/ev-window.c:4487
+msgid "_Best Fit"
+msgstr "ښه برابرول_"
+
+#: ../shell/ev-window.c:4488
+msgid "Make the current document fill the window"
+msgstr "په اوسني لاسوند کړکۍ ډکول"
+
+#: ../shell/ev-window.c:4490
+msgid "Fit Page _Width"
+msgstr "د مخ _پلنوالی برابرول"
+
+#: ../shell/ev-window.c:4491
+msgid "Make the current document fill the window width"
+msgstr "په اوسني لاسوند د کړکۍ پلنوالی ډکول"
+
+#. Links
+#: ../shell/ev-window.c:4498
+msgid "_Open Link"
+msgstr "تړنه پرانيستل"
+
+#: ../shell/ev-window.c:4500
+msgid "_Go To"
+msgstr "ته ورتګ_"
+
+#: ../shell/ev-window.c:4502
+msgid "Open in New _Window"
+msgstr "په نوې _کړکۍ کې پرانيستل"
+
+#: ../shell/ev-window.c:4504
+msgid "_Copy Link Address"
+msgstr "د تړنې پته لمېسل_"
+
+#: ../shell/ev-window.c:4506
+msgid "_Save Image As..."
+msgstr "...انځور ساتل په_"
+
+#: ../shell/ev-window.c:4508
+msgid "Copy _Image"
+msgstr "انځور لمېسل_"
+
+#: ../shell/ev-window.c:4547
+msgid "Page"
+msgstr "مخ"
+
+#: ../shell/ev-window.c:4548
+msgid "Select Page"
+msgstr "مخ ټاکل"
+
+#: ../shell/ev-window.c:4559
+msgid "Zoom"
+msgstr "لويول"
+
+#: ../shell/ev-window.c:4561
+msgid "Adjust the zoom level"
+msgstr "د لويوالي کچه برابرول"
+
+#: ../shell/ev-window.c:4571
+msgid "Navigation"
+msgstr "چلونه"
+
+#: ../shell/ev-window.c:4573
+msgid "Back"
+msgstr "شاته"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:4576
+msgid "Move across visited pages"
+msgstr "په کتل شويو مخونو تېرېدل"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4606
+msgid "Previous"
+msgstr "مخکنی"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4611
+msgid "Next"
+msgstr "راتلونکی"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4615
+msgid "Zoom In"
+msgstr "لوډېرول"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4619
+msgid "Zoom Out"
+msgstr "لوکمول"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4627
+msgid "Fit Width"
+msgstr "پلنوالی برابرول"
+
+#: ../shell/ev-window.c:4832
+msgid "Unable to open external link"
+msgstr "بهرنۍ تړنه نه شي پرانيستلی"
+
+#: ../shell/ev-window.c:4993
+msgid "Couldn't find appropriate format to save image"
+msgstr "د انځور ساتلو لپاره سمه بڼه ونه موندل شوه"
+
+#: ../shell/ev-window.c:5033
+msgid "The image could not be saved."
+msgstr ".انځور نه شي ساتل کېدی"
+
+#: ../shell/ev-window.c:5065
+msgid "Save Image"
+msgstr "انځور ساتل"
+
+#: ../shell/ev-window.c:5124
+msgid "Unable to open attachment"
+msgstr "نښلن نه شي پرانيستلی"
+
+#: ../shell/ev-window.c:5176
+msgid "The attachment could not be saved."
+msgstr ".نښلن نه شي ساتل کېدی"
+
+#: ../shell/ev-window.c:5221
+msgid "Save Attachment"
+msgstr "نښلن ساتل"
+
+#: ../shell/ev-window-title.c:145
+#, c-format
+msgid "%s - Password Required"
+msgstr "تېرنويې اړينه ده - %s"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "په شاتاړي"
+
+#: ../shell/main.c:59
+msgid "The page of the document to display."
+msgstr ".د لاسوند هغه مخ چې وښودل شي"
+
+#: ../shell/main.c:59
+msgid "PAGE"
+msgstr "مخ"
+
+#: ../shell/main.c:60
+msgid "Run evince in fullscreen mode"
+msgstr "اېوېنس په ټوله پرده اکر کې ځغلول"
+
+#: ../shell/main.c:61
+msgid "Run evince in presentation mode"
+msgstr ""
+
+#: ../shell/main.c:62
+msgid "Run evince as a previewer"
+msgstr "اېوېنس لکه مخليدونکی ځغلول"
+
+#: ../shell/main.c:63
+msgid "The word or phrase to find in the document"
+msgstr "هغه ويې يا څرګندۍ چې دې لاسوند کې ولټول شي"
+
+#: ../shell/main.c:63
+msgid "STRING"
+msgstr "مزی"
+
+#: ../shell/main.c:66
+msgid "[FILE...]"
+msgstr "[...دوتنه]"
+
+#: ../shell/main.c:333
+msgid "MATE Document Viewer"
+msgstr "جنومي لاسوند ليدانی"
+
+#: ../shell/main.c:395
+msgid "Evince Document Viewer"
+msgstr "اېوېنس لاسوند ليدانی"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid "Boolean options available, true enables thumbnailing and false disables the creation of new thumbnails"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "لاسوندونو بټه نوکونه توانول PDF د"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "لاسوندونو لپاره بټه نوکی بولۍ PDF د"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid "Valid command plus arguments for the PDF Document thumbnailer. See caja thumbnailer documentation for more information."
+msgstr ""
+
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 00000000..93f3b9b1
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,2105 @@
+# evince's Portuguese translation.
+# Copyright © 2005, 2006, 2007, 2008, 2009, 2010 evince
+# This file is distributed under the same license as the evince package.
+# Duarte Loreto <[email protected]>, 2005, 2006, 2007, 2008, 2009, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 2.32\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-09-11 21:06+0100\n"
+"PO-Revision-Date: 2010-09-11 21:15+0000\n"
+"Last-Translator: Duarte Loreto <[email protected]>\n"
+"Language-Team: Portuguese <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Erro ao iniciar o comando “%s” de forma a descomprimir o livro de banda "
+"desenhada: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "O comando “%s” falhou na descompressão do livro de banda desenhada."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "O comando “%s” não terminou normalmente."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Não é um tipo MIME de um livro de banda desenhada: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Incapaz de encontrar um comando apropriado para descomprimir este tipo de "
+"livros de banda desenhada"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Tipo MIME Desconhecido"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Ficheiro corrompido"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Nenhum ficheiro no arquivo"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Nenhuma imagem encontrada no arquivo %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Ocorreu um erro ao apagar “%s”."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Erro %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Livros de Banda Desenhada"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "Documento DjVu tem formato incorrecto"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"O documento é composto por vários ficheiros. Um ou mais desses ficheiros não "
+"está acessível."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Documentos DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Documento DVI tem formato incorrecto"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Documentos DVI"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Este trabalho encontra-se no Domínio Público"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Sim"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Não"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Tipo 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Tipo 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Tipo 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Tipo 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Tipo 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Tipo de fonte desconhecido"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Nenhum nome"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Subconjunto embutido"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Embutido"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Não embutido"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Documentos PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Documento inválido"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Slides Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Nenhum erro"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Memória insuficiente"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Incapaz de encontrar a assinatura ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Ficheiro ZIP inválido"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "ZIPs multi-ficheiro não são suportados"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Incapaz de abrir o ficheiro"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Incapaz de ler dados do ficheiro"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Incapaz de encontrar ficheiro no arquivo ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Erro desconhecido"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Falha ao ler o documento “%s”"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Falha ao gravar o documento “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Documentos PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Incapaz de gravar o anexo “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Incapaz de abrir o anexo “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Incapaz de abrir o anexo “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Tipo de ficheiro %s (%s) não é suportado"
+
+# 48x48/emblems/emblem-documents.icon.in.h:1
+# 48x48/emblems/emblem-documents.icon.in.h:1
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Todos os Documentos"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Todos os ficheiros"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Falha ao criar um ficheiro temporário: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Falha ao criar um directório temporário: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Ficheiro não é um ficheiro .desktop válido"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Versão '%s' de ficheiro desktop desconhecida"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "A iniciar %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "A aplicação não aceita documentos na linha de comando"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Opção de arranque desconhecida: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"Não é possível indicar URIs numa entrada de desktop do tipo 'Type=Link'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Não é um item iniciável"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Desactivar a ligação ao gestor de sessões"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Especifique o ficheiro que contém a configuração gravada"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FICHEIRO"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Especifique o ID de gestão de sessão"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opções de gestão de sessão:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Apresentar as opções de gestão de sessão"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Apresentar “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Mover na Barra de Ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Mover o item seleccionado na barra de ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Remover da Barra de Ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Remover o item seleccionado da barra de ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Apagar a Barra de Ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Remover a barra de ferramentas seleccionada"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Separador"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5759
+msgid "Best Fit"
+msgstr "Melhor Ajuste"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Caber à Largura na Página"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4552
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Visualizador de Documento"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Visualizar documentos multi-páginas"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Ignorar as restrições do documento"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Ignorar as restrições do documento tais como restrição à cópia ou impressão."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Apagar o ficheiro temporário"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Ficheiro de definições de impressão"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Antevisão de Documentos do MATE"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3183
+msgid "Failed to print document"
+msgstr "Falha ao imprimir o documento"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Incapaz de encontrar a impressora '%s' seleccionada"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5474
+msgid "_Previous Page"
+msgstr "Página _Anterior"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5475
+msgid "Go to the previous page"
+msgstr "Ir para a página anterior"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5477
+msgid "_Next Page"
+msgstr "Página _Seguinte"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5478
+msgid "Go to the next page"
+msgstr "Ir para a página seguinte"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5461
+msgid "Enlarge the document"
+msgstr "Ampliar o documento"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5464
+msgid "Shrink the document"
+msgstr "Reduzir o documento"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Imprimir"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5430
+msgid "Print this document"
+msgstr "Imprimir este documento"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5576
+msgid "_Best Fit"
+msgstr "_Melhor Ajuste"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5577
+msgid "Make the current document fill the window"
+msgstr "Faz o documento actual encher a janela"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5579
+msgid "Fit Page _Width"
+msgstr "Caber à _Largura na Página"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5580
+msgid "Make the current document fill the window width"
+msgstr "Faz o documento actual encher a janela à largura"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5681
+msgid "Page"
+msgstr "Página"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5682
+msgid "Select Page"
+msgstr "Seleccionar a Página"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Documento"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Título:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Localização:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Assunto:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Autor:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Palavras Chave:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Produtor:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Criador:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Criado:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Alterado:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Número de Páginas:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimizado:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Formato:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Segurança:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Tamanho do Papel:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Nenhum"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "omissão:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f pol"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Retrato (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Paisagem (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d de %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "de %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "A Ler…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "A preparar a impressão…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "A terminar…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "A imprimir a página %d de %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Impressão não é suportada nesta impressora."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Selecção de página inválida"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Aviso"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "A selecção de intervalo de impressão não inclui qualquer página"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Escala de Página:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Redimensionar para a Área de Impressão"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Fazer Caber na Área de Impressão"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Escalar as páginas do documento para caberem na página de impressão "
+"seleccionada. Seleccione de entre uma das seguintes:\n"
+"\n"
+"• \"None\": Não é realizado redimensionamento de página.\n"
+"\n"
+"• \"Redimensionar para a Área de Impressão\": Páginas de documento maiores "
+"do que a área de impressão são reduzidas para caberem na página impressa.\n"
+"\n"
+"• \"Fazer Caber na Área de Impressão\": As páginas do documento são "
+"ampliadas ou reduzidas para encherem a totalidade da página impressa.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Centrar e Rodar Automaticamente"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Rodar a orientação de cada página do documento para coincidir com a "
+"orientação da página na impressora. As páginas do documento serão centradas "
+"na página impressa."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr ""
+"Seleccionar o tamanho da página utilizando o tamanho da página do documento"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Quando activo, cada página será impressa no mesmo tamanho de papel que o "
+"utilizado na página do documento."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Gestão de Páginas"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Falha ao imprimir a página %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Rolar Acima"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Rolar Abaixo"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Rolar a Vista Acima"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Rolar a Vista Abaixo"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Vista de Documento"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Ir para a página:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Fim da apresentação. Clique para sair."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Ir para a primeira página"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Ir para a página anterior"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Ir para a página seguinte"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Ir para a última página"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Ir para a página"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Procurar"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Ir para a página %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Ir para %s no ficheiro “%s”"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Ir para o ficheiro “%s”"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Iniciar %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Procurar:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5447
+msgid "Find Pre_vious"
+msgstr "Procurar a _Anterior"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Procurar a ocorrência anterior da expressão"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5445
+msgid "Find Ne_xt"
+msgstr "Procurar a _Seguinte"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Procurar a ocorrência seguinte da expressão"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Sensível à C_apitalização"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Alternar a sensibilidade à capitalização da procura"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Ícone:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Nota"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Comentário"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Chave"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Ajuda"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Novo Parágrafo"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Parágrafo"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Inserir"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Cruzar"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Círculo"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Propriedades da Anotação"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Cor:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Estilo:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Transparente"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Opaco"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Estado inicial da janela:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Abrir"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Fechar"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Execução em modo de apresentação"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Senha para o documento %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "A converter %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d de %d documentos convertidos"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "A converter metadados"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"O formato de metadados utilizado pelo Evince foi alterado, pelo que tem de "
+"ser migrado. Se a migração for cancelada, o repositório de metadados não irá "
+"funcionar."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Abrir um documento utilizado recentemente"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Este documento está trancado e apenas poderá ser lido após ser introduzida a "
+"senha correcta."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Destrancar Documento"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Introduza a senha"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Senha necessária"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"O documento “%s” está trancado e requer uma senha antes de poder ser aberto."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Senha:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Esquecer a senha _imediatamente"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Recordar a senha até terminar a _sessão"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "_Recordar para sempre"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Propriedades"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Geral"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Fontes"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Licença do Documento"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Fonte"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "A obter informação de fonte… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Termos de utilização"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Texto da Licença"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Informações Adicionais"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Lista"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Anotações"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Texto"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Adicionar anotação de texto"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Adicionar"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "O documento não contém quaisquer anotações"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Página %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Anexos"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Camadas"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Imprimir…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Índice"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Imagens de Referência"
+
+#: ../shell/ev-window.c:875
+#, c-format
+msgid "Page %s — %s"
+msgstr "Página %s — %s"
+
+#: ../shell/ev-window.c:877
+#, c-format
+msgid "Page %s"
+msgstr "Página %s"
+
+#: ../shell/ev-window.c:1436
+msgid "The document contains no pages"
+msgstr "O documento não contém quaisquer páginas"
+
+#: ../shell/ev-window.c:1439
+msgid "The document contains only empty pages"
+msgstr "O documento apenas contém páginas vazias"
+
+#: ../shell/ev-window.c:1642 ../shell/ev-window.c:1808
+msgid "Unable to open document"
+msgstr "Incapaz de abrir o documento"
+
+#: ../shell/ev-window.c:1779
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "A ler documento de “%s”"
+
+#: ../shell/ev-window.c:1921 ../shell/ev-window.c:2200
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "A obter o documento (%d%%)"
+
+#: ../shell/ev-window.c:1954
+msgid "Failed to load remote file."
+msgstr "Falha ao ler o ficheiro remoto."
+
+#: ../shell/ev-window.c:2144
+#, c-format
+msgid "Reloading document from %s"
+msgstr "A reler o documento de %s"
+
+#: ../shell/ev-window.c:2176
+msgid "Failed to reload document."
+msgstr "Falha ao reler o documento."
+
+#: ../shell/ev-window.c:2331
+msgid "Open Document"
+msgstr "Abrir Documento"
+
+#: ../shell/ev-window.c:2629
+#, c-format
+msgid "Saving document to %s"
+msgstr "A gravar o documento em %s"
+
+#: ../shell/ev-window.c:2632
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "A gravar o anexo em %s"
+
+#: ../shell/ev-window.c:2635
+#, c-format
+msgid "Saving image to %s"
+msgstr "A gravar a imagem em %s"
+
+#: ../shell/ev-window.c:2679 ../shell/ev-window.c:2779
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Incapaz de gravar o ficheiro como “%s”."
+
+#: ../shell/ev-window.c:2710
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "A enviar o documento (%d%%)"
+
+#: ../shell/ev-window.c:2714
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "A enviar o anexo (%d%%)"
+
+#: ../shell/ev-window.c:2718
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "A enviar a imagem (%d%%)"
+
+#: ../shell/ev-window.c:2842
+msgid "Save a Copy"
+msgstr "Gravar uma Cópia"
+
+#: ../shell/ev-window.c:3127
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d trabalho pendente na pilha"
+msgstr[1] "%d trabalhos pendentes na pilha"
+
+#: ../shell/ev-window.c:3240
+#, c-format
+msgid "Printing job “%s”"
+msgstr "A imprimir o trabalho “%s”"
+
+#: ../shell/ev-window.c:3418
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"O documento contém campos de formulário que foram preenchidos. Se não gravar "
+"uma cópia, as alterações serão definitivamente perdidas."
+
+#: ../shell/ev-window.c:3422
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"O documento contém anotações novas ou alteradas. Se não gravar uma cópia, "
+"as alterações serão definitivamente perdidas."
+
+#: ../shell/ev-window.c:3429
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Gravar uma cópia do documento “%s” antes de fechar?"
+
+#: ../shell/ev-window.c:3448
+msgid "Close _without Saving"
+msgstr "Fechar _sem Gravar"
+
+#: ../shell/ev-window.c:3452
+msgid "Save a _Copy"
+msgstr "Gravar uma _Cópia"
+
+#: ../shell/ev-window.c:3526
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Aguardar até que o trabalho de impressão “%s” termine antes de fechar?"
+
+#: ../shell/ev-window.c:3529
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Existem %d trabalhos de impressão activos. Aguardar até que a impressão "
+"termine antes de fechar?"
+
+#: ../shell/ev-window.c:3541
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Se fechar a janela, os trabalhos de impressão pendentes não serão impressos."
+
+#: ../shell/ev-window.c:3545
+msgid "Cancel _print and Close"
+msgstr "Cancelar a im_pressão e Fechar"
+
+#: ../shell/ev-window.c:3549
+msgid "Close _after Printing"
+msgstr "Fechar _após Imprimir"
+
+#: ../shell/ev-window.c:4169
+msgid "Toolbar Editor"
+msgstr "Editor de Barra de Ferramentas"
+
+#: ../shell/ev-window.c:4336
+msgid "There was an error displaying help"
+msgstr "Ocorreu um erro ao apresentar a ajuda"
+
+#: ../shell/ev-window.c:4548
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Visualizador de Documentos.\n"
+"A utilizar %s (%s)"
+
+#: ../shell/ev-window.c:4579
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince é uma aplicação livre; pode redistribuí-la e/ou alterá-la sob os "
+"termos da Licença Pública Genérica GNU tal como publicada pela Free Software "
+"Foundation; ou a versão 2 da Licença ou (à sua discrição) qualquer versão "
+"posterior.\n"
+
+#: ../shell/ev-window.c:4583
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince é distribuído na expectativa de que possa ser útil, mas SEM QUALQUER "
+"GARANTIA; sem sequer a garantia implícita de COMERCIABILIDADE ou ADEQUAÇÃO A "
+"UM DETERMINADO FIM. Consulte a Licença Pública Genérica GNU para mais "
+"detalhes.\n"
+
+#: ../shell/ev-window.c:4587
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Deverá ter recebido uma cópia da Licença Pública Genérica GNU juntamente com "
+"o Evince; caso contrário, escreva para a Free Software Foundation, Inc., 51 "
+"Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA (em inglês)\n"
+
+#: ../shell/ev-window.c:4612
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4615
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Os autores do Evince"
+
+#: ../shell/ev-window.c:4621
+msgid "translator-credits"
+msgstr "Duarte Loreto <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4887
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d encontrada nesta página"
+msgstr[1] "%d encontradas nesta página"
+
+#: ../shell/ev-window.c:4892
+msgid "Not found"
+msgstr "Nenhuma encontrada"
+
+#: ../shell/ev-window.c:4898
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "resta procurar em %3d%%"
+
+#: ../shell/ev-window.c:5413
+msgid "_File"
+msgstr "_Ficheiro"
+
+#: ../shell/ev-window.c:5414
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../shell/ev-window.c:5415
+msgid "_View"
+msgstr "_Ver"
+
+#: ../shell/ev-window.c:5416
+msgid "_Go"
+msgstr "_Ir"
+
+#: ../shell/ev-window.c:5417
+msgid "_Help"
+msgstr "_Ajuda"
+
+#. File menu
+#: ../shell/ev-window.c:5420 ../shell/ev-window.c:5721
+msgid "_Open…"
+msgstr "_Abrir…"
+
+#: ../shell/ev-window.c:5421 ../shell/ev-window.c:5722
+msgid "Open an existing document"
+msgstr "Abrir um documento existente"
+
+#: ../shell/ev-window.c:5423
+msgid "Op_en a Copy"
+msgstr "Abrir u_ma Cópia"
+
+#: ../shell/ev-window.c:5424
+msgid "Open a copy of the current document in a new window"
+msgstr "Abrir uma cópia do documento actual numa nova janela"
+
+#: ../shell/ev-window.c:5426
+msgid "_Save a Copy…"
+msgstr "_Gravar uma Cópia…"
+
+#: ../shell/ev-window.c:5427
+msgid "Save a copy of the current document"
+msgstr "Gravar uma cópia do documento actual"
+
+#: ../shell/ev-window.c:5429
+msgid "_Print…"
+msgstr "_Imprimir…"
+
+#: ../shell/ev-window.c:5432
+msgid "P_roperties"
+msgstr "P_ropriedades"
+
+#: ../shell/ev-window.c:5440
+msgid "Select _All"
+msgstr "Seleccionar _Tudo"
+
+#: ../shell/ev-window.c:5442
+msgid "_Find…"
+msgstr "_Procurar…"
+
+#: ../shell/ev-window.c:5443
+msgid "Find a word or phrase in the document"
+msgstr "Procurar uma palavra ou frase no documento"
+
+#: ../shell/ev-window.c:5449
+msgid "T_oolbar"
+msgstr "Barra de Ferramen_tas"
+
+#: ../shell/ev-window.c:5451
+msgid "Rotate _Left"
+msgstr "Rodar para a _Esquerda"
+
+#: ../shell/ev-window.c:5453
+msgid "Rotate _Right"
+msgstr "Rodar para a _Direita"
+
+#: ../shell/ev-window.c:5455
+msgid "Save Current Settings as _Default"
+msgstr "Gravar as Definições Actuais como _Omissões"
+
+#: ../shell/ev-window.c:5466
+msgid "_Reload"
+msgstr "_Reler"
+
+#: ../shell/ev-window.c:5467
+msgid "Reload the document"
+msgstr "Reler o documento"
+
+#: ../shell/ev-window.c:5470
+msgid "Auto_scroll"
+msgstr "_Rolar automaticamente"
+
+#: ../shell/ev-window.c:5480
+msgid "_First Page"
+msgstr "_Primeira Página"
+
+#: ../shell/ev-window.c:5481
+msgid "Go to the first page"
+msgstr "Ir para a primeira página"
+
+#: ../shell/ev-window.c:5483
+msgid "_Last Page"
+msgstr "Ú_ltima Página"
+
+#: ../shell/ev-window.c:5484
+msgid "Go to the last page"
+msgstr "Ir para a última página"
+
+#. Help menu
+#: ../shell/ev-window.c:5488
+msgid "_Contents"
+msgstr "_Conteúdo"
+
+#: ../shell/ev-window.c:5491
+msgid "_About"
+msgstr "_Sobre"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5495
+msgid "Leave Fullscreen"
+msgstr "Desfazer _Ecrã Completo"
+
+#: ../shell/ev-window.c:5496
+msgid "Leave fullscreen mode"
+msgstr "Deixar o modo de _ecrã completo"
+
+# 48x48/emblems/emblem-presentation.icon.in.h:1
+# 48x48/emblems/emblem-presentation.icon.in.h:1
+#: ../shell/ev-window.c:5498
+msgid "Start Presentation"
+msgstr "Iniciar a Apresentação"
+
+#: ../shell/ev-window.c:5499
+msgid "Start a presentation"
+msgstr "Iniciar uma apresentação"
+
+#. View Menu
+#: ../shell/ev-window.c:5558
+msgid "_Toolbar"
+msgstr "Barra de Ferramen_tas"
+
+#: ../shell/ev-window.c:5559
+msgid "Show or hide the toolbar"
+msgstr "Apresentar ou esconder a barra de ferramentas"
+
+#: ../shell/ev-window.c:5561
+msgid "Side _Pane"
+msgstr "_Painel Lateral"
+
+#: ../shell/ev-window.c:5562
+msgid "Show or hide the side pane"
+msgstr "Apresentar ou esconder a barra lateral"
+
+#: ../shell/ev-window.c:5564
+msgid "_Continuous"
+msgstr "_Contínuo"
+
+#: ../shell/ev-window.c:5565
+msgid "Show the entire document"
+msgstr "Apresentar todo o documento"
+
+#: ../shell/ev-window.c:5567
+msgid "_Dual"
+msgstr "_Duplo"
+
+#: ../shell/ev-window.c:5568
+msgid "Show two pages at once"
+msgstr "Apresentar duas páginas simultaneamente"
+
+#: ../shell/ev-window.c:5570
+msgid "_Fullscreen"
+msgstr "_Ecrã Completo"
+
+#: ../shell/ev-window.c:5571
+msgid "Expand the window to fill the screen"
+msgstr "Expandir a janela para encher o ecrã"
+
+# 48x48/emblems/emblem-presentation.icon.in.h:1
+# 48x48/emblems/emblem-presentation.icon.in.h:1
+#: ../shell/ev-window.c:5573
+msgid "Pre_sentation"
+msgstr "Apre_sentação"
+
+#: ../shell/ev-window.c:5574
+msgid "Run document as a presentation"
+msgstr "Executar o documento como uma apresentação"
+
+#: ../shell/ev-window.c:5582
+msgid "_Inverted Colors"
+msgstr "Cores _Invertidas"
+
+#: ../shell/ev-window.c:5583
+msgid "Show page contents with the colors inverted"
+msgstr "Apresentar o conteúdo da página com as cores invertidas"
+
+#. Links
+#: ../shell/ev-window.c:5591
+msgid "_Open Link"
+msgstr "_Abrir o Link"
+
+#: ../shell/ev-window.c:5593
+msgid "_Go To"
+msgstr "_Ir Para"
+
+#: ../shell/ev-window.c:5595
+msgid "Open in New _Window"
+msgstr "Abrir numa Nova _Janela"
+
+#: ../shell/ev-window.c:5597
+msgid "_Copy Link Address"
+msgstr "_Copiar o Endereço do Link"
+
+#: ../shell/ev-window.c:5599
+msgid "_Save Image As…"
+msgstr "_Gravar a Imagem Como…"
+
+#: ../shell/ev-window.c:5601
+msgid "Copy _Image"
+msgstr "Copiar _Imagem"
+
+#: ../shell/ev-window.c:5603
+msgid "Annotation Properties…"
+msgstr "Propriedades da Anotação…"
+
+#: ../shell/ev-window.c:5608
+msgid "_Open Attachment"
+msgstr "_Abrir o Anexo"
+
+#: ../shell/ev-window.c:5610
+msgid "_Save Attachment As…"
+msgstr "_Gravar o Anexo Como…"
+
+#: ../shell/ev-window.c:5695
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../shell/ev-window.c:5697
+msgid "Adjust the zoom level"
+msgstr "Ajustar o nível de zoom"
+
+#: ../shell/ev-window.c:5707
+msgid "Navigation"
+msgstr "Navegação"
+
+#: ../shell/ev-window.c:5709
+msgid "Back"
+msgstr "Retroceder"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5712
+msgid "Move across visited pages"
+msgstr "Mover por entre as páginas visitadas"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5742
+msgid "Previous"
+msgstr "Anterior"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5747
+msgid "Next"
+msgstr "Seguinte"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5751
+msgid "Zoom In"
+msgstr "Aproximar"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5755
+msgid "Zoom Out"
+msgstr "Afastar"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5763
+msgid "Fit Width"
+msgstr "Caber à Largura"
+
+#: ../shell/ev-window.c:5908 ../shell/ev-window.c:5925
+msgid "Unable to launch external application."
+msgstr "Incapaz de iniciar uma aplicação externa."
+
+#: ../shell/ev-window.c:5982
+msgid "Unable to open external link"
+msgstr "Incapaz de abrir uma ligação externa"
+
+#: ../shell/ev-window.c:6149
+msgid "Couldn't find appropriate format to save image"
+msgstr "Incapaz de encontrar o formato apropriado para gravar a imagem"
+
+#: ../shell/ev-window.c:6191
+msgid "The image could not be saved."
+msgstr "Incapaz de gravar a imagem."
+
+#: ../shell/ev-window.c:6223
+msgid "Save Image"
+msgstr "Gravar a Imagem"
+
+#: ../shell/ev-window.c:6351
+msgid "Unable to open attachment"
+msgstr "Incapaz de abrir o anexo"
+
+#: ../shell/ev-window.c:6404
+msgid "The attachment could not be saved."
+msgstr "Incapaz de gravar o anexo."
+
+#: ../shell/ev-window.c:6449
+msgid "Save Attachment"
+msgstr "Gravar o Anexo"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Senha Necessária"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Por extensão"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Visualizador de Documentos do MATE"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "A etiqueta de página do documento a apresentar."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "PÁGINA"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "O número da página do documento a apresentar."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NÚMERO"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Executar o evince modo de ecrã completo"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Executar o evince em modo de apresentação"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Executar o evince como um antevisor"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "A palavra ou frase a procurar no documento"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "EXPRESSÃO"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FICHEIRO…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Opções boleanas disponíveis: verdadeiro activa as imagens de referência e "
+"falso desactiva a criação de novas imagens de referência"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Activar as imagens de referência de Documentos PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Comando de criação de imagens de referência para Documentos PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Comando válido e argumentos para a aplicação de geração de imagens de "
+"referência de Documentos PDF. Consulte a documentação de imagens de "
+"referência do Caja para mais informações."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "Config_uração de Página…"
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Configurar as definições de página para impressão"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "Documento DJVU tem formato incorrecto"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "Falha ao criar o ficheiro “%s”: %s"
+
+#~ msgid "Search string"
+#~ msgstr "Procurar expressão"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "O nome da expressão a ser procurada"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Sensibilidade à capitalização"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "VERDADEIRO para uma procura sensível à capitalização"
+
+#~ msgid "Highlight color"
+#~ msgstr "Cor de realce"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "A cor de realce de todas as coincidências"
+
+#~ msgid "Current color"
+#~ msgstr "Cor actual"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Cor de realce para a coincidência actual"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "Recuperar os documentos anteriores?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Parece que o Evince terminou inesperadamente da última vez que foi "
+#~ "executado. Pode recuperar os documentos abertos."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_Não Recuperar"
+
+#~ msgid "_Recover"
+#~ msgstr "_Recuperar"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Recuperação de Erro"
+
+#~ msgid "Print..."
+#~ msgstr "Imprimir..."
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "Incapaz de criar ligação simbólica “%s”: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "Incapaz de abrir uma cópia."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "Gravar uma _Cópia..."
+
+#~ msgid "_Print..."
+#~ msgstr "Im_primir..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Procurar..."
+
+#~ msgid "Co_nnect"
+#~ msgstr "_Ligar"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "Ligar _anonimamente"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Ligar como utili_zador:"
+
+#~ msgid "_Username:"
+#~ msgstr "_Utilizador:"
+
+#~ msgid "_Domain:"
+#~ msgstr "_Domínio:"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "_Esquecer a senha imediatamente"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_Recordar a senha até terminar a sessão"
+
+#~ msgid "_Remember forever"
+#~ msgstr "_Recordar para sempre"
+
+#~ msgid "File not available"
+#~ msgstr "Ficheiro indisponível"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "Não são suportados ficheiros remotos"
+
+#~ msgid "Password Entry"
+#~ msgstr "Introdução de Senha"
+
+#~ msgid "Remember password for this session"
+#~ msgstr "Recordar a senha para esta sessão"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "Gravar a senha no chaveiro"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f pol"
+
+#~ msgid "Find Previous"
+#~ msgstr "Procurar Anterior"
+
+#~ msgid "Find Next"
+#~ msgstr "Procurar Seguinte"
+
+#~ msgid "Incorrect password"
+#~ msgstr "Senha incorrecta"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Visualizador de Documentos Evince"
+
+#~ msgid "BBox"
+#~ msgstr "CaixaB"
+
+#~ msgid "Letter"
+#~ msgstr "Letter"
+
+#~ msgid "Tabloid"
+#~ msgstr "Jornal"
+
+#~ msgid "Ledger"
+#~ msgstr "Diário"
+
+#~ msgid "Legal"
+#~ msgstr "Legal"
+
+#~ msgid "Statement"
+#~ msgstr "Depoimento"
+
+#~ msgid "Executive"
+#~ msgstr "Executive"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Fólio"
+
+#~ msgid "Quarto"
+#~ msgstr "Quarto"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "Incapaz de abrir o ficheiro “%s”."
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "Falha ao ler o documento “%s”. Não foi encontrado o interpretador "
+#~ "ghostscript no caminho"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "Postscript Encapsulado"
+
+#~ msgid "PostScript"
+#~ msgstr "PostScript"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "Falha no interpretador."
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "Tipo MIME não suportado: “%s”"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "A geração de PDF não é suportada"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "Estava a tentar imprimir para uma impressora utilizando o controlador “%"
+#~ "s”.Esta aplicação requer um controlador de impressora PostScript."
+
+#~ msgid "Pages"
+#~ msgstr "Páginas"
+
+#~ msgid "Images"
+#~ msgstr "Imagens"
+
+#~ msgid "Open “%s”"
+#~ msgstr "Abrir “%s”"
+
+#~ msgid "Empty"
+#~ msgstr "Vazio"
+
+#~ msgid "Invalid URI: “%s”"
+#~ msgstr "URI inválido: “%s”"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "No document loaded."
+#~ msgstr "Nenhum documento lido."
+
+#~ msgid "File is not readable."
+#~ msgstr "Ficheiro ilegível."
+
+#~ msgid "Document loaded."
+#~ msgstr "Documento lido."
+
+#~ msgid "Broken pipe."
+#~ msgstr "Canal quebrado."
+
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "Erro ao descomprimir o ficheiro “%s”:\n"
+
+#~ msgid "_Previous"
+#~ msgstr "_Anterior"
+
+#~ msgid "_Next"
+#~ msgstr "_Seguinte"
+
+#~ msgid "The \"Find\" feature will not work with this document"
+#~ msgstr ""
+#~ "A funcionalidade de \"Procurar\" estará indisponível neste documento"
+
+#~ msgid "Searching for text is only supported for PDF documents."
+#~ msgstr "Procurar por expressões apenas é suportado em documentos PDF."
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "Default sidebar size"
+#~ msgstr "Tamanho por omissão da barra lateral"
+
+#~ msgid "Show sidebar by default"
+#~ msgstr "Por omissão apresentar a barra lateral"
+
+#~ msgid "Show statusbar by default"
+#~ msgstr "Por omissão apresentar barra estados"
+
+#~ msgid "Show toolbar by default"
+#~ msgstr "Por omissão apresentar a barra de ferramentas"
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. The "
+#~ "default size sets the sidebar's width in pixels based from the side of "
+#~ "the window. Any integer will be accepted. The sidebar will never shrink "
+#~ "smaller than the size of the text required to display Thumbnails or "
+#~ "Index. Large values will cause the sidebar to take up as much of the page "
+#~ "display area as possible relative to the window's size."
+#~ msgstr ""
+#~ "A barra lateral é a zona lateral que contém as listas de Índice e Imagens "
+#~ "de Referência. O tamanho por omissão define a largura em pixels da barra "
+#~ "lateral a partir do lado da janela. Qualquer número inteiro será aceite. "
+#~ "A barra lateral nunca será menor do que o tamanho do texto necessário "
+#~ "para apresentar Imagens de Referência ou Índice. Valores maiores irão "
+#~ "fazer com que a barra lateral ocupe tanto espaço da área de apresentação "
+#~ "como possível, relativamente ao tamanho da janela."
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. Two "
+#~ "boolean options, true makes sidebar visible by default while false makes "
+#~ "sidebar not visible by default"
+#~ msgstr ""
+#~ "A barra lateral é a zona lateral que contém as listas de Índice e Imagens "
+#~ "de Referência. Duas opções boleanas, verdadeiro torna a barra lateral "
+#~ "visível por omissão enquanto que falso a torna escondida por omissão"
+
+#~ msgid ""
+#~ "Statusbar is the standard bottom bar that display additional information "
+#~ "about links and other actions. Two boolean options, true makes the "
+#~ "statusbar visible by default while false makes sidebar not visible by "
+#~ "default."
+#~ msgstr ""
+#~ "A barra de estados é a barra inferior standard que apresenta informação "
+#~ "adicional sobre links e outras acções. Duas opções boleanas, verdadeiro "
+#~ "torna a barra de estados visível por omissão enquanto que falso a torna "
+#~ "escondida por omissão."
+
+#~ msgid ""
+#~ "Toolbar is the top bar that contains navigation and zoom controls. Two "
+#~ "boolean options, true makes toolbar visible by default while false makes "
+#~ "toolbar not visible by default."
+#~ msgstr ""
+#~ "A barra de ferramentas é a barra superior que contém controlos de "
+#~ "navegação e zoom. Duas opções boleanas, verdadeiro torna a barra lateral "
+#~ "visível por omissão enquanto que falso a torna escondida por omissão."
+
+#~ msgid "Unable to find glade file"
+#~ msgstr "Incapaz de encontrar o ficheiro glade"
+
+#~ msgid ""
+#~ "The glade file, %s, cannot be found. Please check that your installation "
+#~ "is complete."
+#~ msgstr ""
+#~ "Incapaz de encontrar o ficheiro glade %s. Certifique-se de que a "
+#~ "instalação desta aplicação está correctamente realizada."
+
+#~ msgid "Document Viewer - Password Required"
+#~ msgstr "Visualizador de Documento - Senha Necessária"
+
+#~ msgid "Save the current document with a new filename"
+#~ msgstr "Gravar o documento actual com um novo nome de ficheiro"
+
+#~ msgid "View the properties of this document"
+#~ msgstr "Visualizar as propriedades deste documento"
+
+#~ msgid "Close this window"
+#~ msgstr "Fechar esta janela"
+
+#~ msgid "Copy text from the document"
+#~ msgstr "Copiar texto deste documento"
+
+#~ msgid "Select the entire page"
+#~ msgstr "Seleccionar a página toda"
+
+#~ msgid "Customize the toolbar"
+#~ msgstr "Personalizar a barra de ferramentas"
+
+#~ msgid "Rotate the document to the left"
+#~ msgstr "Rodar o documento para a esquerda"
+
+#~ msgid "Rotate the document to the right"
+#~ msgstr "Rodar o documento para a direita"
+
+#~ msgid "Display help for the viewer application"
+#~ msgstr "Apresentar a ajuda para a aplicação de visualização"
+
+#~ msgid "Display credits for the document viewer creators"
+#~ msgstr "Apresentar créditos dos criadores da aplicação de visualização"
+
+#~ msgid "Scroll one page forward"
+#~ msgstr "Rolar uma página em frente"
+
+#~ msgid "Scroll one page backward"
+#~ msgstr "Rolar uma página atrás"
+
+#~ msgid "Focus the page selector"
+#~ msgstr "Foco sobre o selector de páginas"
+
+#~ msgid "Go ten pages backward"
+#~ msgstr "Retroceder dez páginas"
+
+#~ msgid "Go ten pages forward"
+#~ msgstr "Avançar dez páginas"
+
+#~ msgid "_Statusbar"
+#~ msgstr "Barra de _Estados"
+
+#~ msgid "Show or hide the statusbar"
+#~ msgstr "Apresentar ou esconder a barra estados"
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 00000000..1497cfa7
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,1969 @@
+# Brazilian Portuguese translation of Evince.
+# Copyright (C) 2004-2009 the Evince authors.
+# This file is distributed under the same license as the evince package.
+# Raphael Higino <In Memoriam>, 2004-2005, 2007.
+# Licio Fernando <[email protected]>, ?.
+# Leonardo Ferreira Fontenelle <[email protected]>, 2006-2008.
+# Washington Lins <[email protected]>, 2007.
+# Rodrigo Flores <[email protected]>, 2007.
+# Hugo Doria <[email protected]>, 2007-2008.
+# Vladimir Melo <[email protected]>, 2008, 2009.
+# Taylon Silmer <[email protected]>, 2009.
+# Fabrício Godoy <[email protected]>, 2009.
+# André Gondim <[email protected]>, 2009.
+# Og Maciel <[email protected]>, 2009.
+# Henrique P. Machado <[email protected]>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-09-13 11:43+0000\n"
+"PO-Revision-Date: 2010-09-04 15:05-0300\n"
+"Last-Translator: Henrique P. Machado <[email protected]>\n"
+"Language-Team: Brazilian Portuguese <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Poedit-Language: Portuguese\n"
+"X-Poedit-Country: BRAZIL\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Erro ao lançar o comando \"%s\" para descomprimir a revista em quadrinhos: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "O comando \"%s\" falhou ao descomprimir a revista em quadrinhos."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "O comando \"%s\" não terminou normalmente."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Não é um tipo MIME de revistas em quadrinhos: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Não foi possível localizar um comando apropriado para descomprimir este tipo "
+"de revista em quadrinhos"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Tipo MIME desconhecido"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Arquivo corrompido"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Nenhum arquivo no pacote"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Não foram localizadas imagens no pacote %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Houve um erro ao excluir \"%s\"."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Erro %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Revistas em quadrinho"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "O documento DjVu tem um formato incorreto"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"O documento é composto de vários arquivos. Um ou mais deles não podem ser "
+"acessados."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Documentos DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "O documento DVI tem um formato incorreto"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Documentos DVI"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Este trabalho está em Domínio Público"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Sim"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Não"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Tipo 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Tipo 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Tipo 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Tipo 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Tipo 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Tipo de fonte desconhecido"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Sem nome"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Subconjunto embutido"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Embutido"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Não embutido"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Documentos PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Documento inválido"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Slides do Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Nenhum erro"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Memória insuficiente"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Não é possível encontrar a assinatura do arquivo ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Arquivo ZIP inválido"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Não há suporte a pacotes ZIP com múltiplos arquivos"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Não foi possível abrir o arquivo"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Não foi possível ler os dados do arquivo"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Não é possível encontrar arquivo no pacote ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Erro desconhecido"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Falha ao carregar o documento \"%s\""
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Falha ao salvar o documento \"%s\""
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Documentos PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Não foi possível salvar o anexo \"%s\": %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Não foi possível abrir o anexo \"%s\": %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Não foi possível abrir o anexo \"%s\""
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Não há suporte ao tipo de arquivo %s (%s)"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Todos os documentos"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Todos os arquivos"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Falha ao criar um arquivo temporário: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Falha ao criar um diretório temporário: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "O arquivo não é um arquivo .desktop válido"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Arquivo .desktop não reconhecido versão \"%s\""
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Iniciando %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "O aplicativo não aceita documentos na linha de comando"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Opção de lançamento não reconhecida: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr ""
+"Não é possível passar URIs de documentos para uma entrada \"Type=Link\" de "
+"arquivo .desktop"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Item não lançável"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Desabilita a conexão com gerenciador de sessão"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Especifica o arquivo contendo a configuração salva"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "ARQUIVO"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Especifica a ID de gerenciamento de sessão"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opções de gerenciamento de sessão:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Mostra as opções de gerenciamento de sessão"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Mostrar \"_%s\""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Mover na barra de ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Mover o item selecionado na barra de ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Remover da barra de ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Remover o item selecionado da barra de ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "Excluir _barra de ferramentas"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Remover a barra de ferramentas selecionada"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Separador"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5761
+msgid "Best Fit"
+msgstr "Melhor ajuste"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Largura da página"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4554
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Visualizador de Documentos"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Visualize documentos de múltiplas páginas"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Sobrescrever restrições do documento"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Ignora restrições do documento original, como restrição a cópia ou impressão."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Excluir o arquivo temporário"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Imprimir arquivo de configurações"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Visualizador de Documentos do MATE"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3185
+msgid "Failed to print document"
+msgstr "Falha ao imprimir o documento"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Não foi possível localizar a impressora \"%s\" selecionada"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5476
+msgid "_Previous Page"
+msgstr "Página _anterior"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5477
+msgid "Go to the previous page"
+msgstr "Ir para a página anterior"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5479
+msgid "_Next Page"
+msgstr "Próxima pági_na"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5480
+msgid "Go to the next page"
+msgstr "Ir para a próxima página"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5463
+msgid "Enlarge the document"
+msgstr "Aumenta o documento"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5466
+msgid "Shrink the document"
+msgstr "Encolhe o documento"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Imprimir"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5432
+msgid "Print this document"
+msgstr "Imprime este documento"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5578
+msgid "_Best Fit"
+msgstr "_Melhor ajuste"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5579
+msgid "Make the current document fill the window"
+msgstr "Faz o documento atual preencher a janela"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5581
+msgid "Fit Page _Width"
+msgstr "_Largura da página"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5582
+msgid "Make the current document fill the window width"
+msgstr "Faz o documento atual preencher a largura da janela"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5683
+msgid "Page"
+msgstr "Página"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5684
+msgid "Select Page"
+msgstr "Seleciona página"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Documento"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Título:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Localização:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Assunto:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Autor:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Palavras-chave:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Produtor:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Criador:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Criado:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Modificado:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Número de páginas:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Otimizado:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Formato:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Segurança:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Tamanho do papel:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Nenhum"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f pol."
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Retrato (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Paisagem (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d de %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "de %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Carregando..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Preparando para imprimir..."
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Concluindo..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Imprimindo página %d de %d..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Não há suporte a impressão nesta impressora."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Seleção de página inválida"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Aviso"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "A sua seleção de intervalo de impressão não inclui página alguma"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Escala:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Encolher para a área imprimível"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Caber na área imprimível"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Redimensiona páginas para caber na página da impressora. Selecione uma das "
+"seguintes opções:\n"
+"\n"
+"• \"Nenhum\": Nenhum redimensionamento de página é realizado.\n"
+"\n"
+"• \"Reduzir para a área de impressão\": Páginas de documentos maiores que a "
+"área de impressão são reduzidas para caber na área de impressão da página na "
+"impressora.\n"
+"\n"
+"• \"Preencher área de impressão\": Páginas de documentos são ampliadas ou "
+"reduzidas conforme a necessidade, para preencher a área de impressão da "
+"página na impressora.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Auto rotacionar e centralizar"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Rotacionar a orientação de cada página para corresponder à cada página do "
+"documento. As páginas do documento serão centralizadas dentro da página da "
+"impressora."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Selecionar tamanho da página usando o tamanho da página do documento"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Quando habilitado, cada página será impressa com o mesmo tamanho de papel da "
+"página do documento."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Manuseio de página"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Falha ao imprimir a página %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Rolar para cima"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Rolar para baixo"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Rolar visualização para cima"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Rolar visualização para baixo"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Visualizador de Documentos"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Ir para a página:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Fim da apresentação. Clique para sair."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Ir para a primeira página"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Ir para a página anterior"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Ir para a próxima página"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Ir para a última página"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Ir para a página"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Localizar"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Ir para a página %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Ir para %s no arquivo \"%s\""
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Ir para o arquivo \"%s\""
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Lançar %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Localizar:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5449
+msgid "Find Pre_vious"
+msgstr "Localizar an_terior"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Localiza a ocorrência anterior da expressão pesquisada"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5447
+msgid "Find Ne_xt"
+msgstr "Localizar _próxima"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Localiza a próxima ocorrência da expressão pesquisada"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Diferenciar maiúsc./minúsc."
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Alternar sensibilidade a maiusculização"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Ícone:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Nota"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Comentário"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Chave"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Ajuda"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Novo parágrafo"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Parágrafo"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Inserir"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Cruz"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Círculo"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Propriedades da anotação"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Cor:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Estilo:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Transparente"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Opaco"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Estado inicial da janela:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Abrir"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Fechar"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Executando em modo de apresentação"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Senha para o documento %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Convertendo %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "documento %d de %d convertido"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Convertendo meta-dados"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"O formato dos meta-dados usados pelo Evince mudaram, e desde então "
+"necessitam ser migrados. Se a migração for cancelada o armazenamento dos "
+"meta-dados não irá funcionar."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Abre um documento usado recentemente"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Este documento está bloqueado e só pode ser lido digitando a senha correta."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Desbloquear documento"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Digite a senha"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Senha requerida"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "O documento \"%s\" está bloqueado e requer uma senha para ser aberto."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Senha:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Esquecer a senha _imediatamente"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "_Lembrar a senha durante esta sessão"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "_Lembrar sempre"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Propriedades"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Geral"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Fontes"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Licença do documento"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Fonte"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Reunindo informações de fontes... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Termos de uso"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Texto da licença"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Informações adicionais"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Lista"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Anotações"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Texto"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Adicionar anotação de texto"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Adicionar"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "O documento não contém anotações"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Página %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Anexos"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Camadas"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Imprimir..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Índice"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Miniaturas"
+
+#: ../shell/ev-window.c:875
+#, c-format
+msgid "Page %s — %s"
+msgstr "Página %s — %s"
+
+#: ../shell/ev-window.c:877
+#, c-format
+msgid "Page %s"
+msgstr "Página %s"
+
+#: ../shell/ev-window.c:1436
+msgid "The document contains no pages"
+msgstr "O documento não contém páginas"
+
+#: ../shell/ev-window.c:1439
+msgid "The document contains only empty pages"
+msgstr "O documento contém apenas páginas vazias"
+
+#: ../shell/ev-window.c:1644 ../shell/ev-window.c:1810
+msgid "Unable to open document"
+msgstr "Não foi possível abrir o documento"
+
+#: ../shell/ev-window.c:1781
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Carregando o documento a partir de \"%s\""
+
+#: ../shell/ev-window.c:1923 ../shell/ev-window.c:2202
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Baixando o documento (%d%%)"
+
+#: ../shell/ev-window.c:1956
+msgid "Failed to load remote file."
+msgstr "Falhou ao carregar o arquivo remoto."
+
+#: ../shell/ev-window.c:2146
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Recarregando o documento a partir de %s"
+
+#: ../shell/ev-window.c:2178
+msgid "Failed to reload document."
+msgstr "Falha ao recarregar o documento."
+
+#: ../shell/ev-window.c:2333
+msgid "Open Document"
+msgstr "Abrir documento"
+
+#: ../shell/ev-window.c:2631
+#, c-format
+msgid "Saving document to %s"
+msgstr "Salvando o documento em %s"
+
+#: ../shell/ev-window.c:2634
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Salvando o anexo em %s"
+
+#: ../shell/ev-window.c:2637
+#, c-format
+msgid "Saving image to %s"
+msgstr "Salvando a imagem em %s"
+
+#: ../shell/ev-window.c:2681 ../shell/ev-window.c:2781
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Não foi possível salvar o arquivo como \"%s\"."
+
+#: ../shell/ev-window.c:2712
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Enviando o documento (%d%%)"
+
+#: ../shell/ev-window.c:2716
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Enviando o anexo (%d%%)"
+
+#: ../shell/ev-window.c:2720
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Enviando a imagem (%d%%)"
+
+#: ../shell/ev-window.c:2844
+msgid "Save a Copy"
+msgstr "Salvar uma cópia"
+
+#: ../shell/ev-window.c:3129
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d trabalho pendente na fila"
+msgstr[1] "%d trabalhos pendentes na fila"
+
+#: ../shell/ev-window.c:3242
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Imprimindo o trabalho \"%s\""
+
+#: ../shell/ev-window.c:3420
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"O documento contém campos de formulário que foram preenchidos. Se você não "
+"salvar uma cópia, as alterações serão permanentemente perdidas."
+
+#: ../shell/ev-window.c:3424
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"O documento contém anotações novas ou modificadas. Se você não salvar uma "
+"cópia, as alterações serão permanentemente perdidas."
+
+#: ../shell/ev-window.c:3431
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Salvar uma cópia do documento \"%s\" antes de fechar?"
+
+#: ../shell/ev-window.c:3450
+msgid "Close _without Saving"
+msgstr "Fechar se_m salvar"
+
+#: ../shell/ev-window.c:3454
+msgid "Save a _Copy"
+msgstr "Salvar uma _cópia"
+
+#: ../shell/ev-window.c:3528
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Aguardar o término da impressão do trabalho \"%s\" antes de fechar?"
+
+#: ../shell/ev-window.c:3531
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Existem %d trabalhos de impressão ativos. Aguardar o término das impressões "
+"antes de fechar?"
+
+#: ../shell/ev-window.c:3543
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Se você fechar a janela, os trabalhos de impressão pendentes não serão "
+"impressos."
+
+#: ../shell/ev-window.c:3547
+msgid "Cancel _print and Close"
+msgstr "Cancelar im_pressão e fechar"
+
+#: ../shell/ev-window.c:3551
+msgid "Close _after Printing"
+msgstr "Fechar depois de im_primir"
+
+#: ../shell/ev-window.c:4171
+msgid "Toolbar Editor"
+msgstr "Editor de barra de ferramentas"
+
+#: ../shell/ev-window.c:4338
+msgid "There was an error displaying help"
+msgstr "Houve um erro ao exibir a ajuda"
+
+#: ../shell/ev-window.c:4550
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Visualizador de Documentos.\n"
+"Usando %s (%s)"
+
+#: ../shell/ev-window.c:4581
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince é um software livre; você pode redistribuí-lo e/ou modificá-lo sob os "
+"termos da Licença Pública Geral GNU (GPL) como publicada pela Fundação do "
+"Software Livre; seja a versão 2 da Licença ou (se preferir) qualquer versão "
+"mais recente.\n"
+
+#: ../shell/ev-window.c:4585
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"O Evince é distribuído na esperança de que seja útil, mas SEM NENHUMA "
+"GARANTIA; até mesmo sem a garantia implícita de COMERCIALIZAÇÃO ou de "
+"ADAPTAÇÃO A UM PROPÓSITO EM PARTICULAR. Veja a Licença Pública Geral GNU "
+"(GPL) para mais detalhes.\n"
+
+#: ../shell/ev-window.c:4589
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Você deve ter recebido uma cópia da Licença Pública Geral GNU (GPL) junto "
+"com o Evince; se não, escreva para a Free Software Foundation, Inc., 51 "
+"Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA\n"
+
+#: ../shell/ev-window.c:4614
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4617
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Os autores do Evince"
+
+#: ../shell/ev-window.c:4623
+msgid "translator-credits"
+msgstr ""
+"Raphael Higino <In memoriam>\n"
+"Licio Fernando <[email protected]>\n"
+"Leonardo Ferreira Fontenelle <[email protected]>\n"
+"Washington Lins <[email protected]>\n"
+"Rodrigo Flores <[email protected]>\n"
+"Hugo Doria <[email protected]>\n"
+"Vladimir Melo <[email protected]>\n"
+"Taylon Silmer <[email protected]>\n"
+"Fabrício Godoy <[email protected]>\n"
+"André Gondim <[email protected]>\n"
+"Og Maciel <[email protected]>\n"
+"Henrique P. Machado <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4889
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d resultado nesta página"
+msgstr[1] "%d resultados nesta página"
+
+#: ../shell/ev-window.c:4894
+msgid "Not found"
+msgstr "Não encontrado"
+
+#: ../shell/ev-window.c:4900
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% restante para pesquisar"
+
+#: ../shell/ev-window.c:5415
+msgid "_File"
+msgstr "_Arquivo"
+
+#: ../shell/ev-window.c:5416
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../shell/ev-window.c:5417
+msgid "_View"
+msgstr "_Ver"
+
+#: ../shell/ev-window.c:5418
+msgid "_Go"
+msgstr "_Ir"
+
+#: ../shell/ev-window.c:5419
+msgid "_Help"
+msgstr "Aj_uda"
+
+#. File menu
+#: ../shell/ev-window.c:5422 ../shell/ev-window.c:5723
+msgid "_Open…"
+msgstr "_Abrir..."
+
+#: ../shell/ev-window.c:5423 ../shell/ev-window.c:5724
+msgid "Open an existing document"
+msgstr "Abrir um documento existente"
+
+#: ../shell/ev-window.c:5425
+msgid "Op_en a Copy"
+msgstr "Abrir uma _cópia"
+
+#: ../shell/ev-window.c:5426
+msgid "Open a copy of the current document in a new window"
+msgstr "Abre uma cópia do documento atual numa nova janela"
+
+#: ../shell/ev-window.c:5428
+msgid "_Save a Copy…"
+msgstr "_Salvar uma cópia..."
+
+#: ../shell/ev-window.c:5429
+msgid "Save a copy of the current document"
+msgstr "Salvar uma cópia do documento atual"
+
+#: ../shell/ev-window.c:5431
+msgid "_Print…"
+msgstr "Im_primir..."
+
+#: ../shell/ev-window.c:5434
+msgid "P_roperties"
+msgstr "Prop_riedades"
+
+#: ../shell/ev-window.c:5442
+msgid "Select _All"
+msgstr "Selecionar _tudo"
+
+#: ../shell/ev-window.c:5444
+msgid "_Find…"
+msgstr "_Localizar..."
+
+#: ../shell/ev-window.c:5445
+msgid "Find a word or phrase in the document"
+msgstr "Localizar uma palavra ou frase no documento"
+
+#: ../shell/ev-window.c:5451
+msgid "T_oolbar"
+msgstr "Barra de _ferramentas"
+
+#: ../shell/ev-window.c:5453
+msgid "Rotate _Left"
+msgstr "Girar à _esquerda"
+
+#: ../shell/ev-window.c:5455
+msgid "Rotate _Right"
+msgstr "Girar à _direita"
+
+#: ../shell/ev-window.c:5457
+msgid "Save Current Settings as _Default"
+msgstr "Salvar configurações atuais como _padrão"
+
+#: ../shell/ev-window.c:5468
+msgid "_Reload"
+msgstr "_Recarregar"
+
+#: ../shell/ev-window.c:5469
+msgid "Reload the document"
+msgstr "Recarrega o documento"
+
+#: ../shell/ev-window.c:5472
+msgid "Auto_scroll"
+msgstr "Rolagem a_utomática"
+
+#: ../shell/ev-window.c:5482
+msgid "_First Page"
+msgstr "Pr_imeira página"
+
+#: ../shell/ev-window.c:5483
+msgid "Go to the first page"
+msgstr "Vai para a primeira página"
+
+#: ../shell/ev-window.c:5485
+msgid "_Last Page"
+msgstr "Ú_ltima página"
+
+#: ../shell/ev-window.c:5486
+msgid "Go to the last page"
+msgstr "Vai para a última página"
+
+#. Help menu
+#: ../shell/ev-window.c:5490
+msgid "_Contents"
+msgstr "S_umário"
+
+#: ../shell/ev-window.c:5493
+msgid "_About"
+msgstr "_Sobre"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5497
+msgid "Leave Fullscreen"
+msgstr "Sair da tela cheia"
+
+#: ../shell/ev-window.c:5498
+msgid "Leave fullscreen mode"
+msgstr "Sai do modo tela cheia"
+
+#: ../shell/ev-window.c:5500
+msgid "Start Presentation"
+msgstr "Iniciar apresentação"
+
+#: ../shell/ev-window.c:5501
+msgid "Start a presentation"
+msgstr "Inicia uma apresentação"
+
+#. View Menu
+#: ../shell/ev-window.c:5560
+msgid "_Toolbar"
+msgstr "Barra de _ferramentas"
+
+#: ../shell/ev-window.c:5561
+msgid "Show or hide the toolbar"
+msgstr "Mostra ou oculta a barra de ferramentas"
+
+#: ../shell/ev-window.c:5563
+msgid "Side _Pane"
+msgstr "_Barra lateral"
+
+#: ../shell/ev-window.c:5564
+msgid "Show or hide the side pane"
+msgstr "Mostrar ou ocultar a barra lateral"
+
+#: ../shell/ev-window.c:5566
+msgid "_Continuous"
+msgstr "_Contínuo"
+
+#: ../shell/ev-window.c:5567
+msgid "Show the entire document"
+msgstr "Mostrar o documento inteiro"
+
+#: ../shell/ev-window.c:5569
+msgid "_Dual"
+msgstr "_Duplo"
+
+#: ../shell/ev-window.c:5570
+msgid "Show two pages at once"
+msgstr "Mostra duas páginas de uma vez"
+
+#: ../shell/ev-window.c:5572
+msgid "_Fullscreen"
+msgstr "_Tela cheia"
+
+#: ../shell/ev-window.c:5573
+msgid "Expand the window to fill the screen"
+msgstr "Expandir a janela para ocupar toda a tela"
+
+#: ../shell/ev-window.c:5575
+msgid "Pre_sentation"
+msgstr "A_presentação"
+
+#: ../shell/ev-window.c:5576
+msgid "Run document as a presentation"
+msgstr "Executar o documento como uma apresentação"
+
+#: ../shell/ev-window.c:5584
+msgid "_Inverted Colors"
+msgstr "Cores _invertidas"
+
+#: ../shell/ev-window.c:5585
+msgid "Show page contents with the colors inverted"
+msgstr "Mostra o conteúdo da página com as cores invertidas"
+
+#. Links
+#: ../shell/ev-window.c:5593
+msgid "_Open Link"
+msgstr "_Abrir link"
+
+#: ../shell/ev-window.c:5595
+msgid "_Go To"
+msgstr "_Ir para"
+
+#: ../shell/ev-window.c:5597
+msgid "Open in New _Window"
+msgstr "Abrir em uma nova _janela"
+
+#: ../shell/ev-window.c:5599
+msgid "_Copy Link Address"
+msgstr "_Copiar endereço do link"
+
+#: ../shell/ev-window.c:5601
+msgid "_Save Image As…"
+msgstr "_Salvar imagem como..."
+
+#: ../shell/ev-window.c:5603
+msgid "Copy _Image"
+msgstr "Copiar _imagem"
+
+#: ../shell/ev-window.c:5605
+msgid "Annotation Properties…"
+msgstr "Propriedades da anotação..."
+
+#: ../shell/ev-window.c:5610
+msgid "_Open Attachment"
+msgstr "_Abrir anexo"
+
+#: ../shell/ev-window.c:5612
+msgid "_Save Attachment As…"
+msgstr "_Salvar anexo como..."
+
+#: ../shell/ev-window.c:5697
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../shell/ev-window.c:5699
+msgid "Adjust the zoom level"
+msgstr "Ajusta o fator de zoom"
+
+#: ../shell/ev-window.c:5709
+msgid "Navigation"
+msgstr "Navegação"
+
+#: ../shell/ev-window.c:5711
+msgid "Back"
+msgstr "Voltar"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5714
+msgid "Move across visited pages"
+msgstr "Mover-se pelas páginas visitadas"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5744
+msgid "Previous"
+msgstr "Anterior"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5749
+msgid "Next"
+msgstr "Próxima"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5753
+msgid "Zoom In"
+msgstr "Ampliar"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5757
+msgid "Zoom Out"
+msgstr "Reduzir"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5765
+msgid "Fit Width"
+msgstr "Largura da página"
+
+#: ../shell/ev-window.c:5910 ../shell/ev-window.c:5927
+msgid "Unable to launch external application."
+msgstr "Não foi possível executar o aplicativo externo."
+
+#: ../shell/ev-window.c:5984
+msgid "Unable to open external link"
+msgstr "Não foi possível abrir o link externo"
+
+#: ../shell/ev-window.c:6151
+msgid "Couldn't find appropriate format to save image"
+msgstr "Não foi possível encontrar formato apropriado para salvar imagem"
+
+#: ../shell/ev-window.c:6193
+msgid "The image could not be saved."
+msgstr "Não foi possível salvar a imagem."
+
+#: ../shell/ev-window.c:6225
+msgid "Save Image"
+msgstr "Salvar imagem"
+
+#: ../shell/ev-window.c:6353
+msgid "Unable to open attachment"
+msgstr "Não foi possível abrir o anexo"
+
+#: ../shell/ev-window.c:6406
+msgid "The attachment could not be saved."
+msgstr "Não foi possível salvar o anexo."
+
+#: ../shell/ev-window.c:6451
+msgid "Save Attachment"
+msgstr "Salvar anexo"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Senha requerida"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Por extensão"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Visualizador de Documentos do MATE"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "A etiqueta da página do documento a ser exibida."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "PÁGINA"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "O número da página do documento a ser exibido."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NÚMERO"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Executa o Evince em modo de tela cheia"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Executa o Evince em modo de apresentação"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Executa o Evince como visualizador"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "A palavra ou frase a ser localizada no documento"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "EXPRESSÃO"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[ARQUIVO...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Opções booleanas disponíveis: verdadeiro habilita a miniaturização e falso "
+"desabilita a criação de novas miniaturas"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Habilitar a miniaturização de documentos PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Comando de miniatura para documentos PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Um comando válido e argumentos para o miniaturizador de documentos PDF. Veja "
+"a documentação do miniaturizador do Caja para mais informações."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "Configuração da _página..."
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Configura a página para impressão"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "O documento DJVU tem um formato incorreto"
+
+#~ msgid "Print..."
+#~ msgstr "Imprimir..."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Salvar uma cópia..."
+
+#~ msgid "_Print..."
+#~ msgstr "Im_primir..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Localizar..."
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "Falha ao criar o arquivo \"%s\": %s"
+
+#~ msgid "Search string"
+#~ msgstr "Pesquisar expressão"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "O nome da expressão a ser localizada"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Diferenciar maiúsc./minúsc."
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "VERDADEIRO para uma pesquisa sensível a maiusculização"
+
+#~ msgid "Highlight color"
+#~ msgstr "Cor de destaque"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Cor de destaque para todas as ocorrências"
+
+#~ msgid "Current color"
+#~ msgstr "Cor atual"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Cor de destaque para a ocorrência atual"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "Recuperar os documentos anteriores?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "O Evince parece ter saído inesperadamente na última vez que foi "
+#~ "executado. Você pode recuperar os documentos abertos."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_Não recuperar"
+
+#~ msgid "_Recover"
+#~ msgstr "_Recuperar"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Recuperação de travamento"
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "Não foi possível criar o link simbólico \"%s\": "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "Não foi possível abrir uma cópia."
+
+#~ msgid "Co_nnect"
+#~ msgstr "Co_nectar"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "Conectar _anonimamente"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Conectar como u_suário:"
+
+#~ msgid "_Username:"
+#~ msgstr "Nome de _usuário:"
+
+#~ msgid "_Domain:"
+#~ msgstr "_Domínio:"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "Es_quecer a senha imediatamente"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_Lembrar a senha por esta sessão"
+
+#~ msgid "_Remember forever"
+#~ msgstr "_Lembrar sempre"
+
+#~ msgid "File not available"
+#~ msgstr "Arquivo não disponível"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "Não há suporte a arquivos remotos"
+
+#~ msgid "Find Previous"
+#~ msgstr "Localizar anterior"
+
+#~ msgid "Find Next"
+#~ msgstr "Localizar próxima"
+
+#~ msgid "Password Entry"
+#~ msgstr "Entrada de senha"
+
+#~ msgid "Remember password for this session"
+#~ msgstr "Lembrar a senha para esta sessão"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "Salvar a senha no chaveiro"
+
+#~ msgid "<b>Title:</b>"
+#~ msgstr "<b>Título:</b>"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f pol."
+
+#~ msgid "Incorrect password"
+#~ msgstr "Senha incorreta"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Visualizador de documentos Evince"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "Carta"
+
+#~ msgid "Tabloid"
+#~ msgstr "Tablóide"
+
+#~ msgid "Ledger"
+#~ msgstr "Epitáfio"
+
+#~ msgid "Legal"
+#~ msgstr "Legal"
+
+#~ msgid "Statement"
+#~ msgstr "Sentença"
+
+#~ msgid "Executive"
+#~ msgstr "Executivo"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Fólio"
+
+#~ msgid "Quarto"
+#~ msgstr "Quarto"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "Não é possível abrir o arquivo \"%s\"."
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "Falha ao carregar o documento \"%s\". O interpretador Ghostscript não foi "
+#~ "localizado no caminho"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "PostScript Encapsulado"
+
+#~ msgid "PostScript"
+#~ msgstr "PostScript"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "Falha do interpretador."
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "Tipo MIME não manipulável: \"%s\""
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "Não há suporte a geração de arquivos PDF"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "Você estava tentando imprimir em uma impressora usando o driver \"%s\". "
+#~ "Este programa requer um driver de impressora PostScript."
+
+#~ msgid "Pages"
+#~ msgstr "Páginas"
+
+#~ msgid "Failed to get info for document"
+#~ msgstr "Falha ao obter informações para o documento"
+
+#~ msgid "Invalid URI: “%s”"
+#~ msgstr "URI inválido: \"%s\""
+
+#~ msgid "Unsupported URI: “%s”"
+#~ msgstr "Não há suporte ao URI: \"%s\""
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 00000000..aa97139d
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,1797 @@
+# Romanian translation for evince.
+# Copyright (C) 2005 - 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince package.
+# Eugen Paiuc <[email protected]>, 2005.
+# Mișu Moldovan <[email protected]>, 2005 - 2009.
+# Lucian Adrian Grijincu <[email protected]>, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-09-25 19:40+0000\n"
+"PO-Revision-Date: 2010-09-26 01:58+0300\n"
+"Last-Translator: Lucian Adrian Grijincu <[email protected]>\n"
+"Language-Team: Romanian Mate Team <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ro\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2);;\n"
+"X-Generator: Virtaal 0.6.1\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Eroare la lansarea comenzii „%s” de decomprimare a cărții cu benzi desenate: "
+"%s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Comanda „%s” a eșuat la decomprimarea cărții cu benzi desenate."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Comanda „%s” s-a încheiat anormal."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Nu este un tip MIME pentru benzi desenate: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Nu se poate găsi comanda potrivită pentru a decomprima acest tip de carte cu "
+"benzi desenate"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Tip MIME necunoscut"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Fișier corupt"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Nici un fișier în arhivă"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Nu s-au găsit imagini în arhiva %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "S-a produs o eroare la ștergerea „%s”"
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Eroare %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Benzi desenate"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "Documentul DjVu are un format nevalid"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Documentul este compus din mai multe fișiere. Unul sau mai multe dintre "
+"acestea nu au putut fi accesate."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Documente DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Documentul DVI are un format nevalid"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Documente DVI"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Această lucrare este în Domeniul public"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Da"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Nu"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Tip 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Tip 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Tip 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Tip 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Tip 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Tipul fontului este necunoscut"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Fără nume"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Subset încapsulat"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Încapsulat"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Neîncapsulat"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Documente PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Document nevalid"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Diapozitive Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Fără eroare"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Memorie insuficientă"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Nu s-a găsit semnătura ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Fișier ZIP nevalid"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "ZIP-urile cu fișiere multiple nu sunt suportate"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Fișierul nu a putut fi deschis."
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Nu s-au putut citi datele din fișier"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Nu s-a găsit fișierul în arhiva ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Eroare necunoscută"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Încărcarea documentului „%s” a eșuat"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Salvarea documentului „%s” a eșuat"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Documente PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Nu s-a putut salva atașamentul „%s”: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Nu s-a putut deschide atașamentul „%s”: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Nu s-a putut deschide atașamentul „%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Tipul de fișier %s (%s) nu este suportat"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Toate documentele"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Toate fișierele"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Crearea fișierului temporar a eșuat: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Crearea dosarului temporar a eșuat: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Fișierul nu este un fișier .desktop valid"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Fișier desktop necunoscut, versiunea „%s”"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Se pornește %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Aplicația nu acceptă documente în linia de comandă"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Opțiune de lansare necunoscută: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Nu se pot pasa URI-uri document către o intrare desktop de tip link"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Nu e un element care să poată fi lansat"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Dezactivează conexiunea la administratorul de sesiuni"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Specifică fișierul ce conține configurația salvată"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FIȘIER"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Specifică ID-ul pentru administrarea de sesiuni"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opțiuni de administrare a sesiunii:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Afișează opțiunile de administrare a sesiunii"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Arată „_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Mută în bara cu unelte"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Mută elementul selectat în bara cu unelte"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Scoate din bara cu unelte"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Șterge elementul selectat din bara cu unelte"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "Șt_erge bara cu unelte"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Șterge bara cu unelte selectată"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Separator"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5761
+msgid "Best Fit"
+msgstr "Cea mai bună potrivire"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Potrivire la lățimea paginii"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4554
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Vizualizator de documente"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Vizualizați documente cu mai multe pagini"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Ignoră restricțiile documentului"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Ignoră restricțiile documentului, precum cele referitoare la tipărire sau "
+"copiere."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Șterge fișierul temporar"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Tipărește fișierul de configurări"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Previzualizare de documente MATE"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3185
+msgid "Failed to print document"
+msgstr "Tipărirea documentului a eșuat"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Imprimanta selectată „%s” nu a fost găsită"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5476
+msgid "_Previous Page"
+msgstr "Pagina pr_ecedentă"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5477
+msgid "Go to the previous page"
+msgstr "Arată pagina precedentă"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5479
+msgid "_Next Page"
+msgstr "Pagina ur_mătoare"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5480
+msgid "Go to the next page"
+msgstr "Arată pagina următoare"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5463
+msgid "Enlarge the document"
+msgstr "Apropie documentul"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5466
+msgid "Shrink the document"
+msgstr "Depărtează documentul"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Tipărește"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5432
+msgid "Print this document"
+msgstr "Tipărește acest document"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5578
+msgid "_Best Fit"
+msgstr "Încadrat per_fect"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5579
+msgid "Make the current document fill the window"
+msgstr "Potrivește documentul curent la mărimea ferestrei"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5581
+msgid "Fit Page _Width"
+msgstr "Încadrat la _lățime"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5582
+msgid "Make the current document fill the window width"
+msgstr "Potrivește documentul curent la lățimea ferestrei"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5683
+msgid "Page"
+msgstr "Pagină"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5684
+msgid "Select Page"
+msgstr "Selectează pagina"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Document"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Titlu:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Locație:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Subiect:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Autor:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Cuvinte cheie:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Producător:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Autor:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Creat:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Modificat:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Număr de pagini:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimizat:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Format:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Securitate:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Format de pagină:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Fără"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Portret (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Vedere (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d din %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "din %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Se încarcă…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Se pregătește tipărirea…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Se finalizează…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Se tipărește pagina %d din %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Tipărirea nu e suportată pentru acest tip de imprimantă."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Selectare nevalidă de pagini"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Avertisment"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Intervalul selectat pentru tipărire nu include nicio pagină"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Scalare pagină:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Micșorează la aria tipăribilă"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Încadrează la aria tipăribilă"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Scalează paginile documentelor pentru a încăpea pe pagina imprimantei "
+"selectată. Alegeți una din următoarele:\n"
+"\n"
+"• „Niciuna”: Nu se efectuează nicio scalare de pagină.\n"
+"\n"
+"• „Micșorează la aria tipăribilă”: Paginile documentului mai mari decât aria "
+"tipăribilă sunt micșorate pentru a încăpea pe aria tipăribilă a paginii "
+"imprimantei.\n"
+"\n"
+"• „Încadrează la aria tipăribilă”: Paginile documentului sunt mărite sau "
+"micșorate după nevoie pentru a încăpea pe aria tipăribilă a paginii "
+"imprimantei.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Rotește automat și centrează"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Rotește orientarea de imprimare a fiecărei pagini pentru a se potrivi cu "
+"orientarea fiecărei pagini a documentului. Paginile documentului vor fi "
+"centrate în pagina documentului."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Alege dimensiunea paginii folosind dimensiunea paginii documentului"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Când este activat, fiecare pagină va fi tipărită pe o hârtie aceeași "
+"dimensiune ca pagina documentului."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Gestionare pagini"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Tipărirea paginii %d a eșuat: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Defilare în sus"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Defilare în jos"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Defilare ascendentă a vizualizării"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Defilare descendentă a vizualizării"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Vizualizare document"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Du-te la pagina:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Sfârșitul prezentării. Clic pentru ieșire."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Du-te la prima pagină"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Du-te la pagina precedentă"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Du-te la pagina următoare"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Du-te la ultima pagină"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Du-te la pagina"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Caută"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Du-te la pagina %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Du-te la %s în fișierul „%s”"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Du-te în fișierul „%s”"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Pornește %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Caută:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5449
+msgid "Find Pre_vious"
+msgstr "Caută îna_poi"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Caută precedenta apariție a șirului de caractere căutat"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5447
+msgid "Find Ne_xt"
+msgstr "Caută în co_ntinuare"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Caută următoarea apariție a șirului de caractere căutat"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Majuscule semnificative"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Căutare cu/fără majuscule nesemnificative"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Iconiță:"
+
+# LG: descriere a unei iconițe atașabile unei notițe
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Notă"
+
+# LG: descriere a unei iconițe atașabile unei notițe
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Comentariu"
+
+# LG: descriere a unei iconițe atașabile unei notițe
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Cheie"
+
+# LG: descriere a unei iconițe atașabile unei notițe
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Ajutor"
+
+# LG: descriere a unei iconițe atașabile unei notițe
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Paragraf nou"
+
+# LG: descriere a unei iconițe atașabile unei notițe
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Paragraf"
+
+# LG: descriere a unei iconițe atașabile unei notițe
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Inserție"
+
+# LG: descriere a unei iconițe atașabile unei notițe
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Cruce"
+
+# LG: descriere a unei iconițe atașabile unei notițe
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Cerc"
+
+# LG: descriere a unei iconițe atașabile unei notițe
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Necunoscut"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Proprietăți adnotare"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Culoare:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Stil:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Transparent"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Opac"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Stare inițială fereastră:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Deschide"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Închide"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Pornit în modul de prezentare"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Parola pentru documentul „%s”"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Se convertește %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d din %d documente convertite"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Se convertesc metadatele"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Formatul metadatelor folosit de Evince s-a schimbat și, prin urmare, trebuie "
+"migrat. Dacă migrarea este anulată stocarea acestora nu va funcționa."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Deschide un document utilizat recent"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Acest document este criptat și nu poate fi citit decât după introducerea "
+"corectă a parolei."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Decriptare document"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Introduceți parola"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "E nevoie de parolă"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "Documentul „%s” este criptat și necesită o parolă pentru a fi deschis."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Parolă:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "_Uită parola imediat"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Reține parola până _la închiderea sesiunii"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Reține pentru _totdeauna"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Proprietăți"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Generale"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Fonturi"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Licență document"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Font"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Se obțin informațiile despre fonturi… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Termeni de utilizare"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Licență text"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Informații suplimentare"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Listă"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Adnotări"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Text"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Adăugă adnotare text"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Adaugă"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Documentul nu conține nicio adnotare"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Pagina %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Atașamente"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Straturi"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Tipărește…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Index"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Miniaturi"
+
+#: ../shell/ev-window.c:875
+#, c-format
+msgid "Page %s — %s"
+msgstr "Pagină %s – %s"
+
+#: ../shell/ev-window.c:877
+#, c-format
+msgid "Page %s"
+msgstr "Pagina %s"
+
+#: ../shell/ev-window.c:1436
+msgid "The document contains no pages"
+msgstr "Documentul nu conține nici o pagină"
+
+#: ../shell/ev-window.c:1439
+msgid "The document contains only empty pages"
+msgstr "Acest document conține doar pagini goale"
+
+#: ../shell/ev-window.c:1644 ../shell/ev-window.c:1810
+msgid "Unable to open document"
+msgstr "Documentul nu a putut fi deschis"
+
+#: ../shell/ev-window.c:1781
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Se încarcă documentul de la „%s”"
+
+#: ../shell/ev-window.c:1923 ../shell/ev-window.c:2202
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Se descarcă documentul (%d%%)"
+
+#: ../shell/ev-window.c:1956
+msgid "Failed to load remote file."
+msgstr "Reîncărcarea documentului de la distanță a eșuat."
+
+#: ../shell/ev-window.c:2146
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Se reîncarcă documentul de la %s"
+
+#: ../shell/ev-window.c:2178
+msgid "Failed to reload document."
+msgstr "Reîncărcarea documentului a eșuat."
+
+#: ../shell/ev-window.c:2333
+msgid "Open Document"
+msgstr "Deschidere document"
+
+#: ../shell/ev-window.c:2631
+#, c-format
+msgid "Saving document to %s"
+msgstr "Se salvează documentul în %s"
+
+#: ../shell/ev-window.c:2634
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Se salvează atașamentul în %s"
+
+#: ../shell/ev-window.c:2637
+#, c-format
+msgid "Saving image to %s"
+msgstr "Se salvează imaginea în %s"
+
+#: ../shell/ev-window.c:2681 ../shell/ev-window.c:2781
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Fișierul nu a putut fi salvat ca „%s”."
+
+#: ../shell/ev-window.c:2712
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Se încarcă documentul (%d%%)"
+
+#: ../shell/ev-window.c:2716
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Se încarcă atașamentul (%d%%)"
+
+#: ../shell/ev-window.c:2720
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Se încarcă imaginea (%d%%)"
+
+#: ../shell/ev-window.c:2844
+msgid "Save a Copy"
+msgstr "Salvare copie"
+
+#: ../shell/ev-window.c:3129
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "o sarcină în așteptare în coadă"
+msgstr[1] "%d sarcini în așteptare în coadă"
+msgstr[2] "%d de sarcini în așteptare în coadă"
+
+#: ../shell/ev-window.c:3242
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Se tipărește sarcina „%s”"
+
+#: ../shell/ev-window.c:3420
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Documentul conține câmpuri care au fost completate. Dacă nu salvați o copie, "
+"modificările vor fi pierdute definitiv."
+
+#: ../shell/ev-window.c:3424
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Documentul conține adnotări noi sau modificate. Dacă nu salvați o copie, "
+"modificările vor fi pierdute definitiv."
+
+#: ../shell/ev-window.c:3431
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Salvați o copie a documentului „%s” înainte de închidere?"
+
+#: ../shell/ev-window.c:3450
+msgid "Close _without Saving"
+msgstr "Închide _fără a salva"
+
+#: ../shell/ev-window.c:3454
+msgid "Save a _Copy"
+msgstr "Salvează o _copie"
+
+#: ../shell/ev-window.c:3528
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr ""
+"Doriți să așteptați ca sarcina de tipărire „%s” să se termine înainte de a "
+"ieși?"
+
+#: ../shell/ev-window.c:3531
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Există %d sarcini de tipărire active. Doriți să așteptați până când "
+"tipărirea se termină înainte de a închide?"
+
+#: ../shell/ev-window.c:3543
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Dacă închideți fereastra, sarcinile în așteptare nu vor fi tipărite."
+
+#: ../shell/ev-window.c:3547
+msgid "Cancel _print and Close"
+msgstr "Anulează ti_părirea și ieși"
+
+#: ../shell/ev-window.c:3551
+msgid "Close _after Printing"
+msgstr "Ieși după termin_area tipăririi"
+
+#: ../shell/ev-window.c:4171
+msgid "Toolbar Editor"
+msgstr "Editor bară cu unelte"
+
+#: ../shell/ev-window.c:4338
+msgid "There was an error displaying help"
+msgstr "A intervenit o eroare la afișarea ajutorului"
+
+#: ../shell/ev-window.c:4550
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Vizualizare documente.\n"
+"Utilizează %s (%s)"
+
+#: ../shell/ev-window.c:4581
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince este „free software”. Poate fi redistribuit și/sau modificat în "
+"termenii licenței GNU General Public License în forma publicată de Free "
+"Software Foundation, versiunea 2 sau (dacă preferați) orice altă versiune "
+"ulterioară.\n"
+
+#: ../shell/ev-window.c:4585
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince este distribuit în speranța că vă va fi util, dar FĂRĂ NICI O "
+"GARANȚIE, nici măcar garanția unei posibile COMERCIALIZĂRI ori a UTILIZĂRII "
+"PENTRU UN ANUME SCOP. Consultați licența GNU General Public License pentru "
+"mai multe detalii.\n"
+
+#: ../shell/ev-window.c:4589
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Ar fi trebuit să primiți o copie a licenței GNU General Public License "
+"împreună cu Evince. În caz contrar, scrieți la Free Software Foundation, "
+"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4614
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4617
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 Autorii Evince"
+
+#: ../shell/ev-window.c:4623
+msgid "translator-credits"
+msgstr ""
+"Eugen Paiuc <[email protected]>\n"
+"Lucian Adrian Grijincu <[email protected]>\n"
+"Mișu Moldovan <[email protected]>\n"
+"\n"
+"Contribuții din Launchpad:\n"
+" Dread Knight https://launchpad.net/~dread.knight\n"
+" Gheorghe Pop https://launchpad.net/~pop-gheorghe\n"
+" Ionuț Jula https://launchpad.net/~ionutjula\n"
+" Lucian Adrian Grijincu https://launchpad.net/~lucian.grijincu"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4889
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "Una găsită în această pagină"
+msgstr[1] "%d găsite în această pagină"
+msgstr[2] "%d găsite în această pagină"
+
+#: ../shell/ev-window.c:4894
+msgid "Not found"
+msgstr "Nu a fost găsit"
+
+#: ../shell/ev-window.c:4900
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Rămân de căutat: %3d%%"
+
+#: ../shell/ev-window.c:5415
+msgid "_File"
+msgstr "_Fișier"
+
+#: ../shell/ev-window.c:5416
+msgid "_Edit"
+msgstr "_Editare"
+
+#: ../shell/ev-window.c:5417
+msgid "_View"
+msgstr "_Vizualizare"
+
+#: ../shell/ev-window.c:5418
+msgid "_Go"
+msgstr "_Navigare"
+
+#: ../shell/ev-window.c:5419
+msgid "_Help"
+msgstr "_Ajutor"
+
+#. File menu
+#: ../shell/ev-window.c:5422 ../shell/ev-window.c:5723
+msgid "_Open…"
+msgstr "_Deschide…"
+
+#: ../shell/ev-window.c:5423 ../shell/ev-window.c:5724
+msgid "Open an existing document"
+msgstr "Deschide un document existent"
+
+#: ../shell/ev-window.c:5425
+msgid "Op_en a Copy"
+msgstr "D_eschide o copie"
+
+#: ../shell/ev-window.c:5426
+msgid "Open a copy of the current document in a new window"
+msgstr "Deschide o copie a documentului curent într-o fereastră nouă"
+
+#: ../shell/ev-window.c:5428
+msgid "_Save a Copy…"
+msgstr "_Salvează o copie…"
+
+#: ../shell/ev-window.c:5429
+msgid "Save a copy of the current document"
+msgstr "Salvează o copie a documentului curent"
+
+#: ../shell/ev-window.c:5431
+msgid "_Print…"
+msgstr "Ti_părește…"
+
+#: ../shell/ev-window.c:5434
+msgid "P_roperties"
+msgstr "P_roprietăți"
+
+#: ../shell/ev-window.c:5442
+msgid "Select _All"
+msgstr "Selectează t_ot"
+
+#: ../shell/ev-window.c:5444
+msgid "_Find…"
+msgstr "_Caută…"
+
+#: ../shell/ev-window.c:5445
+msgid "Find a word or phrase in the document"
+msgstr "Caută un cuvânt sau o frază în document"
+
+#: ../shell/ev-window.c:5451
+msgid "T_oolbar"
+msgstr "Bară cu _unelte"
+
+#: ../shell/ev-window.c:5453
+msgid "Rotate _Left"
+msgstr "Rotește în _stânga"
+
+#: ../shell/ev-window.c:5455
+msgid "Rotate _Right"
+msgstr "Rotește în _dreapta"
+
+#: ../shell/ev-window.c:5457
+msgid "Save Current Settings as _Default"
+msgstr "Salvea_ză configurările curente ca implicite"
+
+#: ../shell/ev-window.c:5468
+msgid "_Reload"
+msgstr "_Reîncarcă"
+
+#: ../shell/ev-window.c:5469
+msgid "Reload the document"
+msgstr "Reîncarcă documentul"
+
+#: ../shell/ev-window.c:5472
+msgid "Auto_scroll"
+msgstr "Derulare _automată"
+
+#: ../shell/ev-window.c:5482
+msgid "_First Page"
+msgstr "_Prima pagină"
+
+#: ../shell/ev-window.c:5483
+msgid "Go to the first page"
+msgstr "Arată prima pagină"
+
+#: ../shell/ev-window.c:5485
+msgid "_Last Page"
+msgstr "_Ultima pagină"
+
+#: ../shell/ev-window.c:5486
+msgid "Go to the last page"
+msgstr "Arată ultima pagină"
+
+#. Help menu
+#: ../shell/ev-window.c:5490
+msgid "_Contents"
+msgstr "_Cuprins"
+
+#: ../shell/ev-window.c:5493
+msgid "_About"
+msgstr "_Despre"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5497
+msgid "Leave Fullscreen"
+msgstr "Mărime normală"
+
+#: ../shell/ev-window.c:5498
+msgid "Leave fullscreen mode"
+msgstr "Mărime normală"
+
+#: ../shell/ev-window.c:5500
+msgid "Start Presentation"
+msgstr "Pornește prezentarea"
+
+#: ../shell/ev-window.c:5501
+msgid "Start a presentation"
+msgstr "Pornește o prezentare"
+
+#. View Menu
+#: ../shell/ev-window.c:5560
+msgid "_Toolbar"
+msgstr "Bară cu _unelte"
+
+#: ../shell/ev-window.c:5561
+msgid "Show or hide the toolbar"
+msgstr "Arată sau ascunde bara cu unelte"
+
+#: ../shell/ev-window.c:5563
+msgid "Side _Pane"
+msgstr "_Vedere laterală"
+
+#: ../shell/ev-window.c:5564
+msgid "Show or hide the side pane"
+msgstr "Arată sau ascunde vederea laterală"
+
+#: ../shell/ev-window.c:5566
+msgid "_Continuous"
+msgstr "C_ontinuu"
+
+#: ../shell/ev-window.c:5567
+msgid "Show the entire document"
+msgstr "Arată tot documentul"
+
+#: ../shell/ev-window.c:5569
+msgid "_Dual"
+msgstr "_Dual"
+
+#: ../shell/ev-window.c:5570
+msgid "Show two pages at once"
+msgstr "Arată două pagini deodată"
+
+#: ../shell/ev-window.c:5572
+msgid "_Fullscreen"
+msgstr "_Pe tot ecranul"
+
+#: ../shell/ev-window.c:5573
+msgid "Expand the window to fill the screen"
+msgstr "Pune fereastra pe tot ecranul"
+
+#: ../shell/ev-window.c:5575
+msgid "Pre_sentation"
+msgstr "Pre_zentare"
+
+#: ../shell/ev-window.c:5576
+msgid "Run document as a presentation"
+msgstr "Arată documentul ca pe o prezentare"
+
+#: ../shell/ev-window.c:5584
+msgid "_Inverted Colors"
+msgstr "Culori _inversate"
+
+#: ../shell/ev-window.c:5585
+msgid "Show page contents with the colors inverted"
+msgstr "Afișează conținutul paginilor cu culorile inversate"
+
+#. Links
+#: ../shell/ev-window.c:5593
+msgid "_Open Link"
+msgstr "_Deschide adresa"
+
+#: ../shell/ev-window.c:5595
+msgid "_Go To"
+msgstr "_Navigare"
+
+#: ../shell/ev-window.c:5597
+msgid "Open in New _Window"
+msgstr "Deschide într-o nouă _fereastră"
+
+#: ../shell/ev-window.c:5599
+msgid "_Copy Link Address"
+msgstr "_Copiază adresa"
+
+#: ../shell/ev-window.c:5601
+msgid "_Save Image As…"
+msgstr "_Salvează imaginea ca…"
+
+#: ../shell/ev-window.c:5603
+msgid "Copy _Image"
+msgstr "Copiază _imaginea"
+
+#: ../shell/ev-window.c:5605
+msgid "Annotation Properties…"
+msgstr "Proprietăți adnotare…"
+
+#: ../shell/ev-window.c:5610
+msgid "_Open Attachment"
+msgstr "_Deschide atașament"
+
+#: ../shell/ev-window.c:5612
+msgid "_Save Attachment As…"
+msgstr "_Salvează atașamentul ca…"
+
+#: ../shell/ev-window.c:5697
+msgid "Zoom"
+msgstr "Zoom"
+
+#: ../shell/ev-window.c:5699
+msgid "Adjust the zoom level"
+msgstr "Ajustează nivelul de zoom"
+
+#: ../shell/ev-window.c:5709
+msgid "Navigation"
+msgstr "Navigare"
+
+#: ../shell/ev-window.c:5711
+msgid "Back"
+msgstr "Înapoi"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5714
+msgid "Move across visited pages"
+msgstr "Navigare în paginile vizitate"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5744
+msgid "Previous"
+msgstr "Precedentă"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5749
+msgid "Next"
+msgstr "Următoare"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5753
+msgid "Zoom In"
+msgstr "Apropie"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5757
+msgid "Zoom Out"
+msgstr "Depărtează"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5765
+msgid "Fit Width"
+msgstr "Încadrat la lățime"
+
+#: ../shell/ev-window.c:5910 ../shell/ev-window.c:5927
+msgid "Unable to launch external application."
+msgstr "Nu s-a putut lansa aplicația externă."
+
+#: ../shell/ev-window.c:5984
+msgid "Unable to open external link"
+msgstr "Adresa externă nu a putut fi deschisă"
+
+#: ../shell/ev-window.c:6151
+msgid "Couldn't find appropriate format to save image"
+msgstr "Nu s-a găsit un format potrivit pentru salvarea imaginii"
+
+#: ../shell/ev-window.c:6193
+msgid "The image could not be saved."
+msgstr "Imaginea nu a putut fi salvată."
+
+#: ../shell/ev-window.c:6225
+msgid "Save Image"
+msgstr "Salvare imagine"
+
+#: ../shell/ev-window.c:6353
+msgid "Unable to open attachment"
+msgstr "Atașamentul nu a putut fi deschis"
+
+#: ../shell/ev-window.c:6406
+msgid "The attachment could not be saved."
+msgstr "Atașamentul nu a putut fi salvat."
+
+#: ../shell/ev-window.c:6451
+msgid "Save Attachment"
+msgstr "Salvare atașament"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s – Parola este necesară"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "După extensie"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Vizualizare de documente în MATE"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Eticheta paginii documentului de afișat."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "PAGINĂ"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Numărul paginii documentului de afișat."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMĂR"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Pornește Evince pe tot ecranul"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Pornește Evince în modul de prezentare"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Pornește Evince în modul de previzualizare"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Cuvântul ori fraza de căutat în document"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "ȘIR"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FIȘIER…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Opțiuni disponibile: „true” permite crearea de noi miniaturi, „false” "
+"dezactivează crearea de noi miniaturi"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Activare miniaturi pentru documente PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Program pentru crearea de miniaturi ale documentelor PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Comandă validă și argumente necesare pentru crearea de miniaturi ale "
+"documentelor PDF. Pentru detalii, consultați documentația Caja "
+"thumbnailer."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "Opți_uni pagină…"
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Alegeți opțiunile paginilor de tipărit"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "Documentul DJVU are format incorect"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "Nu s-a putut crea documentul „%s”: %s"
+
+#~ msgid "Search string"
+#~ msgstr "Șir de căutare"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "Numele șirului de căutat"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Majuscule nesemnificative"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "TRUE pentru o căutare cu majuscule nesemnificative"
+
+#~ msgid "Highlight color"
+#~ msgstr "Culoare de evidențiere"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Culoare de evidențiere pentru toate potrivirile"
+
+#~ msgid "Current color"
+#~ msgstr "Culoare curentă"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Culoare de evidențiere pentru potrivirea curentă"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "Recuperați documentele precedente?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Se pare că Evince a ieșit în mod neașteptat la ultima rulare. Puteți "
+#~ "recupera documentele deschise."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_Nu recupera"
+
+#~ msgid "_Recover"
+#~ msgstr "_Recuperează"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Restaurare după terminare prematură"
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 00000000..22ee2ff4
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,1676 @@
+# translation of evince-master-po-ru-9768.merged.po to Russian
+# Russian translation of evince.
+# Copyright (C) 2005-2009, 2010 The Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince package.
+#
+# Nickolay V. Shmyrev <[email protected]>, 2005.
+# Yuri Kozlov <[email protected]>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince trunk\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-09-21 20:17+0000\n"
+"PO-Revision-Date: 2010-09-22 12:27+0300\n"
+"Last-Translator: Yuri Myasoedov <[email protected]>\n"
+"Language-Team: Russian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Ошибка при запуске программы «%s» для распаковки книги комиксов: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Команде «%s» не удалось выполнить распаковку книги комиксов."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Команда «%s» завершилась с ошибкой."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Тип MIME документа не относится к комиксам: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Не удалось найти подходящей команды для разжатия данного типа книги комиксов"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Неизвестный MIME тип документа"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Файл повреждён"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Файлы в архиве отсутствуют"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "В архиве %s не найдено изображений"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Произошла ошибка при удалении %s."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Ошибка %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Книги комиксов"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "Документ DjVu имеет некорректный формат"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid "The document is composed of several files. One or more of these files cannot be accessed."
+msgstr "Документ состоит из нескольких файлов. Один или несколько этих файлов недоступны."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Документы формата DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Документ DVI имеет некорректный формат"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Документы формата DVI"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Эта работа находится в общественном достоянии"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Да"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Нет"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Неизвестный тип шрифтов"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Без названия"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Встроенное подмножество"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Встроенный"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Внешний"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Документы формата PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Некорректный документ"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Слайды Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Нет ошибки"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Недостаточно памяти"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Не удалось найти признак файла ZIP"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Некорректный файл формата ZIP"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Многофайловые архивы ZIP не поддерживаются"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Не удалось открыть файл"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Не удалось прочитать данные из файла"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Не удалось найти файл в архиве ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Неизвестная ошибка"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Не удалось открыть документ «%s»"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Не удалось сохранить документ «%s»"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Документы формата PostScript"
+
+#: ../libdocument/ev-attachment.c:304
+#: ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Не удалось сохранить вложение «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Не удалось открыть вложение «%s»: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Не удалось открыть вложение «%s»"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Тип файлов %s (%s) не поддерживается"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Все документы"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Все файлы"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Не удалось создать временный файл: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Не удалось создать временный каталог: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Файл не является корректным файлом .desktop"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Нераспознанный файл в desktop версии «%s»"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Запускается %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Приложение не поддерживает открытие документов через командную строку"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Неопознанный параметр запуска: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Невозможно передать адреса документов записи 'Type=Link' файла desktop"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Незапускаемый объект"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Отключить соединение с менеджером сеансов"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Укажите файл с сохраненными параметрами"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+#: ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "ФАЙЛ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Указать ID управления сеансом"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Параметры управления сеансом:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Показать параметры управления сеансом"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Показать «_%s»"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Переместить на панель инструментов"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Переместить выбранный элемент на панель инструментов"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Удалить из панели инструментов"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Удалить выбранный элемент из панели инструментов"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Удалить панель инструментов"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Удалить выбранную панель инструментов"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Разделитель"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48
+#: ../shell/ev-window.c:5761
+msgid "Best Fit"
+msgstr "Уместить в окне"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "По ширине страницы"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1
+#: ../shell/ev-window.c:4554
+#: ../shell/ev-window-title.c:149
+#: ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Просмотр документов"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Просмотр многостраничных документов"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Игнорировать ограничения"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Игнорировать ограничения документа, например, ограничение на копирование и печать."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Удалить временный файл"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Напечатать файл параметров"
+
+#: ../previewer/ev-previewer.c:144
+#: ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Предварительный просмотр документов"
+
+#: ../previewer/ev-previewer-window.c:91
+#: ../shell/ev-window.c:3185
+msgid "Failed to print document"
+msgstr "Не удалось напечатать документ"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Выбранный принтер «%s» не найден"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284
+#: ../shell/ev-window.c:5476
+msgid "_Previous Page"
+msgstr "_Назад"
+
+#: ../previewer/ev-previewer-window.c:285
+#: ../shell/ev-window.c:5477
+msgid "Go to the previous page"
+msgstr "Перейти к предыдущей странице"
+
+#: ../previewer/ev-previewer-window.c:287
+#: ../shell/ev-window.c:5479
+msgid "_Next Page"
+msgstr "_Вперёд"
+
+#: ../previewer/ev-previewer-window.c:288
+#: ../shell/ev-window.c:5480
+msgid "Go to the next page"
+msgstr "Перейти к следующей странице"
+
+#: ../previewer/ev-previewer-window.c:291
+#: ../shell/ev-window.c:5463
+msgid "Enlarge the document"
+msgstr "Увеличить размер страницы"
+
+#: ../previewer/ev-previewer-window.c:294
+#: ../shell/ev-window.c:5466
+msgid "Shrink the document"
+msgstr "Уменьшить размер страницы"
+
+#: ../previewer/ev-previewer-window.c:297
+#: ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Напечатать"
+
+#: ../previewer/ev-previewer-window.c:298
+#: ../shell/ev-window.c:5432
+msgid "Print this document"
+msgstr "Напечатать документ"
+
+#: ../previewer/ev-previewer-window.c:342
+#: ../shell/ev-window.c:5578
+msgid "_Best Fit"
+msgstr "_Уместить в окне"
+
+#: ../previewer/ev-previewer-window.c:343
+#: ../shell/ev-window.c:5579
+msgid "Make the current document fill the window"
+msgstr "Масштабировать документ для соответствия окну"
+
+#: ../previewer/ev-previewer-window.c:345
+#: ../shell/ev-window.c:5581
+msgid "Fit Page _Width"
+msgstr "По _ширине страницы"
+
+#: ../previewer/ev-previewer-window.c:346
+#: ../shell/ev-window.c:5582
+msgid "Make the current document fill the window width"
+msgstr "Масштабировать документ для соответствия ширине окна"
+
+#: ../previewer/ev-previewer-window.c:558
+#: ../shell/ev-window.c:5683
+msgid "Page"
+msgstr "Страница"
+
+#: ../previewer/ev-previewer-window.c:559
+#: ../shell/ev-window.c:5684
+msgid "Select Page"
+msgstr "Выделить страницу"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Документ"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Заголовок:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Местонахождение:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Тема:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Автор:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Ключевые слова:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Программа:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Создатель:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Создан:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Изменён:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Число страниц:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Оптимизация:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Формат:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Безопасность:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Размер страницы:"
+
+#: ../properties/ev-properties-view.c:188
+#: ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Отсутствует"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f мм"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f дюймов"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, прямая (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, повёрнутая (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d из %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "из %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76
+#: ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Загрузка…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Подготовка к печати…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Завершение…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Печать страницы %d из %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Печать на этом принтере не поддерживается."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Выбрана неправильная страница"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Предупреждение"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Выбранный вами диапазон страниц не содержит страниц"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Масштабирование страницы:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Урезать до области печати"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Уместить в область печати"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as required to fit the printable area of the printer page.\n"
+msgstr ""
+"Подгонка страниц документа к области печати выбранного принтера. Выберите:\n"
+"\n"
+"• \"Нет\": Не выполнять подгонку.\n"
+"\n"
+"• \"Урезать до области печати\": Страницы документа, большие чем область печати, будут урезаны до области печати страницы принтера.\n"
+"\n"
+"• \"Уместить в область печати\": Страницы документа будут увеличены или уменьшены в соответствии с областью печати страницы принтера.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Автоматическое вращение и центрирование"
+
+#: ../libview/ev-print-operation.c:1885
+msgid "Rotate printer page orientation of each page to match orientation of each document page. Document pages will be centered within the printer page."
+msgstr "Изменять ориентацию страницы принтера в соответствии с каждой страницей документа. Страницы документа будут центрированы на странице принтера."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Выбор размера страницы на основе размера страницы документа"
+
+#: ../libview/ev-print-operation.c:1892
+msgid "When enabled, each page will be printed on the same size paper as the document page."
+msgstr "Если включено, то каждая страница будет напечатана с одним размером бумаги, как у страницы документа."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Обработка страницы"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Не удалось напечатать страницу %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Прокрутка вверх"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Прокрутка вниз"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Прокрутка документа вверх"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Прокрутка документа вниз"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Отображение документа"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Перейти к странице:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Конец презентации. Нажмите для выхода."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Перейти к первой странице"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Перейти к предыдущей странице"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Перейти к следующей странице"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Перейти к последней странице"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Перейти к странице"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Найти"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Перейти к странице %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Перейти к %s в файле «%s»"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Перейти к файлу «%s»"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Запустить %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Найти:"
+
+#: ../shell/eggfindbar.c:329
+#: ../shell/ev-window.c:5449
+msgid "Find Pre_vious"
+msgstr "Найти пр_едыдущее"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Найти предыдущее вхождение строки"
+
+#: ../shell/eggfindbar.c:337
+#: ../shell/ev-window.c:5447
+msgid "Find Ne_xt"
+msgstr "Найти _следующее"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Найти следующее вхождение слова"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Учитывать _регистр"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Переключить чувствительность поиска к регистру"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Значок:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Заметка"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Комментарий"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Ключ"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Справка"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Новый параграф"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Параграф"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Вставить"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Зачеркнуть"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Обвести"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Неизвестно"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Свойства примечаний"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Цвет:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Стиль:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Прозрачный"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Непрозрачность"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Первоначальное состояние окна:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Открыть"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Закрыть"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Запущен режим презентации"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Пароль к документу %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Преобразуется %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d из %d документов преобразовано"
+
+#: ../shell/ev-convert-metadata.c:165
+#: ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Преобразование метаданных"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid "The metadata format used by Evince has changed, and hence it needs to be migrated. If the migration is cancelled the metadata storage will not work."
+msgstr "Формат метаданных, используемый в Evince, изменён, и поэтому должен быть преобразован. Если отменить преобразование, то хранилище метаданных не будет работать."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Открыть недавно использовавшийся документ"
+
+#: ../shell/ev-password-view.c:144
+msgid "This document is locked and can only be read by entering the correct password."
+msgstr "Этот документ заблокирован и может быть прочитан только после ввода пароля."
+
+#: ../shell/ev-password-view.c:153
+#: ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Разблокировать документ"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Введите пароль"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Требуется пароль"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "Документ «%s» заблокирован и требует пароль для чтения."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Пароль:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "_Немедленно забыть пароль"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Запомнить пароль для этого _сеанса"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Запомнить _навсегда"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Свойства"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Общие"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Шрифты"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Лицензия документа"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Шрифт"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Собирается информация о шрифтах… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Условия использования"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Текст лицензии"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Дополнительная информация"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Список"
+
+#: ../shell/ev-sidebar-annotations.c:203
+#: ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Примечания"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Текст"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Добавить текст примечания"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Добавить"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Документ не содержит примечаний"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Страница %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Вложения"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Слои"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Печать…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Содержание"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Образцы страниц"
+
+#: ../shell/ev-window.c:875
+#, c-format
+msgid "Page %s — %s"
+msgstr "Страница %s — %s"
+
+#: ../shell/ev-window.c:877
+#, c-format
+msgid "Page %s"
+msgstr "Страница %s"
+
+#: ../shell/ev-window.c:1436
+msgid "The document contains no pages"
+msgstr "Документ не содержит страниц"
+
+#: ../shell/ev-window.c:1439
+msgid "The document contains only empty pages"
+msgstr "Документ содержит только пустые страницы"
+
+#: ../shell/ev-window.c:1644
+#: ../shell/ev-window.c:1810
+msgid "Unable to open document"
+msgstr "Не удалось открыть документ"
+
+#: ../shell/ev-window.c:1781
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Загрузка документа из «%s»"
+
+#: ../shell/ev-window.c:1923
+#: ../shell/ev-window.c:2202
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Загрузка документа (%d%%)"
+
+#: ../shell/ev-window.c:1956
+msgid "Failed to load remote file."
+msgstr "Не удалось загрузить файл извне."
+
+#: ../shell/ev-window.c:2146
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Обновление документа из %s"
+
+#: ../shell/ev-window.c:2178
+msgid "Failed to reload document."
+msgstr "Не удалось обновить документ."
+
+#: ../shell/ev-window.c:2333
+msgid "Open Document"
+msgstr "Открыть документ"
+
+#: ../shell/ev-window.c:2631
+#, c-format
+msgid "Saving document to %s"
+msgstr "Сохранение документа в %s"
+
+#: ../shell/ev-window.c:2634
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Сохранение вложения в %s"
+
+#: ../shell/ev-window.c:2637
+#, c-format
+msgid "Saving image to %s"
+msgstr "Сохранение изображения в %s"
+
+#: ../shell/ev-window.c:2681
+#: ../shell/ev-window.c:2781
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Документ не может быть сохранён в файле «%s»."
+
+#: ../shell/ev-window.c:2712
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Сохранение удалённого документа (%d%%)"
+
+#: ../shell/ev-window.c:2716
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Сохранение удалённого приложения (%d%%)"
+
+#: ../shell/ev-window.c:2720
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Сохранение удалённого изображения (%d%%)"
+
+#: ../shell/ev-window.c:2844
+msgid "Save a Copy"
+msgstr "Сохранить копию"
+
+#: ../shell/ev-window.c:3129
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d задание ожидает в очереди"
+msgstr[1] "%d задания ожидают в очереди"
+msgstr[2] "%d заданий ожидает в очереди"
+
+#: ../shell/ev-window.c:3242
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Печать задания «%s»"
+
+#: ../shell/ev-window.c:3420
+msgid "Document contains form fields that have been filled out. If you don't save a copy, changes will be permanently lost."
+msgstr "Документ содержит заполненные поля форм. Если не сохранить копию, изменения будут утеряны."
+
+#: ../shell/ev-window.c:3424
+msgid "Document contains new or modified annotations. If you don't save a copy, changes will be permanently lost."
+msgstr "Документ содержит новые или изменённые примечания. Если не сохранить копию, изменения будут утеряны."
+
+#: ../shell/ev-window.c:3431
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Сохранить копию документа «%s» перед закрытием?"
+
+#: ../shell/ev-window.c:3450
+msgid "Close _without Saving"
+msgstr "Закрыть _без сохранения"
+
+#: ../shell/ev-window.c:3454
+msgid "Save a _Copy"
+msgstr "Сохранить _копию"
+
+#: ../shell/ev-window.c:3528
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Ожидать завершения задания на печать «%s» перед закрытием?"
+
+#: ../shell/ev-window.c:3531
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "%d заданий печати ещё не завершены. Ожидать их завершения перед закрытием документа?"
+
+#: ../shell/ev-window.c:3543
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Если вы закроете окно, задания на печать, поставленные в очередь, не будут выполнены."
+
+#: ../shell/ev-window.c:3547
+msgid "Cancel _print and Close"
+msgstr "Отменить _печать и закрыть"
+
+#: ../shell/ev-window.c:3551
+msgid "Close _after Printing"
+msgstr "Закрыть п_осле печати"
+
+#: ../shell/ev-window.c:4171
+msgid "Toolbar Editor"
+msgstr "Правка панели инструментов"
+
+#: ../shell/ev-window.c:4338
+msgid "There was an error displaying help"
+msgstr "Произошла ошибка при отображении справки"
+
+#: ../shell/ev-window.c:4550
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Просмотр документов\n"
+"Использует %s (%s)"
+
+#: ../shell/ev-window.c:4581
+msgid "Evince 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.\n"
+msgstr "Evince ― свободное программное обеспечение. Вы можете распространять или изменять его при условиях соответствия GNU General Public License опубликованной Free Software Foundation; либо версии 2 лицензии, либо (на ваше усмотрение) любой более поздней версии.\n"
+
+#: ../shell/ev-window.c:4585
+msgid "Evince 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.\n"
+msgstr "Evince распространяется в надежде на то, что приложение будет полезно, но БЕЗ ВСЯКИХ ГАРАНТИЙ; не гарантируется даже ПРИГОДНОСТЬ или СООТВЕТСТВИЕ КАКИМ-ЛИБО ТРЕБОВАНИЯМ. Для получения дополнительной информации ознакомьтесь с GNU General Public License.\n"
+
+#: ../shell/ev-window.c:4589
+msgid "You should have received a copy of the GNU General Public License along with Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr "Вы должны получить копию GNU General Public License вместе с Evince. Если этого не произошло, напишите Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4614
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4617
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 авторы Evince"
+
+#: ../shell/ev-window.c:4623
+msgid "translator-credits"
+msgstr "Николай В. Шмырёв <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4889
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d совпадение"
+msgstr[1] "%d совпадения"
+msgstr[2] "%d совпадений"
+
+#: ../shell/ev-window.c:4894
+msgid "Not found"
+msgstr "Не найдено"
+
+#: ../shell/ev-window.c:4900
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% остаётся для поиска"
+
+#: ../shell/ev-window.c:5415
+msgid "_File"
+msgstr "_Файл"
+
+#: ../shell/ev-window.c:5416
+msgid "_Edit"
+msgstr "_Правка"
+
+#: ../shell/ev-window.c:5417
+msgid "_View"
+msgstr "_Вид"
+
+#: ../shell/ev-window.c:5418
+msgid "_Go"
+msgstr "П_ереход"
+
+#: ../shell/ev-window.c:5419
+msgid "_Help"
+msgstr "_Справка"
+
+#. File menu
+#: ../shell/ev-window.c:5422
+#: ../shell/ev-window.c:5723
+msgid "_Open…"
+msgstr "_Открыть…"
+
+#: ../shell/ev-window.c:5423
+#: ../shell/ev-window.c:5724
+msgid "Open an existing document"
+msgstr "Открыть документ"
+
+#: ../shell/ev-window.c:5425
+msgid "Op_en a Copy"
+msgstr "Открыть _копию"
+
+#: ../shell/ev-window.c:5426
+msgid "Open a copy of the current document in a new window"
+msgstr "Открыть копию текущего документа в новом окне"
+
+#: ../shell/ev-window.c:5428
+msgid "_Save a Copy…"
+msgstr "_Сохранить копию…"
+
+#: ../shell/ev-window.c:5429
+msgid "Save a copy of the current document"
+msgstr "Сохранить копию текущего документа"
+
+#: ../shell/ev-window.c:5431
+msgid "_Print…"
+msgstr "_Печать…"
+
+#: ../shell/ev-window.c:5434
+msgid "P_roperties"
+msgstr "_Свойства"
+
+#: ../shell/ev-window.c:5442
+msgid "Select _All"
+msgstr "Выделить _всё"
+
+#: ../shell/ev-window.c:5444
+msgid "_Find…"
+msgstr "_Найти…"
+
+#: ../shell/ev-window.c:5445
+msgid "Find a word or phrase in the document"
+msgstr "Найти слово или фразу в документе"
+
+#: ../shell/ev-window.c:5451
+msgid "T_oolbar"
+msgstr "Панель _инструментов"
+
+#: ../shell/ev-window.c:5453
+msgid "Rotate _Left"
+msgstr "Повернуть в_лево"
+
+#: ../shell/ev-window.c:5455
+msgid "Rotate _Right"
+msgstr "Повернуть в_право"
+
+#: ../shell/ev-window.c:5457
+msgid "Save Current Settings as _Default"
+msgstr "Сделать текущие настройки настройками по умолчанию"
+
+#: ../shell/ev-window.c:5468
+msgid "_Reload"
+msgstr "_Обновить"
+
+#: ../shell/ev-window.c:5469
+msgid "Reload the document"
+msgstr "Обновить документ"
+
+#: ../shell/ev-window.c:5472
+msgid "Auto_scroll"
+msgstr "Про_кручивать автоматически"
+
+#: ../shell/ev-window.c:5482
+msgid "_First Page"
+msgstr "_Начало"
+
+#: ../shell/ev-window.c:5483
+msgid "Go to the first page"
+msgstr "Перейти к первой странице"
+
+#: ../shell/ev-window.c:5485
+msgid "_Last Page"
+msgstr "_Конец"
+
+#: ../shell/ev-window.c:5486
+msgid "Go to the last page"
+msgstr "Перейти к последней странице"
+
+#. Help menu
+#: ../shell/ev-window.c:5490
+msgid "_Contents"
+msgstr "_Содержание"
+
+#: ../shell/ev-window.c:5493
+msgid "_About"
+msgstr "_О программе"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5497
+msgid "Leave Fullscreen"
+msgstr "Выйти из полноэкранного режима"
+
+#: ../shell/ev-window.c:5498
+msgid "Leave fullscreen mode"
+msgstr "Выйти из полноэкранного режима"
+
+#: ../shell/ev-window.c:5500
+msgid "Start Presentation"
+msgstr "Начать презентацию"
+
+#: ../shell/ev-window.c:5501
+msgid "Start a presentation"
+msgstr "Перейти в режим презентации"
+
+#. View Menu
+#: ../shell/ev-window.c:5560
+msgid "_Toolbar"
+msgstr "Панель _инструментов"
+
+#: ../shell/ev-window.c:5561
+msgid "Show or hide the toolbar"
+msgstr "Показать или спрятать панель инструментов"
+
+#: ../shell/ev-window.c:5563
+msgid "Side _Pane"
+msgstr "_Боковая панель"
+
+#: ../shell/ev-window.c:5564
+msgid "Show or hide the side pane"
+msgstr "Показать или спрятать боковую панель"
+
+#: ../shell/ev-window.c:5566
+msgid "_Continuous"
+msgstr "_Непрерывно"
+
+#: ../shell/ev-window.c:5567
+msgid "Show the entire document"
+msgstr "Показывать документ целиком"
+
+#: ../shell/ev-window.c:5569
+msgid "_Dual"
+msgstr "_Две страницы"
+
+#: ../shell/ev-window.c:5570
+msgid "Show two pages at once"
+msgstr "Показать по две страницы"
+
+#: ../shell/ev-window.c:5572
+msgid "_Fullscreen"
+msgstr "Полноэкранный _режим"
+
+#: ../shell/ev-window.c:5573
+msgid "Expand the window to fill the screen"
+msgstr "Показывать окно на весь экран"
+
+#: ../shell/ev-window.c:5575
+msgid "Pre_sentation"
+msgstr "_Презентация"
+
+#: ../shell/ev-window.c:5576
+msgid "Run document as a presentation"
+msgstr "Отображать документ как презентацию"
+
+#: ../shell/ev-window.c:5584
+msgid "_Inverted Colors"
+msgstr "_Инвертировать цвета"
+
+#: ../shell/ev-window.c:5585
+msgid "Show page contents with the colors inverted"
+msgstr "Показать содержимое страницы в инвертированном цвете"
+
+#. Links
+#: ../shell/ev-window.c:5593
+msgid "_Open Link"
+msgstr "_Открыть ссылку"
+
+#: ../shell/ev-window.c:5595
+msgid "_Go To"
+msgstr "_Перейти"
+
+#: ../shell/ev-window.c:5597
+msgid "Open in New _Window"
+msgstr "Открыть в _новом окне"
+
+#: ../shell/ev-window.c:5599
+msgid "_Copy Link Address"
+msgstr "_Копировать адрес ссылки"
+
+#: ../shell/ev-window.c:5601
+msgid "_Save Image As…"
+msgstr "Сохранить изображение _как…"
+
+#: ../shell/ev-window.c:5603
+msgid "Copy _Image"
+msgstr "Копировать _изображение"
+
+#: ../shell/ev-window.c:5605
+msgid "Annotation Properties…"
+msgstr "Свойства примечаний…"
+
+#: ../shell/ev-window.c:5610
+msgid "_Open Attachment"
+msgstr "Сохранить вложение"
+
+#: ../shell/ev-window.c:5612
+msgid "_Save Attachment As…"
+msgstr "Сохранить _вложение как…"
+
+#: ../shell/ev-window.c:5697
+msgid "Zoom"
+msgstr "Масштаб"
+
+#: ../shell/ev-window.c:5699
+msgid "Adjust the zoom level"
+msgstr "Изменить масштаб"
+
+#: ../shell/ev-window.c:5709
+msgid "Navigation"
+msgstr "Перемещение"
+
+#: ../shell/ev-window.c:5711
+msgid "Back"
+msgstr "Назад"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5714
+msgid "Move across visited pages"
+msgstr "Перемещаться по предыдущим страницам"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5744
+msgid "Previous"
+msgstr "Предыдущая"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5749
+msgid "Next"
+msgstr "Следующая"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5753
+msgid "Zoom In"
+msgstr "Увеличить"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5757
+msgid "Zoom Out"
+msgstr "Уменьшить"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5765
+msgid "Fit Width"
+msgstr "По ширине страницы"
+
+#: ../shell/ev-window.c:5910
+#: ../shell/ev-window.c:5927
+msgid "Unable to launch external application."
+msgstr "Не удалось запустить внешнее приложение."
+
+#: ../shell/ev-window.c:5984
+msgid "Unable to open external link"
+msgstr "Не удалось открыть внешнюю ссылку"
+
+#: ../shell/ev-window.c:6151
+msgid "Couldn't find appropriate format to save image"
+msgstr "Не удалось найти подходящий формат для сохранения изображения"
+
+#: ../shell/ev-window.c:6193
+msgid "The image could not be saved."
+msgstr "Не удалось сохранить изображение."
+
+#: ../shell/ev-window.c:6225
+msgid "Save Image"
+msgstr "Сохранить изображение"
+
+#: ../shell/ev-window.c:6353
+msgid "Unable to open attachment"
+msgstr "Не удалось открыть вложение"
+
+#: ../shell/ev-window.c:6406
+msgid "The attachment could not be saved."
+msgstr "Не удалось сохранить вложение."
+
+#: ../shell/ev-window.c:6451
+msgid "Save Attachment"
+msgstr "Сохранить вложение"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s ― требуется пароль"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "По расширению"
+
+#: ../shell/main.c:69
+#: ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Просмотр документов"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Отображаемая метка страницы документа."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "СТРАНИЦА"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Отображаемый номер страницы документа."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "НОМЕР"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Запустить Evince в полноэкранном режиме"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Запустить Evince в режиме презентации"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Запустить Evince в режиме предварительного просмотра"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Слово или фраза, которые надо найти в документе"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "СТРОКА"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[ФАЙЛ…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid "Boolean options available: true enables thumbnailing and false disables the creation of new thumbnails"
+msgstr "Возможно логическое значение: true включает создание образцов, а false выключает создание новых образцов"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Включить создание образцов для документов PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Команда создания образцов для документов PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid "Valid command plus arguments for the PDF Document thumbnailer. See Caja thumbnailer documentation for more information."
+msgstr "Команда и аргументы для запуска программы создания изображения документа PDF. Для получения дополнительной информации смотрите документацию по Caja."
diff --git a/po/rw.po b/po/rw.po
new file mode 100644
index 00000000..c4dc5f04
--- /dev/null
+++ b/po/rw.po
@@ -0,0 +1,841 @@
+# translation of evince to Kinyarwanda.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince package.
+# Steve Murphy <[email protected]>, 2005
+# Steve performed initial rough translation from compendium built from translations provided by the following translators:
+# Philibert Ndandali <[email protected]>, 2005.
+# Viateur MUGENZI <[email protected]>, 2005.
+# Noëlla Mupole <[email protected]>, 2005.
+# Carole Karema <[email protected]>, 2005.
+# JEAN BAPTISTE NGENDAHAYO <[email protected]>, 2005.
+# Augustin KIBERWA <[email protected]>, 2005.
+# Donatien NSENGIYUMVA <[email protected]>, 2005..
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-04-01 11:26-0700\n"
+"PO-Revision-Date: 2005-03-31 20:55-0700\n"
+"Last-Translator: Steve Murphy <[email protected]>\n"
+"Language-Team: Kinyarwanda <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"ULL NAME <EMAIL@ADDRESS>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: data/evince-password.glade.h:1
+msgid "*"
+msgstr "*"
+
+#: data/evince-password.glade.h:2
+#, fuzzy
+msgid "<span size=\"smaller\"> </span>"
+msgstr "<Ingano Gitoya"
+
+# basctl/source\basicide\moduldlg.src:RID_TP_LIBS.RID_PB_PASSWORD.text
+#: data/evince-password.glade.h:3
+#, fuzzy
+msgid "_Password:"
+msgstr "Ijambobanga..."
+
+#: data/evince.desktop.in.h:1 shell/ev-window.c:470
+msgid "Document Viewer"
+msgstr ""
+
+#: data/evince.desktop.in.h:2 shell/main.c:87
+msgid "Evince Document Viewer"
+msgstr ""
+
+#: data/evince.desktop.in.h:3
+#, fuzzy
+msgid "View multipage documents"
+msgstr "Inyandiko"
+
+#: data/evince.schemas.in.h:1
+#, fuzzy
+msgid "Default sidebar size"
+msgstr "Umurongo wo ku mpande Ingano"
+
+#: data/evince.schemas.in.h:2
+#, fuzzy
+msgid "Show sidebar by default"
+msgstr "Umurongo wo ku mpande ku Mburabuzi"
+
+#: data/evince.schemas.in.h:3
+#, fuzzy
+msgid "Show sidebar by default."
+msgstr "Umurongo wo ku mpande ku Mburabuzi"
+
+#: data/evince.schemas.in.h:4
+#, fuzzy
+msgid "Show statusbar by default"
+msgstr "ku Mburabuzi"
+
+#: data/evince.schemas.in.h:5
+#, fuzzy
+msgid "Show statusbar by default."
+msgstr "ku Mburabuzi"
+
+#: data/evince.schemas.in.h:6
+#, fuzzy
+msgid "Show toolbar by default"
+msgstr "Umwanyabikoresho ku Mburabuzi"
+
+#: data/evince.schemas.in.h:7
+#, fuzzy
+msgid "Show toolbar by default."
+msgstr "Umwanyabikoresho ku Mburabuzi"
+
+#: data/evince.schemas.in.h:8
+#, fuzzy
+msgid "The default sidebar size."
+msgstr "Mburabuzi Umurongo wo ku mpande Ingano"
+
+#: ps/gsdefaults.c:30
+msgid "BBox"
+msgstr ""
+
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_STD.10.text
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_DRAW.13.text
+#: ps/gsdefaults.c:31
+msgid "Letter"
+msgstr "Ibaruwa"
+
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_STD.12.text
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_DRAW.15.text
+#: ps/gsdefaults.c:32
+msgid "Tabloid"
+msgstr "Imiterere binyamakuru"
+
+#: ps/gsdefaults.c:33
+msgid "Ledger"
+msgstr ""
+
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_STD.11.text
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_DRAW.14.text
+#: ps/gsdefaults.c:34
+msgid "Legal"
+msgstr "By'amategeko"
+
+#: ps/gsdefaults.c:35
+msgid "Statement"
+msgstr "Inyandiko"
+
+#: ps/gsdefaults.c:36
+msgid "Executive"
+msgstr ""
+
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_DRAW.1.text
+#: ps/gsdefaults.c:37
+msgid "A0"
+msgstr "A0"
+
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_DRAW.2.text
+#: ps/gsdefaults.c:38
+msgid "A1"
+msgstr "A1"
+
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_DRAW.3.text
+#: ps/gsdefaults.c:39
+msgid "A2"
+msgstr "A2"
+
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_STD.1.text
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_DRAW.4.text
+#: ps/gsdefaults.c:40
+msgid "A3"
+msgstr "A3"
+
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_STD.2.text
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_DRAW.5.text
+#: ps/gsdefaults.c:41
+msgid "A4"
+msgstr "A4"
+
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_STD.3.text
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\page.src:RID_SVXSTRARY_PAPERSIZE_DRAW.6.text
+#: ps/gsdefaults.c:42
+msgid "A5"
+msgstr "A5"
+
+#: ps/gsdefaults.c:43
+msgid "B4"
+msgstr ""
+
+#: ps/gsdefaults.c:44
+msgid "B5"
+msgstr ""
+
+#: ps/gsdefaults.c:45
+msgid "Folio"
+msgstr ""
+
+#: ps/gsdefaults.c:46
+msgid "Quarto"
+msgstr ""
+
+#: ps/gsdefaults.c:47
+msgid "10x14"
+msgstr ""
+
+#: ps/ps-document.c:142
+#, fuzzy
+msgid "No document loaded."
+msgstr "Inyandiko"
+
+#: ps/ps-document.c:538
+msgid "Broken pipe."
+msgstr ""
+
+#: ps/ps-document.c:722
+#, fuzzy
+msgid "Interpreter failed."
+msgstr "Byanze"
+
+#. report error
+#: ps/ps-document.c:844
+#, fuzzy, c-format
+msgid "Error while decompressing file %s:\n"
+msgstr "IDOSIYE"
+
+#: ps/ps-document.c:1037
+#, fuzzy, c-format
+msgid "Cannot open file %s.\n"
+msgstr "Gufungura IDOSIYE"
+
+#: ps/ps-document.c:1039
+#, fuzzy
+msgid "File is not readable."
+msgstr "Idosiye%S ntirisomeka"
+
+#: ps/ps-document.c:1059
+#, fuzzy, c-format
+msgid "Error while scanning file %s\n"
+msgstr "IDOSIYE"
+
+#: ps/ps-document.c:1062
+#, fuzzy
+msgid "The file is not a PostScript document."
+msgstr "IDOSIYE ni OYA a Inyandiko"
+
+#: ps/ps-document.c:1075
+msgid "Document loaded."
+msgstr ""
+
+#: shell/eggfindbar.c:141
+#, fuzzy
+msgid "Search string"
+msgstr "Ikurikiranyanyuguti"
+
+#: shell/eggfindbar.c:142
+#, fuzzy
+msgid "The name of the string to be found"
+msgstr "Izina: Bya i Ikurikiranyanyuguti Kuri Byabonetse"
+
+# officecfg/registry\schema\org\openoffice\Office\Calc.xcs:....Calculate.Other.CaseSensitive.text
+#: shell/eggfindbar.c:155
+msgid "Case sensitive"
+msgstr "Imyandikire y'inyuguti nkuru/nto"
+
+#: shell/eggfindbar.c:156
+#, fuzzy
+msgid "TRUE for a case sensitive search"
+msgstr "kugirango a Gushaka"
+
+#: shell/eggfindbar.c:163
+#, fuzzy
+msgid "Highlight color"
+msgstr "Garagaza ibara"
+
+#: shell/eggfindbar.c:164
+#, fuzzy
+msgid "Color of highlight for all matches"
+msgstr "Bya garagaza cyane kugirango Byose"
+
+#: shell/eggfindbar.c:170
+#, fuzzy
+msgid "Current color"
+msgstr "Ibara"
+
+#: shell/eggfindbar.c:171
+#, fuzzy
+msgid "Color of highlight for the current match"
+msgstr "Bya garagaza cyane kugirango i KIGEZWEHO BIHUYE"
+
+# sfx2/source\appl\newhelp.src:STR_HELP_BUTTON_SEARCHDIALOG.text
+#: shell/eggfindbar.c:288
+#, fuzzy
+msgid "F_ind:"
+msgstr "Gushaka..."
+
+#: shell/eggfindbar.c:301
+#, fuzzy
+msgid "_Previous"
+msgstr "Ibanjirije"
+
+#: shell/eggfindbar.c:302
+#, fuzzy
+msgid "_Next"
+msgstr "Bikurikira"
+
+# officecfg/registry\schema\org\openoffice\Office\Calc.xcs:....Calculate.Other.CaseSensitive.text
+#: shell/eggfindbar.c:314
+#, fuzzy
+msgid "C_ase Sensitive"
+msgstr "Imyandikire y'inyuguti nkuru/ nto"
+
+# dbaccess/source/ui/inc/toolbox.hrc:MID_DOCUMENT_OPEN.text
+#: shell/ev-application.c:120
+#, fuzzy
+msgid "Open document"
+msgstr "Gufungura Inyandiko"
+
+#: shell/ev-application.c:130
+#, fuzzy
+msgid "PostScript and PDF Documents"
+msgstr "Na"
+
+#: shell/ev-application.c:138
+msgid "PostScript Documents"
+msgstr ""
+
+#: shell/ev-application.c:145 shell/ev-window.c:875
+msgid "PDF Documents"
+msgstr ""
+
+#: shell/ev-application.c:150
+msgid "Images"
+msgstr "Ishusho"
+
+#: shell/ev-application.c:155 shell/ev-window.c:880
+msgid "All Files"
+msgstr "Amadosiye yose"
+
+#: shell/ev-password-view.c:111
+#, fuzzy
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "Inyandiko ni Gifunze Na Gusoma ku i Ijambobanga..."
+
+#: shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr ""
+
+#: shell/ev-password.c:88
+#, fuzzy
+msgid "Unable to find glade file"
+msgstr "Kuri Gushaka IDOSIYE"
+
+#: shell/ev-password.c:90
+#, fuzzy, c-format
+msgid ""
+"The glade file, %s, cannot be found. Please check that your installation is "
+"complete."
+msgstr "IDOSIYE Byabonetse Kugenzura... iyinjizaporogaramu ni Byuzuye"
+
+# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-#
+# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-#
+# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-#
+# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-#
+#: shell/ev-password.c:104
+msgid "Password required"
+msgstr "Ijambobanga ni ngombwa"
+
+#: shell/ev-password.c:105
+#, fuzzy, c-format
+msgid ""
+"The document <i>%s</i> is locked and requires a password before it can be "
+"opened."
+msgstr "Inyandiko i i ni Gifunze Na a Ijambobanga... Mbere"
+
+# basctl/source\basicide\basidesh.src:RID_STR_WRONGPASSWORD.text
+#: shell/ev-password.c:142
+#, fuzzy
+msgid "Incorrect password"
+msgstr "ijambobanga si ryo"
+
+#: shell/ev-sidebar-links.c:132
+msgid "Loading..."
+msgstr "Itangira..."
+
+#: shell/ev-view.c:720
+#, fuzzy, c-format
+msgid "Go to page %s"
+msgstr "Kuri Ipaji"
+
+#. g_mutex_unlock (EV_DOC_MUTEX);
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: shell/ev-view.c:1156
+#, fuzzy, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%dByabonetse ku iyi Ipaji"
+
+#: shell/ev-view.c:1168
+#, fuzzy
+msgid "Not found"
+msgstr "Bitabonetse"
+
+#: shell/ev-view.c:1170
+#, fuzzy, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%%Kuri Gushaka"
+
+#: shell/ev-window.c:378
+#, fuzzy
+msgid "Unable to open document"
+msgstr "Kuri Gufungura Inyandiko"
+
+#: shell/ev-window.c:464
+msgid "Document Viewer - Password Required"
+msgstr ""
+
+#: shell/ev-window.c:466
+#, c-format
+msgid "%s - Password Required"
+msgstr ""
+
+#: shell/ev-window.c:742
+#, fuzzy, c-format
+msgid "Unhandled MIME type: '%s'"
+msgstr "Ubwoko"
+
+#: shell/ev-window.c:846
+#, fuzzy, c-format
+msgid "The file could not be saved as \"%s\"."
+msgstr "IDOSIYE OYA Nka"
+
+#: shell/ev-window.c:867
+#, fuzzy
+msgid "Save a Copy"
+msgstr "Kubika a"
+
+# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-#
+# #-#-#-#-# dbaccess.pot (PACKAGE VERSION) #-#-#-#-#
+#: shell/ev-window.c:949
+msgid "Print"
+msgstr "Gucapa"
+
+#: shell/ev-window.c:972
+#, fuzzy
+msgid "Printing is not supported on this printer."
+msgstr "ni OYA ku iyi Mucapyi"
+
+#: shell/ev-window.c:975
+#, fuzzy, c-format
+msgid ""
+"You were trying to print to a printer using the \"%s\" driver. This program "
+"requires a PostScript printer driver."
+msgstr ""
+"Kuri Gucapa Kuri a Mucapyi ikoresha i Musomyi: Porogaramu a Mucapyi Musomyi:"
+
+#: shell/ev-window.c:1027
+#, fuzzy
+msgid "The \"Find\" feature will not work with this document"
+msgstr "OYA Akazi Na: iyi Inyandiko"
+
+#: shell/ev-window.c:1029
+#, fuzzy
+msgid "Searching for text is only supported for PDF documents."
+msgstr "kugirango Umwandiko ni kugirango Inyandiko"
+
+#. Toolbar-only
+#: shell/ev-window.c:1245 shell/ev-window.c:2024
+msgid "Leave Fullscreen"
+msgstr ""
+
+#: shell/ev-window.c:1630
+msgid "Many..."
+msgstr ""
+
+#: shell/ev-window.c:1635
+msgid "Not so many..."
+msgstr ""
+
+#: shell/ev-window.c:1640
+#, fuzzy
+msgid ""
+"Evince is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+msgstr ""
+"ni Kigenga Na Cyangwa i Bya i Nka Verisiyo 2. Bya i ku Ihitamo Verisiyo"
+
+#: shell/ev-window.c:1644
+#, fuzzy
+msgid ""
+"Evince is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+msgstr "ni in i ATARIIGIHARWE i Cyangwa A kugirango Birenzeho Birambuye"
+
+#: shell/ev-window.c:1648
+#, fuzzy
+msgid ""
+"You should have received a copy of the GNU General Public License\n"
+"along with Evince; if not, write to the Free Software Foundation, Inc.,\n"
+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr "BYAKIRIWE a Gukoporora Bya i Na: NIBA OYA Kwandika Kuri i"
+
+#: shell/ev-window.c:1670 shell/main.c:82
+msgid "Evince"
+msgstr ""
+
+#: shell/ev-window.c:1673
+#, fuzzy
+msgid "© 1996-2004 The Evince authors"
+msgstr "Abahanzi"
+
+#: shell/ev-window.c:1676
+#, fuzzy
+msgid "PostScript and PDF File Viewer."
+msgstr "Na Idosiye"
+
+#: shell/ev-window.c:1679
+#, fuzzy
+msgid "translator-credits"
+msgstr "Umusemuzi"
+
+# sc/source\ui\src\globstr.src:RID_GLOBSTR.STR_HFCMD_FILE.text
+#: shell/ev-window.c:1955
+#, fuzzy
+msgid "_File"
+msgstr "IDOSIYE"
+
+# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-#
+# basctl/source\basicide\basidesh.src:RID_BASICMENU.MN_EDIT.text
+# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-#
+# basctl/source\basicide\basidesh.src:RID_BASICPLUGINMENU.MN_PLEDIT.text
+# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-#
+# basctl/source\basicide\macrodlg.src:RID_MACROCHOOSER.RID_PB_EDIT.text
+# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-#
+# basctl/source\basicide\moduldlg.src:RID_TP_MODULS.RID_PB_EDIT.text
+# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-#
+# basctl/source\basicide\moduldlg.src:RID_TP_LIBS.RID_PB_EDIT.text
+#: shell/ev-window.c:1956
+#, fuzzy
+msgid "_Edit"
+msgstr "Guhindura"
+
+# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-#
+# basctl/source\basicide\basidesh.src:RID_BASICMENU.MN_VIEW.text
+# #-#-#-#-# basctl.pot (PACKAGE VERSION) #-#-#-#-#
+# basctl/source\basicide\basidesh.src:RID_BASICPLUGINMENU.MN_PLVIEW.text
+#: shell/ev-window.c:1957
+#, fuzzy
+msgid "_View"
+msgstr "Kureba"
+
+#: shell/ev-window.c:1958
+#, fuzzy
+msgid "_Go"
+msgstr "Gyayo"
+
+#: shell/ev-window.c:1959
+#, fuzzy
+msgid "_Help"
+msgstr "Ifashayobora"
+
+#: shell/ev-window.c:1963
+#, fuzzy
+msgid "Open an existing document"
+msgstr "Inyandiko"
+
+#: shell/ev-window.c:1965
+#, fuzzy
+msgid "_Save a Copy..."
+msgstr "Kubika a"
+
+#: shell/ev-window.c:1966
+#, fuzzy
+msgid "Save the current document with a new filename"
+msgstr "Kubika i KIGEZWEHO Inyandiko Na: a Gishya Izina ry'idosiye:"
+
+# sfx2/source\appl\newhelp.src:STR_HELP_BUTTON_PRINT.text
+#: shell/ev-window.c:1968
+msgid "Print..."
+msgstr "Gucapa..."
+
+#: shell/ev-window.c:1969
+#, fuzzy
+msgid "Print this document"
+msgstr "iyi Inyandiko"
+
+#: shell/ev-window.c:1972
+#, fuzzy
+msgid "Close this window"
+msgstr "Funga iyi Idirishya"
+
+#: shell/ev-window.c:1977
+#, fuzzy
+msgid "Copy text from the document"
+msgstr "Umwandiko Bivuye i Inyandiko"
+
+# #-#-#-#-# padmin.pot (PACKAGE VERSION) #-#-#-#-#
+# padmin/source\padialog.src:RID_FONTIMPORT_DIALOG.RID_FIMP_BTN_SELECTALL.text
+# #-#-#-#-# padmin.pot (PACKAGE VERSION) #-#-#-#-#
+# padmin/source\padialog.src:RID_ADDP_PAGE_OLDPRINTERS.RID_ADDP_OLD_BTN_SELECTALL.text
+#: shell/ev-window.c:1979
+#, fuzzy
+msgid "Select _All"
+msgstr "Hitamo byose"
+
+#: shell/ev-window.c:1980
+#, fuzzy
+msgid "Select the entire page"
+msgstr "i Ipaji"
+
+#: shell/ev-window.c:1983
+#, fuzzy
+msgid "Find a word or phrase in the document"
+msgstr "a ijambo Cyangwa in i Inyandiko"
+
+#: shell/ev-window.c:1988
+#, fuzzy
+msgid "Enlarge the document"
+msgstr "i Inyandiko"
+
+#: shell/ev-window.c:1991
+#, fuzzy
+msgid "Shrink the document"
+msgstr "i Inyandiko"
+
+#: shell/ev-window.c:1994
+#, fuzzy
+msgid "Reset the zoom level to the default value"
+msgstr "i Ihindurangano urwego Kuri i Mburabuzi Agaciro"
+
+# sfx2/sdi\sfxslots.src:SID_RELOAD.text
+#: shell/ev-window.c:1996
+#, fuzzy
+msgid "_Reload"
+msgstr "Kongera Gutangiza"
+
+#: shell/ev-window.c:1997
+#, fuzzy
+msgid "Reload the document"
+msgstr "Kongerakuyitangiza i Inyandiko"
+
+# sc/sdi\scslots.src:SID_PREVIEW_PREVIOUS.text
+#. Go menu
+#: shell/ev-window.c:2001
+#, fuzzy
+msgid "_Previous Page"
+msgstr "Ipaji ibanje"
+
+#: shell/ev-window.c:2002
+#, fuzzy
+msgid "Go to the previous page"
+msgstr "Kuri i Ibanjirije Ipaji"
+
+# sc/sdi\scslots.src:SID_PREVIEW_NEXT.text
+#: shell/ev-window.c:2004
+#, fuzzy
+msgid "_Next Page"
+msgstr "Ipaji ikurikira"
+
+#: shell/ev-window.c:2005
+#, fuzzy
+msgid "Go to the next page"
+msgstr "Kuri i Komeza>> Ipaji"
+
+# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Writer.xcs:....Wizard.Letter.Print.Sender..1.text
+# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Writer.xcs:....Wizard.Letter.Print.Logo..1.text
+# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Writer.xcs:....Wizard.Letter.Print.Tray.Page1.text
+#: shell/ev-window.c:2007
+#, fuzzy
+msgid "_First Page"
+msgstr "Ipaji ibanza"
+
+#: shell/ev-window.c:2008
+#, fuzzy
+msgid "Go to the first page"
+msgstr "Kuri i Itangira Ipaji"
+
+# sc/sdi\scslots.src:SID_PREVIEW_LAST.text
+#: shell/ev-window.c:2010
+#, fuzzy
+msgid "_Last Page"
+msgstr "Ipaji ya nyuma"
+
+#: shell/ev-window.c:2011
+#, fuzzy
+msgid "Go to the last page"
+msgstr "Kuri i Iheruka Ipaji"
+
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\dbgui\validate.src:TP_VALIDATION_INPUTHELP.FL_CONTENT.text
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\dbgui\validate.src:TP_VALIDATION_ERROR.FL_CONTENT.text
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\navipi\navipi.src:RID_SCDLG_NAVIGATOR.TBX_CMD.IID_ZOOMOUT.text
+# #-#-#-#-# sc.pot (PACKAGE VERSION) #-#-#-#-#
+# sc/source\ui\navipi\navipi.src:SCSTR_CONTENT_ROOT.text
+#. Help menu
+#: shell/ev-window.c:2015
+#, fuzzy
+msgid "_Contents"
+msgstr "Ibigize"
+
+#: shell/ev-window.c:2016
+#, fuzzy
+msgid "Display help for the viewer application"
+msgstr "Ifashayobora kugirango i Porogaramu"
+
+#: shell/ev-window.c:2019
+#, fuzzy
+msgid "_About"
+msgstr "Bigyanye"
+
+#: shell/ev-window.c:2020
+#, fuzzy
+msgid "Display credits for the document viewer creators"
+msgstr "kugirango i Inyandiko"
+
+#: shell/ev-window.c:2025
+#, fuzzy
+msgid "Leave fullscreen mode"
+msgstr "Ubwoko"
+
+#. View Menu
+#: shell/ev-window.c:2032
+#, fuzzy
+msgid "_Toolbar"
+msgstr "Umwanyabikoresho"
+
+#: shell/ev-window.c:2033
+#, fuzzy
+msgid "Show or hide the toolbar"
+msgstr "Cyangwa Gushisha i Umwanyabikoresho"
+
+#: shell/ev-window.c:2035
+msgid "_Statusbar"
+msgstr ""
+
+#: shell/ev-window.c:2036
+#, fuzzy
+msgid "Show or hide the statusbar"
+msgstr "Cyangwa Gushisha i"
+
+#: shell/ev-window.c:2038
+msgid "Side _pane"
+msgstr ""
+
+#: shell/ev-window.c:2039
+#, fuzzy
+msgid "Show or hide the side pane"
+msgstr "Cyangwa Gushisha i"
+
+#: shell/ev-window.c:2041
+msgid "_Fullscreen"
+msgstr ""
+
+#: shell/ev-window.c:2042
+#, fuzzy
+msgid "Expand the window to fill the screen"
+msgstr "i Idirishya Kuri Kuzuza i Mugaragaza"
+
+#: shell/ev-window.c:2044
+msgid "_Best Fit"
+msgstr ""
+
+#: shell/ev-window.c:2045
+#, fuzzy
+msgid "Make the current document fill the window"
+msgstr "i KIGEZWEHO Inyandiko Kuzuza i Idirishya"
+
+#: shell/ev-window.c:2047
+msgid "Fit Page _Width"
+msgstr ""
+
+#: shell/ev-window.c:2048
+#, fuzzy
+msgid "Make the current document fill the window width"
+msgstr "i KIGEZWEHO Inyandiko Kuzuza i Idirishya Ubugari"
+
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/inc\globlmn.hrc:ITEM_FORMAT_PARA_LINESPACE_10.text
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\chardlg.src:RID_SVXPAGE_CHAR_EFFECTS.LB_UNDERLINE.2.text
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\chardlg.src:RID_SVXPAGE_CHAR_EFFECTS.LB_STRIKEOUT.2.text
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\paragrph.src:RID_SVXPAGE_STD_PARAGRAPH.LB_LINEDIST.1.text
+# #-#-#-#-# svx.pot (PACKAGE VERSION) #-#-#-#-#
+# svx/source\dialog\tabarea.src:RID_SVXPAGE_HATCH.LB_LINE_TYPE.1.text
+#: shell/ev-window.c:2053
+msgid "Single"
+msgstr "cyonyine"
+
+#: shell/ev-window.c:2054
+#, fuzzy
+msgid "Show the document one page at a time"
+msgstr "i Inyandiko Ipaji ku a Igihe"
+
+#: shell/ev-window.c:2056
+msgid "Multi"
+msgstr ""
+
+#: shell/ev-window.c:2057
+#, fuzzy
+msgid "Show the full document at once"
+msgstr "i Inyandiko ku Rimwe"
+
+# basctl/source\basicide\basidesh.src:RID_STR_PAGE.text
+#: shell/ev-window.c:2086
+msgid "Page"
+msgstr "Ipaji"
+
+#: shell/ev-window.c:2087
+msgid "Select Page"
+msgstr ""
+
+#. translators: this is the label for toolbar button
+#: shell/ev-window.c:2100
+msgid "Previous"
+msgstr "Ibanjirije"
+
+#: shell/ev-window.c:2105
+msgid "Next"
+msgstr "Ikurikira"
+
+#. translators: this is the label for toolbar button
+#: shell/ev-window.c:2108
+msgid "Fit Width"
+msgstr ""
+
+# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Writer.xcs:....DefaultFont.Index.text
+# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Writer.xcs:....DefaultFontCJK.Index.text
+# #-#-#-#-# officecfg.pot (PACKAGE VERSION) #-#-#-#-#
+# officecfg/registry\schema\org\openoffice\Office\Writer.xcs:....DefaultFontCTL.Index.text
+#: shell/ev-window.c:2301
+msgid "Index"
+msgstr "Umubarendanga"
+
+#: shell/ev-window.c:2308
+msgid "Thumbnails"
+msgstr ""
diff --git a/po/si.po b/po/si.po
new file mode 100644
index 00000000..a621162a
--- /dev/null
+++ b/po/si.po
@@ -0,0 +1,1363 @@
+# translation of si.po to Sinhala
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Danishka Navin <[email protected]>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: si\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-08-02 03:16+0100\n"
+"PO-Revision-Date: 2007-08-02 12:03+0530\n"
+"Last-Translator: Danishka Navin <[email protected]>\n"
+"Language-Team: Sinhala <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:150
+msgid "File corrupted."
+msgstr ""
+
+#: ../backend/comics/comics-document.c:186
+#, c-format
+msgid "No images found in archive %s"
+msgstr ""
+
+#: ../backend/djvu/djvu-document.c:162
+msgid ""
+"The document is composed by several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+
+#: ../backend/dvi/dvi-document.c:98
+msgid "File not available"
+msgstr "ගොනුව භාවිතයේ නැත"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr ""
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:687
+
+msgid "Yes"
+msgstr "ඔව්"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:690
+
+msgid "No"
+msgstr "නැත"
+
+#: ../backend/pdf/ev-poppler.cc:790
+msgid "Type 1"
+msgstr "වර්‍ගය 1"
+
+#: ../backend/pdf/ev-poppler.cc:792
+msgid "Type 1C"
+msgstr "වර්‍ගය 1C"
+
+#: ../backend/pdf/ev-poppler.cc:794
+msgid "Type 3"
+msgstr "වර්‍ගය 3"
+
+#: ../backend/pdf/ev-poppler.cc:796
+msgid "TrueType"
+msgstr "සත්‍ය වර්‍ගය"
+
+#: ../backend/pdf/ev-poppler.cc:798
+msgid "Type 1 (CID)"
+msgstr "වර්‍ගය 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:800
+msgid "Type 1C (CID)"
+msgstr "වර්‍ගය 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:802
+msgid "TrueType (CID)"
+msgstr "සත්‍ය වර්‍ගය (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:804
+msgid "Unknown font type"
+msgstr "නොදන්නා අක්‍ෂර වර්‍ගය"
+
+#: ../backend/pdf/ev-poppler.cc:830
+
+msgid "No name"
+msgstr "නමක් නැත"
+
+#: ../backend/pdf/ev-poppler.cc:838
+msgid "Embedded subset"
+msgstr "කාවැද්දු උප කුළකය"
+
+#: ../backend/pdf/ev-poppler.cc:840
+msgid "Embedded"
+msgstr "කාවැද්දු"
+
+#: ../backend/pdf/ev-poppler.cc:842
+msgid "Not embedded"
+msgstr "කාවැද්දා නැති"
+
+#: ../backend/impress/zip.c:52
+msgid "No error"
+msgstr "දෝෂ නැත"
+
+#: ../backend/impress/zip.c:55
+msgid "Not enough memory"
+msgstr "මතකය ප්‍රමාණවත් නැත"
+
+#: ../backend/impress/zip.c:58
+msgid "Cannot find zip signature"
+msgstr ""
+
+#: ../backend/impress/zip.c:61
+msgid "Invalid zip file"
+msgstr "සාවද්‍ය zip ගොනුව"
+
+#: ../backend/impress/zip.c:64
+msgid "Multi file zips are not supported"
+msgstr ""
+
+#: ../backend/impress/zip.c:67
+msgid "Cannot open the file"
+msgstr "ගොනුව විවෘත කළ නොහැක"
+
+#: ../backend/impress/zip.c:70
+msgid "Cannot read data from file"
+msgstr "ගොනුවෙන් දත්ත කියවිය නොහැක"
+
+#: ../backend/impress/zip.c:73
+msgid "Cannot find file in the zip archive"
+msgstr ""
+
+#: ../backend/impress/zip.c:76
+
+msgid "Unknown error"
+msgstr "නොදන්නා දෝෂයක්"
+
+#: ../backend/ps/gsdefaults.c:30
+msgid "BBox"
+msgstr "BBox"
+
+#: ../backend/ps/gsdefaults.c:31
+msgid "Letter"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:32
+msgid "Tabloid"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:33
+msgid "Ledger"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:34
+msgid "Legal"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:35
+msgid "Statement"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:36
+msgid "Executive"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:37
+
+msgid "A0"
+msgstr "A0"
+
+#: ../backend/ps/gsdefaults.c:38
+
+msgid "A1"
+msgstr "A1"
+
+#: ../backend/ps/gsdefaults.c:39
+
+msgid "A2"
+msgstr "A2"
+
+#: ../backend/ps/gsdefaults.c:40
+
+msgid "A3"
+msgstr "A3"
+
+#: ../backend/ps/gsdefaults.c:41
+
+msgid "A4"
+msgstr "A4"
+
+#: ../backend/ps/gsdefaults.c:42
+
+msgid "A5"
+msgstr "A5"
+
+#: ../backend/ps/gsdefaults.c:43
+msgid "B4"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:44
+msgid "B5"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:45
+msgid "Folio"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:46
+msgid "Quarto"
+msgstr ""
+
+#: ../backend/ps/gsdefaults.c:47
+msgid "10x14"
+msgstr ""
+
+#: ../backend/ps/ps-document.c:172 ../backend/ps/ps-document.c:186
+#, c-format
+msgid "Cannot open file “%s”."
+msgstr ""
+
+#: ../backend/ps/ps-document.c:233
+#, c-format
+msgid "Failed to load document “%s”. Ghostscript interpreter was not found in path"
+msgstr ""
+
+#: ../backend/ps/ps-document.c:250
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr ""
+
+#: ../backend/ps/ps-document.c:439
+msgid "Encapsulated PostScript"
+msgstr ""
+
+#: ../backend/ps/ps-document.c:440
+msgid "PostScript"
+msgstr ""
+
+#: ../backend/ps/ps-interpreter.c:543
+msgid "Interpreter failed."
+msgstr ""
+
+#: ../backend/impress/impress-document.c:294
+msgid "Remote files aren't supported"
+msgstr ""
+
+#: ../backend/impress/impress-document.c:305
+msgid "Invalid document"
+msgstr "සාවද්‍ය ලේඛනය"
+
+#: ../libdocument/ev-attachment.c:303 ../libdocument/ev-attachment.c:316
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr ""
+
+#: ../libdocument/ev-attachment.c:348
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr ""
+
+#: ../libdocument/ev-attachment.c:381
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr ""
+
+#: ../libdocument/ev-document-factory.c:291
+#: ../libdocument/ev-document-factory.c:398
+msgid "Unknown MIME Type"
+msgstr "නොදන්නා MIME වර්‍ගය"
+
+#: ../libdocument/ev-document-factory.c:302
+#, c-format
+msgid "Unhandled MIME type: “%s”"
+msgstr ""
+
+#: ../libdocument/ev-document-factory.c:439
+msgid "All Documents"
+msgstr "සියළුම ලේඛන"
+
+#: ../libdocument/ev-document-factory.c:447
+msgid "PostScript Documents"
+msgstr ""
+
+#: ../libdocument/ev-document-factory.c:457
+msgid "PDF Documents"
+msgstr "PDF ලේඛන"
+
+#: ../libdocument/ev-document-factory.c:467 ../shell/ev-window.c:4941
+
+msgid "Images"
+msgstr "පිළිඹිබු"
+
+#: ../libdocument/ev-document-factory.c:477
+msgid "DVI Documents"
+msgstr "DVI ලේඛන"
+
+#: ../libdocument/ev-document-factory.c:487
+msgid "Djvu Documents"
+msgstr "Djvu ලේඛන"
+
+#: ../libdocument/ev-document-factory.c:497
+msgid "Comic Books"
+msgstr ""
+
+#: ../libdocument/ev-document-factory.c:507
+msgid "Impress Slides"
+msgstr ""
+
+#: ../libdocument/ev-document-factory.c:515
+
+msgid "All Files"
+msgstr "සියළුම ගොනු"
+
+#: ../cut-n-paste/recent-files/egg-recent-view-uimanager.c:205
+#, c-format
+msgid "Open “%s”"
+msgstr "“%s” විවෘත කරන්න"
+
+#: ../cut-n-paste/recent-files/egg-recent-view-uimanager.c:322
+
+msgid "Empty"
+msgstr "හිස්"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+
+msgid "Show “_%s”"
+msgstr "“_%s” පෙන්වන්න"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+
+msgid "_Move on Toolbar"
+msgstr "මෙවලම් පවරුව වෙත ගෙන යන්න (_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+
+msgid "Move the selected item on the toolbar"
+msgstr "තෝරාගත් අයිතමය මෙවලම් පවරුව වෙත ගෙන යන්න"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+
+msgid "_Remove from Toolbar"
+msgstr "මෙචලම් පුවරුවෙන් ඉවත් කරන්න (_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+
+msgid "Remove the selected item from the toolbar"
+msgstr "තෝරාගත් අයිතමය මෙචලම් පුවරුවෙන් ඉවත් කරන්න"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+
+msgid "_Delete Toolbar"
+msgstr "මෙවලම් පුවරුව මකන්න (_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+
+msgid "Remove the selected toolbar"
+msgstr "තෝරාගත් මෙවලම් පුවරුව ඉවත් කරන්න"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:439
+
+msgid "Separator"
+msgstr "වෙනකරනය"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+msgid "Running in presentation mode"
+msgstr ""
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:4531
+msgid "Best Fit"
+msgstr ""
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr ""
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:3683
+#: ../shell/ev-window-title.c:126
+msgid "Document Viewer"
+msgstr "ලේඛන දසුන"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr ""
+
+#: ../data/evince-password.glade.h:1
+msgid "Password Entry"
+msgstr "රහස්පද ඇතුළත් කිරීම්"
+
+#: ../data/evince-password.glade.h:2
+msgid "Remember password for this session"
+msgstr ""
+
+#: ../data/evince-password.glade.h:3
+msgid "Save password in keyring"
+msgstr ""
+
+#: ../data/evince-password.glade.h:4
+
+msgid "_Password:"
+msgstr "රහස්පදය: (_P)"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>කතෘ:</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>නිර්මාණය කළ දිනය:</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr ""
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>සංයුතිය:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr ""
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr ""
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr ""
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr ""
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Paper Size:</b>"
+msgstr ""
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Producer:</b>"
+msgstr "<b>නිෂ්පාදක:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Security:</b>"
+msgstr "<b>ආරක්‍ෂාව:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Subject:</b>"
+msgstr "<b>විශය:</b>"
+
+#: ../data/evince-properties.glade.h:13
+msgid "<b>Title:</b>"
+msgstr "<b>සිරස්තලය:</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr ""
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+
+#: ../properties/ev-properties-main.c:110
+
+msgid "Document"
+msgstr "ලේඛන"
+
+#: ../properties/ev-properties-view.c:182
+
+msgid "None"
+msgstr "කිසිවක් නැත"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:207
+#: ../properties/ev-properties-view.c:367
+msgid "default:mm"
+msgstr "පෙරනිමිය:mm"
+
+#. Metric measurement (millimeters)
+#: ../properties/ev-properties-view.c:249
+#: ../properties/ev-properties-view.c:404
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:253
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:277
+#: ../properties/ev-properties-view.c:415
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr ""
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:284
+#: ../properties/ev-properties-view.c:422
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr ""
+
+#. Imperial measurement (inches)
+#: ../properties/ev-properties-view.c:399
+#, c-format
+msgid "%.2f x %.2f in"
+msgstr "%.2f x %.2f in"
+
+#: ../shell/eggfindbar.c:158
+msgid "Search string"
+msgstr ""
+
+#: ../shell/eggfindbar.c:159
+msgid "The name of the string to be found"
+msgstr ""
+
+#: ../shell/eggfindbar.c:172
+msgid "Case sensitive"
+msgstr ""
+
+#: ../shell/eggfindbar.c:173
+msgid "TRUE for a case sensitive search"
+msgstr ""
+
+#: ../shell/eggfindbar.c:180
+msgid "Highlight color"
+msgstr ""
+
+#: ../shell/eggfindbar.c:181
+msgid "Color of highlight for all matches"
+msgstr ""
+
+#: ../shell/eggfindbar.c:187
+msgid "Current color"
+msgstr ""
+
+#: ../shell/eggfindbar.c:188
+msgid "Color of highlight for the current match"
+msgstr ""
+
+#: ../shell/eggfindbar.c:321
+msgid "Find:"
+msgstr "සොයන්න:"
+
+#: ../shell/eggfindbar.c:330
+msgid "Find Previous"
+msgstr ""
+
+#: ../shell/eggfindbar.c:334 ../shell/eggfindbar.c:337
+msgid "Find previous occurrence of the search string"
+msgstr ""
+
+#: ../shell/eggfindbar.c:343
+msgid "Find Next"
+msgstr ""
+
+#: ../shell/eggfindbar.c:347 ../shell/eggfindbar.c:350
+msgid "Find next occurrence of the search string"
+msgstr ""
+
+#: ../shell/eggfindbar.c:359
+msgid "C_ase Sensitive"
+msgstr ""
+
+#: ../shell/eggfindbar.c:363 ../shell/eggfindbar.c:366
+msgid "Toggle case sensitive search"
+msgstr ""
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr ""
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr ""
+
+#: ../shell/ev-password.c:83
+msgid "Password required"
+msgstr ""
+
+#: ../shell/ev-password.c:84
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+
+#: ../shell/ev-password.c:149
+
+msgid "Enter password"
+msgstr "රහස්පදය ඇතුළත් කරන්න"
+
+#: ../shell/ev-password.c:252
+#, c-format
+msgid "Password for document %s"
+msgstr ""
+
+#: ../shell/ev-password.c:334
+msgid "Incorrect password"
+msgstr ""
+
+#: ../shell/ev-password-view.c:111
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr ""
+
+#: ../shell/ev-properties-dialog.c:61
+
+msgid "Properties"
+msgstr "වත්කම්"
+
+#: ../shell/ev-properties-dialog.c:94
+
+msgid "General"
+msgstr "සාමාන්‍ය"
+
+#: ../shell/ev-properties-dialog.c:104
+
+msgid "Fonts"
+msgstr "අකුරු"
+
+#: ../shell/ev-properties-fonts.c:141
+
+msgid "Font"
+msgstr "අක්‍ෂර"
+
+#: ../shell/ev-properties-fonts.c:152
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr ""
+
+#: ../shell/ev-sidebar-attachments.c:670
+
+msgid "Attachments"
+msgstr "ඇමුණුම්"
+
+#: ../shell/ev-sidebar-links.c:266 ../shell/ev-view.c:3446
+
+msgid "Loading..."
+msgstr "පුරණය වෙමින්..."
+
+#: ../shell/ev-sidebar-links.c:342
+
+msgid "Print..."
+msgstr "මුද්‍රණය..."
+
+#: ../shell/ev-sidebar-links.c:722
+msgid "Index"
+msgstr "පටුන"
+
+#: ../shell/ev-sidebar-thumbnails.c:733
+msgid "Thumbnails"
+msgstr ""
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Up"
+msgstr ""
+
+#: ../shell/ev-view-accessible.c:43
+msgid "Scroll Down"
+msgstr ""
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Up"
+msgstr ""
+
+#: ../shell/ev-view-accessible.c:50
+msgid "Scroll View Down"
+msgstr ""
+
+#: ../shell/ev-view-accessible.c:536
+msgid "Document View"
+msgstr ""
+
+#: ../shell/ev-view.c:1422
+msgid "Go to first page"
+msgstr ""
+
+#: ../shell/ev-view.c:1424
+msgid "Go to previous page"
+msgstr ""
+
+#: ../shell/ev-view.c:1426
+msgid "Go to next page"
+msgstr ""
+
+#: ../shell/ev-view.c:1428
+msgid "Go to last page"
+msgstr ""
+
+#: ../shell/ev-view.c:1430
+msgid "Go to page"
+msgstr ""
+
+#: ../shell/ev-view.c:1432
+
+msgid "Find"
+msgstr "සොයන්න"
+
+#: ../shell/ev-view.c:1460
+#, c-format
+msgid "Go to page %s"
+msgstr ""
+
+#: ../shell/ev-view.c:1466
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr ""
+
+#: ../shell/ev-view.c:1469
+#, c-format
+msgid "Go to file “%s”"
+msgstr ""
+
+#: ../shell/ev-view.c:1477
+#, c-format
+msgid "Launch %s"
+msgstr ""
+
+#: ../shell/ev-view.c:2412
+msgid "End of presentation. Press Escape to exit."
+msgstr ""
+
+#: ../shell/ev-view.c:3168
+msgid "Jump to page:"
+msgstr ""
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:4817
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../shell/ev-view.c:4826
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr ""
+
+#: ../shell/ev-window.c:737
+#, c-format
+msgid "Page %s - %s"
+msgstr "පිටුව %s - %s"
+
+#: ../shell/ev-window.c:739
+#, c-format
+msgid "Page %s"
+msgstr "%s පිටුව"
+
+#: ../shell/ev-window.c:1347
+msgid "Unable to open document"
+msgstr ""
+
+#: ../shell/ev-window.c:1536
+msgid "Open Document"
+msgstr "ලේඛනය විවෘත කරන්න"
+
+#: ../shell/ev-window.c:1598
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr ""
+
+#: ../shell/ev-window.c:1627
+msgid "Cannot open a copy."
+msgstr ""
+
+#: ../shell/ev-window.c:1909 ../shell/ev-window.c:1996
+#: ../shell/ev-window.c:2052
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr ""
+
+#: ../shell/ev-window.c:1992
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr ""
+
+#: ../shell/ev-window.c:2096
+msgid "Save a Copy"
+msgstr "පිටපතක් සුරකින්න"
+
+#: ../shell/ev-window.c:2186 ../shell/ev-window.c:3384
+msgid "Failed to print document"
+msgstr ""
+
+#: ../shell/ev-window.c:2346 ../shell/ev-window.c:2525
+msgid "Printing is not supported on this printer."
+msgstr ""
+
+#: ../shell/ev-window.c:2461 ../shell/ev-window.c:2576
+#: ../shell/ev-window.c:4340
+
+msgid "Print"
+msgstr "මුද්‍රණය"
+
+#: ../shell/ev-window.c:2515
+msgid "Generating PDF is not supported"
+msgstr ""
+
+#: ../shell/ev-window.c:2527
+#, c-format
+msgid ""
+"You were trying to print to a printer using the “%s” driver. This program "
+"requires a PostScript printer driver."
+msgstr ""
+
+#: ../shell/ev-window.c:2585
+msgid "Pages"
+msgstr ""
+
+#: ../shell/ev-window.c:3167
+
+msgid "Toolbar Editor"
+msgstr "මෙවලම් පුවරු සකසනය"
+
+#: ../shell/ev-window.c:3679
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+
+#: ../shell/ev-window.c:3707
+msgid ""
+"Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:3711
+msgid ""
+"Evince 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.\n"
+msgstr ""
+
+#: ../shell/ev-window.c:3715
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+
+#: ../shell/ev-window.c:3739 ../shell/main.c:331
+msgid "Evince"
+msgstr ""
+
+#: ../shell/ev-window.c:3742
+msgid "© 1996-2007 The Evince authors"
+msgstr ""
+
+#: ../shell/ev-window.c:3748
+
+msgid "translator-credits"
+msgstr "පරිවර්තන ස්තුතිය"
+
+#: ../shell/ev-window.c:4251
+
+msgid "_File"
+msgstr "ගොනු (_F)"
+
+#: ../shell/ev-window.c:4252
+
+msgid "_Edit"
+msgstr "සැකසුම් (_E)"
+
+#: ../shell/ev-window.c:4253
+
+msgid "_View"
+msgstr "දසුන (_V)"
+
+#: ../shell/ev-window.c:4254
+
+msgid "_Go"
+msgstr "යන්න (_G)"
+
+#: ../shell/ev-window.c:4255
+
+msgid "_Help"
+msgstr "උදව් (_H)"
+
+#. File menu
+#: ../shell/ev-window.c:4258 ../shell/ev-window.c:4436
+
+msgid "_Open..."
+msgstr "විවෘත කරන්න... (_O)"
+
+#: ../shell/ev-window.c:4259
+msgid "Open an existing document"
+msgstr ""
+
+#: ../shell/ev-window.c:4261
+msgid "Op_en a Copy"
+msgstr ""
+
+#: ../shell/ev-window.c:4262
+msgid "Open a copy of the current document in a new window"
+msgstr ""
+
+#: ../shell/ev-window.c:4264 ../shell/ev-window.c:4438
+msgid "_Save a Copy..."
+msgstr ""
+
+#: ../shell/ev-window.c:4265
+msgid "Save a copy of the current document"
+msgstr ""
+
+#: ../shell/ev-window.c:4267
+msgid "Print Set_up..."
+msgstr ""
+
+#: ../shell/ev-window.c:4268
+msgid "Setup the page settings for printing"
+msgstr ""
+
+#: ../shell/ev-window.c:4270
+
+msgid "_Print..."
+msgstr "මුද්‍රණය... (_P)"
+
+#: ../shell/ev-window.c:4271 ../shell/ev-window.c:4341
+msgid "Print this document"
+msgstr ""
+
+#: ../shell/ev-window.c:4273
+
+msgid "P_roperties"
+msgstr "අංගයන් (_r)"
+
+#: ../shell/ev-window.c:4282 ../shell/ev-window.c:4284
+
+msgid "Select _All"
+msgstr "සියල්ල තෝරන්න (_A)"
+
+#: ../shell/ev-window.c:4287
+
+msgid "_Find..."
+msgstr "සොයන්න... (_F)"
+
+#: ../shell/ev-window.c:4288
+msgid "Find a word or phrase in the document"
+msgstr ""
+
+#: ../shell/ev-window.c:4290
+
+msgid "Find Ne_xt"
+msgstr "මීළඟ සෙවුම (_x)"
+
+#: ../shell/ev-window.c:4292
+
+msgid "Find Pre_vious"
+msgstr "පෙර සෙවුම (_x)"
+
+#: ../shell/ev-window.c:4294
+
+msgid "T_oolbar"
+msgstr "මෙවලම් පුවරුව (_o)"
+
+#: ../shell/ev-window.c:4296
+msgid "Rotate _Left"
+msgstr ""
+
+#: ../shell/ev-window.c:4298
+msgid "Rotate _Right"
+msgstr ""
+
+#: ../shell/ev-window.c:4303
+msgid "Enlarge the document"
+msgstr ""
+
+#: ../shell/ev-window.c:4306
+msgid "Shrink the document"
+msgstr ""
+
+#: ../shell/ev-window.c:4308
+
+msgid "_Reload"
+msgstr "ප්‍රතිපුරණය (_R)"
+
+#: ../shell/ev-window.c:4309
+msgid "Reload the document"
+msgstr ""
+
+#. Go menu
+#: ../shell/ev-window.c:4313
+msgid "_Previous Page"
+msgstr ""
+
+#: ../shell/ev-window.c:4314
+msgid "Go to the previous page"
+msgstr ""
+
+#: ../shell/ev-window.c:4316
+msgid "_Next Page"
+msgstr ""
+
+#: ../shell/ev-window.c:4317
+msgid "Go to the next page"
+msgstr ""
+
+#: ../shell/ev-window.c:4319
+msgid "_First Page"
+msgstr ""
+
+#: ../shell/ev-window.c:4320
+msgid "Go to the first page"
+msgstr ""
+
+#: ../shell/ev-window.c:4322
+msgid "_Last Page"
+msgstr ""
+
+#: ../shell/ev-window.c:4323
+msgid "Go to the last page"
+msgstr ""
+
+#. Help menu
+#: ../shell/ev-window.c:4327
+
+msgid "_Contents"
+msgstr "අන්තර්ගත (_C)"
+
+#: ../shell/ev-window.c:4330
+
+msgid "_About"
+msgstr "සම්බන්ධව (_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4334
+msgid "Leave Fullscreen"
+msgstr ""
+
+#: ../shell/ev-window.c:4335
+msgid "Leave fullscreen mode"
+msgstr ""
+
+#: ../shell/ev-window.c:4337
+msgid "Start Presentation"
+msgstr ""
+
+#: ../shell/ev-window.c:4338
+msgid "Start a presentation"
+msgstr ""
+
+#. View Menu
+#: ../shell/ev-window.c:4392
+
+msgid "_Toolbar"
+msgstr "මෙවලම් පුවරුව (_T)"
+
+#: ../shell/ev-window.c:4393
+msgid "Show or hide the toolbar"
+msgstr ""
+
+#: ../shell/ev-window.c:4395
+
+msgid "Side _Pane"
+msgstr "පැති පුවරුව (_P)"
+
+#: ../shell/ev-window.c:4396
+msgid "Show or hide the side pane"
+msgstr ""
+
+#: ../shell/ev-window.c:4398
+msgid "_Continuous"
+msgstr ""
+
+#: ../shell/ev-window.c:4399
+msgid "Show the entire document"
+msgstr ""
+
+#: ../shell/ev-window.c:4401
+msgid "_Dual"
+msgstr ""
+
+#: ../shell/ev-window.c:4402
+msgid "Show two pages at once"
+msgstr ""
+
+#: ../shell/ev-window.c:4404
+
+msgid "_Fullscreen"
+msgstr "සම්පූර්ණ තිරය (_F)"
+
+#: ../shell/ev-window.c:4405
+msgid "Expand the window to fill the screen"
+msgstr ""
+
+#: ../shell/ev-window.c:4407
+msgid "_Presentation"
+msgstr ""
+
+#: ../shell/ev-window.c:4408
+msgid "Run document as a presentation"
+msgstr ""
+
+#: ../shell/ev-window.c:4410
+msgid "_Best Fit"
+msgstr ""
+
+#: ../shell/ev-window.c:4411
+msgid "Make the current document fill the window"
+msgstr ""
+
+#: ../shell/ev-window.c:4413
+msgid "Fit Page _Width"
+msgstr ""
+
+#: ../shell/ev-window.c:4414
+msgid "Make the current document fill the window width"
+msgstr ""
+
+#. Links
+#: ../shell/ev-window.c:4421
+
+msgid "_Open Link"
+msgstr "පුරුක විවෘත කරන්න (_O)"
+
+#: ../shell/ev-window.c:4423
+
+msgid "_Go To"
+msgstr "වෙතට යන්න (_G)"
+
+#: ../shell/ev-window.c:4425
+
+msgid "Open in New _Window"
+msgstr "නව කවුළුවක විවෘත කරන්න (_W)"
+
+#: ../shell/ev-window.c:4427
+
+msgid "_Copy Link Address"
+msgstr "පුරුක් ලිපිනය පිටපත් කරන්න (_C)"
+
+#: ../shell/ev-window.c:4429
+msgid "_Save Image As..."
+msgstr ""
+
+#: ../shell/ev-window.c:4431
+msgid "Copy _Image"
+msgstr ""
+
+#: ../shell/ev-window.c:4470
+
+msgid "Page"
+msgstr "පිටුව"
+
+#: ../shell/ev-window.c:4471
+msgid "Select Page"
+msgstr "පිටුව තෝරන්න"
+
+#: ../shell/ev-window.c:4482
+
+msgid "Zoom"
+msgstr "විශාලණය"
+
+#: ../shell/ev-window.c:4484
+msgid "Adjust the zoom level"
+msgstr ""
+
+#: ../shell/ev-window.c:4494
+msgid "Navigation"
+msgstr ""
+
+#: ../shell/ev-window.c:4496
+msgid "Back"
+msgstr "පසුපසට"
+
+#: ../shell/ev-window.c:4498
+msgid "Move across visited pages"
+msgstr ""
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4514
+
+msgid "Previous"
+msgstr "පෙර"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4519
+
+msgid "Next"
+msgstr "මීළඟ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4523
+
+msgid "Zoom In"
+msgstr "විශාල කරන්න"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4527
+
+msgid "Zoom Out"
+msgstr "කුඩා කරන්න"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4535
+msgid "Fit Width"
+msgstr ""
+
+#: ../shell/ev-window.c:4723
+msgid "Unable to open external link"
+msgstr ""
+
+#: ../shell/ev-window.c:4725
+#, c-format
+msgid "Invalid URI: “%s”"
+msgstr ""
+
+#: ../shell/ev-window.c:4893
+msgid "The image could not be saved."
+msgstr ""
+
+#: ../shell/ev-window.c:4928
+
+msgid "Save Image"
+msgstr "පිළිඹිබුව සුරකින්න"
+
+#: ../shell/ev-window.c:4984
+msgid "Unable to open attachment"
+msgstr ""
+
+#: ../shell/ev-window.c:5037
+msgid "The attachment could not be saved."
+msgstr ""
+
+#: ../shell/ev-window.c:5089
+msgid "Save Attachment"
+msgstr ""
+
+#: ../shell/ev-window-title.c:139
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - රහස්පදය අවශ්‍යවේ"
+
+#: ../shell/main.c:59
+msgid "The page of the document to display."
+msgstr ""
+
+#: ../shell/main.c:59
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:60
+msgid "Run evince in fullscreen mode"
+msgstr ""
+
+#: ../shell/main.c:61
+msgid "Run evince in presentation mode"
+msgstr ""
+
+#: ../shell/main.c:62
+msgid "Run evince as a previewer"
+msgstr ""
+
+#: ../shell/main.c:65
+msgid "[FILE...]"
+msgstr "[FILE...]"
+
+#: ../shell/main.c:314
+msgid "MATE Document Viewer"
+msgstr ""
+
+#: ../shell/main.c:374
+msgid "Evince Document Viewer"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr ""
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+
diff --git a/po/sk.po b/po/sk.po
new file mode 100644
index 00000000..f18661e3
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,1323 @@
+# translation of sk.po to Slovak
+# Slovak translation of evince.
+# Copyright (C) 2005, 2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince package.
+#
+# $Id: sk.po,v 1.1 2005/06/25 23:45:27 marcel Exp $
+#
+# Mário Vrablanský <[email protected]>, 2005.
+# Peter Tuharsky <[email protected]>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: sk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-09-13 22:21+0200\n"
+"PO-Revision-Date: 2007-09-09 20:09+0100\n"
+"Last-Translator: Peter Tuhársky <[email protected]>\n"
+"Language-Team: Slovak <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural= (n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Poedit-Country: SLOVAKIA\n"
+
+#: ../backend/comics/comics-document.c:150
+msgid "File corrupted."
+msgstr "Súbor je poškodený."
+
+#: ../backend/comics/comics-document.c:186
+#, c-format
+msgid "No images found in archive %s"
+msgstr "V archíve %s sa nenašli žiadne obrázky"
+
+#: ../backend/djvu/djvu-document.c:165
+msgid ""
+"The document is composed by several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+"Dokument je tvorený viacerými súbormi. Jeden alebo viacero z nich nie je "
+"dostupných."
+
+#: ../backend/dvi/dvi-document.c:98
+msgid "File not available"
+msgstr "Súbor nie je dostupný"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Dokument DVI nemá správny formát"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:675
+msgid "Yes"
+msgstr "Áno"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:678
+msgid "No"
+msgstr "Nie"
+
+#: ../backend/pdf/ev-poppler.cc:751
+msgid "Type 1"
+msgstr "Typ 1"
+
+#: ../backend/pdf/ev-poppler.cc:753
+msgid "Type 1C"
+msgstr "Typ 1C"
+
+#: ../backend/pdf/ev-poppler.cc:755
+msgid "Type 3"
+msgstr "Typ 3"
+
+#: ../backend/pdf/ev-poppler.cc:757
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:759
+msgid "Type 1 (CID)"
+msgstr "Typ 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:761
+msgid "Type 1C (CID)"
+msgstr "Typ 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:763
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:765
+msgid "Unknown font type"
+msgstr "Neznámy typ písma"
+
+#: ../backend/pdf/ev-poppler.cc:791
+msgid "No name"
+msgstr "Bez mena"
+
+#: ../backend/pdf/ev-poppler.cc:799
+msgid "Embedded subset"
+msgstr "Zabudovaná podmnožina"
+
+#: ../backend/pdf/ev-poppler.cc:801
+msgid "Embedded"
+msgstr "Zabudovaná"
+
+#: ../backend/pdf/ev-poppler.cc:803
+msgid "Not embedded"
+msgstr "Nie je zabudovaná"
+
+#: ../backend/impress/zip.c:52
+msgid "No error"
+msgstr "Bez chyby"
+
+#: ../backend/impress/zip.c:55
+msgid "Not enough memory"
+msgstr "Nedostatok pamäti"
+
+#: ../backend/impress/zip.c:58
+msgid "Cannot find zip signature"
+msgstr "Nemôžem nájsť podpis zip"
+
+#: ../backend/impress/zip.c:61
+msgid "Invalid zip file"
+msgstr "Neplatný súbor zip"
+
+#: ../backend/impress/zip.c:64
+msgid "Multi file zips are not supported"
+msgstr "Viacero súborov zip nie je podporovaných"
+
+#: ../backend/impress/zip.c:67
+msgid "Cannot open the file"
+msgstr "Nemôžem otvoriť tento súbor"
+
+#: ../backend/impress/zip.c:70
+msgid "Cannot read data from file"
+msgstr "Nemôžem čítať údaje zo súboru"
+
+#: ../backend/impress/zip.c:73
+msgid "Cannot find file in the zip archive"
+msgstr "Neviem nájsť súbor v archíve zip"
+
+#: ../backend/impress/zip.c:76
+msgid "Unknown error"
+msgstr "Neznáma chyba"
+
+#: ../backend/ps/gsdefaults.c:30
+msgid "BBox"
+msgstr "BBox"
+
+#: ../backend/ps/gsdefaults.c:31
+msgid "Letter"
+msgstr "Letter"
+
+#: ../backend/ps/gsdefaults.c:32
+msgid "Tabloid"
+msgstr "Tabloid"
+
+#: ../backend/ps/gsdefaults.c:33
+msgid "Ledger"
+msgstr "Ledger"
+
+#: ../backend/ps/gsdefaults.c:34
+msgid "Legal"
+msgstr "Legal"
+
+#: ../backend/ps/gsdefaults.c:35
+msgid "Statement"
+msgstr "Statement"
+
+#: ../backend/ps/gsdefaults.c:36
+msgid "Executive"
+msgstr "Executive"
+
+#: ../backend/ps/gsdefaults.c:37
+msgid "A0"
+msgstr "A0"
+
+#: ../backend/ps/gsdefaults.c:38
+msgid "A1"
+msgstr "A1"
+
+#: ../backend/ps/gsdefaults.c:39
+msgid "A2"
+msgstr "A2"
+
+#: ../backend/ps/gsdefaults.c:40
+msgid "A3"
+msgstr "A3"
+
+#: ../backend/ps/gsdefaults.c:41
+msgid "A4"
+msgstr "A4"
+
+#: ../backend/ps/gsdefaults.c:42
+msgid "A5"
+msgstr "A5"
+
+#: ../backend/ps/gsdefaults.c:43
+msgid "B4"
+msgstr "B4"
+
+#: ../backend/ps/gsdefaults.c:44
+msgid "B5"
+msgstr "B5"
+
+#: ../backend/ps/gsdefaults.c:45
+msgid "Folio"
+msgstr "Folio"
+
+#: ../backend/ps/gsdefaults.c:46
+msgid "Quarto"
+msgstr "Quarto"
+
+#: ../backend/ps/gsdefaults.c:47
+msgid "10x14"
+msgstr "10x14"
+
+#: ../backend/ps/ps-document.c:172 ../backend/ps/ps-document.c:186
+#, c-format
+msgid "Cannot open file “%s”."
+msgstr "Nemôžem otvoriť súbor “%s”."
+
+#: ../backend/ps/ps-document.c:233
+#, c-format
+msgid ""
+"Failed to load document “%s”. Ghostscript interpreter was not found in path"
+msgstr ""
+"Zlyhalo načítanie dokumentu “%s”. Ghostscript interpreter sa nenašiel na "
+"svojom mieste"
+
+#: ../backend/ps/ps-document.c:250
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Zlyhalo otvorenie dokumentu “%s”"
+
+#: ../backend/ps/ps-document.c:433
+msgid "Encapsulated PostScript"
+msgstr "Zapuzdrený PostScript"
+
+#: ../backend/ps/ps-document.c:434
+msgid "PostScript"
+msgstr "PostScript"
+
+#: ../backend/ps/ps-interpreter.c:543
+msgid "Interpreter failed."
+msgstr "Interpreter zlyhal."
+
+#: ../backend/impress/impress-document.c:294
+msgid "Remote files aren't supported"
+msgstr "Vzdialené súbory nie sú podporované"
+
+#: ../backend/impress/impress-document.c:305
+msgid "Invalid document"
+msgstr "Neplatný dokument"
+
+#: ../libdocument/ev-attachment.c:303 ../libdocument/ev-attachment.c:316
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Nepodarilo sa uložiť prílohu “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:348
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Nepodarilo sa otvoriť prílohu “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:381
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Nepodarilo sa otvoriť prílohu “%s”"
+
+#: ../libdocument/ev-document-factory.c:291
+#: ../libdocument/ev-document-factory.c:398
+msgid "Unknown MIME Type"
+msgstr "Neznámy typ MIME"
+
+#: ../libdocument/ev-document-factory.c:302
+#, c-format
+msgid "Unhandled MIME type: “%s”"
+msgstr "Nepodporovaný typ MIME: “%s”"
+
+#: ../libdocument/ev-document-factory.c:439
+msgid "All Documents"
+msgstr "Všetky dokumenty"
+
+#: ../libdocument/ev-document-factory.c:447
+msgid "PostScript Documents"
+msgstr "Dokumenty v PostScripte"
+
+#: ../libdocument/ev-document-factory.c:457
+msgid "PDF Documents"
+msgstr "Dokumenty PDF"
+
+#: ../libdocument/ev-document-factory.c:467 ../shell/ev-window.c:4950
+msgid "Images"
+msgstr "Obrázky"
+
+#: ../libdocument/ev-document-factory.c:477
+msgid "DVI Documents"
+msgstr "Dokumenty DVI"
+
+#: ../libdocument/ev-document-factory.c:487
+msgid "Djvu Documents"
+msgstr "Dokumenty Djvu"
+
+#: ../libdocument/ev-document-factory.c:497
+msgid "Comic Books"
+msgstr "Vtipné knihy"
+
+#: ../libdocument/ev-document-factory.c:507
+msgid "Impress Slides"
+msgstr "Prezentácie z Impress"
+
+#: ../libdocument/ev-document-factory.c:515
+msgid "All Files"
+msgstr "Všetky súbory"
+
+#: ../cut-n-paste/recent-files/egg-recent-view-uimanager.c:205
+#, c-format
+msgid "Open “%s”"
+msgstr "Otvoriť “%s”"
+
+#: ../cut-n-paste/recent-files/egg-recent-view-uimanager.c:322
+msgid "Empty"
+msgstr "Prázdny"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:938
+#, c-format
+msgid "Show “_%s”"
+msgstr "Zobraziť “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Move on Toolbar"
+msgstr "_Presunúť na paneli nástrojov"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Move the selected item on the toolbar"
+msgstr "Presunúť vybranú položku na paneli nástrojov"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1403
+msgid "_Remove from Toolbar"
+msgstr "_Ostrániť z panelu nástrojov"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1404
+msgid "Remove the selected item from the toolbar"
+msgstr "Odstrániť vybranú položku z panelu nástrojov"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1405
+msgid "_Delete Toolbar"
+msgstr "_Odstrániť panel nástrojov"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1406
+msgid "Remove the selected toolbar"
+msgstr "_Odstrániť vybraný panel nástrojov"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:441
+msgid "Separator"
+msgstr "Oddeľovač"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+msgid "Running in presentation mode"
+msgstr "Beží v režime prezentácie"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:4538
+msgid "Best Fit"
+msgstr "Prispôsobiť"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Prispôsobiť šírke strany"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:3669
+#: ../shell/ev-window-title.c:126
+msgid "Document Viewer"
+msgstr "Prehliadač dokumentov"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "Zobraziť viacstranové dokumenty"
+
+#: ../data/evince-password.glade.h:1
+msgid "Password Entry"
+msgstr "Položka hesla"
+
+#: ../data/evince-password.glade.h:2
+msgid "Remember password for this session"
+msgstr "Zapamätať heslo pre túto reláciu"
+
+#: ../data/evince-password.glade.h:3
+msgid "Save password in keyring"
+msgstr "Uložiť heslo v zväzku kľúčov"
+
+#: ../data/evince-password.glade.h:4
+msgid "_Password:"
+msgstr "_Heslo:"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>Autor:</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>Vytvorené:</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>Tvorca:</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>Formát:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b>Kľúčové slová:</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>Zmenené:</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b>Počet strán:</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr "<b>Optimalizované:</b>"
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Paper Size:</b>"
+msgstr "<b>Veľkosť papiera:</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Producer:</b>"
+msgstr "<b>Vyrobil:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Security:</b>"
+msgstr "<b>Bezpečnosť:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Subject:</b>"
+msgstr "<b>Predmet:</b>"
+
+#: ../data/evince-properties.glade.h:13
+msgid "<b>Title:</b>"
+msgstr "<b>Nadpis:</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Prekonať obmedzenia dokumentu"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Prekonať obmedzenia dokumentu, napríklad obmedzenia na kopírovanie alebo "
+"tlač."
+
+#: ../properties/ev-properties-main.c:110
+msgid "Document"
+msgstr "Dokument"
+
+#: ../properties/ev-properties-view.c:182
+msgid "None"
+msgstr "Žiadny"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:207
+#: ../properties/ev-properties-view.c:367
+msgid "default:mm"
+msgstr "predvolené:mm"
+
+#. Metric measurement (millimeters)
+#: ../properties/ev-properties-view.c:249
+#: ../properties/ev-properties-view.c:404
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:253
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f palca"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:277
+#: ../properties/ev-properties-view.c:415
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Na výšku (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:284
+#: ../properties/ev-properties-view.c:422
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Na šírku (%s)"
+
+#. Imperial measurement (inches)
+#: ../properties/ev-properties-view.c:399
+#, c-format
+msgid "%.2f x %.2f in"
+msgstr "%.2f x %.2f pal"
+
+#: ../shell/eggfindbar.c:158
+msgid "Search string"
+msgstr "Hľadať reťazec"
+
+#: ../shell/eggfindbar.c:159
+msgid "The name of the string to be found"
+msgstr "Názov reťazca, ktorý sa má hľadať "
+
+#: ../shell/eggfindbar.c:172
+msgid "Case sensitive"
+msgstr "Rozlišovať veľké a malé písmená"
+
+#: ../shell/eggfindbar.c:173
+msgid "TRUE for a case sensitive search"
+msgstr "TRUE (Áno) pre rozlišovanie veľkých a malých písmen"
+
+#: ../shell/eggfindbar.c:180
+msgid "Highlight color"
+msgstr "Farba pre zvýrazňovanie"
+
+#: ../shell/eggfindbar.c:181
+msgid "Color of highlight for all matches"
+msgstr "Farba pre zvýrazňovanie všetkých zhôd"
+
+#: ../shell/eggfindbar.c:187
+msgid "Current color"
+msgstr "Aktuálna farba"
+
+#: ../shell/eggfindbar.c:188
+msgid "Color of highlight for the current match"
+msgstr "Farba pre zvýrazňovanie aktuálnej zhody"
+
+#: ../shell/eggfindbar.c:321
+msgid "Find:"
+msgstr "Nájsť:"
+
+#: ../shell/eggfindbar.c:330
+msgid "Find Previous"
+msgstr "Nájsť predchádzajúce"
+
+#: ../shell/eggfindbar.c:334 ../shell/eggfindbar.c:337
+msgid "Find previous occurrence of the search string"
+msgstr "Hladať predchádzajúci výskyt slova alebo frázy"
+
+#: ../shell/eggfindbar.c:343
+msgid "Find Next"
+msgstr "Hľadať ďalšiu"
+
+#: ../shell/eggfindbar.c:347 ../shell/eggfindbar.c:350
+msgid "Find next occurrence of the search string"
+msgstr "Hľadať následujúci výskyt slova alebo frázy"
+
+#: ../shell/eggfindbar.c:359
+msgid "C_ase Sensitive"
+msgstr "_Rozlišovať veľké a malé písmená"
+
+#: ../shell/eggfindbar.c:363 ../shell/eggfindbar.c:366
+msgid "Toggle case sensitive search"
+msgstr "Prepínanie rozlišovania veľkých a malých písmen"
+
+#: ../shell/ev-jobs.c:642
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "Zlyhalo vytvorenie súboru “%s”: %s"
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d z %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "z %d"
+
+#: ../shell/ev-password.c:83
+msgid "Password required"
+msgstr "Potrebné je heslo"
+
+#: ../shell/ev-password.c:84
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "Dokument “%s” je zamknutý a pre otvorenie je potrebné heslo."
+
+#: ../shell/ev-password.c:149
+msgid "Enter password"
+msgstr "Zadajte heslo"
+
+#: ../shell/ev-password.c:252
+#, c-format
+msgid "Password for document %s"
+msgstr "Heslo pre dokument %s"
+
+#: ../shell/ev-password.c:334
+msgid "Incorrect password"
+msgstr "Nesprávne heslo"
+
+#: ../shell/ev-password-view.c:111
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "Dokument je zamknutý a je možné ho čítať až po zadaní správneho hesla "
+
+#: ../shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "_Odomknúť dokument"
+
+#: ../shell/ev-properties-dialog.c:61
+msgid "Properties"
+msgstr "Vlastnosti"
+
+#: ../shell/ev-properties-dialog.c:94
+msgid "General"
+msgstr "Hlavný"
+
+#: ../shell/ev-properties-dialog.c:104
+msgid "Fonts"
+msgstr "Písma"
+
+#: ../shell/ev-properties-fonts.c:141
+msgid "Font"
+msgstr "Písmo"
+
+#: ../shell/ev-properties-fonts.c:152
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "Zhromažďujem informácie o písmach... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:670
+msgid "Attachments"
+msgstr "Prílohy"
+
+#: ../shell/ev-sidebar-links.c:266 ../shell/ev-view.c:3491
+msgid "Loading..."
+msgstr "Načítavam..."
+
+#: ../shell/ev-sidebar-links.c:342
+msgid "Print..."
+msgstr "Tlač..."
+
+#: ../shell/ev-sidebar-links.c:722
+msgid "Index"
+msgstr "Index"
+
+#: ../shell/ev-sidebar-thumbnails.c:729
+msgid "Thumbnails"
+msgstr "Náhľady"
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Up"
+msgstr "Posun nahor"
+
+#: ../shell/ev-view-accessible.c:43
+msgid "Scroll Down"
+msgstr "Posun nadol"
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Up"
+msgstr "Posunúť obraz hore"
+
+#: ../shell/ev-view-accessible.c:50
+msgid "Scroll View Down"
+msgstr "Posunúť obraz dole"
+
+#: ../shell/ev-view-accessible.c:536
+msgid "Document View"
+msgstr "Prehliadanie dokumentu"
+
+#: ../shell/ev-view.c:1423
+msgid "Go to first page"
+msgstr "Choď na prvú stranu"
+
+#: ../shell/ev-view.c:1425
+msgid "Go to previous page"
+msgstr "Choď na predchádzajúcu stranu"
+
+#: ../shell/ev-view.c:1427
+msgid "Go to next page"
+msgstr "Choď na ďalšiu stranu"
+
+#: ../shell/ev-view.c:1429
+msgid "Go to last page"
+msgstr "Choď na poslednú stranu"
+
+#: ../shell/ev-view.c:1431
+msgid "Go to page"
+msgstr "Choď na stranu"
+
+#: ../shell/ev-view.c:1433
+msgid "Find"
+msgstr "Nájsť"
+
+#: ../shell/ev-view.c:1461
+#, c-format
+msgid "Go to page %s"
+msgstr "Prejsť na stranu %s"
+
+#: ../shell/ev-view.c:1467
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Prejsť na %s v súbore “%s”"
+
+#: ../shell/ev-view.c:1470
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Choď na súbor “%s”"
+
+#: ../shell/ev-view.c:1478
+#, c-format
+msgid "Launch %s"
+msgstr "Spustiť %s"
+
+#: ../shell/ev-view.c:2419
+msgid "End of presentation. Press Escape to exit."
+msgstr "Koniec prezentácie. Stlačte ESC."
+
+#: ../shell/ev-view.c:3214
+msgid "Jump to page:"
+msgstr "Choď na stranu:"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-view.c:4851
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d nájdených na tejto strane"
+msgstr[1] "%d nájdený na tejto strane"
+msgstr[2] "%d nájdené na tejto strane"
+
+#: ../shell/ev-view.c:4860
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Zostáva vyhľadať %3d%%"
+
+#: ../shell/ev-window.c:746
+#, c-format
+msgid "Page %s - %s"
+msgstr "Strana %s - %s"
+
+#: ../shell/ev-window.c:748
+#, c-format
+msgid "Page %s"
+msgstr "Strana %s"
+
+#: ../shell/ev-window.c:1369
+msgid "Unable to open document"
+msgstr "Nemôžem otvoriť dokument"
+
+#: ../shell/ev-window.c:1559
+msgid "Open Document"
+msgstr "Otvoriť dokument"
+
+#: ../shell/ev-window.c:1629
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "Nepodarilo sa vytvoriť symbolický odkaz “%s”: %s"
+
+#: ../shell/ev-window.c:1658
+msgid "Cannot open a copy."
+msgstr "Nemôžem otvoriť kópiu"
+
+#: ../shell/ev-window.c:1940 ../shell/ev-window.c:2012
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Súbor sa nepodarilo uložiť ako “%s”."
+
+#: ../shell/ev-window.c:2061
+msgid "Save a Copy"
+msgstr "Uložiť kópiu"
+
+#: ../shell/ev-window.c:2159 ../shell/ev-window.c:3369
+msgid "Failed to print document"
+msgstr "Zlyhala tlač dokumentu"
+
+#: ../shell/ev-window.c:2321 ../shell/ev-window.c:2500
+msgid "Printing is not supported on this printer."
+msgstr "Tlač na tejto tlačiarni nie je podporovaná"
+
+#: ../shell/ev-window.c:2436 ../shell/ev-window.c:2551
+#: ../shell/ev-window.c:4347
+msgid "Print"
+msgstr "Tlač"
+
+#: ../shell/ev-window.c:2490
+msgid "Generating PDF is not supported"
+msgstr "Export do PDF nie je podporovaný"
+
+#: ../shell/ev-window.c:2502
+#, c-format
+msgid ""
+"You were trying to print to a printer using the “%s” driver. This program "
+"requires a PostScript printer driver."
+msgstr ""
+"Pokúsili ste sa tlačiť na tlačiarni pomocou ovládača “%s”. Tento program "
+"potrebuje ovládač tlačiarne PostScript."
+
+#: ../shell/ev-window.c:2560
+msgid "Pages"
+msgstr "Strany"
+
+#: ../shell/ev-window.c:3150
+msgid "Toolbar Editor"
+msgstr "Editor panelu nástrojov"
+
+#: ../shell/ev-window.c:3665
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Prehliadač dokumentov.\n"
+"Používa poppler %s (%s)"
+
+#: ../shell/ev-window.c:3693
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince je free software; môžete ho redistribuovať a/alebo modifikovať za "
+"podmienok GNU General Public License publikovaných Free Software Foundation; "
+"a to buď verzie licencie 2, alebo (podľa vášho uváženia) ľubovoľnej "
+"neskoršej verzie.\n"
+
+#: ../shell/ev-window.c:3697
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince je distribuovaný v nádeji, že bude užitočný, ale BEZ AKEJKOĽVEK "
+"ZÁRUKY; a to ani bez predpokladanej záruky PREDAJNOSTI, alebo VHODNOSTI PRE "
+"KONKRÉTNY ÚČEL. Pre ďalšie podrobnosti viz. GNU General Public License.\n"
+
+#: ../shell/ev-window.c:3701
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Kópiu GNU General Public License ste mali dostať spolu s Evince; ak sa tak "
+"nestalo napíšte na Free Software Foundation, Inc., 59 Temple Place, Suite "
+"330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:3725 ../shell/main.c:331
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:3728
+msgid "© 1996-2007 The Evince authors"
+msgstr "© 1996-2007 Autori Evince"
+
+#: ../shell/ev-window.c:3734
+msgid "translator-credits"
+msgstr ""
+"Mário Vrablanský <[email protected]>\n"
+"Peter Tuhársky <[email protected]>"
+
+#: ../shell/ev-window.c:4258
+msgid "_File"
+msgstr "_Súbor"
+
+#: ../shell/ev-window.c:4259
+msgid "_Edit"
+msgstr "_Upraviť"
+
+#: ../shell/ev-window.c:4260
+msgid "_View"
+msgstr "_Zobraziť"
+
+#: ../shell/ev-window.c:4261
+msgid "_Go"
+msgstr "Í_sť"
+
+#: ../shell/ev-window.c:4262
+msgid "_Help"
+msgstr "_Pomocník"
+
+#. File menu
+#: ../shell/ev-window.c:4265 ../shell/ev-window.c:4443
+msgid "_Open..."
+msgstr "_Otvoriť..."
+
+#: ../shell/ev-window.c:4266
+msgid "Open an existing document"
+msgstr "Otvoriť existujúci dokument"
+
+#: ../shell/ev-window.c:4268
+msgid "Op_en a Copy"
+msgstr "O_tvoriť kópiu"
+
+#: ../shell/ev-window.c:4269
+msgid "Open a copy of the current document in a new window"
+msgstr "Otvoriť kópiu aktuálneho dokumentu v novom okne"
+
+#: ../shell/ev-window.c:4271 ../shell/ev-window.c:4445
+msgid "_Save a Copy..."
+msgstr "_Uložiť kópiu..."
+
+#: ../shell/ev-window.c:4272
+msgid "Save a copy of the current document"
+msgstr "Uložiť kópiu aktuálneho dokumentu"
+
+#: ../shell/ev-window.c:4274
+msgid "Print Set_up..."
+msgstr "Na_stavenie Tlače..."
+
+#: ../shell/ev-window.c:4275
+msgid "Setup the page settings for printing"
+msgstr "Nastaviť vlastnosti stránky pre tlač"
+
+#: ../shell/ev-window.c:4277
+msgid "_Print..."
+msgstr "_Tlač..."
+
+#: ../shell/ev-window.c:4278 ../shell/ev-window.c:4348
+msgid "Print this document"
+msgstr "Vytlačiť tento dokument"
+
+#: ../shell/ev-window.c:4280
+msgid "P_roperties"
+msgstr "_Vlastnosti"
+
+#: ../shell/ev-window.c:4289 ../shell/ev-window.c:4291
+msgid "Select _All"
+msgstr "Vybrať _všetko"
+
+#: ../shell/ev-window.c:4294
+msgid "_Find..."
+msgstr "_Nájsť..."
+
+#: ../shell/ev-window.c:4295
+msgid "Find a word or phrase in the document"
+msgstr "Nájsť v dokumente slovo alebo frázu"
+
+#: ../shell/ev-window.c:4297
+msgid "Find Ne_xt"
+msgstr "Nájsť ďa_lšiu"
+
+#: ../shell/ev-window.c:4299
+msgid "Find Pre_vious"
+msgstr "Nájsť _predchádzajúce"
+
+#: ../shell/ev-window.c:4301
+msgid "T_oolbar"
+msgstr "Panel _nástrojov"
+
+#: ../shell/ev-window.c:4303
+msgid "Rotate _Left"
+msgstr "Otočiť _doľava"
+
+#: ../shell/ev-window.c:4305
+msgid "Rotate _Right"
+msgstr "Otočiť do_prava"
+
+#: ../shell/ev-window.c:4310
+msgid "Enlarge the document"
+msgstr "Zväčšiť dokument"
+
+#: ../shell/ev-window.c:4313
+msgid "Shrink the document"
+msgstr "Zmenšiť dokument"
+
+#: ../shell/ev-window.c:4315
+msgid "_Reload"
+msgstr "_Znovu načítať"
+
+#: ../shell/ev-window.c:4316
+msgid "Reload the document"
+msgstr "Znovu načítať dokument"
+
+#. Go menu
+#: ../shell/ev-window.c:4320
+msgid "_Previous Page"
+msgstr "_Predchádzajúca strana"
+
+#: ../shell/ev-window.c:4321
+msgid "Go to the previous page"
+msgstr "Choď na predchádzajúcu stranu"
+
+#: ../shell/ev-window.c:4323
+msgid "_Next Page"
+msgstr "Ďa_lšia Strana"
+
+#: ../shell/ev-window.c:4324
+msgid "Go to the next page"
+msgstr "Choď na ďalšiu stranu"
+
+#: ../shell/ev-window.c:4326
+msgid "_First Page"
+msgstr "_Prvá strana"
+
+#: ../shell/ev-window.c:4327
+msgid "Go to the first page"
+msgstr "Choď na prvú stranu"
+
+#: ../shell/ev-window.c:4329
+msgid "_Last Page"
+msgstr "Po_sledná strana"
+
+#: ../shell/ev-window.c:4330
+msgid "Go to the last page"
+msgstr "Choď na poslednú stranu"
+
+#. Help menu
+#: ../shell/ev-window.c:4334
+msgid "_Contents"
+msgstr "_Obsah"
+
+#: ../shell/ev-window.c:4337
+msgid "_About"
+msgstr "O _aplikácii"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4341
+msgid "Leave Fullscreen"
+msgstr "Opustiť režim celej obrazovky"
+
+#: ../shell/ev-window.c:4342
+msgid "Leave fullscreen mode"
+msgstr "Opustiť režim celej obrazovky"
+
+#: ../shell/ev-window.c:4344
+msgid "Start Presentation"
+msgstr "Spustiť Prezentáciu"
+
+#: ../shell/ev-window.c:4345
+msgid "Start a presentation"
+msgstr "Spustiť prezentáciu"
+
+#. View Menu
+#: ../shell/ev-window.c:4399
+msgid "_Toolbar"
+msgstr "_Panel nástrojov"
+
+#: ../shell/ev-window.c:4400
+msgid "Show or hide the toolbar"
+msgstr "Zobraziť alebo skryť panel nástrojov"
+
+#: ../shell/ev-window.c:4402
+msgid "Side _Pane"
+msgstr "Bočný _panel"
+
+#: ../shell/ev-window.c:4403
+msgid "Show or hide the side pane"
+msgstr "Zobraziť alebo skryť bočný panel"
+
+#: ../shell/ev-window.c:4405
+msgid "_Continuous"
+msgstr "_Súvislý"
+
+#: ../shell/ev-window.c:4406
+msgid "Show the entire document"
+msgstr "Zobraziť celý dokument"
+
+#: ../shell/ev-window.c:4408
+msgid "_Dual"
+msgstr "_Duálny"
+
+#: ../shell/ev-window.c:4409
+msgid "Show two pages at once"
+msgstr "Zobraziť dve strany naraz"
+
+#: ../shell/ev-window.c:4411
+msgid "_Fullscreen"
+msgstr "_Celá obrazovka"
+
+#: ../shell/ev-window.c:4412
+msgid "Expand the window to fill the screen"
+msgstr "Zväčšiť okno tak, aby zaplnilo celú obrazovku"
+
+#: ../shell/ev-window.c:4414
+msgid "_Presentation"
+msgstr "_Prezentácia"
+
+#: ../shell/ev-window.c:4415
+msgid "Run document as a presentation"
+msgstr "Spustiť dokument ako prezentáciu"
+
+#: ../shell/ev-window.c:4417
+msgid "_Best Fit"
+msgstr "_Prispôsobiť"
+
+#: ../shell/ev-window.c:4418
+msgid "Make the current document fill the window"
+msgstr "Nechať aktuálny dokument vyplniť okno"
+
+#: ../shell/ev-window.c:4420
+msgid "Fit Page _Width"
+msgstr "Prispôsobiť ší_rke strany"
+
+#: ../shell/ev-window.c:4421
+msgid "Make the current document fill the window width"
+msgstr "Nechať aktuálny dokument vyplniť šírku okna"
+
+#. Links
+#: ../shell/ev-window.c:4428
+msgid "_Open Link"
+msgstr "_Otvoriť odkaz"
+
+#: ../shell/ev-window.c:4430
+msgid "_Go To"
+msgstr "Í_sť na"
+
+#: ../shell/ev-window.c:4432
+msgid "Open in New _Window"
+msgstr "Otvoriť v novom _okne"
+
+#: ../shell/ev-window.c:4434
+msgid "_Copy Link Address"
+msgstr "_Kopírovať adresu odkazu"
+
+#: ../shell/ev-window.c:4436
+msgid "_Save Image As..."
+msgstr "_Uložiť obrázok ako..."
+
+#: ../shell/ev-window.c:4438
+msgid "Copy _Image"
+msgstr "Kopírovať _Obrázok"
+
+#: ../shell/ev-window.c:4477
+msgid "Page"
+msgstr "Strana"
+
+#: ../shell/ev-window.c:4478
+msgid "Select Page"
+msgstr "Zvoliť stranu"
+
+#: ../shell/ev-window.c:4489
+msgid "Zoom"
+msgstr "Zväčšenie"
+
+#: ../shell/ev-window.c:4491
+msgid "Adjust the zoom level"
+msgstr "Upraviť úroveň zväčšenia"
+
+#: ../shell/ev-window.c:4501
+msgid "Navigation"
+msgstr "Navigácia"
+
+#: ../shell/ev-window.c:4503
+msgid "Back"
+msgstr "Späť"
+
+#: ../shell/ev-window.c:4505
+msgid "Move across visited pages"
+msgstr "Pohyb medzi navštívenými stránkami"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4521
+msgid "Previous"
+msgstr "Predchádzajúca"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4526
+msgid "Next"
+msgstr "Ďalšia"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4530
+msgid "Zoom In"
+msgstr "Priblížiť"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4534
+msgid "Zoom Out"
+msgstr "Oddialiť"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4542
+msgid "Fit Width"
+msgstr "Prispôsobiť šírke"
+
+#: ../shell/ev-window.c:4732
+msgid "Unable to open external link"
+msgstr "Nemôžem otvoriť vonkajší odkaz"
+
+#: ../shell/ev-window.c:4734
+#, c-format
+msgid "Invalid URI: “%s”"
+msgstr "Neplatné URI: “%s”"
+
+#: ../shell/ev-window.c:4902
+msgid "The image could not be saved."
+msgstr "Obrázok sa nepodarilo uložiť."
+
+#: ../shell/ev-window.c:4937
+msgid "Save Image"
+msgstr "Uložiť obrázok"
+
+#: ../shell/ev-window.c:4993
+msgid "Unable to open attachment"
+msgstr "Nemôžem otvoriť prílohu"
+
+#: ../shell/ev-window.c:5046
+msgid "The attachment could not be saved."
+msgstr "Prílohu sa nepodarilo uložiť."
+
+#: ../shell/ev-window.c:5098
+msgid "Save Attachment"
+msgstr "Uložiť prílohu"
+
+#: ../shell/ev-window-title.c:139
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - Potrebné je heslo"
+
+#: ../shell/main.c:59
+msgid "The page of the document to display."
+msgstr "Strana dokumentu, ktorú zobraziť."
+
+#: ../shell/main.c:59
+msgid "PAGE"
+msgstr "STRANA"
+
+#: ../shell/main.c:60
+msgid "Run evince in fullscreen mode"
+msgstr "Spustiť evince v režime celej obrazovky"
+
+#: ../shell/main.c:61
+msgid "Run evince in presentation mode"
+msgstr "Spustiť evince v prezentačnom režime"
+
+#: ../shell/main.c:62
+msgid "Run evince as a previewer"
+msgstr "Spustiť evince v režime náhľadov"
+
+#: ../shell/main.c:65
+msgid "[FILE...]"
+msgstr "[SÚBOR...]"
+
+#: ../shell/main.c:314
+msgid "MATE Document Viewer"
+msgstr "Prehliadač dokumentov MATE"
+
+#: ../shell/main.c:374
+msgid "Evince Document Viewer"
+msgstr "Evince Prehliadač dokumentov"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Dostupné booleanovské možnosti, true povolí náhľady a false zakáže "
+"vytváranie nových náhľadov"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Povoliť vytváranie náhľadov PDF dokumentov"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Príkaz náhľadu pre PDF dokumenty"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Platný príkaz s parametrami pre náhľady PDF dokumentu. Pre ďalšie informácie "
+"si pozrite dokumentáciu náhľadov k Nautilu."
diff --git a/po/sl.po b/po/sl.po
new file mode 100644
index 00000000..8db4e0f6
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,1776 @@
+# Slovenian translations of Evince.
+# Copyright (C) 2006-2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince package.
+#
+# Matic Žgur <[email protected]>, 2006.
+# Matjaž Horvat <[email protected]>, 2006.
+# Matej Urbančič <[email protected]>, 2006 - 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2010-08-14 12:29+0000\n"
+"PO-Revision-Date: 2010-08-14 19:28+0100\n"
+"Last-Translator: Matej Urbančič <[email protected]>\n"
+"Language-Team: Slovenian MATE Translation Team <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
+"X-Poedit-Country: SLOVENIA\n"
+"X-Poedit-Language: Slovenian\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Napaka med zaganjanjem ukaza “%s” za razširjanje stripa: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Ukaz “%s” je spodletel pri razširjanju stripa."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Ukaz “%s” se ni uspešno zaključil."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Ni MIME vrsta stripa: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Ni mogoče najti ustreznega ukaza za razširjanje te vrste stripa."
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Neznana MIME vrsta"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Pokvarjena datoteka"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "V arhivu ni datotek."
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "V arhivu %s ni slik"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Prišlo je do napake med brisanjem “%s”."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Napaka %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Stripi"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DVI dokument ni pravilno zapisan"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid "The document is composed of several files. One or more of these files cannot be accessed."
+msgstr "Dokument je sestavljen iz več datotek. Do ene ali več teh datotek ni mogoč dostop."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Djvu dokumenti"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Dokument DVI nima prave oblike zapisa"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI Dokumenti"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Projekt je v javni domeni"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Da"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Ne"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Vrsta 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Vrsta 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Vrsta 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Vrsta 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Vrsta 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Neznana vrsta pisave"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Brez imena"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Vgrajena podmnožica"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Vgrajeno"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Ni vgrajeno"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Dokumenti PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Neveljaven dokument"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress diapredstavitev"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Brez napake"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Ni dovolj pomnilnika"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Ni mogoče najti podpisa arhiva zip"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Neveljavna datoteka ZIP"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Zip z več datotekami arhiva ni podprt"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Ni mogoče odpreti datoteke"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Ni mogoče prebrati podatkov iz datoteke"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Ni mogoče najti datoteke v arhivu zip"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Neznana napaka"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Nalaganje dokumenta \"%s\" ni uspelo"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Napaka med shranjevanjem dokumenta “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Dokumenti PostScript"
+
+#: ../libdocument/ev-attachment.c:304
+#: ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Ni mogoče shraniti priloge \"%s\": %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Ni mogoče odpreti priloge \"%s\": %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Ni mogoče odpreti priloge \"%s\""
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Vrsta datoteke %s (%s) ni podprta"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Vsi dokumenti"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Vse datoteke"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Ni mogoče ustvariti začasne datoteke: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Ni mogoče ustvariti začasne mape: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Datoteka ni veljavna .desktop datoteka"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Neznana različica datoteke namizja '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Zaganjanje %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Program ne sprejme dokumentov preko ukazne vrstice"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Nepoznana možnost zagona: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Ni mogoče poslati naslova URI dokumenta na vnos 'Vrsta=Povezava' predmeta namizja"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Predmet ni izvedljiv"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Onemogoči povezavo z upravljalnikom seje"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Določitev datoteke s shranjenimi nastavitvami"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+#: ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "DATOTEKA"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Določi ID upravljanja seje"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Možnosti upravljanja seje:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Pokaži možnosti upravljanja seje"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Pokaži \"_%s\""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Premakni na orodni vrstici"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Premakne izbrani predmet na orodni vrstici"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Odstrani iz orodne vrstice"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Odstrani izbrani predmet iz orodne vrstice"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Izbriši orodno vrstico"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Odstrani izbrano orodno vrstico"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Ločilnik"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48
+#: ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "Prilagojeno zaslonu"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Prilagojeno širini strani"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1
+#: ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149
+#: ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Pregledovalnik dokumentov"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Poglejte večstranske dokumente"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Prezri omejitve dokumenta"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Prezri omejitve dokumenta, kot sta omejitev kopiranja ali tiskanja."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Izbriši začasno datoteko"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Natisni datoteko nastavitev"
+
+#: ../previewer/ev-previewer.c:144
+#: ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Pregledovalnik dokumentov za MATE"
+
+#: ../previewer/ev-previewer-window.c:91
+#: ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "Tiskanje dokumenta ni uspelo"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Izbranega tiskalnika '%s' ni mogoče najti"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284
+#: ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "_Predhodna stran"
+
+#: ../previewer/ev-previewer-window.c:285
+#: ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "Pojdi na predhodno stran"
+
+#: ../previewer/ev-previewer-window.c:287
+#: ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "_Naslednja stran"
+
+#: ../previewer/ev-previewer-window.c:288
+#: ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "Pojdi na naslednjo stran"
+
+#: ../previewer/ev-previewer-window.c:291
+#: ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "Povečaj dokument"
+
+#: ../previewer/ev-previewer-window.c:294
+#: ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "Skrči dokument"
+
+#: ../previewer/ev-previewer-window.c:297
+#: ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Natisni"
+
+#: ../previewer/ev-previewer-window.c:298
+#: ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "Natisni dokument"
+
+#: ../previewer/ev-previewer-window.c:342
+#: ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "_Najboljša prilagoditev"
+
+#: ../previewer/ev-previewer-window.c:343
+#: ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "Razširi trenutni dokument, da zapolni okno"
+
+#: ../previewer/ev-previewer-window.c:345
+#: ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "Prilagoditev širini _strani"
+
+#: ../previewer/ev-previewer-window.c:346
+#: ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "Razširi trenutni dokument, da zapolni širino okna"
+
+#: ../previewer/ev-previewer-window.c:558
+#: ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "Stran"
+
+#: ../previewer/ev-previewer-window.c:559
+#: ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "Izberi stran"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokument"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Naslov:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Mesto:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Zadeva:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Avtor:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Ključne besede:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Producent:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Ustvarjalec:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Ustvarjeno:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Spremenjeno:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Število strani:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Prilagojeno:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Oblika:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Varnost:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Velikost papirja:"
+
+#: ../properties/ev-properties-view.c:188
+#: ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Brez"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, pokončno (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, ležeče (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d od %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "od %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76
+#: ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Nalaganje ..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Priprava na tiskanje ..."
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Zaključevanje ..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Tiskanje strani %d od %d ..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Tiskanje na tem tiskalniku ni podprto."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Neveljaven izbor strani"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Opozorilo"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Območje tiskanja ne vključuje nobene strani"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Prilagajanje velikosti strani:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Skrči na območje tiskanja"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Prilagodi velikosti tiskanja"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as required to fit the printable area of the printer page.\n"
+msgstr ""
+"Prilagajanje velikosti dokumenta tiskalniku. Izbrati je mogoče naslednje vrednosti:\n"
+"\n"
+"• \"Brez\": strani ne bodo prilagojene tiskanju.\n"
+"\n"
+"• \"Skrči na območje tiskanja\": strani dokumenta, ki so večje od območja tiskanja bodo pomanjšane na zahtevano velikost.\n"
+"\n"
+"• \"Prilagodi velikosti tiskanja\": strani dokumenta so povečane ali pomanjšane glede na območje tiskanja.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Samodejno zavrti in sredini"
+
+#: ../libview/ev-print-operation.c:1885
+msgid "Rotate printer page orientation of each page to match orientation of each document page. Document pages will be centered within the printer page."
+msgstr "Zavrti postavitev vsake natisnjene strani tako, da se sklada z stranjo dokumenta. Strani bodo postavljene na sredino natisnjene strani."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Izbor velikosti strani z uporabo podatka velikosti dokumenta"
+
+#: ../libview/ev-print-operation.c:1892
+msgid "When enabled, each page will be printed on the same size paper as the document page."
+msgstr "Izbrana možnost omogoča, da bo stran natisnjena na enako velikost papirja, kot je velika stran dokumenta."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Upravljanje strani"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Napaka med tiskanjem strani %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Pomakni gor"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Pomakni dol"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Pomakni pogled gor"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Pomakni pogled dol"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Dokumentni pogled"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Pojdi na stran:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Konec predstavitve. Kliknite za končanje."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Pojdi na prvo stran"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Pojdi na prejšnjo stran"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Pojdi na naslednjo stran"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Pojdi na zadnjo stran"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Pojdi na stran"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Poišči"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Pojdi na stran %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Pojdi na %s v datoteki \"%s\""
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Pojdi v datoteko \"%s\""
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Zaženi %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Najdi:"
+
+#: ../shell/eggfindbar.c:329
+#: ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "Najdi _predhodne"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Najdi predhodno ponovitev iskanega niza"
+
+#: ../shell/eggfindbar.c:337
+#: ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "Najdi naslednje"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Najdi naslednjo ponovitev iskanega niza"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Razlikovanje velikosti črk"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Preklopi iskanje z razlikovanjem velikih in malih črk"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Ikona:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Opomba"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Razlaga"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Ključ"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Pomoč"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Nov odstavek"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Odstavek"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Vstavi"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Križ"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Krog"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Neznano"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Lastnosti pripombe"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Barva:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Slog:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Prozorno"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Prekrivno"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Začetno stanje okna:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Odpri"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Zapri"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Zagon v predstavitvenem načinu"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Geslo za dokument %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Pretvarjanje %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d od %d pretvorjenih dokumentov"
+
+#: ../shell/ev-convert-metadata.c:165
+#: ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Pretvarjanje metapodatkov"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid "The metadata format used by Evince has changed, and hence it needs to be migrated. If the migration is cancelled the metadata storage will not work."
+msgstr "Zapis metapodatkov kot ga uporablja Evince je spremenjen in ga je treba pretvoriti. V primeru, da je pretvorba preklicana, metapodatki ne bodo razpoložljivi."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Odpri nedavno uporabljeni dokument"
+
+#: ../shell/ev-password-view.c:144
+msgid "This document is locked and can only be read by entering the correct password."
+msgstr "Dokument je zaklenjen, preberete ga lahko edino tako, da vpišete pravilno geslo."
+
+#: ../shell/ev-password-view.c:153
+#: ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Odkleni dokument"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Vnos gesla"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Zahtevano geslo"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "Dokument \"%s\" je zaklenjen in zahteva geslo preden je lahko odprt."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Geslo:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "_Takoj pozabi geslo"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Zapomni si geslo do _odjave"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "_Zapomni si"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Lastnosti"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Splošno"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Pisave"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Dovoljenja dokumenta"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Pisava"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Zbiranje podrobnosti o pisavah ... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Pogoji uporabe"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Besedilo dovoljenja"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Več podrobnosti"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Seznam"
+
+#: ../shell/ev-sidebar-annotations.c:203
+#: ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Pripombe"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Besedilo"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Dodaj pripombo k besedilu ..."
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Dodaj"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Dokument ne vsebuje pripomb"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Stran %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Priloge"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Plasti"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Natisni ..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Kazalo"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Sličice"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "Stran %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "Stran %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "Dokument ne vsebuje nobene strani"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "Dokument vsebuje le prazne strani"
+
+#: ../shell/ev-window.c:1627
+#: ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "Dokumenta ni mogoče odpreti"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Nalaganje dokumenta preko “%s”"
+
+#: ../shell/ev-window.c:1906
+#: ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Prejemanje dokumenta (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "Napaka med nalaganjem oddaljenega dokumenta."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Ponovno nalaganje dokumenta iz %s"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "Ponovno nalaganje dokumenta ni uspelo."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "Odpri dokument"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "Shranjevanje dokumenta v %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Shranjevanje prilog v %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "Shranjevanje slike v %s"
+
+#: ../shell/ev-window.c:2664
+#: ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Ni mogoče shraniti datoteke kot \"%s\"-"
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Pošiljanje dokumenta (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Pošiljanje priloge (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Pošiljanje slike (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "Shrani kopijo"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d poslov v vrsti"
+msgstr[1] "%d posel v vrsti"
+msgstr[2] "%d posla v vrsti"
+msgstr[3] "%d posli v vrsti"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Tiskanje “%s”"
+
+#: ../shell/ev-window.c:3402
+msgid "Document contains form fields that have been filled out. If you don't save a copy, changes will be permanently lost."
+msgstr "Dokument vsebuje izpolnjena polja obrazca. V kolikor kopije ne shranite, bodo spremembe trajno izgubljene."
+
+#: ../shell/ev-window.c:3406
+msgid "Document contains new or modified annotations. If you don't save a copy, changes will be permanently lost."
+msgstr "Dokument vsebuje nove ali spremenjene pripombe. V kolikor kopije ne shranite, bodo spremembe trajno izgubljene."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Ali želite shraniti spremembe v dokumentu “%s” pred zapiranjem?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "Zapri _brez shranjevanja"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "Shrani _kopijo"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Ali želite počakati, da se dokument “%s” natisne, preden zaključite?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "V vrsti je %d pripravljenih dokumentov za tiskanje. Ali želite počakati, da se natisnejo vsi dokumenti?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "V primeru, da zaprete okno, pripravljeni dokumenti ne bodo natisnjeni."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "Prekliči _tiskanje in zapri okno"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "Zapri _po tiskanju"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "Urejevalnik orodnih vrstic"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "Prišlo je do napake med prikazovanjem pomoči"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Pregledovalnik dokumentov\n"
+"Uporaba %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid "Evince 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.\n"
+msgstr "Evince je prosti program. Lahko ga razširjate in/ali spreminjate pod pogoji licence GNU General Public License kot jo je objavila organizacija Free Software Foundation; bodisi pod različico 2 ali (po vašem mnenju) katerokoli kasnejšo različico.\n"
+
+#: ../shell/ev-window.c:4567
+msgid "Evince 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.\n"
+msgstr "Evince se razširja v upanju, da bo koristen, vendar BREZ ZAGOTOVILA KAKRŠNEGAKOLI JAMSTVA; tudi brez posrednega jamstva CENOVNE VREDNOSTI ali PRIMERNOSTI ZA DOLOČENO UPORABO. Za več podrobnosti si oglejte GNU General Public License.\n"
+
+#: ../shell/ev-window.c:4571
+msgid "You should have received a copy of the GNU General Public License along with Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr "Skupaj s programom bi morali prejeti kopijo GNU Splošnega javnega dovoljenja. V primeru, da je niste, pišite na Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Avtorji programa Evince"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"Matic Žgur <[email protected]>\n"
+"Matjaž Horvat <[email protected]>\n"
+"Matej Urbančič <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d zadetkov na tej strani"
+msgstr[1] "%d zadetek na tej strani"
+msgstr[2] "%d zadetka na tej strani"
+msgstr[3] "%d zadetki na tej strani"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "Ni mogoče najti"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Preiskati je treba še %3d%%"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "_Datoteka"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "_Uredi"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "Po_gled"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "P_ojdi"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "Pomo_č"
+
+#. File menu
+#: ../shell/ev-window.c:5402
+#: ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "_Odpri …"
+
+#: ../shell/ev-window.c:5403
+#: ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "Odpri obstoječi dokument"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "Odpri _kopijo"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "Odpre kopijo trenutnega dokumenta v novem oknu"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "_Shrani kopijo"
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "Shrani kopijo trenutnega dokumenta"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "_Natisni ..."
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "L_astnosti"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "Izberi _vse"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "_Najdi ..."
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "Najdi besedo ali reklo v dokumentu"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "O_rodna vrstica"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "Zavrti _levo"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "Zavrti _desno"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "Shrani trenutne nastavitve kot _privzete"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "_Ponovno naloži"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "Ponovno naloži trenuten dokument"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "Samodejno _drsenje"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "P_rva stran"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "Pojdi na prvo stran"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "_Zadnja stran"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "Pojdi na zadnjo stran"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "_Vsebina"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "_O programu"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "Zapusti celozaslonski način"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "Zapusti celozaslonski način"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "Začni predstavitev"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "Začni predstavitev"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "_Orodna vrstica"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "Pokaži ali skrij orodno vrstico"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "_Stranski pladenj"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "Pokaži ali skrij stranski pladenj"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "_Neprekinjen"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "Pokaži cel dokument"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "_Dvojni"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "Pokaži dve strani skupaj"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "_Celozaslonski način"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "Razširi okno, da zapolni zaslon"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "_Predstavitev"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "Zaženi dokument kot predstavitev"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "_Preobrni barve"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "Pokaži vsebino strani s preobrnjenimi barvami."
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "_Odpri povezavo"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "Po_jdi na"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "Odpri v _novem oknu"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "_Kopiraj naslov povezave"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "S_hrani sliko kot ..."
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "Kopiraj _sliko"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "Lastnosti pripombe ..."
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "_Odpri prilogo"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "Shrani prilogo _kot ..."
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "Približanje"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "Prilagodi raven približanja"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "Krmiljenje"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "Nazaj"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "Pomikaj se med obiskanimi stranmi"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "Predhodni"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "Naslednja"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "Približaj"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "Oddalji"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "Prilagodi širini"
+
+#: ../shell/ev-window.c:5890
+#: ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "Ni mogoče zagnati zunanjega programa."
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "Ni mogoče odpreti zunanje povezave"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "Ni mogoče najti primernega zapisa za shranjevanje slike"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "Slike ni mogoče shraniti."
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "Shrani sliko"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "Ni mogoče odpreti priloge"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "Ni mogoče shraniti priloge."
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "Shrani prilogo"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — zahtevano geslo"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Po končnici"
+
+#: ../shell/main.c:69
+#: ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Pregledovalnik dokumentov za MATE"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Naziv strani dokumenta za prikaz."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "STRAN"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Številka strani dokumenta, ki naj se pokaže."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "ŠTEVILKA"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Zaženi evince v celozaslonskem načinu"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Zaženi evince v predstavitvenem načinu"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Zaženi evince v predoglednem načinu"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Poišči besedo ali reklo v dokumentu"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "NIZ"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[DATOTEKA ...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid "Boolean options available: true enables thumbnailing and false disables the creation of new thumbnails"
+msgstr "Logične operacije: 'prav' omogoči vzorčne slike in 'napak' izključi ustvarjanje vzorčnih slik"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Omogoči sličice dokumentov PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Ukaz za sličice dokumentov PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid "Valid command plus arguments for the PDF Document thumbnailer. See Caja thumbnailer documentation for more information."
+msgstr "Veljavni ukazi in argumenti za vzorčne slike PDF dokumenta. Več podrobnosti je mogoče najti v dokumentaciji o vzorčnih slikah."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "Nastavitev s_trani ..."
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Nastavitev lastnosti strani za tiskanje"
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "Dokument DJVU nima prave oblike zapisa"
+#~ msgid "Print..."
+#~ msgstr "Natisni ..."
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Shrani kopijo ..."
+#~ msgid "_Print..."
+#~ msgstr "_Natisni ..."
+#~ msgid "_Find..."
+#~ msgstr "_Poišči ..."
+#~ msgid "Search string"
+#~ msgstr "Poišči niz"
+#~ msgid "The name of the string to be found"
+#~ msgstr "Ime iskanega niza"
+#~ msgid "Case sensitive"
+#~ msgstr "Razlikuj velike in male črke"
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "TRUE za razlikovanje velikih in malih črk"
+#~ msgid "Highlight color"
+#~ msgstr "Barva poudarjanja"
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Barva poudarjanja za vse zadetke"
+#~ msgid "Current color"
+#~ msgstr "Trenutna barva"
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Barva poudarjanja za trenutni zadetek"
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "Ni mogoče ustvariti datoteke \"%s\": %s"
+#~ msgid "Recover previous documents?"
+#~ msgstr "Ali naj se obnovijo predhodni dokumenti?"
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Videti je, da je bil program nenadno zaključen ob zadnjem zagonu. Odprte "
+#~ "dokumente je včasih mogoče obnoviti."
+#~ msgid "_Don't Recover"
+#~ msgstr "_Ne obnovi"
+#~ msgid "_Recover"
+#~ msgstr "_Obnovi"
+#~ msgid "Crash Recovery"
+#~ msgstr "Obnavljanje po sesutju"
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "Ni mogoče ustvariti simbolne povezave “%s”: "
+#~ msgid "Cannot open a copy."
+#~ msgstr "Ni mogoče odpreti kopije."
+#~ msgid "Co_nnect"
+#~ msgstr "Po_veži"
+#~ msgid "Connect _anonymously"
+#~ msgstr "Poveži se _anonimno"
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Poveži kot u_porabnik"
+#~ msgid "_Username:"
+#~ msgstr "_Uporabniško ime:"
+#~ msgid "_Domain:"
+#~ msgstr "_Domena:"
+#~ msgid "_Forget password immediately"
+#~ msgstr "_Takoj pozabi geslo"
+#~ msgid "_Remember password until you logout"
+#~ msgstr "Zapomni si geslo do _odjave"
+#~ msgid "_Remember forever"
+#~ msgstr "_Zapomni si trajno"
+#~ msgid "File not available"
+#~ msgstr "Datoteka ni na voljo"
+#~ msgid "Remote files aren't supported"
+#~ msgstr "Oddaljene datoteke niso podprte"
+#~ msgid "Find Previous"
+#~ msgstr "Poišči prejšnje"
+#~ msgid "Find Next"
+#~ msgstr "Poišči naslednje"
+#~ msgid "Downloading document %d%%"
+#~ msgstr "Prenašanje dokumenta (%d%%)"
+#~ msgid "Password Entry"
+#~ msgstr "Vnos gesla"
+#~ msgid "Remember password for this session"
+#~ msgstr "Zapomni si geslo za to sejo"
+#~ msgid "Save password in keyring"
+#~ msgstr "Shrani geslo v zbirko ključev"
+#~ msgid "<b>Title:</b>"
+#~ msgstr "<b>Naslov:</b>"
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f in"
+#~ msgid "Incorrect password"
+#~ msgstr "Nepravilno geslo"
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Pregledovalnik dokumentov Evince"
+
diff --git a/po/sq.po b/po/sq.po
new file mode 100644
index 00000000..2bce5013
--- /dev/null
+++ b/po/sq.po
@@ -0,0 +1,1322 @@
+# Përkthimi i mesazheve të evince në shqip.
+# This file is distributed under the same license as the Evince package.
+# Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
+#
+# Laurent Dhima <[email protected]>, 2005-2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-09-02 07:24+0000\n"
+"PO-Revision-Date: 2008-09-04 10:12+0200\n"
+"Last-Translator: Laurent Dhima <[email protected]>\n"
+"Language-Team: albanian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../backend/comics/comics-document.c:169
+#, c-format
+msgid "File corrupted."
+msgstr "File i dëmtuar."
+
+#: ../backend/comics/comics-document.c:203
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Nuk u gjetën figura tek arkivi %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Libra komikë"
+
+#: ../backend/djvu/djvu-document.c:247
+#, c-format
+msgid ""
+"The document is composed by several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+"Dokumenti përbëhet nga disa file. E pamundur hyrja tek një apo më shumë prej "
+"tyre."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Dokumente Djvu"
+
+#: ../backend/dvi/dvi-document.c:94
+#, c-format
+msgid "File not available"
+msgstr "File jo në dispozicion"
+
+#: ../backend/dvi/dvi-document.c:109
+#, c-format
+msgid "DVI document has incorrect format"
+msgstr "Dokumenti DVI është i një formati të parregullt"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Dokumente DVI"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:688
+msgid "Yes"
+msgstr "Po"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:691
+msgid "No"
+msgstr "Jo"
+
+#: ../backend/pdf/ev-poppler.cc:765
+msgid "Type 1"
+msgstr "Lloji 1"
+
+#: ../backend/pdf/ev-poppler.cc:767
+msgid "Type 1C"
+msgstr "Lloji 1C"
+
+#: ../backend/pdf/ev-poppler.cc:769
+msgid "Type 3"
+msgstr "Lloji 3"
+
+#: ../backend/pdf/ev-poppler.cc:771
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:773
+msgid "Type 1 (CID)"
+msgstr "Lloji 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:775
+msgid "Type 1C (CID)"
+msgstr "Lloji 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:777
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Unknown font type"
+msgstr "Lloj gërmë e panjohur"
+
+#: ../backend/pdf/ev-poppler.cc:805
+msgid "No name"
+msgstr "Pa emër"
+
+#: ../backend/pdf/ev-poppler.cc:813
+msgid "Embedded subset"
+msgstr "E nënpërbashkët e trupëzuar"
+
+#: ../backend/pdf/ev-poppler.cc:815
+msgid "Embedded"
+msgstr "Trupëzuar"
+
+#: ../backend/pdf/ev-poppler.cc:817
+msgid "Not embedded"
+msgstr "Jo e trupëzuar"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Dokumente PDF"
+
+#: ../backend/impress/impress-document.c:297
+#, c-format
+msgid "Remote files aren't supported"
+msgstr "File në distancë nuk suportohen"
+
+#: ../backend/impress/impress-document.c:308
+#, c-format
+msgid "Invalid document"
+msgstr "Dokument i pavlefshëm"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Prezantime Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Asnjë gabim"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Memorje e pamjaftueshme"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "E pamundur gjetja e firmës së zip"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "File i pavlefshëm zip"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr "File zip shumëfishë nuk suportohen"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "E pamundur hapja e file"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "I pamundur leximi i të dhënave nga file"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "E pamundur gjetja e file në arkivin zip"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Gabim i panjohur"
+
+#: ../backend/ps/ev-spectre.c:113
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "E pamundur hapja e dokumentit “%s”"
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "E pamundur ruajtja e dokumentit “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Dokumente PostScript"
+
+#: ../libdocument/ev-attachment.c:303 ../libdocument/ev-attachment.c:324
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "E pamundur ruajtja e të bashkangjiturit “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:360
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "E pamundur hapja e të bashkangjiturit “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:393
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "E pamundur hapja e të bashkangjiturit “%s”"
+
+#: ../libdocument/ev-document-factory.c:181
+#: ../libdocument/ev-document-factory.c:302
+#, c-format
+msgid "Unknown MIME Type"
+msgstr "Lloj MIME i panjohur"
+
+#: ../libdocument/ev-document-factory.c:201
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "File i llojit %s (%s) nuk suportohet"
+
+#: ../libdocument/ev-document-factory.c:357
+msgid "All Documents"
+msgstr "Të gjithë dokumentët"
+
+#: ../libdocument/ev-document-factory.c:389
+msgid "All Files"
+msgstr "Të gjithë files"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:439
+msgid "Co_nnect"
+msgstr "Li_dhu"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:483
+msgid "Connect _anonymously"
+msgstr "Lidhu në menyrë _anonime"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:492
+msgid "Connect as u_ser:"
+msgstr "Lidhu si _përdorues:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:529
+msgid "_Username:"
+msgstr "_Përdoruesi:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:533
+msgid "_Domain:"
+msgstr "_Domain:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:538
+#: ../data/evince-password.glade.h:4
+msgid "_Password:"
+msgstr "_Fjalëkalimi:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:553
+msgid "_Forget password immediately"
+msgstr "_Harro menjëherë fjalëkalimin"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:561
+msgid "_Remember password until you logout"
+msgstr "_Kujto fjalëkalimin derisa të shkëputesh"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:569
+msgid "_Remember forever"
+msgstr "_Kujto përgjithmonë"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:139
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "File nuk është një file i vlefshëm .desktop"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:161
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Version i pasaktë file desktop '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:872
+#, c-format
+msgid "Starting %s"
+msgstr "Duke nisur %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1006
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Aplikativi nuk pranon dokumente në rreshtin e komandës"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1074
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Opsion i pasaktë nisje: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1276
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Nuk mund t'i kalohen URLtë e dokumenteve një zëri desktop 'Type=Link'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1295
+#, c-format
+msgid "Not a launchable item"
+msgstr "Nuk është një element i ekzekutueshëm"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:185
+msgid "Disable connection to session manager"
+msgstr "Çaktivizon lidhjen me menazhuesin e seancës"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:188
+msgid "Specify file containing saved configuration"
+msgstr "Specifikon file që përmban konfiurimin e ruajtur"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:188
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:191
+msgid "Specify session management ID"
+msgstr "Specifikon ID e menazhuesit të seancës"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:191
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:227
+msgid "Session Management Options"
+msgstr "Opsionet e menazhimit të seancës"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Show Session Management options"
+msgstr "Shfaq opsionet e menazhimit të seancës"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:938
+#, c-format
+msgid "Show “_%s”"
+msgstr "Shfaq “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Move on Toolbar"
+msgstr "_Lëviz tek paneli i instrumentëve"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Move the selected item on the toolbar"
+msgstr "Lëviz elementin e zgjedhur tek paneli i instrumentëve"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1403
+msgid "_Remove from Toolbar"
+msgstr "_Hiq nga paneli i instrumentëve"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1404
+msgid "Remove the selected item from the toolbar"
+msgstr "Hiq elementin e zgjedhur nga paneli i instrumentëve"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1405
+msgid "_Delete Toolbar"
+msgstr "_Hiq panelin e instrumentëve"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1406
+msgid "Remove the selected toolbar"
+msgstr "Hiq panelin e zgjedhur të instrumentëve"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:441
+msgid "Separator"
+msgstr "Ndarës"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+msgid "Running in presentation mode"
+msgstr "Duke punuar në mënyrën prezantim"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:4719
+msgid "Best Fit"
+msgstr "Përshtatja më e mirë"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Përshtat gjerësinë e faqes"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:3751
+#: ../shell/ev-window-title.c:132
+#, c-format
+msgid "Document Viewer"
+msgstr "Shikues dokumentesh"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "Shiko dokumentë shumfaqësh"
+
+#: ../data/evince-password.glade.h:1
+msgid "Password Entry"
+msgstr "Dhënia e fjalëkalimit"
+
+#: ../data/evince-password.glade.h:2
+msgid "Remember password for this session"
+msgstr "Kujto fjalëkalimin për këtë seancë"
+
+#: ../data/evince-password.glade.h:3
+msgid "Save password in keyring"
+msgstr "Ruaje fjalëkalimin në keyring"
+
+#: ../data/evince-properties.glade.h:1
+msgid "<b>Author:</b>"
+msgstr "<b>Autori:</b>"
+
+#: ../data/evince-properties.glade.h:2
+msgid "<b>Created:</b>"
+msgstr "<b>Krijuar:</b>"
+
+#: ../data/evince-properties.glade.h:3
+msgid "<b>Creator:</b>"
+msgstr "<b>Krijuesi:</b>"
+
+#: ../data/evince-properties.glade.h:4
+msgid "<b>Format:</b>"
+msgstr "<b>Formati:</b>"
+
+#: ../data/evince-properties.glade.h:5
+msgid "<b>Keywords:</b>"
+msgstr "<b>Fjalë kyçe:</b>"
+
+#: ../data/evince-properties.glade.h:6
+msgid "<b>Modified:</b>"
+msgstr "<b>Ndryshuar:</b>"
+
+#: ../data/evince-properties.glade.h:7
+msgid "<b>Number of Pages:</b>"
+msgstr "<b>Numri i faqeve:</b>"
+
+#: ../data/evince-properties.glade.h:8
+msgid "<b>Optimized:</b>"
+msgstr "<b>Optimizuar:</b>"
+
+#: ../data/evince-properties.glade.h:9
+msgid "<b>Paper Size:</b>"
+msgstr "<b>Madhësia e fletës:</b>"
+
+#: ../data/evince-properties.glade.h:10
+msgid "<b>Producer:</b>"
+msgstr "<b>Prodhues:</b>"
+
+#: ../data/evince-properties.glade.h:11
+msgid "<b>Security:</b>"
+msgstr "<b>Siguria:</b>"
+
+#: ../data/evince-properties.glade.h:12
+msgid "<b>Subject:</b>"
+msgstr "<b>Subjekti:</b>"
+
+#: ../data/evince-properties.glade.h:13
+msgid "<b>Title:</b>"
+msgstr "<b>Titulli:</b>"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Mbishkruaj kufizimet në dokument"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Mbishkruaj kufizimet në dokument, si p.sh. kufizimin e kopjes apo shtypjes."
+
+#: ../properties/ev-properties-main.c:114
+msgid "Document"
+msgstr "Dokument"
+
+#: ../properties/ev-properties-view.c:180
+msgid "None"
+msgstr "Asnjë"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:205
+#: ../properties/ev-properties-view.c:367
+msgid "default:mm"
+msgstr "default:mm"
+
+#. Metric measurement (millimeters)
+#: ../properties/ev-properties-view.c:249
+#: ../properties/ev-properties-view.c:404
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:253
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:277
+#: ../properties/ev-properties-view.c:415
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Vertikale (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:284
+#: ../properties/ev-properties-view.c:422
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Horizontale (%s)"
+
+#. Imperial measurement (inches)
+#: ../properties/ev-properties-view.c:399
+#, c-format
+msgid "%.2f x %.2f in"
+msgstr "%.2f x %.2f in"
+
+#: ../shell/eggfindbar.c:146
+msgid "Search string"
+msgstr "Kërko tekstin"
+
+#: ../shell/eggfindbar.c:147
+msgid "The name of the string to be found"
+msgstr "Emri i tekstit që duhet gjetur"
+
+#: ../shell/eggfindbar.c:160
+msgid "Case sensitive"
+msgstr "Ndjeshmëri gërma të mëdha/të vogla"
+
+#: ../shell/eggfindbar.c:161
+msgid "TRUE for a case sensitive search"
+msgstr "TRUE për kërkim të ndjeshëm ndaj ndryshimit gërma të mëdha/vogla"
+
+#: ../shell/eggfindbar.c:168
+msgid "Highlight color"
+msgstr "Ngjyra e vënies në dukje"
+
+#: ../shell/eggfindbar.c:169
+msgid "Color of highlight for all matches"
+msgstr "Ngjyra e vënies në dukje për të gjithë rezultatet"
+
+#: ../shell/eggfindbar.c:175
+msgid "Current color"
+msgstr "Ngjyra aktuale"
+
+#: ../shell/eggfindbar.c:176
+msgid "Color of highlight for the current match"
+msgstr "Ngjyra e vënies në dukje për rezultatin aktual"
+
+#: ../shell/eggfindbar.c:309
+msgid "Find:"
+msgstr "Gjej:"
+
+#: ../shell/eggfindbar.c:318
+msgid "Find Previous"
+msgstr "Gjej paraardhësen"
+
+#: ../shell/eggfindbar.c:322 ../shell/eggfindbar.c:325
+msgid "Find previous occurrence of the search string"
+msgstr "Gjej korrispondimin paraardhës të tekstit të kërkuar"
+
+#: ../shell/eggfindbar.c:331
+msgid "Find Next"
+msgstr "Gjej në vazhdim"
+
+#: ../shell/eggfindbar.c:335 ../shell/eggfindbar.c:338
+msgid "Find next occurrence of the search string"
+msgstr "Gjej korrispondimin në vazhdim të tekstit të kërkuar"
+
+#: ../shell/eggfindbar.c:347
+msgid "C_ase Sensitive"
+msgstr "I ndje_shëm ndaj gërma të mëdha/vogla"
+
+#: ../shell/eggfindbar.c:351 ../shell/eggfindbar.c:354
+msgid "Toggle case sensitive search"
+msgstr "Ndrysho kërkimin e ndjeshëm ndaj ndryshimit gërma të mëdha/vogla"
+
+#: ../shell/ev-jobs.c:962
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "I pamundur krijimi i file “%s”: %s"
+
+#: ../shell/ev-open-recent-action.c:73
+msgid "Open a recently used document"
+msgstr "Hap një dokument të përdorur së fundmi"
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d në %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "nga %d"
+
+#: ../shell/ev-password.c:88
+msgid "Password required"
+msgstr "Kërkohet fjalëkalimi"
+
+#: ../shell/ev-password.c:89
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "Dokumenti “%s” është bllokuar dhe kërkon një fjalëkalim për t'u hapur."
+
+#: ../shell/ev-password.c:154
+msgid "Enter password"
+msgstr "Shkruaj fjalëkalimin"
+
+#: ../shell/ev-password.c:260
+#, c-format
+msgid "Password for document %s"
+msgstr "Fjalëkalimi për dokumentin %s"
+
+#: ../shell/ev-password.c:347
+msgid "Incorrect password"
+msgstr "Fjalëkalim i gabuar"
+
+#: ../shell/ev-password-view.c:112
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Ky dokument është bllokuar dhe mund të lexohet vetë mbasi të jepet "
+"fjalëkalimi korrekt."
+
+# (pofilter) accelerators: accelerator _ appears before an invalid accelerator character 'Ç' (eg. space)
+#: ../shell/ev-password-view.c:121
+msgid "_Unlock Document"
+msgstr "Ç_blloko dokumentin"
+
+#: ../shell/ev-properties-dialog.c:57
+msgid "Properties"
+msgstr "Pronësitë"
+
+#: ../shell/ev-properties-dialog.c:90
+msgid "General"
+msgstr "Të përgjithshme"
+
+#: ../shell/ev-properties-dialog.c:100
+msgid "Fonts"
+msgstr "Gërmat"
+
+#: ../shell/ev-properties-fonts.c:139
+msgid "Font"
+msgstr "Gërmat"
+
+#: ../shell/ev-properties-fonts.c:150
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "Duke bashkuar informacionet mbi gërmat... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:690
+msgid "Attachments"
+msgstr "Të bashkangjitur"
+
+#: ../shell/ev-sidebar-links.c:267 ../shell/ev-view.c:3638
+msgid "Loading..."
+msgstr "Duke ngarkuar..."
+
+#: ../shell/ev-sidebar-links.c:340
+msgid "Print..."
+msgstr "Printo..."
+
+#: ../shell/ev-sidebar-links.c:720
+msgid "Index"
+msgstr "Treguesi"
+
+#: ../shell/ev-sidebar-thumbnails.c:731
+msgid "Thumbnails"
+msgstr "Miniaturat"
+
+#: ../shell/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Sipër"
+
+#: ../shell/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Poshtë"
+
+#: ../shell/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Rrëshqit sipër pamjen"
+
+#: ../shell/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Rrëshqit poshtë pamjen"
+
+#: ../shell/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Shikimi i dokumentit"
+
+#: ../shell/ev-view.c:1437
+msgid "Go to first page"
+msgstr "Shko tek faqja e parë"
+
+#: ../shell/ev-view.c:1439
+msgid "Go to previous page"
+msgstr "Shko tek faqja paraardhëse"
+
+#: ../shell/ev-view.c:1441
+msgid "Go to next page"
+msgstr "Shko tek faqja në vazhdim"
+
+#: ../shell/ev-view.c:1443
+msgid "Go to last page"
+msgstr "Shko tek faqja e fundit"
+
+#: ../shell/ev-view.c:1445
+msgid "Go to page"
+msgstr "Shko tek faqja"
+
+#: ../shell/ev-view.c:1447
+msgid "Find"
+msgstr "Gjej"
+
+#: ../shell/ev-view.c:1475
+#, c-format
+msgid "Go to page %s"
+msgstr "Shko tek faqja %s"
+
+#: ../shell/ev-view.c:1481
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Shko tek %s tek file “%s”"
+
+#: ../shell/ev-view.c:1484
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Shko tek file “%s”"
+
+#: ../shell/ev-view.c:1492
+#, c-format
+msgid "Launch %s"
+msgstr "Nis %s"
+
+#: ../shell/ev-view.c:2444
+msgid "End of presentation. Press Escape to exit."
+msgstr "Fund i prezantimit. Shtyp Escape për dalje."
+
+#: ../shell/ev-view.c:3368
+msgid "Jump to page:"
+msgstr "Shko tek faqja:"
+
+#: ../shell/ev-window.c:790
+#, c-format
+msgid "Page %s - %s"
+msgstr "Faqja %s - %s"
+
+#: ../shell/ev-window.c:792
+#, c-format
+msgid "Page %s"
+msgstr "Faqja %s"
+
+#: ../shell/ev-window.c:1201
+msgid "The document contains no pages"
+msgstr "Dokumenti nuk përmban asnjë faqe"
+
+#: ../shell/ev-window.c:1425 ../shell/ev-window.c:1500
+msgid "Unable to open document"
+msgstr "E pamundur hapja e dokumentit"
+
+#: ../shell/ev-window.c:1697
+msgid "Open Document"
+msgstr "Hap dokumentin"
+
+#: ../shell/ev-window.c:1758
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "I pamundur krijimi i lidhjes simbolike “%s”: %s"
+
+#: ../shell/ev-window.c:1787
+msgid "Cannot open a copy."
+msgstr "E pamundur hapja e një kopje."
+
+#: ../shell/ev-window.c:2031 ../shell/ev-window.c:2081
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "File nuk mund të ruhet si “%s”."
+
+#: ../shell/ev-window.c:2126
+msgid "Save a Copy"
+msgstr "Ruaj një kopje"
+
+#: ../shell/ev-window.c:2247 ../shell/ev-window.c:3452
+msgid "Failed to print document"
+msgstr "I pamundur prinitmi i dokumentit"
+
+#: ../shell/ev-window.c:2412
+msgid "Printing is not supported on this printer."
+msgstr "Printimi nuk suportohet nga ky printer."
+
+#: ../shell/ev-window.c:2538 ../shell/ev-window.c:4511
+msgid "Print"
+msgstr "Printo"
+
+#: ../shell/ev-window.c:3205
+msgid "Toolbar Editor"
+msgstr "Edituesi i panelit të instrumentëve"
+
+#: ../shell/ev-window.c:3747
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Shikuesi i dokumentëve.\n"
+"Duke përdorur poppler %s (%s)"
+
+#: ../shell/ev-window.c:3775
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince është program i lirë; mund t'a rishpërndani dhe/apo ndryshoninën "
+"kushtet e Liçencës Publike të Përgjithshme GNU sikurse publikuar ngaFree "
+"Software Foundation; sipas versionit 2 të Liçencës, ose(sipas dëshirës suaj) "
+"çdo versioni tjetër pasardhës.\n"
+
+#: ../shell/ev-window.c:3779
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince shpërndahet me shpresën që do t'ju jetë i dobishëm,por PA ASNJË LLOJ "
+"GARANCIE; pa as garancinë e shprehur të TREGËTIMIT apo VLEFSHMËRINË PËR NJË "
+"PËRDORIM PRECIZ. Shiko Liçencën Publike të Përgjithshme GNU për hollësi të "
+"tjera.\n"
+
+#: ../shell/ev-window.c:3783
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Së bashku me Evince duhet të keni marrë edhe një kopje të Liçencës Publiketë "
+"Përgjithshme; nëse jo, kërkoja Fondacionit Free Software, INC.,59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:3807
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:3810
+msgid "© 1996-2007 The Evince authors"
+msgstr "© 1996-2007 Autorët e Evince"
+
+#: ../shell/ev-window.c:3816
+msgid "translator-credits"
+msgstr "Laurent Dhima <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4032
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d gjetur në këtë faqe"
+msgstr[1] "%d gjetur në këtë faqe"
+
+#: ../shell/ev-window.c:4040
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% akoma për t'u kërkuar"
+
+#: ../shell/ev-window.c:4423
+msgid "_File"
+msgstr "_File"
+
+#: ../shell/ev-window.c:4424
+msgid "_Edit"
+msgstr "_Ndrysho"
+
+#: ../shell/ev-window.c:4425
+msgid "_View"
+msgstr "_Shfaq"
+
+#: ../shell/ev-window.c:4426
+msgid "_Go"
+msgstr "_Shko"
+
+#: ../shell/ev-window.c:4427
+msgid "_Help"
+msgstr "_Ndihmë"
+
+#. File menu
+#: ../shell/ev-window.c:4430 ../shell/ev-window.c:4609
+#: ../shell/ev-window.c:4681
+msgid "_Open..."
+msgstr "_Hap..."
+
+#: ../shell/ev-window.c:4431 ../shell/ev-window.c:4682
+msgid "Open an existing document"
+msgstr "Hap një dokument ekzistues"
+
+#: ../shell/ev-window.c:4433
+msgid "Op_en a Copy"
+msgstr "Hap një kopj_e"
+
+#: ../shell/ev-window.c:4434
+msgid "Open a copy of the current document in a new window"
+msgstr "Hap një kopje të dokumentit aktual në një dritare të re"
+
+#: ../shell/ev-window.c:4436 ../shell/ev-window.c:4611
+msgid "_Save a Copy..."
+msgstr "_Ruaj një kopje..."
+
+#: ../shell/ev-window.c:4437
+msgid "Save a copy of the current document"
+msgstr "Ruaj një kopje të dokumentit aktual"
+
+#: ../shell/ev-window.c:4439
+msgid "Print Set_up..."
+msgstr "Rreg_ullimet e printimit..."
+
+#: ../shell/ev-window.c:4440
+msgid "Setup the page settings for printing"
+msgstr "Konfiguro rregullimet e faqes për printim"
+
+#: ../shell/ev-window.c:4442
+msgid "_Print..."
+msgstr "_Printo..."
+
+#: ../shell/ev-window.c:4443 ../shell/ev-window.c:4512
+msgid "Print this document"
+msgstr "Printo këtë dokument"
+
+#: ../shell/ev-window.c:4445
+msgid "P_roperties"
+msgstr "P_ronësitë"
+
+#: ../shell/ev-window.c:4453
+msgid "Select _All"
+msgstr "Zgjidh _gjithçka"
+
+#: ../shell/ev-window.c:4455
+msgid "_Find..."
+msgstr "_Gjej..."
+
+#: ../shell/ev-window.c:4456
+msgid "Find a word or phrase in the document"
+msgstr "Gjej një fjalë apo frazë në dokument"
+
+#: ../shell/ev-window.c:4458
+msgid "Find Ne_xt"
+msgstr "Gjej në va_zhdim"
+
+#: ../shell/ev-window.c:4460
+msgid "Find Pre_vious"
+msgstr "Gjej para_ardhësen"
+
+#: ../shell/ev-window.c:4462
+msgid "T_oolbar"
+msgstr "Paneli i _instrumentëve"
+
+#: ../shell/ev-window.c:4464
+msgid "Rotate _Left"
+msgstr "Rrotullo _Majtas"
+
+#: ../shell/ev-window.c:4466
+msgid "Rotate _Right"
+msgstr "Rrotullo _Djathtas"
+
+#: ../shell/ev-window.c:4471
+msgid "Enlarge the document"
+msgstr "Zmadho dokumentin"
+
+#: ../shell/ev-window.c:4474
+msgid "Shrink the document"
+msgstr "Ngushto dokumentin"
+
+#: ../shell/ev-window.c:4476
+msgid "_Reload"
+msgstr "_Rilexo"
+
+#: ../shell/ev-window.c:4477
+msgid "Reload the document"
+msgstr "Rilexo dokumentin"
+
+#: ../shell/ev-window.c:4480
+msgid "Auto_scroll"
+msgstr "Rë_shkitje automatike"
+
+#. Go menu
+#: ../shell/ev-window.c:4484
+msgid "_Previous Page"
+msgstr "Faqja _Paraardhëse"
+
+#: ../shell/ev-window.c:4485
+msgid "Go to the previous page"
+msgstr "Shko tek faqja paraardhëse"
+
+#: ../shell/ev-window.c:4487
+msgid "_Next Page"
+msgstr "Faqja në _Vazhdim"
+
+#: ../shell/ev-window.c:4488
+msgid "Go to the next page"
+msgstr "Shko tek faqja në vazhdim"
+
+#: ../shell/ev-window.c:4490
+msgid "_First Page"
+msgstr "_Faqja e parë"
+
+#: ../shell/ev-window.c:4491
+msgid "Go to the first page"
+msgstr "Shko tek faqja e parë"
+
+#: ../shell/ev-window.c:4493
+msgid "_Last Page"
+msgstr "Faqja e _fundit"
+
+#: ../shell/ev-window.c:4494
+msgid "Go to the last page"
+msgstr "Shko tek faqja e fundit"
+
+#. Help menu
+#: ../shell/ev-window.c:4498
+msgid "_Contents"
+msgstr "_Përmbajtja"
+
+#: ../shell/ev-window.c:4501
+msgid "_About"
+msgstr "_Informacione"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:4505
+msgid "Leave Fullscreen"
+msgstr "Largohu nga modaliteti me ekran të plotë"
+
+#: ../shell/ev-window.c:4506
+msgid "Leave fullscreen mode"
+msgstr "Dil nga modaliteti me ekran të plotë"
+
+#: ../shell/ev-window.c:4508
+msgid "Start Presentation"
+msgstr "Fillo prezantimin"
+
+#: ../shell/ev-window.c:4509
+msgid "Start a presentation"
+msgstr "Fillo një prezantim"
+
+#. View Menu
+#: ../shell/ev-window.c:4565
+msgid "_Toolbar"
+msgstr "_Paneli i instrumentëve"
+
+#: ../shell/ev-window.c:4566
+msgid "Show or hide the toolbar"
+msgstr "Shfaq ose fsheh panelin"
+
+#: ../shell/ev-window.c:4568
+msgid "Side _Pane"
+msgstr "_Paneli anës"
+
+#: ../shell/ev-window.c:4569
+msgid "Show or hide the side pane"
+msgstr "Shfaq ose fsheh panelin anësor"
+
+#: ../shell/ev-window.c:4571
+msgid "_Continuous"
+msgstr "_Pa ndërprerje"
+
+#: ../shell/ev-window.c:4572
+msgid "Show the entire document"
+msgstr "Shfaq krejt dokumentin"
+
+#: ../shell/ev-window.c:4574
+msgid "_Dual"
+msgstr "_Dopjo"
+
+#: ../shell/ev-window.c:4575
+msgid "Show two pages at once"
+msgstr "Shfaq dy faqe njëkohësisht"
+
+#: ../shell/ev-window.c:4577
+msgid "_Fullscreen"
+msgstr "_Ekran i plotë"
+
+#: ../shell/ev-window.c:4578
+msgid "Expand the window to fill the screen"
+msgstr "Zmadho dritaren për t'ju përshtatur krejt ekranit"
+
+#: ../shell/ev-window.c:4580
+msgid "Pre_sentation"
+msgstr "Pre_zantim"
+
+#: ../shell/ev-window.c:4581
+msgid "Run document as a presentation"
+msgstr "Zbato dokumentin si një prezantim"
+
+#: ../shell/ev-window.c:4583
+msgid "_Best Fit"
+msgstr "_Përshtate"
+
+#: ../shell/ev-window.c:4584
+msgid "Make the current document fill the window"
+msgstr "Përshtatja dritares dokumentin aktual"
+
+#: ../shell/ev-window.c:4586
+msgid "Fit Page _Width"
+msgstr "Përshtat _gjerësinë e faqes"
+
+#: ../shell/ev-window.c:4587
+msgid "Make the current document fill the window width"
+msgstr "Përshtatja dokumentin aktual gjerësisë së dritares"
+
+#. Links
+#: ../shell/ev-window.c:4594
+msgid "_Open Link"
+msgstr "_Hap adresën"
+
+#: ../shell/ev-window.c:4596
+msgid "_Go To"
+msgstr "_Shko tek"
+
+#: ../shell/ev-window.c:4598
+msgid "Open in New _Window"
+msgstr "Hap në _Dritare të re"
+
+#: ../shell/ev-window.c:4600
+msgid "_Copy Link Address"
+msgstr "_Kopjo adresën e lidhjes"
+
+#: ../shell/ev-window.c:4602
+msgid "_Save Image As..."
+msgstr "Ruaj figurën _Si..."
+
+#: ../shell/ev-window.c:4604
+msgid "Copy _Image"
+msgstr "Kopjo f_igurën"
+
+#: ../shell/ev-window.c:4643
+msgid "Page"
+msgstr "Faqja"
+
+#: ../shell/ev-window.c:4644
+msgid "Select Page"
+msgstr "Zgjidh faqen"
+
+#: ../shell/ev-window.c:4655
+msgid "Zoom"
+msgstr "Shkalla e zmadhimit"
+
+#: ../shell/ev-window.c:4657
+msgid "Adjust the zoom level"
+msgstr "Rregullo nivelin e zmadhimit"
+
+#: ../shell/ev-window.c:4667
+msgid "Navigation"
+msgstr "Lundrimi"
+
+#: ../shell/ev-window.c:4669
+msgid "Back"
+msgstr "Mbrapa"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:4672
+msgid "Move across visited pages"
+msgstr "Lëviz midis faqeve të vizituara"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4702
+msgid "Previous"
+msgstr "Paraardhëse"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4707
+msgid "Next"
+msgstr "Në vazhdim"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4711
+msgid "Zoom In"
+msgstr "Zmadho"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4715
+msgid "Zoom Out"
+msgstr "Zvogëlo"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:4723
+msgid "Fit Width"
+msgstr "Përshtat sipas gjerësisë"
+
+#: ../shell/ev-window.c:4928
+msgid "Unable to open external link"
+msgstr "E pamundur hapja e lidhjes së jashtme"
+
+#: ../shell/ev-window.c:5089
+msgid "Couldn't find appropriate format to save image"
+msgstr "E pamundur gjetja e formatit të duhur për ruajtjen e figurës"
+
+#: ../shell/ev-window.c:5129
+msgid "The image could not be saved."
+msgstr "E pamundur ruajtja e figurës."
+
+#: ../shell/ev-window.c:5161
+msgid "Save Image"
+msgstr "Ruaj figurën"
+
+#: ../shell/ev-window.c:5220
+msgid "Unable to open attachment"
+msgstr "E pamundur hapja e të bashkangjiturit"
+
+#: ../shell/ev-window.c:5272
+msgid "The attachment could not be saved."
+msgstr "E pamundur ruajtja e të bashkangjiturit."
+
+#: ../shell/ev-window.c:5317
+msgid "Save Attachment"
+msgstr "Ruaj të bashkangjiturin"
+
+#: ../shell/ev-window-title.c:145
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - Kërkohet fjalëkalimi"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "Sipas prapashtesës"
+
+#: ../shell/main.c:52
+msgid "The page of the document to display."
+msgstr "Faqja e dokumentit për t'u shfaqur."
+
+#: ../shell/main.c:52
+msgid "PAGE"
+msgstr "FAQJA"
+
+#: ../shell/main.c:53
+msgid "Run evince in fullscreen mode"
+msgstr "Ekzekuto evince në modalitetin me ekran të plotë"
+
+#: ../shell/main.c:54
+msgid "Run evince in presentation mode"
+msgstr "Ekzekuto evince në modalitetin prezantime"
+
+#: ../shell/main.c:55
+msgid "Run evince as a previewer"
+msgstr "Ekzekuto evince si vështrues i shpejtë"
+
+#: ../shell/main.c:56
+msgid "The word or phrase to find in the document"
+msgstr "Fjala apo fraza për tu kërkuar në dokument"
+
+#: ../shell/main.c:56
+msgid "STRING"
+msgstr "VARG"
+
+#: ../shell/main.c:59
+msgid "[FILE...]"
+msgstr "[FILE...]"
+
+#: ../shell/main.c:325
+msgid "MATE Document Viewer"
+msgstr "Shikues dokumentesh për MATE"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Opcionet booleane në dispozicion, true aktivon krijimin e miniaturave dhe "
+"false çaktivon krijimin e miniaturave të reja"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Aktivo krijimin e miniaturave të dokumentëve PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Komanda për miniaturat e dokumentëve PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Komanda e vlefshme plus argumentët për krijimin e miniaturave të dokumentit "
+"PDF. Shiko dokumentet e krijuesit të miniaturave caja për informacione "
+"të mëtejshme."
+
diff --git a/po/sr.po b/po/sr.po
new file mode 100644
index 00000000..7dac6958
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,2123 @@
+# Serbian translation of evince
+# Courtesy of Prevod.org team (http://prevod.org/) -- 2005-2009.
+#
+# This file is distributed under the same license as the evince package.
+#
+# Maintainer: Данило Шеган <[email protected]>
+# Reviewed on 2005-09-03 by: Данило Шеган <[email protected]>
+# Translated on 2007-03-12 by: Игор Несторовић <[email protected]>
+# Милош Поповић <[email protected]>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Evince\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-08-02 18:58+0000\n"
+"PO-Revision-Date: 2010-08-18 10:52+0200\n"
+"Last-Translator: Милош Поповић <[email protected]>\n"
+"Language-Team: Serbian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Грешка приликом покретања наредбе „%s“ ради распаковања стрипа: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Наредба „%s“ није успела да отпакује стрип."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Наредба %s није изашла нормално."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Ово није МИМЕ врста за стрип: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Не могу да нађем нардбу за распаковање ове врсте стрипа"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Непозната МИМЕ врста"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Датотека је оштећена"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Нема датотека у архиви"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Ниједна слика није пронађена у архиви %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Јавила се грешка приликом брисања „%s“."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Грешка %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Стрипови"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "ДјВу документ има неисправан облик"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Документ је састављен из неколико датотека. Не могу да приступим једној или "
+"више ових датотека."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "ДјВу документи"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "ДВИ документ има неисправан облик"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "ДВИ документи"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Овај рад је у јавном домену"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Да"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Не"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Непозната врста словног лика"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Без имена"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Угњеждени подскуп"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Угњежден"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Није угњежден"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "ПДФ документи"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Неисправан документ"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Слајдови програма „Презентација“"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Нема грешке"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Недовољно меморије"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Није пронађен ЗИП потпис"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Није исправна ЗИП датотека"
+
+# Није сигурно да ли се мисли на више датотека у zip архиви, или више zip архива у прилогу.
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Нису подржани документи са више ЗИП датотека"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Не могу да отворим датотеку"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Не могу да прочитам податке из датотеке"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Не могу да пронађем датотеку у ЗИП архиви"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Непозната грешка"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Не могу да отворим документ „%s“"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Не могу да сачувам документ „%s“"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Постскрипт документи"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Не могу да сачуватм прилог „%s“: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Не могу да отворим прилог „%s“: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Не могу да отворим прилог „%s“"
+
+# Није сигурно да ли се мисли на више датотека у zip архиви, или више zip архива у прилогу.
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Тип датотеке %s (%s) није подржан"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Сви документи"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Све датотеке"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Не могу да направим привремену датотеку: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Не могу да направим привремени директоријум: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Ово није исправна .desktop датотека"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Није препозната desktop датотека у издању „%s“"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Покрећем %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Програм не прихвата документе из командне линије"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Непозната опција при покретању: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Не могу да проследим адресу документа у унос „Type=Адреса“"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Није извршна ставка"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Онемогући вези са управником сесије"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Изаберите датотеку са сачуваним подешавањима"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "ДАТОТЕКА"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Одредите ИБ управника сесије"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ИБ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Опције управника сесије:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Прикажи опције управника сесије"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Прикажи „_%s“"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Премести на палету алатки"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Премести изабрани предмет на палету алатки"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Уклони са палете алатки"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Уклони изабрани елемент са палете алатки"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Обриши палету алатки"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Уклања изабрану палету алатки"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Раздвајач"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5735
+msgid "Best Fit"
+msgstr "Најбоље уклапање"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Уклопи према ширини стране"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+#| msgid "100%"
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+#| msgid "100%"
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+#| msgid "200%"
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+#| msgid "400%"
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Прегледач докумената"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Прегледајте вишестраничне документе"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Превазиђи ограничења документа"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Превазилази ограничења која документ уграђено садржи, као што је забрана "
+"умножавања или штампе "
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Обриши привремену датотеку"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Датотека са подтавкама штампе"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Гном прегледач докумената"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "Није успело штампање документа"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Не могу да пронађем штампач „%s“"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5450
+msgid "_Previous Page"
+msgstr "_Претходна страна"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5451
+msgid "Go to the previous page"
+msgstr "Иди на претходну страницу"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5453
+msgid "_Next Page"
+msgstr "_Следећа страна"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5454
+msgid "Go to the next page"
+msgstr "Иди на следећу страну"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5437
+msgid "Enlarge the document"
+msgstr "Увећај документ"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5440
+msgid "Shrink the document"
+msgstr "Умањи документ"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Штампај"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5406
+msgid "Print this document"
+msgstr "Одштампај овај документ"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5552
+msgid "_Best Fit"
+msgstr "Нај_боље уклапање"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5553
+msgid "Make the current document fill the window"
+msgstr "Нека текући документ попуни прозор"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5555
+msgid "Fit Page _Width"
+msgstr "Уклопи према _ширини"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5556
+msgid "Make the current document fill the window width"
+msgstr "Нека текући документ попуни ширину прозора"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5657
+msgid "Page"
+msgstr "Страна"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5658
+msgid "Select Page"
+msgstr "Изабери страну"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Документ"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Наслов:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Место:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Тема:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Аутор:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Кључне речи:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Произвођач:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Творац:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Направљен:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Измењен:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Број страница:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Оптимизован:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Обликц:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Заштита:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Величина папира:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Ништа"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f инча"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Усправно (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Положено (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d од %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr " од %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Учитавам..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Припремам за штампу..."
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Завршавам..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Штампам %d. страницу од %d..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Штампање није подржано за овај штампач."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Неисправан опсег страница"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Упозорење"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Задати опсег за штампу не садржи ни једну страницу"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Развуци страницу:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Умањи на област за штампу"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Уклопи у област за штампу"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Развлачи странице документа тако да се уклопе у изабрану страницу штампача. "
+"Изаберите једно од приложених:\n"
+"\n"
+"• „Ништа“: Не развлачи странице документа.\n"
+"\n"
+"• „Умањи на област за штампу“: Умањује странице документа које су веће од "
+"области за штампу тако да се уклопе на папир штампача.\n"
+"\n"
+"• „Уклопи у област за штампу“: Смањује или повећава странице документа тако "
+"да се уклопе на папир штампача.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Сам ротирај и центрирај"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Окреће сваку страницу штампача, тако да буде иста оној унутар документа и "
+"поставља странице документа на средину папира за штампу."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Одреди величину странице на основу документа"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Поставља величину сваке одштампане странице на величину странице у документу."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Рад са страницама"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "не могу да одштампам страницу %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Клизај према горе"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Клизај према доле"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Клизај један екран нагоре"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Клизај један екран надоле"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Преглед документа"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Скочи до стране:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Крај презентације. Кликните за излазак."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Иди на прву страну"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Иди на претходну страну"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Иди на следећу страну"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Иди на последњу страну"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Иди на страну"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Тражи"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Иди на страну %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Иди на %s датотеке „%s“"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Иди на датотеку „%s“"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Покрени %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Тражи:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5423
+msgid "Find Pre_vious"
+msgstr "Тражи пре_тходно"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Тражи претходан израз у низу за претраживање"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5421
+msgid "Find Ne_xt"
+msgstr "Пронађи _следеће"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Тражи следећи израз у низу за претраживање"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "З_ависно од величине слова"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Укључује претрагу осетљиву на величину слова"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Иконица:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+#| msgid "None"
+msgid "Note"
+msgstr "Белешка"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+#| msgid "Document"
+msgid "Comment"
+msgstr "Коментар"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Кључ"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+#| msgid "_Help"
+msgid "Help"
+msgstr "Помоћ"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Нови пасус"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Пасус"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Уметни"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Крстић"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Круг"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+#| msgid "Unknown error"
+msgid "Unknown"
+msgstr "Непознато"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+#| msgid "Properties"
+msgid "Annotation Properties"
+msgstr "Особине забелешке"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Боја:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+#| msgid "Title:"
+msgid "Style:"
+msgstr "Стил:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Провидно"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Непровидно"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Почетно стање прозора:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+#| msgid "_Open…"
+msgid "Open"
+msgstr "Отворен"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Затворен"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Покретање у режиму презентације"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Лозинка за документ „%s“"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Преводим %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "Преведено је %d од %d докумената"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Преводим метаподатке"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Формат метаподатака које користи Прегледач докумената је промењен. Морате да "
+"сачекате на превођење података у нови формат или они неће бити сачувани."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Отвори скоро коришћени документ"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Овај документ је закључан и може се прочитати једино уз унос исправне "
+"лозинке."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Откључај документ"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Укуцајте лозинку"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Лозинка је обавезна"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"Документ „%s“ је закључан и неопходна је лозинка пре него што се може "
+"отворити."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Лозинка:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "_Одмах заборави лозинку"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "З_апамти лозинку до одјаве"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "_Запамти трајно"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Особине"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Опште"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Словни лик"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Лиценца докумената"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Фонт"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Скупљам податке о фонту... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Услови коришћења"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Текст лиценце"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Још података"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Списак"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+#| msgid "Location:"
+msgid "Annotations"
+msgstr "Забелешке"
+
+#: ../shell/ev-sidebar-annotations.c:209
+#| msgid "Next"
+msgid "Text"
+msgstr "Текст"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Додај забелешку"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Додај"
+
+#: ../shell/ev-sidebar-annotations.c:364
+#| msgid "The document contains no pages"
+msgid "Document contains no annotations"
+msgstr "Документ не садржи забелешке"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+#| msgid "Page %s"
+msgid "Page %d"
+msgstr "Страница %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Прилози"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Слојеви"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Штампај..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Попис"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Мали прикази"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "Страница %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "Страница %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "Документ не садржи странице"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "Документ садржи само празне странице"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "Не могу да отворим документ"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Учитавам документ из „%s“"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Преузимам документ (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "Не могу да учитам удаљену датотеку."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Изнова учитавам документ из %s"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "Не могу да поново учитам документ."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "Отвори документ"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "Чувам документ у %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Чувам прилог у %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "Чувам слику у %s"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Датотека није могла бити сачувана као „%s“."
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Шаљем документ (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Шаљем прилог (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Шаљем слику (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "Сачувај копију"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d задужење чека у заказаним"
+msgstr[1] "%d задужења чакају у заказаним"
+msgstr[2] "%d задужења чекају у заказаним"
+msgstr[3] "Задужење чека у заказаним"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Штампам задужење „%s“"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Документ садржи образац са пољима која су попуњена. Уколико не сачувате "
+"копију, измене ће бити трајно изгубљене."
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Документ садржи нове или измењене забелешке. Уколико не сачувате копију, "
+"измене ће бити трајно изгубљене."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+#| msgid "Wait until print job “%s” finishes before closing?"
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Да ли да сачувам копију документа „%s“?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "Затвори _без чувања"
+
+#: ../shell/ev-window.c:3436
+#| msgid "Save a Copy"
+msgid "Save a _Copy"
+msgstr "_Сачувај копију"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Да ли да сачекам док се не одштампа задужење „%s“?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "Има %d активних задужења за штампу. Да ли да сачекам док се не заврше?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Уколико затворите прозор, задужења која чекају неће бити штампана."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "Прекини штампу и _изађи"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "Изађи _након штампе"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "Уређивање палете алатки"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "Грешка у приказу помоћи"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Прегледач докумената.\n"
+"Користи %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Евинс је слободан софтвер; можете га ширити и/или мењати под условима Гну-"
+"ове Опште Јавне Лиценце, како је то објавила Задужбина Слободног Софтвера; "
+"било под верзијом 2 лиценце, или (по Вашем мишљењу) неком накнадном "
+"верзијом.\n"
+".\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Евинс се дели у намери да ће бити користан, али БЕЗ ИКАКВЕ ГАРАНЦИЈЕ; чак се "
+"не подразумева да је погодан за ТРЖИШНО учешће или да ПРИМЕЊИВ ЗА НЕКУ "
+"ДЕЛАТНОСТ. За више детаља прочитајте Општу Јавну Лиценцу.\n"
+
+#: ../shell/ev-window.c:4571
+#| msgid ""
+#| "You should have received a copy of the GNU General Public License along "
+#| "with Evince; if not, write to the Free Software Foundation, Inc., 59 "
+#| "Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Требали сте да добијете један примерак Опште Јавне Лиценце заједно са овим "
+"програмом; ако то није случај, пишите на адресу: Free Software Foundation, "
+"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1302, USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Евинс"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2007 Евинсови аутори"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"Данило Шеган <[email protected]>\n"
+"Слободан Д. Средојевић <[email protected]>\n"
+"Горан Ракић <[email protected]>\n"
+"Милош Поповић <[email protected]>\n"
+"http://prevod.org — превод на српски језик."
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4868
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d погодак на овој страници"
+msgstr[1] "%d поготка на овој страници"
+msgstr[2] "%d погодака на овој страници"
+msgstr[3] "%d погодак на овој страници"
+
+#: ../shell/ev-window.c:4876
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Преостало да претражи %3d%%"
+
+#: ../shell/ev-window.c:5389
+msgid "_File"
+msgstr "_Датотека"
+
+#: ../shell/ev-window.c:5390
+msgid "_Edit"
+msgstr "_Уређивање"
+
+#: ../shell/ev-window.c:5391
+msgid "_View"
+msgstr "П_реглед"
+
+#: ../shell/ev-window.c:5392
+msgid "_Go"
+msgstr "_Иди"
+
+#: ../shell/ev-window.c:5393
+msgid "_Help"
+msgstr "_Помоћ"
+
+#. File menu
+#: ../shell/ev-window.c:5396 ../shell/ev-window.c:5697
+msgid "_Open…"
+msgstr "_Отвори..."
+
+#: ../shell/ev-window.c:5397 ../shell/ev-window.c:5698
+msgid "Open an existing document"
+msgstr "Отвори постојећи документ"
+
+#: ../shell/ev-window.c:5399
+msgid "Op_en a Copy"
+msgstr "Отвори _копију"
+
+#: ../shell/ev-window.c:5400
+msgid "Open a copy of the current document in a new window"
+msgstr "Отвара копију документа у новом прозору"
+
+#: ../shell/ev-window.c:5402
+msgid "_Save a Copy…"
+msgstr "_Сачувај копију..."
+
+#: ../shell/ev-window.c:5403
+msgid "Save a copy of the current document"
+msgstr "Чува један примерак текућег документа"
+
+#: ../shell/ev-window.c:5405
+msgid "_Print…"
+msgstr "_Штампај..."
+
+#: ../shell/ev-window.c:5408
+msgid "P_roperties"
+msgstr "Осо_бине"
+
+#: ../shell/ev-window.c:5416
+msgid "Select _All"
+msgstr "Изабери _све"
+
+#: ../shell/ev-window.c:5418
+msgid "_Find…"
+msgstr ":Тражи..."
+
+#: ../shell/ev-window.c:5419
+msgid "Find a word or phrase in the document"
+msgstr "Нађи реч или израз у документу"
+
+#: ../shell/ev-window.c:5425
+msgid "T_oolbar"
+msgstr "_Алатке"
+
+#: ../shell/ev-window.c:5427
+msgid "Rotate _Left"
+msgstr "Ротирај _лево"
+
+#: ../shell/ev-window.c:5429
+msgid "Rotate _Right"
+msgstr "Ротирај _десно"
+
+#: ../shell/ev-window.c:5431
+msgid "Save Current Settings as _Default"
+msgstr "Сачувај подешавања као по_дразумевана"
+
+#: ../shell/ev-window.c:5442
+msgid "_Reload"
+msgstr "_Освежи"
+
+#: ../shell/ev-window.c:5443
+msgid "Reload the document"
+msgstr "Изнова учитај документ"
+
+#: ../shell/ev-window.c:5446
+msgid "Auto_scroll"
+msgstr "Померај _клизач"
+
+#: ../shell/ev-window.c:5456
+msgid "_First Page"
+msgstr "_Прва страна"
+
+#: ../shell/ev-window.c:5457
+msgid "Go to the first page"
+msgstr "Иди на прву страну"
+
+#: ../shell/ev-window.c:5459
+msgid "_Last Page"
+msgstr "_Последња страна"
+
+#: ../shell/ev-window.c:5460
+msgid "Go to the last page"
+msgstr "Иди на последњу страну"
+
+#. Help menu
+#: ../shell/ev-window.c:5464
+msgid "_Contents"
+msgstr "_Садржај"
+
+#: ../shell/ev-window.c:5467
+msgid "_About"
+msgstr "_О програму"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5471
+msgid "Leave Fullscreen"
+msgstr "Не преко целог екрана"
+
+#: ../shell/ev-window.c:5472
+msgid "Leave fullscreen mode"
+msgstr "Не преко целог екрана"
+
+#: ../shell/ev-window.c:5474
+msgid "Start Presentation"
+msgstr "Пусти као презентацију"
+
+#: ../shell/ev-window.c:5475
+msgid "Start a presentation"
+msgstr "Пусти документ као презентацију"
+
+#. View Menu
+#: ../shell/ev-window.c:5534
+msgid "_Toolbar"
+msgstr "Ала_тке"
+
+#: ../shell/ev-window.c:5535
+msgid "Show or hide the toolbar"
+msgstr "Прикажи или сакриј палету са алатом"
+
+#: ../shell/ev-window.c:5537
+msgid "Side _Pane"
+msgstr "Бочна _површ"
+
+#: ../shell/ev-window.c:5538
+msgid "Show or hide the side pane"
+msgstr "Прикажи или сакриј бочну површ"
+
+#: ../shell/ev-window.c:5540
+msgid "_Continuous"
+msgstr "_Непрекидно"
+
+#: ../shell/ev-window.c:5541
+msgid "Show the entire document"
+msgstr "Прикажи читав документ"
+
+#: ../shell/ev-window.c:5543
+msgid "_Dual"
+msgstr "По _две"
+
+#: ../shell/ev-window.c:5544
+msgid "Show two pages at once"
+msgstr "Прикажи све стране одједном"
+
+#: ../shell/ev-window.c:5546
+msgid "_Fullscreen"
+msgstr "_Цео екран"
+
+#: ../shell/ev-window.c:5547
+msgid "Expand the window to fill the screen"
+msgstr "Рашири прозор да попуни цео екран"
+
+#: ../shell/ev-window.c:5549
+msgid "Pre_sentation"
+msgstr "Пре_зентација"
+
+#: ../shell/ev-window.c:5550
+msgid "Run document as a presentation"
+msgstr "Пусти документ као презентацију"
+
+#: ../shell/ev-window.c:5558
+msgid "_Inverted Colors"
+msgstr "Обрни _боје"
+
+#: ../shell/ev-window.c:5559
+msgid "Show page contents with the colors inverted"
+msgstr "Приказује садржај страница у супротним бојама"
+
+#. Links
+#: ../shell/ev-window.c:5567
+msgid "_Open Link"
+msgstr "Отво_ри везу"
+
+#: ../shell/ev-window.c:5569
+msgid "_Go To"
+msgstr "_Иди на"
+
+#: ../shell/ev-window.c:5571
+msgid "Open in New _Window"
+msgstr "Отвори нови _прозор"
+
+#: ../shell/ev-window.c:5573
+msgid "_Copy Link Address"
+msgstr "Умножи адрес_у везе"
+
+#: ../shell/ev-window.c:5575
+msgid "_Save Image As…"
+msgstr "Сачувај слику _као..."
+
+#: ../shell/ev-window.c:5577
+msgid "Copy _Image"
+msgstr "Умножи _слику"
+
+#: ../shell/ev-window.c:5579
+msgid "Annotation Properties…"
+msgstr "Особине забелешке…"
+
+#: ../shell/ev-window.c:5584
+msgid "_Open Attachment"
+msgstr "Са_чувај прилог"
+
+#: ../shell/ev-window.c:5586
+msgid "_Save Attachment As…"
+msgstr "С_ачувај прилог као..."
+
+#: ../shell/ev-window.c:5671
+msgid "Zoom"
+msgstr "Увећај"
+
+#: ../shell/ev-window.c:5673
+msgid "Adjust the zoom level"
+msgstr "Прилагоди ниво увећања"
+
+#: ../shell/ev-window.c:5683
+msgid "Navigation"
+msgstr "Навигација"
+
+#: ../shell/ev-window.c:5685
+msgid "Back"
+msgstr "Назад"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5688
+msgid "Move across visited pages"
+msgstr "Пређите по посећеним странама"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5718
+msgid "Previous"
+msgstr "Претходна"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5723
+msgid "Next"
+msgstr "Следећа"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5727
+msgid "Zoom In"
+msgstr "Увећај"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5731
+msgid "Zoom Out"
+msgstr "Умањи"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5739
+msgid "Fit Width"
+msgstr "Уклопи ширину"
+
+#: ../shell/ev-window.c:5884 ../shell/ev-window.c:5901
+msgid "Unable to launch external application."
+msgstr "Не могу да покренем спољни програм."
+
+#: ../shell/ev-window.c:5958
+msgid "Unable to open external link"
+msgstr "Не могу да отворитм спољну везу"
+
+#: ../shell/ev-window.c:6125
+msgid "Couldn't find appropriate format to save image"
+msgstr "Не могу да пронађем пригодан формат за чување слике"
+
+#: ../shell/ev-window.c:6167
+msgid "The image could not be saved."
+msgstr "Слика није могла бити сачувана."
+
+#: ../shell/ev-window.c:6199
+msgid "Save Image"
+msgstr "Сачувај слику"
+
+#: ../shell/ev-window.c:6327
+msgid "Unable to open attachment"
+msgstr "Није могуће отворити прилог"
+
+#: ../shell/ev-window.c:6380
+msgid "The attachment could not be saved."
+msgstr "Прилог није могуће сачувати."
+
+#: ../shell/ev-window.c:6425
+msgid "Save Attachment"
+msgstr "Сачувај прилог"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — потребна је лозинка"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "По екстензији"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Гном прегледач докумената"
+
+#: ../shell/main.c:77
+#| msgid "The page of the document to display."
+msgid "The page label of the document to display."
+msgstr "Назив странице документа за приказ."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "СТРАНА"
+
+#: ../shell/main.c:78
+#| msgid "The page of the document to display."
+msgid "The page number of the document to display."
+msgstr "Број странице документа за приказ."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "БРОЈ"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Покрени Евинс преко целог екрана"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Покрени Евинс у као презентацију"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Покрени Евинс као прегледач"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Реч или израз за претрагу по документу"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "НИСКА"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[ДАТОТЕКА...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Доступне вредности су „true“ (тачно) која укључује умањени приказ сличица и "
+"„false“ (нетачно) која зауставља прављење нових сличица"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Укључи прављење сличица за PDF документе"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Наредба за прављење сличица за PDF документе"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Исправна наредба уз аргументе за прављење сличица код ПДФ докумената. "
+"Погледајте документацију Наутилусовог програма за израду умањених приказа."
+
+#~| msgid "Page Set_up..."
+#~ msgid "Page Set_up…"
+#~ msgstr "По_дешавање странице..."
+
+#~| msgid "Setup the page settings for printing"
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Подешава поставке страница за штампу"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVI документ има неисправан облик"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "Није успело креирање датотеке„%s“: %s"
+
+#~ msgid "Search string"
+#~ msgstr "Тражи ниску"
+
+# bug: since when do the strings have names?
+#~ msgid "The name of the string to be found"
+#~ msgstr "Име ниске коју тражити"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Зависно од величине слова"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "Постављено за претрагу која зависи од величине слова"
+
+#~ msgid "Highlight color"
+#~ msgstr "Боја истицања"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Боја истицања за сва поклапања"
+
+#~ msgid "Current color"
+#~ msgstr "Текућа боја"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Боја истицања за текуће поклапање"
+
+#~| msgid "Reload the document"
+#~ msgid "Recover previous documents?"
+#~ msgstr "Да изнова учитам документе?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Изгледа да је прегледач документа неочекивано отказао при последњем "
+#~ "покретању. Можете вратити отворене документе."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_Не враћај"
+
+#~ msgid "_Recover"
+#~ msgstr "_Врати"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Опоравак при паду"
+
+#~ msgid "Print..."
+#~ msgstr "Штампање..."
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "Није могуће направити симболичну везу „%s“: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "Није могуће отворити умножак."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Сачувај умножак..."
+
+#~ msgid "_Print..."
+#~ msgstr "_Штампај..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Тражи..."
+
+#~ msgid "Co_nnect"
+#~ msgstr "_Повежи се"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "Повежи се _анонимно"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Повежи се као _корисник:"
+
+#~ msgid "_Username:"
+#~ msgstr "_Корисничко име:"
+
+#~ msgid "_Domain:"
+#~ msgstr "_Домен:"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "_Одмах заборави лозинку"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_Запамти лозинку до одјављивања"
+
+#~ msgid "_Remember forever"
+#~ msgstr "_Запамти трајно"
+
+#~ msgid "File not available"
+#~ msgstr "Датотека није доступна"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "Мрежне датотеке нису подржане"
+
+#~ msgid "Password Entry"
+#~ msgstr "Унос лозинке"
+
+#~ msgid "Remember password for this session"
+#~ msgstr "Запамти лозинку за ову сесију"
+
+# note(slobo): јасно ово је фигуративно...може нанижи лозинку на привезак...
+#~ msgid "Save password in keyring"
+#~ msgstr "Закачи лозинку за привезак за кључеве"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f in"
+
+#~ msgid "Find Previous"
+#~ msgstr "Тражи претходно"
+
+#~ msgid "Find Next"
+#~ msgstr "Тражи следеће"
+
+#~ msgid "Incorrect password"
+#~ msgstr "Неисправна лозинка"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Прегледач докумената Евинс"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "Писмо"
+
+#~ msgid "Tabloid"
+#~ msgstr "Таблоид"
+
+#~ msgid "Ledger"
+#~ msgstr "Праг"
+
+#~ msgid "Legal"
+#~ msgstr "Правно"
+
+#~ msgid "Statement"
+#~ msgstr "Изјава"
+
+#~ msgid "Executive"
+#~ msgstr "Извршни"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Фолија"
+
+#~ msgid "Quarto"
+#~ msgstr "Кварто"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "Није могуће отворити датотеку „%s“."
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "Неуспешно учитавање документа „%s“. Ghostscript преводилац није унет у "
+#~ "путању"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "Угњеждени ПостСкрипт"
+
+#~ msgid "PostScript"
+#~ msgstr "ПостСкрипт"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "Грешка при обради."
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "Неподржан MIME тип: „%s“"
+
+#~ msgid "Images"
+#~ msgstr "Слике"
+
+#~ msgid "Open “%s”"
+#~ msgstr "Отвори „%s“"
+
+#~ msgid "Empty"
+#~ msgstr "Испразни"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "Израда PDF-а није подржана"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "Покушали сте да штампате користећи управљачки програм „%s“. Овај програм "
+#~ "захтева PostScript управљачки програм за штампач."
+
+#~ msgid "Pages"
+#~ msgstr "Странице"
+
+#~ msgid "Invalid URI: “%s”"
+#~ msgstr "Неисправан УРИ: „%s“"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "No document loaded."
+#~ msgstr "Документ није учитан."
+
+#~ msgid "Broken pipe."
+#~ msgstr "Прекинута веза."
+
+#~ msgid "Error while decompressing file %s:\n"
+#~ msgstr "Грешка при отпакивању датотеке %s:\n"
+
+#~ msgid "File is not readable."
+#~ msgstr "Датотеке није читљива."
+
+#~ msgid "Document loaded."
+#~ msgstr "Документ учитан."
+
+#~ msgid "_Previous"
+#~ msgstr "_Претходни"
+
+#~ msgid "_Next"
+#~ msgstr "_Следећи"
+
+#~ msgid "The \"Find\" feature will not work with this document"
+#~ msgstr "Могућност претраживања неће радити за овај документ"
+
+#~ msgid "Searching for text is only supported for PDF documents."
+#~ msgstr "Тражење текста је подржано само за PDF документе."
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "Not found"
+#~ msgstr "Није нађено"
+
+#~ msgid "Show statusbar by default"
+#~ msgstr "Уобичајено прикажи линију са стањем"
+
+#~ msgid "Show toolbar by default"
+#~ msgstr "Уобичајено прикажи траку са алатом"
+
+#~ msgid ""
+#~ "Statusbar is the standard bottom bar that display additional information "
+#~ "about links and other actions. Two boolean options, true makes the "
+#~ "statusbar visible by default while false makes sidebar not visible by "
+#~ "default."
+#~ msgstr ""
+#~ "Линија са стањем је уобичајена трака у дну која приказује додатне податке "
+#~ "о везама и другим акцијама. Две истинитосне вредности, постављање "
+#~ "подразумевано приказује линију са стањем док искључење подразумевано "
+#~ "сакрива линију са стањем."
+
+#~ msgid ""
+#~ "Toolbar is the top bar that contains navigation and zoom controls. Two "
+#~ "boolean options, true makes toolbar visible by default while false makes "
+#~ "toolbar not visible by default."
+#~ msgstr ""
+#~ "Трака са алатом је уобичајена трака у врху која садржи елементе за "
+#~ "навигацију и увећање. Две истинитосне вредности, постављање подразумевано "
+#~ "приказује траку са алатом док искључење подразумевано сакрива траку са "
+#~ "алатом."
+
+#~ msgid "Unable to find glade file"
+#~ msgstr "Не могу да нађем Глејд датотеку"
+
+#~ msgid ""
+#~ "The glade file, %s, cannot be found. Please check that your installation "
+#~ "is complete."
+#~ msgstr ""
+#~ "Не могу да нађем Глејд датотеку „%s“. Проверите да ли је ваша инсталација "
+#~ "потпуна."
+
+#~ msgid "Document Viewer - Password Required"
+#~ msgstr "Прегледач докумената — лозинка је обавезна"
+
+#~ msgid "Save the current document with a new filename"
+#~ msgstr "Сачувај текући документ под новим именом"
+
+#~ msgid "View the properties of this document"
+#~ msgstr "Прегледај особине овог документа"
+
+#~ msgid "Close this window"
+#~ msgstr "Затвори овај прозор"
+
+#~ msgid "Copy text from the document"
+#~ msgstr "Умножи текст из документа"
+
+#~ msgid "Select the entire page"
+#~ msgstr "Изабери целу страницу"
+
+#~ msgid "Customize the toolbar"
+#~ msgstr "Прилагоди траку са алатом"
+
+#~ msgid "Rotate the document to the left"
+#~ msgstr "Ротирај документ налево"
+
+#~ msgid "Rotate the document to the right"
+#~ msgstr "Ротирај документ надесно"
+
+#~ msgid "Display help for the viewer application"
+#~ msgstr "Прикажи помоћ за програм прегледача"
+
+#~ msgid "Display credits for the document viewer creators"
+#~ msgstr "Прикажи заслуге твораца прегледача докумената"
+
+#~ msgid "Scroll one page forward"
+#~ msgstr "Клизај једну страну унапред"
+
+#~ msgid "Scroll one page backward"
+#~ msgstr "Клизај једну страну уназад"
+
+#~ msgid "Focus the page selector"
+#~ msgstr "Фокусирај избирач странице"
+
+#~ msgid "Go ten pages backward"
+#~ msgstr "Иди 10 страна уназад"
+
+#~ msgid "Go ten pages forward"
+#~ msgstr "Иди 10 страна унапред"
+
+#~ msgid "_Statusbar"
+#~ msgstr "Линија са _стањем"
+
+#~ msgid "Show or hide the statusbar"
+#~ msgstr "Прикажи или сакриј линију са стањем"
+
+#~ msgid "Default sidebar size"
+#~ msgstr "Подразумевана величина бочне траке"
+
+#~ msgid "Show sidebar by default"
+#~ msgstr "Уобичајено прикажи бочну траку"
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. The "
+#~ "default size sets the sidebar's width in pixels based from the side of "
+#~ "the window. Any integer will be accepted. The sidebar will never shrink "
+#~ "smaller than the size of the text required to display Thumbnails or "
+#~ "Index. Large values will cause the sidebar to take up as much of the page "
+#~ "display area as possible relative to the window's size."
+#~ msgstr ""
+#~ "Бочна трака је бочна ставка која садржи индекс и списак сличица страна. "
+#~ "Подразумевана величина поставља ширину бочне траке у тачкама у односу на "
+#~ "страну прозора. Прихвата се било који цео број, а бочна трака се никад "
+#~ "неће смањити испод величине неопходне за приказ сличица или индекса. "
+#~ "Велике вредности ће учинити да бочна трака заузме што је могуће више "
+#~ "простора за приказ странице у односу на величину прозора."
diff --git a/po/[email protected] b/po/[email protected]
new file mode 100644
index 00000000..7b5e8521
--- /dev/null
+++ b/po/[email protected]
@@ -0,0 +1,2123 @@
+# Serbian translation of evince
+# Courtesy of Prevod.org team (http://prevod.org/) -- 2005-2009.
+#
+# This file is distributed under the same license as the evince package.
+#
+# Maintainer: Danilo Šegan <[email protected]>
+# Reviewed on 2005-09-03 by: Danilo Šegan <[email protected]>
+# Translated on 2007-03-12 by: Igor Nestorović <[email protected]>
+# Miloš Popović <[email protected]>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Evince\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-08-02 18:58+0000\n"
+"PO-Revision-Date: 2010-08-18 10:52+0200\n"
+"Last-Translator: Miloš Popović <[email protected]>\n"
+"Language-Team: Serbian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n"
+"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Greška prilikom pokretanja naredbe „%s“ radi raspakovanja stripa: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Naredba „%s“ nije uspela da otpakuje strip."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Naredba %s nije izašla normalno."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Ovo nije MIME vrsta za strip: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Ne mogu da nađem nardbu za raspakovanje ove vrste stripa"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Nepoznata MIME vrsta"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Datoteka je oštećena"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Nema datoteka u arhivi"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Nijedna slika nije pronađena u arhivi %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Javila se greška prilikom brisanja „%s“."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Greška %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Stripovi"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu dokument ima neispravan oblik"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Dokument je sastavljen iz nekoliko datoteka. Ne mogu da pristupim jednoj ili "
+"više ovih datoteka."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu dokumenti"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI dokument ima neispravan oblik"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI dokumenti"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Ovaj rad je u javnom domenu"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Da"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Ne"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Nepoznata vrsta slovnog lika"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Bez imena"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Ugnježdeni podskup"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Ugnježden"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Nije ugnježden"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF dokumenti"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Neispravan dokument"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Slajdovi programa „Prezentacija“"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Nema greške"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Nedovoljno memorije"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Nije pronađen ZIP potpis"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Nije ispravna ZIP datoteka"
+
+# Nije sigurno da li se misli na više datoteka u zip arhivi, ili više zip arhiva u prilogu.
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Nisu podržani dokumenti sa više ZIP datoteka"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Ne mogu da otvorim datoteku"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Ne mogu da pročitam podatke iz datoteke"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Ne mogu da pronađem datoteku u ZIP arhivi"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Nepoznata greška"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Ne mogu da otvorim dokument „%s“"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Ne mogu da sačuvam dokument „%s“"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Postskript dokumenti"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Ne mogu da sačuvatm prilog „%s“: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Ne mogu da otvorim prilog „%s“: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Ne mogu da otvorim prilog „%s“"
+
+# Nije sigurno da li se misli na više datoteka u zip arhivi, ili više zip arhiva u prilogu.
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Tip datoteke %s (%s) nije podržan"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Svi dokumenti"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Sve datoteke"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Ne mogu da napravim privremenu datoteku: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Ne mogu da napravim privremeni direktorijum: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Ovo nije ispravna .desktop datoteka"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Nije prepoznata desktop datoteka u izdanju „%s“"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Pokrećem %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Program ne prihvata dokumente iz komandne linije"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Nepoznata opcija pri pokretanju: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Ne mogu da prosledim adresu dokumenta u unos „Type=Adresa“"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Nije izvršna stavka"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Onemogući vezi sa upravnikom sesije"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Izaberite datoteku sa sačuvanim podešavanjima"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "DATOTEKA"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Odredite IB upravnika sesije"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "IB"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Opcije upravnika sesije:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Prikaži opcije upravnika sesije"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Prikaži „_%s“"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Premesti na paletu alatki"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Premesti izabrani predmet na paletu alatki"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Ukloni sa palete alatki"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Ukloni izabrani element sa palete alatki"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Obriši paletu alatki"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Uklanja izabranu paletu alatki"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Razdvajač"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5735
+msgid "Best Fit"
+msgstr "Najbolje uklapanje"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Uklopi prema širini strane"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+#| msgid "100%"
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+#| msgid "100%"
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+#| msgid "200%"
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+#| msgid "400%"
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Pregledač dokumenata"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Pregledajte višestranične dokumente"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Prevaziđi ograničenja dokumenta"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Prevazilazi ograničenja koja dokument ugrađeno sadrži, kao što je zabrana "
+"umnožavanja ili štampe "
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Obriši privremenu datoteku"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Datoteka sa podtavkama štampe"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Gnom pregledač dokumenata"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "Nije uspelo štampanje dokumenta"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Ne mogu da pronađem štampač „%s“"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5450
+msgid "_Previous Page"
+msgstr "_Prethodna strana"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5451
+msgid "Go to the previous page"
+msgstr "Idi na prethodnu stranicu"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5453
+msgid "_Next Page"
+msgstr "_Sledeća strana"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5454
+msgid "Go to the next page"
+msgstr "Idi na sledeću stranu"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5437
+msgid "Enlarge the document"
+msgstr "Uvećaj dokument"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5440
+msgid "Shrink the document"
+msgstr "Umanji dokument"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Štampaj"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5406
+msgid "Print this document"
+msgstr "Odštampaj ovaj dokument"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5552
+msgid "_Best Fit"
+msgstr "Naj_bolje uklapanje"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5553
+msgid "Make the current document fill the window"
+msgstr "Neka tekući dokument popuni prozor"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5555
+msgid "Fit Page _Width"
+msgstr "Uklopi prema _širini"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5556
+msgid "Make the current document fill the window width"
+msgstr "Neka tekući dokument popuni širinu prozora"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5657
+msgid "Page"
+msgstr "Strana"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5658
+msgid "Select Page"
+msgstr "Izaberi stranu"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokument"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Naslov:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Mesto:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Tema:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Autor:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Ključne reči:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Proizvođač:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Tvorac:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Napravljen:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Izmenjen:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Broj stranica:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimizovan:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Oblikc:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Zaštita:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Veličina papira:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Ništa"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f inča"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Uspravno (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Položeno (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d od %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr " od %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Učitavam..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Pripremam za štampu..."
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Završavam..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Štampam %d. stranicu od %d..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Štampanje nije podržano za ovaj štampač."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Neispravan opseg stranica"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Upozorenje"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Zadati opseg za štampu ne sadrži ni jednu stranicu"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Razvuci stranicu:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Umanji na oblast za štampu"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Uklopi u oblast za štampu"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Razvlači stranice dokumenta tako da se uklope u izabranu stranicu štampača. "
+"Izaberite jedno od priloženih:\n"
+"\n"
+"• „Ništa“: Ne razvlači stranice dokumenta.\n"
+"\n"
+"• „Umanji na oblast za štampu“: Umanjuje stranice dokumenta koje su veće od "
+"oblasti za štampu tako da se uklope na papir štampača.\n"
+"\n"
+"• „Uklopi u oblast za štampu“: Smanjuje ili povećava stranice dokumenta tako "
+"da se uklope na papir štampača.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Sam rotiraj i centriraj"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Okreće svaku stranicu štampača, tako da bude ista onoj unutar dokumenta i "
+"postavlja stranice dokumenta na sredinu papira za štampu."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Odredi veličinu stranice na osnovu dokumenta"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Postavlja veličinu svake odštampane stranice na veličinu stranice u dokumentu."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Rad sa stranicama"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "ne mogu da odštampam stranicu %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Klizaj prema gore"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Klizaj prema dole"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Klizaj jedan ekran nagore"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Klizaj jedan ekran nadole"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Pregled dokumenta"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Skoči do strane:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Kraj prezentacije. Kliknite za izlazak."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Idi na prvu stranu"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Idi na prethodnu stranu"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Idi na sledeću stranu"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Idi na poslednju stranu"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Idi na stranu"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Traži"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Idi na stranu %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Idi na %s datoteke „%s“"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Idi na datoteku „%s“"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Pokreni %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Traži:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5423
+msgid "Find Pre_vious"
+msgstr "Traži pre_thodno"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Traži prethodan izraz u nizu za pretraživanje"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5421
+msgid "Find Ne_xt"
+msgstr "Pronađi _sledeće"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Traži sledeći izraz u nizu za pretraživanje"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Z_avisno od veličine slova"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Uključuje pretragu osetljivu na veličinu slova"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Ikonica:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+#| msgid "None"
+msgid "Note"
+msgstr "Beleška"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+#| msgid "Document"
+msgid "Comment"
+msgstr "Komentar"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Ključ"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+#| msgid "_Help"
+msgid "Help"
+msgstr "Pomoć"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Novi pasus"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Pasus"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Umetni"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Krstić"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Krug"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+#| msgid "Unknown error"
+msgid "Unknown"
+msgstr "Nepoznato"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+#| msgid "Properties"
+msgid "Annotation Properties"
+msgstr "Osobine zabeleške"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Boja:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+#| msgid "Title:"
+msgid "Style:"
+msgstr "Stil:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Providno"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Neprovidno"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Početno stanje prozora:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+#| msgid "_Open…"
+msgid "Open"
+msgstr "Otvoren"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Zatvoren"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Pokretanje u režimu prezentacije"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Lozinka za dokument „%s“"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Prevodim %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "Prevedeno je %d od %d dokumenata"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Prevodim metapodatke"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Format metapodataka koje koristi Pregledač dokumenata je promenjen. Morate da "
+"sačekate na prevođenje podataka u novi format ili oni neće biti sačuvani."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Otvori skoro korišćeni dokument"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Ovaj dokument je zaključan i može se pročitati jedino uz unos ispravne "
+"lozinke."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Otključaj dokument"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Ukucajte lozinku"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Lozinka je obavezna"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"Dokument „%s“ je zaključan i neophodna je lozinka pre nego što se može "
+"otvoriti."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Lozinka:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "_Odmah zaboravi lozinku"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Z_apamti lozinku do odjave"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "_Zapamti trajno"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Osobine"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Opšte"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Slovni lik"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Licenca dokumenata"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Font"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Skupljam podatke o fontu... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Uslovi korišćenja"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Tekst licence"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Još podataka"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Spisak"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+#| msgid "Location:"
+msgid "Annotations"
+msgstr "Zabeleške"
+
+#: ../shell/ev-sidebar-annotations.c:209
+#| msgid "Next"
+msgid "Text"
+msgstr "Tekst"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Dodaj zabelešku"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Dodaj"
+
+#: ../shell/ev-sidebar-annotations.c:364
+#| msgid "The document contains no pages"
+msgid "Document contains no annotations"
+msgstr "Dokument ne sadrži zabeleške"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+#| msgid "Page %s"
+msgid "Page %d"
+msgstr "Stranica %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Prilozi"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Slojevi"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Štampaj..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Popis"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Mali prikazi"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "Stranica %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "Stranica %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "Dokument ne sadrži stranice"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "Dokument sadrži samo prazne stranice"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "Ne mogu da otvorim dokument"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Učitavam dokument iz „%s“"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Preuzimam dokument (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "Ne mogu da učitam udaljenu datoteku."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Iznova učitavam dokument iz %s"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "Ne mogu da ponovo učitam dokument."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "Otvori dokument"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "Čuvam dokument u %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Čuvam prilog u %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "Čuvam sliku u %s"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Datoteka nije mogla biti sačuvana kao „%s“."
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Šaljem dokument (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Šaljem prilog (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Šaljem sliku (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "Sačuvaj kopiju"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d zaduženje čeka u zakazanim"
+msgstr[1] "%d zaduženja čakaju u zakazanim"
+msgstr[2] "%d zaduženja čekaju u zakazanim"
+msgstr[3] "Zaduženje čeka u zakazanim"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Štampam zaduženje „%s“"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"Dokument sadrži obrazac sa poljima koja su popunjena. Ukoliko ne sačuvate "
+"kopiju, izmene će biti trajno izgubljene."
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"Dokument sadrži nove ili izmenjene zabeleške. Ukoliko ne sačuvate kopiju, "
+"izmene će biti trajno izgubljene."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+#| msgid "Wait until print job “%s” finishes before closing?"
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Da li da sačuvam kopiju dokumenta „%s“?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "Zatvori _bez čuvanja"
+
+#: ../shell/ev-window.c:3436
+#| msgid "Save a Copy"
+msgid "Save a _Copy"
+msgstr "_Sačuvaj kopiju"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Da li da sačekam dok se ne odštampa zaduženje „%s“?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "Ima %d aktivnih zaduženja za štampu. Da li da sačekam dok se ne završe?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Ukoliko zatvorite prozor, zaduženja koja čekaju neće biti štampana."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "Prekini štampu i _izađi"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "Izađi _nakon štampe"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "Uređivanje palete alatki"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "Greška u prikazu pomoći"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Pregledač dokumenata.\n"
+"Koristi %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evins je slobodan softver; možete ga širiti i/ili menjati pod uslovima Gnu-"
+"ove Opšte Javne Licence, kako je to objavila Zadužbina Slobodnog Softvera; "
+"bilo pod verzijom 2 licence, ili (po Vašem mišljenju) nekom naknadnom "
+"verzijom.\n"
+".\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evins se deli u nameri da će biti koristan, ali BEZ IKAKVE GARANCIJE; čak se "
+"ne podrazumeva da je pogodan za TRŽIŠNO učešće ili da PRIMENJIV ZA NEKU "
+"DELATNOST. Za više detalja pročitajte Opštu Javnu Licencu.\n"
+
+#: ../shell/ev-window.c:4571
+#| msgid ""
+#| "You should have received a copy of the GNU General Public License along "
+#| "with Evince; if not, write to the Free Software Foundation, Inc., 59 "
+#| "Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"Trebali ste da dobijete jedan primerak Opšte Javne Licence zajedno sa ovim "
+"programom; ako to nije slučaj, pišite na adresu: Free Software Foundation, "
+"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1302, USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evins"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2007 Evinsovi autori"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"Danilo Šegan <[email protected]>\n"
+"Slobodan D. Sredojević <[email protected]>\n"
+"Goran Rakić <[email protected]>\n"
+"Miloš Popović <[email protected]>\n"
+"http://prevod.org — prevod na srpski jezik."
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4868
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d pogodak na ovoj stranici"
+msgstr[1] "%d pogotka na ovoj stranici"
+msgstr[2] "%d pogodaka na ovoj stranici"
+msgstr[3] "%d pogodak na ovoj stranici"
+
+#: ../shell/ev-window.c:4876
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Preostalo da pretraži %3d%%"
+
+#: ../shell/ev-window.c:5389
+msgid "_File"
+msgstr "_Datoteka"
+
+#: ../shell/ev-window.c:5390
+msgid "_Edit"
+msgstr "_Uređivanje"
+
+#: ../shell/ev-window.c:5391
+msgid "_View"
+msgstr "P_regled"
+
+#: ../shell/ev-window.c:5392
+msgid "_Go"
+msgstr "_Idi"
+
+#: ../shell/ev-window.c:5393
+msgid "_Help"
+msgstr "_Pomoć"
+
+#. File menu
+#: ../shell/ev-window.c:5396 ../shell/ev-window.c:5697
+msgid "_Open…"
+msgstr "_Otvori..."
+
+#: ../shell/ev-window.c:5397 ../shell/ev-window.c:5698
+msgid "Open an existing document"
+msgstr "Otvori postojeći dokument"
+
+#: ../shell/ev-window.c:5399
+msgid "Op_en a Copy"
+msgstr "Otvori _kopiju"
+
+#: ../shell/ev-window.c:5400
+msgid "Open a copy of the current document in a new window"
+msgstr "Otvara kopiju dokumenta u novom prozoru"
+
+#: ../shell/ev-window.c:5402
+msgid "_Save a Copy…"
+msgstr "_Sačuvaj kopiju..."
+
+#: ../shell/ev-window.c:5403
+msgid "Save a copy of the current document"
+msgstr "Čuva jedan primerak tekućeg dokumenta"
+
+#: ../shell/ev-window.c:5405
+msgid "_Print…"
+msgstr "_Štampaj..."
+
+#: ../shell/ev-window.c:5408
+msgid "P_roperties"
+msgstr "Oso_bine"
+
+#: ../shell/ev-window.c:5416
+msgid "Select _All"
+msgstr "Izaberi _sve"
+
+#: ../shell/ev-window.c:5418
+msgid "_Find…"
+msgstr ":Traži..."
+
+#: ../shell/ev-window.c:5419
+msgid "Find a word or phrase in the document"
+msgstr "Nađi reč ili izraz u dokumentu"
+
+#: ../shell/ev-window.c:5425
+msgid "T_oolbar"
+msgstr "_Alatke"
+
+#: ../shell/ev-window.c:5427
+msgid "Rotate _Left"
+msgstr "Rotiraj _levo"
+
+#: ../shell/ev-window.c:5429
+msgid "Rotate _Right"
+msgstr "Rotiraj _desno"
+
+#: ../shell/ev-window.c:5431
+msgid "Save Current Settings as _Default"
+msgstr "Sačuvaj podešavanja kao po_drazumevana"
+
+#: ../shell/ev-window.c:5442
+msgid "_Reload"
+msgstr "_Osveži"
+
+#: ../shell/ev-window.c:5443
+msgid "Reload the document"
+msgstr "Iznova učitaj dokument"
+
+#: ../shell/ev-window.c:5446
+msgid "Auto_scroll"
+msgstr "Pomeraj _klizač"
+
+#: ../shell/ev-window.c:5456
+msgid "_First Page"
+msgstr "_Prva strana"
+
+#: ../shell/ev-window.c:5457
+msgid "Go to the first page"
+msgstr "Idi na prvu stranu"
+
+#: ../shell/ev-window.c:5459
+msgid "_Last Page"
+msgstr "_Poslednja strana"
+
+#: ../shell/ev-window.c:5460
+msgid "Go to the last page"
+msgstr "Idi na poslednju stranu"
+
+#. Help menu
+#: ../shell/ev-window.c:5464
+msgid "_Contents"
+msgstr "_Sadržaj"
+
+#: ../shell/ev-window.c:5467
+msgid "_About"
+msgstr "_O programu"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5471
+msgid "Leave Fullscreen"
+msgstr "Ne preko celog ekrana"
+
+#: ../shell/ev-window.c:5472
+msgid "Leave fullscreen mode"
+msgstr "Ne preko celog ekrana"
+
+#: ../shell/ev-window.c:5474
+msgid "Start Presentation"
+msgstr "Pusti kao prezentaciju"
+
+#: ../shell/ev-window.c:5475
+msgid "Start a presentation"
+msgstr "Pusti dokument kao prezentaciju"
+
+#. View Menu
+#: ../shell/ev-window.c:5534
+msgid "_Toolbar"
+msgstr "Ala_tke"
+
+#: ../shell/ev-window.c:5535
+msgid "Show or hide the toolbar"
+msgstr "Prikaži ili sakrij paletu sa alatom"
+
+#: ../shell/ev-window.c:5537
+msgid "Side _Pane"
+msgstr "Bočna _površ"
+
+#: ../shell/ev-window.c:5538
+msgid "Show or hide the side pane"
+msgstr "Prikaži ili sakrij bočnu površ"
+
+#: ../shell/ev-window.c:5540
+msgid "_Continuous"
+msgstr "_Neprekidno"
+
+#: ../shell/ev-window.c:5541
+msgid "Show the entire document"
+msgstr "Prikaži čitav dokument"
+
+#: ../shell/ev-window.c:5543
+msgid "_Dual"
+msgstr "Po _dve"
+
+#: ../shell/ev-window.c:5544
+msgid "Show two pages at once"
+msgstr "Prikaži sve strane odjednom"
+
+#: ../shell/ev-window.c:5546
+msgid "_Fullscreen"
+msgstr "_Ceo ekran"
+
+#: ../shell/ev-window.c:5547
+msgid "Expand the window to fill the screen"
+msgstr "Raširi prozor da popuni ceo ekran"
+
+#: ../shell/ev-window.c:5549
+msgid "Pre_sentation"
+msgstr "Pre_zentacija"
+
+#: ../shell/ev-window.c:5550
+msgid "Run document as a presentation"
+msgstr "Pusti dokument kao prezentaciju"
+
+#: ../shell/ev-window.c:5558
+msgid "_Inverted Colors"
+msgstr "Obrni _boje"
+
+#: ../shell/ev-window.c:5559
+msgid "Show page contents with the colors inverted"
+msgstr "Prikazuje sadržaj stranica u suprotnim bojama"
+
+#. Links
+#: ../shell/ev-window.c:5567
+msgid "_Open Link"
+msgstr "Otvo_ri vezu"
+
+#: ../shell/ev-window.c:5569
+msgid "_Go To"
+msgstr "_Idi na"
+
+#: ../shell/ev-window.c:5571
+msgid "Open in New _Window"
+msgstr "Otvori novi _prozor"
+
+#: ../shell/ev-window.c:5573
+msgid "_Copy Link Address"
+msgstr "Umnoži adres_u veze"
+
+#: ../shell/ev-window.c:5575
+msgid "_Save Image As…"
+msgstr "Sačuvaj sliku _kao..."
+
+#: ../shell/ev-window.c:5577
+msgid "Copy _Image"
+msgstr "Umnoži _sliku"
+
+#: ../shell/ev-window.c:5579
+msgid "Annotation Properties…"
+msgstr "Osobine zabeleške…"
+
+#: ../shell/ev-window.c:5584
+msgid "_Open Attachment"
+msgstr "Sa_čuvaj prilog"
+
+#: ../shell/ev-window.c:5586
+msgid "_Save Attachment As…"
+msgstr "S_ačuvaj prilog kao..."
+
+#: ../shell/ev-window.c:5671
+msgid "Zoom"
+msgstr "Uvećaj"
+
+#: ../shell/ev-window.c:5673
+msgid "Adjust the zoom level"
+msgstr "Prilagodi nivo uvećanja"
+
+#: ../shell/ev-window.c:5683
+msgid "Navigation"
+msgstr "Navigacija"
+
+#: ../shell/ev-window.c:5685
+msgid "Back"
+msgstr "Nazad"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5688
+msgid "Move across visited pages"
+msgstr "Pređite po posećenim stranama"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5718
+msgid "Previous"
+msgstr "Prethodna"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5723
+msgid "Next"
+msgstr "Sledeća"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5727
+msgid "Zoom In"
+msgstr "Uvećaj"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5731
+msgid "Zoom Out"
+msgstr "Umanji"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5739
+msgid "Fit Width"
+msgstr "Uklopi širinu"
+
+#: ../shell/ev-window.c:5884 ../shell/ev-window.c:5901
+msgid "Unable to launch external application."
+msgstr "Ne mogu da pokrenem spoljni program."
+
+#: ../shell/ev-window.c:5958
+msgid "Unable to open external link"
+msgstr "Ne mogu da otvoritm spoljnu vezu"
+
+#: ../shell/ev-window.c:6125
+msgid "Couldn't find appropriate format to save image"
+msgstr "Ne mogu da pronađem prigodan format za čuvanje slike"
+
+#: ../shell/ev-window.c:6167
+msgid "The image could not be saved."
+msgstr "Slika nije mogla biti sačuvana."
+
+#: ../shell/ev-window.c:6199
+msgid "Save Image"
+msgstr "Sačuvaj sliku"
+
+#: ../shell/ev-window.c:6327
+msgid "Unable to open attachment"
+msgstr "Nije moguće otvoriti prilog"
+
+#: ../shell/ev-window.c:6380
+msgid "The attachment could not be saved."
+msgstr "Prilog nije moguće sačuvati."
+
+#: ../shell/ev-window.c:6425
+msgid "Save Attachment"
+msgstr "Sačuvaj prilog"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — potrebna je lozinka"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Po ekstenziji"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Gnom pregledač dokumenata"
+
+#: ../shell/main.c:77
+#| msgid "The page of the document to display."
+msgid "The page label of the document to display."
+msgstr "Naziv stranice dokumenta za prikaz."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "STRANA"
+
+#: ../shell/main.c:78
+#| msgid "The page of the document to display."
+msgid "The page number of the document to display."
+msgstr "Broj stranice dokumenta za prikaz."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "BROJ"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Pokreni Evins preko celog ekrana"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Pokreni Evins u kao prezentaciju"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Pokreni Evins kao pregledač"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Reč ili izraz za pretragu po dokumentu"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "NISKA"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[DATOTEKA...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Dostupne vrednosti su „true“ (tačno) koja uključuje umanjeni prikaz sličica i "
+"„false“ (netačno) koja zaustavlja pravljenje novih sličica"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Uključi pravljenje sličica za PDF dokumente"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Naredba za pravljenje sličica za PDF dokumente"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Ispravna naredba uz argumente za pravljenje sličica kod PDF dokumenata. "
+"Pogledajte dokumentaciju Cajaovog programa za izradu umanjenih prikaza."
+
+#~| msgid "Page Set_up..."
+#~ msgid "Page Set_up…"
+#~ msgstr "Po_dešavanje stranice..."
+
+#~| msgid "Setup the page settings for printing"
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Podešava postavke stranica za štampu"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVI dokument ima neispravan oblik"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "Nije uspelo kreiranje datoteke„%s“: %s"
+
+#~ msgid "Search string"
+#~ msgstr "Traži nisku"
+
+# bug: since when do the strings have names?
+#~ msgid "The name of the string to be found"
+#~ msgstr "Ime niske koju tražiti"
+
+#~ msgid "Case sensitive"
+#~ msgstr "Zavisno od veličine slova"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "Postavljeno za pretragu koja zavisi od veličine slova"
+
+#~ msgid "Highlight color"
+#~ msgstr "Boja isticanja"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Boja isticanja za sva poklapanja"
+
+#~ msgid "Current color"
+#~ msgstr "Tekuća boja"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Boja isticanja za tekuće poklapanje"
+
+#~| msgid "Reload the document"
+#~ msgid "Recover previous documents?"
+#~ msgstr "Da iznova učitam dokumente?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Izgleda da je pregledač dokumenta neočekivano otkazao pri poslednjem "
+#~ "pokretanju. Možete vratiti otvorene dokumente."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_Ne vraćaj"
+
+#~ msgid "_Recover"
+#~ msgstr "_Vrati"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "Oporavak pri padu"
+
+#~ msgid "Print..."
+#~ msgstr "Štampanje..."
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "Nije moguće napraviti simboličnu vezu „%s“: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "Nije moguće otvoriti umnožak."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Sačuvaj umnožak..."
+
+#~ msgid "_Print..."
+#~ msgstr "_Štampaj..."
+
+#~ msgid "_Find..."
+#~ msgstr "_Traži..."
+
+#~ msgid "Co_nnect"
+#~ msgstr "_Poveži se"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "Poveži se _anonimno"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Poveži se kao _korisnik:"
+
+#~ msgid "_Username:"
+#~ msgstr "_Korisničko ime:"
+
+#~ msgid "_Domain:"
+#~ msgstr "_Domen:"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "_Odmah zaboravi lozinku"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_Zapamti lozinku do odjavljivanja"
+
+#~ msgid "_Remember forever"
+#~ msgstr "_Zapamti trajno"
+
+#~ msgid "File not available"
+#~ msgstr "Datoteka nije dostupna"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "Mrežne datoteke nisu podržane"
+
+#~ msgid "Password Entry"
+#~ msgstr "Unos lozinke"
+
+#~ msgid "Remember password for this session"
+#~ msgstr "Zapamti lozinku za ovu sesiju"
+
+# note(slobo): jasno ovo je figurativno...može naniži lozinku na privezak...
+#~ msgid "Save password in keyring"
+#~ msgstr "Zakači lozinku za privezak za ključeve"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f in"
+
+#~ msgid "Find Previous"
+#~ msgstr "Traži prethodno"
+
+#~ msgid "Find Next"
+#~ msgstr "Traži sledeće"
+
+#~ msgid "Incorrect password"
+#~ msgstr "Neispravna lozinka"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Pregledač dokumenata Evins"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "Pismo"
+
+#~ msgid "Tabloid"
+#~ msgstr "Tabloid"
+
+#~ msgid "Ledger"
+#~ msgstr "Prag"
+
+#~ msgid "Legal"
+#~ msgstr "Pravno"
+
+#~ msgid "Statement"
+#~ msgstr "Izjava"
+
+#~ msgid "Executive"
+#~ msgstr "Izvršni"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Folija"
+
+#~ msgid "Quarto"
+#~ msgstr "Kvarto"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "Nije moguće otvoriti datoteku „%s“."
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "Neuspešno učitavanje dokumenta „%s“. Ghostscript prevodilac nije unet u "
+#~ "putanju"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "Ugnježdeni PostSkript"
+
+#~ msgid "PostScript"
+#~ msgstr "PostSkript"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "Greška pri obradi."
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "Nepodržan MIME tip: „%s“"
+
+#~ msgid "Images"
+#~ msgstr "Slike"
+
+#~ msgid "Open “%s”"
+#~ msgstr "Otvori „%s“"
+
+#~ msgid "Empty"
+#~ msgstr "Isprazni"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "Izrada PDF-a nije podržana"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "Pokušali ste da štampate koristeći upravljački program „%s“. Ovaj program "
+#~ "zahteva PostScript upravljački program za štampač."
+
+#~ msgid "Pages"
+#~ msgstr "Stranice"
+
+#~ msgid "Invalid URI: “%s”"
+#~ msgstr "Neispravan URI: „%s“"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "No document loaded."
+#~ msgstr "Dokument nije učitan."
+
+#~ msgid "Broken pipe."
+#~ msgstr "Prekinuta veza."
+
+#~ msgid "Error while decompressing file %s:\n"
+#~ msgstr "Greška pri otpakivanju datoteke %s:\n"
+
+#~ msgid "File is not readable."
+#~ msgstr "Datoteke nije čitljiva."
+
+#~ msgid "Document loaded."
+#~ msgstr "Dokument učitan."
+
+#~ msgid "_Previous"
+#~ msgstr "_Prethodni"
+
+#~ msgid "_Next"
+#~ msgstr "_Sledeći"
+
+#~ msgid "The \"Find\" feature will not work with this document"
+#~ msgstr "Mogućnost pretraživanja neće raditi za ovaj dokument"
+
+#~ msgid "Searching for text is only supported for PDF documents."
+#~ msgstr "Traženje teksta je podržano samo za PDF dokumente."
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "Not found"
+#~ msgstr "Nije nađeno"
+
+#~ msgid "Show statusbar by default"
+#~ msgstr "Uobičajeno prikaži liniju sa stanjem"
+
+#~ msgid "Show toolbar by default"
+#~ msgstr "Uobičajeno prikaži traku sa alatom"
+
+#~ msgid ""
+#~ "Statusbar is the standard bottom bar that display additional information "
+#~ "about links and other actions. Two boolean options, true makes the "
+#~ "statusbar visible by default while false makes sidebar not visible by "
+#~ "default."
+#~ msgstr ""
+#~ "Linija sa stanjem je uobičajena traka u dnu koja prikazuje dodatne podatke "
+#~ "o vezama i drugim akcijama. Dve istinitosne vrednosti, postavljanje "
+#~ "podrazumevano prikazuje liniju sa stanjem dok isključenje podrazumevano "
+#~ "sakriva liniju sa stanjem."
+
+#~ msgid ""
+#~ "Toolbar is the top bar that contains navigation and zoom controls. Two "
+#~ "boolean options, true makes toolbar visible by default while false makes "
+#~ "toolbar not visible by default."
+#~ msgstr ""
+#~ "Traka sa alatom je uobičajena traka u vrhu koja sadrži elemente za "
+#~ "navigaciju i uvećanje. Dve istinitosne vrednosti, postavljanje podrazumevano "
+#~ "prikazuje traku sa alatom dok isključenje podrazumevano sakriva traku sa "
+#~ "alatom."
+
+#~ msgid "Unable to find glade file"
+#~ msgstr "Ne mogu da nađem Glejd datoteku"
+
+#~ msgid ""
+#~ "The glade file, %s, cannot be found. Please check that your installation "
+#~ "is complete."
+#~ msgstr ""
+#~ "Ne mogu da nađem Glejd datoteku „%s“. Proverite da li je vaša instalacija "
+#~ "potpuna."
+
+#~ msgid "Document Viewer - Password Required"
+#~ msgstr "Pregledač dokumenata — lozinka je obavezna"
+
+#~ msgid "Save the current document with a new filename"
+#~ msgstr "Sačuvaj tekući dokument pod novim imenom"
+
+#~ msgid "View the properties of this document"
+#~ msgstr "Pregledaj osobine ovog dokumenta"
+
+#~ msgid "Close this window"
+#~ msgstr "Zatvori ovaj prozor"
+
+#~ msgid "Copy text from the document"
+#~ msgstr "Umnoži tekst iz dokumenta"
+
+#~ msgid "Select the entire page"
+#~ msgstr "Izaberi celu stranicu"
+
+#~ msgid "Customize the toolbar"
+#~ msgstr "Prilagodi traku sa alatom"
+
+#~ msgid "Rotate the document to the left"
+#~ msgstr "Rotiraj dokument nalevo"
+
+#~ msgid "Rotate the document to the right"
+#~ msgstr "Rotiraj dokument nadesno"
+
+#~ msgid "Display help for the viewer application"
+#~ msgstr "Prikaži pomoć za program pregledača"
+
+#~ msgid "Display credits for the document viewer creators"
+#~ msgstr "Prikaži zasluge tvoraca pregledača dokumenata"
+
+#~ msgid "Scroll one page forward"
+#~ msgstr "Klizaj jednu stranu unapred"
+
+#~ msgid "Scroll one page backward"
+#~ msgstr "Klizaj jednu stranu unazad"
+
+#~ msgid "Focus the page selector"
+#~ msgstr "Fokusiraj izbirač stranice"
+
+#~ msgid "Go ten pages backward"
+#~ msgstr "Idi 10 strana unazad"
+
+#~ msgid "Go ten pages forward"
+#~ msgstr "Idi 10 strana unapred"
+
+#~ msgid "_Statusbar"
+#~ msgstr "Linija sa _stanjem"
+
+#~ msgid "Show or hide the statusbar"
+#~ msgstr "Prikaži ili sakrij liniju sa stanjem"
+
+#~ msgid "Default sidebar size"
+#~ msgstr "Podrazumevana veličina bočne trake"
+
+#~ msgid "Show sidebar by default"
+#~ msgstr "Uobičajeno prikaži bočnu traku"
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. The "
+#~ "default size sets the sidebar's width in pixels based from the side of "
+#~ "the window. Any integer will be accepted. The sidebar will never shrink "
+#~ "smaller than the size of the text required to display Thumbnails or "
+#~ "Index. Large values will cause the sidebar to take up as much of the page "
+#~ "display area as possible relative to the window's size."
+#~ msgstr ""
+#~ "Bočna traka je bočna stavka koja sadrži indeks i spisak sličica strana. "
+#~ "Podrazumevana veličina postavlja širinu bočne trake u tačkama u odnosu na "
+#~ "stranu prozora. Prihvata se bilo koji ceo broj, a bočna traka se nikad "
+#~ "neće smanjiti ispod veličine neophodne za prikaz sličica ili indeksa. "
+#~ "Velike vrednosti će učiniti da bočna traka zauzme što je moguće više "
+#~ "prostora za prikaz stranice u odnosu na veličinu prozora."
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 00000000..69d62dc9
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,1755 @@
+# Swedish messages for evince.
+# Copyright (C) 2004-2010 Free Software Foundation, Inc.
+# Christian Rose <[email protected]>, 2004, 2005.
+# Daniel Nylander <[email protected]>, 2006, 2007, 2008, 2009, 2010.
+#
+# "PostScript" bör enligt Datatermgruppen skrivas "Postscript" på svenska.
+# http://www.nada.kth.se/dataterm/fos-lista.html#f19
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-09-07 07:42+0200\n"
+"PO-Revision-Date: 2010-09-07 07:45+0100\n"
+"Last-Translator: Daniel Nylander <[email protected]>\n"
+"Language-Team: Swedish <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Fel vid start av kommandot \"%s\" för att kunna dekomprimera serietidningen: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Kommandot \"%s\" misslyckades med att dekomprimera serietidningen."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Kommandot \"%s\" avslutades inte normalt."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Inte en MIME-typ för en serietidning: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Kan inte hitta ett lämpligt kommando för att dekomprimera denna typ av serietidning"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Okänd MIME-typ"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "Filen är skadad"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "Inga filer i arkivet"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Inga bilder hittades i arkivet %s"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Det uppstod ett fel vid borttagning av \"%s\"."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "Fel %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Serietidningar"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu-dokumentet har ett felaktigt format"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid "The document is composed of several files. One or more of these files cannot be accessed."
+msgstr "Dokumentet består av flera filer. En eller flera av dessa filer går inte komma åt."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu-dokument"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI-dokumentet har felaktigt format"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI-dokument"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "Detta är ett publikt verk"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "Ja"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "Nej"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Typ 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Typ 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Typ 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "Truetype"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Typ 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Typ 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "Truetype (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "Okänd typsnittstyp"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "Inget namn"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "Inbyggd delmängd"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "Inbyggd"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "Inte inbyggd"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF-dokument"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Ogiltigt dokument"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress-diabilder"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Inga fel"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Inte tillräckligt med minne"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Kan inte hitta zip-signaturen"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Ogiltig zip-fil"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Multipla Zip-filer stöds inte"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Kan inte öppna filen"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Kan inte läsa data från fil"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Kan inte hitta fil i zip-arkivet"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Okänt fel"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Misslyckades med att läsa in dokumentet \"%s\""
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Misslyckades med att spara dokumentet \"%s\""
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Postscript-dokument"
+
+#: ../libdocument/ev-attachment.c:304
+#: ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Kunde inte spara bilagan \"%s\": %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Kunde inte öppna bilagan \"%s\": %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Kunde inte öppna bilagan \"%s\""
+
+# Hmm, stämmer detta? FIXME
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Filtypen %s (%s) stöds inte"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Alla dokument"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Alla filer"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Misslyckades med att skapa en temporärfil: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Misslyckades med att skapa en temporär katalog: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Filen är inte en giltig .desktop-fil."
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Okänd Version \"%s\" i skrivbordsfil"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Startar %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Programmet accepterar inte dokument via kommandoraden"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Okänd startflagga: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Kan inte skicka dokument-URI:er till ett \"Type=Link\"-skrivbordsobjekt"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Inte ett startbart objekt"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Inaktivera anslutning till sessionshanterare"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Ange fil som innehåller sparad konfiguration"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+#: ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FIL"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Ange sessionshanterings-id"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Flaggor för sessionshantering:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Visa flaggor för sessionshantering"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "Visa \"_%s\""
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_Flytta på verktygsrad"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "Flytta markerat objekt på verktygsraden"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_Ta bort från verktygsrad"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "Ta bort markerat objekt från verktygsraden"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_Ta bort verktygsrad"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "Ta bort markerad verktygsrad"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "Avskiljare"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48
+#: ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "Bästa anpassning"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Anpassa till sidbredd"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1
+#: ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149
+#: ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "Dokumentvisare"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Visa dokument med flera sidor"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "Åsidosätt dokumentbegränsningar"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Åsidosätt dokumentbegränsningar, som till exempel begränsning i att kopiera eller att skriva ut."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "Ta bort temporära filen"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "Skriv ut inställningsfil"
+
+#: ../previewer/ev-previewer.c:144
+#: ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "Dokumentgranskare för MATE"
+
+#: ../previewer/ev-previewer-window.c:91
+#: ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "Misslyckades med att skriva ut dokument"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Den valda skrivaren \"%s\" kunde inte hittas"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284
+#: ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "_Föregående sida"
+
+#: ../previewer/ev-previewer-window.c:285
+#: ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "Gå till föregående sida"
+
+#: ../previewer/ev-previewer-window.c:287
+#: ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "_Nästa sida"
+
+#: ../previewer/ev-previewer-window.c:288
+#: ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "Gå till nästa sida"
+
+#: ../previewer/ev-previewer-window.c:291
+#: ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "Förstora dokumentet"
+
+#: ../previewer/ev-previewer-window.c:294
+#: ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "Krymp dokumentet"
+
+#: ../previewer/ev-previewer-window.c:297
+#: ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "Skriv ut"
+
+#: ../previewer/ev-previewer-window.c:298
+#: ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "Skriv ut detta dokument"
+
+#: ../previewer/ev-previewer-window.c:342
+#: ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "_Bästa anpassning"
+
+#: ../previewer/ev-previewer-window.c:343
+#: ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "Gör så att det aktuella dokumentet fyller fönstret"
+
+#: ../previewer/ev-previewer-window.c:345
+#: ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "Anpassa till sidb_redd"
+
+#: ../previewer/ev-previewer-window.c:346
+#: ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "Gör så att det aktuella dokumentet fyller bredden på fönstret"
+
+#: ../previewer/ev-previewer-window.c:558
+#: ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "Sida"
+
+#: ../previewer/ev-previewer-window.c:559
+#: ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "Välj sida"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Dokument"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Titel:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Plats:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Ämne:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "Författare:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Nyckelord:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Producent:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Skapare:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Skapad:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Ändrad:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Antal sidor:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Optimerad:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Format:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Säkerhet:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Pappersstorlek:"
+
+#: ../properties/ev-properties-view.c:188
+#: ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Ingen"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f tum"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Stående (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Liggande (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d av %d)"
+
+# Borde buggrapporteras.
+#
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "av %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76
+#: ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Läser in..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "Förbereder utskrift..."
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "Färdigställer..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Skriver ut sida %d av %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "Utskrift stöds inte på denna skrivare."
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "Ogiltigt sidval"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "Varning"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "Ditt val av utskriftsintervall inkluderar inte några sidor"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "Sidskalning:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "Förminska till utskrivningsbart område"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "Anpassa till utskrivningsbart område"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as required to fit the printable area of the printer page.\n"
+msgstr ""
+"Skala dokumentsidor för att passa den valda skrivarsidan. Välj från en av följande:\n"
+"\n"
+"• \"Ingen\": Ingen sidskalning genomförs.\n"
+"\n"
+"• \"Förminska till utskrivningsbart område\": Dokumentsidor större än det utskrivningsbara området minskas för att passa det utskrivningsbara området för skrivarsidan.\n"
+"\n"
+"• \"Anpassa till utskrivningsbart område\": Dokumentsidor förstoras eller förminskas enligt vad som krävs för att passa det utskrivningsbara området för skrivarsidan.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "Automatisk rotering och centrering"
+
+#: ../libview/ev-print-operation.c:1885
+msgid "Rotate printer page orientation of each page to match orientation of each document page. Document pages will be centered within the printer page."
+msgstr "Rotera skrivarens sidorientering för varje sida för att matcha orienteringen för varje dokumentsida. Dokumentsidor kommer att centreras inom skrivarsidan."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "Välj sidstorlek med sidstorlek för dokument"
+
+#: ../libview/ev-print-operation.c:1892
+msgid "When enabled, each page will be printed on the same size paper as the document page."
+msgstr "När aktiverad kommer varje sida att skrivas ut med samma pappersstorlek som dokumentsidan."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "Sidhantering"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Misslyckades med att skriva ut sida %d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "Rulla upp"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "Rulla ned"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "Rulla vy upp"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "Rulla vy ned"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "Dokumentvy"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "Gå till sidan:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "Slut på presentationen. Klicka för att avsluta."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "Gå till första sidan"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "Gå till föregående sida"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "Gå till nästa sida"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "Gå till sista sidan"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "Gå till sidan"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "Sök"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "Gå till sida %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Gå till %s i filen \"%s\""
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Gå till filen \"%s\""
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "Starta %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Sök:"
+
+#: ../shell/eggfindbar.c:329
+#: ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "Sök _föregående"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Sök föregående förekomst av söksträngen"
+
+#: ../shell/eggfindbar.c:337
+#: ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "Sök _nästa"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Sök nästa förekomst av söksträngen"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "_Gör skillnad på gemener/VERSALER"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Växla skiftlägeskänslig sökning"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "Ikon:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "Notering"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "Kommentar"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "Nyckel"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "Hjälp"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "Nytt stycke"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "Stycke"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "Infoga"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "Kors"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "Cirkel"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "Okänd"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "Kommentarsegenskaper"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "Färg:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "Stil:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Transparent"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Opak"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "Initialt fönstertillstånd:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "Öppna"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "Stäng"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "Kör i presentationsläge"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Lösenord för dokumentet %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Konverterar %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d av %d dokument konverterade"
+
+#: ../shell/ev-convert-metadata.c:165
+#: ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "Konverterar metadata"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid "The metadata format used by Evince has changed, and hence it needs to be migrated. If the migration is cancelled the metadata storage will not work."
+msgstr "Metadataformatet som används av Evince har ändrats och därför behöver det migreras. Om migreringen avbröts så kommer metadatalagringen inte att fungera."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Öppna ett tidigare använt dokument"
+
+#: ../shell/ev-password-view.c:144
+msgid "This document is locked and can only be read by entering the correct password."
+msgstr "Detta dokument är låst och kan endast läsas om rätt lösenord anges."
+
+#: ../shell/ev-password-view.c:153
+#: ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_Lås upp dokument"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "Ange lösenord"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "Lösenord krävs"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "Dokumentet \"%s\" är låst och kräver ett lösenord innan det kan öppnas."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_Lösenord:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "Glöm lösenordet _omedelbart"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "Kom ihåg lösenordet tills du _loggar ut"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "Kom ihåg för _alltid"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "Egenskaper"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "Allmänt"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "Typsnitt"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "Dokumentlicens"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Typsnitt"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Samlar in typsnittsinformation... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "Användningsvillkor"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "Textlicens"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "Ytterligare information"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "Lista"
+
+#: ../shell/ev-sidebar-annotations.c:203
+#: ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "Kommentarer"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "Text"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "Lägg till textkommentar"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "Lägg till"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "Dokumentet innehåller inga kommentarer"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "Sida %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Bilagor"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Lager"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Skriv ut..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Index"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "Miniatyrbilder"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "Sida %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "Sida %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "Dokumentet innehåller inga sidor"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "Dokumentet innehåller endast tomma sidor"
+
+#: ../shell/ev-window.c:1627
+#: ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "Kan inte öppna dokument"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Läser in dokument från \"%s\""
+
+#: ../shell/ev-window.c:1906
+#: ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Hämtar dokument (%d %%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "Misslyckades med att läsa fjärrfil."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Läser om dokumentet från %s"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "Misslyckades med att läsa om dokumentet."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "Öppna dokument"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "Sparar dokument till %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Sparar bilaga till %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "Sparar bild till %s"
+
+#: ../shell/ev-window.c:2664
+#: ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Filen kunde inte sparas som \"%s\"."
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Skickar upp dokument (%d %%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Skickar upp bilaga (%d %%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Skickar upp bild (%d %%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "Spara en kopia"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d väntande jobb i kö"
+msgstr[1] "%d väntande jobb i kö"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Skriver ut jobbet \"%s\""
+
+#: ../shell/ev-window.c:3402
+msgid "Document contains form fields that have been filled out. If you don't save a copy, changes will be permanently lost."
+msgstr "Dokumentet innehåller formulärfält som har fyllts i. Om du inte sparar en kopia så kommer ändringarna att gå förlorade."
+
+#: ../shell/ev-window.c:3406
+msgid "Document contains new or modified annotations. If you don't save a copy, changes will be permanently lost."
+msgstr "Dokumentet innehåller nya eller ändrade kommentarer. Om du inte sparar en kopia så kommer ändringarna att gå förlorade."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "Spara en kopia av dokumentet \"%s\" före stängning?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "Stäng _utan att spara"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "Spara en _kopia"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Vänta med att stänga tills utskriftsjobbet \"%s\" är färdigt?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "Det finns %d utskriftsjobb aktiva. Vänta med att stänga tills utskriften är färdig?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Om du stänger fönstret så kommer väntande utskriftsjobb inte att skrivas ut."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "Avbryt _utskrift och stäng"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "Stäng _efter utskrift"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "Verktygsradsredigerare"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "Det uppstod ett fel vid visning av hjälp"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Dokumentvisare\n"
+"Använder %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid "Evince 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.\n"
+msgstr "Evince är fri programvara. Du kan distribuera det och/eller modifiera det under villkoren i GNU General Public License, publicerad av Free Software Foundation, antingen version 2 eller (om du så vill) någon senare version.\n"
+
+#: ../shell/ev-window.c:4567
+msgid "Evince 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.\n"
+msgstr "Evince distribueras i hopp om att det ska vara användbart, men UTAN NÅGON SOM HELST GARANTI, även utan underförstådd garanti om SÄLJBARHET eller LÄMPLIGHET FÖR NÅGOT SPECIELLT ÄNDAMÅL. Se GNU General Public License för ytterligare information.\n"
+
+#: ../shell/ev-window.c:4571
+msgid "You should have received a copy of the GNU General Public License along with Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr "Du bör ha fått en kopia av GNU General Public License tillsammans med Evince. Om inte, skriv till Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Författarna av Evince"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"Daniel Nylander <[email protected]>\n"
+"Christian Rose\n"
+"\n"
+"Skicka synpunkter på översättningen till\n"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d hittades på denna sida"
+msgstr[1] "%d hittades på denna sida"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "Hittades inte"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% återstår att söka igenom"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "_Arkiv"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "_Redigera"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "_Visa"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "_Gå"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "_Hjälp"
+
+#. File menu
+#: ../shell/ev-window.c:5402
+#: ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "_Öppna..."
+
+#: ../shell/ev-window.c:5403
+#: ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "Öppna ett befintligt dokument"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "Öppna _en kopia"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "Öppna en kopia av aktuellt dokument i ett nytt fönster"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "S_para en kopia..."
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "Spara en kopia av aktuellt dokument"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "Skriv _ut..."
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "_Egenskaper"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "Markera _allt"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "Sö_k..."
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "Sök ett ord eller en fras i dokumentet"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "_Verktygsrad"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "Rotera _vänster"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "Rotera _höger"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "Spara aktuella inställningar som s_tandard"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "_Läs om"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "Läs om dokumentet"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "Auto_rulla"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "F_örsta sidan"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "Gå till första sidan"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "_Sista sidan"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "Gå till sista sidan"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "_Innehåll"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "_Om"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "Lämna helskärmsläget"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "Lämna helskärmsläget"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "Starta presentation"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "Starta en presentation"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "_Verktygsrad"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "Visa eller dölj verktygsraden"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "Sido_panel"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "Visa eller dölj sidopanelen"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "_Sammanhängande"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "Visa hela dokumentet"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "_Dubbel"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "Visa två sidor på en gång"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "_Helskärm"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "Expandera fönstret så att det fyller skärmen"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "Pres_entation"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "Kör dokumentet som en presentation"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "_Inverterade färger"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "Visa sidinnehåll med inverterade färger"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "_Öppna länk"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "_Gå till"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "Öppna i nytt _fönster"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "_Kopiera länkadress"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "_Spara bild som..."
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "Kopiera _bild"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "Egenskaper för kommentar…"
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "_Öppna bilaga"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "Spara bilaga so_m..."
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "Zooma"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "Justera zoomnivån"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "Navigering"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "Bakåt"
+
+# Denna måste testas
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "Flytta mellan besökta sidor"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "Föregående"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "Nästa"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "Zooma in"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "Zooma ut"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "Anpassa till bredd"
+
+#: ../shell/ev-window.c:5890
+#: ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "Kunde inte starta externt program."
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "Kunde inte öppna extern länk"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "Kunde inte hitta lämpligt format att spara bilden i"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "Bilden kunde inte sparas."
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "Spara bild"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "Kunde inte öppna bilagan"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "Bilagan kunde inte sparas."
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "Spara bilaga"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — Lösenord krävs"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "Efter filändelse"
+
+#: ../shell/main.c:69
+#: ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "Dokumentvisare för MATE"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "Sidetiketten i dokumentet att visa."
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "SIDA"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "Sidnumret i dokumentet att visa."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "ANTAL"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Kör evince i helskärmsläge"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Kör evince i presentationsläge"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Kör evince som en förhandsgranskare"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Ordet eller frasen att leta efter i dokumentet"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "STRÄNG"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FIL…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid "Boolean options available: true enables thumbnailing and false disables the creation of new thumbnails"
+msgstr "Booleska alternativ tillgängliga: true aktiverar skapandet av miniatyrbilder och false inaktiverar skapandet av nya miniatyrbilder"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Aktivera miniatyrbilder för PDF-dokument."
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Miniatyrbildskommando för PDF-dokument"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid "Valid command plus arguments for the PDF Document thumbnailer. See Caja thumbnailer documentation for more information."
+msgstr "Giltigt kommando plus argument för att skapa miniatyrbilder för PDF-dokument. Se Caja-dokumentationen för miniatyrbildsskapare för mer information."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "Sidinställnin_gar..."
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "Konfigurera sidinställningarna för utskrift"
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU-dokumentet har felaktigt format"
+#~ msgid "Print..."
+#~ msgstr "Skriv ut..."
+#~ msgid "_Save a Copy..."
+#~ msgstr "_Spara en kopia..."
+#~ msgid "_Print..."
+#~ msgstr "Skriv _ut..."
+#~ msgid "_Find..."
+#~ msgstr "_Sök..."
+#~ msgid "Search string"
+#~ msgstr "Söksträng"
+#~ msgid "The name of the string to be found"
+#~ msgstr "Namnet på strängen som ska hittas"
+#~ msgid "Case sensitive"
+#~ msgstr "Gör skillnad på gemener/VERSALER"
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "SANT för en skiftlägeskänslig sökning"
+#~ msgid "Highlight color"
+#~ msgstr "Färgmarkeringsfärg"
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "Färg för färgmarkering av alla träffar"
+#~ msgid "Current color"
+#~ msgstr "Aktuell färg"
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "Färg för färgmarkering av den aktuella träffen"
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "Misslyckades med att skapa filen \"%s\": %s"
+#~ msgid "Recover previous documents?"
+#~ msgstr "Återskapa tidigare dokument?"
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Evince verkar ha avslutats oväntat vid senaste körningen. Du kan "
+#~ "återställa de öppnade dokumenten."
+#~ msgid "_Don't Recover"
+#~ msgstr "Återskapa _inte"
+#~ msgid "_Recover"
+#~ msgstr "Åt_erskapa"
+#~ msgid "Crash Recovery"
+#~ msgstr "Kraschåterställning"
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "Kunde inte skapa symboliska länken \"%s\": "
+#~ msgid "Cannot open a copy."
+#~ msgstr "Kan inte öppna en kopia."
+#~ msgid "Loading document from %s"
+#~ msgstr "Läser in dokument från %s"
+#~ msgid "Co_nnect"
+#~ msgstr "Ansl_ut"
+#~ msgid "Connect _anonymously"
+#~ msgstr "Anslut a_nonymt"
+#~ msgid "Connect as u_ser:"
+#~ msgstr "Anslut som använda_re:"
+#~ msgid "_Username:"
+#~ msgstr "_Användarnamn:"
+#~ msgid "_Domain:"
+#~ msgstr "_Domän:"
+#~ msgid "_Forget password immediately"
+#~ msgstr "_Glöm lösenordet omedelbart"
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_Kom ihåg lösenordet tills du loggar ut"
+#~ msgid "_Remember forever"
+#~ msgstr "_Kom ihåg för alltid"
+#~ msgid "File not available"
+#~ msgstr "Filen är inte tillgänglig"
+
diff --git a/po/ta.po b/po/ta.po
new file mode 100644
index 00000000..9a3ff278
--- /dev/null
+++ b/po/ta.po
@@ -0,0 +1,1770 @@
+# translation of evince.master.ta.po to Tamil
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# Felix <[email protected]>, 2006.
+# Dr.T.Vasudevan <[email protected]>, 2007, 2008, 2009, 2010.
+# I. Felix <[email protected]>, 2009.
+# Dr.T.vasudevan <[email protected]>, 2009.
+# Dr.T.Vaasudevan <[email protected]>, 2009.
+# Dr,T,Vasudevan <[email protected]>, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince.master.ta\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-08-03 17:47+0530\n"
+"PO-Revision-Date: 2010-08-04 13:37+0530\n"
+"Last-Translator: Dr.T.Vasudevan <[email protected]>\n"
+"Language-Team: Tamil <<[email protected]>>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\\n"
+"\n"
+"\n"
+"X-Generator: Lokalize 1.0\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid "Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "காமிக் புத்தகத்தை பிரிக்க “%s” கட்டளையை துவக்குவதில் பிழை : %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "காமிக் புத்தகத்தை பிரிக்க “%s” கட்டளை தோல்வியுற்றது."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr " “%s” கட்டளை சரியாக முடியவில்லை"
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "ஒரு காமிக் புத்தக MIME வகை இல்லை: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "இந்த வகை காமிக் புத்தகத்தை பிரிக்க சரியான கட்டளையை காண முடியவில்லை"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "தெரியாத MIME வகை"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "கோப்பு சிதைந்தது"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "பெட்டகத்தில் கோப்புகள் இல்லை"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "%s காப்பகத்தில் ஒரு உருவும் இல்லை"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "“%s” ஐ நீக்குவதில் பிழை."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "பிழை %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "காமிக் புத்தகங்கள்"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu ஆவணம் தவறான முறையை கொண்டுள்ளது"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr "இந்த ஆவணம் பல கோப்புக்களால் உருவானது. அதில் ஒன்றோ பலவோ கோப்புகளை அணுக இயலவில்லை."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Djvu ஆவணங்கள்"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI ஆவணம் தவறான முறையை கொண்டுள்ளது"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI ஆவணங்கள்"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "இந்த பணி பொது உரிமத்திலுள்ளது"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "ஆம்"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "இல்லை"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "வகை 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "வகை 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "வகை 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "மெய்வகை"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "வகை 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "வகை 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "மெய்வகை (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "தெரியாத எழுத்துரு வகை"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "பெயர் இல்லை"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "உட்பொதியப்பட்ட துணை கணம்"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "உட்பொதியப்பட்டது"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "உட்பொதியப்படவில்லை"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF ஆவணங்கள்"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "செல்லுபடியாகாத ஆவணம்"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "பட வில்லையை பொறிக்கவும்"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "பிழை இல்லை"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "நினைவகம் போதாது"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "ஜிப் கையொப்பத்தை காணவில்லை"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "செல்லுபடியாகாத ஜிப் கோப்பு"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "பல் கோப்பு ஜிப் க்கு ஆதரவு இல்லை"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "கோப்பினை திறக்க இயலவில்லை"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "கோப்பிலிருந்து தரவை படிக்க முடியவில்லை."
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "கோப்பை ஜிப் காப்பகத்தில் கண்டு பிடிக்க முடியவில்லை"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "தெரியாத பிழை"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "ஆவணத்தை ஏற்ற முடியவில்லை “%s”"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "ஆவணத்தை சேமிக்க முடியவில்லை “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "பின்னுரை ஆவணங்கள்"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "இணைப்பினை சேமிக்க முடியவில்லை “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "இணைப்பினை திறக்க முடியவில்லை “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "இணைப்பினை திறக்க முடியவில்லை “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "கோப்பு வகை %s (%s) க்கு ஆதரவு இல்லை"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "அனைத்து ஆவணங்கள்"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "அனைத்து கோப்புகள்"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "தற்காலிக கோப்பினை உருவாக்குவதில் தோற்றது: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "தற்காலிக அடைவை உருவாக்குவதில் தோற்றது: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "கோப்பு செல்லுபடியாகும் .desktop கோப்பு அல்ல"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "செல்லுபடியாகும் மேல்மேசை கோப்பு பதிப்பு '%s' அல்ல"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s ஐ துவக்குகிறது"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "பயன்பாடு கட்டளை வரியில் ஆவணங்களை ஒப்புக்கொள்ளாது"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "இனம் காணாத துவக்க தேர்வு: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "'Type=Link' மேல்மேசை உள்ளீடுக்கு ஆவண யூஆர்ஐ ஐ கொடுக்க இயலாது"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "துவக்க முடியாத உருப்படி"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "அமர்வு மேலாள்ருக்கு இணைப்பை செயல் நீக்கு"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "சேமித்த வடிவமைப்பு கூடிய கோப்பை குறிப்பிடுக"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "அமர்வு மேலாண்மை அடையாளத்தை குறிப்பிடுக"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ஐடி (ID)"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "அமர்வு மேலாண்மை தேர்வுகள்:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "அமர்வு மேலாண்மை தேர்வுகளை காட்டு"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s”காட்டு"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "கருவிப்பட்டியை நகர்த்து(_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "கருவிப்பட்டையில் தேர்ந்தெடுக்கப்பட்ட உருப்படியை நகர்த்து"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "கருவிப்பட்டியிலிருந்து நீக்கு(_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "கருவிப்பட்டையிலிருந்து தேர்ந்தெடுக்கப்பட்டதை நீக்கு"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "கருவிப்பட்டியை அழி (_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "தேர்ந்தெடுக்கப்பட்ட கருவிப்பட்டியை நீக்கு"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "பிரிப்பி"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5735
+msgid "Best Fit"
+msgstr "சரியாக பொருந்துதல்"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "பக்க அகலத்தை பொருத்து"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "ஆவண காட்டி"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "பல பக்க ஆவணங்களை பார்வையிடு"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "மேலெழுதும் ஆவண தடைகள்"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "மேலெழுதும் ஆவண தடைகள், நகலெடுக்க அல்லது அச்சிடுவதற்கான தடை போல."
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "தற்காலிக கோப்பை நீக்கு"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "அச்சு அமைப்பு கோப்பு"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "க்னோம் ஆவண முன் பார்வை கருவி"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "ஆவணத்தை அச்சிட முடியவில்லை"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "தேர்ந்தெடுக்கப்பட்ட அச்சு இயந்திரம் '%s' ஐ கண்டு பிடிக்க முடியவில்லை"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5450
+msgid "_Previous Page"
+msgstr "முந்தைய பக்கம் (_P)"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5451
+msgid "Go to the previous page"
+msgstr "முந்தைய பக்கத்திற்கு செல்லவும்"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5453
+msgid "_Next Page"
+msgstr "அடுத்த பக்கம் (_N)"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5454
+msgid "Go to the next page"
+msgstr "அடுத்த பக்கத்திற்கு செல்லவும்"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5437
+msgid "Enlarge the document"
+msgstr "ஆவணத்தை பெரிதாக்கவும்"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5440
+msgid "Shrink the document"
+msgstr "ஆவணத்தை சுருக்கவும்"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "அச்சிடு"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5406
+msgid "Print this document"
+msgstr "இந்த ஆவணத்தை அச்சிடவும்"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5552
+msgid "_Best Fit"
+msgstr "சரியான பொருந்து (_B)"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5553
+msgid "Make the current document fill the window"
+msgstr "நடப்பு ஆவணத்தை சாளர முழுமைக்கும் நிரப்பவும்"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5555
+msgid "Fit Page _Width"
+msgstr "பக்க அகலத்தை பொருத்து (_W)"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5556
+msgid "Make the current document fill the window width"
+msgstr "நடப்பு ஆவணத்தை சாளர அகலத்திற்கு நிரப்பவும்"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5657
+msgid "Page"
+msgstr "பக்கம்"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5658
+msgid "Select Page"
+msgstr "பக்கத்தை தேரந்தெடு"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "ஆவணம்"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "தலைப்பு:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "இடம்"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "பொருள்:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "ஆசிரியர்:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "முக்கிய சொற்கள்:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "தயாரிப்பாளர்:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "உருவாக்கியவர்:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "உருவாக்கப்பட்டது:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "மாற்றப்பட்டது:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "பக்கங்களின் எண்ணிக்கை:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "ஒருங்கிணைக்கப்பட்டது:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "வடிவம்:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "பாதுகாப்பு:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "காகித அளவு:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "இல்லை"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "முன்னிருப்பு:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f மிமி"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f இன்சு"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, நீளவாக்கு (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, அகலவாக்கு (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d of %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "of %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "ஏற்றுகிறது"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "அச்சடிக்க தயாராகிறது"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "முடிக்கிறது."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "பக்கம் %d இல் %dஐ அச்சிடுகிறது"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "இந்த அச்சடிப்பியில் அச்சிடுவது துணைபுரியவில்லை"
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "செல்லுபடியாகாத பக்க தேர்வு"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "எச்சரிக்கை"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "உங்கள் அச்சு வீச்சு தேர்வு எந்த பக்கங்களையும் உள்ளடக்கவில்லை"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "பக்க மறுஅளவீடு"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "அச்சிடக்கூடிய பரப்புக்கு சுருக்கு"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "அச்சிடக்கூடிய பரப்புக்கு பொருத்துக"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"தேர்ந்தெடுத்த அச்சுப்பொறிக்கு ஆவண பக்கங்களை பொருத்த மறு அளவீடு செய்க. கீழ் கண்டவற்றில் "
+"ஏதேனும் ஒன்றை தேர்வு செய்க:\n"
+"\n"
+"• \"ஏதுமில்லை\": மறு அளவீடு இல்லை.\n"
+"\n"
+"• \"அச்சுப்பரப்புக்கு சுருக்கு\": அச்சிடக்கூடிய அளவுக்கு அதிகமாக ஆவண அளவு இருப்பின் "
+"அச்சுப்பொறியின் அச்சிடக்கூடிய பக்க அளவுக்கு மறு அளவு செய்யப்படும்..\n"
+"\n"
+"• \"அச்சிடக்கூடிய பரப்புக்கு பொருத்துக\": அச்சுப்பொறியின் அச்சிடக்கூடிய பக்க அளவுக்கு "
+"ஆவண பக்கம் சுருக்கவோ நீட்டவோ செய்யப்படும்.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "தானியங்கி சுழற்சி மற்றும் மையப்படுத்தல்"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"ஒவ்வொரு ஆவண பக்கத்தின் திசையையும் ஒத்திசைய அச்சுப்பொறி பக்க திஅசை பொருத்தத்தை மாற்றுக. "
+"ஆவண பக்கங்கள் அச்சுப்பொறி பக்கத்திற்கு மையப்படுத்தப்படும்."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "ஆவண பக்க அளவை பயன்படுத்தி பக்க அளவை தேர்வு செய்க."
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr "இயலுமை செய்யின் ஒவ்வொரு பக்கமும் ஆவண பக்கத்தின் அதே அளவில் அச்சிடப்படும்."
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "பக்க கையாளுமை"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "பக்கத்தை அச்சிட முடியவில்லை%d: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "மேலே நகர்த்து"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "கீழே நகர்த்து"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "பார்வையை மேலே நகர்த்து"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "பார்வையை கீழே நகர்த்து"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "ஆவணப்பார்வை"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "பக்கத்திற்கு செல்:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "முன் வைப்பு முடிந்தது. வெளியேற சொடுக்கவும்"
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "முதல் பக்கத்திற்கு செல்லவும்"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "முந்தைய பக்கத்திற்கு செல்லவும்"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "அடுத்த பக்கத்திற்கு செல்லவும்"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "கடைசி பக்கத்திற்கு செல்லவும்"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "பக்கத்திற்கு செல்"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "தேடு"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "பக்கத்திற்கு செல் %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "“%s” கோப்பில் %s க்கு செல்லவும்"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "“%s” கோப்பிற்கு செல்"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "%sஐ செயல்படுத்து"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "தேடுக:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5423
+msgid "Find Pre_vious"
+msgstr "முந்தையதை தேடு (_v)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "வார்த்தை அல்லது சொல் தொடரின் முந்தைய தோன்றலை தேடுக"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5421
+msgid "Find Ne_xt"
+msgstr "அடுத்ததை தேடு (_x)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "சொல் அல்லது சொற்றொடரின் அடுத்த நிகழ்வை தேடவும்"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "எழுத்துணர்வு(_a)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "எழுத்துணர்வு தேடுதலை மாற்றுக"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "சின்னம்:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "குறிப்பு"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "விமர்சனம் "
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "விசை"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "உதவி"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "புதிய பத்தி"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "பத்தி"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "சொருகு"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "பெருக்கல் குறியிடு"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "வட்டம்"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "தெரியாத"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "குறிப்பு பண்புகள்"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "நிறம்:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "பாணி:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "Transparent"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "Opaque"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "துவக்க சாளர நிலை:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "திற"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "மூடு"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "காட்சி அளிப்பு பாங்கில் இயங்குகிறது"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "ஆவணத்தின் கடவுச்சொல் %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "%s ஐ மாற்றுகிறது"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d ஆவது ஆவணம் %d ஆவணங்களில் மாற்றப்பட்டது"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "மெடாதரவை ஐ மாற்றுகிறது"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"எவின்ஸ் பயன்படுத்தும் மெடா தரவு ஒழுங்கு மாறிவிட்டது. ஆகவே அதை வேறிடம் கொண்டு செல்ல "
+"வேண்டும். இதை மறுத்தால் மெடாதரவு சேமிப்பு நடவாது."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "சமீபத்தில் பயன் படுத்திய ஆவணத்தை திறக்கவும்"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"இந்த ஆவணம் பூட்டப்பட்டுள்ளது மற்றும் சரியான கடவுச்சொல்லை உள்ளிட்டால் தான் படிக்க முடியும்."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "ஆவணத்தை பூட்டு நீக்கு (_U)"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "கடவுச்சொல்லை உள்ளிடவும்"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "கடவுச்சொல் தேவைப்படுகிறது"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "ஆவணம் “%s” பூட்டப்பட்டுள்ளது மற்றும் அதனை திறப்பதற்கு முன் கடவுச்சொல் தேவைப்படுகிறது."
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "கடவுச்சொல்: (_P) "
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "உடனே கடவுச்சொல் மறந்தது (_i)"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "வெளியேறும் வரை கடவுச்சொல்லை நினைவு வை (_l)"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "எப்போதும் நினைவு வை (_f)"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "பண்புகள்"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "பொது"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "எழுத்துருக்கள்"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "ஆவண உரிமம்"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "எழுத்துரு"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "எழுத்துரு விவரங்களை சேகரிக்கிறது %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "பயன்பாடு விதிகள்"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "உரை உரிமம்"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "மேலும் விவரங்கள்"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "பட்டியல்"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "வியாக்கியானம்"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "உரை"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "உரை வியாக்கியானத்தை சேர் "
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "சேர்க்க"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "ஆவணத்தில் வியாக்கியானம் ஏதும் இல்லை "
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "பக்கம் %d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "இணைப்புகள்"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "அடுக்குகள்"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "அச்சிடு"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "அகரவரிசை"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "சிறுபடங்கள்"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "பக்கம் %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "பக்கம் %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "ஆவணத்தில் பக்கங்கள் ஏதும் இல்லை "
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "ஆவணத்தில் உள்ளது வெற்று பக்கங்களே"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "ஆவணத்தை திறக்க முடியவில்லை"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "“%s” இலிருந்து ஆவணத்தை ஏற்றுகிறது"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "ஆவணத்தை பதிவிறக்குகிறது (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "தொலை கோப்பை ஏற்ற முடியவில்லை."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "%sஇலிருந்து ஆவணத்தை மீண்டும் ஏற்றுகிறது"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "ஆவணத்தை மீளேற்ற முடியவில்லை."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "ஆவணத்தை திற"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "%sக்கு ஆவணத்தை சேமிக்கிறது"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "%sக்கு இணைப்பை சேமிக்கிறது"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "%sக்கு ஆவணத்தை சேமிக்கிறது"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "“%s” ஆக கோப்பினை சேமிக்க முடியவில்லை."
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "ஆவணத்தை ஏற்றுகிறது (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "இணைப்பை பதிவேற்றுகிறது (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "படத்தை பதிவேற்றுகிறது (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "நகலாக சேமி"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d மீதமுள்ள பணி வரிசையில் உள்ளது"
+msgstr[1] "%d மீதமுள்ள பணிகள் வரிசையில் உள்ளன"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "அச்சிடும் பணி “%s”"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr ""
+"ஆவணத்தில் நிரப்பப்பட்ட படிவபுலங்கள் உள்ளன. நீங்கள் ஒரு பிரதியை சேமிக்காவிட்டால் மாற்றங்கள் "
+"நிரந்தரமாக இழக்கப்படும்."
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr ""
+"ஆவணத்தில் புதிய அல்லது மாற்றப்பட்ட வியாக்கியானங்கள் உள்ளன. நீங்கள் ஒரு பிரதியை "
+"சேமிக்காவிட்டால் மாற்றங்கள் நிரந்தரமாக இழக்கப்படும்."
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "“%s” ஆவணத்தின் ஒரு நகலை சேமிக்கவா?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "சேமிக்காமல் மூடு (_w)"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "_C ஒரு நகல் சேமி"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "அச்சு பணி “%s” முடியும் வரை காத்திருக்க வேண்டுமா?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "%d அச்சு பணிகள் செயலிலுள்ளது. அச்சிடும் வரை காத்திருக்கவும்?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "சாளரத்தை மூடினால், மீதமுள்ள அச்சு பணிகள் அச்சிடப்படாது."
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "அச்சிடுதலை ரத்து செய்து மூடுகிறது (_p)"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "அச்சிட்ட பின் மூடுகிறது (_a)"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "கருவிப்பட்டி தொகுப்பி"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "உதவியை காட்டுவதில் பிழை"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"ஆவண காட்டி.\n"
+" %s ஐ பயன்படுத்துகிறது (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"இவின்ஸ் ஒரு இலவச மென்பொருளாகும் நீங்கள் இதனை வேறு நபருக்கு கொடுக்கலாம்மற்றும் Free "
+"Software Foundation ஆல் வெளியிடப்பட்ட GNU General Public License ன்விதிமுறையின் "
+"அடிப்படையில் அங்கீகாரத்தின் பதிப்பு 2 அல்லது(உங்கள் விருப்பப்படி) அதற்கடுத்த பதிப்புகளில் "
+"மாற்றலாம்.\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"இவின்ஸ், பயனுள்ளதாக இருக்கும் என்ற நம்பிக்கையில் வெளியிடப்பட்டுள்ளதுஆனால் எந்த உத்தரவாதமும் "
+"கிடையாது; குறிப்பிட்ட காரணங்களுக்காக வணிகஉத்தரவாதம் கூட செயல்படுத்தப்படவில்லை. மேலும் "
+"விவரங்களுக்குGNU General Public License ஐ பார்க்கவும்.\n"
+
+#: ../shell/ev-window.c:4571
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"நீங்கள் GNU General Public Licenseன் ஒரு நகலை இவின்ஸுடன் பெற்றிருக்க வேண்டும். அவ்வாறு "
+"பெறாவிட்டால், Free Software Foundation, Inc.,51 Franklin "
+"Street, Fifth Floor, Boston, MA 02111-1301 USA என்பதற்கு எழுதவும்\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "இவின்ஸ்"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 The Evince authors"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr "I. Felix <[email protected]> Dr. T. Vasudevan <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4868
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d இந்தப் பக்கத்தில் கண்டுபிடிக்கப்பட்டது"
+msgstr[1] "%d இந்தப் பக்கத்தில் கண்டுபிடிக்கப்பட்டது"
+
+#: ../shell/ev-window.c:4876
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% மீதி தேட வேண்டியவை"
+
+#: ../shell/ev-window.c:5389
+msgid "_File"
+msgstr "கோப்பு (_F)"
+
+#: ../shell/ev-window.c:5390
+msgid "_Edit"
+msgstr "தொகு (_E)"
+
+#: ../shell/ev-window.c:5391
+msgid "_View"
+msgstr "பார்வை (_V)"
+
+#: ../shell/ev-window.c:5392
+msgid "_Go"
+msgstr "செல் (_G)"
+
+#: ../shell/ev-window.c:5393
+msgid "_Help"
+msgstr "உதவி (_H)"
+
+#. File menu
+#: ../shell/ev-window.c:5396 ../shell/ev-window.c:5697
+msgid "_Open…"
+msgstr "(_O) திற"
+
+#: ../shell/ev-window.c:5397 ../shell/ev-window.c:5698
+msgid "Open an existing document"
+msgstr "ஏற்கனவே உள்ள ஆவணத்தை திறக்கவும்"
+
+#: ../shell/ev-window.c:5399
+msgid "Op_en a Copy"
+msgstr "நகலை திறக்கவும்"
+
+#: ../shell/ev-window.c:5400
+msgid "Open a copy of the current document in a new window"
+msgstr "நடப்பு ஆவணத்தின் ஒரு நகலை புதிய சாளரத்தில் திறக்கவும்"
+
+#: ../shell/ev-window.c:5402
+msgid "_Save a Copy…"
+msgstr "ஒரு நகலை சேமி... (_S)"
+
+#: ../shell/ev-window.c:5403
+msgid "Save a copy of the current document"
+msgstr "நடப்பு ஆவணத்தின் ஒரு நகலை சேமிக்கவும்"
+
+#: ../shell/ev-window.c:5405
+msgid "_Print…"
+msgstr "_P அச்சிடு."
+
+#: ../shell/ev-window.c:5408
+msgid "P_roperties"
+msgstr "பண்புகள் (_R)"
+
+#: ../shell/ev-window.c:5416
+msgid "Select _All"
+msgstr "அனைத்தையும் தேர்ந்தெடு (_A)"
+
+#: ../shell/ev-window.c:5418
+msgid "_Find…"
+msgstr "(_F) தேடுக..."
+
+#: ../shell/ev-window.c:5419
+msgid "Find a word or phrase in the document"
+msgstr "ஆவணத்தில் ஒரு சொல் அல்லது சொற்றொடரை தேடுகிறது"
+
+#: ../shell/ev-window.c:5425
+msgid "T_oolbar"
+msgstr "கருவிப்பட்டை (_o)"
+
+#: ../shell/ev-window.c:5427
+msgid "Rotate _Left"
+msgstr "இடப்பக்கம் சுழற்று (_L)"
+
+#: ../shell/ev-window.c:5429
+msgid "Rotate _Right"
+msgstr "வலப்பக்கம் சுழற்று (_R) "
+
+#: ../shell/ev-window.c:5431
+msgid "Save Current Settings as _Default"
+msgstr "_D தற்போதைய அமைப்புகளை முன்னிருப்பாக வைக்கவும்"
+
+#: ../shell/ev-window.c:5442
+msgid "_Reload"
+msgstr "மீண்டும் ஏற்று (_R)"
+
+#: ../shell/ev-window.c:5443
+msgid "Reload the document"
+msgstr "ஆவணத்தை மீண்டும் ஏற்றவும்"
+
+#: ../shell/ev-window.c:5446
+msgid "Auto_scroll"
+msgstr "தானியங்கி உருளல் (_s)"
+
+#: ../shell/ev-window.c:5456
+msgid "_First Page"
+msgstr "முதல் பக்கம் (_F)"
+
+#: ../shell/ev-window.c:5457
+msgid "Go to the first page"
+msgstr "முதல் பக்கத்திற்கு செல்லவும்"
+
+#: ../shell/ev-window.c:5459
+msgid "_Last Page"
+msgstr "கடைசி பக்கம் (_L)"
+
+#: ../shell/ev-window.c:5460
+msgid "Go to the last page"
+msgstr "கடைசி பக்கத்திற்கு செல்லவும்"
+
+#. Help menu
+#: ../shell/ev-window.c:5464
+msgid "_Contents"
+msgstr "உள்ளடக்கங்கள் (_C)"
+
+#: ../shell/ev-window.c:5467
+msgid "_About"
+msgstr "இதனை பற்றி (_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5471
+msgid "Leave Fullscreen"
+msgstr "முழுத்திரையாக விடவும்"
+
+#: ../shell/ev-window.c:5472
+msgid "Leave fullscreen mode"
+msgstr "முழுத்திரை முறையில் விடவும்"
+
+#: ../shell/ev-window.c:5474
+msgid "Start Presentation"
+msgstr "காட்சியை ஆரம்பிக்கவும்"
+
+#: ../shell/ev-window.c:5475
+msgid "Start a presentation"
+msgstr "முன் வைப்பு காட்சியாக துவக்கவும்"
+
+#. View Menu
+#: ../shell/ev-window.c:5534
+msgid "_Toolbar"
+msgstr "கருவிப்பட்டை (_T)"
+
+#: ../shell/ev-window.c:5535
+msgid "Show or hide the toolbar"
+msgstr "கருவிப்பட்டையை காட்டு அல்லது மறை"
+
+#: ../shell/ev-window.c:5537
+msgid "Side _Pane"
+msgstr "பக்க பலகம் (_P)"
+
+#: ../shell/ev-window.c:5538
+msgid "Show or hide the side pane"
+msgstr "பக்க பலகத்தை காட்டு அல்லது மறை"
+
+#: ../shell/ev-window.c:5540
+msgid "_Continuous"
+msgstr "தொடர்ச்சி (_C)"
+
+#: ../shell/ev-window.c:5541
+msgid "Show the entire document"
+msgstr "முழு ஆவணத்தையும் காட்டவும்"
+
+#: ../shell/ev-window.c:5543
+msgid "_Dual"
+msgstr "இரட்டை (_D)"
+
+#: ../shell/ev-window.c:5544
+msgid "Show two pages at once"
+msgstr "ஒரே முறை இரு பக்கத்தையும் காட்டவும்"
+
+#: ../shell/ev-window.c:5546
+msgid "_Fullscreen"
+msgstr "முழுத்திரை (_F)"
+
+#: ../shell/ev-window.c:5547
+msgid "Expand the window to fill the screen"
+msgstr "திரையை நிரப்ப சாளரத்தை நிரப்பவும்"
+
+#: ../shell/ev-window.c:5549
+msgid "Pre_sentation"
+msgstr "(_s) காட்சி முன்வைப்பு"
+
+#: ../shell/ev-window.c:5550
+msgid "Run document as a presentation"
+msgstr "ஆவணத்தை காட்சியாக இயக்கவும்"
+
+#: ../shell/ev-window.c:5558
+msgid "_Inverted Colors"
+msgstr "_I தலைகீழ் மாற்றிய நிறங்கள்"
+
+#: ../shell/ev-window.c:5559
+msgid "Show page contents with the colors inverted"
+msgstr "பக்க உள்ளடகத்தை தலைகீழ் மாற்றிய நிறங்களுடன் காட்டுக"
+
+#. Links
+#: ../shell/ev-window.c:5567
+msgid "_Open Link"
+msgstr "இணைப்பினை திற (_O)"
+
+#: ../shell/ev-window.c:5569
+msgid "_Go To"
+msgstr "செல் (_G)"
+
+#: ../shell/ev-window.c:5571
+msgid "Open in New _Window"
+msgstr "புது _சாளரத்தில் திறக்கவும்"
+
+#: ../shell/ev-window.c:5573
+msgid "_Copy Link Address"
+msgstr "இணைப்பு முகவரியை நகலெடு (_C)"
+
+#: ../shell/ev-window.c:5575
+msgid "_Save Image As…"
+msgstr "(_S) பிம்பத்தை இப்படிச் சேமி"
+
+#: ../shell/ev-window.c:5577
+msgid "Copy _Image"
+msgstr "_ப பிம்பத்தை பிரதி எடுக்கவும்"
+
+#: ../shell/ev-window.c:5579
+msgid "Annotation Properties…"
+msgstr "வியாக்கியான பண்புகள்..."
+
+#: ../shell/ev-window.c:5584
+msgid "_Open Attachment"
+msgstr "_O இணைப்பை திற"
+
+#: ../shell/ev-window.c:5586
+msgid "_Save Attachment As…"
+msgstr "_S இணைப்புகளை இப்படிச் சேமி"
+
+#: ../shell/ev-window.c:5671
+msgid "Zoom"
+msgstr "பெரிதாக்கு"
+
+#: ../shell/ev-window.c:5673
+msgid "Adjust the zoom level"
+msgstr "பெரிதாக்கும் நிலையை மாற்று"
+
+#: ../shell/ev-window.c:5683
+msgid "Navigation"
+msgstr "உலாவல்"
+
+#: ../shell/ev-window.c:5685
+msgid "Back"
+msgstr "பின்"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5688
+msgid "Move across visited pages"
+msgstr "முன்பு சென்ற பக்கங்கள் ஊடாக உலாவுக"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5718
+msgid "Previous"
+msgstr "முந்தைய"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5723
+msgid "Next"
+msgstr "அடுத்து"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5727
+msgid "Zoom In"
+msgstr "சிறிதாக்கு"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5731
+msgid "Zoom Out"
+msgstr "பெரிதாக்கு"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5739
+msgid "Fit Width"
+msgstr "அகலத்தை பொருத்து"
+
+#: ../shell/ev-window.c:5884 ../shell/ev-window.c:5901
+msgid "Unable to launch external application."
+msgstr "புற பயன்பாட்டை திறக்க இயலவில்லை"
+
+#: ../shell/ev-window.c:5958
+msgid "Unable to open external link"
+msgstr "புற இணைப்பினை திறக்க இயலவில்லை"
+
+#: ../shell/ev-window.c:6125
+msgid "Couldn't find appropriate format to save image"
+msgstr "சேமிக்க பொருத்தமான ஒழுங்கை காண முடியவில்லை"
+
+#: ../shell/ev-window.c:6167
+msgid "The image could not be saved."
+msgstr "பிம்பத்தை சேமிக்க இயலவில்லை."
+
+#: ../shell/ev-window.c:6199
+msgid "Save Image"
+msgstr "பிம்பத்தை சேமி"
+
+#: ../shell/ev-window.c:6327
+msgid "Unable to open attachment"
+msgstr "இணைப்பினை திறக்க இயலவில்லை"
+
+#: ../shell/ev-window.c:6380
+msgid "The attachment could not be saved."
+msgstr "இணைப்பினை சேமிக்க இயலவில்லை."
+
+#: ../shell/ev-window.c:6425
+msgid "Save Attachment"
+msgstr "இணைப்புகளை சேமி"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — கடவுச்சொல் தேவை"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "நீட்சியால்"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATE ஆவண காட்டி"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "காட்ட வேன்டிய ஆவணத்தின் குறிப்பு பக்கம்"
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "பக்கம்"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "காட்ட வேன்டிய ஆவணத்தின் பக்க எண்."
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "NUMBER"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "எவின்ஸ் ஐ முழுத்திரை முறையில் இயக்கவும்"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "எவின்ஸ் ஐ முழுத்திரை முன் வைப்பு முறையில் இயக்கவும்"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "எவின்ஸ் ஐ முன்காட்டியாக இயக்கவும்."
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "ஆவணத்தில் தேட ஒரு சொல் அல்லது சொற்றொடர்"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[FILE...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"பூலியன் விருப்பங்கள் உள்ளன: சரி சிறுபடத்தை செயல்படுத்துகிறது மற்றும் தவறு புதிய "
+"சிறுபடங்கள்உருவாக்கத்தை செயல்நீக்குகிறது"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF ஆவணங்களுக்கு சிறுபடத்தை செயல்படுத்துகிறது"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF ஆவணங்களுக்கான சிறுபட கட்டளைகள்"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF ஆவண சிறு படங்களுக்கு சரியான கட்டளை மற்றும் மதிப்புகள் உள்ளன. மேலும் தகவல்களுக்கு "
+"caja சிறுபட ஆவணமாக்கத்தை பார்க்கவும்."
+
+#~ msgid "Page Set_up…"
+#~ msgstr "(_u) பக்க அமைப்பு"
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "அச்சிடுவதற்கான பக்க அமைப்புகளை அமைக்கவும்"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU ஆவணம் தவறான முறையை கொண்டுள்ளது"
+
+#~ msgid "Print..."
+#~ msgstr "அச்சிடு..."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "ஒரு நகலாக சேமி... (_S)"
+
+#~ msgid "_Print..."
+#~ msgstr "அச்சிடு... (_P)"
+
+#~ msgid "_Find..."
+#~ msgstr "தேடு... (_F)"
+
+#~ msgid "Search string"
+#~ msgstr "சரத்தை தேடு"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "சரத்தின் பெயரை காண முடியவில்லை"
+
+#~ msgid "Case sensitive"
+#~ msgstr "எழுத்துணர்வு"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "எழுத்துணர்வு தேடுதல் சரி ஆகும்"
+
+#~ msgid "Highlight color"
+#~ msgstr "முன்னிலைப்படுத்தும் நிறம்"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "அனைத்து ஒப்பீடுகளின் முன்னிலைப்படுத்தப்படும் நிறம்"
+
+#~ msgid "Current color"
+#~ msgstr "நடப்பு நிறம்"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "நடப்பு ஒப்பீட்டின் முன்னிலைப்படுத்தப்படும் நிறம்"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "“%s” ஆவணத்தை உருவாக்க முடியவில்லை:%s"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "முந்தைய ஆவணத்தை மீட்கவா?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "கடைசியாக இயக்கியபோது எவின்ஸ் எதிர்பாராத விதமாக வெளியேறியது போல் உள்ளது. நீங்கள் "
+#~ "திறந்த ஆவணங்களை மீட்க இயலும்."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "_D மீட்காதே"
+
+#~ msgid "_Recover"
+#~ msgstr "_R மீள்"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "சிதைவு மீட்பு"
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "சிம்லின்க் “%s” ஐ உருவாக்க முடியவில்லை "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "ஒரு பிரதியை திறக்க இயலவில்லை"
diff --git a/po/te.po b/po/te.po
new file mode 100644
index 00000000..f3789484
--- /dev/null
+++ b/po/te.po
@@ -0,0 +1,1790 @@
+# translation of te.po to Telugu
+# Telugu translation of evince.
+# Copyright (C) 2007 Swecha Telugu Localisation Team
+# This file is distributed under the same license as the evince package.
+#
+# Bharat Kumar <[email protected]>, 2007.
+# Krishna Babu K <[email protected]>, 2009, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: te\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-07-27 21:01+0000\n"
+"PO-Revision-Date: 2010-07-21 17:50+0530\n"
+"Last-Translator: Krishna Babu K <[email protected]>\n"
+"Language-Team: Telugu <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "ఆదేశము “%s” ఆరంభించుటలో దోషము, కామిక్ పుస్తకంను డికంప్రెస్ చేయుటకు: %s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "కామిక్ పుస్తకం డికంప్రెస్ వద్ద ఆదేశము “%s” విఫలమైంది."
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "ఆదేశము “%s” సాధారణంగా ముగియలేదు."
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "కామిక్ పుస్తకం MIME రకము కాదు: %s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "ఈ రకమైన కామిక్ పుస్తకమును డికంప్రెస్ చేయుటకు సరైన ఆదేశమును కనుగొనలేక పోయింది"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "అపరిచిత MIME రకం"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "దస్త్రము పాడైనది"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "ఆర్చివ్‌నందు యే దస్త్రములులేవు"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "%s సంగ్రహంలో ప్రతిమలు కనబడలేదు"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "“%s” తొలగించుటలో వొక దోషమువుంది."
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "దోషము %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "కామిక్ పుస్తకాలు"
+
+#: ../backend/djvu/djvu-document.c:173
+#, fuzzy
+msgid "DjVu document has incorrect format"
+msgstr "DVI పత్రం సరియైన రూపలావన్యంలో లేదు"
+
+#: ../backend/djvu/djvu-document.c:250
+#, fuzzy
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr "కొన్ని దస్త్రాలచే ఈ పత్రం ఏర్పడినది. అట్టి ఏర్పడిన ఒకటి లేదా కొన్ని దస్త్రాలకు యాక్సిస్ లేదు."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+#, fuzzy
+msgid "DjVu Documents"
+msgstr "Djvu పత్రాలు"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI పత్రం సరియైన రూపలావన్యంలో లేదు"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI పత్రాలు"
+
+#: ../backend/pdf/ev-poppler.cc:521
+msgid "This work is in the Public Domain"
+msgstr ""
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:774
+msgid "Yes"
+msgstr "అవును"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:777
+msgid "No"
+msgstr "కాదు"
+
+#: ../backend/pdf/ev-poppler.cc:905
+msgid "Type 1"
+msgstr "రకం 1"
+
+#: ../backend/pdf/ev-poppler.cc:907
+msgid "Type 1C"
+msgstr "రకం 1C"
+
+#: ../backend/pdf/ev-poppler.cc:909
+msgid "Type 3"
+msgstr "రకం ౩"
+
+#: ../backend/pdf/ev-poppler.cc:911
+msgid "TrueType"
+msgstr "నిజమైన రకం"
+
+#: ../backend/pdf/ev-poppler.cc:913
+msgid "Type 1 (CID)"
+msgstr "రకం 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:915
+msgid "Type 1C (CID)"
+msgstr "రకం 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:917
+msgid "TrueType (CID)"
+msgstr "నిజమైన రకం (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:919
+msgid "Unknown font type"
+msgstr "అపరిచిత అక్షరశైలి"
+
+#: ../backend/pdf/ev-poppler.cc:945
+msgid "No name"
+msgstr "పేరు లేదు"
+
+#: ../backend/pdf/ev-poppler.cc:953
+msgid "Embedded subset"
+msgstr "ఎంబెడెడ్ వుపసమితి"
+
+#: ../backend/pdf/ev-poppler.cc:955
+msgid "Embedded"
+msgstr "ఎంబెడెడ్"
+
+#: ../backend/pdf/ev-poppler.cc:957
+msgid "Not embedded"
+msgstr "ఎంబెడెడ్ కాలేదు"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF పత్రాలు"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "నిస్సారమైన పత్రము"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress స్లైడులు"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "దోషము లేదు"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "కావలసినంత జ్ఞాపకశక్తి లేదు"
+
+#: ../backend/impress/zip.c:59
+#, fuzzy
+msgid "Cannot find ZIP signature"
+msgstr "జిప్ సంతకం కనబడలేదు"
+
+#: ../backend/impress/zip.c:62
+#, fuzzy
+msgid "Invalid ZIP file"
+msgstr "నిస్సారమైన జిప్ దస్త్రం"
+
+#: ../backend/impress/zip.c:65
+#, fuzzy
+msgid "Multi file ZIPs are not supported"
+msgstr "ఎక్కువ జిప్ దస్త్రాలకు సహకారం లేదు"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "దస్త్రాన్ని తెరవలేము"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "దస్త్రము నుండి దత్తాంశాన్ని చదువలేము"
+
+#: ../backend/impress/zip.c:74
+#, fuzzy
+msgid "Cannot find file in the ZIP archive"
+msgstr "జిప్ సంగ్రహంలో దస్త్రం కనబడుటలేదు"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "అపరిచిత దోషం"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "పత్రము “%s” లోడవ్వుటకు విఫలమైంది"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "పత్రము “%s” దాయుటకు విఫలమైంది"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "పోస్ట్స్ర్కిప్ట్ పత్రాలు"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "అనుబంధ పత్రాన్ని దాయలేకపోయింది “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "అనుబంధ పత్రాన్ని తెరవలేకపోయింది “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "అనుబంధ పత్రాన్ని తెరవలేకపోయింది “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "దస్త్రము రకము %s (%s) మద్దతీయబడుట లేదు"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "అన్ని పత్రాలు"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "అన్ని దస్త్రాలు"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, fuzzy, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "తాత్కాలిక డైరెక్టరీను సృష్టించుటకు విఫలమైంది."
+
+#: ../libdocument/ev-file-helpers.c:308
+#, fuzzy, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "తాత్కాలిక డైరెక్టరీను సృష్టించుటకు విఫలమైంది."
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "ఫైలు చెల్లునటువంచి .desktop ఫైలు కాదు"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "గుర్తించబడని డెస్కుటాపు ఫైలు వర్షన్ '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s ప్రారంభిస్తోంది"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "ఆదేశవరుస నందు అనువర్తనములు పత్రములను ఆంగీకరించవు"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "గుర్తించబడని ప్రారంభ ఐచ్చికము: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "పత్రము URIలను Type=Link' desktop entry కు పంపలేదు."
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "దించదగిన అంశము కాదు"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "సెషన్ నిర్వాహికకు అనుసంధానమును అచేతనము చేయుము"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "దాచివున్న ఆకృతీకరణను కలిగివున్న ఫైలు తెలుపుము"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "సెషన్ నిర్వహణా IDను తెలుపుము"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ఐడి"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "సెషన్ నిర్వహణా ఐచ్చికములు:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "సెషన్ నిర్వహణా ఐచ్చికములను చూపుము"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "“_%s” ని చూపుము"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "పనిముట్ల పట్టా మీద కి కదలించు (_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "ఎంపికచేసుకున్నదానిని పనిముట్ల పట్టా మీద కి కదలించు"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "పనిముట్ల పట్టా నుండి తొలగించు (_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "ఎంపికచేసుకున్నదానిని పనిముట్ల పట్టా నుండి తొలగించు"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "పనిముట్ల పట్టా ని తొలగించు (_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "ఎంచుకున్న పనిముట్ల పట్టా ని తీసివేయు "
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "వేరుచేయునది"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5625
+msgid "Best Fit"
+msgstr "సరి తగిన"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "పుట వెడ్లపు తగిన"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+#, fuzzy
+msgid "800%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+#, fuzzy
+msgid "1600%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+#, fuzzy
+msgid "3200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+#, fuzzy
+msgid "6400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4434
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "పత్ర దర్శిని"
+
+#: ../data/evince.desktop.in.in.h:2
+#, fuzzy
+msgid "View multi-page documents"
+msgstr "అధికపుట పత్రాలను దర్శించు"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "పత్రము నిభందనలను తిరిగివ్రాయుము"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "నకలుతీయి లేదా ముద్రించు నిభందనవంటి, పత్రము నిభందనలను తిరిగివ్రాయుము"
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "తాత్కాలిక దస్త్రమును తొలగించుము"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "అమరికల దస్త్రమును ముద్రించుము"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "MATE డాక్యుమెంట్ ప్రివ్యూయర్"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "పత్ర ముద్రణ విఫలమైనది"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "ఎంపికకాబడిన ముద్రణాయంత్రము '%s' కనుగొనబడలేక పోయింది"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5340
+msgid "_Previous Page"
+msgstr "పూర్వపు పుట (_P)"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5341
+msgid "Go to the previous page"
+msgstr "పూర్వపు పుటకు వెళ్లుము"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5343
+msgid "_Next Page"
+msgstr "తరువాతి పుట (_N)"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5344
+msgid "Go to the next page"
+msgstr "తరువాతి పుటకు వెళ్లుము"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5327
+msgid "Enlarge the document"
+msgstr "పత్రాన్ని పెంచు"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5330
+msgid "Shrink the document"
+msgstr "పత్రాన్ని తగ్గించు"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "ముద్రణ"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5296
+msgid "Print this document"
+msgstr "ఈ పత్రాన్ని ముద్రించు"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5442
+msgid "_Best Fit"
+msgstr "సరి తగిన (_B)"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5443
+msgid "Make the current document fill the window"
+msgstr " ప్రస్థుత పత్రాన్ని గవాక్షకు సరిపడు విధంగా తయారుచేయు"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5445
+msgid "Fit Page _Width"
+msgstr "పుటవెడల్పుకు తగిన (_W)"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5446
+msgid "Make the current document fill the window width"
+msgstr "గవాక్ష వెడల్పుకు సరిపడ పత్రాన్ని తయారుచేయు"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5547
+msgid "Page"
+msgstr "పుట"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5548
+msgid "Select Page"
+msgstr "పుటను ఎంచుకొనుము"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "పత్రము"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "శీర్షిక:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "స్థానము:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "సంగతి:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "మూలకర్త:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Keywords:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "ఉత్పాదకుడు:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "సృష్టికర్త:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "నిర్మించబడినది:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "మార్చబడినది:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "పుటల సంఖ్య:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "ఆప్టిమైజ్డు:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "రూపలావణ్యం:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "రక్షణ:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "కాగిత పరిమాణము:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "Eదికాదు"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "అప్రమేయం:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, fuzzy, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:265
+#, fuzzy, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, చిత్రపటం(%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, ప్రకృతి దృశ్యం (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d యొక్క %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "%d యొక్క"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+#, fuzzy
+msgid "Loading…"
+msgstr "లోడవుతున్నది..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+#, fuzzy
+msgid "Preparing to print…"
+msgstr "ముద్రించుటకు సిద్దమౌతోంది ..."
+
+#: ../libview/ev-print-operation.c:336
+#, fuzzy
+msgid "Finishing…"
+msgstr "ముగించుతోంది..."
+
+#: ../libview/ev-print-operation.c:338
+#, fuzzy, c-format
+msgid "Printing page %d of %d…"
+msgstr "%2$d లో %1$d పుట ముద్రించుచున్నది..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "ఈ ముద్రణా యంత్రానికి ముద్రణ సహకారంలేదు"
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "చెల్లని పేజీ యెంపిక"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "హెచ్చరించుచున్నది"
+
+#: ../libview/ev-print-operation.c:1229
+#, fuzzy
+msgid "Your print range selection does not include any pages"
+msgstr "మీ ముద్రణ విస్తృతి యెంపిక ఏ పేజీను చేర్చలేదు"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "పేజీ స్కేలింగ్:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "ముద్రించదగు ప్రాంతమునకు కుచింపుము"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "ముద్రించగల ప్రాంతమునకు అమర్చుము"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"ఎంపికచేసిన ముద్రణ పేజీనకు అమరునట్లు పత్రము పేజీలను సరిదిద్దుము. కింది వాటిలో "
+"వొకదానినుండియెంపికచేయుము:\n"
+"\n"
+"• \"ఏదీకాదు\": ఎటువంటి పేజీ స్కేలింగ్ జరుపబడదు.\n"
+"\n"
+"• \"ముద్రించగల ప్రాంతమునకు కుచింపుము\": ముద్రించగల ప్రాతమునకన్నా పెద్దవైన పత్రము పేజీలు ముద్రణ "
+"పేజీ యొక్క ముద్రించగల ప్రాంతమునకు అమరునట్లు తగ్గించబడును.\n"
+"\n"
+"• \"ముద్రించగల ప్రాంతమునకు అమర్చుము\": ముద్రణ పేజీ యొక్క ముద్రించగల ప్రాంతమునకు అమరునట్లు "
+"పత్రము పేజీలు పెద్దవిచేయబడును లేదా తగ్గించబడును.\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "స్వయంచాలనంగా తిప్పుము మరియు మధ్యనవుంచుము"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"పత్రము యొక్క ప్రతి పేజీతో సరిపోలునట్లు ప్రతి ముద్రణ పేజీ యొక్క సర్దుబాటును తిప్పుము. పత్రము పేజీలు "
+"ముద్రణ పేజీ లోపల మధ్యన వుంచబడుతాయి."
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "పేజీ సంభాలన"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "పేజీ %d ముద్రించుటకు విఫలమైంది: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "పైకి జరుపు"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "కిందకి జరుపు"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "పైన చూడుటకు జరుగు"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "కింద చూడుటకు జరుగు"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "పత్ర దర్శనం"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "పుటకు ఎగురుము"
+
+#: ../libview/ev-view-presentation.c:968
+#, fuzzy
+msgid "End of presentation. Click to exit."
+msgstr "సమర్పణ ముగిసినది."
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "మొదటి పుటకు వెళ్లు"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "పూర్వపు పుటకు వెళ్లు"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "తరువాతి పుటకు వెళ్లు"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "చివరి పుటకు వెళ్లు"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "పుటకు వెళ్లు"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "కనిపెట్టు"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "%s పుటకు వెళ్లు"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "%s దస్త్రముపై %sకి వెళ్లు"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "%s దస్త్రముకి వెళ్లు"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "%s ని ప్రయోగించు"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "కనుగొనుము"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5313
+msgid "Find Pre_vious"
+msgstr "పూర్వపుదానిని కనుగొనుము (_v)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "వెతుకుమాట యొక్క పూర్వసంభవాన్ని కనుగొనుము"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5311
+msgid "Find Ne_xt"
+msgstr "తరువాతదానిని కనుగొనుము (_x)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "వెతుకుమాట యొక్క తదుపరిసంభవాన్ని కనుగొనుము"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "సందర్భ స్పందన (_a)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "సందర్భ స్పందనను మార్చి వెతుకు"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+#, fuzzy
+msgid "Note"
+msgstr "Eదికాదు"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+#, fuzzy
+msgid "Comment"
+msgstr "పత్రము"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+#, fuzzy
+msgid "Help"
+msgstr "సహాయం (_H)"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+#, fuzzy
+msgid "Unknown"
+msgstr "అపరిచిత దోషం"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+#, fuzzy
+msgid "Annotation Properties"
+msgstr "లక్షణాలు"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+#, fuzzy
+msgid "Style:"
+msgstr "శీర్షిక:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr ""
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+#, fuzzy
+msgid "Open"
+msgstr "తెరచిన... (_O)"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr ""
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "సమర్పణ సంవిధానంలో నడుస్తున్నది"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s పత్రముకు రహస్యపదము"
+
+#: ../shell/ev-convert-metadata.c:88
+#, fuzzy, c-format
+msgid "Converting %s"
+msgstr "%s ప్రారంభిస్తోంది"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr ""
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "ఇటీవల వుపయోగించిన పత్రమును తెరువుము"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "ఈ పత్రము మూసివున్నది కావున రహస్యపదం ద్వారానే దీన్ని చదవగలము"
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "పత్రాన్ని విప్పు (_U)"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "రహస్యపదాన్ని రాయుము"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "రహస్యపదము అవసరమైనది"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "%s పత్రము మూసివున్నది కావున తెరుచుటకు రహస్యపదం అవసరం"
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "రహస్యపదము (_P):"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "సంకేతపదమును తక్షణమే మర్చిపో (_i)"
+
+#: ../shell/ev-password-view.c:380
+#, fuzzy
+msgid "Remember password until you _log out"
+msgstr "మీరు లాగ్అవుట్ అయ్యేవరకు సంకేతపదమును గుర్తుంచుకొనుము (_l)"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "ఎప్పటికి గుర్తుంచుకొనుము (_f)"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "లక్షణాలు"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "సర్వసామన్యమైన"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "అక్షరశైలిలు"
+
+#: ../shell/ev-properties-dialog.c:118
+#, fuzzy
+msgid "Document License"
+msgstr "పత్ర దర్శిని"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "అక్షరశైలి"
+
+#: ../shell/ev-properties-fonts.c:162
+#, fuzzy, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "అక్షరశైలి యొక్క సమాచారం సేకరిస్తున్నది... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr ""
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr ""
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr ""
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+#, fuzzy
+msgid "Annotations"
+msgstr "స్థానము:"
+
+#: ../shell/ev-sidebar-annotations.c:209
+#, fuzzy
+msgid "Text"
+msgstr "తరువాత"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr ""
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr ""
+
+#: ../shell/ev-sidebar-annotations.c:364
+#, fuzzy
+msgid "Document contains no annotations"
+msgstr "పత్రము యెటువంటి పుటలను కలిగిలేదు"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, fuzzy, c-format
+msgid "Page %d"
+msgstr "%s పుట"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "అనుబంధ పత్రాలు"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "పొరలు"
+
+#: ../shell/ev-sidebar-links.c:335
+#, fuzzy
+msgid "Print…"
+msgstr "ముద్రణ"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "సూచి"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "చిరుచిత్రాలు"
+
+#: ../shell/ev-window.c:867
+#, fuzzy, c-format
+msgid "Page %s — %s"
+msgstr "%s పుట -%s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "%s పుట"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "పత్రము యెటువంటి పుటలను కలిగిలేదు"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "పత్రము ఖాళీ పేజీలను మాత్రమే కలిగివుంది"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "పత్రాన్ని తెరవలేకపోయింది"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "పత్రమును “%s” నుండి లోడుచేయుచున్నది"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "పత్రము (%d%%) డౌనులోడుచేయుచున్నది"
+
+#: ../shell/ev-window.c:1939
+#, fuzzy
+msgid "Failed to load remote file."
+msgstr "పత్రము తిరిగిలోడు చేయుటకు విఫలమైంది."
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "%sనుండి పత్రమును తిరిగిలోడుచేయు చున్నది"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "పత్రము తిరిగిలోడు చేయుటకు విఫలమైంది."
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "పత్రాన్ని తెరువు"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "పత్రాన్ని %sకు దాయుచున్నది"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "అనుభందాన్ని %sకు దాయుచున్నది"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "ప్రతిబింబమును %sకు దాయుచున్నది"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "ఈ దస్త్రం “%s” గా దాచుట సాధ్యముకాదు"
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "పత్రము (%d%%)ను అప్‌లోడు చేయుచున్నది"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "అనుభందము (%d%%) అప్‌లోడు చేయుచున్నది"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "ప్రతిబింబము (%d%%) అప్‌లోడు చేయుచున్నది"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "ఒక నకలును దాయు"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "క్యూలో %d వాయిదా వుద్యోగంవుంది"
+msgstr[1] "క్యూలో %d వాయిదా వుద్యోగములు వున్నవి"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "జాబ్ “%s” ముద్రించుచున్నది"
+
+#: ../shell/ev-window.c:3438
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "మూయుటకు ముందుగా ముద్రణ జాబ్ “%s” ముగియునంత వరకు వేచివుండాలా?"
+
+#: ../shell/ev-window.c:3441
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"అక్కడ %d ముద్రణ జాబ్స్ క్రియాశీలముగా వున్నాయి. మూయుటకు ముందుగా ముద్రణ పూర్తగునంత వరకు "
+"వేచివుండాలా?"
+
+#: ../shell/ev-window.c:3453
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "మీరు విండో మూసివేసినట్లైతే, వాయిదాలో వున్న ముద్రణ జాబ్సు ముద్రించబడవు."
+
+#: ../shell/ev-window.c:3457
+msgid "Cancel _print and Close"
+msgstr "ముద్రణను రద్దుచేయి మరియు మూసివేయి (_p)"
+
+#: ../shell/ev-window.c:3461
+msgid "Close _after Printing"
+msgstr "ముద్రణ తర్వాత మూసివేయి (_a)"
+
+#: ../shell/ev-window.c:4051
+msgid "Toolbar Editor"
+msgstr "పనిముట్లపట్టా సంపాదకుడు"
+
+#: ../shell/ev-window.c:4218
+msgid "There was an error displaying help"
+msgstr "అక్కడ వొక దోషము సహాయమును ప్రదర్శించుతున్నది"
+
+#: ../shell/ev-window.c:4430
+#, fuzzy, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"పత్రము దర్శిని.\n"
+"poppler %s (%s) వుపయోగిస్తోంది"
+
+#: ../shell/ev-window.c:4461
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince స్వతంత్ర సాఫ్ట్వేర్; నీవు దానిని మరలపంచవచ్చు స్వతంత్ర సాఫ్ట్వేర్ సంస్థ వెలువరిచిన GNU "
+"సర్వసామన్యమైన ప్రజా లైసెన్సు వివరణం 2 లైసెన్సు లేదా వేరే (మీ ఐచ్చికం వద్ద) వివరణల ప్రకారం మార్చవచ్చు.\n"
+
+#: ../shell/ev-window.c:4465
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince ఉపయోగపడుతుందనే నమ్మకంతో పంపిణీచేయబడుతోంది, అయితే ఏ హామీ లేకుండా; వ్యాపారసంబందంగా కాని లేదా "
+"ఒక నిర్దిష్ట అవసరానికిచెందినదని కాని హామీ లేదు. ఎక్కువ సమాచారం కొరకు GNU జనరల్ పబ్లిక్ లైసెన్స్ ను "
+"చూడండి. మీరు ఈ ప్రోగ్రామ్ నకలు తోటి ఒక GNU జనరల్ పబ్లిక్ లైసెన్స్ నకలుగూడా పొందిఉంటారు; పొందక పోతే, "
+"Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA "
+"02110-1301, USAకు వ్రాయండి.\n"
+
+#: ../shell/ev-window.c:4469
+#, fuzzy
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"మీరు Evince నకలు తోటి ఒక GNU జనరల్ పబ్లిక్ లైసెన్స్ నకలుగూడా పొందిఉంటారు; పొందక పోతే, Free "
+"Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-"
+"1307 USAకు వ్రాయండి.\n"
+
+#: ../shell/ev-window.c:4494
+msgid "Evince"
+msgstr "ఎవిన్స్"
+
+#: ../shell/ev-window.c:4497
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 Evince మూలకర్తలు"
+
+#: ../shell/ev-window.c:4503
+msgid "translator-credits"
+msgstr "Bharat Kumar <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4766
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "ఈ పుటలో %d కనుగొనబడినది"
+msgstr[1] "ఈ పుటలో %d కనుగొనబడినది"
+
+#: ../shell/ev-window.c:4774
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "వెతుకుటకు %3d%% మిగిలివున్నది"
+
+#: ../shell/ev-window.c:5279
+msgid "_File"
+msgstr "దస్త్రము (_F)"
+
+#: ../shell/ev-window.c:5280
+msgid "_Edit"
+msgstr "సరిచేయు (_E)"
+
+#: ../shell/ev-window.c:5281
+msgid "_View"
+msgstr "దర్శనం (_V)"
+
+#: ../shell/ev-window.c:5282
+msgid "_Go"
+msgstr "వెళ్లు (_G)"
+
+#: ../shell/ev-window.c:5283
+msgid "_Help"
+msgstr "సహాయం (_H)"
+
+#. File menu
+#: ../shell/ev-window.c:5286 ../shell/ev-window.c:5587
+#, fuzzy
+msgid "_Open…"
+msgstr "తెరచిన... (_O)"
+
+#: ../shell/ev-window.c:5287 ../shell/ev-window.c:5588
+msgid "Open an existing document"
+msgstr "ఉన్న పత్రాన్ని తెరువుము"
+
+#: ../shell/ev-window.c:5289
+msgid "Op_en a Copy"
+msgstr "ఒక నకలును తెరువుము (_e)"
+
+#: ../shell/ev-window.c:5290
+msgid "Open a copy of the current document in a new window"
+msgstr "ప్రస్థుత పత్రము యొక్క నకలును కొత్త గవాక్షములో తెరువుము"
+
+#: ../shell/ev-window.c:5292
+#, fuzzy
+msgid "_Save a Copy…"
+msgstr "ఒక నకలును దాయు"
+
+#: ../shell/ev-window.c:5293
+msgid "Save a copy of the current document"
+msgstr "ప్రస్థుత పత్రము యొక్క నకలును దాయుము"
+
+#: ../shell/ev-window.c:5295
+#, fuzzy
+msgid "_Print…"
+msgstr "ముద్రణ"
+
+#: ../shell/ev-window.c:5298
+msgid "P_roperties"
+msgstr "లక్షణాలు (_r)"
+
+#: ../shell/ev-window.c:5306
+msgid "Select _All"
+msgstr "అన్నింటిని ఎంపికచేయు (_A)"
+
+#: ../shell/ev-window.c:5308
+#, fuzzy
+msgid "_Find…"
+msgstr "కనిపెట్టు"
+
+#: ../shell/ev-window.c:5309
+msgid "Find a word or phrase in the document"
+msgstr "పత్రములో పదాన్ని కనుగొనుము"
+
+#: ../shell/ev-window.c:5315
+msgid "T_oolbar"
+msgstr "పనిముట్ల పట్టా (_o)"
+
+#: ../shell/ev-window.c:5317
+msgid "Rotate _Left"
+msgstr "ఎడమవైపు తిప్పు (_L)"
+
+#: ../shell/ev-window.c:5319
+msgid "Rotate _Right"
+msgstr "కుడివైపు తిప్పు (_R)"
+
+#: ../shell/ev-window.c:5321
+msgid "Save Current Settings as _Default"
+msgstr ""
+
+#: ../shell/ev-window.c:5332
+msgid "_Reload"
+msgstr "తిరిగిలోడుచేయి (_R)"
+
+#: ../shell/ev-window.c:5333
+msgid "Reload the document"
+msgstr "పత్రమును తిరిగిలోడుచేయుము"
+
+#: ../shell/ev-window.c:5336
+msgid "Auto_scroll"
+msgstr "స్వయంచాలక స్క్రాలు (_s)"
+
+#: ../shell/ev-window.c:5346
+msgid "_First Page"
+msgstr "మొదటి పుట (_F)"
+
+#: ../shell/ev-window.c:5347
+msgid "Go to the first page"
+msgstr "మొదటి పుటకు వెళ్లుము"
+
+#: ../shell/ev-window.c:5349
+msgid "_Last Page"
+msgstr "చివరి పుట (_L)"
+
+#: ../shell/ev-window.c:5350
+msgid "Go to the last page"
+msgstr "చివరి పుటకు వెళ్లుము"
+
+#. Help menu
+#: ../shell/ev-window.c:5354
+msgid "_Contents"
+msgstr "సారాంశములు (_C)"
+
+#: ../shell/ev-window.c:5357
+msgid "_About"
+msgstr "గురించి (_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5361
+msgid "Leave Fullscreen"
+msgstr "నిండుతెరను విడిచిపెట్టు"
+
+#: ../shell/ev-window.c:5362
+msgid "Leave fullscreen mode"
+msgstr "నిండుతెర సంవిధానము విడిచిపెట్టు"
+
+#: ../shell/ev-window.c:5364
+msgid "Start Presentation"
+msgstr "సమర్పణమును మొదలుపెట్టు"
+
+#: ../shell/ev-window.c:5365
+msgid "Start a presentation"
+msgstr "ఒక సమర్పణమును మొదలుపెట్టు"
+
+#. View Menu
+#: ../shell/ev-window.c:5424
+msgid "_Toolbar"
+msgstr "పనిముట్ల పట్టా (_T)"
+
+#: ../shell/ev-window.c:5425
+msgid "Show or hide the toolbar"
+msgstr "పనిముట్ల పట్టాను చూపుము లేదా దాయుము"
+
+#: ../shell/ev-window.c:5427
+msgid "Side _Pane"
+msgstr "పక్కన పలక (_P)"
+
+#: ../shell/ev-window.c:5428
+msgid "Show or hide the side pane"
+msgstr "ప్రక్క పలకను చూపుము లేదా మరుగునవుంచుము"
+
+#: ../shell/ev-window.c:5430
+msgid "_Continuous"
+msgstr "ఎడతెగని (_C)"
+
+#: ../shell/ev-window.c:5431
+msgid "Show the entire document"
+msgstr "పూర్తి పత్రాన్ని చూపుము"
+
+#: ../shell/ev-window.c:5433
+msgid "_Dual"
+msgstr "ద్వయము (_D)"
+
+#: ../shell/ev-window.c:5434
+msgid "Show two pages at once"
+msgstr "రెండు పుటలను ఒకేసారి చూపుము"
+
+#: ../shell/ev-window.c:5436
+msgid "_Fullscreen"
+msgstr "నిండుతెర (_F)"
+
+#: ../shell/ev-window.c:5437
+msgid "Expand the window to fill the screen"
+msgstr "గవాక్షాన్ని నిండుతెరగా విస్తరించుము"
+
+#: ../shell/ev-window.c:5439
+msgid "Pre_sentation"
+msgstr "సమర్పణం (_s)"
+
+#: ../shell/ev-window.c:5440
+msgid "Run document as a presentation"
+msgstr "పత్రాన్ని సమర్పణంగా నడుపుము"
+
+#: ../shell/ev-window.c:5448
+msgid "_Inverted Colors"
+msgstr ""
+
+#: ../shell/ev-window.c:5449
+msgid "Show page contents with the colors inverted"
+msgstr ""
+
+#. Links
+#: ../shell/ev-window.c:5457
+msgid "_Open Link"
+msgstr "జోడికను తెరువుము (_O)"
+
+#: ../shell/ev-window.c:5459
+msgid "_Go To"
+msgstr "ఇచటకు వెళ్ళు (_G)"
+
+#: ../shell/ev-window.c:5461
+msgid "Open in New _Window"
+msgstr "కొత్త గవాక్షంలో తెరువుము (_W)"
+
+#: ../shell/ev-window.c:5463
+msgid "_Copy Link Address"
+msgstr "జోడిక చిరునామం యొక్క నకలు (_C)"
+
+#: ../shell/ev-window.c:5465
+#, fuzzy
+msgid "_Save Image As…"
+msgstr "ప్రతిరూపాన్ని ఇలా దాయుము (_S)"
+
+#: ../shell/ev-window.c:5467
+msgid "Copy _Image"
+msgstr "ప్రతిరూపం యొక్క నకలు (_I)"
+
+#: ../shell/ev-window.c:5469
+msgid "Annotation Properties…"
+msgstr ""
+
+#: ../shell/ev-window.c:5474
+#, fuzzy
+msgid "_Open Attachment"
+msgstr "అనుబంధ పత్రాన్ని దాయుము"
+
+#: ../shell/ev-window.c:5476
+#, fuzzy
+msgid "_Save Attachment As…"
+msgstr "అనుబంధ పత్రాన్ని దాయుము"
+
+#: ../shell/ev-window.c:5561
+msgid "Zoom"
+msgstr "జూమ్"
+
+#: ../shell/ev-window.c:5563
+msgid "Adjust the zoom level"
+msgstr "జూమ్ స్థాయిని సరిచేయు"
+
+#: ../shell/ev-window.c:5573
+msgid "Navigation"
+msgstr "విహరించుట"
+
+#: ../shell/ev-window.c:5575
+msgid "Back"
+msgstr "వెనుకకి"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5578
+msgid "Move across visited pages"
+msgstr "సందర్శించిన పుటలవైపు కదులు"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5608
+msgid "Previous"
+msgstr "పూర్వపు"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5613
+msgid "Next"
+msgstr "తరువాత"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5617
+msgid "Zoom In"
+msgstr "జూమ్ లోపలికి"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5621
+msgid "Zoom Out"
+msgstr "జూమ్ వెలుపలకి"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5629
+msgid "Fit Width"
+msgstr "తగిన వెడెల్పు"
+
+#: ../shell/ev-window.c:5774 ../shell/ev-window.c:5791
+msgid "Unable to launch external application."
+msgstr "బహిర్గత అనువర్తనమును ఆరంభించలేక పోయింది"
+
+#: ../shell/ev-window.c:5848
+msgid "Unable to open external link"
+msgstr "బాహ్యజోడిక తెరువుట విఫలం"
+
+#: ../shell/ev-window.c:6015
+msgid "Couldn't find appropriate format to save image"
+msgstr "ప్రతిబింబమును దాయుటకు సరిపోవు ఫార్మాట్‌ను కనుగొనలేక పోయింది"
+
+#: ../shell/ev-window.c:6057
+msgid "The image could not be saved."
+msgstr "ప్రతిరూపమును దాయలేకపోయింది"
+
+#: ../shell/ev-window.c:6089
+msgid "Save Image"
+msgstr "ప్రతిరూపమును దాయు"
+
+#: ../shell/ev-window.c:6217
+msgid "Unable to open attachment"
+msgstr "అనుబంధ పత్రాన్ని తెరవలేకపోయింది"
+
+#: ../shell/ev-window.c:6270
+msgid "The attachment could not be saved."
+msgstr "అనుబంధ పత్రాన్ని దాయలేకపోయింది"
+
+#: ../shell/ev-window.c:6315
+msgid "Save Attachment"
+msgstr "అనుబంధ పత్రాన్ని దాయుము"
+
+#: ../shell/ev-window-title.c:162
+#, fuzzy, c-format
+msgid "%s — Password Required"
+msgstr "%s - రహస్యపదం అవసరం"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "పొడిగింపు ద్వారా"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "గ్నోమ్ పత్రదర్శని"
+
+#: ../shell/main.c:77
+#, fuzzy
+msgid "The page label of the document to display."
+msgstr "పత్రం లోని పుటను ప్రదర్శించు"
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "పుట"
+
+#: ../shell/main.c:78
+#, fuzzy
+msgid "The page number of the document to display."
+msgstr "పత్రం లోని పుటను ప్రదర్శించు"
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr ""
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "పూర్తితెర సంవిధానంలో ఎవిన్స్ ను నడుపుము"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "సమర్పణ సంవిధానంలో ఎవిన్స్ ను నడుపుము"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "ఉపదర్శనిగా ఎవిన్స్ ను నడుపు"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "పత్రములో కనుగొనుటకు పదము లేదా పదబందము"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "పదబంధం"
+
+#: ../shell/main.c:86
+#, fuzzy
+msgid "[FILE…]"
+msgstr "[దస్త్రం...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+#, fuzzy
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"బూలియన్ ఐచ్చికాలు అందుబాటులో వున్నయి, true అనునది థంబ్‌నెయిలింగ్ చేతనపరుస్తుంది మరియు false కొత్త "
+"థంబ్‌నెయిల్ సృష్టీకరణిని అచేతనము చేస్తుంది"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF పత్రాలను చిరుచిత్రాలుగా క్రియాశీలీకరించు"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF పత్రాలకు చిరుచిత్ర ఆదేశం"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+#, fuzzy
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF పత్ర చిరుచిత్రానికి వర్తించదగిన ఆదేశాలు. ఎక్కువ సమాచారం కోసం నాటిలస్ చిరుచిత్ర పత్రాన్ని చూడండి"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU పత్రము సరికాని రూపమును కలిగివుంది"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "“%s”దస్త్రము సృష్టించుట విఫలమైనది: %s"
+
+#~ msgid "Search string"
+#~ msgstr "వెతుకుమాట"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "పదబంధం యొక్క పేరు కనుగొనబడాలి"
+
+#~ msgid "Case sensitive"
+#~ msgstr "సందర్భ స్పందన"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "కేస్ సున్నితత్వ శోధనకు TRUE"
+
+#~ msgid "Highlight color"
+#~ msgstr "వర్ణమును ఉద్దేపించు"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "అన్ని పోలికలకు ఉద్దీపనం వర్ణము"
+
+#~ msgid "Current color"
+#~ msgstr "ప్రస్థుత వర్ణము"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "ప్రస్తుత సరిపోలికకు ఉద్దీపనం వర్ణము"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "ముందరి పత్రములను తిరిగిపొందాలా?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "Evince చివరిసారి అది నడుపబడినప్పుడు అనుకోకుండా నిష్క్రమించినట్లు అనిపిస్తోంది. తెరిచిన పత్రములను "
+#~ "మీరు తిరిగిపొందగలరు."
+
+#~ msgid "_Don't Recover"
+#~ msgstr "తిరిగిపొందవద్దు (_D)"
+
+#~ msgid "_Recover"
+#~ msgstr "తిరిగితెమ్ము (_R)"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "క్రాష్ రికవరి"
+
+#~ msgid "Print..."
+#~ msgstr "ముద్రణ..."
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "సిమ్‌లింకు “%s” ను సృష్టించలేక పోయింది: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "నకలు తెరుచుట సాధ్యముకాదు"
+
+#~ msgid "The document doesn't support search"
+#~ msgstr "శోధించుటను యీ పత్రము మద్దతించదు"
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "నకలును దాయుము... (_S)"
+
+#~ msgid "Page Set_up..."
+#~ msgstr "పేజీ అమరిక... (_u)"
+
+#~ msgid "Setup the page settings for printing"
+#~ msgstr "పుట అమరికలను ముద్రణకోసం అమర్చండి"
+
+#~ msgid "_Print..."
+#~ msgstr "ముద్రణ... (_P)"
+
+#~ msgid "_Find..."
+#~ msgstr "కనిపెట్టు... (_F)"
diff --git a/po/th.po b/po/th.po
new file mode 100644
index 00000000..057cc49c
--- /dev/null
+++ b/po/th.po
@@ -0,0 +1,2196 @@
+# Thai translation for evince
+# Copyright (C) 2005-2010 Free Software Foundation, Inc.
+# This file is distributed under the same licence as the evince package.
+# Isriya Paireepairit <[email protected]>, 2005.
+# Theppitak Karoonboonyanan <[email protected]>, 2005-2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-06-02 12:15+0000\n"
+"PO-Revision-Date: 2010-06-04 21:27+0700\n"
+"Last-Translator: Sira Nokyoongtong <[email protected]>\n"
+"Language-Team: Thai <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "เกิดข้อผิดพลาดขณะเรียกคำสั่ง “%s” เพื่อแตกข้อมูลหนังสือการ์ตูน: %s"
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "คำสั่ง “%s” แตกข้อมูลหนังสือการ์ตูนไม่สำเร็จ"
+
+#: ../backend/comics/comics-document.c:183
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "คำสั่ง “%s” ไม่ได้จบแบบปกติ"
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "ไม่ใช่ชนิด MIME ของหนังสือการ์ตูน: %s"
+
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "ไม่สามารถหาคำสั่งที่เหมาะสมสำหรับแตกข้อมูลหนังสือการ์ตูนชนิดนี้"
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "ชนิด MIME ไม่รู้จัก"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "แฟ้มเสียหาย"
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "ไม่มีแฟ้มในแฟ้มจัดเก็บ"
+
+#: ../backend/comics/comics-document.c:474
+#, c-format
+msgid "No images found in archive %s"
+msgstr "ไม่พบรูปภาพในแฟ้มจัดเก็บ %s"
+
+#: ../backend/comics/comics-document.c:718
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "เกิดข้อผิดพลาดขณะลบ “%s”"
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr "ผิดพลาด: %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "หนังสือการ์ตูน"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "เอกสาร DjVu มีรูปแบบไม่ถูกต้อง"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr "เอกสารนี้ประกอบด้วยแฟ้มหลายแฟ้ม แต่มีบางแฟ้มที่ไม่สามารถเข้าใช้ได้"
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "เอกสาร DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "เอกสาร DVI มีรูปแบบไม่ถูกต้อง"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "เอกสาร DVI"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr "งานนี้เป็นสาธารณสมบัติ (Public Domain)"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "มี"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "ไม่มี"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "ไทป์ 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "ไทป์ 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "ไทป์ 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "ทรูไทป์"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "ไทป์ 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "ไทป์ 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "ทรูไทป์ (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "แบบอักษรไม่ทราบชนิด"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "ไม่มีชื่อ"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "ส่วนย่อย ฝังตัว"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "ฝังตัว"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "ไม่ได้ฝังตัว"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "เอกสาร PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "เอกสารใช้การไม่ได้"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "สไลด์ Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "ไม่มีข้อผิดพลาด"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "หน่วยความจำไม่เพียงพอ"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "หาลายเซ็นของ ZIP ไม่พบ"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "แฟ้ม ZIP ใช้การไม่ได้"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "ไม่รองรับแฟ้ม ZIP แบบหลายแฟ้ม"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "ไม่สามารถเปิดแฟ้มได้"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "ไม่สามารถอ่านข้อมูลจากแฟ้มได้"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "หาแฟ้มในแฟ้มจัดเก็บแบบ ZIP ไม่พบ"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "ข้อผิดพลาดไม่ทราบสาเหตุ"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "ไม่สามารถเปิดเอกสาร “%s” ได้"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "ไม่สามารถบันทึกเอกสาร “%s” ได้"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "เอกสาร PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "ไม่สามารถบันทึกแฟ้มแนบ “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "ไม่สามารถเปิดแฟ้มแนบ “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "ไม่สามารถเปิดแฟ้มแนบ “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "ไม่รองรับแฟ้มชนิด %s (%s)"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "เอกสารทั้งหมด"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "แฟ้มทั้งหมด"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "สร้างแฟ้มชั่วคราวไม่สำเร็จ: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "สร้างไดเรกทอรีชั่วคราวไม่สำเร็จ: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "แฟ้มนี้ไม่ใช่แฟ้ม .desktop ที่ใช้ได้"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "ไม่รู้จักแฟ้มเดสก์ท็อปรุ่น '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "กำลังเริ่ม %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "โปรแกรมไม่รับเอกสารในบรรทัดคำสั่ง"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "ไม่รู้จักตัวเลือกของการเรียกโปรแกรม: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "ไม่สามารถส่ง URI ของเอกสารไปยังรายการเดสก์ท็อปที่มี 'Type=Link'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "ไม่ใช่รายการที่เรียกทำงานได้"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "ปิดใช้การเชื่อมต่อไปยังโปรแกรมจัดการวาระ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "ระบุแฟ้มที่บันทึกค่าตั้งไว้"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "FILE"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "ระบุหมายเลขการจัดการวาระ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "ตัวเลือกเกี่ยวกับการจัดการวาระ:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "แสดงตัวเลือกเกี่ยวกับการจัดการวาระ"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "แสดงแถบ “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "_ย้ายที่ในแถบเครื่องมือ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "ย้ายรายการที่เลือกในแถบเครื่องมือ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "_ลบออกจากแถบเครื่องมือ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "ลบแถบเครื่องมือที่เลือก"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "_ลบแถบเครื่องมือ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "ลบแถบเครื่องมือที่เลือก"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "เส้นแบ่ง"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:101
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:176
+msgid "Running in presentation mode"
+msgstr "กำลังทำงานในแบบนำเสนอ"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5403
+msgid "Best Fit"
+msgstr "พอดีหน้า"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "เท่าความกว้าง"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4254
+#: ../shell/ev-window-title.c:149 ../shell/main.c:313
+#, c-format
+msgid "Document Viewer"
+msgstr "โปรแกรมดูเอกสาร"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "ดูเอกสารแบบหลายหน้า"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "ละเลยข้อห้ามของเอกสาร"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "ละเลยข้อห้ามของเอกสาร เช่น การห้ามทำสำเนาหรือห้ามจัดพิมพ์"
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "ลบแฟ้มชั่วคราว"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "แฟ้มค่าตั้งการพิมพ์"
+
+#: ../previewer/ev-previewer.c:147 ../previewer/ev-previewer.c:181
+msgid "MATE Document Previewer"
+msgstr "โปรแกรมแสดงภาพตัวอย่างเอกสารของ MATE"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3017
+msgid "Failed to print document"
+msgstr "ไม่สามารถพิมพ์เอกสารได้"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "ไม่พบเครื่องพิมพ์ '%s' ที่เลือก"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5152
+msgid "_Previous Page"
+msgstr "หน้า_ก่อน"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5153
+msgid "Go to the previous page"
+msgstr "ไปหน้าก่อน"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5155
+msgid "_Next Page"
+msgstr "หน้าถั_ดไป"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5156
+msgid "Go to the next page"
+msgstr "ไปหน้าถัดไป"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5139
+msgid "Enlarge the document"
+msgstr "ขยายเอกสาร"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5142
+msgid "Shrink the document"
+msgstr "ย่อเอกสาร"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "พิมพ์"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5110
+msgid "Print this document"
+msgstr "พิมพ์เอกสารนี้"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5254
+msgid "_Best Fit"
+msgstr "_พอดีหน้า"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5255
+msgid "Make the current document fill the window"
+msgstr "แสดงเอกสารทั้งหน้าให้พอดีกับหน้าต่าง"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5257
+msgid "Fit Page _Width"
+msgstr "เ_ท่าความกว้าง"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5258
+msgid "Make the current document fill the window width"
+msgstr "แสดงความกว้างเอกสารให้พอดีกับความกว้างหน้าต่าง"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5325
+msgid "Page"
+msgstr "หน้า"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5326
+msgid "Select Page"
+msgstr "เลือกหน้า"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "เอกสาร"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "ชื่อเรื่อง:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "ตำแหน่ง:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "หัวข้อ:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "ผู้เขียน:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "คำหลัก:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "สร้างด้วยโปรแกรม:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "สร้างโดย:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "วันที่สร้าง:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "วันที่แก้ไข:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "จำนวนหน้า:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "ออปติไมซ์:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "ฟอร์แมต:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "การรักษาความปลอดภัย:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "ขนาดกระดาษ:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "ไม่มี"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:284
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f มม."
+
+#: ../properties/ev-properties-view.c:288
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f นิ้ว"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, แนวตั้ง (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, แนวนอน (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d จาก %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "จาก %d"
+
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "กำลังอ่าน…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "กำลังเตรียมจัดพิมพ์…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "กำลังจบ…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "กำลังพิมพ์หน้า %d จาก %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "ไม่รองรับการพิมพ์สำหรับเครื่องพิมพ์นี้"
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "การเลือกหน้าผิดพลาด"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "คำเตือน"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "ช่วงการพิมพ์ที่คุณเลือกไม่ครอบคลุมหน้าเอกสารใดเลยสักหน้า"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "การย่อ-ขยายหน้าเอกสาร:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "ย่อลงเท่าพื้นที่หน้ากระดาษพิมพ์"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "ปรับให้พอดีกับหน้ากระดาษพิมพ์"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"ย่อ-ขยายหน้าเอกสารให้พิมพ์ลงในหน้ากระดาษของเครื่องพิมพ์ได้ โดยเลือกจากตัวเลือกต่อไปนี้:\n"
+"\n"
+"• \"ไม่มี\": ไม่ต้องย่อ-ขยายหน้าเอกสาร\n"
+"\n"
+"• \"ย่อลงเท่าพื้นที่หน้ากระดาษพิมพ์\": "
+"ย่อหน้าเอกสารที่ใหญ่กว่าหน้ากระดาษพิมพ์ลงให้พอดีกับหน้ากระดาษในเครื่องพิมพ์\n"
+"\n"
+"• \"ปรับให้พอดีกับหน้ากระดาษพิมพ์\": ย่อหรือขยายหน้าเอกสารให้พอดีกับหน้ากระดาษในเครื่องพิมพ์\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "หมุนและวางกึ่งกลางโดยอัตโนมัติ"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"หมุนหน้ากระดาษพิมพ์ของเครื่องพิมพ์แต่ละหน้าให้ตรงกับแนววางของแต่ละหน้าเอกสาร "
+"พร้อมทั้งจัดวางหน้าเอกสารให้อยู่กึ่งกลางหน้ากระดาษพิมพ์พอดี"
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "เลือกขนาดกระดาษตามขนาดของหน้าเอกสาร"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr "เมื่อเปิดใช้ เอกสารแต่ละหน้าจะถูกพิมพ์ลงในกระดาษขนาดเดียวกับหน้าเอกสารนั้นๆ"
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "การจัดการหน้ากระดาษ"
+
+#: ../libview/ev-jobs.c:1438
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "ไม่สามารถพิมพ์หน้า %d: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "เลื่อนขึ้น"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "เลื่อนลง"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "เลื่อนหน้ากระดาษขึ้น"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "เลื่อนหน้ากระดาษลง"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "ช่องมองเอกสาร"
+
+#: ../libview/ev-view-presentation.c:673
+msgid "Jump to page:"
+msgstr "ไปที่หน้า:"
+
+#: ../libview/ev-view-presentation.c:969
+msgid "End of presentation. Click to exit."
+msgstr "จบงานนำเสนอ กรุณาคลิกเพื่อปิด"
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "ไปยังหน้าแรก"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "ไปยังหน้าก่อนหน้านี้"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "ไปยังหน้าถัดไป"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "ไปยังหน้าสุดท้าย"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "ไปยังหน้าที่กำหนด"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "หา"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "ไปยังหน้า %s"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "ไปยัง %s ในแฟ้ม “%s”"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "ไปยังแฟ้ม “%s”"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "เรียก %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "หา:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5127
+msgid "Find Pre_vious"
+msgstr "หา_ก่อนหน้า"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "หาข้อความเดิมถอยหลัง"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5125
+msgid "Find Ne_xt"
+msgstr "ค้นหา_ต่อไป"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "หาข้อความเดิมต่อไป"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "ตัวพิมพ์ใหญ่-เ_ล็กตรงกัน"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "สลับการค้นหาโดยตัวพิมพ์ใหญ่-เล็กตรงกัน"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "รหัสผ่านสำหรับเอกสาร %s"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "กำลังแปลง %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "แปลงเอกสารแล้ว %d ฉบับจาก %d ฉบับ"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "กำลังแปลงข้อมูลกำกับ"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"ฟอร์แมตของข้อมูลกำกับที่ Evince ใช้มีการเปลี่ยนแปลง จึงต้องมีการแปลงเพื่อย้ายระบบ "
+"ถ้าการย้ายระบบถูกยกเลิก ข้อมูลกำกับจะใช้การไม่ได้"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "เปิดเอกสารล่าสุด"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "เอกสารนี้ถูกล็อคไว้ และจะอ่านได้เมื่อใส่รหัสผ่านที่ถูกต้อง"
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "_เลิกล็อคเอกสาร"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "ป้อนรหัสผ่าน"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "ต้องการรหัสผ่าน"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "เอกสาร “%s” ถูกล็อคและต้องใช้รหัสผ่านในการเปิด"
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "_รหัสผ่าน:"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "_ทิ้งรหัสผ่านทันที"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "_จำรหัสผ่านไว้ใช้จนกว่าจะออกจากระบบ"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "จำรหัสผ่านไว้ต_ลอดไป"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "คุณสมบัติ"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "ทั่วไป"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "แบบอักษร"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "สัญญาอนุญาตของเอกสาร"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "แบบอักษร"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "กำลังอ่านข้อมูลแบบอักษร… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "เงื่อนไขการใช้งาน"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "เนื้อหาสัญญาอนุญาต"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "ข้อมูลเพิ่มเติม"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "แฟ้มแนบ"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "ชั้นเอกสาร"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "พิมพ์…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "ดัชนี"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "ภาพย่อ"
+
+#: ../shell/ev-window.c:835
+#, c-format
+msgid "Page %s — %s"
+msgstr "หน้า %s — %s"
+
+#: ../shell/ev-window.c:837
+#, c-format
+msgid "Page %s"
+msgstr "หน้า %s"
+
+#: ../shell/ev-window.c:1297
+msgid "The document contains no pages"
+msgstr "เอกสารไม่มีเนื้อหาสักหน้า"
+
+#: ../shell/ev-window.c:1300
+msgid "The document contains only empty pages"
+msgstr "เอกสารมีแต่หน้าเปล่า"
+
+#: ../shell/ev-window.c:1494 ../shell/ev-window.c:1660
+msgid "Unable to open document"
+msgstr "ไม่สามารถเปิดเอกสารได้"
+
+#: ../shell/ev-window.c:1631
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "กำลังโหลดเอกสารจาก “%s”"
+
+#: ../shell/ev-window.c:1773 ../shell/ev-window.c:2051
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "กำลังดาวน์โหลดเอกสาร (%d%%)"
+
+#: ../shell/ev-window.c:1806
+msgid "Failed to load remote file."
+msgstr "อ่านแฟ้มในเครือข่ายไม่สำเร็จ"
+
+#: ../shell/ev-window.c:1995
+#, c-format
+msgid "Reloading document from %s"
+msgstr "กำลังอ่านเอกสารใหม่จาก %s"
+
+#: ../shell/ev-window.c:2027
+msgid "Failed to reload document."
+msgstr "ไม่สามารถอ่านเอกสารใหม่"
+
+#: ../shell/ev-window.c:2182
+msgid "Open Document"
+msgstr "เปิดเอกสาร"
+
+#: ../shell/ev-window.c:2480
+#, c-format
+msgid "Saving document to %s"
+msgstr "กำลังบันทึกเอกสารลงที่ %s"
+
+#: ../shell/ev-window.c:2483
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "กำลังบันทึกแฟ้มแนบลงที่ %s"
+
+#: ../shell/ev-window.c:2486
+#, c-format
+msgid "Saving image to %s"
+msgstr "กำลังบันทึกภาพลงที่ %s"
+
+#: ../shell/ev-window.c:2530 ../shell/ev-window.c:2630
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "ไม่สามารถบันทึกแฟ้มนี้เป็น “%s” ได้"
+
+#: ../shell/ev-window.c:2561
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "กำลังอัปโหลดเอกสาร (%d%%)"
+
+#: ../shell/ev-window.c:2565
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "กำลังอัปโหลดแฟ้มแนบ (%d%%)"
+
+#: ../shell/ev-window.c:2569
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "กำลังอัปโหลดภาพ (%d%%)"
+
+#: ../shell/ev-window.c:2693
+msgid "Save a Copy"
+msgstr "บันทึกสำเนา"
+
+#: ../shell/ev-window.c:2961
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d งานค้างอยู่ในคิว"
+
+#: ../shell/ev-window.c:3074
+#, c-format
+msgid "Printing job “%s”"
+msgstr "กำลังพิมพ์งาน “%s”"
+
+#: ../shell/ev-window.c:3286
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "จะรอจนกระทั่งพิมพ์งาน “%s” เสร็จแล้วจึงปิดหรือไม่?"
+
+#: ../shell/ev-window.c:3289
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "มีงานพิมพ์ %d งานที่กำลังทำอยู่ จะรอจนกระทั่งพิมพ์เสร็จแล้วจึงปิดหรือไม่?"
+
+#: ../shell/ev-window.c:3301
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "ถ้าคุณปิดหน้าต่าง ก็จะไม่พิมพ์งานพิมพ์ที่ค้างอยู่"
+
+#: ../shell/ev-window.c:3305
+msgid "Cancel _print and Close"
+msgstr "ยกเลิ_กงานพิมพ์แล้วปิด"
+
+#: ../shell/ev-window.c:3309
+msgid "Close _after Printing"
+msgstr "_พิมพ์เสร็จแล้วจึงปิด"
+
+#: ../shell/ev-window.c:3899
+msgid "Toolbar Editor"
+msgstr "แก้ไขแถบเครื่องมือ"
+
+#: ../shell/ev-window.c:4038
+msgid "There was an error displaying help"
+msgstr "เกิดข้อผิดพลาดขณะแสดงเอกสารวิธีใช้"
+
+#: ../shell/ev-window.c:4250
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"โปรแกรมดูเอกสาร\n"
+"อาศัย %s (%s)"
+
+#: ../shell/ev-window.c:4281
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince เป็นซอฟต์แวร์เสรี คุณสามารถแจกจ่ายต่อ และ/หรือ แก้ไขโปรแกรมได้ ภายใต้เงื่อนไขของ "
+"GNU General Public License ที่เผยแพร่โดยมูลนิธิซอฟต์แวร์เสรี ไม่ว่าจะเป็นสัญญาอนุญาตรุ่นที่ 2 "
+"หรือรุ่นถัดมา (ตามแต่คุณจะเลือก)\n"
+
+#: ../shell/ev-window.c:4285
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince เผยแพร่ด้วยความหวังว่าโปรแกรมจะมีประโยชน์ แต่ _ไม่มีการรับประกันใดๆ_ "
+"ไม่มีแม้การรับประกัน _อรรถประโยชน์เชิงพาณิชย์_ หรือ "
+"_ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะกิจใดๆ_ กรุณาอ่าน GNU General Public License "
+"เพื่อดูรายละเอียดเพิ่มเติม\n"
+
+#: ../shell/ev-window.c:4289
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"คุณควรจะได้รับสำเนาของ GNU General Public License มาพร้อมกับ Evince ถ้าคุณไม่ได้รับ "
+"กรุณาติดต่อไปที่ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, "
+"Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4314
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4317
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 ผู้จัดทำ Evince"
+
+#: ../shell/ev-window.c:4323
+msgid "translator-credits"
+msgstr ""
+"Isriya Paireepairit <[email protected]>\n"
+"Theppitak Karoonboonyanan <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4597
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "พบ %d แห่งในหน้านี้"
+
+#: ../shell/ev-window.c:4605
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "ยังเหลืออีก %3d%% ในการค้นหา"
+
+#: ../shell/ev-window.c:5093
+msgid "_File"
+msgstr "แ_ฟ้ม"
+
+#: ../shell/ev-window.c:5094
+msgid "_Edit"
+msgstr "แ_ก้ไข"
+
+#: ../shell/ev-window.c:5095
+msgid "_View"
+msgstr "_มุมมอง"
+
+#: ../shell/ev-window.c:5096
+msgid "_Go"
+msgstr "_ไป"
+
+#: ../shell/ev-window.c:5097
+msgid "_Help"
+msgstr "_วิธีใช้"
+
+#. File menu
+#: ../shell/ev-window.c:5100 ../shell/ev-window.c:5365
+msgid "_Open…"
+msgstr "_เปิด…"
+
+#: ../shell/ev-window.c:5101 ../shell/ev-window.c:5366
+msgid "Open an existing document"
+msgstr "เปิดเอกสาร"
+
+#: ../shell/ev-window.c:5103
+msgid "Op_en a Copy"
+msgstr "เปิด_สำเนา"
+
+#: ../shell/ev-window.c:5104
+msgid "Open a copy of the current document in a new window"
+msgstr "เปิดสำเนาของเอกสารปัจจุบันในหน้าต่างใหม่"
+
+#: ../shell/ev-window.c:5106
+msgid "_Save a Copy…"
+msgstr "_บันทึกสำเนา…"
+
+#: ../shell/ev-window.c:5107
+msgid "Save a copy of the current document"
+msgstr "บันทึกสำเนาของเอกสารปัจจุบัน"
+
+#: ../shell/ev-window.c:5109
+msgid "_Print…"
+msgstr "_พิมพ์…"
+
+#: ../shell/ev-window.c:5112
+msgid "P_roperties"
+msgstr "คุณ_สมบัติ"
+
+#: ../shell/ev-window.c:5120
+msgid "Select _All"
+msgstr "เลือกทั้ง_หมด"
+
+#: ../shell/ev-window.c:5122
+msgid "_Find…"
+msgstr "_หา…"
+
+#: ../shell/ev-window.c:5123
+msgid "Find a word or phrase in the document"
+msgstr "ค้นหาคำหรือวลีในเอกสาร"
+
+#: ../shell/ev-window.c:5129
+msgid "T_oolbar"
+msgstr "แถบเ_ครื่องมือ"
+
+#: ../shell/ev-window.c:5131
+msgid "Rotate _Left"
+msgstr "หมุน_ซ้าย"
+
+#: ../shell/ev-window.c:5133
+msgid "Rotate _Right"
+msgstr "หมุน_ขวา"
+
+#: ../shell/ev-window.c:5144
+msgid "_Reload"
+msgstr "_อ่านใหม่"
+
+#: ../shell/ev-window.c:5145
+msgid "Reload the document"
+msgstr "อ่านเอกสารใหม่"
+
+#: ../shell/ev-window.c:5148
+msgid "Auto_scroll"
+msgstr "เ_ลื่อนจออัตโนมัติ"
+
+#: ../shell/ev-window.c:5158
+msgid "_First Page"
+msgstr "หน้าแ_รก"
+
+#: ../shell/ev-window.c:5159
+msgid "Go to the first page"
+msgstr "ไปยังหน้าแรก"
+
+#: ../shell/ev-window.c:5161
+msgid "_Last Page"
+msgstr "หน้าสุด_ท้าย"
+
+#: ../shell/ev-window.c:5162
+msgid "Go to the last page"
+msgstr "ไปยังหน้าสุดท้าย"
+
+#. Help menu
+#: ../shell/ev-window.c:5166
+msgid "_Contents"
+msgstr "เ_นื้อหา"
+
+#: ../shell/ev-window.c:5169
+msgid "_About"
+msgstr "เ_กี่ยวกับ"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5173
+msgid "Leave Fullscreen"
+msgstr "เลิกแสดงเต็มจอ"
+
+#: ../shell/ev-window.c:5174
+msgid "Leave fullscreen mode"
+msgstr "ออกจากการแสดงผลเต็มจอ"
+
+#: ../shell/ev-window.c:5176
+msgid "Start Presentation"
+msgstr "เริ่มนำเสนอ"
+
+#: ../shell/ev-window.c:5177
+msgid "Start a presentation"
+msgstr "เริ่มนำเสนอเอกสาร"
+
+#. View Menu
+#: ../shell/ev-window.c:5236
+msgid "_Toolbar"
+msgstr "แถบเ_ครื่องมือ"
+
+#: ../shell/ev-window.c:5237
+msgid "Show or hide the toolbar"
+msgstr "แสดงหรือซ่อนแถบเครื่องมือ"
+
+#: ../shell/ev-window.c:5239
+msgid "Side _Pane"
+msgstr "แถบ_ข้าง"
+
+#: ../shell/ev-window.c:5240
+msgid "Show or hide the side pane"
+msgstr "แสดงหรือซ่อนแถบข้าง"
+
+#: ../shell/ev-window.c:5242
+msgid "_Continuous"
+msgstr "แสดง_หน้าต่อกัน"
+
+#: ../shell/ev-window.c:5243
+msgid "Show the entire document"
+msgstr "แสดงทั้งเอกสาร"
+
+#: ../shell/ev-window.c:5245
+msgid "_Dual"
+msgstr "_หน้าคู่"
+
+#: ../shell/ev-window.c:5246
+msgid "Show two pages at once"
+msgstr "แสดงครั้งละสองหน้า"
+
+#: ../shell/ev-window.c:5248
+msgid "_Fullscreen"
+msgstr "เต็_มจอ"
+
+#: ../shell/ev-window.c:5249
+msgid "Expand the window to fill the screen"
+msgstr "ขยายขนาดหน้าต่างให้เต็มหน้าจอ"
+
+#: ../shell/ev-window.c:5251
+msgid "Pre_sentation"
+msgstr "นำเ_สนอ"
+
+#: ../shell/ev-window.c:5252
+msgid "Run document as a presentation"
+msgstr "แสดงเอกสารแบบนำเสนอ"
+
+#: ../shell/ev-window.c:5260
+msgid "_Inverted Colors"
+msgstr "_กลับสี"
+
+#: ../shell/ev-window.c:5261
+msgid "Show page contents with the colors inverted"
+msgstr "แสดงเนื้อหาของหน้าเอกสารโดยกลับสี"
+
+#. Links
+#: ../shell/ev-window.c:5269
+msgid "_Open Link"
+msgstr "_เปิดลิงก์"
+
+#: ../shell/ev-window.c:5271
+msgid "_Go To"
+msgstr "_ไป"
+
+#: ../shell/ev-window.c:5273
+msgid "Open in New _Window"
+msgstr "เปิดในหน้า_ต่างใหม่"
+
+#: ../shell/ev-window.c:5275
+msgid "_Copy Link Address"
+msgstr "_คัดลอกที่อยู่ลิงก์"
+
+#: ../shell/ev-window.c:5277
+msgid "_Save Image As…"
+msgstr "_บันทึกภาพเป็น…"
+
+#: ../shell/ev-window.c:5279
+msgid "Copy _Image"
+msgstr "คัดลอก_ภาพ"
+
+#: ../shell/ev-window.c:5284
+msgid "_Open Attachment"
+msgstr "_เปิดแฟ้มแนบ"
+
+#: ../shell/ev-window.c:5286
+msgid "_Save Attachment As…"
+msgstr "_บันทึกแฟ้มแนบเป็น…"
+
+#: ../shell/ev-window.c:5339
+msgid "Zoom"
+msgstr "ย่อ-ขยาย"
+
+#: ../shell/ev-window.c:5341
+msgid "Adjust the zoom level"
+msgstr "ปรับอัตราส่วนย่อ-ขยาย"
+
+#: ../shell/ev-window.c:5351
+msgid "Navigation"
+msgstr "เส้นทางการอ่าน"
+
+#: ../shell/ev-window.c:5353
+msgid "Back"
+msgstr "ย้อนกลับ"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5356
+msgid "Move across visited pages"
+msgstr "เปลี่ยนไปมาในหน้าที่อ่านมาแล้ว"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5386
+msgid "Previous"
+msgstr "ถอย"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5391
+msgid "Next"
+msgstr "เดินหน้า"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5395
+msgid "Zoom In"
+msgstr "ขยาย"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5399
+msgid "Zoom Out"
+msgstr "ย่อ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5407
+msgid "Fit Width"
+msgstr "เท่าความกว้าง"
+
+#: ../shell/ev-window.c:5568 ../shell/ev-window.c:5585
+msgid "Unable to launch external application."
+msgstr "ไม่สามารถเรียกโปรแกรมภายนอก"
+
+#: ../shell/ev-window.c:5642
+msgid "Unable to open external link"
+msgstr "ไม่สามารถเปิดลิงก์ภายนอก"
+
+#: ../shell/ev-window.c:5809
+msgid "Couldn't find appropriate format to save image"
+msgstr "หารูปแบบที่เหมาะสมสำหรับบันทึกรูปภาพไม่ได้"
+
+#: ../shell/ev-window.c:5851
+msgid "The image could not be saved."
+msgstr "ไม่สามารถบันทึกภาพ"
+
+#: ../shell/ev-window.c:5883
+msgid "Save Image"
+msgstr "บันทึกภาพ"
+
+#: ../shell/ev-window.c:5950
+msgid "Unable to open attachment"
+msgstr "ไม่สามารถเปิดแฟ้มแนบ"
+
+#: ../shell/ev-window.c:6003
+msgid "The attachment could not be saved."
+msgstr "ไม่สามารถบันทึกแฟ้มแนบ"
+
+#: ../shell/ev-window.c:6048
+msgid "Save Attachment"
+msgstr "บันทึกแฟ้มแนบ"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — ต้องการรหัสผ่าน"
+
+#: ../shell/ev-utils.c:317
+msgid "By extension"
+msgstr "ตามนามสกุล"
+
+#: ../shell/main.c:72 ../shell/main.c:277
+msgid "MATE Document Viewer"
+msgstr "โปรแกรมดูเอกสารของ MATE"
+
+#: ../shell/main.c:80
+msgid "The page label of the document to display."
+msgstr "ป้ายชื่อของหน้าเอกสารที่จะแสดง"
+
+#: ../shell/main.c:80
+msgid "PAGE"
+msgstr "PAGE"
+
+#: ../shell/main.c:81
+msgid "The page number of the document to display."
+msgstr "เลขหน้าเอกสารที่จะแสดง"
+
+#: ../shell/main.c:81
+msgid "NUMBER"
+msgstr "NUMBER"
+
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr "เรียก evince ในแบบเต็มจอ"
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr "เรียก evince ในแบบนำเสนอ"
+
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr "เรียก evince สำหรับแสดงตัวอย่างเอกสาร"
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr "คำหรือวลีที่จะค้นหาในเอกสาร"
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "STRING"
+
+#: ../shell/main.c:89
+msgid "[FILE…]"
+msgstr "[FILE…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr "ค่าบูลีน ค่าจริงหมายถึงเปิดใช้การแสดงภาพย่อ และค่าเท็จหมายถึงปิดการแสดงภาพย่อภาพใหม่"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "เปิดใช้การแสดงภาพย่อของเอกสาร PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "คำสั่งย่อภาพสำหรับเอกสาร PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"คำสั่งพร้อมอาร์กิวเมนต์สำหรับการแสดงภาพย่อของเอกสาร PDF "
+"อ่านข้อมูลเพิ่มเติมได้จากเอกสารตัวแสดงภาพย่อของ Caja"
+
+#~ msgid "Page Set_up…"
+#~ msgstr "_ตั้งค่าหน้ากระดาษ…"
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "ตั้งค่าหน้ากระดาษสำหรับการพิมพ์"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "เอกสาร DJVU มีรูปแบบไม่ถูกต้อง"
+
+#~ msgid "Print..."
+#~ msgstr "พิมพ์..."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "_บันทึกสำเนา..."
+
+#~ msgid "_Print..."
+#~ msgstr "_พิมพ์..."
+
+#~ msgid "_Find..."
+#~ msgstr "_หา..."
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "ไม่สามารถสร้างแฟ้ม “%s”: %s"
+
+#~ msgid "Search string"
+#~ msgstr "ข้อความที่ค้นหา"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "ชื่อของข้อความที่จะหา"
+
+#~ msgid "Case sensitive"
+#~ msgstr "ตัวพิมพ์ใหญ่-เล็กตรงกัน"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "เลือกจริง สำหรับการค้นหาโดยตัวพิมพ์ใหญ่-เล็กตรงกัน"
+
+#~ msgid "Highlight color"
+#~ msgstr "สีในการเน้นคำ"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "สีที่ใช้เน้นคำที่เจอทั้งหมด"
+
+#~ msgid "Current color"
+#~ msgstr "สีปัจจุบัน"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "สีที่ใช้เน้นคำที่เจอและกำลังเลือก"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "จะเรียกเอกสารเดิมคืนมาหรือไม่?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr ""
+#~ "ดูเหมือน Evince จะจบการทำงานกลางคันในครั้งก่อนที่เรียก "
+#~ "คุณสามารถเรียกเปิดเอกสารเดิมที่เปิดไว้ได้"
+
+#~ msgid "_Don't Recover"
+#~ msgstr "ไ_ม่ต้องเรียกคืน"
+
+#~ msgid "_Recover"
+#~ msgstr "เ_รียกคืน"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "การเรียกคืนจากการพัง"
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "ไม่สามารถสร้างลิงก์สัญลักษณ์ “%s”: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "ไม่สามารถเปิดสำเนา"
+
+#~ msgid "Co_nnect"
+#~ msgstr "เ_ชื่อมต่อ"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "เชื่อมต่อแบบ_นิรนาม"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "เชื่อมต่อในนา_มผู้ใช้:"
+
+#~ msgid "_Username:"
+#~ msgstr "_ชื่อผู้ใช้:"
+
+#~ msgid "_Domain:"
+#~ msgstr "โ_ดเมน:"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "_ทิ้งรหัสผ่านทันที"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "_จำรหัสผ่านไว้ใช้จนกว่าจะออกจากระบบ"
+
+#~ msgid "_Remember forever"
+#~ msgstr "จำรหัสผ่านไว้ต_ลอดไป"
+
+#~ msgid "File not available"
+#~ msgstr "ไมมีแฟ้มนี้อยู่"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "ไม่รองรับแฟ้มในเครือข่าย"
+
+#~ msgid "Password Entry"
+#~ msgstr "ช่องป้อนรหัสผ่าน"
+
+#~ msgid "Remember password for this session"
+#~ msgstr "จำรหัสผ่านไว้ใช้ในวาระนี้"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "บันทึกรหัสผ่านลงในพวงกุญแจ"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f นิ้ว"
+
+#~ msgid "Find Previous"
+#~ msgstr "หาก่อนหน้า"
+
+#~ msgid "Find Next"
+#~ msgstr "หาต่อ"
+
+#~ msgid "Incorrect password"
+#~ msgstr "รหัสผ่านไม่ถูกต้อง"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Evince: โปรแกรมดูเอกสาร"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "Letter"
+
+#~ msgid "Tabloid"
+#~ msgstr "Tabloid"
+
+#~ msgid "Ledger"
+#~ msgstr "Ledger"
+
+#~ msgid "Legal"
+#~ msgstr "Legal"
+
+#~ msgid "Statement"
+#~ msgstr "Statement"
+
+#~ msgid "Executive"
+#~ msgstr "Executive"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Folio"
+
+#~ msgid "Quarto"
+#~ msgstr "Quarto"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "ไม่สามารถเปิดแฟ้ม “%s”"
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr ""
+#~ "ไม่สามารถเปิดเอกสาร “%s” ได้ เนื่องจากไม่พบโปรแกรมแปลคำสั่ง Ghostscript "
+#~ "ในพาธโปรแกรม"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "โพสต์สคริปต์เข้าแคปซูล"
+
+#~ msgid "PostScript"
+#~ msgstr "โพสต์สคริปต์"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "ตัวตีความล้มเหลว"
+
+#~ msgid "Failed to get info for document"
+#~ msgstr "ไม่สามารถอ่านชนิดเอกสารได้"
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "ชนิด MIME ไม่รองรับ: “%s”"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "ไม่รองรับการสร้าง PDF"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "คุณได้พยายามพิมพ์โดยเครื่องพิมพ์ที่ใช้ไดรเวอร์ “%s” โปรแกรมนี้ต้องการไดรเวอร์เครื่องพิมพ์แบบ "
+#~ "PostScript"
+
+#~ msgid "Pages"
+#~ msgstr "หน้า"
+
+#~ msgid "Invalid URI: “%s”"
+#~ msgstr "URI ใช้การไม่ได้: “%s”"
+
+#~ msgid "Unsupported URI: “%s”"
+#~ msgstr "ไม่รองรับ URI: “%s”"
+
+#~ msgid "Error: dvipdfm exited with non-zero status."
+#~ msgstr "ผิดพลาด: dvipdfm จบการทำงานด้วยค่าที่ไม่ใช่ศูนย์"
+
+#~ msgid "Images"
+#~ msgstr "รูปภาพ"
+
+#~ msgid "Open “%s”"
+#~ msgstr "แสดงแถบ “%s”"
+
+#~ msgid "Empty"
+#~ msgstr "ไม่มี"
+
+#~ msgid "No document loaded."
+#~ msgstr "เอกสารไม่ถูกอ่าน"
+
+#~ msgid "File is not readable."
+#~ msgstr "แฟ้มไม่สามารถอ่านได้"
+
+#~ msgid "Document loaded."
+#~ msgstr "อ่านเรียกเอกสารเรียบร้อย"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "Broken pipe."
+#~ msgstr "ไปป์พัง"
+
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "เกิดข้อผิดพลาดขณะขยายการบีบอัดแฟ้ม “%s”:\n"
+
+#~ msgid "unexpected EOF\n"
+#~ msgstr "พบ EOF กลางคัน\n"
+
+#~ msgid "could not load font `%s'\n"
+#~ msgstr "ไม่สามารถอ่านแบบอักษร `%s'\n"
+
+#~ msgid "could not reload `%s'\n"
+#~ msgstr "ไม่สามารถเรียก `%s' ใหม่\n"
+
+#~ msgid "%s: unsupported DVI format (version %u)\n"
+#~ msgstr "%s: ไม่รองรับฟอร์แมต DVI (รุ่น %u)\n"
+
+#~ msgid "no pages selected\n"
+#~ msgstr "ไม่ได้เลือกหน้าใดไว้\n"
+
+#~ msgid "%s: File corrupted, or not a DVI file\n"
+#~ msgstr "%s: แฟ้มมีปัญหา หรือไม่ใช่แฟ้มแบบ DVI\n"
+
+#~ msgid "%s: vf macro had errors\n"
+#~ msgstr "%s: vf macro ผิดพลาด\n"
+
+#~ msgid "%s: stack not empty after vf macro\n"
+#~ msgstr "%s: สแต็กมีข้อมูลค้างหลังจบ vf macro\n"
+
+#~ msgid "%s: could not reopen file (%s)\n"
+#~ msgstr "%s: ไม่สามารถเปิดแฟ้ม (%s) ใหม่ได้\n"
+
+#~ msgid "%s: page %d out of range\n"
+#~ msgstr "%s: หน้า %d ออกนอกช่วง\n"
+
+#~ msgid "%s: bad offset at page %d\n"
+#~ msgstr "%s: ออฟเซ็ตไม่ถูกต้องที่หน้า %d\n"
+
+#~ msgid "stack not empty at end of page\n"
+#~ msgstr "สแต็กมีข้อมูลค้างหลังจบหน้า\n"
+
+#~ msgid "no default font set yet\n"
+#~ msgstr "ไม่ได้ตั้งแบบอักษรปริยายไว้\n"
+
+#~ msgid "requested character %d does not exist in `%s'\n"
+#~ msgstr "ตัวอักษร %d ที่ต้องการ ไม่ปรากฏใน `%s'\n"
+
+#~ msgid "enlarging stack\n"
+#~ msgstr "กำลังขยายขนาดสแต็ก\n"
+
+#~ msgid "stack underflow\n"
+#~ msgstr "สแต็กไม่มีข้อมูลให้อ่าน\n"
+
+#~ msgid "font %d is not defined\n"
+#~ msgstr "ไม่ได้กำหนดแบบอักษร %d\n"
+
+#~ msgid "font %d is not defined in postamble\n"
+#~ msgstr "ไม่ได้กำหนดฟอนต์ %d ใน postamble\n"
+
+#~ msgid "unexpected opcode %d\n"
+#~ msgstr "opcode %d ผิดตำแหน่ง\n"
+
+#~ msgid "undefined opcode %d\n"
+#~ msgstr "opcode %d ไม่รู้จัก\n"
+
+#~ msgid "%s: no fonts defined\n"
+#~ msgstr "%s: ไม่ได้กำหนดแบบอักษรไว้\n"
+
+#~ msgid "%s: %d: [%s] requested encoding `%s' does not match vector `%s'\n"
+#~ msgstr "%s: %d: [%s] รหัสอักขระ `%s' ที่ร้องขอ ไม่ตรงกับเวกเตอร์ `%s'\n"
+
+#~ msgid "%s: could not load fontmap\n"
+#~ msgstr "%s: ไม่สามารถอ่าน fontmap\n"
+
+#~ msgid "%s: could not set as default encoding\n"
+#~ msgstr "%s: ไม่สามารถตั้งเป็นรหัสอักขระปริยาย\n"
+
+#~ msgid "encoding vector `%s' is in use\n"
+#~ msgstr "เวกเตอร์รหัสอักขระ `%s' กำลังใช้งานอยู่\n"
+
+#~ msgid "GF: invalid opcode %d in character %d\n"
+#~ msgstr "GF: opcode %d ไม่ถูกต้องในอักขระ %d\n"
+
+#~ msgid "(gf) Character %d: invalid opcode %d\n"
+#~ msgstr "(gf) อักขระ %d: opcode %d ไม่ถูกต้อง\n"
+
+#~ msgid "(gf) character %d has an incorrect bounding box\n"
+#~ msgstr "(gf) อักขระ %d มีกรอบวาดไม่ถูกต้อง\n"
+
+#~ msgid "%s: bad checksum (expected %u, found %u)\n"
+#~ msgstr "%s: checksum ผิดพลาด (ต้องการ %u แต่พบ %u)\n"
+
+#~ msgid "%s: junk in postamble\n"
+#~ msgstr "%s: มีขยะใน postamble\n"
+
+#~ msgid "%s: File corrupted, or not a GF file\n"
+#~ msgstr "%s: แฟ้มมีปัญหา หรือไม่ใช่แฟ้มแบบ GF\n"
+
+#~ msgid "garbage after DVI page specification ignored\n"
+#~ msgstr "จะละเลยขยะหลังข้อกำหนดหน้าของ DVI\n"
+
+#~ msgid "more than 10 counters in page specification\n"
+#~ msgstr "more than 10 counters in page specification\n"
+
+#~ msgid "garbage after TeX page specification ignored\n"
+#~ msgstr "จะละเลยขยะหลังข้อกำหนดหน้าของ TeX\n"
+
+#~ msgid "custom"
+#~ msgstr "กำหนดเอง"
+
+#~ msgid "Bad PK file: More bits than required\n"
+#~ msgstr "แฟ้ม PK ผิดพลาด: มีจำนวนบิตมากกว่าที่ต้องการ\n"
+
+#~ msgid "%s: checksum mismatch (expected %u, got %u)\n"
+#~ msgstr "%s: checksum ไม่ตรง (ต้องการ %u แต่ได้ %u)\n"
+
+#~ msgid "%s: unexpected preamble\n"
+#~ msgstr "%s: พบ postamble ที่ไม่ต้องการ\n"
+
+#~ msgid "%s: unexpected end of file (no postamble)\n"
+#~ msgstr "%s: แฟ้มจบกลางคัน (ไม่มี postamble)\n"
+
+#~ msgid "invalid PK file! (junk in postamble)\n"
+#~ msgstr "แฟ้ม PK ผิดพลาด! (มีขยะใน postamble)\n"
+
+#~ msgid "%s: File corrupted, or not a PK file\n"
+#~ msgstr "%s: แฟ้มมีปัญหา หรือไม่ใช่แฟ้มแบบ PK\n"
+
+#~ msgid "%s: malformed value for key `%s'\n"
+#~ msgstr "%s: รูปแบบผิดพลาดในคีย์ `%s'\n"
+
+#~ msgid "%s: unknown key `%s' ignored\n"
+#~ msgstr "%s: จะละเลยคีย์ `%s' ซึ่งไม่รู้จัก\n"
+
+#~ msgid "%s: no argument for key `%s', using defaults\n"
+#~ msgstr "%s: ไม่มีอาร์กิวเมนต์สำหรับคีย์ `%s' จะใช้ค่าปริยาย\n"
+
+#~ msgid "%s: argument `%s' ignored for key `%s'\n"
+#~ msgstr "%s: จะละเลยอาร์กิวเมนต์ `%s' สำหรับคีย์ `%s'\n"
+
+#~ msgid "%s: tried to pop top level layer\n"
+#~ msgstr "%s: พยายามจะ pop เลเยอร์บนสุด\n"
+
+#~ msgid "(t1) failed to reset device resolution\n"
+#~ msgstr "(t1) ไม่สามารถตั้งค่าความละเอียดของอุปกรณ์ใหม่ได้\n"
+
+#~ msgid "%s: could not encode font\n"
+#~ msgstr "%s: ไม่สามารถลงรหัสอักขระแบบอักษร\n"
+
+#~ msgid "(t1) unsupported bitmap pad size %d\n"
+#~ msgstr "(t1) ไม่รองรับขนาดเติมเต็มบิตแมป %d\n"
+
+#~ msgid "%s: Checksum mismatch (got %u, expected %u)\n"
+#~ msgstr "%s: checksum ไม่ตรง (ได้ %u แต่ต้องการ %u)\n"
+
+#~ msgid "%s: Error reading AFM data\n"
+#~ msgstr "%s: เกิดข้อผิดพลาดขณะอ่านแฟ้ม AFM\n"
+
+#~ msgid "Warning: TFM file `%s' has suspicious size\n"
+#~ msgstr "คำเตือน: แฟ้ม TFM `%s' มีขนาดผิดปกติ\n"
+
+#~ msgid "%s: font coding scheme truncated to 40 bytes\n"
+#~ msgstr "%s: แนวการลงรหัสแบบอักษรจะถูกตัดทอนลงเหลือ 40 ไบต์\n"
+
+#~ msgid "%s: File corrupted, or not a TFM file\n"
+#~ msgstr "%s: แฟ้มมีปัญหา หรือไม่ใช่แฟ้มแบบ TFM\n"
+
+#~ msgid "(tt) %s: could not load face: %s\n"
+#~ msgstr "(tt) %s: ไม่สามารถอ่าน face: %s\n"
+
+#~ msgid "(tt) %s: could not create face: %s\n"
+#~ msgstr "(tt) %s: ไม่สามารถสร้าง face: %s\n"
+
+#~ msgid "(tt) %s: could not create glyph: %s\n"
+#~ msgstr "(tt) %s: ไม่สามารถสร้าง glyph %s\n"
+
+#~ msgid "(tt) %s: no acceptable map found, using #0\n"
+#~ msgstr "(tt) %s: ไม่พบ map ที่ใช้ได้ จะใช้ #0\n"
+
+#~ msgid "(tt) %s: could not set resolution: %s\n"
+#~ msgstr "(tt) %s: ไม่สามารถกำหนดความละเอียด: %s\n"
+
+#~ msgid "(tt) %s: could not set point size: %s\n"
+#~ msgstr "(tt) %s: ไม่สามารถกำหนดขนาดพอยนต์: %s\n"
+
+#~ msgid "(tt) %s: could not load PS name table\n"
+#~ msgstr "(tt) %s: ไม่สามารถอ่านตารางชื่อ PS\n"
+
+#~ msgid "%s: no encoding vector found, expect bad output\n"
+#~ msgstr "%s: ไม่พบเวกเตอร์รหัสอักขระ อาจได้ผลลัพธ์ผิดพลาด\n"
+
+#~ msgid "(tt) %s: no font metric data\n"
+#~ msgstr "(tt) %s: ไม่พบข้อมูลการกำหนดขนาดต่างๆ ในแบบอักษร\n"
+
+#~ msgid "Crashing"
+#~ msgstr "พัง"
+
+#~ msgid "%s: Error: "
+#~ msgstr "%s: ผิดพลาด: "
+
+#~ msgid "%s: Warning: "
+#~ msgstr "%s: คำเตือน: "
+
+#~ msgid "%s: Fatal: "
+#~ msgstr "%s: ผิดพลาดร้ายแรง: "
+
+#~ msgid "Fatal"
+#~ msgstr "ผิดพลาดร้ายแรง"
+
+#~ msgid "out of memory allocating %u bytes\n"
+#~ msgstr "หน่วยความจำไม่พอสำหรับการจองเนื้อที่ %u ไบต์\n"
+
+#~ msgid "attempted to reallocate with zero size\n"
+#~ msgstr "พยายามเปลี่ยนเนื้อที่จองด้วยขนาดศูนย์\n"
+
+#~ msgid "failed to reallocate %u bytes\n"
+#~ msgstr "ไม่สามารถเปลี่ยนเนื้อที่จองเป็น %u ไบต์\n"
+
+#~ msgid "attempted to callocate 0 members\n"
+#~ msgstr "พยายามจะจองสมาชิก 0 รายการ\n"
+
+#~ msgid "attempted to callocate %u members with size 0\n"
+#~ msgstr "พยายามจะจองเนื้อที่สะอาด (calloc) ให้กับสมาชิก %u รายการ ด้วยขนาด 0\n"
+
+#~ msgid "failed to allocate %ux%u bytes\n"
+#~ msgstr "ไม่สามารถจองเนื้อที่ %ux%u ไบต์\n"
+
+#~ msgid "attempted to free NULL pointer\n"
+#~ msgstr "พยายามจะคืนเนื้อที่ด้วยพอยน์เตอร์ NULL\n"
+
+#~ msgid "%s: Checksum mismatch (expected %u, got %u)\n"
+#~ msgstr "%s: checksum ไม่ตรง (ต้องการ %u แต่ได้ %u)\n"
+
+#~ msgid "(vf) %s: could not load font `%s'\n"
+#~ msgstr "(vf) %s: ไม่สามารถอ่านแบบอักษร `%s'\n"
+
+#~ msgid "(vf) %s: character %d redefined\n"
+#~ msgstr "(vf) %s: อักขระ %d ถูกกำหนดซ้ำ\n"
+
+#~ msgid "(vf) %s: no postamble\n"
+#~ msgstr "(vf) %s: ไม่มี postamble\n"
+
+#~ msgid "%s: File corrupted, or not a VF file.\n"
+#~ msgstr "%s: แฟ้มมีปัญหา หรือไม่ใช่แฟ้มแบบ VF\n"
+
+#~ msgid "_Previous"
+#~ msgstr "_ย้อนกลับ"
+
+#~ msgid "_Next"
+#~ msgstr "_ถัดไป"
+
+#~ msgid "Open '%s'"
+#~ msgstr "เปิด '%s'"
+
+#~ msgid "Not found"
+#~ msgstr "ไม่พบ"
+
+#~ msgid "The \"Find\" feature will not work with this document"
+#~ msgstr "ความสามารถ \"ค้นหา\" ใช้กับเอกสารนี้ไม่ได้"
+
+#~ msgid "Searching for text is only supported for PDF documents."
+#~ msgstr "การค้นหาข้อความใช้ได้กับเอกสารแบบ PDF เท่านั้น"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "Show toolbar by default"
+#~ msgstr "แสดงแถบเครื่องมือโดยปริยาย"
+
+#~ msgid ""
+#~ "Toolbar is the top bar that contains navigation and zoom controls. Two "
+#~ "boolean options, true makes toolbar visible by default while false makes "
+#~ "toolbar not visible by default."
+#~ msgstr ""
+#~ "แถบเครื่องมือเป็นแถบที่อยู่ด้านบน "
+#~ "แสดงปุ่มในการเลื่อนและการย่อขยายเอกสารค่าที่ใส่จะกำหนดค่าปริยายของการแสดงแถบสถานะ "
+#~ "ค่าจริงหมายถึงแสดงแถบข้างโดยปริยาย ส่วนค่าเท็จคือไม่แสดง"
+
+#~ msgid "Default sidebar size"
+#~ msgstr "ขนาดปริยายของแถบข้าง"
+
+#~ msgid "Show sidebar by default"
+#~ msgstr "แสดงแถบข้างโดยปริยาย"
+
+#~ msgid "Show statusbar by default"
+#~ msgstr "แสดงแถบสถานะโดยปริยาย"
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. The "
+#~ "default size sets the sidebar's width in pixels based from the side of "
+#~ "the window. Any integer will be accepted. The sidebar will never shrink "
+#~ "smaller than the size of the text required to display Thumbnails or "
+#~ "Index. Large values will cause the sidebar to take up as much of the page "
+#~ "display area as possible relative to the window's size."
+#~ msgstr ""
+#~ "แถบข้างมีหน้าที่แสดงรายการดัชนีและภาพขนาดย่อของแต่ละหน้าขนาดปริยายของแถบข้างนับเป็นพิกเซลจากขอบหน้าต่างโดยใส่เป็นเลขจำนวนเต็ม "
+#~ "แถบข้างไม่สามารถให้ย่อเล็กกว่าขนาดของตัวอักษรที่ใช้ในการแสดงภาพขนาดย่อหรือดัชนีถ้าใส่ค่านี้มากเกินไปจะทำให้แถบข้างกินเนื้อที่แสดงผลเอกสาร "
+#~ "ซึ่งขึ้นกับขนาดของหน้าต่างด้วย"
+
+#~ msgid ""
+#~ "Sidebar is the side item that contains the Index and Thumbnail lists. Two "
+#~ "boolean options, true makes sidebar visible by default while false makes "
+#~ "sidebar not visible by default"
+#~ msgstr ""
+#~ "แถบข้างมีหน้าที่แสดงรายการดัชนีและภาพขนาดย่อของแต่ละหน้าค่าที่ใส่จะกำหนดค่าปริยายของการแสดงแถบข้าง "
+#~ "ค่าจริงหมายถึงแสดงแถบข้างโดยปริยาย ส่วนค่าเท็จคือไม่แสดง"
+
+#~ msgid ""
+#~ "Statusbar is the standard bottom bar that display additional information "
+#~ "about links and other actions. Two boolean options, true makes the "
+#~ "statusbar visible by default while false makes sidebar not visible by "
+#~ "default."
+#~ msgstr ""
+#~ "แถบสถานะเป็นแถบที่อยู่ขอบล่างของหน้าต่าง "
+#~ "ทำหน้าที่แสดงข้อมูลเพิ่มเติมอื่นๆค่าที่ใส่จะกำหนดค่าปริยายของการแสดงแถบสถานะ "
+#~ "ค่าจริงหมายถึงแสดงแถบข้างโดยปริยาย ส่วนค่าเท็จคือไม่แสดง"
+
+#~ msgid "Unable to find glade file"
+#~ msgstr "ไม่สามารถค้นหาแฟ้ม glade"
+
+#~ msgid ""
+#~ "The glade file, %s, cannot be found. Please check that your installation "
+#~ "is complete."
+#~ msgstr "ไม่พบแฟ้มของ glade, %s กรุณาตรวจสอบการติดตั้งโปรแกรมว่าสมบูรณ์หรือไม่"
+
+#~ msgid "Document Viewer - Password Required"
+#~ msgstr "ตัวอ่านเอกสาร - ต้องการรหัสผ่าน"
+
+#~ msgid "Save the current document with a new filename"
+#~ msgstr "บันทึกเอกสารปัจจุบันเป็นแฟ้มใหม่"
+
+#~ msgid "View the properties of this document"
+#~ msgstr "แสดงข้อมูลคุณสมบัติของเอกสารนี้"
+
+#~ msgid "Close this window"
+#~ msgstr "ปิดหน้าต่างนี้"
+
+#~ msgid "Copy text from the document"
+#~ msgstr "คัดลอกข้อความจากเอกสาร"
+
+#~ msgid "Select the entire page"
+#~ msgstr "เลือกทั้งหน้า"
+
+#~ msgid "Customize the toolbar"
+#~ msgstr "ปรับแต่งแถบเครื่องมือ"
+
+#~ msgid "Rotate the document to the left"
+#~ msgstr "หมุนเอกสารไปทางซ้าย"
+
+#~ msgid "Rotate the document to the right"
+#~ msgstr "หมุนเอกสารไปทางขวา"
+
+#~ msgid "Display help for the viewer application"
+#~ msgstr "แสดงวิธีใช้ของตัวดูเอกสาร"
+
+#~ msgid "Display credits for the document viewer creators"
+#~ msgstr "แสดงรายชื่อผู้จัดทำโปรแกรม"
+
+#~ msgid "Scroll one page forward"
+#~ msgstr "เลื่อนหน้าไปข้างหน้าหนึ่งหน้า"
+
+#~ msgid "Scroll one page backward"
+#~ msgstr "เลื่อนหน้าถอยหลังหนึ่งหน้า"
+
+#~ msgid "Go ten pages backward"
+#~ msgstr "ถอยไปสิบหน้า"
+
+#~ msgid "Go ten pages forward"
+#~ msgstr "เดินหน้าไปสิบหน้า"
+
+#~ msgid "_Statusbar"
+#~ msgstr "แถบส_ถานะ"
+
+#~ msgid "Show or hide the statusbar"
+#~ msgstr "แสดงหรือซ่อนแถบสถานะ"
+
+#~ msgid "<span size=\"smaller\"> </span>"
+#~ msgstr "<span size=\"smaller\"> </span>"
+
+#~ msgid "Error while scanning file %s\n"
+#~ msgstr "เกิดข้อผิดพลาดขณะอ่านแฟ้ม %s\n"
+
+#~ msgid "The file is not a PostScript document."
+#~ msgstr "แฟ้มนี้ไม่ใช่เอกสารแบบ PostScript"
+
+#~ msgid "Reset the zoom level to the default value"
+#~ msgstr "ปรับระดับการขยายกลับมาที่ค่าปกติ"
+
+#~ msgid "Single"
+#~ msgstr "หน้าเดียว"
+
+#~ msgid "Show the document one page at a time"
+#~ msgstr "แสดงเอกสารครั้งละหน้า"
+
+#~ msgid "Multi"
+#~ msgstr "หลายหน้า"
+
+#~ msgid "Show the full document at once"
+#~ msgstr "แสดงเอกสารทั้งหมด"
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 00000000..f7ed30e3
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,1477 @@
+# Turkish translation for evince
+# Copyright (C) 2005 The Mate Foundation
+# This file is distributed under the same licence as the evince package.
+#
+# Bülent ŞENER <[email protected]>, 2005.
+# Baris Cicek <[email protected]>, 2005, 2006.
+# Serdar CICEK <[email protected]>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-09-09 22:29+0300\n"
+"PO-Revision-Date: 2009-09-09 22:28+0300\n"
+"Last-Translator: Baris Cicek <[email protected]>\n"
+"Language-Team: Turkish <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../backend/comics/comics-document.c:155
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr ""
+"Çizgi romanın sıkıştırmasını açmak için “%s” komutu başlatılırken hata: %s"
+
+#: ../backend/comics/comics-document.c:169
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Çizgi roman sıkıştırması açmak için “%s” komutu başarısız oldu."
+
+#: ../backend/comics/comics-document.c:178
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Komut “%s” normal olarak bitirilemedi."
+
+#: ../backend/comics/comics-document.c:225
+#, c-format
+msgid "Failed to create a temporary directory."
+msgstr "Geçici dizin oluşturmak başarısız oldu."
+
+#: ../backend/comics/comics-document.c:347
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Bir çizgi roman MIME türü değil: %s"
+
+#: ../backend/comics/comics-document.c:354
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "Bu tür çizgi roman sıkıştırması açmak için uygun komut bulunamıyor"
+
+#: ../backend/comics/comics-document.c:385
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Bilinmeyen MIME Türü"
+
+#: ../backend/comics/comics-document.c:412
+msgid "File corrupted"
+msgstr "Dosya bozulmuş"
+
+#: ../backend/comics/comics-document.c:424
+msgid "No files in archive"
+msgstr "Arşivde hiçbir dosya yok"
+
+#: ../backend/comics/comics-document.c:465
+#, c-format
+msgid "No images found in archive %s"
+msgstr "%s arşivinde hiçbir resim bulunamadı"
+
+#: ../backend/comics/comics-document.c:704
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "“%s” silerken hata oldu."
+
+#: ../backend/comics/comics-document.c:854
+#, c-format
+msgid "Error %s"
+msgstr "Hata %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Çizgi Romanlar"
+
+#: ../backend/djvu/djvu-document.c:174
+msgid "DJVU document has incorrect format"
+msgstr "DJVU belgesi geçersiz biçime sahip"
+
+#: ../backend/djvu/djvu-document.c:251
+msgid ""
+"The document is composed of several files. One or more of such files cannot "
+"be accessed."
+msgstr ""
+"Belge birkaç dosyadan oluşmuş. Bir ya da daha fazla dosyaya erişilemiyor."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Djvu Belgeleri"
+
+#: ../backend/dvi/dvi-document.c:108
+msgid "DVI document has incorrect format"
+msgstr "DVI belgesi geçersiz biçime sahip"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI Belgeleri"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:826
+msgid "Yes"
+msgstr "Evet"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:829
+msgid "No"
+msgstr "Hayır"
+
+#: ../backend/pdf/ev-poppler.cc:903
+msgid "Type 1"
+msgstr "Tür 1"
+
+#: ../backend/pdf/ev-poppler.cc:905
+msgid "Type 1C"
+msgstr "Tür 1C"
+
+#: ../backend/pdf/ev-poppler.cc:907
+msgid "Type 3"
+msgstr "Tür 3"
+
+#: ../backend/pdf/ev-poppler.cc:909
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:911
+msgid "Type 1 (CID)"
+msgstr "Tür 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:913
+msgid "Type 1C (CID)"
+msgstr "Tür 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:915
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:917
+msgid "Unknown font type"
+msgstr "Bilinmeyen yazıtipi türü"
+
+#: ../backend/pdf/ev-poppler.cc:943
+msgid "No name"
+msgstr "İsimsiz"
+
+#: ../backend/pdf/ev-poppler.cc:951
+msgid "Embedded subset"
+msgstr "Gömülü alt küme"
+
+#: ../backend/pdf/ev-poppler.cc:953
+msgid "Embedded"
+msgstr "Gömülü"
+
+#: ../backend/pdf/ev-poppler.cc:955
+msgid "Not embedded"
+msgstr "Gömülü değil"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF Belgeleri"
+
+#: ../backend/impress/impress-document.c:303
+#: ../backend/tiff/tiff-document.c:114
+msgid "Invalid document"
+msgstr "Geçersiz döküman"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress Slaytları"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Hata yok"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Yeterli hafıza yok"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "Zip imzası bulunamadı"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "Geçersiz zip dosyası"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr "Çoklu dosyalı zipler desteklenmiyor"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Dosya açılamıyor"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Dosyadan bilgiler okunamadı"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "Dosya zip arşivinde bulunamadı"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Bilinmeyen hata"
+
+#: ../backend/ps/ev-spectre.c:113
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "\"%s\" belgesi yüklenirken başarısız olundu"
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "\"%s\" belgesi yüklenirken başarısız olundu"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript Belgeleri"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "\"%s\" eki kaydedilemedi: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "\"%s\" eki açılamadı: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "\"%s\" eki açılamadı"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Dosya türü %s (%s) desteklenmiyor"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Tüm Belgeler"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Tüm Dosyalar"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Dosya geçerli bir .desktop dosyası değil"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Algılanamayan masaüstü dosyası Sürüm '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "%s başlatılıyor"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Uygulama komut satırında belgeleri kabul etmiyor"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Algılanamayan başlama seçeneği: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Belge URI'leri bir 'Tür=Bağ' masaüstü girişine geçilemiyor"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Başlatılabilir bir öğe değil"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Oturum yöneticisine bağlantıyı kapat"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Kayıtlı yapılandırmayı içeren dosyayı belirtin"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:46
+#: ../previewer/ev-previewer.c:47
+msgid "FILE"
+msgstr "DOSYA"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Oturum yönetim ID'sini belirtin"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Oturum yönetim seçenekleri:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Oturum yönetim seçeneklerini göster"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "\"_%s\" Göster"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "_Araç Çubuğunda Taşı"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "Seçili öğeyi araç çubuğu üzerinde taşı"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "_Araç Çubuğundan Kaldır"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "Seçili öğeyi araç çubuğundan kaldır"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "_Araç Çubuğunu Sil"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "Seçili araç çubuğunu kaldır"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Ayıraç"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:117
+msgid "Running in presentation mode"
+msgstr "Sunum kipinde çalışıyor"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5227
+msgid "Best Fit"
+msgstr "En Uygun Görünüm"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Sayfayı Enine Sığdır"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "%50"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "%70"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "%85"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "%100"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "%125"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "%150"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "%175"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "%200"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "%300"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "%400"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4149
+#: ../shell/ev-window-title.c:150 ../shell/main.c:484
+#, c-format
+msgid "Document Viewer"
+msgstr "Belge Görüntüleyici"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "Çok sayfalı belgeleri göster"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Belge sınırlamalarını değiştir"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Kopyalama ya da yazdırma gibi belge sınırlarlamalarını değiştir."
+
+#: ../previewer/ev-previewer.c:45
+msgid "Delete the temporary file"
+msgstr "Geçici dosyayı sil"
+
+#: ../previewer/ev-previewer.c:46
+msgid "Print settings file"
+msgstr "Ayar dosyasını yazdır"
+
+#: ../previewer/ev-previewer.c:141 ../previewer/ev-previewer.c:175
+msgid "MATE Document Previewer"
+msgstr "MATE Belge Önizleyici"
+
+#: ../previewer/ev-previewer-window.c:122 ../shell/ev-window.c:2891
+msgid "Failed to print document"
+msgstr "Belge yazdırılırken başarısız olundu."
+
+#: ../previewer/ev-previewer-window.c:242
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Seçilen yazıcı '%s' bulunamadı"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:286 ../shell/ev-window.c:4986
+msgid "_Previous Page"
+msgstr "_Önceki Sayfa"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:4987
+msgid "Go to the previous page"
+msgstr "Önceki sayfaya git"
+
+#: ../previewer/ev-previewer-window.c:289 ../shell/ev-window.c:4989
+msgid "_Next Page"
+msgstr "S_onraki Sayfa"
+
+#: ../previewer/ev-previewer-window.c:290 ../shell/ev-window.c:4990
+msgid "Go to the next page"
+msgstr "Sonraki sayfaya git"
+
+#: ../previewer/ev-previewer-window.c:293 ../shell/ev-window.c:4973
+msgid "Enlarge the document"
+msgstr "Belgeyi genişlet"
+
+#: ../previewer/ev-previewer-window.c:296 ../shell/ev-window.c:4976
+msgid "Shrink the document"
+msgstr "Belgeyi daralt"
+
+#: ../previewer/ev-previewer-window.c:299 ../shell/ev-print-operation.c:1294
+msgid "Print"
+msgstr "Yazdır"
+
+#: ../previewer/ev-previewer-window.c:300 ../shell/ev-window.c:4945
+msgid "Print this document"
+msgstr "Bu belgeyi yazdır"
+
+#: ../previewer/ev-previewer-window.c:306 ../shell/ev-window.c:5084
+msgid "_Best Fit"
+msgstr "_En Uygun Görünüm"
+
+#: ../previewer/ev-previewer-window.c:307 ../shell/ev-window.c:5085
+msgid "Make the current document fill the window"
+msgstr "Geçerli belge pencereyi doldursun"
+
+#: ../previewer/ev-previewer-window.c:309 ../shell/ev-window.c:5087
+msgid "Fit Page _Width"
+msgstr "Sayfayı _Enine Sığdır"
+
+#: ../previewer/ev-previewer-window.c:310 ../shell/ev-window.c:5088
+msgid "Make the current document fill the window width"
+msgstr "Geçerli belge genişliği pencereyi doldursun"
+
+#: ../previewer/ev-previewer-window.c:441 ../shell/ev-window.c:5151
+msgid "Page"
+msgstr "Sayfa"
+
+#: ../previewer/ev-previewer-window.c:442 ../shell/ev-window.c:5152
+msgid "Select Page"
+msgstr "Sayfa Seç"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Belge"
+
+#: ../properties/ev-properties-view.c:59
+msgid "Title:"
+msgstr "Başlık:"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Location:"
+msgstr "Konum:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Subject:"
+msgstr "Konu:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Author:"
+msgstr "Yazan:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Keywords:"
+msgstr "Anahtar Kelimeler:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Producer:"
+msgstr "Üretici:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Creator:"
+msgstr "Oluşturucu:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Created:"
+msgstr "Oluşturulma:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Modified:"
+msgstr "Değiştirilme:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Number of Pages:"
+msgstr "Sayfa Sayısı:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Optimized:"
+msgstr "Optimize:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Format:"
+msgstr "Biçim:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Security:"
+msgstr "Güvenlik:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Paper Size:"
+msgstr "Kağıt Boyutu:"
+
+#: ../properties/ev-properties-view.c:202
+msgid "None"
+msgstr "Hiçbiri"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:227
+msgid "default:mm"
+msgstr "varsayılan:mm"
+
+#: ../properties/ev-properties-view.c:271
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:275
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f inc"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:299
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Düşey (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:306
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Yatay (%s)"
+
+#: ../libmisc/ev-page-action.c:72
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d / %d)"
+
+#: ../libmisc/ev-page-action.c:74
+#, c-format
+msgid "of %d"
+msgstr "/ %d"
+
+#: ../libview/ev-jobs.c:958
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "“%s”: %s belgesi yüklenirken başarısız olundu"
+
+#: ../libview/ev-jobs.c:1435
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Sayfa %d yazdırırken başarısız oldu: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Yukarı Kaydır"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Aşağı Kaydır"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Görünümü Yukarı Kaydır"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Görünümü Aşağı Kaydır"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Belge Görünümü"
+
+#: ../libview/ev-view.c:1466
+msgid "Go to first page"
+msgstr "İlk sayfaya git"
+
+#: ../libview/ev-view.c:1468
+msgid "Go to previous page"
+msgstr "Önceki sayfaya git"
+
+#: ../libview/ev-view.c:1470
+msgid "Go to next page"
+msgstr "Sonraki sayfaya git"
+
+#: ../libview/ev-view.c:1472
+msgid "Go to last page"
+msgstr "Son sayfaya git"
+
+#: ../libview/ev-view.c:1474
+msgid "Go to page"
+msgstr "Sayfaya git"
+
+#: ../libview/ev-view.c:1476
+msgid "Find"
+msgstr "Bul"
+
+#: ../libview/ev-view.c:1504
+#, c-format
+msgid "Go to page %s"
+msgstr "%s sayfasına git"
+
+#: ../libview/ev-view.c:1510
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "\"%2$s\" dosyasındaki %1$s konumuna git"
+
+#: ../libview/ev-view.c:1513
+#, c-format
+msgid "Go to file “%s”"
+msgstr "\"%s\" dosyasına git"
+
+#: ../libview/ev-view.c:1521
+#, c-format
+msgid "Launch %s"
+msgstr "%s başlat"
+
+#: ../libview/ev-view.c:2783
+msgid "End of presentation. Press Escape to exit."
+msgstr "Sunumun sonu. Çıkış için Esc'ye basın."
+
+#: ../libview/ev-view.c:3722
+msgid "Jump to page:"
+msgstr "Sayfaya git:"
+
+#: ../libview/ev-view.c:4004 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:267
+msgid "Loading..."
+msgstr "Yükleniyor..."
+
+#: ../shell/eggfindbar.c:146
+msgid "Search string"
+msgstr "Arama dizgisi"
+
+#: ../shell/eggfindbar.c:147
+msgid "The name of the string to be found"
+msgstr "Bulunması gereken dizginin ismi"
+
+#: ../shell/eggfindbar.c:160
+msgid "Case sensitive"
+msgstr "Büyük/küçük harf duyarlı"
+
+#: ../shell/eggfindbar.c:161
+msgid "TRUE for a case sensitive search"
+msgstr "Büyük/küçük harfe duyarlı aramak için TRUE"
+
+#: ../shell/eggfindbar.c:168
+msgid "Highlight color"
+msgstr "İşaretleme rengi"
+
+#: ../shell/eggfindbar.c:169
+msgid "Color of highlight for all matches"
+msgstr "Tüm eşlemeker için işaretleme rengi"
+
+#: ../shell/eggfindbar.c:175
+msgid "Current color"
+msgstr "Geçerli renk"
+
+#: ../shell/eggfindbar.c:176
+msgid "Color of highlight for the current match"
+msgstr "Geçerli eşleşme için işaretleme rengi"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Bul:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:4962
+msgid "Find Pre_vious"
+msgstr "Ö_ncekini Bul"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Arama dizgisinin bulunduğu bir önceki yeri bul"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:4960
+msgid "Find Ne_xt"
+msgstr "Sonrakini B_ul"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Arama dizgisinin bulunduğu bir sonraki yeri bul"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Bü_yük/Küçük Harf Duyarlı"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Büyük/küçük harfe duyarlı arama seçimi"
+
+#: ../shell/ev-application.c:309
+msgid "Recover previous documents?"
+msgstr "Önceki belge kurtarılsın mı?"
+
+#: ../shell/ev-application.c:312
+msgid ""
+"Evince appears to have exited unexpectedly the last time it was run. You can "
+"recover the opened documents."
+msgstr ""
+"Evince son çalıştırıldığı zaman beklenmeyen bir şekilde çıkmış gibi "
+"görünüyor. Açılan belgeleri kurtarabilirsiniz."
+
+#: ../shell/ev-application.c:316
+msgid "_Don't Recover"
+msgstr "_Kurtarma"
+
+#: ../shell/ev-application.c:319
+msgid "_Recover"
+msgstr "_Kurtar"
+
+#: ../shell/ev-application.c:322
+msgid "Crash Recovery"
+msgstr "Çakma Kurtarması"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "%s belgesi için parola"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Mevcut bir belgeyi aç"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "Bu belge kilitli ve sadece doğru parola girilerek okunabilir."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "Belge _Kilidini Kaldır"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Parola girin"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Parola gerekli"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "\"%s\" belgesi kilitli ve açılabilmesi için önce paralo gerekiyor."
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Parola:"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "_Parolayı hemen unut"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _logout"
+msgstr "Çıkış yapana kadar _parolayı hatırla"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "_Her zaman hatırla"
+
+#. Initial state
+#: ../shell/ev-print-operation.c:316
+msgid "Preparing to print ..."
+msgstr "Yazdırmaya hazırlanıyor..."
+
+#: ../shell/ev-print-operation.c:318
+msgid "Finishing..."
+msgstr "Tamamlanıyor..."
+
+#: ../shell/ev-print-operation.c:320
+#, c-format
+msgid "Printing page %d of %d..."
+msgstr "Yazdırılan sayfa %d / %d..."
+
+#: ../shell/ev-print-operation.c:1143
+msgid "Printing is not supported on this printer."
+msgstr "Bu yazıcıda yazdırmayı desteklenmiyor."
+
+#: ../shell/ev-print-operation.c:1208
+msgid "Invalid page selection"
+msgstr "Geçersiz sayfa seçimi"
+
+#: ../shell/ev-print-operation.c:1209
+msgid "Warning"
+msgstr "Uyarı"
+
+#: ../shell/ev-print-operation.c:1211
+msgid "Your print range selection does not include any page"
+msgstr "Yazdırma aralığı seçiminiz hiçbir sayfa içermiyor"
+
+#: ../shell/ev-properties-dialog.c:57
+msgid "Properties"
+msgstr "Özellikler"
+
+#: ../shell/ev-properties-dialog.c:91
+msgid "General"
+msgstr "Genel"
+
+#: ../shell/ev-properties-dialog.c:101
+msgid "Fonts"
+msgstr "Yazıtipleri"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Yazıtipi"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "Yazıtipi bilgisi alınıyor... %%%3d"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Ekler"
+
+#: ../shell/ev-sidebar-layers.c:395
+msgid "Layers"
+msgstr "Katmanlar"
+
+#: ../shell/ev-sidebar-links.c:340
+msgid "Print..."
+msgstr "Yazdır..."
+
+#: ../shell/ev-sidebar-links.c:720
+msgid "Index"
+msgstr "İçindekiler"
+
+#: ../shell/ev-sidebar-thumbnails.c:756
+msgid "Thumbnails"
+msgstr "Küçük Resimler"
+
+#: ../shell/ev-window.c:829
+#, c-format
+msgid "Page %s - %s"
+msgstr "Sayfa %s - %s"
+
+#: ../shell/ev-window.c:831
+#, c-format
+msgid "Page %s"
+msgstr "Sayfa %s"
+
+#: ../shell/ev-window.c:1256
+msgid "The document contains no pages"
+msgstr "Belge hiçbir sayfa içermiyor"
+
+#: ../shell/ev-window.c:1259
+msgid "The document contains only empty pages"
+msgstr "Belge sadece boş sayfaları içeriyor"
+
+#: ../shell/ev-window.c:1488 ../shell/ev-window.c:1647
+msgid "Unable to open document"
+msgstr "Belge açılamadı"
+
+#: ../shell/ev-window.c:1618
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "“%s” konumundan belge yükleniyor"
+
+#: ../shell/ev-window.c:1756 ../shell/ev-window.c:1939
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Belge indiriliyor (%%%d)"
+
+#: ../shell/ev-window.c:1886
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Belge %s konumundan yeniden yükleniyor"
+
+#: ../shell/ev-window.c:1918
+msgid "Failed to reload document."
+msgstr "Belge yeniden yüklenirken başarısız oldu."
+
+#: ../shell/ev-window.c:2071
+msgid "Open Document"
+msgstr "Belge Aç"
+
+#: ../shell/ev-window.c:2150
+#, c-format
+msgid "Couldn't create symlink “%s”: "
+msgstr "“%s” sembolik bağı oluşturulamadı: "
+
+#: ../shell/ev-window.c:2177
+msgid "Cannot open a copy."
+msgstr "Bir kopya açılamıyor."
+
+#: ../shell/ev-window.c:2413
+#, c-format
+msgid "Saving document to %s"
+msgstr "Belge %s konumuna kaydediliyor"
+
+#: ../shell/ev-window.c:2416
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Ek %s konumuna kaydediliyor"
+
+#: ../shell/ev-window.c:2419
+#, c-format
+msgid "Saving image to %s"
+msgstr "Resim %s konumuna kaydediliyor"
+
+#: ../shell/ev-window.c:2463 ../shell/ev-window.c:2560
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Dosya “%s” olarak kaydedilemedi."
+
+#: ../shell/ev-window.c:2491
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Belge gönderiliyor (%%%d)"
+
+#: ../shell/ev-window.c:2495
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Ek gönderiliyor (%%%d)"
+
+#: ../shell/ev-window.c:2499
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Resim gönderiliyor (%%%d)"
+
+#: ../shell/ev-window.c:2621
+msgid "Save a Copy"
+msgstr "Bir Kopya Kaydet"
+
+#: ../shell/ev-window.c:2835
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d sırada bekleyen görev"
+
+#: ../shell/ev-window.c:2948
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Printing job “%s”"
+
+#: ../shell/ev-window.c:3155
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Kapatmadan önce yazdırma görevi “%s” tamamlanması beklensin mi?"
+
+#: ../shell/ev-window.c:3158
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"Etkin %d yazdırma görevi var. Kapatmadan önce yazdırmaların bitmesi "
+"beklensin mi?"
+
+#: ../shell/ev-window.c:3170
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Eğer pencereyi kapatırsanız bekleyen yazdırma görevleri yazdırılmayacak."
+
+#: ../shell/ev-window.c:3174
+msgid "Cancel _print and Close"
+msgstr "_Yazdırmayı İptal Et ve Kapat"
+
+#: ../shell/ev-window.c:3178
+msgid "Close _after Printing"
+msgstr "Yazdırdıktan _sonra Kapat"
+
+#: ../shell/ev-window.c:3784
+msgid "Toolbar Editor"
+msgstr "Araç Çubuğu Düzenleyicisi"
+
+#: ../shell/ev-window.c:3915
+msgid "There was an error displaying help"
+msgstr "Yardım gösterilirken bir hata oluştu"
+
+#: ../shell/ev-window.c:4145
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Döküman Görüntüleyicisi.\n"
+"Kullanılan poppler %s (%s) "
+
+#: ../shell/ev-window.c:4174
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince özgür yazılımdır; onu Özgür Yazılım Vakfı tarafındanyayınlanan GNU "
+"Genel Kamul Lisansı 2. sürümü ya da (tercihen) daha sonraki sürümleri "
+"koşullarında yeniden dağıtabilir ya dadeğistirebilirsiniz.\n"
+
+#: ../shell/ev-window.c:4178
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince kullanışlı olması umuduyla dağıtılmaktadır,ama herhangi bir GARANTİ "
+"içermez, SATILABİLİRLİKya da HERHANGİ BİR AMACA UYGUNLUK için GARANTİ ima "
+"etmez.Ayrıntılı bilgi için GNU Genel Kamu Lisansını inceleyin.\n"
+
+#: ../shell/ev-window.c:4182
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Evince ile GNU Genel Kamul Lisansının bir kopyası almış olmalısınız.Eğer "
+"yoksa bu adrese bir yazı ile bildirin: Free Software Foundation, Inc.,59 "
+"Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:4206
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4209
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Evince geliştiricileri"
+
+#: ../shell/ev-window.c:4215
+msgid "translator-credits"
+msgstr "Serdar Çiçek <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4433
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "Bu sayfada %d bulundu"
+
+#: ../shell/ev-window.c:4441
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "Arama için %%%2d kaldı"
+
+#: ../shell/ev-window.c:4925
+msgid "_File"
+msgstr "_Dosya"
+
+#: ../shell/ev-window.c:4926
+msgid "_Edit"
+msgstr "Dü_zen"
+
+#: ../shell/ev-window.c:4927
+msgid "_View"
+msgstr "_Görünüm"
+
+#: ../shell/ev-window.c:4928
+msgid "_Go"
+msgstr "_Git"
+
+#: ../shell/ev-window.c:4929
+msgid "_Help"
+msgstr "_Yardım"
+
+#. File menu
+#: ../shell/ev-window.c:4932 ../shell/ev-window.c:5110
+#: ../shell/ev-window.c:5189
+msgid "_Open..."
+msgstr "_Aç..."
+
+#: ../shell/ev-window.c:4933 ../shell/ev-window.c:5190
+msgid "Open an existing document"
+msgstr "Mevcut bir belgeyi aç"
+
+#: ../shell/ev-window.c:4935
+msgid "Op_en a Copy"
+msgstr "B_ir Kopya Aç"
+
+#: ../shell/ev-window.c:4936
+msgid "Open a copy of the current document in a new window"
+msgstr "Mevcut belgenin bir kopyasını yeni bir pencerede aç"
+
+#: ../shell/ev-window.c:4938 ../shell/ev-window.c:5112
+msgid "_Save a Copy..."
+msgstr "_Bir Kopya Kaydet..."
+
+#: ../shell/ev-window.c:4939
+msgid "Save a copy of the current document"
+msgstr "Mevcut belgenin bir kopyasını kaydet"
+
+#: ../shell/ev-window.c:4941
+msgid "Page Set_up..."
+msgstr "Sayfa _Ayarı..."
+
+#: ../shell/ev-window.c:4942
+msgid "Setup the page settings for printing"
+msgstr "Yazdırma için sayfa ayarlarını düzenle"
+
+#: ../shell/ev-window.c:4944
+msgid "_Print..."
+msgstr "_Yazdır..."
+
+#: ../shell/ev-window.c:4947
+msgid "P_roperties"
+msgstr "Ö_zellikler"
+
+#: ../shell/ev-window.c:4955
+msgid "Select _All"
+msgstr "Tü_münü Seç"
+
+#: ../shell/ev-window.c:4957
+msgid "_Find..."
+msgstr "_Bul..."
+
+#: ../shell/ev-window.c:4958
+msgid "Find a word or phrase in the document"
+msgstr "Bir sözcüğü ya da tamlamayı belgede ara"
+
+#: ../shell/ev-window.c:4964
+msgid "T_oolbar"
+msgstr "_Araç Çubuğu"
+
+#: ../shell/ev-window.c:4966
+msgid "Rotate _Left"
+msgstr "_Sola Çevir"
+
+#: ../shell/ev-window.c:4968
+msgid "Rotate _Right"
+msgstr "S_ağa Çevir"
+
+#: ../shell/ev-window.c:4978
+msgid "_Reload"
+msgstr "_Yeniden Yükle"
+
+#: ../shell/ev-window.c:4979
+msgid "Reload the document"
+msgstr "Belgeyi yeniden yükle"
+
+#: ../shell/ev-window.c:4982
+msgid "Auto_scroll"
+msgstr "Otomatik k_aydır"
+
+#: ../shell/ev-window.c:4992
+msgid "_First Page"
+msgstr "_İlk Sayfa"
+
+#: ../shell/ev-window.c:4993
+msgid "Go to the first page"
+msgstr "İlk sayfaya git"
+
+#: ../shell/ev-window.c:4995
+msgid "_Last Page"
+msgstr "_Son Sayfa"
+
+#: ../shell/ev-window.c:4996
+msgid "Go to the last page"
+msgstr "Son sayfaya git"
+
+#. Help menu
+#: ../shell/ev-window.c:5000
+msgid "_Contents"
+msgstr "_İçindekiler"
+
+#: ../shell/ev-window.c:5003
+msgid "_About"
+msgstr "_Hakkında"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5007
+msgid "Leave Fullscreen"
+msgstr "Tam Ekranı Terket"
+
+#: ../shell/ev-window.c:5008
+msgid "Leave fullscreen mode"
+msgstr "Tam ekran kipini terket"
+
+#: ../shell/ev-window.c:5010
+msgid "Start Presentation"
+msgstr "Sunum Başlat"
+
+#: ../shell/ev-window.c:5011
+msgid "Start a presentation"
+msgstr "Bir sunum başlat"
+
+#. View Menu
+#: ../shell/ev-window.c:5066
+msgid "_Toolbar"
+msgstr "_Araç Çubuğu"
+
+#: ../shell/ev-window.c:5067
+msgid "Show or hide the toolbar"
+msgstr "Araç çubuğunu gizle ya da göster"
+
+#: ../shell/ev-window.c:5069
+msgid "Side _Pane"
+msgstr "Yan _Panel"
+
+#: ../shell/ev-window.c:5070
+msgid "Show or hide the side pane"
+msgstr "Yan paneli göster ya da gizle"
+
+#: ../shell/ev-window.c:5072
+msgid "_Continuous"
+msgstr "_Ardarda"
+
+#: ../shell/ev-window.c:5073
+msgid "Show the entire document"
+msgstr "Tüm belgeyi göster"
+
+#: ../shell/ev-window.c:5075
+msgid "_Dual"
+msgstr "_İkili"
+
+#: ../shell/ev-window.c:5076
+msgid "Show two pages at once"
+msgstr "Bir defada iki sayfa göster"
+
+#: ../shell/ev-window.c:5078
+msgid "_Fullscreen"
+msgstr "_Tam ekran"
+
+#: ../shell/ev-window.c:5079
+msgid "Expand the window to fill the screen"
+msgstr "Pencereyi, ekranı dolduracak kadar genişlet"
+
+#: ../shell/ev-window.c:5081
+msgid "Pre_sentation"
+msgstr "_Sunum"
+
+#: ../shell/ev-window.c:5082
+msgid "Run document as a presentation"
+msgstr "Belgeyi sunum olarak çalıştır"
+
+#. Links
+#: ../shell/ev-window.c:5095
+msgid "_Open Link"
+msgstr "_Bağ Aç"
+
+#: ../shell/ev-window.c:5097
+msgid "_Go To"
+msgstr "_Git"
+
+#: ../shell/ev-window.c:5099
+msgid "Open in New _Window"
+msgstr "Yeni _Pencerede Aç"
+
+#: ../shell/ev-window.c:5101
+msgid "_Copy Link Address"
+msgstr "_Bağ Adresini Kopyala"
+
+#: ../shell/ev-window.c:5103
+msgid "_Save Image As..."
+msgstr "_Resmi Farklı Kaydet..."
+
+#: ../shell/ev-window.c:5105
+msgid "Copy _Image"
+msgstr "Resmi K_opyala"
+
+#: ../shell/ev-window.c:5163
+msgid "Zoom"
+msgstr "Yakınlık"
+
+#: ../shell/ev-window.c:5165
+msgid "Adjust the zoom level"
+msgstr "Yakınlık seviyesini ayarla"
+
+#: ../shell/ev-window.c:5175
+msgid "Navigation"
+msgstr "Dolaşma"
+
+#: ../shell/ev-window.c:5177
+msgid "Back"
+msgstr "Geri"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5180
+msgid "Move across visited pages"
+msgstr "Gezilen sayfalara taşı"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5210
+msgid "Previous"
+msgstr "Önceki"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5215
+msgid "Next"
+msgstr "Sonraki"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5219
+msgid "Zoom In"
+msgstr "Yakınlaştır"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5223
+msgid "Zoom Out"
+msgstr "Uzaklaştır"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5231
+msgid "Fit Width"
+msgstr "Enine Genişlet"
+
+#: ../shell/ev-window.c:5398 ../shell/ev-window.c:5414
+msgid "Unable to launch external application."
+msgstr "Harici uygulama başlatılamadı."
+
+#: ../shell/ev-window.c:5453
+msgid "Unable to open external link"
+msgstr "Harici bağ açılamadı"
+
+#: ../shell/ev-window.c:5609
+msgid "Couldn't find appropriate format to save image"
+msgstr "Resmi kaydetmek için uygun biçim bulunamadı"
+
+#: ../shell/ev-window.c:5648
+msgid "The image could not be saved."
+msgstr "Görüntü kaydedilemedi."
+
+#: ../shell/ev-window.c:5680
+msgid "Save Image"
+msgstr "Görüntüyü Kaydet"
+
+#: ../shell/ev-window.c:5747
+msgid "Unable to open attachment"
+msgstr "Ek açılamadı"
+
+#: ../shell/ev-window.c:5798
+msgid "The attachment could not be saved."
+msgstr "Ek kaydedilemedi."
+
+#: ../shell/ev-window.c:5843
+msgid "Save Attachment"
+msgstr "Ekleri Kaydet"
+
+#: ../shell/ev-window-title.c:163
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - Parola Gerekli"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "Uzantı ile"
+
+#: ../shell/main.c:73 ../shell/main.c:436
+msgid "MATE Document Viewer"
+msgstr "MATE Belge Görüntüleyici"
+
+#: ../shell/main.c:81
+msgid "The page of the document to display."
+msgstr "Gösterilecek belge sayfası."
+
+#: ../shell/main.c:81
+msgid "PAGE"
+msgstr "SAYFA"
+
+#: ../shell/main.c:82
+msgid "Run evince in fullscreen mode"
+msgstr "Evince'i tam ekran kipinde çalıştır"
+
+#: ../shell/main.c:83
+msgid "Run evince in presentation mode"
+msgstr "Evince'i sunum kipinde çalıştır"
+
+#: ../shell/main.c:84
+msgid "Run evince as a previewer"
+msgstr "Evince'i ön izleyici olarak çalıştır"
+
+#: ../shell/main.c:85
+msgid "The word or phrase to find in the document"
+msgstr "Bir sözcüğü ya da tamlamayı belgede ara"
+
+#: ../shell/main.c:85
+msgid "STRING"
+msgstr "DİZGİ"
+
+#: ../shell/main.c:89
+msgid "[FILE...]"
+msgstr "[DOSYA...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available, true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Mantıksal değerler geçerlidir, seçili ise küçük resimler etkindir ve eğer "
+"seçili değilse küçük resim oluşturma devre dışı olur"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "PDF Belgelerin küçük resimlerinin etkinliği"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF Belgeleri için küçük resim komutu"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF Belge küçük resimleyicisi için geçerli komut artı parametreleri. Daha "
+"fazla bilgi için caja küçük resimleyici belgesine bakın."
diff --git a/po/uk.po b/po/uk.po
new file mode 100644
index 00000000..f3c7bcc6
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,1546 @@
+# Ukrainian translation of evince.
+# Copyright (C) 2005 Free Software Foundation ,Inc
+# This file is distributed under the same license as the evince package.
+# Maxim Dziumanenko <[email protected]>, 2005-2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-26 14:08+0200\n"
+"PO-Revision-Date: 2010-03-26 23:28+0200\n"
+"Last-Translator: Maxim Dziumanenko <[email protected]>\n"
+"Language-Team: Ukrainian <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../backend/comics/comics-document.c:160
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "Помилка під час запуску команди “%s” для розтискання коміксу: %s"
+
+#: ../backend/comics/comics-document.c:174
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "Помилка при виконанні команди “%s” під час розтискання коміксу."
+
+#: ../backend/comics/comics-document.c:183
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "Команда “%s” не завершилась належним чином."
+
+#: ../backend/comics/comics-document.c:350
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "Тип документу MIME не відноситься до коміксів: %s"
+
+#: ../backend/comics/comics-document.c:357
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr ""
+"Не вдається знайти відповідну команду для розтискання цього типу sкоміксів"
+
+#: ../backend/comics/comics-document.c:395
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "Невідомий тип MIME"
+
+#: ../backend/comics/comics-document.c:422
+msgid "File corrupted"
+msgstr "Файл пошкоджений"
+
+#: ../backend/comics/comics-document.c:435
+msgid "No files in archive"
+msgstr "У архіві не знайдено файлів"
+
+#: ../backend/comics/comics-document.c:474
+#, c-format
+msgid "No images found in archive %s"
+msgstr "У архіві %s зображень не знайдено."
+
+#: ../backend/comics/comics-document.c:718
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "Помилка при видаленні “%s”."
+
+#: ../backend/comics/comics-document.c:850
+#, c-format
+msgid "Error %s"
+msgstr "Помилка %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Книги коміксів"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "Документ DjVu має некоректний формат"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr ""
+"Документ складається з кількох файлів. Не має доступу до одного або кількох "
+"з цих файлів."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "Документи DjVu"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "Документ DVI має некоректний формат"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Документи DVI"
+
+#: ../backend/pdf/ev-poppler.cc:571
+msgid "This work is in the Public Domain"
+msgstr "Ця робота є Public Domain"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Yes"
+msgstr "Так"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:827
+msgid "No"
+msgstr "Ні"
+
+#: ../backend/pdf/ev-poppler.cc:948
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:952
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:954
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:956
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Unknown font type"
+msgstr "Шрифт невідомого типу"
+
+#: ../backend/pdf/ev-poppler.cc:988
+msgid "No name"
+msgstr "Без назви"
+
+#: ../backend/pdf/ev-poppler.cc:996
+msgid "Embedded subset"
+msgstr "Вбудований набір"
+
+#: ../backend/pdf/ev-poppler.cc:998
+msgid "Embedded"
+msgstr "Вбудований"
+
+#: ../backend/pdf/ev-poppler.cc:1000
+msgid "Not embedded"
+msgstr "Не вбудований"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Документи PDF"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "Некоректний документ"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Слайди Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Немає помилки"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Недостатньо пам'яті"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "Не вдається знайти ознаку ZIP-файлу"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "Некоректний файл формату ZIP"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "Багатофайлові архіви ZIP не підтримуються"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Не вдається відкрити файл"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Не вдається прочитати дані з файлу"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "Не вдається знайти файл у архіві ZIP"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Невідома помилка"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Не вдається відкрити документ “%s”"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Не вдається зберегти документ “%s”"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Документи PostScript"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Не вдається зберегти вкладення “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Не вдається відкрити вкладення “%s”: %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Не вдається відкрити “%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Файл типу %s (%s) не підтримується"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "Усі документи"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "Усі файли"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "Помилка при створенні тимчасового файлу: %s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "Помилка при створенні тимчасового каталогу: %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Некоректний .desktop-файл"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Нерозпізнаний desktop-файл версії '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Запускається %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Програма не приймає документи у командному рядку"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Нерозпізнаний параметр запуску: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Неможливо передати URI документів до desktop-елементу 'Type=Link'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Не є елементом, що запускається"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "Вимкнути з'єднання з менеджером сеансів"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "Вкажіть файл, що містить збережену конфігурацію"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:48
+#: ../previewer/ev-previewer.c:49
+msgid "FILE"
+msgstr "ФАЙЛ"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "Вкажіть ідентифікатор керування сеансом"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "Параметри керування сеансом:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "Показати параметри керування сеансом"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:934
+#, c-format
+msgid "Show “_%s”"
+msgstr "Показати “_%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1397
+msgid "_Move on Toolbar"
+msgstr "_Перемістити на панель інструментів"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1398
+msgid "Move the selected item on the toolbar"
+msgstr "Перемістити виділений елемент на панель інструментів"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1399
+msgid "_Remove from Toolbar"
+msgstr "Ви_далити з панелі інструментів"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1400
+msgid "Remove the selected item from the toolbar"
+msgstr "Видалити виділений елемент з панелі інструментів"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1401
+msgid "_Delete Toolbar"
+msgstr "В_идалити панель інструментів"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1402
+msgid "Remove the selected toolbar"
+msgstr "В_идалити панель інструментів"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Розділювач"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:115
+msgid "Running in presentation mode"
+msgstr "Запущений режим презентації"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5341
+msgid "Best Fit"
+msgstr "Умістити у вікні"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "По ширині сторінки"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4205
+#: ../shell/ev-window-title.c:149 ../shell/main.c:282
+#, c-format
+msgid "Document Viewer"
+msgstr "Перегляд документів"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "Перегляд багатосторінкових документів"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Ігнорувати обмеження"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr ""
+"Ігнорувати обмеження документу, наприклад обмеження на друк чи копіювання."
+
+#: ../previewer/ev-previewer.c:47
+msgid "Delete the temporary file"
+msgstr "Видалити тимчасовий файл"
+
+#: ../previewer/ev-previewer.c:48
+msgid "Print settings file"
+msgstr "Вивести файл з параметрами"
+
+#: ../previewer/ev-previewer.c:143 ../previewer/ev-previewer.c:177
+msgid "MATE Document Previewer"
+msgstr "Перегляд документів у MATE"
+
+#: ../previewer/ev-previewer-window.c:90 ../shell/ev-window.c:3005
+msgid "Failed to print document"
+msgstr "Не вдається надрукувати документ"
+
+#: ../previewer/ev-previewer-window.c:204
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "Не знайдено обраний принтер '%s'"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:248 ../shell/ev-window.c:5090
+msgid "_Previous Page"
+msgstr "_Назад"
+
+#: ../previewer/ev-previewer-window.c:249 ../shell/ev-window.c:5091
+msgid "Go to the previous page"
+msgstr "Перейти до попередньої сторінки"
+
+#: ../previewer/ev-previewer-window.c:251 ../shell/ev-window.c:5093
+msgid "_Next Page"
+msgstr "_Вперед"
+
+#: ../previewer/ev-previewer-window.c:252 ../shell/ev-window.c:5094
+msgid "Go to the next page"
+msgstr "Перейти до наступної сторінки"
+
+#: ../previewer/ev-previewer-window.c:255 ../shell/ev-window.c:5077
+msgid "Enlarge the document"
+msgstr "Збільшити розмір сторінки"
+
+#: ../previewer/ev-previewer-window.c:258 ../shell/ev-window.c:5080
+msgid "Shrink the document"
+msgstr "Зменшити розмір сторінки"
+
+#: ../previewer/ev-previewer-window.c:261 ../libview/ev-print-operation.c:1315
+msgid "Print"
+msgstr "Друк"
+
+#: ../previewer/ev-previewer-window.c:262 ../shell/ev-window.c:5048
+msgid "Print this document"
+msgstr "Надрукувати цей документ"
+
+#: ../previewer/ev-previewer-window.c:268 ../shell/ev-window.c:5192
+msgid "_Best Fit"
+msgstr "_Умістити у вікні"
+
+#: ../previewer/ev-previewer-window.c:269 ../shell/ev-window.c:5193
+msgid "Make the current document fill the window"
+msgstr "Масштабувати документ для відповідності вікну"
+
+#: ../previewer/ev-previewer-window.c:271 ../shell/ev-window.c:5195
+msgid "Fit Page _Width"
+msgstr "По _ширині сторінки"
+
+#: ../previewer/ev-previewer-window.c:272 ../shell/ev-window.c:5196
+msgid "Make the current document fill the window width"
+msgstr "Масштабувати документ для відповідності ширині екрану"
+
+#: ../previewer/ev-previewer-window.c:455 ../shell/ev-window.c:5263
+msgid "Page"
+msgstr "Сторінка"
+
+#: ../previewer/ev-previewer-window.c:456 ../shell/ev-window.c:5264
+msgid "Select Page"
+msgstr "Вибрати сторінку"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "Документи"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "Заголовок:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "Адреса:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "Тема:"
+
+#: ../properties/ev-properties-view.c:63
+msgid "Author:"
+msgstr "Автор:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "Ключові слова:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "Програма:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "Укладач:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "Створено:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "Змінено:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "Кількість сторінок:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "Оптимізовано:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "Формат:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "Захищений:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "Розмір сторінки:"
+
+#: ../properties/ev-properties-view.c:211 ../libview/ev-print-operation.c:1896
+msgid "None"
+msgstr "Немає"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:240
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:284
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f мм"
+
+#: ../properties/ev-properties-view.c:288
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f дюймів"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:312
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, книжкова (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:319
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, альбомна (%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d з %d)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "з %d"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:341
+msgid "Preparing to print…"
+msgstr "Підготовка до друку…"
+
+#: ../libview/ev-print-operation.c:343
+msgid "Finishing…"
+msgstr "Завершення…"
+
+#: ../libview/ev-print-operation.c:345
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "Друк сторінки %d з %d…"
+
+#: ../libview/ev-print-operation.c:1169
+msgid "Printing is not supported on this printer."
+msgstr "Друк на цьому принтері не підтримується."
+
+#: ../libview/ev-print-operation.c:1234
+msgid "Invalid page selection"
+msgstr "Некоректний файл формату zip"
+
+#: ../libview/ev-print-operation.c:1235
+msgid "Warning"
+msgstr "Застереження"
+
+#: ../libview/ev-print-operation.c:1237
+msgid "Your print range selection does not include any pages"
+msgstr "Обраний діапазон сторінок не містить сторінок"
+
+#: ../libview/ev-print-operation.c:1891
+msgid "Page Scaling:"
+msgstr "Масштаб сторінки:"
+
+#: ../libview/ev-print-operation.c:1897
+msgid "Shrink to Printable Area"
+msgstr "Скоротити до області друку"
+
+#: ../libview/ev-print-operation.c:1898
+msgid "Fit to Printable Area"
+msgstr "Умістити у області друку"
+
+#: ../libview/ev-print-operation.c:1901
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"Змінювати масштаб сторінок щоб умістити їх на сторінці принтера. Виберіть:\n"
+"\n"
+"• \"Ні\": Не змінювати масштаб.\n"
+"\n"
+"• \"Скоротити до області друку\": Сторінки документу, які більші за область "
+"друку зменшуються до розмірів області друку принтера.\n"
+"\n"
+"• \"Умістити у області друку\": Сторінки документу збільшуюся чи зменшуються "
+"при потребі, щоб уміститись у області друку принтера.\n"
+
+#: ../libview/ev-print-operation.c:1913
+msgid "Auto Rotate and Center"
+msgstr "Автоматичний поворот та центрування"
+
+#: ../libview/ev-print-operation.c:1916
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"Змінювати орієнтацію кожної сторінки принтера, для відповідності орієнтації "
+"кожній сторінці документа. Сторінки документу будуть центровані у сторінці "
+"принтера."
+
+#: ../libview/ev-print-operation.c:1921
+msgid "Select page size using document page size"
+msgstr "Виберіть розмір сторінки, користуючись розміром сторінки документу"
+
+#: ../libview/ev-print-operation.c:1923
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr ""
+"Коли увімкнено, кожна сторінка буде надрукована на папері того ж розміру, що "
+"й сторінка документа."
+
+#: ../libview/ev-print-operation.c:2005
+msgid "Page Handling"
+msgstr "Обробка сторінок"
+
+#: ../libview/ev-jobs.c:1434
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "Не вдається надрукувати сторінку %d: %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Прокрутка вверх"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Прокрутка вниз"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Прокрутка документу вверх"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Прокрутка документу вниз"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Відображення документу"
+
+#: ../libview/ev-view-presentation.c:668
+msgid "Jump to page:"
+msgstr "Перейти до сторінки:"
+
+#: ../libview/ev-view-presentation.c:970
+msgid "End of presentation. Click to exit."
+msgstr "Кінець презентації. Клацніть для виходу."
+
+#: ../libview/ev-view.c:1724
+msgid "Go to first page"
+msgstr "Перейти до першої сторінки"
+
+#: ../libview/ev-view.c:1726
+msgid "Go to previous page"
+msgstr "Перейти до попередньої сторінки"
+
+#: ../libview/ev-view.c:1728
+msgid "Go to next page"
+msgstr "Перейти до наступної сторінки"
+
+#: ../libview/ev-view.c:1730
+msgid "Go to last page"
+msgstr "Перейти до останньої сторінки"
+
+#: ../libview/ev-view.c:1732
+msgid "Go to page"
+msgstr "Перейти до сторінки"
+
+#: ../libview/ev-view.c:1734
+msgid "Find"
+msgstr "Знайти"
+
+#: ../libview/ev-view.c:1762
+#, c-format
+msgid "Go to page %s"
+msgstr "Перейти до сторінки %s"
+
+#: ../libview/ev-view.c:1768
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Перейти до %s у файлі %s"
+
+#: ../libview/ev-view.c:1771
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Перейти до файлу %s"
+
+#: ../libview/ev-view.c:1779
+#, c-format
+msgid "Launch %s"
+msgstr "Запустити %s"
+
+#: ../libview/ev-view.c:3923 ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "Завантаження…"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Знайти:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5065
+msgid "Find Pre_vious"
+msgstr "Знайти _попереднє"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "Знайти попереднє місце зустрічі рядка"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5063
+msgid "Find Ne_xt"
+msgstr "Зна_йти далі"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "Знайти наступне місце зустрічі рядка"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "Збігається _регістр"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "Змінити чутливість пошуку до регістру"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Пароль для документу \"%s\""
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "Перетворення %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "Перетворено %d з %d документів"
+
+#: ../shell/ev-convert-metadata.c:164 ../shell/ev-convert-metadata.c:179
+msgid "Converting metadata"
+msgstr "Перетворення метаданих"
+
+#: ../shell/ev-convert-metadata.c:185
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Формат метаданих Evince було змінено, і тому потрібна міграція. Якщо "
+"міграцію буде скасовано, сховище метаданих не працюватиме."
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Відрити недавно відкритий документ"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Цей документ заблокований, доступ до нього можливий лише після вводу паролю."
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "_Розблокувати документ"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Введіть пароль"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Вимагається пароль"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr ""
+"Документ “%s” - заблокований, треба вказати пароль перш ніж його можна "
+"відкрити."
+
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Пароль:"
+
+#: ../shell/ev-password-view.c:365
+msgid "Forget password _immediately"
+msgstr "Забути пароль н_егайно"
+
+#: ../shell/ev-password-view.c:377
+msgid "Remember password until you _log out"
+msgstr "Запам'ятати пароль для цього _сеансу"
+
+#: ../shell/ev-password-view.c:389
+msgid "Remember _forever"
+msgstr "Запам'ятати назав_жди"
+
+#: ../shell/ev-properties-dialog.c:58
+msgid "Properties"
+msgstr "Властивості"
+
+#: ../shell/ev-properties-dialog.c:92
+msgid "General"
+msgstr "Загальне"
+
+#: ../shell/ev-properties-dialog.c:102
+msgid "Fonts"
+msgstr "Шрифти"
+
+#: ../shell/ev-properties-dialog.c:115
+msgid "Document License"
+msgstr "Ліцензія документу"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Шрифт"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "Отримання інформації про шрифт… %3d%%"
+
+#: ../shell/ev-properties-license.c:138
+msgid "Usage terms"
+msgstr "Умови використання"
+
+#: ../shell/ev-properties-license.c:144
+msgid "Text License"
+msgstr "Текст ліцензії"
+
+#: ../shell/ev-properties-license.c:150
+msgid "Further Information"
+msgstr "Подальша інформація"
+
+#: ../shell/ev-sidebar-attachments.c:712
+msgid "Attachments"
+msgstr "Вкладки"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "Шари"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "Друк…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "Індекс"
+
+#: ../shell/ev-sidebar-thumbnails.c:956
+msgid "Thumbnails"
+msgstr "Мініатюри"
+
+#: ../shell/ev-window.c:839
+#, c-format
+msgid "Page %s — %s"
+msgstr "Сторінка %s — %s"
+
+#: ../shell/ev-window.c:841
+#, c-format
+msgid "Page %s"
+msgstr "Сторінка %s"
+
+#: ../shell/ev-window.c:1285
+msgid "The document contains no pages"
+msgstr "Документ не містить сторінок"
+
+#: ../shell/ev-window.c:1288
+msgid "The document contains only empty pages"
+msgstr "Документ містить лише порожні сторінки"
+
+#: ../shell/ev-window.c:1482 ../shell/ev-window.c:1648
+msgid "Unable to open document"
+msgstr "Не вдається відкрити документ"
+
+#: ../shell/ev-window.c:1619
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "Документ завантажується з “%s”"
+
+#: ../shell/ev-window.c:1761 ../shell/ev-window.c:2038
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Завантаження документу (%d%%)"
+
+#: ../shell/ev-window.c:1794
+msgid "Failed to load remote file."
+msgstr "Не вдається завантажити віддалений файл."
+
+#: ../shell/ev-window.c:1982
+#, c-format
+msgid "Reloading document from %s"
+msgstr "Оновлення документу з %s"
+
+#: ../shell/ev-window.c:2014
+msgid "Failed to reload document."
+msgstr "Не вдається оновити документ."
+
+#: ../shell/ev-window.c:2169
+msgid "Open Document"
+msgstr "Відкрити документ"
+
+#: ../shell/ev-window.c:2433
+#, c-format
+msgid "Saving document to %s"
+msgstr "Збереження документу в %s"
+
+#: ../shell/ev-window.c:2436
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "Збереження вкладення у %s"
+
+#: ../shell/ev-window.c:2439
+#, c-format
+msgid "Saving image to %s"
+msgstr "Збереження зображення у %s"
+
+#: ../shell/ev-window.c:2483 ../shell/ev-window.c:2583
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Документ неможливо зберегти у файлі “%s”."
+
+#: ../shell/ev-window.c:2514
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Відвантаження документа (%d%%)"
+
+#: ../shell/ev-window.c:2518
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Відвантаження вкладення (%d%%)"
+
+#: ../shell/ev-window.c:2522
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Відвантаження зображення (%d%%)"
+
+#: ../shell/ev-window.c:2644
+msgid "Save a Copy"
+msgstr "Зберегти копію"
+
+#: ../shell/ev-window.c:2949
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d завдання очікує у черзі"
+msgstr[1] "%d завдання очікують у черзі"
+msgstr[2] "%d завдань очікують у черзі"
+
+#: ../shell/ev-window.c:3062
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Друк завдання «%s»"
+
+#: ../shell/ev-window.c:3274
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Очікувати завершення завдання на друк «%s» перед закриттям?"
+
+#: ../shell/ev-window.c:3277
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr ""
+"%d завдань друку ще не завершені. Очікувати їх завершення перед закриттям "
+"документа?"
+
+#: ../shell/ev-window.c:3289
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr ""
+"Якщо ви закриєте вікно, завдання на друк, вставлені у чергу, не будуть "
+"виконані."
+
+#: ../shell/ev-window.c:3293
+msgid "Cancel _print and Close"
+msgstr "Скасувати _друк та закрити"
+
+#: ../shell/ev-window.c:3297
+msgid "Close _after Printing"
+msgstr "Закрити п_ісля друку"
+
+#: ../shell/ev-window.c:3858
+msgid "Toolbar Editor"
+msgstr "Редактор панелі інструментів"
+
+#: ../shell/ev-window.c:3990
+msgid "There was an error displaying help"
+msgstr "Виникла помилка показі довіки"
+
+#: ../shell/ev-window.c:4201
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"Перегляд документів.\n"
+"Використовує %s (%s)"
+
+#: ../shell/ev-window.c:4232
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince - вільне програмне забезпечення; ви можете вільно розповсюджувати або "
+"змінювати його при на умовах вільної ліцензії GNU General Public License яка "
+"опублікована Free Software Foundation; або версії 2 цієї ліцензії, або (на "
+"ваш розсуд) будь-якій старшій версії.\n"
+
+#: ../shell/ev-window.c:4236
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince розповсюджується зі сподіванням, що програма буде корисною, але без "
+"БУДЬ-ЯКИХ ГАРАНТІЙ; навіть не гарантується ПРИДАТНІСТЬ та ВІДПОВІДНІСТЬ БУДЬ-"
+"ЯКИМ ВИМОГАМ. Докладніше про це дивіться GNU General Public License.\n"
+
+#: ../shell/ev-window.c:4240
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 59 Temple "
+"Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Ви маєте отримати копію GNU General Public License разом з Evince; Якщо це "
+"не так, напишіть у Software Foundation, Inc., 59 Temple Place, Suite 330, "
+"Boston, MA 02111-1307 USA\n"
+
+#: ../shell/ev-window.c:4265
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4268
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Автори Evince"
+
+#: ../shell/ev-window.c:4274
+msgid "translator-credits"
+msgstr "Максим Дзюманенко <[email protected]>"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4543
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d відповідність"
+msgstr[1] "%d відповідності"
+msgstr[2] "%d відповідностей"
+
+#: ../shell/ev-window.c:4551
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% залишається для пошуку"
+
+#: ../shell/ev-window.c:5028
+msgid "_File"
+msgstr "_Файл"
+
+#: ../shell/ev-window.c:5029
+msgid "_Edit"
+msgstr "_Правка"
+
+#: ../shell/ev-window.c:5030
+msgid "_View"
+msgstr "_Вигляд"
+
+#: ../shell/ev-window.c:5031
+msgid "_Go"
+msgstr "Пере_йти"
+
+#: ../shell/ev-window.c:5032
+msgid "_Help"
+msgstr "_Довідка"
+
+#. File menu
+#: ../shell/ev-window.c:5035 ../shell/ev-window.c:5303
+msgid "_Open…"
+msgstr "_Відкрити…"
+
+#: ../shell/ev-window.c:5036 ../shell/ev-window.c:5304
+msgid "Open an existing document"
+msgstr "Відрити документ"
+
+#: ../shell/ev-window.c:5038
+msgid "Op_en a Copy"
+msgstr "Відкрити _копію"
+
+#: ../shell/ev-window.c:5039
+msgid "Open a copy of the current document in a new window"
+msgstr "Відкрити копію поточного документу у новому вікні"
+
+#: ../shell/ev-window.c:5041
+msgid "_Save a Copy…"
+msgstr "З_берегти копію…"
+
+#: ../shell/ev-window.c:5042
+msgid "Save a copy of the current document"
+msgstr "Зберегти копію поточного документу"
+
+#: ../shell/ev-window.c:5044
+msgid "Page Set_up…"
+msgstr "Пара_метри сторінки…"
+
+#: ../shell/ev-window.c:5045
+msgid "Set up the page settings for printing"
+msgstr "Налаштовування параметрів сторінки для друку"
+
+#: ../shell/ev-window.c:5047
+msgid "_Print…"
+msgstr "Д_рук…"
+
+#: ../shell/ev-window.c:5050
+msgid "P_roperties"
+msgstr "В_ластивості"
+
+#: ../shell/ev-window.c:5058
+msgid "Select _All"
+msgstr "Виді_лити все"
+
+#: ../shell/ev-window.c:5060
+msgid "_Find…"
+msgstr "З_найти…"
+
+#: ../shell/ev-window.c:5061
+msgid "Find a word or phrase in the document"
+msgstr "Знайти слово чи фразу у документі"
+
+#: ../shell/ev-window.c:5067
+msgid "T_oolbar"
+msgstr "П_анель інструментів"
+
+#: ../shell/ev-window.c:5069
+msgid "Rotate _Left"
+msgstr "Повернути л_іворуч"
+
+#: ../shell/ev-window.c:5071
+msgid "Rotate _Right"
+msgstr "Повернути п_раворуч"
+
+#: ../shell/ev-window.c:5082
+msgid "_Reload"
+msgstr "_Оновити"
+
+#: ../shell/ev-window.c:5083
+msgid "Reload the document"
+msgstr "Оновити документ"
+
+#: ../shell/ev-window.c:5086
+msgid "Auto_scroll"
+msgstr "Авто_прокручування"
+
+#: ../shell/ev-window.c:5096
+msgid "_First Page"
+msgstr "_Початок"
+
+#: ../shell/ev-window.c:5097
+msgid "Go to the first page"
+msgstr "Перейти до першої сторінки"
+
+#: ../shell/ev-window.c:5099
+msgid "_Last Page"
+msgstr "_Кінець"
+
+#: ../shell/ev-window.c:5100
+msgid "Go to the last page"
+msgstr "Перейти до останньої сторінки"
+
+#. Help menu
+#: ../shell/ev-window.c:5104
+msgid "_Contents"
+msgstr "_Зміст"
+
+#: ../shell/ev-window.c:5107
+msgid "_About"
+msgstr "_Про програму"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5111
+msgid "Leave Fullscreen"
+msgstr "Вийти з повноекранного режиму"
+
+#: ../shell/ev-window.c:5112
+msgid "Leave fullscreen mode"
+msgstr "Вийти з повноекранного режиму"
+
+#: ../shell/ev-window.c:5114
+msgid "Start Presentation"
+msgstr "Запустити презентацію"
+
+#: ../shell/ev-window.c:5115
+msgid "Start a presentation"
+msgstr "Запустити презентацію"
+
+#. View Menu
+#: ../shell/ev-window.c:5174
+msgid "_Toolbar"
+msgstr "П_анель інструментів"
+
+#: ../shell/ev-window.c:5175
+msgid "Show or hide the toolbar"
+msgstr "Показати чи сховати панель інструментів"
+
+#: ../shell/ev-window.c:5177
+msgid "Side _Pane"
+msgstr "Бі_чна панель"
+
+#: ../shell/ev-window.c:5178
+msgid "Show or hide the side pane"
+msgstr "Показати чи сховати бічну панель"
+
+#: ../shell/ev-window.c:5180
+msgid "_Continuous"
+msgstr "Б_езперервно"
+
+#: ../shell/ev-window.c:5181
+msgid "Show the entire document"
+msgstr "Показувати документ цілком"
+
+#: ../shell/ev-window.c:5183
+msgid "_Dual"
+msgstr "_Дві сторінки"
+
+#: ../shell/ev-window.c:5184
+msgid "Show two pages at once"
+msgstr "Показувати по дві сторінки"
+
+#: ../shell/ev-window.c:5186
+msgid "_Fullscreen"
+msgstr "_На повний екран"
+
+#: ../shell/ev-window.c:5187
+msgid "Expand the window to fill the screen"
+msgstr "Розширити вікно на повний екран"
+
+#: ../shell/ev-window.c:5189
+msgid "Pre_sentation"
+msgstr "_Презентація"
+
+#: ../shell/ev-window.c:5190
+msgid "Run document as a presentation"
+msgstr "Відображати документ як презентацію"
+
+#: ../shell/ev-window.c:5198
+msgid "_Inverted Colors"
+msgstr "_Інвертовані кольори"
+
+#: ../shell/ev-window.c:5199
+msgid "Show page contents with the colors inverted"
+msgstr "Показати зміст сторінки у інверсних кольорах"
+
+#. Links
+#: ../shell/ev-window.c:5207
+msgid "_Open Link"
+msgstr "_Відкрити посилання"
+
+#: ../shell/ev-window.c:5209
+msgid "_Go To"
+msgstr "Пере_йти"
+
+#: ../shell/ev-window.c:5211
+msgid "Open in New _Window"
+msgstr "Відкрити у новому _вікні"
+
+#: ../shell/ev-window.c:5213
+msgid "_Copy Link Address"
+msgstr "_Копіювати адресу посилання"
+
+#: ../shell/ev-window.c:5215
+msgid "_Save Image As…"
+msgstr "Зберегти зображення _як…"
+
+#: ../shell/ev-window.c:5217
+msgid "Copy _Image"
+msgstr "Копіювати _зображення"
+
+#: ../shell/ev-window.c:5222
+msgid "_Open Attachment"
+msgstr "_Відкрити вкладення"
+
+#: ../shell/ev-window.c:5224
+msgid "_Save Attachment As…"
+msgstr "З_берегти вкладення як…"
+
+#: ../shell/ev-window.c:5277
+msgid "Zoom"
+msgstr "Масштаб"
+
+#: ../shell/ev-window.c:5279
+msgid "Adjust the zoom level"
+msgstr "Змінити масштаб"
+
+#: ../shell/ev-window.c:5289
+msgid "Navigation"
+msgstr "Переміщення"
+
+#: ../shell/ev-window.c:5291
+msgid "Back"
+msgstr "Назад"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5294
+msgid "Move across visited pages"
+msgstr "Переміщення по відвіданим сторінкам"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5324
+msgid "Previous"
+msgstr "Попередня"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5329
+msgid "Next"
+msgstr "Наступна"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5333
+msgid "Zoom In"
+msgstr "Збільшити"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5337
+msgid "Zoom Out"
+msgstr "Зменшити"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5345
+msgid "Fit Width"
+msgstr "По ширині сторінки"
+
+#: ../shell/ev-window.c:5506 ../shell/ev-window.c:5523
+msgid "Unable to launch external application."
+msgstr "Не вдається відкрити зовнішню програму."
+
+#: ../shell/ev-window.c:5580
+msgid "Unable to open external link"
+msgstr "Не вдається відкрити зовнішнє посилання"
+
+#: ../shell/ev-window.c:5747
+msgid "Couldn't find appropriate format to save image"
+msgstr "Не вдається знайти відповідний формат для збереження зображення"
+
+#: ../shell/ev-window.c:5789
+msgid "The image could not be saved."
+msgstr "Не вдається зберегти зображення."
+
+#: ../shell/ev-window.c:5821
+msgid "Save Image"
+msgstr "Зберегти зображення"
+
+#: ../shell/ev-window.c:5888
+msgid "Unable to open attachment"
+msgstr "Не вдається відкрити вкладення"
+
+#: ../shell/ev-window.c:5941
+msgid "The attachment could not be saved."
+msgstr "Вкладення зберегти неможливо."
+
+#: ../shell/ev-window.c:5986
+msgid "Save Attachment"
+msgstr "Зберегти вкладення"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s - вимагається пароль"
+
+#: ../shell/ev-utils.c:315
+msgid "By extension"
+msgstr "За розширенням"
+
+#: ../shell/main.c:70 ../shell/main.c:246
+msgid "MATE Document Viewer"
+msgstr "Перегляд документів у MATE"
+
+#: ../shell/main.c:78
+msgid "The page of the document to display."
+msgstr "Перейти до сторінки документа."
+
+#: ../shell/main.c:78
+msgid "PAGE"
+msgstr "Сторінка"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "Запустити evince у повноекранного режимі"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "Запустити evince у режимі презентації"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "Запустити evince у режимі попереднього перегляду"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "Слово чи фраза, що шукається у документі"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "РЯДОК"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[ФАЙЛ…]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr ""
+"Можливе логічне значення: true вмикає створення мініатюр, а false вимикає"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Увімкнути перегляд документів PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Команда створення мініатюр для документів PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"Команда та аргументи для запуску програми створення мініатюр документа PDF. "
+"Додаткову інформацію дивіться у документації з caja."
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 00000000..07595e49
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,1424 @@
+# Vietnamese translation for Evince.
+# Copyright © 2009 MATE i18n Project for Vietnamese.
+# Clytie Siddall <[email protected]>, 2005-2009.
+# Nguyễn Thái Ngọc Duy <[email protected]>, 2008.
+# Nguyễn Đình Trung <[email protected]>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince MATE TRUNK\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?product=evince&component=general\n"
+"POT-Creation-Date: 2009-02-01 11:33+0000\n"
+"PO-Revision-Date: 2009-02-07 16:05+0930\n"
+"Last-Translator: Clytie Siddall <[email protected]>\n"
+"Language-Team: Vietnamese <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: LocFactoryEditor 1.8\n"
+
+#: ../backend/comics/comics-document.c:162
+#, c-format
+msgid "File corrupted."
+msgstr "Tập tin bị hỏng."
+
+#: ../backend/comics/comics-document.c:196
+#, c-format
+msgid "No images found in archive %s"
+msgstr "Không tìm thấy ảnh trong kho %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Truyện tranh vui"
+
+#: ../backend/djvu/djvu-document.c:247
+#, c-format
+msgid "The document is composed by several files. One or more of such files cannot be accessed."
+msgstr "Tài liệu được tạo thành từ nhiều tập tin. Một trong số đó không thể truy cập được."
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "Djvu Documents"
+msgstr "Tài liệu Djvu"
+
+#: ../backend/dvi/dvi-document.c:96
+#, c-format
+msgid "File not available"
+msgstr "Tập tin không sẵn sàng."
+
+#: ../backend/dvi/dvi-document.c:112
+#, c-format
+msgid "DVI document has incorrect format"
+msgstr "Tài liệu DVI có định dạng không đúng"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "Tài liệu DVI"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:699
+msgid "Yes"
+msgstr "Có"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:702
+msgid "No"
+msgstr "Không"
+
+#: ../backend/pdf/ev-poppler.cc:776
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:778
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:780
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:784
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:786
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:788
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:790
+msgid "Unknown font type"
+msgstr "Kiểu phông chữ lạ"
+
+#: ../backend/pdf/ev-poppler.cc:816
+msgid "No name"
+msgstr "Không tên"
+
+#: ../backend/pdf/ev-poppler.cc:824
+msgid "Embedded subset"
+msgstr "Tập con nhúng"
+
+#: ../backend/pdf/ev-poppler.cc:826
+msgid "Embedded"
+msgstr "Nhúng"
+
+#: ../backend/pdf/ev-poppler.cc:828
+msgid "Not embedded"
+msgstr "Không nhúng"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "Tài liệu PDF"
+
+#: ../backend/impress/impress-document.c:297
+#, c-format
+msgid "Remote files aren't supported"
+msgstr "Tập tin từ xa không được hỗ trợ"
+
+#: ../backend/impress/impress-document.c:308
+#, c-format
+msgid "Invalid document"
+msgstr "Tài liệu không hợp lệ"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Ảnh chiều Impress"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "Không lỗi"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "Không đủ bộ nhớ"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find zip signature"
+msgstr "Không tìm thấy chữ kí zip"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid zip file"
+msgstr "Tập tin zip không hợp lệ"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file zips are not supported"
+msgstr "Không hỗ trợ kho nén zip đa tập tin"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "Không thể mở tập tin"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "Không thể đọc dữ liệu từ tập tin"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the zip archive"
+msgstr "Không tìm thấy tập tin trong kho nén zip"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "Lỗi không xác định"
+
+#: ../backend/ps/ev-spectre.c:113
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "Lỗi khi tải tài liệu '%s'"
+
+#: ../backend/ps/ev-spectre.c:146
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "Lỗi khi lưu tài liệu '%s'"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "Tài liệu Postscript"
+
+#: ../libdocument/ev-attachment.c:304
+#: ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "Không thể lưu phần đính kèm '%s': %s"
+
+#: ../libdocument/ev-attachment.c:373
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "Không thể mở phần đính kèm '%s': %s"
+
+#: ../libdocument/ev-attachment.c:408
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "Không thể mở đồ phần đính kèm '%s'"
+
+#: ../libdocument/ev-document-factory.c:127
+#: ../libdocument/ev-document-factory.c:248
+#, c-format
+msgid "Unknown MIME Type"
+msgstr "Không biết kiểu MIME"
+
+#: ../libdocument/ev-document-factory.c:147
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "Không hỗ trợ dạng tập tin %s (%s)"
+
+#: ../libdocument/ev-document-factory.c:303
+msgid "All Documents"
+msgstr "Mọi tài liệu"
+
+#: ../libdocument/ev-document-factory.c:335
+msgid "All Files"
+msgstr "Mọi tập tin"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:439
+msgid "Co_nnect"
+msgstr "Kết _nối"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:483
+msgid "Connect _anonymously"
+msgstr "Kết nối nặc d_anh"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:492
+msgid "Connect as u_ser:"
+msgstr "Kết nối dưới n_gười dùng:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:529
+msgid "_Username:"
+msgstr "Tên người _dùng:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:533
+msgid "_Domain:"
+msgstr "_Tên miền:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:538
+#: ../shell/ev-password-view.c:332
+msgid "_Password:"
+msgstr "_Mật khẩu:"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:553
+msgid "_Forget password immediately"
+msgstr "_Không lưu mật mật khẩu"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:561
+msgid "_Remember password until you logout"
+msgstr "_Nhớ mật khẩu đến khi bạn đăng xuất"
+
+#: ../cut-n-paste/evmountoperation/ev-mount-operation.c:569
+msgid "_Remember forever"
+msgstr "_Luôn lưu mật khẩu"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "Tập tin không phải là tập tin .desktop hợp lệ"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "Không nhận dạng được phiên bản tập tin desktop '%s'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "Đang chạy %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "Ứng dụng không chấp nhận tài liệu từ dòng lệnh"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "Không nhận dạng được tuỳ chọn chạy: %d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "Không thể chuyển URI của tài liệu cho mục desktop 'Type=Link'"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "Mục không thể chạy"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:224
+msgid "Disable connection to session manager"
+msgstr "Tắt kết nối đến bộ quản lý phiên làm việc"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:227
+msgid "Specify file containing saved configuration"
+msgstr "Xác định tập tin chứa cấu hình đã lưu"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:227
+msgid "FILE"
+msgstr "TẬP TIN"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:230
+msgid "Specify session management ID"
+msgstr "Xác định ID quản lý phiên làm việc"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:230
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:244
+#| msgid "Session Management Options"
+msgid "Session management options:"
+msgstr "Các tuỳ chọn quản lý buổi hợp:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:245
+#| msgid "Show Session Management options"
+msgid "Show session management options"
+msgstr "Hiển thị các tuỳ chọn quản lý buổi hợp"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:918
+#, c-format
+msgid "Show “_%s”"
+msgstr "Hiện '_%s'"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1381
+msgid "_Move on Toolbar"
+msgstr "_Di chuyển trên thanh công cụ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1382
+msgid "Move the selected item on the toolbar"
+msgstr "Di chuyển mục đã chọn trên thanh công cụ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1383
+msgid "_Remove from Toolbar"
+msgstr "_Gỡ khỏi thanh công cụ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1384
+msgid "Remove the selected item from the toolbar"
+msgstr "Gỡ mục đã chọn khỏi thanh công cụ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1385
+msgid "_Delete Toolbar"
+msgstr "_Xoá thanh công cụ"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1386
+msgid "Remove the selected toolbar"
+msgstr "Xoá thanh công cụ đã chọn"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:485
+msgid "Separator"
+msgstr "Thanh phân cách"
+
+#: ../cut-n-paste/totem-screensaver/totem-scrsaver.c:111
+msgid "Running in presentation mode"
+msgstr "Đang chạy trong chế độ trình diễn"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48
+#: ../shell/ev-window.c:5276
+msgid "Best Fit"
+msgstr "Vừa khít"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "Vừa độ rộng trang"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../data/evince.desktop.in.in.h:1
+#: ../shell/ev-window.c:4254
+#: ../shell/ev-window-title.c:149
+#, c-format
+msgid "Document Viewer"
+msgstr "Bộ xem tài liệu"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multipage documents"
+msgstr "Xem tài liệu nhiều trang"
+
+#: ../data/evince.schemas.in.h:1
+msgid "Override document restrictions"
+msgstr "Bỏ hạn chế tài liệu"
+
+#: ../data/evince.schemas.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "Bỏ qua những hạn chế của tài liệu, như hạn chế sao chép hay in."
+
+#: ../properties/ev-properties-main.c:113
+msgid "Document"
+msgstr "Tài liệu"
+
+#: ../properties/ev-properties-view.c:59
+#| msgid "_File"
+msgid "Title"
+msgstr "Tựa đề"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Location"
+msgstr "Vị trí"
+
+#: ../properties/ev-properties-view.c:61
+#| msgid "<b>Subject:</b>"
+msgid "Subject"
+msgstr "Chủ đề"
+
+#: ../properties/ev-properties-view.c:62
+#| msgid "<b>Author:</b>"
+msgid "Author"
+msgstr "Tác giả"
+
+#: ../properties/ev-properties-view.c:63
+#| msgid "<b>Keywords:</b>"
+msgid "Keywords"
+msgstr "Từ khoá"
+
+#: ../properties/ev-properties-view.c:64
+#| msgid "<b>Producer:</b>"
+msgid "Producer"
+msgstr "Chủ nhiệm"
+
+#: ../properties/ev-properties-view.c:65
+#| msgid "<b>Creator:</b>"
+msgid "Creator"
+msgstr "Người tạo"
+
+#: ../properties/ev-properties-view.c:66
+#| msgid "<b>Created:</b>"
+msgid "Created"
+msgstr "Ngày tạo"
+
+#: ../properties/ev-properties-view.c:67
+#| msgid "<b>Modified:</b>"
+msgid "Modified"
+msgstr "Ngày sửa"
+
+#: ../properties/ev-properties-view.c:68
+#| msgid "<b>Number of Pages:</b>"
+msgid "Number of Pages"
+msgstr "Số trang"
+
+#: ../properties/ev-properties-view.c:69
+#| msgid "<b>Optimized:</b>"
+msgid "Optimized"
+msgstr "Tối ưu"
+
+#: ../properties/ev-properties-view.c:70
+#| msgid "<b>Format:</b>"
+msgid "Format"
+msgstr "Định dạng"
+
+#: ../properties/ev-properties-view.c:71
+#| msgid "<b>Security:</b>"
+msgid "Security"
+msgstr "Bảo mật"
+
+#: ../properties/ev-properties-view.c:72
+#| msgid "<b>Paper Size:</b>"
+msgid "Paper Size"
+msgstr "Kích cỡ tờ giấy"
+
+#: ../properties/ev-properties-view.c:202
+msgid "None"
+msgstr "Không có"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:227
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:271
+#, c-format
+msgid "%.0f x %.0f mm"
+msgstr "%.0f x %.0f mm"
+
+#: ../properties/ev-properties-view.c:275
+#, c-format
+msgid "%.2f x %.2f inch"
+msgstr "%.2f x %.2f inch"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:299
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, Dọc (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:306
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, Ngang (%s)"
+
+#: ../libview/ev-jobs.c:949
+#, c-format
+msgid "Failed to create file “%s”: %s"
+msgstr "Lỗi khi tạo tập tin '%s': %s"
+
+#: ../libview/ev-view-accessible.c:41
+msgid "Scroll Up"
+msgstr "Cuộn lên"
+
+#: ../libview/ev-view-accessible.c:42
+msgid "Scroll Down"
+msgstr "Cuộn xuống"
+
+#: ../libview/ev-view-accessible.c:48
+msgid "Scroll View Up"
+msgstr "Cuộn khung xem lên"
+
+#: ../libview/ev-view-accessible.c:49
+msgid "Scroll View Down"
+msgstr "Cuộn khung xem xuống"
+
+#: ../libview/ev-view-accessible.c:533
+msgid "Document View"
+msgstr "Khung xem tài liệu"
+
+#: ../libview/ev-view.c:1417
+msgid "Go to first page"
+msgstr "Về trang đầu"
+
+#: ../libview/ev-view.c:1419
+msgid "Go to previous page"
+msgstr "Về trang trước"
+
+#: ../libview/ev-view.c:1421
+msgid "Go to next page"
+msgstr "Tới trang tiếp theo"
+
+#: ../libview/ev-view.c:1423
+msgid "Go to last page"
+msgstr "Tới trang cuối cùng"
+
+#: ../libview/ev-view.c:1425
+msgid "Go to page"
+msgstr "Tới trang"
+
+#: ../libview/ev-view.c:1427
+msgid "Find"
+msgstr "Tìm"
+
+#: ../libview/ev-view.c:1455
+#, c-format
+msgid "Go to page %s"
+msgstr "Đi tới trang %s"
+
+#: ../libview/ev-view.c:1461
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "Tới %s trên tập tin '%s'"
+
+#: ../libview/ev-view.c:1464
+#, c-format
+msgid "Go to file “%s”"
+msgstr "Tới tập tin '%s'"
+
+#: ../libview/ev-view.c:1472
+#, c-format
+msgid "Launch %s"
+msgstr "Khởi chạy %s"
+
+#: ../libview/ev-view.c:2387
+msgid "End of presentation. Press Escape to exit."
+msgstr "Hoàn tất trình diễn. Bấm phím Esc để thoát."
+
+#: ../libview/ev-view.c:3278
+msgid "Jump to page:"
+msgstr "Tới trang:"
+
+#: ../libview/ev-view.c:3541
+#: ../shell/ev-sidebar-layers.c:125
+#: ../shell/ev-sidebar-links.c:267
+msgid "Loading..."
+msgstr "Đang nạp..."
+
+#: ../shell/eggfindbar.c:146
+msgid "Search string"
+msgstr "Chuỗi tìm kiếm"
+
+#: ../shell/eggfindbar.c:147
+msgid "The name of the string to be found"
+msgstr "Chuỗi cần tìm"
+
+#: ../shell/eggfindbar.c:160
+msgid "Case sensitive"
+msgstr "Phân biệt chữ hoa/thường"
+
+#: ../shell/eggfindbar.c:161
+msgid "TRUE for a case sensitive search"
+msgstr "ĐÚNG khi tìm kiếm phân biệt chữ hoa/thường"
+
+#: ../shell/eggfindbar.c:168
+msgid "Highlight color"
+msgstr "Màu nổi bật"
+
+#: ../shell/eggfindbar.c:169
+msgid "Color of highlight for all matches"
+msgstr "Màu tô sáng cho mọi mục khớp"
+
+#: ../shell/eggfindbar.c:175
+msgid "Current color"
+msgstr "Màu hiện thời"
+
+#: ../shell/eggfindbar.c:176
+msgid "Color of highlight for the current match"
+msgstr "Màu tô sáng cho mục khớp hiện có"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "Tìm:"
+
+#: ../shell/eggfindbar.c:329
+#: ../shell/ev-window.c:5010
+msgid "Find Pre_vious"
+msgstr "Tìm _ngược"
+
+#: ../shell/eggfindbar.c:332
+msgid "Find previous occurrence of the search string"
+msgstr "Tìm tiếp theo chiều từ dưới lên"
+
+#: ../shell/eggfindbar.c:336
+#: ../shell/ev-window.c:5008
+msgid "Find Ne_xt"
+msgstr "Tìm _xuôi"
+
+#: ../shell/eggfindbar.c:339
+msgid "Find next occurrence of the search string"
+msgstr "Tìm tiếp theo chiều từ trên xuống"
+
+#: ../shell/eggfindbar.c:346
+msgid "C_ase Sensitive"
+msgstr "_Phân biệt hoa/thường"
+
+#: ../shell/eggfindbar.c:349
+msgid "Toggle case sensitive search"
+msgstr "Bật/tắt tìm kiếm phân biệt hoa/thường"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "Mật khẩu cho tài liệu %s"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "Mở một tài liệu vừa xem"
+
+#: ../shell/ev-page-action.c:76
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d trên %d)"
+
+#: ../shell/ev-page-action.c:78
+#, c-format
+msgid "of %d"
+msgstr "trên %d"
+
+#: ../shell/ev-password-view.c:144
+msgid "This document is locked and can only be read by entering the correct password."
+msgstr "Tài liệu này bị khoá và phải nhập mật khẩu đúng để đọc."
+
+#: ../shell/ev-password-view.c:153
+#: ../shell/ev-password-view.c:269
+msgid "_Unlock Document"
+msgstr "_Mở khóa tài liệu"
+
+#: ../shell/ev-password-view.c:261
+msgid "Enter password"
+msgstr "Nhập mật khẩu"
+
+#: ../shell/ev-password-view.c:301
+msgid "Password required"
+msgstr "Yêu cầu nhập mật khẩu"
+
+#: ../shell/ev-password-view.c:302
+#, c-format
+msgid "The document “%s” is locked and requires a password before it can be opened."
+msgstr "Tài liệu '%s' bị khoá và bạn cần nhập mật khẩu để mở."
+
+#: ../shell/ev-password-view.c:365
+#| msgid "_Forget password immediately"
+msgid "Forget password _immediately"
+msgstr "_Quên ngay mật khẩu"
+
+#: ../shell/ev-password-view.c:377
+#| msgid "_Remember password until you logout"
+msgid "Remember password until you _logout"
+msgstr "Nhớ mật khẩu đến khi bạn đăng _xuất"
+
+#: ../shell/ev-password-view.c:389
+#| msgid "_Remember forever"
+msgid "Remember _forever"
+msgstr "Nhớ _hẳn"
+
+#. Initial state
+#: ../shell/ev-print-operation.c:318
+msgid "Preparing to print ..."
+msgstr "Đang chuẩn bị in ..."
+
+#: ../shell/ev-print-operation.c:320
+#| msgid "_Find..."
+msgid "Finishing..."
+msgstr "Đang kết thúc..."
+
+#: ../shell/ev-print-operation.c:322
+#, c-format
+msgid "Printing page %d of %d..."
+msgstr "Đang in trang %d trên %d..."
+
+#: ../shell/ev-print-operation.c:1010
+msgid "Printing is not supported on this printer."
+msgstr "Không hỗ trợ việc in trên máy in này."
+
+#: ../shell/ev-print-operation.c:1136
+#: ../shell/ev-window.c:5061
+msgid "Print"
+msgstr "In"
+
+#: ../shell/ev-properties-dialog.c:57
+msgid "Properties"
+msgstr "Thông tin"
+
+#: ../shell/ev-properties-dialog.c:91
+msgid "General"
+msgstr "Chung"
+
+#: ../shell/ev-properties-dialog.c:101
+msgid "Fonts"
+msgstr "Phông chữ"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "Phông chữ"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information... %3d%%"
+msgstr "Đang tập hợp thông tin phông chữ... %3d%%"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "Đính kèm"
+
+#: ../shell/ev-sidebar-layers.c:395
+msgid "Layers"
+msgstr "Lớp"
+
+#: ../shell/ev-sidebar-links.c:340
+msgid "Print..."
+msgstr "In..."
+
+#: ../shell/ev-sidebar-links.c:720
+msgid "Index"
+msgstr "Chỉ mục"
+
+#: ../shell/ev-sidebar-thumbnails.c:751
+msgid "Thumbnails"
+msgstr "Hình thu nhỏ"
+
+#: ../shell/ev-window.c:837
+#, c-format
+msgid "Page %s - %s"
+msgstr "Trang %s - %s"
+
+#: ../shell/ev-window.c:839
+#, c-format
+msgid "Page %s"
+msgstr "Trang %s"
+
+#: ../shell/ev-window.c:1261
+msgid "The document contains no pages"
+msgstr "Tài liệu không có trang nào"
+
+#: ../shell/ev-window.c:1484
+#: ../shell/ev-window.c:1629
+msgid "Unable to open document"
+msgstr "Không mở được tài liệu"
+
+#: ../shell/ev-window.c:1603
+#, c-format
+msgid "Loading document from %s"
+msgstr "Đang nạp tài liệu từ %s"
+
+#: ../shell/ev-window.c:1741
+#: ../shell/ev-window.c:1934
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "Đang tải về tài liệu (%d%%)"
+
+#: ../shell/ev-window.c:1880
+#, c-format
+#| msgid "Reload the document"
+msgid "Reloading document from %s"
+msgstr "Đang nạp lại tài liệu từ %s"
+
+#: ../shell/ev-window.c:1913
+#| msgid "Failed to print document"
+msgid "Failed to reload document."
+msgstr "Lỗi nạp lại tài liệu."
+
+#: ../shell/ev-window.c:2052
+msgid "Open Document"
+msgstr "Mở tài liệu"
+
+#: ../shell/ev-window.c:2113
+#, c-format
+msgid "Couldn't create symlink “%s”: %s"
+msgstr "Không thể tạo liên kết tượng trưng '%s': %s"
+
+#: ../shell/ev-window.c:2142
+msgid "Cannot open a copy."
+msgstr "Không thể mở bản sao."
+
+#: ../shell/ev-window.c:2382
+#, c-format
+#| msgid "Shrink the document"
+msgid "Saving document to %s"
+msgstr "Đang lưu tài liệu vào %s"
+
+#: ../shell/ev-window.c:2385
+#, c-format
+#| msgid "Save Attachment"
+msgid "Saving attachment to %s"
+msgstr "Đang lưu tập tin đính kèm vào %s"
+
+#: ../shell/ev-window.c:2388
+#, c-format
+msgid "Saving image to %s"
+msgstr "Đang lưu ảnh vào %s"
+
+#: ../shell/ev-window.c:2433
+#: ../shell/ev-window.c:2530
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "Không thể lưu tập tin này thành '%s'."
+
+#: ../shell/ev-window.c:2461
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "Đang tải lên tài liệu (%d%%)"
+
+#: ../shell/ev-window.c:2465
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "Đang tải lên tập tin đính kèm (%d%%)"
+
+#: ../shell/ev-window.c:2469
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "Đang tải lên ảnh (%d%%)"
+
+#: ../shell/ev-window.c:2576
+msgid "Save a Copy"
+msgstr "Lưu một bản sao"
+
+#: ../shell/ev-window.c:2779
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "%d công việc bị hoãn trong hàng đợi"
+
+#: ../shell/ev-window.c:2835
+#: ../shell/ev-window.c:3945
+msgid "Failed to print document"
+msgstr "Lỗi khi in tài liệu"
+
+#: ../shell/ev-window.c:2892
+#, c-format
+msgid "Printing job “%s”"
+msgstr "Đang in công việc \"%s\""
+
+#: ../shell/ev-window.c:3089
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "Đợi đến khi hoàn tất công việc in \"%s\" trước khi đóng ?"
+
+#: ../shell/ev-window.c:3092
+#, c-format
+msgid "There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "Có %d công việc in vẫn hoạt động. Đợi đến khi hoàn tất tiến trình in trước khi in ?"
+
+#: ../shell/ev-window.c:3104
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "Nếu bạn đóng cửa sổ này thì công việc in nào bị hoãn sẽ không được in."
+
+#: ../shell/ev-window.c:3108
+msgid "Cancel _print and Close"
+msgstr "Thô_i in và Đóng"
+
+#: ../shell/ev-window.c:3112
+msgid "Close _after Printing"
+msgstr "Đóng s_au khi In"
+
+#: ../shell/ev-window.c:3715
+msgid "Toolbar Editor"
+msgstr "Bộ sửa đổi thanh công cụ"
+
+#: ../shell/ev-window.c:3847
+msgid "There was an error displaying help"
+msgstr "Gặp lỗi khi hiển thị trợ giúp"
+
+#: ../shell/ev-window.c:4250
+#, c-format
+msgid ""
+"Document Viewer.\n"
+"Using poppler %s (%s)"
+msgstr ""
+"Bộ xem tài liệu.\n"
+"Dùng poppler %s (%s)"
+
+#: ../shell/ev-window.c:4278
+msgid "Evince 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.\n"
+msgstr "Evince là phần mềm tự do; bạn có thể phát hành lại nó và/hoặc sửa đổi nó theo các điều khoản của Giấy phép Công cộng GNU như được xuất bản bởi Tổ chức Phần mềm Tự do; hoặc phiên bản 2 của Giấy phép này, hoặc bất kì phiên bản sau nào (tuỳ ý).\n"
+
+#: ../shell/ev-window.c:4282
+msgid "Evince 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.\n"
+msgstr "Evince được phân phối với mong muốn nó sẽ là một phần mềm có ích, nhưng KHÔNG PHẢI CHỊU BẤT KÌ TRÁCH NHIỆM NÀO. Xem Giấy phép Công cộng GNU để biết thêm chi tiết.\n"
+
+#: ../shell/ev-window.c:4286
+msgid "You should have received a copy of the GNU General Public License along with Evince; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Bạn đã nhận một bản sao của Giấy phép Công cộng GNU cùng với chương trình này; nếu không, hãy liên hệ Tổ chức Phần mềm Tự do,\n"
+"Free Software Foundation, Inc.,\n"
+" 51 Franklin Street, Fifth Floor,\n"
+"Boston, MA 02110-1301, USA\n"
+
+#: ../shell/ev-window.c:4310
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4313
+msgid "© 1996-2007 The Evince authors"
+msgstr "© năm 1996-2007 của các tác giả Evince"
+
+#: ../shell/ev-window.c:4319
+msgid "translator-credits"
+msgstr ""
+"Nhóm Việt hoá Mate <[email protected]>\n"
+"\n"
+"Launchpad Contributions:\n"
+" Clytie Siddall https://launchpad.net/~clytie\n"
+" Lê Quốc Thái https://launchpad.net/~lquocthai"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4537
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "Tìm thấy %d trên trang này."
+
+#: ../shell/ev-window.c:4545
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "%3d%% còn lại cần tìm kiếm."
+
+#: ../shell/ev-window.c:4973
+msgid "_File"
+msgstr "_Tập tin"
+
+#: ../shell/ev-window.c:4974
+msgid "_Edit"
+msgstr "_Hiệu chỉnh"
+
+#: ../shell/ev-window.c:4975
+msgid "_View"
+msgstr "_Xem"
+
+#: ../shell/ev-window.c:4976
+msgid "_Go"
+msgstr "_Di chuyển"
+
+#: ../shell/ev-window.c:4977
+msgid "_Help"
+msgstr "Trợ _giúp"
+
+#. File menu
+#: ../shell/ev-window.c:4980
+#: ../shell/ev-window.c:5159
+#: ../shell/ev-window.c:5238
+msgid "_Open..."
+msgstr "_Mở..."
+
+#: ../shell/ev-window.c:4981
+#: ../shell/ev-window.c:5239
+msgid "Open an existing document"
+msgstr "Mở tài liệu"
+
+#: ../shell/ev-window.c:4983
+msgid "Op_en a Copy"
+msgstr "Mở _bản sao"
+
+#: ../shell/ev-window.c:4984
+msgid "Open a copy of the current document in a new window"
+msgstr "Mở một bản sao của tài liệu hiện thời trong cửa sổ mới"
+
+#: ../shell/ev-window.c:4986
+#: ../shell/ev-window.c:5161
+msgid "_Save a Copy..."
+msgstr "Lưu một bản _sao..."
+
+#: ../shell/ev-window.c:4987
+msgid "Save a copy of the current document"
+msgstr "Lưu một bản sao của tài liệu hiện có"
+
+#: ../shell/ev-window.c:4989
+msgid "Print Set_up..."
+msgstr "Thiết lậ_p in ấn..."
+
+#: ../shell/ev-window.c:4990
+msgid "Setup the page settings for printing"
+msgstr "Thiết lập trang để in"
+
+#: ../shell/ev-window.c:4992
+msgid "_Print..."
+msgstr "_In..."
+
+#: ../shell/ev-window.c:4993
+#: ../shell/ev-window.c:5062
+msgid "Print this document"
+msgstr "In tài liệu này"
+
+#: ../shell/ev-window.c:4995
+msgid "P_roperties"
+msgstr "_Thông tin"
+
+#: ../shell/ev-window.c:5003
+msgid "Select _All"
+msgstr "Chọn _hết"
+
+#: ../shell/ev-window.c:5005
+msgid "_Find..."
+msgstr "_Tìm..."
+
+#: ../shell/ev-window.c:5006
+msgid "Find a word or phrase in the document"
+msgstr "Tìm một từ hay cụm từ trong tài liệu"
+
+#: ../shell/ev-window.c:5012
+msgid "T_oolbar"
+msgstr "Thanh _công cụ"
+
+#: ../shell/ev-window.c:5014
+msgid "Rotate _Left"
+msgstr "Xoay _trái"
+
+#: ../shell/ev-window.c:5016
+msgid "Rotate _Right"
+msgstr "Xoay _phải"
+
+#: ../shell/ev-window.c:5021
+msgid "Enlarge the document"
+msgstr "Phóng to tài liệu"
+
+#: ../shell/ev-window.c:5024
+msgid "Shrink the document"
+msgstr "Thu nhỏ tài liệu"
+
+#: ../shell/ev-window.c:5026
+msgid "_Reload"
+msgstr "Nạp _lại"
+
+#: ../shell/ev-window.c:5027
+msgid "Reload the document"
+msgstr "Cập nhật nội dung tài liệu"
+
+#: ../shell/ev-window.c:5030
+msgid "Auto_scroll"
+msgstr "Tự động _cuộn"
+
+#. Go menu
+#: ../shell/ev-window.c:5034
+msgid "_Previous Page"
+msgstr "Trang _trước"
+
+#: ../shell/ev-window.c:5035
+msgid "Go to the previous page"
+msgstr "Về trang trước"
+
+#: ../shell/ev-window.c:5037
+msgid "_Next Page"
+msgstr "Trang _sau"
+
+#: ../shell/ev-window.c:5038
+msgid "Go to the next page"
+msgstr "Đi tới trang kế tiếp"
+
+#: ../shell/ev-window.c:5040
+msgid "_First Page"
+msgstr "Trang đầ_u"
+
+#: ../shell/ev-window.c:5041
+msgid "Go to the first page"
+msgstr "Trở về trang đầu tiên"
+
+#: ../shell/ev-window.c:5043
+msgid "_Last Page"
+msgstr "Trang _cuối"
+
+#: ../shell/ev-window.c:5044
+msgid "Go to the last page"
+msgstr "Tới trang cuối"
+
+#. Help menu
+#: ../shell/ev-window.c:5048
+msgid "_Contents"
+msgstr "_Nội dung"
+
+#: ../shell/ev-window.c:5051
+msgid "_About"
+msgstr "_Giới thiệu"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5055
+msgid "Leave Fullscreen"
+msgstr "Bỏ chế độ toàn màn hình"
+
+#: ../shell/ev-window.c:5056
+msgid "Leave fullscreen mode"
+msgstr "Rời chế độ toàn màn hình"
+
+#: ../shell/ev-window.c:5058
+msgid "Start Presentation"
+msgstr "Chạy trình diễn"
+
+#: ../shell/ev-window.c:5059
+msgid "Start a presentation"
+msgstr "Khởi chạy một trình diễn"
+
+#. View Menu
+#: ../shell/ev-window.c:5115
+msgid "_Toolbar"
+msgstr "Thanh _công cụ"
+
+#: ../shell/ev-window.c:5116
+msgid "Show or hide the toolbar"
+msgstr "Hiển thị hay ẩn thanh công cụ"
+
+#: ../shell/ev-window.c:5118
+msgid "Side _Pane"
+msgstr "Khun_g lề"
+
+#: ../shell/ev-window.c:5119
+msgid "Show or hide the side pane"
+msgstr "Hiển thị hay ẩn khung lề"
+
+#: ../shell/ev-window.c:5121
+msgid "_Continuous"
+msgstr "Tiếp tục _suốt"
+
+#: ../shell/ev-window.c:5122
+msgid "Show the entire document"
+msgstr "Hiển thị toàn tài liệu"
+
+#: ../shell/ev-window.c:5124
+msgid "_Dual"
+msgstr "_Phân đôi"
+
+#: ../shell/ev-window.c:5125
+msgid "Show two pages at once"
+msgstr "Hiển thị đồng thời hai trang"
+
+#: ../shell/ev-window.c:5127
+msgid "_Fullscreen"
+msgstr "Toàn _màn hình"
+
+#: ../shell/ev-window.c:5128
+msgid "Expand the window to fill the screen"
+msgstr "Mở rộng cửa sổ vừa màn hình"
+
+#: ../shell/ev-window.c:5130
+msgid "Pre_sentation"
+msgstr "Trình _diễn"
+
+#: ../shell/ev-window.c:5131
+msgid "Run document as a presentation"
+msgstr "Chạy tài liệu là trình diễn"
+
+#: ../shell/ev-window.c:5133
+msgid "_Best Fit"
+msgstr "_Vừa khít"
+
+#: ../shell/ev-window.c:5134
+msgid "Make the current document fill the window"
+msgstr "Hiển thị toàn bộ trang trong cửa sổ"
+
+#: ../shell/ev-window.c:5136
+msgid "Fit Page _Width"
+msgstr "Vừa độ _rộng trang"
+
+#: ../shell/ev-window.c:5137
+msgid "Make the current document fill the window width"
+msgstr "Hiển thị trang bằng bề rộng cửa sổ"
+
+#. Links
+#: ../shell/ev-window.c:5144
+msgid "_Open Link"
+msgstr "_Mở liên kết"
+
+#: ../shell/ev-window.c:5146
+msgid "_Go To"
+msgstr "_Đi tới"
+
+#: ../shell/ev-window.c:5148
+msgid "Open in New _Window"
+msgstr "Mở trong cửa _sổ mới"
+
+#: ../shell/ev-window.c:5150
+msgid "_Copy Link Address"
+msgstr "_Chép địa chỉ liên kết"
+
+#: ../shell/ev-window.c:5152
+msgid "_Save Image As..."
+msgstr "_Lưu ảnh dạng..."
+
+#: ../shell/ev-window.c:5154
+msgid "Copy _Image"
+msgstr "_Chép ảnh"
+
+#: ../shell/ev-window.c:5200
+msgid "Page"
+msgstr "Trang"
+
+#: ../shell/ev-window.c:5201
+msgid "Select Page"
+msgstr "Chọn trang"
+
+#: ../shell/ev-window.c:5212
+msgid "Zoom"
+msgstr "Thu/Phóng"
+
+#: ../shell/ev-window.c:5214
+msgid "Adjust the zoom level"
+msgstr "Chỉnh cấp phóng"
+
+#: ../shell/ev-window.c:5224
+msgid "Navigation"
+msgstr "Duyệt qua"
+
+#: ../shell/ev-window.c:5226
+msgid "Back"
+msgstr "Lùi"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5229
+msgid "Move across visited pages"
+msgstr "Duyệt qua các trang đã thăm"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5259
+msgid "Previous"
+msgstr "Trước"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5264
+msgid "Next"
+msgstr "Sau"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5268
+msgid "Zoom In"
+msgstr "Phóng to"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5272
+msgid "Zoom Out"
+msgstr "Thu nhỏ"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5280
+msgid "Fit Width"
+msgstr "Vừa độ rộng"
+
+#: ../shell/ev-window.c:5447
+#: ../shell/ev-window.c:5465
+#| msgid "Unable to open external link"
+msgid "Unable to launch external application."
+msgstr "Không thể khởi chạy ứng dụng bên ngoài."
+
+#: ../shell/ev-window.c:5508
+msgid "Unable to open external link"
+msgstr "Không thể mở liên kết bên ngoài"
+
+#: ../shell/ev-window.c:5664
+msgid "Couldn't find appropriate format to save image"
+msgstr "Không thể tìm thấy dạng thức phù hợp để lưu ảnh"
+
+#: ../shell/ev-window.c:5703
+msgid "The image could not be saved."
+msgstr "Không thể lưu ảnh."
+
+#: ../shell/ev-window.c:5735
+msgid "Save Image"
+msgstr "Lưu ảnh"
+
+#: ../shell/ev-window.c:5797
+msgid "Unable to open attachment"
+msgstr "Không thể mở phần đính kèm"
+
+#: ../shell/ev-window.c:5848
+msgid "The attachment could not be saved."
+msgstr "Không thể lưu phần đính kèm."
+
+#: ../shell/ev-window.c:5893
+msgid "Save Attachment"
+msgstr "Lưu phần đính kèm"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s — Yêu cầu mật khẩu"
+
+#: ../shell/ev-utils.c:330
+msgid "By extension"
+msgstr "Theo phần mở rộng"
+
+#: ../shell/main.c:57
+#: ../shell/main.c:345
+msgid "MATE Document Viewer"
+msgstr "Bộ xem tài liệu MATE"
+
+#: ../shell/main.c:65
+msgid "The page of the document to display."
+msgstr "Trang của tài liệu cần hiển thị."
+
+#: ../shell/main.c:65
+msgid "PAGE"
+msgstr "TRANG"
+
+#: ../shell/main.c:66
+msgid "Run evince in fullscreen mode"
+msgstr "Chạy Evince ở chế độ toàn màn hình"
+
+#: ../shell/main.c:67
+msgid "Run evince in presentation mode"
+msgstr "Chạy Evince ở chế độ trình diễn"
+
+#: ../shell/main.c:68
+msgid "Run evince as a previewer"
+msgstr "Chạy Evince ở chế độ xem thử"
+
+#: ../shell/main.c:69
+msgid "The word or phrase to find in the document"
+msgstr "Chuỗi cần tìm trong tài liệu"
+
+#: ../shell/main.c:69
+msgid "STRING"
+msgstr "CHUỖI"
+
+#: ../shell/main.c:73
+msgid "[FILE...]"
+msgstr "[TẬP TIN...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid "Boolean options available, true enables thumbnailing and false disables the creation of new thumbnails"
+msgstr "Giá trị logic: 'đúng' hiển thị hình thu nhỏ và 'sai' ẩn hình thu nhỏ"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "Hiển thị hình thu nhỏ của tài liệu PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "Lệnh tạo hình thu nhỏ cho tài liệu PDF"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid "Valid command plus arguments for the PDF Document thumbnailer. See caja thumbnailer documentation for more information."
+msgstr "Lệnh hợp lệ cộng với đối số cho bộ tạo hình thu nhỏ tài liệu PDF. Xem tài liệu hướng dẫn Caja về hình thu nhỏ để biết thêm thông tin."
+
diff --git a/po/wa.po b/po/wa.po
new file mode 100644
index 00000000..9176338e
--- /dev/null
+++ b/po/wa.po
@@ -0,0 +1,682 @@
+# SOME DESCRIPTIVE TITLE.
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Pablo Saratxaga <[email protected]>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: evince\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-04-01 02:52+0200\n"
+"PO-Revision-Date: 2005-04-01 09:05+0200\n"
+"Last-Translator: Pablo Saratxaga <[email protected]>\n"
+"Language-Team: Walloon <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+#: data/evince-password.glade.h:1
+msgid "*"
+msgstr "*"
+
+#: data/evince-password.glade.h:2
+msgid "<span size=\"smaller\"> </span>"
+msgstr "<span size=\"smaller\"> </span>"
+
+#: data/evince-password.glade.h:3
+msgid "_Password:"
+msgstr "_Sicret:"
+
+#: data/evince.desktop.in.h:1 shell/ev-window.c:470
+msgid "Document Viewer"
+msgstr "Håyneu di documints"
+
+#: data/evince.desktop.in.h:2 shell/main.c:87
+msgid "Evince Document Viewer"
+msgstr "Håyneu di documints Evince"
+
+#: data/evince.desktop.in.h:3
+msgid "View multipage documents"
+msgstr "Vey des documints multi-pådje"
+
+#: data/evince.schemas.in.h:1
+msgid "Default sidebar size"
+msgstr "Prémetowe grandeu del bår di costé"
+
+#: data/evince.schemas.in.h:2
+msgid "Show sidebar by default"
+msgstr "Mostrer l' bår di costé"
+
+#: data/evince.schemas.in.h:3
+msgid "Show sidebar by default."
+msgstr "Mostrer l' bår di costé come prémetowe dujhance."
+
+#: data/evince.schemas.in.h:4
+msgid "Show statusbar by default"
+msgstr "Mostrer l' bår ås messaedjes"
+
+#: data/evince.schemas.in.h:5
+msgid "Show statusbar by default."
+msgstr "Mostrer l' bår ås messaedjes come prémetowe dujhance."
+
+#: data/evince.schemas.in.h:6
+msgid "Show toolbar by default"
+msgstr "Mostrer l' bår ås usteyes"
+
+#: data/evince.schemas.in.h:7
+msgid "Show toolbar by default."
+msgstr "Mostrer l' bår ås usteyes come prémetowe dujhance."
+
+#: data/evince.schemas.in.h:8
+msgid "The default sidebar size."
+msgstr "Li prémetowe grandeu del bår di costé."
+
+#: ps/gsdefaults.c:30
+msgid "BBox"
+msgstr "BBox"
+
+#: ps/gsdefaults.c:31
+msgid "Letter"
+msgstr "US Letter"
+
+#: ps/gsdefaults.c:32
+msgid "Tabloid"
+msgstr "Tabloyide"
+
+#: ps/gsdefaults.c:33
+msgid "Ledger"
+msgstr "Ledger"
+
+#: ps/gsdefaults.c:34
+msgid "Legal"
+msgstr "US Legal"
+
+#: ps/gsdefaults.c:35
+msgid "Statement"
+msgstr "US Statement"
+
+#: ps/gsdefaults.c:36
+msgid "Executive"
+msgstr "US Executive"
+
+#: ps/gsdefaults.c:37
+msgid "A0"
+msgstr "A0"
+
+#: ps/gsdefaults.c:38
+msgid "A1"
+msgstr "A1"
+
+#: ps/gsdefaults.c:39
+msgid "A2"
+msgstr "A2"
+
+#: ps/gsdefaults.c:40
+msgid "A3"
+msgstr "A3"
+
+#: ps/gsdefaults.c:41
+msgid "A4"
+msgstr "A4"
+
+#: ps/gsdefaults.c:42
+msgid "A5"
+msgstr "A5"
+
+#: ps/gsdefaults.c:43
+msgid "B4"
+msgstr "B4"
+
+#: ps/gsdefaults.c:44
+msgid "B5"
+msgstr "B5"
+
+#: ps/gsdefaults.c:45
+msgid "Folio"
+msgstr "Folio"
+
+#: ps/gsdefaults.c:46
+msgid "Quarto"
+msgstr "Quarto"
+
+#: ps/gsdefaults.c:47
+msgid "10x14"
+msgstr "10x14"
+
+#: ps/ps-document.c:142
+msgid "No document loaded."
+msgstr "Nou documint d' tcherdjî."
+
+#: ps/ps-document.c:538
+msgid "Broken pipe."
+msgstr "Li buzea a stî sketé."
+
+#: ps/ps-document.c:722
+msgid "Interpreter failed."
+msgstr "L' eterpreteua fwait berwete."
+
+#. report error
+#: ps/ps-document.c:844
+#, c-format
+msgid "Error while decompressing file %s:\n"
+msgstr "Åk n' a nén stî tot distrindant l' fitchî %s:\n"
+
+#: ps/ps-document.c:1037
+#, c-format
+msgid "Cannot open file %s.\n"
+msgstr "Dji n' a savou drovi l' fitchî %s.\n"
+
+#: ps/ps-document.c:1039
+msgid "File is not readable."
+msgstr "Li fitchî n' est nén lijhåve."
+
+#: ps/ps-document.c:1059
+#, c-format
+msgid "Error while scanning file %s\n"
+msgstr "Åk n' a nén stî tot lijhant l' fitchî %s\n"
+
+#: ps/ps-document.c:1062
+msgid "The file is not a PostScript document."
+msgstr "Li fitchî n' est nén on documint PostScript."
+
+#: ps/ps-document.c:1075
+msgid "Document loaded."
+msgstr "Documint tcherdjî."
+
+#: shell/eggfindbar.c:141
+msgid "Search string"
+msgstr "Tchinne a cweri"
+
+#: shell/eggfindbar.c:142
+msgid "The name of the string to be found"
+msgstr "Li no del tchinne a cweri après"
+
+#: shell/eggfindbar.c:155
+msgid "Case sensitive"
+msgstr "Diferince po ptites et grandès letes"
+
+#: shell/eggfindbar.c:156
+msgid "TRUE for a case sensitive search"
+msgstr ""
+"VRAIY po on cweraedje ki fwait l' diferince inte les ptites et les grandès "
+"letes"
+
+#: shell/eggfindbar.c:163
+msgid "Highlight color"
+msgstr "Coleur po mete e valeur"
+
+#: shell/eggfindbar.c:164
+msgid "Color of highlight for all matches"
+msgstr "Li coleur po mete e valeur totes les corespondinces"
+
+#: shell/eggfindbar.c:170
+msgid "Current color"
+msgstr "Coleur do moumint"
+
+#: shell/eggfindbar.c:171
+msgid "Color of highlight for the current match"
+msgstr "Li coleur po mete e valeur li corespondince do moumint"
+
+#: shell/eggfindbar.c:288
+msgid "F_ind:"
+msgstr "_Trover:"
+
+#: shell/eggfindbar.c:301
+msgid "_Previous"
+msgstr "Di _dvant"
+
+#: shell/eggfindbar.c:302
+msgid "_Next"
+msgstr "_Shuvant"
+
+#: shell/eggfindbar.c:314
+msgid "C_ase Sensitive"
+msgstr "Diferince pititès/grandès _letes"
+
+#: shell/ev-application.c:120
+msgid "Open document"
+msgstr "Drovi documint"
+
+#: shell/ev-application.c:130
+msgid "PostScript and PDF Documents"
+msgstr "Documints PostScriptet PDF"
+
+#: shell/ev-application.c:138
+msgid "PostScript Documents"
+msgstr "Documints PostScript"
+
+#: shell/ev-application.c:145 shell/ev-window.c:890
+msgid "PDF Documents"
+msgstr "Documints PDF"
+
+#: shell/ev-application.c:150
+msgid "Images"
+msgstr "Imådjes"
+
+#: shell/ev-application.c:155 shell/ev-window.c:895
+msgid "All Files"
+msgstr "Tos les fitchîs"
+
+#: shell/ev-page-action.c:71
+#, c-format
+msgid "of %d"
+msgstr "di %d"
+
+#: shell/ev-password-view.c:111
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr ""
+"Ci documint chal est seré eyet i n' pôrè esse léjhou ki si vos dnez li bon "
+"scret."
+
+#: shell/ev-password-view.c:120
+msgid "_Unlock Document"
+msgstr "_Disserer l' documint"
+
+#: shell/ev-password.c:88
+msgid "Unable to find glade file"
+msgstr "Dji n' a savou trover l' fitchî glade"
+
+#: shell/ev-password.c:90
+#, c-format
+msgid ""
+"The glade file, %s, cannot be found. Please check that your installation is "
+"complete."
+msgstr ""
+"Li fitchî glade, %s, n' a nén stî trové. Acertinez vs ki l' astalaedje do "
+"programe a bén stî fwait comifåt s' i vs plait."
+
+#: shell/ev-password.c:104
+msgid "Password required"
+msgstr "I gn a mezåjhe do scret"
+
+#: shell/ev-password.c:105
+#, c-format
+msgid ""
+"The document <i>%s</i> is locked and requires a password before it can be "
+"opened."
+msgstr ""
+"Li documint <i>%s</i> est seré eyet i gn a mezåjhe di si scret pol poleur "
+"drovi."
+
+#: shell/ev-password.c:142
+msgid "Incorrect password"
+msgstr "Måva scret"
+
+#: shell/ev-sidebar-links.c:133
+msgid "Loading..."
+msgstr "Dji tchedje..."
+
+#: shell/ev-view.c:719
+#, c-format
+msgid "Go to page %s"
+msgstr "Potchî al pådje %s"
+
+#. g_mutex_unlock (EV_DOC_MUTEX);
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: shell/ev-view.c:1155
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "%d trové e cisse pådje ci"
+msgstr[1] "%d trovés e cisse pådje ci"
+
+#: shell/ev-view.c:1167
+msgid "Not found"
+msgstr "Nén trové"
+
+#: shell/ev-view.c:1169
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "i dmeure %3d%% po cweri"
+
+#: shell/ev-window.c:378
+msgid "Unable to open document"
+msgstr "Dji n' a savou drovi l' documint"
+
+#: shell/ev-window.c:464
+msgid "Document Viewer - Password Required"
+msgstr "Håyneu d' documints - I gn a mezåjhe d' on scret"
+
+#: shell/ev-window.c:466
+#, c-format
+msgid "%s - Password Required"
+msgstr "%s - I gn a mezåjhe d' on scret"
+
+#: shell/ev-window.c:757
+#, c-format
+msgid "Unhandled MIME type: '%s'"
+msgstr "Sôre MIME nén sopoirtêye: «%s»"
+
+#: shell/ev-window.c:861
+#, c-format
+msgid "The file could not be saved as \"%s\"."
+msgstr "Li fitchî èn pout nén esse schapé come «%s»."
+
+#: shell/ev-window.c:882
+msgid "Save a Copy"
+msgstr "Schaper ene copeye"
+
+#: shell/ev-window.c:964
+msgid "Print"
+msgstr "Imprimer"
+
+#: shell/ev-window.c:987
+msgid "Printing is not supported on this printer."
+msgstr "L' imprimaedje n' est nén sopoirté so cisse sicrirece ci."
+
+#: shell/ev-window.c:990
+#, c-format
+msgid ""
+"You were trying to print to a printer using the \"%s\" driver. This program "
+"requires a PostScript printer driver."
+msgstr ""
+"Vos sayîz d' rexhe so ene sicrirece avou l' mineu «%s». Ci programe ci a "
+"mezåjhe d' on mineu po scrirece PostScript."
+
+#: shell/ev-window.c:1042
+msgid "The \"Find\" feature will not work with this document"
+msgstr "Li fonccionålité «Trover» èn va nén avou ç' documint ci"
+
+#: shell/ev-window.c:1044
+msgid "Searching for text is only supported for PDF documents."
+msgstr "Li cweraedje di tecse est sopoirté seulmint dins les documints PDF."
+
+#. Toolbar-only
+#: shell/ev-window.c:1260 shell/ev-window.c:2039
+msgid "Leave Fullscreen"
+msgstr "Cwiter forrimplixhaedje"
+
+#: shell/ev-window.c:1645
+msgid "Many..."
+msgstr "Bråmint..."
+
+#: shell/ev-window.c:1650
+msgid "Not so many..."
+msgstr "Nén télmint..."
+
+#: shell/ev-window.c:1655
+msgid ""
+"Evince is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or\n"
+"(at your option) any later version.\n"
+msgstr ""
+"Evince, c' est on libe programe; vos l' poloz bén spåde et vos l' poloz\n"
+"bén candjî tot shuvant li Licince Publike Djeneråle (GPL) di GNU eplaideye\n"
+"pal Free Software Foundation; ça pout esse li 2e modêye del licince ou\n"
+"(si vos inmez mî) ene pus nouve.\n"
+
+#: shell/ev-window.c:1659
+msgid ""
+"Evince is distributed in the hope that it will be useful,\n"
+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+"GNU General Public License for more details.\n"
+msgstr ""
+"Li programe est spårdou avou l' espwer k' i serè ahessåve,\n"
+"mins SINS NOLE WAERANTEYE; dji n' waeranti nén minme ki vos VINDRÎZ\n"
+"bén li programe ou ki vos vs È SIEVRÎZ BÉN PO ENE SÔRE OU L' ÔTE.\n"
+"Waitîz li Licince Publike Djeneråle (GPL) di GNU po vey les pondants\n"
+"eyet les djondants.\n"
+
+#: shell/ev-window.c:1663
+msgid ""
+"You should have received a copy of the GNU General Public License\n"
+"along with Evince; if not, write to the Free Software Foundation, Inc.,\n"
+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
+msgstr ""
+"Avou ci programe ci, vos dvrîz aveur rçuvou ene copeye del Licince Publike\n"
+"Djeneråle (GPL) di GNU; si vos n' l' avoz nén avou, sicrijhoz al\n"
+" Free SoftWare Foundation, Inc.,\n"
+" 59 Temple Place - Suite 330,\n"
+" Boston, MA 02111-1307, USA.\n"
+
+#: shell/ev-window.c:1685 shell/main.c:82
+msgid "Evince"
+msgstr "Evince"
+
+#: shell/ev-window.c:1688
+msgid "© 1996-2004 The Evince authors"
+msgstr "© 1996-2004 les oteurs d' Evince"
+
+#: shell/ev-window.c:1691
+msgid "PostScript and PDF File Viewer."
+msgstr "Håyneu di documints PostScript et PDF."
+
+#: shell/ev-window.c:1694
+msgid "translator-credits"
+msgstr "Pablo Saratxaga <[email protected]>"
+
+#: shell/ev-window.c:1970
+msgid "_File"
+msgstr "_Fitchî"
+
+#: shell/ev-window.c:1971
+msgid "_Edit"
+msgstr "_Candjî"
+
+#: shell/ev-window.c:1972
+msgid "_View"
+msgstr "_Vey"
+
+#: shell/ev-window.c:1973
+msgid "_Go"
+msgstr "_Potchî"
+
+#: shell/ev-window.c:1974
+msgid "_Help"
+msgstr "_Aidance"
+
+#: shell/ev-window.c:1978
+msgid "Open an existing document"
+msgstr "Drovi on documint k' i gn a"
+
+#: shell/ev-window.c:1980
+msgid "_Save a Copy..."
+msgstr "_Schaper ene copeye..."
+
+#: shell/ev-window.c:1981
+msgid "Save the current document with a new filename"
+msgstr "Schaper l' documint do moumint dins on novea fitchî"
+
+#: shell/ev-window.c:1983
+msgid "Print..."
+msgstr "Imprimer..."
+
+#: shell/ev-window.c:1984
+msgid "Print this document"
+msgstr "Imprimer ç' documintci"
+
+#: shell/ev-window.c:1987
+msgid "Close this window"
+msgstr "Clôre ci purnea chal"
+
+#: shell/ev-window.c:1992
+msgid "Copy text from the document"
+msgstr "Copyî do tecse foû do documint"
+
+#: shell/ev-window.c:1994
+msgid "Select _All"
+msgstr "Tchoezi _totafwait"
+
+#: shell/ev-window.c:1995
+msgid "Select the entire page"
+msgstr "Tchoezi li pådje en etir"
+
+#: shell/ev-window.c:1998
+msgid "Find a word or phrase in the document"
+msgstr "Trover on mot ou ene fråze e documint"
+
+#: shell/ev-window.c:2003
+msgid "Enlarge the document"
+msgstr "Ragrandi l' documint"
+
+#: shell/ev-window.c:2006
+msgid "Shrink the document"
+msgstr "Raptiti l' documint"
+
+#: shell/ev-window.c:2009
+msgid "Reset the zoom level to the default value"
+msgstr "Rimete li livea d' zoumaedje a ci prémetowe valixhance"
+
+#: shell/ev-window.c:2011
+msgid "_Reload"
+msgstr "_Ritcherdjî"
+
+#: shell/ev-window.c:2012
+msgid "Reload the document"
+msgstr "Ritcherdjî l' documint"
+
+#. Go menu
+#: shell/ev-window.c:2016
+msgid "_Previous Page"
+msgstr "Pådje di _dvant"
+
+#: shell/ev-window.c:2017
+msgid "Go to the previous page"
+msgstr "Potchî al pådje di dvant"
+
+#: shell/ev-window.c:2019
+msgid "_Next Page"
+msgstr "Pådje _shuvante"
+
+#: shell/ev-window.c:2020
+msgid "Go to the next page"
+msgstr "Potchî al pådje shuvante"
+
+#: shell/ev-window.c:2022
+msgid "_First Page"
+msgstr "_Prumire pådje"
+
+#: shell/ev-window.c:2023
+msgid "Go to the first page"
+msgstr "Potchî al prumire pådje"
+
+#: shell/ev-window.c:2025
+msgid "_Last Page"
+msgstr "Dieri_nne pådje"
+
+#: shell/ev-window.c:2026
+msgid "Go to the last page"
+msgstr "Potchî al dierinne pådje"
+
+#. Help menu
+#: shell/ev-window.c:2030
+msgid "_Contents"
+msgstr "Å d_vins"
+
+#: shell/ev-window.c:2031
+msgid "Display help for the viewer application"
+msgstr "Mostere l' aidance pol programe håyneu di documints"
+
+#: shell/ev-window.c:2034
+msgid "_About"
+msgstr "Å_d fwait"
+
+#: shell/ev-window.c:2035
+msgid "Display credits for the document viewer creators"
+msgstr "Mostere les contribouweus eyet oteurs do programe"
+
+#: shell/ev-window.c:2040
+msgid "Leave fullscreen mode"
+msgstr "Cwiter l' môde forrimplixhaedje del waitroûle"
+
+#. View Menu
+#: shell/ev-window.c:2047
+msgid "_Toolbar"
+msgstr "Bår ås _usteyes"
+
+#: shell/ev-window.c:2048
+msgid "Show or hide the toolbar"
+msgstr "Mostrer ou catchî l' bår ås usteyes"
+
+#: shell/ev-window.c:2050
+msgid "_Statusbar"
+msgstr "Bår ås _messaedjes"
+
+#: shell/ev-window.c:2051
+msgid "Show or hide the statusbar"
+msgstr "Mostrer ou catchî l' bår ås messaedjes"
+
+#: shell/ev-window.c:2053
+msgid "Side _pane"
+msgstr "_Panea d' costé"
+
+#: shell/ev-window.c:2054
+msgid "Show or hide the side pane"
+msgstr "Mostrer ou catchî l' panea d' costé"
+
+#: shell/ev-window.c:2056
+msgid "_Fullscreen"
+msgstr "_Forrimpli l' waitroûle"
+
+#: shell/ev-window.c:2057
+msgid "Expand the window to fill the screen"
+msgstr "Ragrandi l' purnea disk' a forrimpli l' waitroûle"
+
+#: shell/ev-window.c:2059
+msgid "_Best Fit"
+msgstr "_Meyeu"
+
+#: shell/ev-window.c:2060
+msgid "Make the current document fill the window"
+msgstr "Fé ki l' documint rimplixhe å mî l' purnea"
+
+#: shell/ev-window.c:2062
+msgid "Fit Page _Width"
+msgstr "Rimpli l' _lårdjeu del pådje"
+
+#: shell/ev-window.c:2063
+msgid "Make the current document fill the window width"
+msgstr "Fé ki l' documint rimplixhe tote li lårdjeu do purnea"
+
+#: shell/ev-window.c:2068
+msgid "Single"
+msgstr "Simpe"
+
+#: shell/ev-window.c:2069
+msgid "Show the document one page at a time"
+msgstr "Mostrer l' documint ene pådje å côp"
+
+#: shell/ev-window.c:2071
+msgid "Multi"
+msgstr "Multi"
+
+#: shell/ev-window.c:2072
+msgid "Show the full document at once"
+msgstr "Mostrer l' documint en etir (pus d' ene pådje å côp)"
+
+#: shell/ev-window.c:2108
+msgid "Page"
+msgstr "Pådje"
+
+#: shell/ev-window.c:2109
+msgid "Select Page"
+msgstr "Tchoezi pådje"
+
+#. translators: this is the label for toolbar button
+#: shell/ev-window.c:2124
+msgid "Previous"
+msgstr "Di dvant"
+
+#: shell/ev-window.c:2129
+msgid "Next"
+msgstr "Shuvant"
+
+#. translators: this is the label for toolbar button
+#: shell/ev-window.c:2132
+msgid "Fit Width"
+msgstr "Lårdjeu"
+
+#: shell/ev-window.c:2325
+msgid "Index"
+msgstr "Indecse"
+
+#: shell/ev-window.c:2332
+msgid "Thumbnails"
+msgstr "Imådjetes"
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 00000000..e581f957
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,1853 @@
+# Simplified Chinese translation to evince
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince package.
+# Funda Wang <[email protected]>, 2004, 2005.
+# 甘露(Gan Lu) <[email protected]>, 2009.
+# Deng Xiyue <[email protected]>, 2009.
+# Aron Xu <[email protected]>, 2009.
+# 樊栖江(Fan Qijiang) <[email protected]>, 2009.
+# 杨章 <[email protected]>, 2010.
+# 朱涛 <[email protected]>, 2010.
+# Tao Wang <[email protected]>, 2010.
+# Xhacker Liu <[email protected]>, 2010.
+#
+# Note: "Comic Book" is a file type, refer to http://en.wikipedia.org/wiki/Comic_Book_Archive_file
+msgid ""
+msgstr ""
+"Project-Id-Version: evince master\n"
+"Report-Msgid-Bugs-To: http://bugzilla.mate.org/enter_bug.cgi?"
+"product=evince&component=general\n"
+"POT-Creation-Date: 2010-08-22 13:20+0000\n"
+"PO-Revision-Date: 2010-08-23 09:11+0800\n"
+"Last-Translator: 朱涛 <[email protected]>\n"
+"Language-Team: Chinese (simplified) <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "加载命令“%s”来解压 Comic Book 文档时出错:%s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "在解压这个 Comic Book 文档时使用命令“%s”失败。"
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "命令“%s”没有正常结束。"
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "不是 Comic Book 文档的 MIME 类型:%s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "无法找到合适的命令来解压这种类型的 Comic Book 文档"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "未知的 MIME 类型"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "文件损坏"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "存档中没有文件"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "存档 %s 中未找到图像"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "删除“%s”时出错。"
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "错误 %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "Comic Book 文档"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu 文档的格式不对"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr "此文档由多个文件组成,而这些文件中的一个或多个无法被访问。"
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu 文档"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI 文档的格式不对"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI 文档"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "这项工作是在公共领域"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "是"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "否"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "未知字体类型"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "无名称"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "嵌入子集"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "嵌入"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "未嵌入"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF 文档"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "无效的文档"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress 幻灯片"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "无错误"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "没有足够的内存"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "无法找到 ZIP 签名"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "无效的 ZIP 文件"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "不支持多文件 ZIP"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "无法打开文件"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "无法从文件读取数据"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "无法在 ZIP 压缩包中找到文件"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "未知错误"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "载入文档“%s”失败"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "保存文档“%s”失败"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript 文档"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "无法保存附件“%s”:%s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "无法打开附件“%s”:%s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "无法打开附件“%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "不支持文件类型 %s (%s)"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "全部文档"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "全部文件"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "创建临时文件 %s 失败。"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "创建临时目录 %s 失败。"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "文件不是有效的 .desktop 文件"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "无法识别的桌面文件版本“%s”"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "正在启动 %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "应用程序在命令行不接受文档"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "无法识别的启动选项:%d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "无法将文档 URL 传递给“Type=Link”的桌面项"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "不是可调用项"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "禁用到会话管理器的连接"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "指定包含已保存配置的文件"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "文件"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "指定会话管理 ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "会话管理选项:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "显示会话管理选项"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "显示“%s”"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "在工具栏上移动(_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "在工具栏上移动选中项"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "从工具栏中删除(_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "从工具栏中删除选中项"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "删除工具栏(_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "删除选中的工具栏"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "分隔符"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "适合页长"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "适合页宽"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "文档查看器"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "查看多页文档"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "忽略文档限制"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "忽略文档限制,比如限制复制或打印。"
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "删除临时文件"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "打印设置文件"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "MATE 文档预览器"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "打印文档失败"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "选择的打印机“%s”没有找到"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "上一页(_P)"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "转到上一页"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "下一页(_N)"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "转到下一页"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "放大文档"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "缩小文档"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "打印"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "打印此文档"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "适合页长(_B)"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "让当前文档适合窗口"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "适合页宽(_W)"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "让当前文档适合窗口宽度"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "页面"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "选择页面"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "文档"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "标题:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "位置:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "主题:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "作者:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "关键词:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "制作者:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "创建者:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "创建于:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "修改于:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "页数:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "优化:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "格式:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "安全性:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "纸张大小:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "无"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "默认:毫米"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f x %.0f 毫米"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f x %.2f 英寸"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s,纵向(%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s,横向(%s)"
+
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(第 %d 页,共 %d 页)"
+
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "共 %d 页"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "正在载入..."
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "正在准备打印..."
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "完成中..."
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "正在打印第 %1$d 页,共 %2$d 页..."
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "此打印机不支持打印。"
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "无效的页面选择"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "警告"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "您选择的打印范围不包括任何页面"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "页面缩放:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "缩小至可打印区域"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "适合于打印区域"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"缩放文档页面以适合于选定的打印机页面。从下列中选定一个:\n"
+"\n"
+"• “否”:不执行页面缩放\n"
+"\n"
+"• “缩小至打印区域”:缩小大于可打印区域的文档页面以适合打印机页面的可打印区"
+"域。\n"
+"\n"
+"• “适合于打印区域”:按要求缩小或放大文档页面以适合打印机页面的可打印区域。\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "自动旋转并居中"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"旋转每个页面的打印机页面方向以匹配每个文档页面的方向。文档页面将在打印机页面"
+"内居中。"
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "使用文档页面大小选定页面大小"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr "当启用时,每页将打印于跟文档页面同样大小的纸张上。"
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "页面处理"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "打印页面 %d 失败: %s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "向上滚动"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "向下滚动"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "向上滚动视图"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "向下滚动视图"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "文档视图"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "转到指定页:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "演示文稿结束。单击退出。"
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "转到第一页"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "转到上一页"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "转到下一页"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "转到最后一页"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "转到指定页"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "查找"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "转到第 %s 页"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "转到文件“%2$s”的 %1$s"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "转到文件“%s”"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "调用 %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "查找:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "查找上一个(_V)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "查找被搜索字符串的上次出现"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "查找下一个(_X)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "查找被搜索字符串的下次出现"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "区分大小写(_A)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "切换区分大小写搜索"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "图标:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "笔记"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "评论"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "关键"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "帮助"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "新段落"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "段落"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "插入"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "交叉"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "圆圈"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "未知"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "注释属性"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "颜色:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "样式:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "透明的"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "不透明的"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "初始窗口状态:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "打开"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "关闭"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "以放映模式运行"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "文档 %s 的密码"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "正在转换 %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "已转换 %d 个文档,共 %d 个文档"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "正在转换元数据"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"被 Evince 使用的元数据已经改变,因此它需要被迁移。如果迁移操作被取消,元数据"
+"存放处将不会工作。"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "打开最近使用的文档"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "文档已被锁定,只能在输入正确的密码之后才能读取。"
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "取消文档锁定(_U)"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "输入密码"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "需要密码"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "文档“%s”已载入,但在打开之前需要密码。"
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "密码(_P):"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "立即忘记密码(_I)"
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "记住密码直到注销(_L)"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "永远记住(_F)"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "属性"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "常规"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "字体"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "文档许可证"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "字体"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "正在搜集字体信息... %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "使用条款"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "文本许可证"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "更多信息"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "列表"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "注释"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "文本"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "添加文本注释"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "添加"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "此文档不包含任何注释"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "第 %d 页"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "附件"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "层"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "打印..."
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "索引"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "缩略图"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "第 %s 页 - %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "第 %s 页"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "此文档不包含任何页面"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "这个文档只包含空页面"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "无法打开文档"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "从“%s”载入文档"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "正在下载文档 (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "载入远程文档失败。"
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "正在从 %s 重新载入文档"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "重新载入文档失败。"
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "打开文档"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "正在保存文档到 %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "正在保存附件到 %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "正在保存图片到 %s"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "文件无法另存为“%s”。"
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "正在上传文档 (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "正在上传附件 (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "上载上传图片 (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "保存副本"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "队列中有 %d 个等待执行的任务"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "正在打印任务“%s”"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr "文档包含了已经填写的表单。如果您不保存副本,修改将会永久丢失。"
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr "文档包含了新的或修改过的注释。如果您不保存副本,修改将会永久丢失。"
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "关闭前保存文档“%s”的副本吗?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "关闭且不保存(_W)"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "保存副本(_C)"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "关闭前先等待至打印任务“%s”完成吗?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "%d 打印任务激活中。关闭前先等待至打印任务完成吗?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "如果你关闭该窗口,正在等待执行的打印任务将不会被打印。"
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "取消打印并关闭(_P)"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "打印后关闭(_A)"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "工具栏编辑器"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "显示帮助时出现一个错误"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"文档查看器\n"
+"使用 %s (%s)"
+
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 是自由软件;您可以按照自由软件基金会所发布的 GNU GPL 许可对其再发放和/"
+"或修改它;至于 GPL 的版本,您可以使用第二版或任何更新的版本。\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"发布 Evince 的目的是希望它能够在一定程度上帮到您。但我们并不为\n"
+"它提供任何形式的担保,也无法保证它可以在特定用途中得到您希望的\n"
+"结果。请参看 GNU GPL 许可中的更多细节。\n"
+
+#: ../shell/ev-window.c:4571
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"您应该收到和 Evince 一起的 GNU GPL 协议副本;如果没有收到该协议\n"
+"的话,您可以写信给自由软件基金会,地址是:\n"
+"51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996–2009 Evince 作者"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"Aron Xu <[email protected]>\n"
+"樊栖江(Fan Qijiang) <[email protected]>\n"
+"甘露(Gan Lu) <[email protected]>\n"
+"Deng Xiyue <[email protected]>, 2009\n"
+"Aron Xu <[email protected]>, 2009\n"
+"樊栖江(Fan Qijiang) <[email protected]>, 2009\n"
+"杨章 <[email protected]>, 2010\n"
+"朱涛 <[email protected]>, 2010\n"
+"Tao Wang <[email protected]>, 2010\n"
+"Xhacker Liu <[email protected]>, 2010\n"
+"\n"
+"Launchpad Contributions:\n"
+" Chen Ming https://launchpad.net/~chenming\n"
+" DBLobster https://launchpad.net/~db.lobster\n"
+" Deng Xiyue https://launchpad.net/~manphiz\n"
+" Funda Wang https://launchpad.net/~fundawang\n"
+" Funda Wang https://launchpad.net/~fundawang-gmail\n"
+" Tao Wei https://launchpad.net/~weitao1979\n"
+" ZhangCheng https://launchpad.net/~xxzc\n"
+" rainofchaos https://launchpad.net/~rainofchaos\n"
+" zhangmiao https://launchpad.net/~mymzhang\n"
+" 甘露 (Lu Gan) https://launchpad.net/~rhythm-gan"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "本页上找到 %d 次"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "未找到"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "搜索还剩 %3d%%"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "文件(_F)"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "编辑(_E)"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "查看(_V)"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "转到(_G)"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "帮助(_H)"
+
+#. File menu
+#: ../shell/ev-window.c:5402 ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "打开(_O)..."
+
+#: ../shell/ev-window.c:5403 ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "打开已有文档"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "打开副本(_E)"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "在新窗口中打开当前文档的副本"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "保存副本(_S)..."
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "保存当前文档的副本"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "打印(_P)..."
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "属性(_R)"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "全选(_A)"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "查找(_F)..."
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "在文档中查找单词或短语"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "工具栏(_O)"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "向左旋转(_L)"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "向右旋转(_R)"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "将当前设置设为默认值(_D)"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "重新载入(_R)"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "重新载入文档"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "自动滚屏(_S)"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "第一页(_F)"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "转到第一页"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "最后一页(_L)"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "转到最后一页"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "目录(_C)"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "关于(_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "离开全屏"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "离开全屏模式"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "开始演示"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "开始演示"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "工具栏(_T)"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "显示或隐藏工具栏"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "侧边栏(_P)"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "显示或隐藏侧边栏"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "连续(_C)"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "显示整篇文档"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "双页(_D)"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "一次显示两页"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "全屏(_F)"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "将窗口展开为全屏幕"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "放映(_S)"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "将文档以演示文稿放映"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "反色(_I)"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "使用反色来显示页面内容"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "打开链接(_O)"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "转到(_G)"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "在新窗口中打开(_W)"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "复制链接地址(_C)"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "图像另存为(_S)..."
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "复制图像(_I)"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "注释属性..."
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "打开附件(_O)"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "保存附件为(_S)..."
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "缩放"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "调整缩放级别"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "导航"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "后退"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "在已浏览的页面中移动"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "上一页"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "下一页"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "放大"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "缩小"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "适合宽度"
+
+#: ../shell/ev-window.c:5890 ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "无法启动外部程序。"
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "无法打开外部链接"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "无法找到恰当的格式以保存图像"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "无法保存图像。"
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "保存图像"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "无法打开附件"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "无法保存附件。"
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "保存附件"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s - 需要密码"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "按扩展名"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATE 文档查看器"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "要显示的文档的页标签。"
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "页面"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "要显示的文档的页编号。"
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "页号"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "以全屏模式运行 evince"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "以放映模式运行 evince"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "以预览程序模式运行 evince"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "文档中待查找的单词或短语"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "字符串"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[文件...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr "可选布尔值选项:true 代表允许缩略图而 false 代表禁止创建新缩略图"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "启用 PDF 文档的缩略图"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF 文档的缩略图命令"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"PDF 文档缩略图生成器的有效命令及参数。更多信息请参看 Caja 的缩略图生成器"
+"文档。"
+
+#~ msgid "Page Set_up…"
+#~ msgstr "页面设置(_U)..."
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "为打印设定页面设置"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "Djvu 文档的格式不正确"
+
+#~ msgid "Print..."
+#~ msgstr "打印..."
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "保存副本(_S)..."
+
+#~ msgid "_Print..."
+#~ msgstr "打印(_P)..."
+
+#~ msgid "_Find..."
+#~ msgstr "查找(_F)..."
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "创建文件“%s”失败:%s"
+
+#~ msgid "Search string"
+#~ msgstr "搜索字符串"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "要查找的字符串名称"
+
+#~ msgid "Case sensitive"
+#~ msgstr "区分大小写"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "TRUE 代表进行区分大小写的搜索"
+
+#~ msgid "Highlight color"
+#~ msgstr "高亮颜色"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "全部匹配的高亮颜色"
+
+#~ msgid "Current color"
+#~ msgstr "当前颜色"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "当前匹配的高亮颜色"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "恢复上一个文档?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr "Evince 看起来在上次运行的没有正常的退出。 您可以覆盖打开的文档。"
+
+#~ msgid "_Don't Recover"
+#~ msgstr "不复原(_D)"
+
+#~ msgid "_Recover"
+#~ msgstr "复原(_R)"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "崩溃复原"
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "不能创建系统链接 “%s”: "
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "无法打开副本"
+
+#~ msgid "_Remember forever"
+#~ msgstr "永远记住(_R)"
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "此会话记住密码(_R)"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "立即忘记密码(_F)"
+
+#~ msgid "_Domain:"
+#~ msgstr "域(_D):"
+
+#~ msgid "_Username:"
+#~ msgstr "用户名(_U):"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "连接为用户(_S):"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "匿名连接(_A)"
+
+#~ msgid "Co_nnect"
+#~ msgstr "连接(_N)"
+
+#~ msgid "Couldn't create symlink “%s”: %s"
+#~ msgstr "无法创建符号链接“%s”:%s"
+
+#~ msgid "File corrupted."
+#~ msgstr "文件已损坏。"
+
+#~ msgid "© 1996-2007 The Evince authors"
+#~ msgstr "(C) 1996-2007 Evince 作者"
+
+#~ msgid "Print Set_up..."
+#~ msgstr "打印设置(_U)..."
+
+#~ msgid "Loading document from %s"
+#~ msgstr "正在从 %s 载入文档"
+
+#~ msgid "No files in archive."
+#~ msgstr "档案中没有文件。"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "您正在尝试使用“%s”驱动程序打印到打印机。此程序需要 PostScript 打印机驱动程"
+#~ "序。"
+
+#~ msgid "Invalid URI: “%s”"
+#~ msgstr "无效的 URI:“%s”"
+
+#~ msgid "Unsupported URI: “%s”"
+#~ msgstr "不支持的 URI:“%s”"
+
+#~ msgid "Error: %s"
+#~ msgstr "错误:%s"
+
+#~ msgid "Error: dvipdfm exited with non-zero status."
+#~ msgstr "错误:dvipdfm 以非零状态退出。"
+
+#~ msgid "Open “%s”"
+#~ msgstr "打开“%s”"
+
+#~ msgid "Empty"
+#~ msgstr "空"
diff --git a/po/zh_HK.po b/po/zh_HK.po
new file mode 100644
index 00000000..0d0a84b2
--- /dev/null
+++ b/po/zh_HK.po
@@ -0,0 +1,1926 @@
+# Chinese (Hong Kong) Translation for evince.
+# Copyright (C) 2004-07 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince package.
+# Funda Wang <[email protected]>, 2004
+# Abel Cheung <[email protected]>, 2005
+# Wei-Lun Chao <[email protected]>, 2005
+# Woodman Tuen <[email protected]>, 2006-07
+# Chao-Hsiung Liao <[email protected]>, 2008, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince 2.31.90\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-08-21 20:05+0800\n"
+"PO-Revision-Date: 2010-08-21 20:06+0800\n"
+"Last-Translator: Chao-Hsiung Liao <[email protected]>\n"
+"Language-Team: Chinese (Hong Kong) <[email protected]>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Virtaal 0.5.1\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "執行指令「%s」以將漫畫書解壓縮時發生錯誤:%s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "將漫畫書解壓縮時指令「%s」失敗。"
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "指令「%s」沒有正常的結束。"
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "並非漫畫書 MIME 類型:%s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "找不到合適的指令可將這個類型的漫畫書解壓縮"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "未知的 MIME 型態"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "檔案已損毀"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "壓縮檔中沒有檔案"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "在文件 %s 中找不到圖片"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "刪除「%s」時發生錯誤。"
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "錯誤 %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "漫畫書"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu 文件有不正確的格式"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr "此文件由多個檔案組成。其中一個或更多的檔案無法存取。"
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu 文件"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI 文件有不正確的格式"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI 文件"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "這個作品是屬於公有領域"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "是"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "否"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "字型不明"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "沒有名稱"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "嵌入字體"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "內嵌的"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "沒有嵌入"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF 文件"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "無效的文件"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress 幻燈片"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "沒有錯誤"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "沒有足夠的記憶體"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "找不到 ZIP 簽署"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "無效的 ZIP 檔"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "不支援分割式 ZIP 檔"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "無法開啟檔案"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "無法從檔案讀取資訊"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "無法在 ZIP 壓縮檔中找到檔案"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "不明的錯誤"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "載入文件“%s”失敗"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "儲存文件“%s”失敗"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript 文件"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "無法儲存附件“%s”:%s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "無法開啟附件“%s”:%s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "無法開啟附件“%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "檔案類型 %s (%s) 不支援"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "所有文件"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "所有檔案"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "無法建立暫存檔案:%s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "無法建立暫存目錄:%s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "檔案不是有效的 .desktop 檔案"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "無法辨識的桌面檔案版本「%s」"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "準備啟動 %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "應用程式不接受以命令列開啟文件"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "無法辨識的啟動選項:%d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "不能傳送文件 URI 至「Type=Link」桌面項目"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "不是可以啟動的項目"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "停用到作業階段管理程式的連線"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "指定含有已儲存組態的檔案"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "檔案"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "指定作業階段管理 ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "作業階段管理選項:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "顯示作業階段管理選項"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "顯示「%s」"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "移至工具列(_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "將選取的項目移至工具列"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "從工具列移除(_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "從工具列移除選取的項目"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "刪除工具列(_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "移除選取的工具列"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "分隔線"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "最適大小"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "符合頁寬"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "文件檢視器"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "顯示多頁文件"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "不理會文件的限制"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "不理會文件的限制,例如不准複製或打印"
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "刪除暫存檔案"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "打印設定值檔案"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "MATE 文件預覽器"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "無法打印文件"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "找不到選取的打印機「%s」"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "上一頁(_P)"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "回到上一頁"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "下一頁(_N)"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "前往下一頁"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "放大文件"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "縮小文件"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "打印"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "打印這份文件"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "最適大小(_B)"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "令視窗可以顯示整頁頁面"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "符合頁寬(_W)"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "使目前文件符合視窗闊度"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "頁次"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "選擇頁次"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "文件"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "標題:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "位置:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "主旨:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "作者:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "關鍵字:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "製作程式:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "製作者:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "建立時刻:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "修改時刻:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "頁數:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "最佳化:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "格式:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "安全性:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "紙張大小:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "沒有"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f 毫米"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f 吋"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, 直向 (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, 橫向 (%s)"
+
+# (Abel) 這裡是頁數 (%d of %d)
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d / %d)"
+
+# (Abel) 這裡是頁數 (%d of %d)
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "/ %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "載入中…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "正在準備打印…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "正在結束…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "正在打印頁面 %d / %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "這台打印機不支援打印。"
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "無效的頁面選擇區域"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "警告"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "你選擇的打印範圍並未包含任何頁面"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "頁面縮放:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "縮減至可打印區域"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "符合可打印區域"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"將文件縮放至可打印區域。可選擇以下選項:\n"
+"\n"
+"• \"沒有\":不進行頁面的縮放。\n"
+"\n"
+"• \"符合可打印區域\":文件頁面超過可打印區域時會被縮小以符合打印機的可打印區域。\n"
+"\n"
+"• \"縮減至可打印區域\":文件頁面會被放大或縮小以符合打印機的可打印區域。\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "自動旋轉並置中"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr "旋轉每一頁的打印機頁面方向以符合文件頁面的方向。文件的頁面會在打印機的頁面裏置中。"
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "使用文件頁面大小來選擇頁面大小"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr "當啟用時,每一頁都會按照文件中的頁面大小打印。"
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "頁面處理方式"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "無法打印頁面 %d:%s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "向上捲動"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "向下捲動"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "向上檢視"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "向下檢視"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "文件檢視器"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "前往頁:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "簡報已完結。請點一下離開。"
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "回到第一頁"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "回到上一頁"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "前往下一頁"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "前往最後一頁"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "前往頁"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "尋找"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "前往第 %s 頁"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "前往檔案“%s”上的 %s"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "前往檔案“%s”"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "執行 %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "尋找:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "找上一個(_V)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "尋找上一個出現搜尋字串的地方"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "找下一個(_X)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "尋找下一個出現搜尋字串的地方"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "區分大小寫(_A)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "選取後在搜尋時將區分大小寫"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "圖示:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "備註"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "評論"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "設定鍵"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "求助"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "新增段落"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "段落"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "插入"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "十字"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "圓形"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "不明"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "註解屬性"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "顏色:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "樣式:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "透明"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "不透明"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "初始化視窗狀態:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "開啟"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "關閉"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "以簡報模式執行"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "用於 %s 的密碼"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "正在轉換 %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d / %d 份文件已轉換"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "正在轉換中繼資料"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr "Evince 所使用的中繼資料已經改變,因此需要做轉移。如果轉移的動作被取消,中繼資料的儲存就無法運作。"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "開啟最近使用的文件"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "這份文件已被鎖上,只有在輸入正確密碼之後才能閱讀。"
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "文件解鎖(_U)"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "輸入密碼"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "需要密碼"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "文件 %s 已被鎖上,需要密碼才能開啟。"
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "密碼(_P):"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "立刻忘記密碼(_I) "
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "在你登出前記住密碼(_L)"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "永遠記住密碼(_F)"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "屬性"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "一般"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "字型"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "文件授權"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "字型"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "正在搜集字型資料… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "使用條款"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "文字授權"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "更多資訊"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "清單"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "註解"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "文字"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "加入文字註解"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "加入"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "文件不包含任何註解"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "第 %d 頁"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "附加檔案"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "圖層"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "打印…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "索引"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "縮圖"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "頁 %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "頁 %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "此文件不包含任何頁面"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "文件只包含空白頁面"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "無法開啟文件"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "正在從「%s」載入文件"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "正在下載文件 (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "載入遠端的檔案失敗。"
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "從 %s 重新載入文件"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "重新載入文件失敗。"
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "開啟文件"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "正儲存文件到 %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "正儲存附加檔案到 %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "正儲存圖片到 %s"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "檔案無法儲存為“%s”。"
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "正在上傳文件 (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "正在上傳附加檔案 (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "正在上傳圖片 (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "儲存副本"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "佇列中 %d 項預定的工作"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "正在打印工作“%s”"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr "文件包含尚未填寫的表單欄位。如果你不儲存複本,這些更改就會永遠消失。"
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr "文件包含新的或修改過的註解。如果你不儲存複本,這些更改就會永遠消失。"
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "關閉前要儲存文件「%s」的複本嗎?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "關閉但不儲存(_W)"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "儲存副本(_C)"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "在關閉前是否要等待打印工作“%s”結束?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "還有 %d 項打印工作在使用中。在關閉前是否要等待打印結束?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "如果你關閉視窗,預定的打印工作將不會打印。"
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "取消打印並關閉(_P)"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "於打印完成後關閉(_A)"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "工具列編輯器"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "顯示說明文件時發生錯誤"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"文件檢視器\n"
+"使用 %s (%s)"
+
+# (Abel) 大致上參考 slat.org 的建議
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr "Evince 為自由軟件;你可根據據自由軟件基金會所發表的 GNU 通用公共授權條款規定,就本程式再為散佈與/或修改;無論你根據據的是本授權的第二版或(你自行選擇的)任一日後發行的版本。\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr "Evince 係基於使用目的而加以散佈,然而不負任何擔保責任;亦無對適售性或特定目的適用性所為的默示性擔保。詳情請參照 GNU 通用公共授權。\n"
+
+#: ../shell/ev-window.c:4571
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr "你應該已經和 Evince 程式一起收到一份 GNU 通用公共許可證的副本。如果還沒有,寫信給: the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Evince 作者羣"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"如對翻譯有任何意見,請送一封電子郵件給\n"
+"以下地址,MATE 翻譯隊伍會儘快回覆你:\n"
+"\n"
+"Woodman Tuen <[email protected]>, 2006-07\n"
+"趙惟倫 <[email protected]>, 2005\n"
+"Abel Cheung <[email protected]>, 2005\n"
+"Funda Wang <[email protected]>, 2004"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "本頁找到 %d 處"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "找不到"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "還有 %3d%% 尚待搜尋"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "檔案(_F)"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "編輯(_E)"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "檢視(_V)"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "前往(_G)"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "求助(_H)"
+
+#. File menu
+#: ../shell/ev-window.c:5402 ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "開啟(_O)…"
+
+#: ../shell/ev-window.c:5403 ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "開啟現存文件"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "開啟副本(_E)"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "在新的視窗開啟目前文件的副本"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "儲存副本(_S)…"
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "儲存一個目前文件的副本"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "打印(_P)…"
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "屬性(_R)"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "全部選取(_A)"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "尋找(_F)…"
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "在文件中尋找字詞"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "工具列(_O)"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "向左旋轉(_L)"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "向右旋轉(_R)"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "將目前的設定值儲存為預設值(_D)"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "重新載入(_R)"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "重新載入文件"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "自動捲動(_S)"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "第一頁(_F)"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "回到第一頁"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "最後一頁(_L)"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "前往最後一頁"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "內容(_C)"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "關於(_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "離開全螢幕"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "離開全螢幕模式"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "開始簡報"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "簡報式顯示"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "工具列(_T)"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "顯示或隱藏工具列"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "側邊窗格(_P)"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "顯示或隱藏側面窗格"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "連續(_C)"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "顯示整份文件"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "兩頁(_D)"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "一次顯示兩頁"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "全螢幕(_F)"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "將視窗展開為全螢幕"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "簡報(_S)"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "如同簡報般執行文件"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "反轉顏色(_I)"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "以顏色反轉的方式顯示頁面內容"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "開啟連結(_O)"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "移至(_G)"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "在新的視窗中開啟(_W)"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "複製連結位址(_C)"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "另存圖片(_S)…"
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "複製圖片(_I)"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "註解屬性…"
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "開啟附件(_O)"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "另存附件為(_S)…"
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "縮放"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "調整縮放等級"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "導航"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "後退"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "在已閱讀的頁面間移動"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "上一頁"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "下一頁"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "拉近"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "拉遠"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "符合頁寬"
+
+#: ../shell/ev-window.c:5890 ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "無法啟動外部應用程式。"
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "無法開啟外部連結"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "找不到合適的格式來儲存圖片"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "圖片無法儲存。"
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "儲存圖片"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "無法開啟附件"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "附件無法儲存。"
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "儲存附件"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — 需要密碼"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "根據延伸檔名"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATE 文件檢視器"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "要顯示的文件頁面標籤。"
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "頁次"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "要顯示的文件頁碼。"
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "編號"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "以全螢幕模式執行 evince"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "以簡報模式執行 evince"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "以 evince 作為預覽程式"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "要在文件中尋找的字或詞"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "字串"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[檔案...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr "可用的邏輯選項:“true”會開啟縮圖功能,而“false”會停止建立新的縮圖"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "啟動 PDF 文件的縮圖功能"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF 文件的縮圖命令"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr "正確的指令加上代表 PDF 文件縮圖的引數。請參見 Caja 縮圖文件以得到更多資訊。"
+
+#~ msgid "Page Set_up…"
+#~ msgstr "頁面設定(_U)…"
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "設定列印用的頁面設定"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU 文件有不正確的格式"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "無法建立檔案“%s”:%s"
+
+#~ msgid "Search string"
+#~ msgstr "搜尋字串"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "欲搜尋的字串名稱"
+
+#~ msgid "Case sensitive"
+#~ msgstr "區分大小寫"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "TRUE 代表區分大小寫的搜尋"
+
+#~ msgid "Highlight color"
+#~ msgstr "標示顏色"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "用來標示所有符合字串的顏色"
+
+#~ msgid "Current color"
+#~ msgstr "目前的顏色"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "用來標示目前符合字串的顏色"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "是否復原前一份文件?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr "Evince 在上次執行時似乎突然關閉了。您可以復原已開啟的文件。"
+
+#~ msgid "_Don't Recover"
+#~ msgstr "不要復原(_D)"
+
+#~ msgid "_Recover"
+#~ msgstr "復原(_R)"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "當機後復原"
+
+#~ msgid "Print..."
+#~ msgstr "列印..."
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "無法建立符號連結「%s」:"
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "無法開啟副本。"
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "儲存副本(_S)..."
+
+#~ msgid "_Print..."
+#~ msgstr "列印(_P)..."
+
+#~ msgid "_Find..."
+#~ msgstr "尋找(_F)..."
+
+#~ msgid "Co_nnect"
+#~ msgstr "連線(_N)"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "匿名連線(_A)"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "以使用者連線(_S):"
+
+#~ msgid "_Username:"
+#~ msgstr "使用者名稱(_U):"
+
+#~ msgid "_Domain:"
+#~ msgstr "網域(_D):"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "立刻忘掉密碼(_F) "
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "在您登出前記住密碼(_R)"
+
+#~ msgid "_Remember forever"
+#~ msgstr "永遠記住(_R)"
+
+#~ msgid "File not available"
+#~ msgstr "檔案不存在"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "不支援遠端檔案"
+
+#~ msgid "Find Previous"
+#~ msgstr "找上一個"
+
+#~ msgid "Find Next"
+#~ msgstr "找下一個"
+
+#~ msgid "Password Entry"
+#~ msgstr "密碼輸入欄"
+
+#~ msgid "Remember password for this session"
+#~ msgstr "在此作業階段中記住密碼"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "儲存密碼於鑰匙圈程式中"
+
+#~ msgid "<b>Title:</b>"
+#~ msgstr "<b>標題:</b>"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f 寸"
+
+#~ msgid "Incorrect password"
+#~ msgstr "密碼不正確"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Evince 文件檢視器"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "Letter"
+
+#~ msgid "Tabloid"
+#~ msgstr "Tabloid"
+
+#~ msgid "Ledger"
+#~ msgstr "Ledger"
+
+#~ msgid "Legal"
+#~ msgstr "Legal"
+
+#~ msgid "Statement"
+#~ msgstr "陳述"
+
+#~ msgid "Executive"
+#~ msgstr "Executive"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Folio"
+
+#~ msgid "Quarto"
+#~ msgstr "Quarto"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "無法開啟檔案“%s”。"
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr "無法載入檔案“%s”。在路徑中找不到 Ghostscript 解譯器"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "Encapsulated PostScript"
+
+#~ msgid "PostScript"
+#~ msgstr "PostScript"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "解譯程式失誤。"
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "無法處理的 MIME 類型:“%s”"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "不支援產生 PDF 文件"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "您剛剛試著利用“%s”印表機驅動程式,可是本程式需要 PostScript 印表機驅動程"
+#~ "式。"
+
+#~ msgid "Pages"
+#~ msgstr "頁數"
+
+#~ msgid "Images"
+#~ msgstr "圖片"
+
+#~ msgid "Open “%s”"
+#~ msgstr "開啟“%s”"
+
+#~ msgid "Empty"
+#~ msgstr "空的"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "No document loaded."
+#~ msgstr "沒有載入任何文件。"
+
+#~ msgid "Broken pipe."
+#~ msgstr "管線作業中斷"
+
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "檔案“%s”解壓縮時產生錯誤:\n"
+
+#~ msgid "File is not readable."
+#~ msgstr "檔案為不可讀。"
+
+#~ msgid "Document loaded."
+#~ msgstr "文件已載入。"
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 00000000..f3ddb6d8
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,1941 @@
+# Chinese (Taiwan) Translation for evince.
+# Copyright (C) 2004-07 Free Software Foundation, Inc.
+# This file is distributed under the same license as the evince package.
+# Funda Wang <[email protected]>, 2004
+# Abel Cheung <[email protected]>, 2005
+# Wei-Lun Chao <[email protected]>, 2005
+# Woodman Tuen <[email protected]>, 2006-07
+# Chao-Hsiung Liao <[email protected]>, 2008, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: evince 2.31.90\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-08-21 20:05+0800\n"
+"PO-Revision-Date: 2010-08-20 08:37+0800\n"
+"Last-Translator: Chao-Hsiung Liao <[email protected]>\n"
+"Language-Team: Chinese (traditional)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Virtaal 0.5.1\n"
+
+#: ../backend/comics/comics-document.c:217
+#, c-format
+msgid ""
+"Error launching the command “%s” in order to decompress the comic book: %s"
+msgstr "執行指令「%s」以將漫畫書解壓縮時發生錯誤:%s"
+
+#: ../backend/comics/comics-document.c:231
+#, c-format
+msgid "The command “%s” failed at decompressing the comic book."
+msgstr "將漫畫書解壓縮時指令「%s」失敗。"
+
+#: ../backend/comics/comics-document.c:240
+#, c-format
+msgid "The command “%s” did not end normally."
+msgstr "指令「%s」沒有正常的結束。"
+
+#: ../backend/comics/comics-document.c:420
+#, c-format
+msgid "Not a comic book MIME type: %s"
+msgstr "並非漫畫書 MIME 類型:%s"
+
+#: ../backend/comics/comics-document.c:427
+msgid "Can't find an appropriate command to decompress this type of comic book"
+msgstr "找不到合適的指令可將這個類型的漫畫書解壓縮"
+
+#: ../backend/comics/comics-document.c:465
+#: ../libdocument/ev-document-factory.c:143
+#: ../libdocument/ev-document-factory.c:286
+msgid "Unknown MIME Type"
+msgstr "未知的 MIME 型態"
+
+#: ../backend/comics/comics-document.c:492
+msgid "File corrupted"
+msgstr "檔案已損毀"
+
+#: ../backend/comics/comics-document.c:505
+msgid "No files in archive"
+msgstr "壓縮檔中沒有檔案"
+
+#: ../backend/comics/comics-document.c:544
+#, c-format
+msgid "No images found in archive %s"
+msgstr "在文件 %s 中找不到圖片"
+
+#: ../backend/comics/comics-document.c:788
+#, c-format
+msgid "There was an error deleting “%s”."
+msgstr "刪除「%s」時發生錯誤。"
+
+#: ../backend/comics/comics-document.c:927
+#, c-format
+msgid "Error %s"
+msgstr "錯誤 %s"
+
+#: ../backend/comics/comicsdocument.evince-backend.in.h:1
+msgid "Comic Books"
+msgstr "漫畫書"
+
+#: ../backend/djvu/djvu-document.c:173
+msgid "DjVu document has incorrect format"
+msgstr "DjVu 文件有不正確的格式"
+
+#: ../backend/djvu/djvu-document.c:250
+msgid ""
+"The document is composed of several files. One or more of these files cannot "
+"be accessed."
+msgstr "此文件由多個檔案組成。其中一個或更多的檔案無法存取。"
+
+#: ../backend/djvu/djvudocument.evince-backend.in.h:1
+msgid "DjVu Documents"
+msgstr "DjVu 文件"
+
+#: ../backend/dvi/dvi-document.c:113
+msgid "DVI document has incorrect format"
+msgstr "DVI 文件有不正確的格式"
+
+#: ../backend/dvi/dvidocument.evince-backend.in.h:1
+msgid "DVI Documents"
+msgstr "DVI 文件"
+
+#: ../backend/pdf/ev-poppler.cc:526
+msgid "This work is in the Public Domain"
+msgstr "這個作品是屬於公有領域"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:779
+msgid "Yes"
+msgstr "是"
+
+#. translators: this is the document security state
+#: ../backend/pdf/ev-poppler.cc:782
+msgid "No"
+msgstr "否"
+
+#: ../backend/pdf/ev-poppler.cc:910
+msgid "Type 1"
+msgstr "Type 1"
+
+#: ../backend/pdf/ev-poppler.cc:912
+msgid "Type 1C"
+msgstr "Type 1C"
+
+#: ../backend/pdf/ev-poppler.cc:914
+msgid "Type 3"
+msgstr "Type 3"
+
+#: ../backend/pdf/ev-poppler.cc:916
+msgid "TrueType"
+msgstr "TrueType"
+
+#: ../backend/pdf/ev-poppler.cc:918
+msgid "Type 1 (CID)"
+msgstr "Type 1 (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:920
+msgid "Type 1C (CID)"
+msgstr "Type 1C (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:922
+msgid "TrueType (CID)"
+msgstr "TrueType (CID)"
+
+#: ../backend/pdf/ev-poppler.cc:924
+msgid "Unknown font type"
+msgstr "字型不明"
+
+#: ../backend/pdf/ev-poppler.cc:950
+msgid "No name"
+msgstr "沒有名稱"
+
+#: ../backend/pdf/ev-poppler.cc:958
+msgid "Embedded subset"
+msgstr "嵌入字體"
+
+#: ../backend/pdf/ev-poppler.cc:960
+msgid "Embedded"
+msgstr "內嵌的"
+
+#: ../backend/pdf/ev-poppler.cc:962
+msgid "Not embedded"
+msgstr "沒有嵌入"
+
+#: ../backend/pdf/pdfdocument.evince-backend.in.h:1
+msgid "PDF Documents"
+msgstr "PDF 文件"
+
+#: ../backend/impress/impress-document.c:302
+#: ../backend/tiff/tiff-document.c:113
+msgid "Invalid document"
+msgstr "無效的文件"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../backend/impress/impressdocument.evince-backend.in.h:1
+msgid "Impress Slides"
+msgstr "Impress 幻燈片"
+
+#: ../backend/impress/zip.c:53
+msgid "No error"
+msgstr "沒有錯誤"
+
+#: ../backend/impress/zip.c:56
+msgid "Not enough memory"
+msgstr "沒有足夠的記憶體"
+
+#: ../backend/impress/zip.c:59
+msgid "Cannot find ZIP signature"
+msgstr "找不到 ZIP 簽章"
+
+#: ../backend/impress/zip.c:62
+msgid "Invalid ZIP file"
+msgstr "無效的 ZIP 檔"
+
+#: ../backend/impress/zip.c:65
+msgid "Multi file ZIPs are not supported"
+msgstr "不支援分割式 ZIP 檔"
+
+#: ../backend/impress/zip.c:68
+msgid "Cannot open the file"
+msgstr "無法開啟檔案"
+
+#: ../backend/impress/zip.c:71
+msgid "Cannot read data from file"
+msgstr "無法從檔案讀取資訊"
+
+#: ../backend/impress/zip.c:74
+msgid "Cannot find file in the ZIP archive"
+msgstr "無法在 ZIP 壓縮檔中找到檔案"
+
+#: ../backend/impress/zip.c:77
+msgid "Unknown error"
+msgstr "不明的錯誤"
+
+#: ../backend/ps/ev-spectre.c:102
+#, c-format
+msgid "Failed to load document “%s”"
+msgstr "載入文件“%s”失敗"
+
+#: ../backend/ps/ev-spectre.c:135
+#, c-format
+msgid "Failed to save document “%s”"
+msgstr "儲存文件“%s”失敗"
+
+#: ../backend/ps/psdocument.evince-backend.in.h:1
+msgid "PostScript Documents"
+msgstr "PostScript 文件"
+
+#: ../libdocument/ev-attachment.c:304 ../libdocument/ev-attachment.c:325
+#, c-format
+msgid "Couldn't save attachment “%s”: %s"
+msgstr "無法儲存附件“%s”:%s"
+
+#: ../libdocument/ev-attachment.c:372
+#, c-format
+msgid "Couldn't open attachment “%s”: %s"
+msgstr "無法開啟附件“%s”:%s"
+
+#: ../libdocument/ev-attachment.c:407
+#, c-format
+msgid "Couldn't open attachment “%s”"
+msgstr "無法開啟附件“%s”"
+
+#: ../libdocument/ev-document-factory.c:168
+#, c-format
+msgid "File type %s (%s) is not supported"
+msgstr "檔案類型 %s (%s) 不支援"
+
+#: ../libdocument/ev-document-factory.c:359
+msgid "All Documents"
+msgstr "所有文件"
+
+#: ../libdocument/ev-document-factory.c:391
+msgid "All Files"
+msgstr "所有檔案"
+
+#: ../libdocument/ev-file-helpers.c:146
+#, c-format
+msgid "Failed to create a temporary file: %s"
+msgstr "無法建立暫存檔案:%s"
+
+#: ../libdocument/ev-file-helpers.c:308
+#, c-format
+msgid "Failed to create a temporary directory: %s"
+msgstr "無法建立暫存目錄:%s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:165
+#, c-format
+msgid "File is not a valid .desktop file"
+msgstr "檔案不是有效的 .desktop 檔案"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:188
+#, c-format
+msgid "Unrecognized desktop file Version '%s'"
+msgstr "無法辨識的桌面檔案版本「%s」"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:958
+#, c-format
+msgid "Starting %s"
+msgstr "準備啟動 %s"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1100
+#, c-format
+msgid "Application does not accept documents on command line"
+msgstr "應用程式不接受以命令列開啟文件"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1168
+#, c-format
+msgid "Unrecognized launch option: %d"
+msgstr "無法辨識的啟動選項:%d"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1373
+#, c-format
+msgid "Can't pass document URIs to a 'Type=Link' desktop entry"
+msgstr "不能傳送文件 URI 至「Type=Link」桌面項目"
+
+#: ../cut-n-paste/smclient/eggdesktopfile.c:1392
+#, c-format
+msgid "Not a launchable item"
+msgstr "不是可以啟動的項目"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:225
+msgid "Disable connection to session manager"
+msgstr "停用到作業階段管理程式的連線"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228
+msgid "Specify file containing saved configuration"
+msgstr "指定含有已儲存組態的檔案"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:228 ../previewer/ev-previewer.c:45
+#: ../previewer/ev-previewer.c:46
+msgid "FILE"
+msgstr "檔案"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "Specify session management ID"
+msgstr "指定作業階段管理 ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:231
+msgid "ID"
+msgstr "ID"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:252
+msgid "Session management options:"
+msgstr "作業階段管理選項:"
+
+#: ../cut-n-paste/smclient/eggsmclient.c:253
+msgid "Show session management options"
+msgstr "顯示作業階段管理選項"
+
+#. Translaters: This string is for a toggle to display a toolbar.
+#. * The name of the toolbar is automatically computed from the widgets
+#. * on the toolbar, and is placed at the %s. Note the _ before the %s
+#. * which is used to add mnemonics. We know that this is likely to
+#. * produce duplicates, but don't worry about it. If your language
+#. * normally has a mnemonic at the start, please use the _. If not,
+#. * please remove.
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:946
+#, c-format
+msgid "Show “_%s”"
+msgstr "顯示「%s」"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1414
+msgid "_Move on Toolbar"
+msgstr "移至工具列(_M)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1415
+msgid "Move the selected item on the toolbar"
+msgstr "將選取的項目移至工具列"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1416
+msgid "_Remove from Toolbar"
+msgstr "從工具列移除(_R)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1417
+msgid "Remove the selected item from the toolbar"
+msgstr "從工具列移除選取的項目"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1418
+msgid "_Delete Toolbar"
+msgstr "刪除工具列(_D)"
+
+#: ../cut-n-paste/toolbar-editor/egg-editable-toolbar.c:1419
+msgid "Remove the selected toolbar"
+msgstr "移除選取的工具列"
+
+#: ../cut-n-paste/toolbar-editor/egg-toolbar-editor.c:486
+msgid "Separator"
+msgstr "分隔線"
+
+#. translators: this is the label for toolbar button
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:48 ../shell/ev-window.c:5741
+msgid "Best Fit"
+msgstr "最適大小"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:49
+msgid "Fit Page Width"
+msgstr "符合頁寬"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:51
+msgid "50%"
+msgstr "50%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:52
+msgid "70%"
+msgstr "70%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:53
+msgid "85%"
+msgstr "85%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:54
+msgid "100%"
+msgstr "100%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:55
+msgid "125%"
+msgstr "125%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:56
+msgid "150%"
+msgstr "150%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:57
+msgid "175%"
+msgstr "175%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:58
+msgid "200%"
+msgstr "200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:59
+msgid "300%"
+msgstr "300%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:60
+msgid "400%"
+msgstr "400%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:61
+msgid "800%"
+msgstr "800%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:62
+msgid "1600%"
+msgstr "1600%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:63
+msgid "3200%"
+msgstr "3200%"
+
+#: ../cut-n-paste/zoom-control/ephy-zoom.h:64
+msgid "6400%"
+msgstr "6400%"
+
+#. Manually set name and icon
+#: ../data/evince.desktop.in.in.h:1 ../shell/ev-window.c:4536
+#: ../shell/ev-window-title.c:149 ../shell/main.c:310
+#, c-format
+msgid "Document Viewer"
+msgstr "文件檢視器"
+
+#: ../data/evince.desktop.in.in.h:2
+msgid "View multi-page documents"
+msgstr "顯示多頁文件"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:1
+msgid "Override document restrictions"
+msgstr "不理會文件的限制"
+
+#: ../data/org.mate.Evince.gschema.xml.in.h:2
+msgid "Override document restrictions, like restriction to copy or to print."
+msgstr "不理會文件的限制,例如不准複製或列印"
+
+#: ../previewer/ev-previewer.c:44
+msgid "Delete the temporary file"
+msgstr "刪除暫存檔案"
+
+#: ../previewer/ev-previewer.c:45
+msgid "Print settings file"
+msgstr "列印設定值檔案"
+
+#: ../previewer/ev-previewer.c:144 ../previewer/ev-previewer.c:178
+msgid "MATE Document Previewer"
+msgstr "MATE 文件預覽器"
+
+#: ../previewer/ev-previewer-window.c:91 ../shell/ev-window.c:3168
+msgid "Failed to print document"
+msgstr "無法列印文件"
+
+#: ../previewer/ev-previewer-window.c:237
+#, c-format
+msgid "The selected printer '%s' could not be found"
+msgstr "找不到選取的印表機「%s」"
+
+#. Go menu
+#: ../previewer/ev-previewer-window.c:284 ../shell/ev-window.c:5456
+msgid "_Previous Page"
+msgstr "上一頁(_P)"
+
+#: ../previewer/ev-previewer-window.c:285 ../shell/ev-window.c:5457
+msgid "Go to the previous page"
+msgstr "回到上一頁"
+
+#: ../previewer/ev-previewer-window.c:287 ../shell/ev-window.c:5459
+msgid "_Next Page"
+msgstr "下一頁(_N)"
+
+#: ../previewer/ev-previewer-window.c:288 ../shell/ev-window.c:5460
+msgid "Go to the next page"
+msgstr "前往下一頁"
+
+#: ../previewer/ev-previewer-window.c:291 ../shell/ev-window.c:5443
+msgid "Enlarge the document"
+msgstr "放大文件"
+
+#: ../previewer/ev-previewer-window.c:294 ../shell/ev-window.c:5446
+msgid "Shrink the document"
+msgstr "縮小文件"
+
+#: ../previewer/ev-previewer-window.c:297 ../libview/ev-print-operation.c:1307
+msgid "Print"
+msgstr "列印"
+
+#: ../previewer/ev-previewer-window.c:298 ../shell/ev-window.c:5412
+msgid "Print this document"
+msgstr "列印這份文件"
+
+#: ../previewer/ev-previewer-window.c:342 ../shell/ev-window.c:5558
+msgid "_Best Fit"
+msgstr "最適大小(_B)"
+
+#: ../previewer/ev-previewer-window.c:343 ../shell/ev-window.c:5559
+msgid "Make the current document fill the window"
+msgstr "令視窗可以顯示整頁頁面"
+
+#: ../previewer/ev-previewer-window.c:345 ../shell/ev-window.c:5561
+msgid "Fit Page _Width"
+msgstr "符合頁寬(_W)"
+
+#: ../previewer/ev-previewer-window.c:346 ../shell/ev-window.c:5562
+msgid "Make the current document fill the window width"
+msgstr "使目前文件符合視窗寬度"
+
+#: ../previewer/ev-previewer-window.c:558 ../shell/ev-window.c:5663
+msgid "Page"
+msgstr "頁次"
+
+#: ../previewer/ev-previewer-window.c:559 ../shell/ev-window.c:5664
+msgid "Select Page"
+msgstr "選擇頁次"
+
+#: ../properties/ev-properties-main.c:116
+msgid "Document"
+msgstr "文件"
+
+#: ../properties/ev-properties-view.c:60
+msgid "Title:"
+msgstr "標題:"
+
+#: ../properties/ev-properties-view.c:61
+msgid "Location:"
+msgstr "位置:"
+
+#: ../properties/ev-properties-view.c:62
+msgid "Subject:"
+msgstr "主旨:"
+
+#: ../properties/ev-properties-view.c:63
+#: ../shell/ev-annotation-properties-dialog.c:160
+msgid "Author:"
+msgstr "作者:"
+
+#: ../properties/ev-properties-view.c:64
+msgid "Keywords:"
+msgstr "關鍵字:"
+
+#: ../properties/ev-properties-view.c:65
+msgid "Producer:"
+msgstr "製作程式:"
+
+#: ../properties/ev-properties-view.c:66
+msgid "Creator:"
+msgstr "製作者:"
+
+#: ../properties/ev-properties-view.c:67
+msgid "Created:"
+msgstr "建立時刻:"
+
+#: ../properties/ev-properties-view.c:68
+msgid "Modified:"
+msgstr "修改時刻:"
+
+#: ../properties/ev-properties-view.c:69
+msgid "Number of Pages:"
+msgstr "頁數:"
+
+#: ../properties/ev-properties-view.c:70
+msgid "Optimized:"
+msgstr "最佳化:"
+
+#: ../properties/ev-properties-view.c:71
+msgid "Format:"
+msgstr "格式:"
+
+#: ../properties/ev-properties-view.c:72
+msgid "Security:"
+msgstr "安全性:"
+
+#: ../properties/ev-properties-view.c:73
+msgid "Paper Size:"
+msgstr "紙張大小:"
+
+#: ../properties/ev-properties-view.c:188 ../libview/ev-print-operation.c:1865
+msgid "None"
+msgstr "沒有"
+
+#. Translate to the default units to use for presenting
+#. * lengths to the user. Translate to default:inch if you
+#. * want inches, otherwise translate to default:mm.
+#. * Do *not* translate it to "predefinito:mm", if it
+#. * it isn't default:mm or default:inch it will not work
+#.
+#: ../properties/ev-properties-view.c:217
+msgid "default:mm"
+msgstr "default:mm"
+
+#: ../properties/ev-properties-view.c:261
+#, c-format
+msgid "%.0f × %.0f mm"
+msgstr "%.0f × %.0f 毫米"
+
+#: ../properties/ev-properties-view.c:265
+#, c-format
+msgid "%.2f × %.2f inch"
+msgstr "%.2f × %.2f 吋"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:289
+#, c-format
+msgid "%s, Portrait (%s)"
+msgstr "%s, 直向 (%s)"
+
+#. Note to translators: first placeholder is the paper name (eg.
+#. * A4), second placeholder is the paper size (eg. 297x210 mm)
+#: ../properties/ev-properties-view.c:296
+#, c-format
+msgid "%s, Landscape (%s)"
+msgstr "%s, 橫向 (%s)"
+
+# (Abel) 這裡是頁數 (%d of %d)
+#: ../libmisc/ev-page-action-widget.c:68
+#, c-format
+msgid "(%d of %d)"
+msgstr "(%d / %d)"
+
+# (Abel) 這裡是頁數 (%d of %d)
+#: ../libmisc/ev-page-action-widget.c:70
+#, c-format
+msgid "of %d"
+msgstr "/ %d"
+
+#. Create tree view
+#: ../libview/ev-loading-window.c:76 ../shell/ev-sidebar-annotations.c:133
+#: ../shell/ev-sidebar-layers.c:125 ../shell/ev-sidebar-links.c:262
+msgid "Loading…"
+msgstr "載入中…"
+
+#. Initial state
+#: ../libview/ev-print-operation.c:334
+msgid "Preparing to print…"
+msgstr "正在準備列印…"
+
+#: ../libview/ev-print-operation.c:336
+msgid "Finishing…"
+msgstr "正在結束…"
+
+#: ../libview/ev-print-operation.c:338
+#, c-format
+msgid "Printing page %d of %d…"
+msgstr "正在列印頁面 %d / %d…"
+
+#: ../libview/ev-print-operation.c:1161
+msgid "Printing is not supported on this printer."
+msgstr "這台印表機不支援列印。"
+
+#: ../libview/ev-print-operation.c:1226
+msgid "Invalid page selection"
+msgstr "無效的頁面選擇區域"
+
+#: ../libview/ev-print-operation.c:1227
+msgid "Warning"
+msgstr "警告"
+
+#: ../libview/ev-print-operation.c:1229
+msgid "Your print range selection does not include any pages"
+msgstr "您選擇的列印範圍並未包含任何頁面"
+
+#: ../libview/ev-print-operation.c:1860
+msgid "Page Scaling:"
+msgstr "頁面縮放:"
+
+#: ../libview/ev-print-operation.c:1866
+msgid "Shrink to Printable Area"
+msgstr "縮減至可列印區域"
+
+#: ../libview/ev-print-operation.c:1867
+msgid "Fit to Printable Area"
+msgstr "符合可列印區域"
+
+#: ../libview/ev-print-operation.c:1870
+msgid ""
+"Scale document pages to fit the selected printer page. Select from one of "
+"the following:\n"
+"\n"
+"• \"None\": No page scaling is performed.\n"
+"\n"
+"• \"Shrink to Printable Area\": Document pages larger than the printable "
+"area are reduced to fit the printable area of the printer page.\n"
+"\n"
+"• \"Fit to Printable Area\": Document pages are enlarged or reduced as "
+"required to fit the printable area of the printer page.\n"
+msgstr ""
+"將文件縮放至可列印區域。可選擇以下選項:\n"
+"\n"
+"• \"沒有\":不進行頁面的縮放。\n"
+"\n"
+"• \"符合可列印區域\":文件頁面超過可列印區域時會被縮小以符合印表機的可列印區"
+"域。\n"
+"\n"
+"• \"縮減至可列印區域\":文件頁面會被放大或縮小以符合印表機的可列印區域。\n"
+
+#: ../libview/ev-print-operation.c:1882
+msgid "Auto Rotate and Center"
+msgstr "自動旋轉並置中"
+
+#: ../libview/ev-print-operation.c:1885
+msgid ""
+"Rotate printer page orientation of each page to match orientation of each "
+"document page. Document pages will be centered within the printer page."
+msgstr ""
+"旋轉每一頁的印表機頁面方向以符合文件頁面的方向。文件的頁面會在印表機的頁面裡"
+"置中。"
+
+#: ../libview/ev-print-operation.c:1890
+msgid "Select page size using document page size"
+msgstr "使用文件頁面大小來選擇頁面大小"
+
+#: ../libview/ev-print-operation.c:1892
+msgid ""
+"When enabled, each page will be printed on the same size paper as the "
+"document page."
+msgstr "當啟用時,每一頁都會按照文件中的頁面大小列印。"
+
+#: ../libview/ev-print-operation.c:1974
+msgid "Page Handling"
+msgstr "頁面處理方式"
+
+#: ../libview/ev-jobs.c:1529
+#, c-format
+msgid "Failed to print page %d: %s"
+msgstr "無法列印頁面 %d:%s"
+
+#: ../libview/ev-view-accessible.c:46
+msgid "Scroll Up"
+msgstr "向上捲動"
+
+#: ../libview/ev-view-accessible.c:47
+msgid "Scroll Down"
+msgstr "向下捲動"
+
+#: ../libview/ev-view-accessible.c:53
+msgid "Scroll View Up"
+msgstr "向上檢視"
+
+#: ../libview/ev-view-accessible.c:54
+msgid "Scroll View Down"
+msgstr "向下檢視"
+
+#: ../libview/ev-view-accessible.c:882
+msgid "Document View"
+msgstr "文件檢視器"
+
+#: ../libview/ev-view-presentation.c:672
+msgid "Jump to page:"
+msgstr "前往頁:"
+
+#: ../libview/ev-view-presentation.c:968
+msgid "End of presentation. Click to exit."
+msgstr "簡報已完結。請點一下離開。"
+
+#: ../libview/ev-view.c:1756
+msgid "Go to first page"
+msgstr "回到第一頁"
+
+#: ../libview/ev-view.c:1758
+msgid "Go to previous page"
+msgstr "回到上一頁"
+
+#: ../libview/ev-view.c:1760
+msgid "Go to next page"
+msgstr "前往下一頁"
+
+#: ../libview/ev-view.c:1762
+msgid "Go to last page"
+msgstr "前往最後一頁"
+
+#: ../libview/ev-view.c:1764
+msgid "Go to page"
+msgstr "前往頁"
+
+#: ../libview/ev-view.c:1766
+msgid "Find"
+msgstr "尋找"
+
+#: ../libview/ev-view.c:1794
+#, c-format
+msgid "Go to page %s"
+msgstr "前往第 %s 頁"
+
+#: ../libview/ev-view.c:1800
+#, c-format
+msgid "Go to %s on file “%s”"
+msgstr "前往檔案“%s”上的 %s"
+
+#: ../libview/ev-view.c:1803
+#, c-format
+msgid "Go to file “%s”"
+msgstr "前往檔案“%s”"
+
+#: ../libview/ev-view.c:1811
+#, c-format
+msgid "Launch %s"
+msgstr "執行 %s"
+
+#: ../shell/eggfindbar.c:320
+msgid "Find:"
+msgstr "尋找:"
+
+#: ../shell/eggfindbar.c:329 ../shell/ev-window.c:5429
+msgid "Find Pre_vious"
+msgstr "找上一個(_V)"
+
+#: ../shell/eggfindbar.c:333
+msgid "Find previous occurrence of the search string"
+msgstr "尋找上一個出現搜尋字串的地方"
+
+#: ../shell/eggfindbar.c:337 ../shell/ev-window.c:5427
+msgid "Find Ne_xt"
+msgstr "找下一個(_X)"
+
+#: ../shell/eggfindbar.c:341
+msgid "Find next occurrence of the search string"
+msgstr "尋找下一個出現搜尋字串的地方"
+
+#: ../shell/eggfindbar.c:348
+msgid "C_ase Sensitive"
+msgstr "區分大小寫(_A)"
+
+#: ../shell/eggfindbar.c:351
+msgid "Toggle case sensitive search"
+msgstr "選取後在搜尋時將區分大小寫"
+
+#: ../shell/ev-annotation-properties-dialog.c:97
+msgid "Icon:"
+msgstr "圖示:"
+
+#: ../shell/ev-annotation-properties-dialog.c:104
+msgid "Note"
+msgstr "備註"
+
+#: ../shell/ev-annotation-properties-dialog.c:105
+msgid "Comment"
+msgstr "評論"
+
+#: ../shell/ev-annotation-properties-dialog.c:106
+msgid "Key"
+msgstr "設定鍵"
+
+#: ../shell/ev-annotation-properties-dialog.c:107
+msgid "Help"
+msgstr "求助"
+
+#: ../shell/ev-annotation-properties-dialog.c:108
+msgid "New Paragraph"
+msgstr "新增段落"
+
+#: ../shell/ev-annotation-properties-dialog.c:109
+msgid "Paragraph"
+msgstr "段落"
+
+#: ../shell/ev-annotation-properties-dialog.c:110
+msgid "Insert"
+msgstr "插入"
+
+#: ../shell/ev-annotation-properties-dialog.c:111
+msgid "Cross"
+msgstr "十字"
+
+#: ../shell/ev-annotation-properties-dialog.c:112
+msgid "Circle"
+msgstr "圓形"
+
+#: ../shell/ev-annotation-properties-dialog.c:113
+msgid "Unknown"
+msgstr "不明"
+
+#: ../shell/ev-annotation-properties-dialog.c:139
+msgid "Annotation Properties"
+msgstr "註解屬性"
+
+#: ../shell/ev-annotation-properties-dialog.c:173
+msgid "Color:"
+msgstr "顏色:"
+
+#: ../shell/ev-annotation-properties-dialog.c:185
+msgid "Style:"
+msgstr "樣式:"
+
+#: ../shell/ev-annotation-properties-dialog.c:201
+msgid "Transparent"
+msgstr "透明"
+
+#: ../shell/ev-annotation-properties-dialog.c:208
+msgid "Opaque"
+msgstr "不透明"
+
+#: ../shell/ev-annotation-properties-dialog.c:219
+msgid "Initial window state:"
+msgstr "初始化視窗狀態:"
+
+#: ../shell/ev-annotation-properties-dialog.c:226
+msgid "Open"
+msgstr "開啟"
+
+#: ../shell/ev-annotation-properties-dialog.c:227
+msgid "Close"
+msgstr "關閉"
+
+#: ../shell/ev-application.c:1022
+msgid "Running in presentation mode"
+msgstr "以簡報模式執行"
+
+#: ../shell/ev-keyring.c:102
+#, c-format
+msgid "Password for document %s"
+msgstr "用於 %s 的密碼"
+
+#: ../shell/ev-convert-metadata.c:88
+#, c-format
+msgid "Converting %s"
+msgstr "正在轉換 %s"
+
+#: ../shell/ev-convert-metadata.c:92
+#, c-format
+msgid "%d of %d documents converted"
+msgstr "%d / %d 份文件已轉換"
+
+#: ../shell/ev-convert-metadata.c:165 ../shell/ev-convert-metadata.c:181
+msgid "Converting metadata"
+msgstr "正在轉換中繼資料"
+
+#: ../shell/ev-convert-metadata.c:187
+msgid ""
+"The metadata format used by Evince has changed, and hence it needs to be "
+"migrated. If the migration is cancelled the metadata storage will not work."
+msgstr ""
+"Evince 所使用的中繼資料已經改變,因此需要做轉移。如果轉移的動作被取消,中繼資"
+"料的儲存就無法運作。"
+
+#: ../shell/ev-open-recent-action.c:72
+msgid "Open a recently used document"
+msgstr "開啟最近使用的文件"
+
+#: ../shell/ev-password-view.c:144
+msgid ""
+"This document is locked and can only be read by entering the correct "
+"password."
+msgstr "這份文件已被鎖上,只有在輸入正確密碼之後才能閱讀。"
+
+#: ../shell/ev-password-view.c:153 ../shell/ev-password-view.c:272
+msgid "_Unlock Document"
+msgstr "文件解鎖(_U)"
+
+#: ../shell/ev-password-view.c:264
+msgid "Enter password"
+msgstr "輸入密碼"
+
+#: ../shell/ev-password-view.c:304
+msgid "Password required"
+msgstr "需要密碼"
+
+#: ../shell/ev-password-view.c:305
+#, c-format
+msgid ""
+"The document “%s” is locked and requires a password before it can be opened."
+msgstr "文件 %s 已被鎖上,需要密碼才能開啟。"
+
+#: ../shell/ev-password-view.c:335
+msgid "_Password:"
+msgstr "密碼(_P):"
+
+#: ../shell/ev-password-view.c:368
+msgid "Forget password _immediately"
+msgstr "立刻忘記密碼(_I) "
+
+#: ../shell/ev-password-view.c:380
+msgid "Remember password until you _log out"
+msgstr "在您登出前記住密碼(_L)"
+
+#: ../shell/ev-password-view.c:392
+msgid "Remember _forever"
+msgstr "永遠記住密碼(_F)"
+
+#: ../shell/ev-properties-dialog.c:62
+msgid "Properties"
+msgstr "屬性"
+
+#: ../shell/ev-properties-dialog.c:95
+msgid "General"
+msgstr "一般"
+
+#: ../shell/ev-properties-dialog.c:105
+msgid "Fonts"
+msgstr "字型"
+
+#: ../shell/ev-properties-dialog.c:118
+msgid "Document License"
+msgstr "文件授權"
+
+#: ../shell/ev-properties-fonts.c:135
+msgid "Font"
+msgstr "字型"
+
+#: ../shell/ev-properties-fonts.c:162
+#, c-format
+msgid "Gathering font information… %3d%%"
+msgstr "正在搜集字型資料… %3d%%"
+
+#: ../shell/ev-properties-license.c:137
+msgid "Usage terms"
+msgstr "使用條款"
+
+#: ../shell/ev-properties-license.c:143
+msgid "Text License"
+msgstr "文字授權"
+
+#: ../shell/ev-properties-license.c:149
+msgid "Further Information"
+msgstr "更多資訊"
+
+#: ../shell/ev-sidebar-annotations.c:161
+msgid "List"
+msgstr "清單"
+
+#: ../shell/ev-sidebar-annotations.c:203 ../shell/ev-sidebar-annotations.c:533
+msgid "Annotations"
+msgstr "註解"
+
+#: ../shell/ev-sidebar-annotations.c:209
+msgid "Text"
+msgstr "文字"
+
+#: ../shell/ev-sidebar-annotations.c:210
+msgid "Add text annotation"
+msgstr "加入文字註解"
+
+#: ../shell/ev-sidebar-annotations.c:221
+msgid "Add"
+msgstr "加入"
+
+#: ../shell/ev-sidebar-annotations.c:364
+msgid "Document contains no annotations"
+msgstr "文件不包含任何註解"
+
+#: ../shell/ev-sidebar-annotations.c:396
+#, c-format
+msgid "Page %d"
+msgstr "第 %d 頁"
+
+#: ../shell/ev-sidebar-attachments.c:697
+msgid "Attachments"
+msgstr "附加檔案"
+
+#: ../shell/ev-sidebar-layers.c:401
+msgid "Layers"
+msgstr "圖層"
+
+#: ../shell/ev-sidebar-links.c:335
+msgid "Print…"
+msgstr "列印…"
+
+#: ../shell/ev-sidebar-links.c:750
+msgid "Index"
+msgstr "索引"
+
+#: ../shell/ev-sidebar-thumbnails.c:965
+msgid "Thumbnails"
+msgstr "縮圖"
+
+#: ../shell/ev-window.c:867
+#, c-format
+msgid "Page %s — %s"
+msgstr "頁 %s — %s"
+
+#: ../shell/ev-window.c:869
+#, c-format
+msgid "Page %s"
+msgstr "頁 %s"
+
+#: ../shell/ev-window.c:1422
+msgid "The document contains no pages"
+msgstr "此文件不包含任何頁面"
+
+#: ../shell/ev-window.c:1425
+msgid "The document contains only empty pages"
+msgstr "文件只包含空白頁面"
+
+#: ../shell/ev-window.c:1627 ../shell/ev-window.c:1793
+msgid "Unable to open document"
+msgstr "無法開啟文件"
+
+#: ../shell/ev-window.c:1764
+#, c-format
+msgid "Loading document from “%s”"
+msgstr "正在從「%s」載入文件"
+
+#: ../shell/ev-window.c:1906 ../shell/ev-window.c:2185
+#, c-format
+msgid "Downloading document (%d%%)"
+msgstr "正在下載文件 (%d%%)"
+
+#: ../shell/ev-window.c:1939
+msgid "Failed to load remote file."
+msgstr "載入遠端的檔案失敗。"
+
+#: ../shell/ev-window.c:2129
+#, c-format
+msgid "Reloading document from %s"
+msgstr "從 %s 重新載入文件"
+
+#: ../shell/ev-window.c:2161
+msgid "Failed to reload document."
+msgstr "重新載入文件失敗。"
+
+#: ../shell/ev-window.c:2316
+msgid "Open Document"
+msgstr "開啟文件"
+
+#: ../shell/ev-window.c:2614
+#, c-format
+msgid "Saving document to %s"
+msgstr "正儲存文件到 %s"
+
+#: ../shell/ev-window.c:2617
+#, c-format
+msgid "Saving attachment to %s"
+msgstr "正儲存附加檔案到 %s"
+
+#: ../shell/ev-window.c:2620
+#, c-format
+msgid "Saving image to %s"
+msgstr "正儲存圖片到 %s"
+
+#: ../shell/ev-window.c:2664 ../shell/ev-window.c:2764
+#, c-format
+msgid "The file could not be saved as “%s”."
+msgstr "檔案無法儲存為“%s”。"
+
+#: ../shell/ev-window.c:2695
+#, c-format
+msgid "Uploading document (%d%%)"
+msgstr "正在上傳文件 (%d%%)"
+
+#: ../shell/ev-window.c:2699
+#, c-format
+msgid "Uploading attachment (%d%%)"
+msgstr "正在上傳附加檔案 (%d%%)"
+
+#: ../shell/ev-window.c:2703
+#, c-format
+msgid "Uploading image (%d%%)"
+msgstr "正在上傳圖片 (%d%%)"
+
+#: ../shell/ev-window.c:2827
+msgid "Save a Copy"
+msgstr "儲存副本"
+
+#: ../shell/ev-window.c:3112
+#, c-format
+msgid "%d pending job in queue"
+msgid_plural "%d pending jobs in queue"
+msgstr[0] "佇列中 %d 項預定的工作"
+
+#: ../shell/ev-window.c:3225
+#, c-format
+msgid "Printing job “%s”"
+msgstr "正在列印工作“%s”"
+
+#: ../shell/ev-window.c:3402
+msgid ""
+"Document contains form fields that have been filled out. If you don't save a "
+"copy, changes will be permanently lost."
+msgstr "文件包含尚未填寫的表單欄位。如果您不儲存複本,這些變更就會永遠消失。"
+
+#: ../shell/ev-window.c:3406
+msgid ""
+"Document contains new or modified annotations. If you don't save a copy, "
+"changes will be permanently lost."
+msgstr "文件包含新的或修改過的註解。如果您不儲存複本,這些變更就會永遠消失。"
+
+#: ../shell/ev-window.c:3413
+#, c-format
+msgid "Save a copy of document “%s” before closing?"
+msgstr "關閉前要儲存文件「%s」的複本嗎?"
+
+#: ../shell/ev-window.c:3432
+msgid "Close _without Saving"
+msgstr "關閉但不儲存(_W)"
+
+#: ../shell/ev-window.c:3436
+msgid "Save a _Copy"
+msgstr "儲存副本(_C)"
+
+#: ../shell/ev-window.c:3510
+#, c-format
+msgid "Wait until print job “%s” finishes before closing?"
+msgstr "在關閉前是否要等待列印工作“%s”結束?"
+
+#: ../shell/ev-window.c:3513
+#, c-format
+msgid ""
+"There are %d print jobs active. Wait until print finishes before closing?"
+msgstr "還有 %d 項列印工作在使用中。在關閉前是否要等待列印結束?"
+
+#: ../shell/ev-window.c:3525
+msgid "If you close the window, pending print jobs will not be printed."
+msgstr "如果您關閉視窗,預定的列印工作將不會列印。"
+
+#: ../shell/ev-window.c:3529
+msgid "Cancel _print and Close"
+msgstr "取消列印並關閉(_P)"
+
+#: ../shell/ev-window.c:3533
+msgid "Close _after Printing"
+msgstr "於列印完成後關閉(_A)"
+
+#: ../shell/ev-window.c:4153
+msgid "Toolbar Editor"
+msgstr "工具列編輯器"
+
+#: ../shell/ev-window.c:4320
+msgid "There was an error displaying help"
+msgstr "顯示說明文件時發生錯誤"
+
+#: ../shell/ev-window.c:4532
+#, c-format
+msgid ""
+"Document Viewer\n"
+"Using %s (%s)"
+msgstr ""
+"文件檢視器\n"
+"使用 %s (%s)"
+
+# (Abel) 大致上參考 slat.org 的建議
+#: ../shell/ev-window.c:4563
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,"
+"就本程式再為散佈與/或修改;無論您依據的是本授權的第二版或(您自行選擇的)任"
+"一日後發行的版本。\n"
+
+#: ../shell/ev-window.c:4567
+msgid ""
+"Evince 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.\n"
+msgstr ""
+"Evince 係基於使用目的而加以散佈,然而不負任何擔保責任;亦無對適售性或特定目的"
+"適用性所為的默示性擔保。詳情請參照 GNU 通用公共授權。\n"
+
+#: ../shell/ev-window.c:4571
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Evince; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+msgstr ""
+"您應該已經和 Evince 程式一起收到一份 GNU 通用公共許可證的副本。如果還沒有,寫"
+"信給: the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, "
+"Boston, MA 02110-1301 USA\n"
+
+#: ../shell/ev-window.c:4596
+msgid "Evince"
+msgstr "Evince"
+
+#: ../shell/ev-window.c:4599
+msgid "© 1996–2009 The Evince authors"
+msgstr "© 1996-2009 Evince 作者群"
+
+#: ../shell/ev-window.c:4605
+msgid "translator-credits"
+msgstr ""
+"如對翻譯有任何意見,請送一封電子郵件給\n"
+"以下地址,MATE 翻譯團隊會儘快回覆您:\n"
+"\n"
+"Woodman Tuen <[email protected]>, 2006-07\n"
+"趙惟倫 <[email protected]>, 2005\n"
+"Abel Cheung <[email protected]>, 2005\n"
+"Funda Wang <[email protected]>, 2004"
+
+#. TRANS: Sometimes this could be better translated as
+#. "%d hit(s) on this page". Therefore this string
+#. contains plural cases.
+#: ../shell/ev-window.c:4871
+#, c-format
+msgid "%d found on this page"
+msgid_plural "%d found on this page"
+msgstr[0] "本頁找到 %d 處"
+
+#: ../shell/ev-window.c:4876
+msgid "Not found"
+msgstr "找不到"
+
+#: ../shell/ev-window.c:4882
+#, c-format
+msgid "%3d%% remaining to search"
+msgstr "還有 %3d%% 尚待搜尋"
+
+#: ../shell/ev-window.c:5395
+msgid "_File"
+msgstr "檔案(_F)"
+
+#: ../shell/ev-window.c:5396
+msgid "_Edit"
+msgstr "編輯(_E)"
+
+#: ../shell/ev-window.c:5397
+msgid "_View"
+msgstr "檢視(_V)"
+
+#: ../shell/ev-window.c:5398
+msgid "_Go"
+msgstr "前往(_G)"
+
+#: ../shell/ev-window.c:5399
+msgid "_Help"
+msgstr "求助(_H)"
+
+#. File menu
+#: ../shell/ev-window.c:5402 ../shell/ev-window.c:5703
+msgid "_Open…"
+msgstr "開啟(_O)…"
+
+#: ../shell/ev-window.c:5403 ../shell/ev-window.c:5704
+msgid "Open an existing document"
+msgstr "開啟現存文件"
+
+#: ../shell/ev-window.c:5405
+msgid "Op_en a Copy"
+msgstr "開啟副本(_E)"
+
+#: ../shell/ev-window.c:5406
+msgid "Open a copy of the current document in a new window"
+msgstr "在新的視窗開啟目前文件的副本"
+
+#: ../shell/ev-window.c:5408
+msgid "_Save a Copy…"
+msgstr "儲存副本(_S)…"
+
+#: ../shell/ev-window.c:5409
+msgid "Save a copy of the current document"
+msgstr "儲存一個目前文件的副本"
+
+#: ../shell/ev-window.c:5411
+msgid "_Print…"
+msgstr "列印(_P)…"
+
+#: ../shell/ev-window.c:5414
+msgid "P_roperties"
+msgstr "屬性(_R)"
+
+#: ../shell/ev-window.c:5422
+msgid "Select _All"
+msgstr "全部選取(_A)"
+
+#: ../shell/ev-window.c:5424
+msgid "_Find…"
+msgstr "尋找(_F)…"
+
+#: ../shell/ev-window.c:5425
+msgid "Find a word or phrase in the document"
+msgstr "在文件中尋找字詞"
+
+#: ../shell/ev-window.c:5431
+msgid "T_oolbar"
+msgstr "工具列(_O)"
+
+#: ../shell/ev-window.c:5433
+msgid "Rotate _Left"
+msgstr "向左旋轉(_L)"
+
+#: ../shell/ev-window.c:5435
+msgid "Rotate _Right"
+msgstr "向右旋轉(_R)"
+
+#: ../shell/ev-window.c:5437
+msgid "Save Current Settings as _Default"
+msgstr "將目前的設定值儲存為預設值(_D)"
+
+#: ../shell/ev-window.c:5448
+msgid "_Reload"
+msgstr "重新載入(_R)"
+
+#: ../shell/ev-window.c:5449
+msgid "Reload the document"
+msgstr "重新載入文件"
+
+#: ../shell/ev-window.c:5452
+msgid "Auto_scroll"
+msgstr "自動捲動(_S)"
+
+#: ../shell/ev-window.c:5462
+msgid "_First Page"
+msgstr "第一頁(_F)"
+
+#: ../shell/ev-window.c:5463
+msgid "Go to the first page"
+msgstr "回到第一頁"
+
+#: ../shell/ev-window.c:5465
+msgid "_Last Page"
+msgstr "最後一頁(_L)"
+
+#: ../shell/ev-window.c:5466
+msgid "Go to the last page"
+msgstr "前往最後一頁"
+
+#. Help menu
+#: ../shell/ev-window.c:5470
+msgid "_Contents"
+msgstr "內容(_C)"
+
+#: ../shell/ev-window.c:5473
+msgid "_About"
+msgstr "關於(_A)"
+
+#. Toolbar-only
+#: ../shell/ev-window.c:5477
+msgid "Leave Fullscreen"
+msgstr "離開全螢幕"
+
+#: ../shell/ev-window.c:5478
+msgid "Leave fullscreen mode"
+msgstr "離開全螢幕模式"
+
+#: ../shell/ev-window.c:5480
+msgid "Start Presentation"
+msgstr "開始簡報"
+
+#: ../shell/ev-window.c:5481
+msgid "Start a presentation"
+msgstr "簡報式顯示"
+
+#. View Menu
+#: ../shell/ev-window.c:5540
+msgid "_Toolbar"
+msgstr "工具列(_T)"
+
+#: ../shell/ev-window.c:5541
+msgid "Show or hide the toolbar"
+msgstr "顯示或隱藏工具列"
+
+#: ../shell/ev-window.c:5543
+msgid "Side _Pane"
+msgstr "側邊窗格(_P)"
+
+#: ../shell/ev-window.c:5544
+msgid "Show or hide the side pane"
+msgstr "顯示或隱藏側面窗格"
+
+#: ../shell/ev-window.c:5546
+msgid "_Continuous"
+msgstr "連續(_C)"
+
+#: ../shell/ev-window.c:5547
+msgid "Show the entire document"
+msgstr "顯示整份文件"
+
+#: ../shell/ev-window.c:5549
+msgid "_Dual"
+msgstr "兩頁(_D)"
+
+#: ../shell/ev-window.c:5550
+msgid "Show two pages at once"
+msgstr "一次顯示兩頁"
+
+#: ../shell/ev-window.c:5552
+msgid "_Fullscreen"
+msgstr "全螢幕(_F)"
+
+#: ../shell/ev-window.c:5553
+msgid "Expand the window to fill the screen"
+msgstr "將視窗展開為全螢幕"
+
+#: ../shell/ev-window.c:5555
+msgid "Pre_sentation"
+msgstr "簡報(_S)"
+
+#: ../shell/ev-window.c:5556
+msgid "Run document as a presentation"
+msgstr "如同簡報般執行文件"
+
+#: ../shell/ev-window.c:5564
+msgid "_Inverted Colors"
+msgstr "反轉顏色(_I)"
+
+#: ../shell/ev-window.c:5565
+msgid "Show page contents with the colors inverted"
+msgstr "以顏色反轉的方式顯示頁面內容"
+
+#. Links
+#: ../shell/ev-window.c:5573
+msgid "_Open Link"
+msgstr "開啟連結(_O)"
+
+#: ../shell/ev-window.c:5575
+msgid "_Go To"
+msgstr "移至(_G)"
+
+#: ../shell/ev-window.c:5577
+msgid "Open in New _Window"
+msgstr "在新的視窗中開啟(_W)"
+
+#: ../shell/ev-window.c:5579
+msgid "_Copy Link Address"
+msgstr "複製連結位址(_C)"
+
+#: ../shell/ev-window.c:5581
+msgid "_Save Image As…"
+msgstr "另存圖片(_S)…"
+
+#: ../shell/ev-window.c:5583
+msgid "Copy _Image"
+msgstr "複製圖片(_I)"
+
+#: ../shell/ev-window.c:5585
+msgid "Annotation Properties…"
+msgstr "註解屬性…"
+
+#: ../shell/ev-window.c:5590
+msgid "_Open Attachment"
+msgstr "開啟附件(_O)"
+
+#: ../shell/ev-window.c:5592
+msgid "_Save Attachment As…"
+msgstr "另存附件為(_S)…"
+
+#: ../shell/ev-window.c:5677
+msgid "Zoom"
+msgstr "縮放"
+
+#: ../shell/ev-window.c:5679
+msgid "Adjust the zoom level"
+msgstr "調整縮放等級"
+
+#: ../shell/ev-window.c:5689
+msgid "Navigation"
+msgstr "導航"
+
+#: ../shell/ev-window.c:5691
+msgid "Back"
+msgstr "後退"
+
+#. translators: this is the history action
+#: ../shell/ev-window.c:5694
+msgid "Move across visited pages"
+msgstr "在已閱讀的頁面間移動"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5724
+msgid "Previous"
+msgstr "上一頁"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5729
+msgid "Next"
+msgstr "下一頁"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5733
+msgid "Zoom In"
+msgstr "拉近"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5737
+msgid "Zoom Out"
+msgstr "拉遠"
+
+#. translators: this is the label for toolbar button
+#: ../shell/ev-window.c:5745
+msgid "Fit Width"
+msgstr "符合頁寬"
+
+#: ../shell/ev-window.c:5890 ../shell/ev-window.c:5907
+msgid "Unable to launch external application."
+msgstr "無法啟動外部應用程式。"
+
+#: ../shell/ev-window.c:5964
+msgid "Unable to open external link"
+msgstr "無法開啟外部連結"
+
+#: ../shell/ev-window.c:6131
+msgid "Couldn't find appropriate format to save image"
+msgstr "找不到合適的格式來儲存圖片"
+
+#: ../shell/ev-window.c:6173
+msgid "The image could not be saved."
+msgstr "圖片無法儲存。"
+
+#: ../shell/ev-window.c:6205
+msgid "Save Image"
+msgstr "儲存圖片"
+
+#: ../shell/ev-window.c:6333
+msgid "Unable to open attachment"
+msgstr "無法開啟附件"
+
+#: ../shell/ev-window.c:6386
+msgid "The attachment could not be saved."
+msgstr "附件無法儲存。"
+
+#: ../shell/ev-window.c:6431
+msgid "Save Attachment"
+msgstr "儲存附件"
+
+#: ../shell/ev-window-title.c:162
+#, c-format
+msgid "%s — Password Required"
+msgstr "%s — 需要密碼"
+
+#: ../shell/ev-utils.c:318
+msgid "By extension"
+msgstr "依延伸檔名"
+
+#: ../shell/main.c:69 ../shell/main.c:274
+msgid "MATE Document Viewer"
+msgstr "MATE 文件檢視器"
+
+#: ../shell/main.c:77
+msgid "The page label of the document to display."
+msgstr "要顯示的文件頁面標籤。"
+
+#: ../shell/main.c:77
+msgid "PAGE"
+msgstr "頁次"
+
+#: ../shell/main.c:78
+msgid "The page number of the document to display."
+msgstr "要顯示的文件頁碼。"
+
+#: ../shell/main.c:78
+msgid "NUMBER"
+msgstr "編號"
+
+#: ../shell/main.c:79
+msgid "Run evince in fullscreen mode"
+msgstr "以全螢幕模式執行 evince"
+
+#: ../shell/main.c:80
+msgid "Run evince in presentation mode"
+msgstr "以簡報模式執行 evince"
+
+#: ../shell/main.c:81
+msgid "Run evince as a previewer"
+msgstr "以 evince 作為預覽程式"
+
+#: ../shell/main.c:82
+msgid "The word or phrase to find in the document"
+msgstr "要在文件中尋找的字或詞"
+
+#: ../shell/main.c:82
+msgid "STRING"
+msgstr "字串"
+
+#: ../shell/main.c:86
+msgid "[FILE…]"
+msgstr "[檔案...]"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:1
+msgid ""
+"Boolean options available: true enables thumbnailing and false disables the "
+"creation of new thumbnails"
+msgstr "可用的布林選項:“true”會開啟縮圖功能,而“false”會停止建立新的縮圖"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:2
+msgid "Enable thumbnailing of PDF Documents"
+msgstr "啟動 PDF 文件的縮圖功能"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:3
+msgid "Thumbnail command for PDF Documents"
+msgstr "PDF 文件的縮圖命令"
+
+#: ../thumbnailer/evince-thumbnailer.schemas.in.h:4
+msgid ""
+"Valid command plus arguments for the PDF Document thumbnailer. See Caja "
+"thumbnailer documentation for more information."
+msgstr ""
+"正確的指令加上代表 PDF 文件縮圖的引數。請參見 Caja 縮圖文件以得到更多資"
+"訊。"
+
+#~ msgid "Page Set_up…"
+#~ msgstr "頁面設定(_U)…"
+
+#~ msgid "Set up the page settings for printing"
+#~ msgstr "設定列印用的頁面設定"
+
+#~ msgid "DJVU document has incorrect format"
+#~ msgstr "DJVU 文件有不正確的格式"
+
+#~ msgid "Failed to create file “%s”: %s"
+#~ msgstr "無法建立檔案“%s”:%s"
+
+#~ msgid "Search string"
+#~ msgstr "搜尋字串"
+
+#~ msgid "The name of the string to be found"
+#~ msgstr "欲搜尋的字串名稱"
+
+#~ msgid "Case sensitive"
+#~ msgstr "區分大小寫"
+
+#~ msgid "TRUE for a case sensitive search"
+#~ msgstr "TRUE 代表區分大小寫的搜尋"
+
+#~ msgid "Highlight color"
+#~ msgstr "標示顏色"
+
+#~ msgid "Color of highlight for all matches"
+#~ msgstr "用來標示所有符合字串的顏色"
+
+#~ msgid "Current color"
+#~ msgstr "目前的顏色"
+
+#~ msgid "Color of highlight for the current match"
+#~ msgstr "用來標示目前符合字串的顏色"
+
+#~ msgid "Recover previous documents?"
+#~ msgstr "是否復原前一份文件?"
+
+#~ msgid ""
+#~ "Evince appears to have exited unexpectedly the last time it was run. You "
+#~ "can recover the opened documents."
+#~ msgstr "Evince 在上次執行時似乎突然關閉了。您可以復原已開啟的文件。"
+
+#~ msgid "_Don't Recover"
+#~ msgstr "不要復原(_D)"
+
+#~ msgid "_Recover"
+#~ msgstr "復原(_R)"
+
+#~ msgid "Crash Recovery"
+#~ msgstr "當機後復原"
+
+#~ msgid "Print..."
+#~ msgstr "列印..."
+
+#~ msgid "Couldn't create symlink “%s”: "
+#~ msgstr "無法建立符號連結「%s」:"
+
+#~ msgid "Cannot open a copy."
+#~ msgstr "無法開啟副本。"
+
+#~ msgid "_Save a Copy..."
+#~ msgstr "儲存副本(_S)..."
+
+#~ msgid "_Print..."
+#~ msgstr "列印(_P)..."
+
+#~ msgid "_Find..."
+#~ msgstr "尋找(_F)..."
+
+#~ msgid "Co_nnect"
+#~ msgstr "連線(_N)"
+
+#~ msgid "Connect _anonymously"
+#~ msgstr "匿名連線(_A)"
+
+#~ msgid "Connect as u_ser:"
+#~ msgstr "以使用者連線(_S):"
+
+#~ msgid "_Username:"
+#~ msgstr "使用者名稱(_U):"
+
+#~ msgid "_Domain:"
+#~ msgstr "網域(_D):"
+
+#~ msgid "_Forget password immediately"
+#~ msgstr "立刻忘掉密碼(_F) "
+
+#~ msgid "_Remember password until you logout"
+#~ msgstr "在您登出前記住密碼(_R)"
+
+#~ msgid "_Remember forever"
+#~ msgstr "永遠記住(_R)"
+
+#~ msgid "File not available"
+#~ msgstr "檔案不存在"
+
+#~ msgid "Remote files aren't supported"
+#~ msgstr "不支援遠端檔案"
+
+#~ msgid "Find Previous"
+#~ msgstr "找上一個"
+
+#~ msgid "Find Next"
+#~ msgstr "找下一個"
+
+#~ msgid "Password Entry"
+#~ msgstr "密碼輸入欄"
+
+#~ msgid "Remember password for this session"
+#~ msgstr "在此作業階段中記住密碼"
+
+#~ msgid "Save password in keyring"
+#~ msgstr "儲存密碼於鑰匙圈程式中"
+
+#~ msgid "<b>Title:</b>"
+#~ msgstr "<b>標題:</b>"
+
+#~ msgid "%.2f x %.2f in"
+#~ msgstr "%.2f x %.2f 寸"
+
+#~ msgid "Incorrect password"
+#~ msgstr "密碼不正確"
+
+#~ msgid "Evince Document Viewer"
+#~ msgstr "Evince 文件檢視器"
+
+#~ msgid "BBox"
+#~ msgstr "BBox"
+
+#~ msgid "Letter"
+#~ msgstr "Letter"
+
+#~ msgid "Tabloid"
+#~ msgstr "Tabloid"
+
+#~ msgid "Ledger"
+#~ msgstr "Ledger"
+
+#~ msgid "Legal"
+#~ msgstr "Legal"
+
+#~ msgid "Statement"
+#~ msgstr "陳述"
+
+#~ msgid "Executive"
+#~ msgstr "Executive"
+
+#~ msgid "A0"
+#~ msgstr "A0"
+
+#~ msgid "A1"
+#~ msgstr "A1"
+
+#~ msgid "A2"
+#~ msgstr "A2"
+
+#~ msgid "A3"
+#~ msgstr "A3"
+
+#~ msgid "A4"
+#~ msgstr "A4"
+
+#~ msgid "A5"
+#~ msgstr "A5"
+
+#~ msgid "B4"
+#~ msgstr "B4"
+
+#~ msgid "B5"
+#~ msgstr "B5"
+
+#~ msgid "Folio"
+#~ msgstr "Folio"
+
+#~ msgid "Quarto"
+#~ msgstr "Quarto"
+
+#~ msgid "10x14"
+#~ msgstr "10x14"
+
+#~ msgid "Cannot open file “%s”."
+#~ msgstr "無法開啟檔案“%s”。"
+
+#~ msgid ""
+#~ "Failed to load document “%s”. Ghostscript interpreter was not found in "
+#~ "path"
+#~ msgstr "無法載入檔案“%s”。在路徑中找不到 Ghostscript 解譯器"
+
+#~ msgid "Encapsulated PostScript"
+#~ msgstr "Encapsulated PostScript"
+
+#~ msgid "PostScript"
+#~ msgstr "PostScript"
+
+#~ msgid "Interpreter failed."
+#~ msgstr "解譯程式失誤。"
+
+#~ msgid "Unhandled MIME type: “%s”"
+#~ msgstr "無法處理的 MIME 類型:“%s”"
+
+#~ msgid "Generating PDF is not supported"
+#~ msgstr "不支援產生 PDF 文件"
+
+#~ msgid ""
+#~ "You were trying to print to a printer using the “%s” driver. This program "
+#~ "requires a PostScript printer driver."
+#~ msgstr ""
+#~ "您剛剛試著利用“%s”印表機驅動程式,可是本程式需要 PostScript 印表機驅動程"
+#~ "式。"
+
+#~ msgid "Pages"
+#~ msgstr "頁數"
+
+#~ msgid "Images"
+#~ msgstr "圖片"
+
+#~ msgid "Open “%s”"
+#~ msgstr "開啟“%s”"
+
+#~ msgid "Empty"
+#~ msgstr "空的"
+
+#~ msgid "75%"
+#~ msgstr "75%"
+
+#~ msgid "No document loaded."
+#~ msgstr "沒有載入任何文件。"
+
+#~ msgid "Broken pipe."
+#~ msgstr "管線作業中斷"
+
+#~ msgid "Error while decompressing file “%s”:\n"
+#~ msgstr "檔案“%s”解壓縮時產生錯誤:\n"
+
+#~ msgid "File is not readable."
+#~ msgstr "檔案為不可讀。"
+
+#~ msgid "Document loaded."
+#~ msgstr "文件已載入。"
diff --git a/previewer/Makefile.am b/previewer/Makefile.am
new file mode 100644
index 00000000..ab8f95d7
--- /dev/null
+++ b/previewer/Makefile.am
@@ -0,0 +1,37 @@
+
+bin_PROGRAMS = evince-previewer
+
+evince_previewer_SOURCES = \
+ ev-previewer.c \
+ ev-previewer-window.h \
+ ev-previewer-window.c
+
+evince_previewer_CPPFLAGS = \
+ -DEVINCEDATADIR=\"$(pkgdatadir)\" \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/libdocument \
+ -I$(top_srcdir)/libview \
+ -I$(top_srcdir)/libmisc \
+ $(AM_CPPFLAGS)
+
+evince_previewer_CFLAGS = \
+ $(PREVIEWER_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED) \
+ $(AM_CFLAGS)
+
+evince_previewer_LDFLAGS = $(AM_LDFLAGS)
+
+if PLATFORM_WIN32
+evince_previewer_LDFLAGS += -mwindows
+endif
+
+evince_previewer_LDADD = \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(top_builddir)/libview/libevview.la \
+ $(top_builddir)/libmisc/libevmisc.la \
+ $(PREVIEWER_LIBS)
+
+
+-include $(top_srcdir)/git.mk
diff --git a/previewer/ev-previewer-window.c b/previewer/ev-previewer-window.c
new file mode 100644
index 00000000..bfef10dc
--- /dev/null
+++ b/previewer/ev-previewer-window.c
@@ -0,0 +1,723 @@
+/* ev-previewer-window.c:
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#if GTKUNIXPRINT_ENABLED
+#include <gtk/gtkunixprint.h>
+#endif
+#include <glib/gi18n.h>
+#include <evince-view.h>
+#include "ev-page-action.h"
+
+#include "ev-previewer-window.h"
+
+struct _EvPreviewerWindow {
+ GtkWindow base_instance;
+
+ EvDocumentModel *model;
+ EvDocument *document;
+
+ GtkActionGroup *action_group;
+ GtkActionGroup *accels_group;
+ GtkUIManager *ui_manager;
+
+ GtkWidget *swindow;
+ EvView *view;
+ gdouble dpi;
+
+ /* Printing */
+ GtkPrintSettings *print_settings;
+ GtkPageSetup *print_page_setup;
+#if GTKUNIXPRINT_ENABLED
+ GtkPrinter *printer;
+#endif
+ gchar *print_job_title;
+ gchar *source_file;
+};
+
+struct _EvPreviewerWindowClass {
+ GtkWindowClass base_class;
+};
+
+enum {
+ PROP_0,
+ PROP_MODEL
+};
+
+#define MIN_SCALE 0.05409
+#define MAX_SCALE 4.0
+
+G_DEFINE_TYPE (EvPreviewerWindow, ev_previewer_window, GTK_TYPE_WINDOW)
+
+static gdouble
+get_screen_dpi (EvPreviewerWindow *window)
+{
+ GdkScreen *screen;
+
+ screen = gtk_window_get_screen (GTK_WINDOW (window));
+ return ev_document_misc_get_screen_dpi (screen);
+}
+
+#if GTKUNIXPRINT_ENABLED
+static void
+ev_previewer_window_error_dialog_run (EvPreviewerWindow *window,
+ GError *error)
+{
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+ GTK_DIALOG_MODAL |
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "%s", _("Failed to print document"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ "%s", error->message);
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+}
+#endif
+
+static void
+ev_previewer_window_close (GtkAction *action,
+ EvPreviewerWindow *window)
+{
+ gtk_widget_destroy (GTK_WIDGET (window));
+}
+
+static void
+ev_previewer_window_previous_page (GtkAction *action,
+ EvPreviewerWindow *window)
+{
+ ev_view_previous_page (window->view);
+}
+
+static void
+ev_previewer_window_next_page (GtkAction *action,
+ EvPreviewerWindow *window)
+{
+ ev_view_next_page (window->view);
+}
+
+static void
+ev_previewer_window_zoom_in (GtkAction *action,
+ EvPreviewerWindow *window)
+{
+ ev_document_model_set_sizing_mode (window->model, EV_SIZING_FREE);
+ ev_view_zoom_in (window->view);
+}
+
+static void
+ev_previewer_window_zoom_out (GtkAction *action,
+ EvPreviewerWindow *window)
+{
+ ev_document_model_set_sizing_mode (window->model, EV_SIZING_FREE);
+ ev_view_zoom_out (window->view);
+}
+
+static void
+ev_previewer_window_zoom_best_fit (GtkToggleAction *action,
+ EvPreviewerWindow *window)
+{
+ ev_document_model_set_sizing_mode (window->model,
+ gtk_toggle_action_get_active (action) ?
+ EV_SIZING_BEST_FIT : EV_SIZING_FREE);
+}
+
+static void
+ev_previewer_window_zoom_page_width (GtkToggleAction *action,
+ EvPreviewerWindow *window)
+{
+ ev_document_model_set_sizing_mode (window->model,
+ gtk_toggle_action_get_active (action) ?
+ EV_SIZING_FIT_WIDTH : EV_SIZING_FREE);
+}
+
+static void
+ev_previewer_window_action_page_activated (GtkAction *action,
+ EvLink *link,
+ EvPreviewerWindow *window)
+{
+ ev_view_handle_link (window->view, link);
+ gtk_widget_grab_focus (GTK_WIDGET (window->view));
+}
+
+static void
+ev_previewer_window_focus_page_selector (GtkAction *action,
+ EvPreviewerWindow *window)
+{
+ GtkAction *page_action;
+
+ page_action = gtk_action_group_get_action (window->action_group,
+ "PageSelector");
+ ev_page_action_grab_focus (EV_PAGE_ACTION (page_action));
+}
+
+static void
+ev_previewer_window_scroll_forward (GtkAction *action,
+ EvPreviewerWindow *window)
+{
+ ev_view_scroll (window->view, GTK_SCROLL_PAGE_FORWARD, FALSE);
+}
+
+static void
+ev_previewer_window_scroll_backward (GtkAction *action,
+ EvPreviewerWindow *window)
+{
+ ev_view_scroll (window->view, GTK_SCROLL_PAGE_BACKWARD, FALSE);
+}
+
+#if GTKUNIXPRINT_ENABLED
+static void
+ev_previewer_window_print_finished (GtkPrintJob *print_job,
+ EvPreviewerWindow *window,
+ GError *error)
+{
+ if (error) {
+ ev_previewer_window_error_dialog_run (window, error);
+ }
+
+ g_object_unref (print_job);
+ gtk_widget_destroy (GTK_WIDGET (window));
+}
+
+static void
+ev_previewer_window_do_print (EvPreviewerWindow *window)
+{
+ GtkPrintJob *job;
+ GError *error = NULL;
+
+ job = gtk_print_job_new (window->print_job_title ?
+ window->print_job_title :
+ window->source_file,
+ window->printer,
+ window->print_settings,
+ window->print_page_setup);
+ if (gtk_print_job_set_source_file (job, window->source_file, &error)) {
+ gtk_print_job_send (job,
+ (GtkPrintJobCompleteFunc)ev_previewer_window_print_finished,
+ window, NULL);
+ } else {
+ ev_previewer_window_error_dialog_run (window, error);
+ g_error_free (error);
+ }
+
+ gtk_widget_hide (GTK_WIDGET (window));
+}
+
+static void
+ev_previewer_window_enumerate_finished (EvPreviewerWindow *window)
+{
+ if (window->printer) {
+ ev_previewer_window_do_print (window);
+ } else {
+ GError *error = NULL;
+
+ g_set_error (&error,
+ GTK_PRINT_ERROR,
+ GTK_PRINT_ERROR_GENERAL,
+ _("The selected printer '%s' could not be found"),
+ gtk_print_settings_get_printer (window->print_settings));
+
+ ev_previewer_window_error_dialog_run (window, error);
+ g_error_free (error);
+ }
+}
+
+static gboolean
+ev_previewer_window_enumerate_printers (GtkPrinter *printer,
+ EvPreviewerWindow *window)
+{
+ const gchar *printer_name;
+
+ printer_name = gtk_print_settings_get_printer (window->print_settings);
+ if ((printer_name
+ && strcmp (printer_name, gtk_printer_get_name (printer)) == 0) ||
+ (!printer_name && gtk_printer_is_default (printer))) {
+ if (window->printer)
+ g_object_unref (window->printer);
+ window->printer = g_object_ref (printer);
+
+ return TRUE; /* we're done */
+ }
+
+ return FALSE; /* continue the enumeration */
+}
+
+static void
+ev_previewer_window_print (GtkAction *action,
+ EvPreviewerWindow *window)
+{
+ if (!window->print_settings)
+ window->print_settings = gtk_print_settings_new ();
+ if (!window->print_page_setup)
+ window->print_page_setup = gtk_page_setup_new ();
+ gtk_enumerate_printers ((GtkPrinterFunc)ev_previewer_window_enumerate_printers,
+ window,
+ (GDestroyNotify)ev_previewer_window_enumerate_finished,
+ FALSE);
+}
+#endif
+
+static const GtkActionEntry action_entries[] = {
+ { "FileCloseWindow", GTK_STOCK_CLOSE, NULL, "<control>W",
+ NULL,
+ G_CALLBACK (ev_previewer_window_close) },
+ { "GoPreviousPage", GTK_STOCK_GO_UP, N_("_Previous Page"), "<control>Page_Up",
+ N_("Go to the previous page"),
+ G_CALLBACK (ev_previewer_window_previous_page) },
+ { "GoNextPage", GTK_STOCK_GO_DOWN, N_("_Next Page"), "<control>Page_Down",
+ N_("Go to the next page"),
+ G_CALLBACK (ev_previewer_window_next_page) },
+ { "ViewZoomIn", GTK_STOCK_ZOOM_IN, NULL, "<control>plus",
+ N_("Enlarge the document"),
+ G_CALLBACK (ev_previewer_window_zoom_in) },
+ { "ViewZoomOut", GTK_STOCK_ZOOM_OUT, NULL, "<control>minus",
+ N_("Shrink the document"),
+ G_CALLBACK (ev_previewer_window_zoom_out) },
+#if GTKUNIXPRINT_ENABLED
+ { "PreviewPrint", GTK_STOCK_PRINT, N_("Print"), NULL,
+ N_("Print this document"),
+ G_CALLBACK (ev_previewer_window_print) }
+#endif
+};
+
+static const GtkActionEntry accel_entries[] = {
+ { "Space", NULL, "", "space", NULL,
+ G_CALLBACK (ev_previewer_window_scroll_forward) },
+ { "ShiftSpace", NULL, "", "<shift>space", NULL,
+ G_CALLBACK (ev_previewer_window_scroll_backward) },
+ { "BackSpace", NULL, "", "BackSpace", NULL,
+ G_CALLBACK (ev_previewer_window_scroll_backward) },
+ { "ShiftBackSpace", NULL, "", "<shift>BackSpace", NULL,
+ G_CALLBACK (ev_previewer_window_scroll_forward) },
+ { "Return", NULL, "", "Return", NULL,
+ G_CALLBACK (ev_previewer_window_scroll_forward) },
+ { "ShiftReturn", NULL, "", "<shift>Return", NULL,
+ G_CALLBACK (ev_previewer_window_scroll_backward) },
+ { "p", GTK_STOCK_GO_UP, "", "p", NULL,
+ G_CALLBACK (ev_previewer_window_previous_page) },
+ { "n", GTK_STOCK_GO_DOWN, "", "n", NULL,
+ G_CALLBACK (ev_previewer_window_next_page) },
+ { "Plus", GTK_STOCK_ZOOM_IN, NULL, "plus", NULL,
+ G_CALLBACK (ev_previewer_window_zoom_in) },
+ { "CtrlEqual", GTK_STOCK_ZOOM_IN, NULL, "<control>equal", NULL,
+ G_CALLBACK (ev_previewer_window_zoom_in) },
+ { "Equal", GTK_STOCK_ZOOM_IN, NULL, "equal", NULL,
+ G_CALLBACK (ev_previewer_window_zoom_in) },
+ { "Minus", GTK_STOCK_ZOOM_OUT, NULL, "minus", NULL,
+ G_CALLBACK (ev_previewer_window_zoom_out) },
+ { "KpPlus", GTK_STOCK_ZOOM_IN, NULL, "KP_Add", NULL,
+ G_CALLBACK (ev_previewer_window_zoom_in) },
+ { "KpMinus", GTK_STOCK_ZOOM_OUT, NULL, "KP_Subtract", NULL,
+ G_CALLBACK (ev_previewer_window_zoom_out) },
+ { "CtrlKpPlus", GTK_STOCK_ZOOM_IN, NULL, "<control>KP_Add", NULL,
+ G_CALLBACK (ev_previewer_window_zoom_in) },
+ { "CtrlKpMinus", GTK_STOCK_ZOOM_OUT, NULL, "<control>KP_Subtract", NULL,
+ G_CALLBACK (ev_previewer_window_zoom_out) },
+ { "FocusPageSelector", NULL, "", "<control>l", NULL,
+ G_CALLBACK (ev_previewer_window_focus_page_selector) }
+
+};
+
+static const GtkToggleActionEntry toggle_action_entries[] = {
+ { "ViewBestFit", EV_STOCK_ZOOM_PAGE, N_("_Best Fit"), NULL,
+ N_("Make the current document fill the window"),
+ G_CALLBACK (ev_previewer_window_zoom_best_fit) },
+ { "ViewPageWidth", EV_STOCK_ZOOM_WIDTH, N_("Fit Page _Width"), NULL,
+ N_("Make the current document fill the window width"),
+ G_CALLBACK (ev_previewer_window_zoom_page_width) }
+};
+
+static gboolean
+view_focus_changed (GtkWidget *widget,
+ GdkEventFocus *event,
+ EvPreviewerWindow *window)
+{
+ if (window->accels_group)
+ gtk_action_group_set_sensitive (window->accels_group, event->in);
+
+ return FALSE;
+}
+
+static void
+view_sizing_mode_changed (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvPreviewerWindow *window)
+{
+ EvSizingMode sizing_mode = ev_document_model_get_sizing_mode (model);
+ GtkAction *action;
+
+ action = gtk_action_group_get_action (window->action_group, "ViewBestFit");
+ g_signal_handlers_block_by_func (action,
+ G_CALLBACK (ev_previewer_window_zoom_best_fit),
+ window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ sizing_mode == EV_SIZING_BEST_FIT);
+ g_signal_handlers_unblock_by_func (action,
+ G_CALLBACK (ev_previewer_window_zoom_best_fit),
+ window);
+
+ action = gtk_action_group_get_action (window->action_group, "ViewPageWidth");
+ g_signal_handlers_block_by_func (action,
+ G_CALLBACK (ev_previewer_window_zoom_page_width),
+ window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ sizing_mode == EV_SIZING_FIT_WIDTH);
+ g_signal_handlers_unblock_by_func (action,
+ G_CALLBACK (ev_previewer_window_zoom_page_width),
+ window);
+}
+
+static void
+ev_previewer_window_set_document (EvPreviewerWindow *window,
+ GParamSpec *pspec,
+ EvDocumentModel *model)
+{
+ EvDocument *document = ev_document_model_get_document (model);
+
+ window->document = g_object_ref (document);
+
+ g_signal_connect (model, "notify::sizing-mode",
+ G_CALLBACK (view_sizing_mode_changed),
+ window);
+ ev_view_set_loading (window->view, FALSE);
+ gtk_action_group_set_sensitive (window->action_group, TRUE);
+ gtk_action_group_set_sensitive (window->accels_group, TRUE);
+}
+
+static void
+ev_previewer_window_connect_action_accelerators (EvPreviewerWindow *window)
+{
+ GList *actions;
+
+ gtk_ui_manager_ensure_update (window->ui_manager);
+
+ actions = gtk_action_group_list_actions (window->action_group);
+ g_list_foreach (actions, (GFunc)gtk_action_connect_accelerator, NULL);
+ g_list_free (actions);
+}
+
+static void
+ev_previewer_window_dispose (GObject *object)
+{
+ EvPreviewerWindow *window = EV_PREVIEWER_WINDOW (object);
+
+ if (window->model) {
+ g_object_unref (window->model);
+ window->model = NULL;
+ }
+
+ if (window->document) {
+ g_object_unref (window->document);
+ window->document = NULL;
+ }
+
+ if (window->action_group) {
+ g_object_unref (window->action_group);
+ window->action_group = NULL;
+ }
+
+ if (window->accels_group) {
+ g_object_unref (window->accels_group);
+ window->accels_group = NULL;
+ }
+
+ if (window->ui_manager) {
+ g_object_unref (window->ui_manager);
+ window->ui_manager = NULL;
+ }
+
+ if (window->print_settings) {
+ g_object_unref (window->print_settings);
+ window->print_settings = NULL;
+ }
+
+ if (window->print_page_setup) {
+ g_object_unref (window->print_page_setup);
+ window->print_page_setup = NULL;
+ }
+
+#if GTKUNIXPRINT_ENABLED
+ if (window->printer) {
+ g_object_unref (window->printer);
+ window->printer = NULL;
+ }
+#endif
+
+ if (window->print_job_title) {
+ g_free (window->print_job_title);
+ window->print_job_title = NULL;
+ }
+
+ if (window->source_file) {
+ g_free (window->source_file);
+ window->source_file = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_previewer_window_parent_class)->dispose (object);
+}
+
+static gchar*
+data_dir (void)
+{
+ gchar *datadir;
+#ifdef G_OS_WIN32
+ gchar *dir;
+
+ dir = g_win32_get_package_installation_directory_of_module (NULL);
+ datadir = g_build_filename (dir, "share", "evince", NULL);
+ g_free (dir);
+#else
+ datadir = g_strdup (EVINCEDATADIR);
+#endif
+
+ return datadir;
+}
+
+static void
+ev_previewer_window_init (EvPreviewerWindow *window)
+{
+ gtk_window_set_default_size (GTK_WINDOW (window), 600, 600);
+}
+
+static void
+ev_previewer_window_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvPreviewerWindow *window = EV_PREVIEWER_WINDOW (object);
+
+ switch (prop_id) {
+ case PROP_MODEL:
+ window->model = g_value_dup_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static GObject *
+ev_previewer_window_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ EvPreviewerWindow *window;
+ GtkWidget *vbox;
+ GtkWidget *toolbar;
+ GtkAction *action;
+ GError *error = NULL;
+ gchar *datadir, *ui_path;
+ gdouble dpi;
+
+ object = G_OBJECT_CLASS (ev_previewer_window_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_params);
+ window = EV_PREVIEWER_WINDOW (object);
+
+ dpi = get_screen_dpi (window);
+ ev_document_model_set_min_scale (window->model, MIN_SCALE * dpi / 72.0);
+ ev_document_model_set_max_scale (window->model, MAX_SCALE * dpi / 72.0);
+ ev_document_model_set_sizing_mode (window->model, EV_SIZING_FIT_WIDTH);
+ g_signal_connect_swapped (window->model, "notify::document",
+ G_CALLBACK (ev_previewer_window_set_document),
+ window);
+
+ window->action_group = gtk_action_group_new ("PreviewerActions");
+ gtk_action_group_set_translation_domain (window->action_group, NULL);
+ gtk_action_group_add_actions (window->action_group, action_entries,
+ G_N_ELEMENTS (action_entries),
+ window);
+ gtk_action_group_add_toggle_actions (window->action_group, toggle_action_entries,
+ G_N_ELEMENTS (toggle_action_entries),
+ window);
+ gtk_action_group_set_sensitive (window->action_group, FALSE);
+
+ action = g_object_new (EV_TYPE_PAGE_ACTION,
+ "name", "PageSelector",
+ "label", _("Page"),
+ "tooltip", _("Select Page"),
+ "icon_name", "text-x-generic",
+ "visible_overflown", FALSE,
+ NULL);
+ ev_page_action_set_model (EV_PAGE_ACTION (action), window->model);
+ g_signal_connect (action, "activate_link",
+ G_CALLBACK (ev_previewer_window_action_page_activated),
+ window);
+ gtk_action_group_add_action (window->action_group, action);
+ g_object_unref (action);
+
+ window->accels_group = gtk_action_group_new ("PreviewerAccelerators");
+ gtk_action_group_add_actions (window->accels_group, accel_entries,
+ G_N_ELEMENTS (accel_entries),
+ window);
+ gtk_action_group_set_sensitive (window->accels_group, FALSE);
+
+ window->ui_manager = gtk_ui_manager_new ();
+ gtk_ui_manager_insert_action_group (window->ui_manager,
+ window->action_group, 0);
+ gtk_ui_manager_insert_action_group (window->ui_manager,
+ window->accels_group, 1);
+ gtk_window_add_accel_group (GTK_WINDOW (window),
+ gtk_ui_manager_get_accel_group (window->ui_manager));
+ datadir = data_dir ();
+ ui_path = g_build_filename (datadir, "evince-previewer-ui.xml", NULL);
+ if (!gtk_ui_manager_add_ui_from_file (window->ui_manager, ui_path, &error)) {
+ g_warning ("Failed to load ui from evince-previewer-ui.xml: %s", error->message);
+ g_error_free (error);
+ }
+ g_free (ui_path);
+ g_free (datadir);
+
+ /* GTKUIManager connects actions accels only for menu items,
+ * but not for tool items. See bug #612972.
+ */
+ ev_previewer_window_connect_action_accelerators (window);
+
+ view_sizing_mode_changed (window->model, NULL, window);
+
+ vbox = gtk_vbox_new (FALSE, 0);
+
+ toolbar = gtk_ui_manager_get_widget (window->ui_manager, "/PreviewToolbar");
+ gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
+ gtk_widget_show (toolbar);
+
+ window->swindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (window->swindow),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ window->view = EV_VIEW (ev_view_new ());
+ g_signal_connect_object (window->view, "focus_in_event",
+ G_CALLBACK (view_focus_changed),
+ window, 0);
+ g_signal_connect_object (window->view, "focus_out_event",
+ G_CALLBACK (view_focus_changed),
+ window, 0);
+ ev_view_set_model (window->view, window->model);
+ ev_document_model_set_continuous (window->model, FALSE);
+ ev_view_set_loading (window->view, TRUE);
+
+ gtk_container_add (GTK_CONTAINER (window->swindow), GTK_WIDGET (window->view));
+ gtk_widget_show (GTK_WIDGET (window->view));
+
+ gtk_box_pack_start (GTK_BOX (vbox), window->swindow, TRUE, TRUE, 0);
+ gtk_widget_show (window->swindow);
+
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+ gtk_widget_show (vbox);
+
+ return object;
+}
+
+
+static void
+ev_previewer_window_class_init (EvPreviewerWindowClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->constructor = ev_previewer_window_constructor;
+ gobject_class->set_property = ev_previewer_window_set_property;
+ gobject_class->dispose = ev_previewer_window_dispose;
+
+ g_object_class_install_property (gobject_class,
+ PROP_MODEL,
+ g_param_spec_object ("model",
+ "Model",
+ "The document model",
+ EV_TYPE_DOCUMENT_MODEL,
+ G_PARAM_WRITABLE |
+ G_PARAM_CONSTRUCT_ONLY));
+}
+
+/* Public methods */
+GtkWidget *
+ev_previewer_window_new (EvDocumentModel *model)
+{
+ return GTK_WIDGET (g_object_new (EV_TYPE_PREVIEWER_WINDOW, "model", model, NULL));
+}
+
+void
+ev_previewer_window_set_print_settings (EvPreviewerWindow *window,
+ const gchar *print_settings)
+{
+ if (window->print_settings)
+ g_object_unref (window->print_settings);
+ if (window->print_page_setup)
+ g_object_unref (window->print_page_setup);
+ if (window->print_job_title)
+ g_free (window->print_job_title);
+
+ if (print_settings && g_file_test (print_settings, G_FILE_TEST_IS_REGULAR)) {
+ GKeyFile *key_file;
+ GError *error = NULL;
+
+ key_file = g_key_file_new ();
+ g_key_file_load_from_file (key_file,
+ print_settings,
+ G_KEY_FILE_KEEP_COMMENTS |
+ G_KEY_FILE_KEEP_TRANSLATIONS,
+ &error);
+ if (!error) {
+ GtkPrintSettings *psettings;
+ GtkPageSetup *psetup;
+ gchar *job_name;
+
+ psettings = gtk_print_settings_new_from_key_file (key_file,
+ "Print Settings",
+ NULL);
+ window->print_settings = psettings ? psettings : gtk_print_settings_new ();
+
+ psetup = gtk_page_setup_new_from_key_file (key_file,
+ "Page Setup",
+ NULL);
+ window->print_page_setup = psetup ? psetup : gtk_page_setup_new ();
+
+ job_name = g_key_file_get_string (key_file,
+ "Print Job", "title",
+ NULL);
+ if (job_name) {
+ window->print_job_title = job_name;
+ gtk_window_set_title (GTK_WINDOW (window), job_name);
+ }
+ } else {
+ window->print_settings = gtk_print_settings_new ();
+ window->print_page_setup = gtk_page_setup_new ();
+ g_error_free (error);
+ }
+
+ g_key_file_free (key_file);
+ } else {
+ window->print_settings = gtk_print_settings_new ();
+ window->print_page_setup = gtk_page_setup_new ();
+ }
+}
+
+void
+ev_previewer_window_set_source_file (EvPreviewerWindow *window,
+ const gchar *source_file)
+{
+ if (window->source_file)
+ g_free (window->source_file);
+ window->source_file = g_strdup (source_file);
+}
diff --git a/previewer/ev-previewer-window.h b/previewer/ev-previewer-window.h
new file mode 100644
index 00000000..483d0245
--- /dev/null
+++ b/previewer/ev-previewer-window.h
@@ -0,0 +1,51 @@
+/* ev-previewer-window.h:
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 EV_PREVIEWER_WINDOW_H
+#define EV_PREVIEWER_WINDOW_H
+
+#include <gtk/gtk.h>
+
+#include <evince-document.h>
+#include <evince-view.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_PREVIEWER_WINDOW (ev_previewer_window_get_type())
+#define EV_PREVIEWER_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_PREVIEWER_WINDOW, EvPreviewerWindow))
+#define EV_PREVIEWER_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_PREVIEWER_WINDOW, EvPreviewerWindowClass))
+#define EV_IS_PREVIEWER_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_PREVIEWER_WINDOW))
+#define EV_IS_PREVIEWER_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_PREVIEWER_WINDOW))
+#define EV_PREVIEWER_WINDOW_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_PREVIEWER_WINDOW, EvPreviewerWindowClass))
+
+typedef struct _EvPreviewerWindow EvPreviewerWindow;
+typedef struct _EvPreviewerWindowClass EvPreviewerWindowClass;
+
+GType ev_previewer_window_get_type (void) G_GNUC_CONST;
+GtkWidget *ev_previewer_window_new (EvDocumentModel *model);
+
+void ev_previewer_window_set_print_settings (EvPreviewerWindow *window,
+ const gchar *print_settings);
+void ev_previewer_window_set_source_file (EvPreviewerWindow *window,
+ const gchar *source_file);
+
+G_END_DECLS
+
+#endif /* EV_PREVIEWER_WINDOW_H */
diff --git a/previewer/ev-previewer.c b/previewer/ev-previewer.c
new file mode 100644
index 00000000..a836cf39
--- /dev/null
+++ b/previewer/ev-previewer.c
@@ -0,0 +1,205 @@
+/* ev-previewer.c:
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <evince-document.h>
+#include <evince-view.h>
+
+#include "ev-previewer-window.h"
+
+#ifdef G_OS_WIN32
+#include <io.h>
+#include <conio.h>
+#if !(_WIN32_WINNT >= 0x0500)
+#error "_WIN32_WINNT must be defined >= 0x0500"
+#endif
+#include <windows.h>
+#endif
+
+static gboolean unlink_temp_file = FALSE;
+static const gchar *print_settings;
+static const gchar **filenames;
+
+static const GOptionEntry goption_options[] = {
+ { "unlink-tempfile", 'u', 0, G_OPTION_ARG_NONE, &unlink_temp_file, N_("Delete the temporary file"), NULL },
+ { "print-settings", 'p', 0, G_OPTION_ARG_FILENAME, &print_settings, N_("Print settings file"), N_("FILE") },
+ { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &filenames, NULL, N_("FILE") },
+ { NULL }
+};
+
+static void
+ev_previewer_unlink_tempfile (const gchar *filename)
+{
+ GFile *file, *tempdir;
+
+ file = g_file_new_for_path (filename);
+ tempdir = g_file_new_for_path (g_get_tmp_dir ());
+
+ if (g_file_has_prefix (file, tempdir)) {
+ g_file_delete (file, NULL, NULL);
+ }
+
+ g_object_unref (file);
+ g_object_unref (tempdir);
+}
+
+static void
+ev_previewer_load_job_finished (EvJob *job,
+ EvDocumentModel *model)
+{
+ if (ev_job_is_failed (job)) {
+ g_warning ("%s", job->error->message);
+ g_object_unref (job);
+
+ return;
+ }
+ ev_document_model_set_document (model, job->document);
+ g_object_unref (job);
+}
+
+static void
+ev_previewer_load_document (const gchar *filename,
+ EvDocumentModel *model)
+{
+ EvJob *job;
+ gchar *uri;
+ GFile *file;
+
+ file = g_file_new_for_commandline_arg (filename);
+ uri = g_file_get_uri (file);
+ g_object_unref (file);
+
+ job = ev_job_load_new (uri);
+ g_signal_connect (job, "finished",
+ G_CALLBACK (ev_previewer_load_job_finished),
+ model);
+ ev_job_scheduler_push_job (job, EV_JOB_PRIORITY_NONE);
+ g_free (uri);
+}
+
+gint
+main (gint argc, gchar **argv)
+{
+ GtkWidget *window;
+ GOptionContext *context;
+ const gchar *filename;
+ EvDocumentModel *model;
+ GError *error = NULL;
+
+#ifdef G_OS_WIN32
+ if (fileno (stdout) != -1 &&
+ _get_osfhandle (fileno (stdout)) != -1)
+ {
+ /* stdout is fine, presumably redirected to a file or pipe */
+ }
+ else
+ {
+ typedef BOOL (* WINAPI AttachConsole_t) (DWORD);
+
+ AttachConsole_t p_AttachConsole =
+ (AttachConsole_t) GetProcAddress (GetModuleHandle ("kernel32.dll"), "AttachConsole");
+
+ if (p_AttachConsole != NULL && p_AttachConsole (ATTACH_PARENT_PROCESS))
+ {
+ freopen ("CONOUT$", "w", stdout);
+ dup2 (fileno (stdout), 1);
+ freopen ("CONOUT$", "w", stderr);
+ dup2 (fileno (stderr), 2);
+
+ }
+ }
+#endif
+
+ /* Init glib threads asap */
+ if (!g_thread_supported ())
+ g_thread_init (NULL);
+
+#ifdef ENABLE_NLS
+ /* Initialize the i18n stuff */
+ bindtextdomain (GETTEXT_PACKAGE, ev_get_locale_dir());
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+#endif
+
+ context = g_option_context_new (_("MATE Document Previewer"));
+ g_option_context_set_translation_domain (context, GETTEXT_PACKAGE);
+ g_option_context_add_main_entries (context, goption_options, GETTEXT_PACKAGE);
+
+ g_option_context_add_group (context, gtk_get_option_group (TRUE));
+
+ if (!g_option_context_parse (context, &argc, &argv, &error)) {
+ g_warning ("Error parsing command line arguments: %s", error->message);
+ g_error_free (error);
+ g_option_context_free (context);
+
+ return 1;
+ }
+ g_option_context_free (context);
+
+ if (!filenames) {
+ g_warning ("File argument is required");
+
+ return 1;
+ }
+
+ filename = filenames[0];
+
+ if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR)) {
+ g_warning ("Filename \"%s\" does not exist or is not a regular file", filename);
+
+ return 1;
+ }
+
+ if (!ev_init ())
+ return 1;
+
+ ev_stock_icons_init ();
+
+ g_set_application_name (_("MATE Document Previewer"));
+ gtk_window_set_default_icon_name ("evince");
+
+ model = ev_document_model_new ();
+ window = ev_previewer_window_new (model);
+ ev_previewer_window_set_source_file (EV_PREVIEWER_WINDOW (window), filename);
+ ev_previewer_window_set_print_settings (EV_PREVIEWER_WINDOW (window), print_settings);
+ g_signal_connect (window, "delete-event",
+ G_CALLBACK (gtk_main_quit), NULL);
+ g_signal_connect (window, "destroy",
+ G_CALLBACK (gtk_main_quit), NULL);
+ gtk_widget_show (window);
+
+ ev_previewer_load_document (filename, model);
+
+ gtk_main ();
+
+ if (unlink_temp_file)
+ ev_previewer_unlink_tempfile (filename);
+ if (print_settings)
+ ev_previewer_unlink_tempfile (print_settings);
+
+ ev_shutdown ();
+ ev_stock_icons_shutdown ();
+ g_object_unref (model);
+
+ return 0;
+}
diff --git a/properties/Makefile.am b/properties/Makefile.am
new file mode 100644
index 00000000..3ef1b82c
--- /dev/null
+++ b/properties/Makefile.am
@@ -0,0 +1,35 @@
+INCLUDES= \
+ -DEVINCEDATADIR=\"$(pkgdatadir)\" \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ $(FRONTEND_CFLAGS) \
+ $(CAJA_CFLAGS) \
+ $(DISABLE_DEPRECATED) \
+ $(WARN_CFLAGS)
+
+noinst_LTLIBRARIES = libevproperties.la
+
+libevproperties_la_SOURCES= \
+ ev-properties-view.c \
+ ev-properties-view.h
+
+if ENABLE_CAJA
+
+cajaextension_LTLIBRARIES = libevince-properties-page.la
+
+libevince_properties_page_la_CFLAGS = -I$(top_srcdir)
+libevince_properties_page_la_SOURCES = \
+ ev-properties-main.c
+
+libevince_properties_page_la_LIBADD = \
+ libevproperties.la \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(FRONTEND_LIBS) \
+ $(CAJA_LIBS)
+
+libevince_properties_page_la_LDFLAGS = -module -avoid-version -no-undefined
+
+endif # ENABLE_CAJA
+
+-include $(top_srcdir)/git.mk
diff --git a/properties/ev-properties-main.c b/properties/ev-properties-main.c
new file mode 100644
index 00000000..b78396c3
--- /dev/null
+++ b/properties/ev-properties-main.c
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2000, 2001 Eazel Inc.
+ * Copyright (C) 2003 Andrew Sobala <[email protected]>
+ * Copyright (C) 2005 Bastien Nocera <[email protected]>
+ *
+ * This library 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 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU 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.
+ *
+ * The Ev project hereby grant permission for non-gpl compatible GStreamer
+ * plugins to be used and distributed together with GStreamer and Ev. This
+ * permission are above and beyond the permissions granted by the GPL license
+ * Ev is covered by.
+ *
+ * Monday 7th February 2005: Christian Schaller: Add excemption clause.
+ * See license_change file for details.
+ *
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
+
+#include <libcaja-extension/caja-extension-types.h>
+#include <libcaja-extension/caja-property-page-provider.h>
+
+#include <evince-document.h>
+#include "ev-properties-view.h"
+
+static GType epp_type = 0;
+static void property_page_provider_iface_init
+ (CajaPropertyPageProviderIface *iface);
+static GList *ev_properties_get_pages
+ (CajaPropertyPageProvider *provider, GList *files);
+
+static void
+ev_properties_plugin_register_type (GTypeModule *module)
+{
+ const GTypeInfo info = {
+ sizeof (GObjectClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) NULL,
+ NULL,
+ NULL,
+ sizeof (GObject),
+ 0,
+ (GInstanceInitFunc) NULL
+ };
+ const GInterfaceInfo property_page_provider_iface_info = {
+ (GInterfaceInitFunc)property_page_provider_iface_init,
+ NULL,
+ NULL
+ };
+
+ epp_type = g_type_module_register_type (module, G_TYPE_OBJECT,
+ "EvPropertiesPlugin",
+ &info, 0);
+ g_type_module_add_interface (module,
+ epp_type,
+ CAJA_TYPE_PROPERTY_PAGE_PROVIDER,
+ &property_page_provider_iface_info);
+}
+
+static void
+property_page_provider_iface_init (CajaPropertyPageProviderIface *iface)
+{
+ iface->get_pages = ev_properties_get_pages;
+}
+
+static GList *
+ev_properties_get_pages (CajaPropertyPageProvider *provider,
+ GList *files)
+{
+ GError *error = NULL;
+ EvDocument *document;
+ GList *pages = NULL;
+ CajaFileInfo *file;
+ gchar *uri = NULL;
+ gchar *mime_type = NULL;
+ GtkWidget *page, *label;
+ CajaPropertyPage *property_page;
+
+ /* only add properties page if a single file is selected */
+ if (files == NULL || files->next != NULL)
+ goto end;
+ file = files->data;
+
+ /* okay, make the page */
+ uri = caja_file_info_get_uri (file);
+ mime_type = caja_file_info_get_mime_type (file);
+
+ document = ev_backends_manager_get_document (mime_type);
+ if (!document)
+ goto end;
+
+ ev_document_load (document, uri, &error);
+ if (error) {
+ g_error_free (error);
+ goto end;
+ }
+
+ label = gtk_label_new (_("Document"));
+ page = ev_properties_view_new (uri);
+ ev_properties_view_set_info (EV_PROPERTIES_VIEW (page),
+ ev_document_get_info (document));
+ gtk_widget_show (page);
+ property_page = caja_property_page_new ("document-properties",
+ label, page);
+ g_object_unref (document);
+
+ pages = g_list_prepend (pages, property_page);
+
+end:
+ g_free (uri);
+ g_free (mime_type);
+
+ return pages;
+}
+
+/* --- extension interface --- */
+void
+caja_module_initialize (GTypeModule *module)
+{
+ ev_properties_plugin_register_type (module);
+ ev_properties_view_register_type (module);
+
+ ev_init ();
+}
+
+void
+caja_module_shutdown (void)
+{
+ ev_shutdown ();
+}
+
+void
+caja_module_list_types (const GType **types,
+ int *num_types)
+{
+ static GType type_list[1];
+
+ type_list[0] = epp_type;
+ *types = type_list;
+ *num_types = G_N_ELEMENTS (type_list);
+}
diff --git a/properties/ev-properties-view.c b/properties/ev-properties-view.c
new file mode 100644
index 00000000..38a75641
--- /dev/null
+++ b/properties/ev-properties-view.c
@@ -0,0 +1,399 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include <string.h>
+#include <sys/time.h>
+#include <time.h>
+
+#ifdef HAVE__NL_MEASUREMENT_MEASUREMENT
+#include <langinfo.h>
+#endif
+
+#include <glib/gi18n-lib.h>
+#include <gtk/gtk.h>
+
+#include "ev-properties-view.h"
+
+typedef enum {
+ TITLE_PROPERTY,
+ URI_PROPERTY,
+ SUBJECT_PROPERTY,
+ AUTHOR_PROPERTY,
+ KEYWORDS_PROPERTY,
+ PRODUCER_PROPERTY,
+ CREATOR_PROPERTY,
+ CREATION_DATE_PROPERTY,
+ MOD_DATE_PROPERTY,
+ N_PAGES_PROPERTY,
+ LINEARIZED_PROPERTY,
+ FORMAT_PROPERTY,
+ SECURITY_PROPERTY,
+ PAPER_SIZE_PROPERTY,
+ N_PROPERTIES
+} Property;
+
+typedef struct {
+ Property property;
+ const char *label;
+} PropertyInfo;
+
+static const PropertyInfo properties_info[] = {
+ { TITLE_PROPERTY, N_("Title:") },
+ { URI_PROPERTY, N_("Location:") },
+ { SUBJECT_PROPERTY, N_("Subject:") },
+ { AUTHOR_PROPERTY, N_("Author:") },
+ { KEYWORDS_PROPERTY, N_("Keywords:") },
+ { PRODUCER_PROPERTY, N_("Producer:") },
+ { CREATOR_PROPERTY, N_("Creator:") },
+ { CREATION_DATE_PROPERTY, N_("Created:") },
+ { MOD_DATE_PROPERTY, N_("Modified:") },
+ { N_PAGES_PROPERTY, N_("Number of Pages:") },
+ { LINEARIZED_PROPERTY, N_("Optimized:") },
+ { FORMAT_PROPERTY, N_("Format:") },
+ { SECURITY_PROPERTY, N_("Security:") },
+ { PAPER_SIZE_PROPERTY, N_("Paper Size:") }
+};
+
+struct _EvPropertiesView {
+ GtkVBox base_instance;
+
+ GtkWidget *table;
+ GtkWidget *labels[N_PROPERTIES];
+ gchar *uri;
+};
+
+struct _EvPropertiesViewClass {
+ GtkVBoxClass base_class;
+};
+
+G_DEFINE_TYPE (EvPropertiesView, ev_properties_view, GTK_TYPE_VBOX)
+
+static void
+ev_properties_view_dispose (GObject *object)
+{
+ EvPropertiesView *properties = EV_PROPERTIES_VIEW (object);
+
+ if (properties->uri) {
+ g_free (properties->uri);
+ properties->uri = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_properties_view_parent_class)->dispose (object);
+}
+
+static void
+ev_properties_view_class_init (EvPropertiesViewClass *properties_class)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (properties_class);
+
+ g_object_class->dispose = ev_properties_view_dispose;
+}
+
+/* This is cut out of gconvert.c from glib (and mildly modified). Not all
+ backends give valid UTF-8 for properties, so we make sure that is.
+ */
+static gchar *
+make_valid_utf8 (const gchar *name)
+{
+ GString *string;
+ const gchar *remainder, *invalid;
+ gint remaining_bytes, valid_bytes;
+
+ string = NULL;
+ remainder = name;
+ remaining_bytes = strlen (name);
+
+ while (remaining_bytes != 0)
+ {
+ if (g_utf8_validate (remainder, remaining_bytes, &invalid))
+ break;
+ valid_bytes = invalid - remainder;
+
+ if (string == NULL)
+ string = g_string_sized_new (remaining_bytes);
+
+ g_string_append_len (string, remainder, valid_bytes);
+ g_string_append_c (string, '?');
+
+ remaining_bytes -= valid_bytes + 1;
+ remainder = invalid + 1;
+ }
+
+ if (string == NULL)
+ return g_strdup (name);
+
+ g_string_append (string, remainder);
+
+ g_assert (g_utf8_validate (string->str, -1, NULL));
+
+ return g_string_free (string, FALSE);
+}
+
+static void
+set_property (EvPropertiesView *properties,
+ GtkTable *table,
+ Property property,
+ const gchar *text,
+ gint *row)
+{
+ GtkWidget *label;
+ gchar *markup;
+ gchar *valid_text;
+
+ if (!properties->labels[property]) {
+ label = gtk_label_new (NULL);
+ g_object_set (G_OBJECT (label), "xalign", 0.0, NULL);
+ markup = g_strdup_printf ("<b>%s</b>", _(properties_info[property].label));
+ gtk_label_set_markup (GTK_LABEL (label), markup);
+ g_free (markup);
+
+ gtk_table_attach (table, label, 0, 1, *row, *row + 1,
+ GTK_FILL, GTK_FILL, 0, 0);
+ gtk_widget_show (label);
+ }
+
+ if (!properties->labels[property]) {
+ label = gtk_label_new (NULL);
+
+ g_object_set (G_OBJECT (label),
+ "xalign", 0.0,
+ "width_chars", 25,
+ "selectable", TRUE,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ NULL);
+ } else {
+ label = properties->labels[property];
+ }
+
+ if (text == NULL || text[0] == '\000') {
+ markup = g_markup_printf_escaped ("<i>%s</i>", _("None"));
+ gtk_label_set_markup (GTK_LABEL (label), markup);
+ g_free (markup);
+ } else {
+ valid_text = make_valid_utf8 (text ? text : "");
+ gtk_label_set_text (GTK_LABEL (label), valid_text);
+ g_free (valid_text);
+ }
+
+ if (!properties->labels[property]) {
+ gtk_table_attach (table, label, 1, 2, *row, *row + 1,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ properties->labels[property] = label;
+ }
+
+ gtk_widget_show (label);
+
+ *row += 1;
+}
+
+static GtkUnit
+get_default_user_units (void)
+{
+ /* Translate to the default units to use for presenting
+ * lengths to the user. Translate to default:inch if you
+ * want inches, otherwise translate to default:mm.
+ * Do *not* translate it to "predefinito:mm", if it
+ * it isn't default:mm or default:inch it will not work
+ */
+ gchar *e = _("default:mm");
+
+#ifdef HAVE__NL_MEASUREMENT_MEASUREMENT
+ gchar *imperial = NULL;
+
+ imperial = nl_langinfo (_NL_MEASUREMENT_MEASUREMENT);
+ if (imperial && imperial[0] == 2)
+ return GTK_UNIT_INCH; /* imperial */
+ if (imperial && imperial[0] == 1)
+ return GTK_UNIT_MM; /* metric */
+#endif
+
+ if (strcmp (e, "default:mm") == 0)
+ return GTK_UNIT_MM;
+ if (strcmp (e, "default:inch") == 0)
+ return GTK_UNIT_INCH;
+
+ g_warning ("Whoever translated default:mm did so wrongly.\n");
+
+ return GTK_UNIT_MM;
+}
+
+static gdouble
+get_tolerance (gdouble size)
+{
+ if (size < 150.0f)
+ return 1.5f;
+ else if (size >= 150.0f && size <= 600.0f)
+ return 2.0f;
+ else
+ return 3.0f;
+}
+
+static char *
+ev_regular_paper_size (const EvDocumentInfo *info)
+{
+ GList *paper_sizes, *l;
+ gchar *exact_size;
+ gchar *str = NULL;
+ GtkUnit units;
+
+ units = get_default_user_units ();
+
+ if (units == GTK_UNIT_MM) {
+ exact_size = g_strdup_printf(_("%.0f × %.0f mm"),
+ info->paper_width,
+ info->paper_height);
+ } else {
+ exact_size = g_strdup_printf (_("%.2f × %.2f inch"),
+ info->paper_width / 25.4f,
+ info->paper_height / 25.4f);
+ }
+
+ paper_sizes = gtk_paper_size_get_paper_sizes (FALSE);
+
+ for (l = paper_sizes; l && l->data; l = g_list_next (l)) {
+ GtkPaperSize *size = (GtkPaperSize *) l->data;
+ gdouble paper_width;
+ gdouble paper_height;
+ gdouble width_tolerance;
+ gdouble height_tolerance;
+
+ paper_width = gtk_paper_size_get_width (size, GTK_UNIT_MM);
+ paper_height = gtk_paper_size_get_height (size, GTK_UNIT_MM);
+
+ width_tolerance = get_tolerance (paper_width);
+ height_tolerance = get_tolerance (paper_height);
+
+ if (ABS (info->paper_height - paper_height) <= height_tolerance &&
+ ABS (info->paper_width - paper_width) <= width_tolerance) {
+ /* Note to translators: first placeholder is the paper name (eg.
+ * A4), second placeholder is the paper size (eg. 297x210 mm) */
+ str = g_strdup_printf (_("%s, Portrait (%s)"),
+ gtk_paper_size_get_display_name (size),
+ exact_size);
+ } else if (ABS (info->paper_width - paper_height) <= height_tolerance &&
+ ABS (info->paper_height - paper_width) <= width_tolerance) {
+ /* Note to translators: first placeholder is the paper name (eg.
+ * A4), second placeholder is the paper size (eg. 297x210 mm) */
+ str = g_strdup_printf ( _("%s, Landscape (%s)"),
+ gtk_paper_size_get_display_name (size),
+ exact_size);
+ }
+ }
+
+ g_list_foreach (paper_sizes, (GFunc) gtk_paper_size_free, NULL);
+ g_list_free (paper_sizes);
+
+ if (str != NULL) {
+ g_free (exact_size);
+ return str;
+ }
+
+ return exact_size;
+}
+
+void
+ev_properties_view_set_info (EvPropertiesView *properties, const EvDocumentInfo *info)
+{
+ GtkWidget *table;
+ gchar *text;
+ gint row = 0;
+
+ table = properties->table;
+
+ if (info->fields_mask & EV_DOCUMENT_INFO_TITLE) {
+ set_property (properties, GTK_TABLE (table), TITLE_PROPERTY, info->title, &row);
+ }
+ set_property (properties, GTK_TABLE (table), URI_PROPERTY, properties->uri, &row);
+ if (info->fields_mask & EV_DOCUMENT_INFO_SUBJECT) {
+ set_property (properties, GTK_TABLE (table), SUBJECT_PROPERTY, info->subject, &row);
+ }
+ if (info->fields_mask & EV_DOCUMENT_INFO_AUTHOR) {
+ set_property (properties, GTK_TABLE (table), AUTHOR_PROPERTY, info->author, &row);
+ }
+ if (info->fields_mask & EV_DOCUMENT_INFO_KEYWORDS) {
+ set_property (properties, GTK_TABLE (table), KEYWORDS_PROPERTY, info->keywords, &row);
+ }
+ if (info->fields_mask & EV_DOCUMENT_INFO_PRODUCER) {
+ set_property (properties, GTK_TABLE (table), PRODUCER_PROPERTY, info->producer, &row);
+ }
+ if (info->fields_mask & EV_DOCUMENT_INFO_CREATOR) {
+ set_property (properties, GTK_TABLE (table), CREATOR_PROPERTY, info->creator, &row);
+ }
+ if (info->fields_mask & EV_DOCUMENT_INFO_CREATION_DATE) {
+ text = ev_document_misc_format_date (info->creation_date);
+ set_property (properties, GTK_TABLE (table), CREATION_DATE_PROPERTY, text, &row);
+ g_free (text);
+ }
+ if (info->fields_mask & EV_DOCUMENT_INFO_MOD_DATE) {
+ text = ev_document_misc_format_date (info->modified_date);
+ set_property (properties, GTK_TABLE (table), MOD_DATE_PROPERTY, text, &row);
+ g_free (text);
+ }
+ if (info->fields_mask & EV_DOCUMENT_INFO_FORMAT) {
+ set_property (properties, GTK_TABLE (table), FORMAT_PROPERTY, info->format, &row);
+ }
+ if (info->fields_mask & EV_DOCUMENT_INFO_N_PAGES) {
+ text = g_strdup_printf ("%d", info->n_pages);
+ set_property (properties, GTK_TABLE (table), N_PAGES_PROPERTY, text, &row);
+ g_free (text);
+ }
+ if (info->fields_mask & EV_DOCUMENT_INFO_LINEARIZED) {
+ set_property (properties, GTK_TABLE (table), LINEARIZED_PROPERTY, info->linearized, &row);
+ }
+ if (info->fields_mask & EV_DOCUMENT_INFO_SECURITY) {
+ set_property (properties, GTK_TABLE (table), SECURITY_PROPERTY, info->security, &row);
+ }
+ if (info->fields_mask & EV_DOCUMENT_INFO_PAPER_SIZE) {
+ text = ev_regular_paper_size (info);
+ set_property (properties, GTK_TABLE (table), PAPER_SIZE_PROPERTY, text, &row);
+ g_free (text);
+ }
+}
+
+static void
+ev_properties_view_init (EvPropertiesView *properties)
+{
+ properties->table = gtk_table_new (13, 2, FALSE);
+ gtk_table_set_col_spacings (GTK_TABLE (properties->table), 12);
+ gtk_table_set_row_spacings (GTK_TABLE (properties->table), 6);
+ gtk_container_set_border_width (GTK_CONTAINER (properties->table), 12);
+ gtk_box_pack_start (GTK_BOX (properties), properties->table,
+ TRUE, TRUE, 0);
+ gtk_widget_show (properties->table);
+}
+
+void
+ev_properties_view_register_type (GTypeModule *module)
+{
+ ev_properties_view_get_type ();
+}
+
+GtkWidget *
+ev_properties_view_new (const gchar *uri)
+{
+ EvPropertiesView *properties;
+
+ properties = g_object_new (EV_TYPE_PROPERTIES, NULL);
+ properties->uri = g_strdup (uri);
+
+ return GTK_WIDGET (properties);
+}
diff --git a/properties/ev-properties-view.h b/properties/ev-properties-view.h
new file mode 100644
index 00000000..e8e02649
--- /dev/null
+++ b/properties/ev-properties-view.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 __EV_PROPERTIES_VIEW_H__
+#define __EV_PROPERTIES_VIEW_H__
+
+#include <gtk/gtk.h>
+
+#include <evince-document.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvPropertiesView EvPropertiesView;
+typedef struct _EvPropertiesViewClass EvPropertiesViewClass;
+typedef struct _EvPropertiesViewPrivate EvPropertiesViewPrivate;
+
+#define EV_TYPE_PROPERTIES (ev_properties_view_get_type())
+#define EV_PROPERTIES_VIEW(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_PROPERTIES, EvPropertiesView))
+#define EV_PROPERTIES_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_PROPERTIES, EvPropertiesViewClass))
+#define EV_IS_PROPERTIES_VIEW(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_PROPERTIES))
+#define EV_IS_PROPERTIES_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_PROPERTIES))
+#define EV_PROPERTIES_VIEW_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_PROPERTIES, EvPropertiesViewClass))
+
+GType ev_properties_view_get_type (void);
+void ev_properties_view_register_type (GTypeModule *module);
+
+GtkWidget *ev_properties_view_new (const gchar *uri);
+void ev_properties_view_set_info (EvPropertiesView *properties,
+ const EvDocumentInfo *info);
+
+G_END_DECLS
+
+#endif /* __EV_PROPERTIES_VIEW_H__ */
diff --git a/shell/Makefile.am b/shell/Makefile.am
new file mode 100644
index 00000000..e80c9986
--- /dev/null
+++ b/shell/Makefile.am
@@ -0,0 +1,160 @@
+INCLUDES= \
+ -DEVINCEDATADIR=\"$(pkgdatadir)\" \
+ -DMATEDATADIR=\"$(datadir)\" \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ -I$(top_srcdir)/cut-n-paste/zoom-control/ \
+ -I$(top_srcdir)/cut-n-paste/toolbar-editor/ \
+ -I$(top_srcdir)/cut-n-paste/totem-screensaver/ \
+ -I$(top_srcdir)/cut-n-paste/gimpcellrenderertoggle/ \
+ -I$(top_srcdir)/cut-n-paste/smclient/ \
+ -I$(top_srcdir)/libdocument \
+ -I$(top_builddir)/libdocument \
+ -I$(top_srcdir)/libview \
+ -I$(top_builddir)/libview \
+ -I$(top_srcdir)/libmisc \
+ -I$(top_srcdir)/properties \
+ -DMATEICONDIR=\""$(datadir)/pixmaps"\" \
+ -DBINDIR=\""$(bindir)"\" \
+ -DLIBEXECDIR=\""$(libexecdir)"\" \
+ -DEVINCE_COMPILATION \
+ $(SHELL_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+bin_PROGRAMS=evince
+
+libexec_PROGRAMS=evince-convert-metadata
+if ENABLE_DBUS
+libexec_PROGRAMS += evinced
+endif
+
+evince_SOURCES= \
+ eggfindbar.c \
+ eggfindbar.h \
+ ev-annotation-properties-dialog.h \
+ ev-annotation-properties-dialog.c \
+ ev-application.c \
+ ev-application.h \
+ ev-file-monitor.h \
+ ev-file-monitor.c \
+ ev-history.c \
+ ev-history.h \
+ ev-keyring.h \
+ ev-keyring.c \
+ ev-marshal.c \
+ ev-marshal.h \
+ ev-message-area.c \
+ ev-message-area.h \
+ ev-metadata.c \
+ ev-metadata.h \
+ ev-navigation-action.c \
+ ev-navigation-action.h \
+ ev-navigation-action-widget.c \
+ ev-navigation-action-widget.h \
+ ev-password-view.h \
+ ev-password-view.c \
+ ev-progress-message-area.h \
+ ev-progress-message-area.c \
+ ev-properties-dialog.c \
+ ev-properties-dialog.h \
+ ev-properties-fonts.c \
+ ev-properties-fonts.h \
+ ev-properties-license.c \
+ ev-properties-license.h \
+ ev-open-recent-action.c \
+ ev-open-recent-action.h \
+ ev-utils.c \
+ ev-utils.h \
+ ev-window.c \
+ ev-window.h \
+ ev-window-title.c \
+ ev-window-title.h \
+ ev-sidebar.c \
+ ev-sidebar.h \
+ ev-sidebar-annotations.c \
+ ev-sidebar-annotations.h \
+ ev-sidebar-attachments.c \
+ ev-sidebar-attachments.h \
+ ev-sidebar-layers.c \
+ ev-sidebar-layers.h \
+ ev-sidebar-links.c \
+ ev-sidebar-links.h \
+ ev-sidebar-page.c \
+ ev-sidebar-page.h \
+ ev-sidebar-thumbnails.c \
+ ev-sidebar-thumbnails.h \
+ main.c
+
+if ENABLE_DBUS
+evince_SOURCES += \
+ ev-media-player-keys.c \
+ ev-media-player-keys.h
+endif
+
+
+evince_LDFLAGS = $(AM_LDFLAGS)
+
+if PLATFORM_WIN32
+evince_LDFLAGS += -mwindows
+endif
+
+evince_LDADD= \
+ $(top_builddir)/cut-n-paste/zoom-control/libephyzoom.la \
+ $(top_builddir)/cut-n-paste/toolbar-editor/libtoolbareditor.la \
+ $(top_builddir)/cut-n-paste/totem-screensaver/libtotemscrsaver.la \
+ $(top_builddir)/cut-n-paste/gimpcellrenderertoggle/libgimpcellrenderertoggle.la \
+ $(top_builddir)/cut-n-paste/smclient/libsmclient.la \
+ $(top_builddir)/properties/libevproperties.la \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(top_builddir)/libview/libevview.la \
+ $(top_builddir)/libmisc/libevmisc.la \
+ $(SHELL_LIBS)
+
+if PLATFORM_WIN32
+evince_LDADD += evince-icon.o
+
+evince-icon.o: $(srcdir)/evince-icon.rc $(top_srcdir)/data/evince.ico
+ $(WINDRES) $(srcdir)/evince-icon.rc -I $(top_srcdir)/data evince-icon.o
+endif
+
+BUILT_SOURCES = ev-marshal.h ev-marshal.c
+
+evince_convert_metadata_SOURCES= \
+ ev-convert-metadata.c
+
+evince_convert_metadata_LDADD= \
+ $(SHELL_LIBS)
+
+if ENABLE_DBUS
+evinced_SOURCES= \
+ ev-daemon.c
+
+evinced_CFLAGS= \
+ -DEVINCEDATADIR=\"$(pkgdatadir)\" \
+ -DMATEDATADIR=\"$(datadir)\" \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ -DLIBEXECDIR=\""$(libexecdir)"\" \
+ -DEVINCE_COMPILATION \
+ $(EV_DAEMON_CFLAGS) \
+ $(WARN_CFLAGS) \
+ $(DISABLE_DEPRECATED)
+
+evinced_LDADD= \
+ $(EV_DAEMON_LIBS)
+endif
+
+EXTRA_DIST = ev-marshal.list \
+ evince-icon.rc
+
+ev-marshal.h: $(srcdir)/ev-marshal.list
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) --prefix=ev_marshal $(srcdir)/ev-marshal.list --header > ev-marshal.h
+
+ev-marshal.c: $(srcdir)/ev-marshal.list
+ echo '#include "ev-marshal.h"' > ev-marshal.c
+ $(AM_V_GEN)$(GLIB_GENMARSHAL) --prefix=ev_marshal $(srcdir)/ev-marshal.list --body >> ev-marshal.c
+
+DISTCLEANFILES =
+
+-include $(top_srcdir)/git.mk
diff --git a/shell/eggfindbar.c b/shell/eggfindbar.c
new file mode 100644
index 00000000..a00e74ed
--- /dev/null
+++ b/shell/eggfindbar.c
@@ -0,0 +1,740 @@
+/* Copyright (C) 2004 Red Hat, Inc.
+ *
+ * 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 the Mate 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.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "eggfindbar.h"
+
+struct _EggFindBarPrivate
+{
+ gchar *search_string;
+
+ GtkToolItem *next_button;
+ GtkToolItem *previous_button;
+ GtkToolItem *status_separator;
+ GtkToolItem *status_item;
+ GtkToolItem *case_button;
+
+ GtkWidget *find_entry;
+ GtkWidget *status_label;
+
+ gulong set_focus_handler;
+ guint case_sensitive : 1;
+};
+
+#define EGG_FIND_BAR_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EGG_TYPE_FIND_BAR, EggFindBarPrivate))
+
+enum {
+ PROP_0,
+ PROP_SEARCH_STRING,
+ PROP_CASE_SENSITIVE
+};
+
+static void egg_find_bar_finalize (GObject *object);
+static void egg_find_bar_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void egg_find_bar_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void egg_find_bar_show (GtkWidget *widget);
+static void egg_find_bar_hide (GtkWidget *widget);
+static void egg_find_bar_grab_focus (GtkWidget *widget);
+
+G_DEFINE_TYPE (EggFindBar, egg_find_bar, GTK_TYPE_TOOLBAR);
+
+enum
+ {
+ NEXT,
+ PREVIOUS,
+ CLOSE,
+ SCROLL,
+ LAST_SIGNAL
+ };
+
+static guint find_bar_signals[LAST_SIGNAL] = { 0 };
+
+static void
+egg_find_bar_class_init (EggFindBarClass *klass)
+{
+ GObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+ GtkBindingSet *binding_set;
+
+ egg_find_bar_parent_class = g_type_class_peek_parent (klass);
+
+ object_class = (GObjectClass *)klass;
+ widget_class = (GtkWidgetClass *)klass;
+
+ object_class->set_property = egg_find_bar_set_property;
+ object_class->get_property = egg_find_bar_get_property;
+
+ object_class->finalize = egg_find_bar_finalize;
+
+ widget_class->show = egg_find_bar_show;
+ widget_class->hide = egg_find_bar_hide;
+
+ widget_class->grab_focus = egg_find_bar_grab_focus;
+
+ find_bar_signals[NEXT] =
+ g_signal_new ("next",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (EggFindBarClass, next),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ find_bar_signals[PREVIOUS] =
+ g_signal_new ("previous",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (EggFindBarClass, previous),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ find_bar_signals[CLOSE] =
+ g_signal_new ("close",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EggFindBarClass, close),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ find_bar_signals[SCROLL] =
+ g_signal_new ("scroll",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EggFindBarClass, scroll),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__ENUM,
+ G_TYPE_NONE, 1,
+ GTK_TYPE_SCROLL_TYPE);
+
+ /**
+ * EggFindBar:search_string:
+ *
+ * The current string to search for. NULL or empty string
+ * both mean no current string.
+ *
+ */
+ g_object_class_install_property (object_class,
+ PROP_SEARCH_STRING,
+ g_param_spec_string ("search_string",
+ "Search string",
+ "The name of the string to be found",
+ NULL,
+ G_PARAM_READWRITE));
+
+ /**
+ * EggFindBar:case_sensitive:
+ *
+ * TRUE for a case sensitive search.
+ *
+ */
+ g_object_class_install_property (object_class,
+ PROP_CASE_SENSITIVE,
+ g_param_spec_boolean ("case_sensitive",
+ "Case sensitive",
+ "TRUE for a case sensitive search",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ /* Style properties */
+ gtk_widget_class_install_style_property (widget_class,
+ g_param_spec_boxed ("all_matches_color",
+ "Highlight color",
+ "Color of highlight for all matches",
+ GDK_TYPE_COLOR,
+ G_PARAM_READABLE));
+
+ gtk_widget_class_install_style_property (widget_class,
+ g_param_spec_boxed ("current_match_color",
+ "Current color",
+ "Color of highlight for the current match",
+ GDK_TYPE_COLOR,
+ G_PARAM_READABLE));
+
+ g_type_class_add_private (object_class, sizeof (EggFindBarPrivate));
+
+ binding_set = gtk_binding_set_by_class (klass);
+
+ gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0,
+ "close", 0);
+
+ gtk_binding_entry_add_signal (binding_set, GDK_Up, 0,
+ "scroll", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_STEP_BACKWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_Down, 0,
+ "scroll", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_STEP_FORWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_Page_Up, 0,
+ "scroll", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_BACKWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_KP_Page_Up, 0,
+ "scroll", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_BACKWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_Page_Down, 0,
+ "scroll", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_FORWARD);
+ gtk_binding_entry_add_signal (binding_set, GDK_KP_Page_Down, 0,
+ "scroll", 1,
+ GTK_TYPE_SCROLL_TYPE, GTK_SCROLL_PAGE_FORWARD);
+}
+
+static void
+egg_find_bar_emit_next (EggFindBar *find_bar)
+{
+ g_signal_emit (find_bar, find_bar_signals[NEXT], 0);
+}
+
+static void
+egg_find_bar_emit_previous (EggFindBar *find_bar)
+{
+ g_signal_emit (find_bar, find_bar_signals[PREVIOUS], 0);
+}
+
+static void
+next_clicked_callback (GtkButton *button,
+ void *data)
+{
+ EggFindBar *find_bar = EGG_FIND_BAR (data);
+
+ egg_find_bar_emit_next (find_bar);
+}
+
+static void
+previous_clicked_callback (GtkButton *button,
+ void *data)
+{
+ EggFindBar *find_bar = EGG_FIND_BAR (data);
+
+ egg_find_bar_emit_previous (find_bar);
+}
+
+static void
+case_sensitive_toggled_callback (GtkCheckButton *button,
+ void *data)
+{
+ EggFindBar *find_bar = EGG_FIND_BAR (data);
+
+ egg_find_bar_set_case_sensitive (find_bar,
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)));
+}
+
+static void
+entry_activate_callback (GtkEntry *entry,
+ void *data)
+{
+ EggFindBar *find_bar = EGG_FIND_BAR (data);
+
+ if (find_bar->priv->search_string != NULL)
+ egg_find_bar_emit_next (find_bar);
+}
+
+static void
+entry_changed_callback (GtkEntry *entry,
+ void *data)
+{
+ EggFindBar *find_bar = EGG_FIND_BAR (data);
+ char *text;
+
+ /* paranoid strdup because set_search_string() sets
+ * the entry text
+ */
+ text = g_strdup (gtk_entry_get_text (entry));
+
+ egg_find_bar_set_search_string (find_bar, text);
+
+ g_free (text);
+}
+
+static void
+set_focus_cb (GtkWidget *window,
+ GtkWidget *widget,
+ EggFindBar *bar)
+{
+ GtkWidget *wbar = GTK_WIDGET (bar);
+
+ while (widget != NULL && widget != wbar)
+ {
+ widget = gtk_widget_get_parent (widget);
+ }
+
+ /* if widget == bar, the new focus widget is in the bar, so we
+ * don't deactivate.
+ */
+ if (widget != wbar)
+ {
+ g_signal_emit (bar, find_bar_signals[CLOSE], 0);
+ }
+}
+
+static void
+egg_find_bar_init (EggFindBar *find_bar)
+{
+ EggFindBarPrivate *priv;
+ GtkWidget *label;
+ GtkWidget *alignment;
+ GtkWidget *box;
+ GtkToolItem *item;
+ GtkWidget *arrow;
+
+ /* Data */
+ priv = EGG_FIND_BAR_GET_PRIVATE (find_bar);
+
+ find_bar->priv = priv;
+ priv->search_string = NULL;
+
+ gtk_toolbar_set_style (GTK_TOOLBAR (find_bar), GTK_TOOLBAR_BOTH_HORIZ);
+
+ /* Find: |_____| */
+ item = gtk_tool_item_new ();
+ box = gtk_hbox_new (FALSE, 12);
+
+ alignment = gtk_alignment_new (0.0, 0.5, 1.0, 0.0);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 2, 2);
+
+ label = gtk_label_new_with_mnemonic (_("Find:"));
+
+ priv->find_entry = gtk_entry_new ();
+ gtk_entry_set_width_chars (GTK_ENTRY (priv->find_entry), 32);
+ gtk_entry_set_max_length (GTK_ENTRY (priv->find_entry), 512);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), priv->find_entry);
+
+ /* Prev */
+ arrow = gtk_arrow_new (GTK_ARROW_LEFT, GTK_SHADOW_NONE);
+ priv->previous_button = gtk_tool_button_new (arrow, Q_("Find Pre_vious"));
+ gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (priv->previous_button), TRUE);
+ gtk_tool_item_set_is_important (priv->previous_button, TRUE);
+ gtk_widget_set_tooltip_text (GTK_WIDGET (priv->previous_button),
+ _("Find previous occurrence of the search string"));
+
+ /* Next */
+ arrow = gtk_arrow_new (GTK_ARROW_RIGHT, GTK_SHADOW_NONE);
+ priv->next_button = gtk_tool_button_new (arrow, Q_("Find Ne_xt"));
+ gtk_tool_button_set_use_underline (GTK_TOOL_BUTTON (priv->next_button), TRUE);
+ gtk_tool_item_set_is_important (priv->next_button, TRUE);
+ gtk_widget_set_tooltip_text (GTK_WIDGET (priv->next_button),
+ _("Find next occurrence of the search string"));
+
+ /* Separator*/
+ priv->status_separator = gtk_separator_tool_item_new();
+
+ /* Case button */
+ priv->case_button = gtk_toggle_tool_button_new ();
+ g_object_set (G_OBJECT (priv->case_button), "label", _("C_ase Sensitive"), NULL);
+ gtk_tool_item_set_is_important (priv->case_button, TRUE);
+ gtk_widget_set_tooltip_text (GTK_WIDGET (priv->case_button),
+ _("Toggle case sensitive search"));
+
+ /* Status */
+ priv->status_item = gtk_tool_item_new();
+ gtk_tool_item_set_expand (priv->status_item, TRUE);
+ priv->status_label = gtk_label_new (NULL);
+ gtk_label_set_ellipsize (GTK_LABEL (priv->status_label),
+ PANGO_ELLIPSIZE_END);
+ gtk_misc_set_alignment (GTK_MISC (priv->status_label), 0.0, 0.5);
+
+
+ g_signal_connect (priv->find_entry, "changed",
+ G_CALLBACK (entry_changed_callback),
+ find_bar);
+ g_signal_connect (priv->find_entry, "activate",
+ G_CALLBACK (entry_activate_callback),
+ find_bar);
+ g_signal_connect (priv->next_button, "clicked",
+ G_CALLBACK (next_clicked_callback),
+ find_bar);
+ g_signal_connect (priv->previous_button, "clicked",
+ G_CALLBACK (previous_clicked_callback),
+ find_bar);
+ g_signal_connect (priv->case_button, "toggled",
+ G_CALLBACK (case_sensitive_toggled_callback),
+ find_bar);
+
+ gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (box), priv->find_entry, TRUE, TRUE, 0);
+ gtk_container_add (GTK_CONTAINER (alignment), box);
+ gtk_container_add (GTK_CONTAINER (item), alignment);
+ gtk_toolbar_insert (GTK_TOOLBAR (find_bar), item, -1);
+ gtk_toolbar_insert (GTK_TOOLBAR (find_bar), priv->previous_button, -1);
+ gtk_toolbar_insert (GTK_TOOLBAR (find_bar), priv->next_button, -1);
+ gtk_toolbar_insert (GTK_TOOLBAR (find_bar), priv->case_button, -1);
+ gtk_toolbar_insert (GTK_TOOLBAR (find_bar), priv->status_separator, -1);
+ gtk_container_add (GTK_CONTAINER (priv->status_item), priv->status_label);
+ gtk_toolbar_insert (GTK_TOOLBAR (find_bar), priv->status_item, -1);
+
+ /* don't show status separator/label until they are set */
+
+ gtk_widget_show_all (GTK_WIDGET (item));
+ gtk_widget_show_all (GTK_WIDGET (priv->next_button));
+ gtk_widget_show_all (GTK_WIDGET (priv->previous_button));
+ gtk_widget_show (priv->status_label);
+}
+
+static void
+egg_find_bar_finalize (GObject *object)
+{
+ EggFindBar *find_bar = EGG_FIND_BAR (object);
+ EggFindBarPrivate *priv = (EggFindBarPrivate *)find_bar->priv;
+
+ g_free (priv->search_string);
+
+ G_OBJECT_CLASS (egg_find_bar_parent_class)->finalize (object);
+}
+
+static void
+egg_find_bar_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EggFindBar *find_bar = EGG_FIND_BAR (object);
+
+ switch (prop_id)
+ {
+ case PROP_SEARCH_STRING:
+ egg_find_bar_set_search_string (find_bar, g_value_get_string (value));
+ break;
+ case PROP_CASE_SENSITIVE:
+ egg_find_bar_set_case_sensitive (find_bar, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+egg_find_bar_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EggFindBar *find_bar = EGG_FIND_BAR (object);
+ EggFindBarPrivate *priv = (EggFindBarPrivate *)find_bar->priv;
+
+ switch (prop_id)
+ {
+ case PROP_SEARCH_STRING:
+ g_value_set_string (value, priv->search_string);
+ break;
+ case PROP_CASE_SENSITIVE:
+ g_value_set_boolean (value, priv->case_sensitive);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+egg_find_bar_show (GtkWidget *widget)
+{
+ EggFindBar *bar = EGG_FIND_BAR (widget);
+ EggFindBarPrivate *priv = bar->priv;
+
+ GTK_WIDGET_CLASS (egg_find_bar_parent_class)->show (widget);
+
+ if (priv->set_focus_handler == 0)
+ {
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_toplevel (widget);
+
+ priv->set_focus_handler =
+ g_signal_connect (toplevel, "set-focus",
+ G_CALLBACK (set_focus_cb), bar);
+ }
+}
+
+static void
+egg_find_bar_hide (GtkWidget *widget)
+{
+ EggFindBar *bar = EGG_FIND_BAR (widget);
+ EggFindBarPrivate *priv = bar->priv;
+
+ if (priv->set_focus_handler != 0)
+ {
+ GtkWidget *toplevel;
+
+ toplevel = gtk_widget_get_toplevel (widget);
+
+ g_signal_handlers_disconnect_by_func
+ (toplevel, (void (*)) G_CALLBACK (set_focus_cb), bar);
+ priv->set_focus_handler = 0;
+ }
+
+ GTK_WIDGET_CLASS (egg_find_bar_parent_class)->hide (widget);
+}
+
+static void
+egg_find_bar_grab_focus (GtkWidget *widget)
+{
+ EggFindBar *find_bar = EGG_FIND_BAR (widget);
+ EggFindBarPrivate *priv = find_bar->priv;
+
+ gtk_widget_grab_focus (priv->find_entry);
+}
+
+/**
+ * egg_find_bar_new:
+ *
+ * Creates a new #EggFindBar.
+ *
+ * Returns: a newly created #EggFindBar
+ *
+ * Since: 2.6
+ */
+GtkWidget *
+egg_find_bar_new (void)
+{
+ EggFindBar *find_bar;
+
+ find_bar = g_object_new (EGG_TYPE_FIND_BAR, NULL);
+
+ return GTK_WIDGET (find_bar);
+}
+
+/**
+ * egg_find_bar_set_search_string:
+ *
+ * Sets the string that should be found/highlighted in the document.
+ * Empty string is converted to NULL.
+ *
+ * Since: 2.6
+ */
+void
+egg_find_bar_set_search_string (EggFindBar *find_bar,
+ const char *search_string)
+{
+ EggFindBarPrivate *priv;
+
+ g_return_if_fail (EGG_IS_FIND_BAR (find_bar));
+
+ priv = (EggFindBarPrivate *)find_bar->priv;
+
+ g_object_freeze_notify (G_OBJECT (find_bar));
+
+ if (priv->search_string != search_string)
+ {
+ char *old;
+
+ old = priv->search_string;
+
+ if (search_string && *search_string == '\0')
+ search_string = NULL;
+
+ /* Only update if the string has changed; setting the entry
+ * will emit changed on the entry which will re-enter
+ * this function, but we'll handle that fine with this
+ * short-circuit.
+ */
+ if ((old && search_string == NULL) ||
+ (old == NULL && search_string) ||
+ (old && search_string &&
+ strcmp (old, search_string) != 0))
+ {
+ gboolean not_empty;
+
+ priv->search_string = g_strdup (search_string);
+ g_free (old);
+
+ gtk_entry_set_text (GTK_ENTRY (priv->find_entry),
+ priv->search_string ?
+ priv->search_string :
+ "");
+
+ not_empty = (search_string == NULL) ? FALSE : TRUE;
+
+ gtk_widget_set_sensitive (GTK_WIDGET (find_bar->priv->next_button), not_empty);
+ gtk_widget_set_sensitive (GTK_WIDGET (find_bar->priv->previous_button), not_empty);
+
+ g_object_notify (G_OBJECT (find_bar),
+ "search_string");
+ }
+ }
+
+ g_object_thaw_notify (G_OBJECT (find_bar));
+}
+
+
+/**
+ * egg_find_bar_get_search_string:
+ *
+ * Gets the string that should be found/highlighted in the document.
+ *
+ * Returns: the string
+ *
+ * Since: 2.6
+ */
+const char*
+egg_find_bar_get_search_string (EggFindBar *find_bar)
+{
+ EggFindBarPrivate *priv;
+
+ g_return_val_if_fail (EGG_IS_FIND_BAR (find_bar), NULL);
+
+ priv = find_bar->priv;
+
+ return priv->search_string ? priv->search_string : "";
+}
+
+/**
+ * egg_find_bar_set_case_sensitive:
+ *
+ * Sets whether the search is case sensitive
+ *
+ * Since: 2.6
+ */
+void
+egg_find_bar_set_case_sensitive (EggFindBar *find_bar,
+ gboolean case_sensitive)
+{
+ EggFindBarPrivate *priv;
+
+ g_return_if_fail (EGG_IS_FIND_BAR (find_bar));
+
+ priv = (EggFindBarPrivate *)find_bar->priv;
+
+ g_object_freeze_notify (G_OBJECT (find_bar));
+
+ case_sensitive = case_sensitive != FALSE;
+
+ if (priv->case_sensitive != case_sensitive)
+ {
+ priv->case_sensitive = case_sensitive;
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->case_button),
+ priv->case_sensitive);
+
+ g_object_notify (G_OBJECT (find_bar),
+ "case_sensitive");
+ }
+
+ g_object_thaw_notify (G_OBJECT (find_bar));
+}
+
+/**
+ * egg_find_bar_get_case_sensitive:
+ *
+ * Gets whether the search is case sensitive
+ *
+ * Returns: TRUE if it's case sensitive
+ *
+ * Since: 2.6
+ */
+gboolean
+egg_find_bar_get_case_sensitive (EggFindBar *find_bar)
+{
+ EggFindBarPrivate *priv;
+
+ g_return_val_if_fail (EGG_IS_FIND_BAR (find_bar), FALSE);
+
+ priv = (EggFindBarPrivate *)find_bar->priv;
+
+ return priv->case_sensitive;
+}
+
+static void
+get_style_color (EggFindBar *find_bar,
+ const char *style_prop_name,
+ GdkColor *color)
+{
+ GdkColor *style_color;
+
+ gtk_widget_ensure_style (GTK_WIDGET (find_bar));
+ gtk_widget_style_get (GTK_WIDGET (find_bar),
+ "color", &style_color, NULL);
+ if (style_color)
+ {
+ *color = *style_color;
+ gdk_color_free (style_color);
+ }
+}
+
+/**
+ * egg_find_bar_get_all_matches_color:
+ *
+ * Gets the color to use to highlight all the
+ * known matches.
+ *
+ * Since: 2.6
+ */
+void
+egg_find_bar_get_all_matches_color (EggFindBar *find_bar,
+ GdkColor *color)
+{
+ GdkColor found_color = { 0, 0, 0, 0x0f0f };
+
+ get_style_color (find_bar, "all_matches_color", &found_color);
+
+ *color = found_color;
+}
+
+/**
+ * egg_find_bar_get_current_match_color:
+ *
+ * Gets the color to use to highlight the match
+ * we're currently on.
+ *
+ * Since: 2.6
+ */
+void
+egg_find_bar_get_current_match_color (EggFindBar *find_bar,
+ GdkColor *color)
+{
+ GdkColor found_color = { 0, 0, 0, 0xffff };
+
+ get_style_color (find_bar, "current_match_color", &found_color);
+
+ *color = found_color;
+}
+
+/**
+ * egg_find_bar_set_status_text:
+ *
+ * Sets some text to display if there's space; typical text would
+ * be something like "5 results on this page" or "No results"
+ *
+ * @text: the text to display
+ *
+ * Since: 2.6
+ */
+void
+egg_find_bar_set_status_text (EggFindBar *find_bar,
+ const char *text)
+{
+ EggFindBarPrivate *priv;
+
+ g_return_if_fail (EGG_IS_FIND_BAR (find_bar));
+
+ priv = (EggFindBarPrivate *)find_bar->priv;
+
+ gtk_label_set_text (GTK_LABEL (priv->status_label), text);
+ g_object_set (priv->status_separator, "visible", text != NULL && *text != '\0', NULL);
+ g_object_set (priv->status_item, "visible", text != NULL && *text !='\0', NULL);
+}
diff --git a/shell/eggfindbar.h b/shell/eggfindbar.h
new file mode 100644
index 00000000..7a7487e3
--- /dev/null
+++ b/shell/eggfindbar.h
@@ -0,0 +1,82 @@
+/* Copyright (C) 2004 Red Hat, Inc.
+ *
+ * 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 the Mate 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 __EGG_FIND_BAR_H__
+#define __EGG_FIND_BAR_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define EGG_TYPE_FIND_BAR (egg_find_bar_get_type ())
+#define EGG_FIND_BAR(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), EGG_TYPE_FIND_BAR, EggFindBar))
+#define EGG_FIND_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EGG_TYPE_FIND_BAR, EggFindBarClass))
+#define EGG_IS_FIND_BAR(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), EGG_TYPE_FIND_BAR))
+#define EGG_IS_FIND_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EGG_TYPE_FIND_BAR))
+#define EGG_FIND_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EGG_TYPE_FIND_BAR, EggFindBarClass))
+
+typedef struct _EggFindBar EggFindBar;
+typedef struct _EggFindBarClass EggFindBarClass;
+typedef struct _EggFindBarPrivate EggFindBarPrivate;
+
+struct _EggFindBar
+{
+ GtkToolbar parent;
+
+ /*< private >*/
+ EggFindBarPrivate *priv;
+};
+
+struct _EggFindBarClass
+{
+ GtkToolbarClass parent_class;
+
+ void (* next) (EggFindBar *find_bar);
+ void (* previous) (EggFindBar *find_bar);
+ void (* close) (EggFindBar *find_bar);
+ void (* scroll) (EggFindBar *find_bar, GtkScrollType* scroll);
+
+ /* Padding for future expansion */
+ void (*_gtk_reserved1) (void);
+ void (*_gtk_reserved2) (void);
+ void (*_gtk_reserved3) (void);
+ void (*_gtk_reserved4) (void);
+};
+
+GType egg_find_bar_get_type (void) G_GNUC_CONST;
+GtkWidget *egg_find_bar_new (void);
+
+void egg_find_bar_set_search_string (EggFindBar *find_bar,
+ const char *search_string);
+const char* egg_find_bar_get_search_string (EggFindBar *find_bar);
+void egg_find_bar_set_case_sensitive (EggFindBar *find_bar,
+ gboolean case_sensitive);
+gboolean egg_find_bar_get_case_sensitive (EggFindBar *find_bar);
+void egg_find_bar_get_all_matches_color (EggFindBar *find_bar,
+ GdkColor *color);
+void egg_find_bar_get_current_match_color (EggFindBar *find_bar,
+ GdkColor *color);
+void egg_find_bar_set_status_text (EggFindBar *find_bar,
+ const char *text);
+
+G_END_DECLS
+
+#endif /* __EGG_FIND_BAR_H__ */
+
+
diff --git a/shell/ev-annotation-properties-dialog.c b/shell/ev-annotation-properties-dialog.c
new file mode 100644
index 00000000..8828eba4
--- /dev/null
+++ b/shell/ev-annotation-properties-dialog.c
@@ -0,0 +1,327 @@
+/* ev-annotation-properties-dialog.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2010 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+
+#include "ev-annotation-properties-dialog.h"
+
+enum {
+ PROP_0,
+ PROP_ANNOT_TYPE
+};
+
+struct _EvAnnotationPropertiesDialog {
+ GtkDialog base_instance;
+
+ EvAnnotationType annot_type;
+ EvAnnotation *annot;
+
+ GtkWidget *table;
+
+ GtkWidget *author;
+ GtkWidget *color;
+ GtkWidget *opacity;
+ GtkWidget *popup_state;
+
+ /* Text Annotations */
+ GtkWidget *icon;
+};
+
+struct _EvAnnotationPropertiesDialogClass {
+ GtkDialogClass base_class;
+};
+
+G_DEFINE_TYPE (EvAnnotationPropertiesDialog, ev_annotation_properties_dialog, GTK_TYPE_DIALOG)
+
+static void
+ev_annotation_properties_dialog_dispose (GObject *object)
+{
+ EvAnnotationPropertiesDialog *dialog = EV_ANNOTATION_PROPERTIES_DIALOG (object);
+
+ if (dialog->annot) {
+ g_object_unref (dialog->annot);
+ dialog->annot = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_annotation_properties_dialog_parent_class)->dispose (object);
+}
+
+static void
+ev_annotation_properties_dialog_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvAnnotationPropertiesDialog *dialog = EV_ANNOTATION_PROPERTIES_DIALOG (object);
+
+ switch (prop_id) {
+ case PROP_ANNOT_TYPE:
+ dialog->annot_type = g_value_get_enum (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_annotation_properties_dialog_constructed (GObject *object)
+{
+ EvAnnotationPropertiesDialog *dialog = EV_ANNOTATION_PROPERTIES_DIALOG (object);
+ GtkWidget *contant_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+ GtkWidget *table = dialog->table;
+ GtkWidget *label;
+
+ contant_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+
+ switch (dialog->annot_type) {
+ case EV_ANNOTATION_TYPE_TEXT:
+ label = gtk_label_new (_("Icon:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0., 0.5);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 5, 6,
+ GTK_FILL, GTK_FILL, 0, 0);
+ gtk_widget_show (label);
+
+ dialog->icon = gtk_combo_box_new_text ();
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Note"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Comment"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Key"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Help"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("New Paragraph"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Paragraph"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Insert"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Cross"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Circle"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (dialog->icon), _("Unknown"));
+ gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->icon), 0);
+ gtk_table_attach (GTK_TABLE (table), dialog->icon,
+ 1, 2, 5, 6,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_widget_show (dialog->icon);
+
+ break;
+ case EV_ANNOTATION_TYPE_ATTACHMENT:
+ /* TODO */
+ default:
+ break;
+ }
+}
+
+static void
+ev_annotation_properties_dialog_init (EvAnnotationPropertiesDialog *annot_dialog)
+{
+ GtkDialog *dialog = GTK_DIALOG (annot_dialog);
+ GtkWidget *content_area;
+ GtkWidget *label;
+ GtkWidget *table;
+ GtkWidget *hbox;
+ gchar *markup;
+ GdkColor color = { 0, 65535, 65535, 0 };
+
+ gtk_window_set_title (GTK_WINDOW (annot_dialog), _("Annotation Properties"));
+ gtk_window_set_destroy_with_parent (GTK_WINDOW (annot_dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (annot_dialog), 5);
+ gtk_dialog_set_has_separator (dialog, FALSE);
+ gtk_dialog_add_buttons (dialog,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
+ GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
+ NULL);
+ gtk_dialog_set_default_response (dialog, GTK_RESPONSE_APPLY);
+
+ content_area = gtk_dialog_get_content_area (dialog);
+ gtk_box_set_spacing (GTK_BOX (content_area), 2);
+
+ table = gtk_table_new (5, 2, FALSE);
+ annot_dialog->table = table;
+ gtk_table_set_col_spacings (GTK_TABLE (table), 12);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+ gtk_container_set_border_width (GTK_CONTAINER (table), 12);
+ gtk_box_pack_start (GTK_BOX (content_area), table, FALSE, FALSE, 0);
+ gtk_widget_show (table);
+
+ label = gtk_label_new (_("Author:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0., 0.5);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
+ GTK_FILL, GTK_FILL, 0, 0);
+ gtk_widget_show (label);
+
+ annot_dialog->author = gtk_entry_new ();
+ gtk_entry_set_text (GTK_ENTRY (annot_dialog->author), g_get_real_name ());
+ gtk_table_attach (GTK_TABLE (table), annot_dialog->author,
+ 1, 2, 0, 1,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_widget_show (annot_dialog->author);
+
+ label = gtk_label_new (_("Color:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0., 0.5);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2,
+ GTK_FILL, GTK_FILL, 0, 0);
+ gtk_widget_show (label);
+
+ annot_dialog->color = gtk_color_button_new_with_color (&color);
+ gtk_table_attach (GTK_TABLE (table), annot_dialog->color,
+ 1, 2, 1, 2,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_widget_show (annot_dialog->color);
+
+ label = gtk_label_new (_("Style:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0., 0.5);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3,
+ GTK_FILL, GTK_FILL, 0, 0);
+ gtk_widget_show (label);
+
+ annot_dialog->opacity = gtk_hscale_new_with_range (0, 100, 5);
+ gtk_range_set_value (GTK_RANGE (annot_dialog->opacity), 100);
+ gtk_table_attach (GTK_TABLE (table), annot_dialog->opacity,
+ 1, 2, 2, 3,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_widget_show (annot_dialog->opacity);
+
+ hbox = gtk_hbox_new (FALSE, 6);
+
+ label = gtk_label_new (NULL);
+ markup = g_strdup_printf ("<small>%s</small>", _("Transparent"));
+ gtk_label_set_markup (GTK_LABEL (label), markup);
+ g_free (markup);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ label = gtk_label_new (NULL);
+ markup = g_strdup_printf ("<small>%s</small>", _("Opaque"));
+ gtk_label_set_markup (GTK_LABEL (label), markup);
+ g_free (markup);
+ gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ gtk_table_attach (GTK_TABLE (table), hbox,
+ 1, 2, 3, 4,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Initial window state:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0., 0.5);
+ gtk_table_attach (GTK_TABLE (table), label, 0, 1, 4, 5,
+ GTK_FILL, GTK_FILL, 0, 0);
+ gtk_widget_show (label);
+
+ annot_dialog->popup_state = gtk_combo_box_new_text ();
+ gtk_combo_box_append_text (GTK_COMBO_BOX (annot_dialog->popup_state), _("Open"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (annot_dialog->popup_state), _("Close"));
+ gtk_combo_box_set_active (GTK_COMBO_BOX (annot_dialog->popup_state), 1);
+ gtk_table_attach (GTK_TABLE (table), annot_dialog->popup_state,
+ 1, 2, 4, 5,
+ GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
+ gtk_widget_show (annot_dialog->popup_state);
+}
+
+static void
+ev_annotation_properties_dialog_class_init (EvAnnotationPropertiesDialogClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = ev_annotation_properties_dialog_dispose;
+ object_class->constructed = ev_annotation_properties_dialog_constructed;
+ object_class->set_property = ev_annotation_properties_dialog_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_ANNOT_TYPE,
+ g_param_spec_enum ("annot-type",
+ "AnnotType",
+ "The type of annotation",
+ EV_TYPE_ANNOTATION_TYPE,
+ EV_ANNOTATION_TYPE_TEXT,
+ G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+}
+
+GtkWidget *
+ev_annotation_properties_dialog_new (EvAnnotationType annot_type)
+{
+ return GTK_WIDGET (g_object_new (EV_TYPE_ANNOTATION_PROPERTIES_DIALOG,
+ "annot-type", annot_type,
+ NULL));
+}
+
+GtkWidget *
+ev_annotation_properties_dialog_new_with_annotation (EvAnnotation *annot)
+{
+ EvAnnotationPropertiesDialog *dialog;
+ const gchar *label;
+ gdouble opacity;
+ gboolean is_open;
+ GdkColor color;
+
+ dialog = (EvAnnotationPropertiesDialog *)ev_annotation_properties_dialog_new (ev_annotation_get_annotation_type (annot));
+ dialog->annot = g_object_ref (annot);
+
+ label = ev_annotation_markup_get_label (EV_ANNOTATION_MARKUP (annot));
+ if (label)
+ gtk_entry_set_text (GTK_ENTRY (dialog->author), label);
+
+ ev_annotation_get_color (annot, &color);
+ gtk_color_button_set_color (GTK_COLOR_BUTTON (dialog->color), &color);
+
+ opacity = ev_annotation_markup_get_opacity (EV_ANNOTATION_MARKUP (annot));
+ gtk_range_set_value (GTK_RANGE (dialog->opacity), opacity * 100);
+
+ is_open = ev_annotation_markup_get_popup_is_open (EV_ANNOTATION_MARKUP (annot));
+ gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->popup_state),
+ is_open ? 0 : 1);
+
+ if (EV_IS_ANNOTATION_TEXT (annot)) {
+ EvAnnotationText *annot_text = EV_ANNOTATION_TEXT (annot);
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->icon),
+ ev_annotation_text_get_icon (annot_text));
+ }
+
+ return GTK_WIDGET (dialog);
+}
+
+const gchar *
+ev_annotation_properties_dialog_get_author (EvAnnotationPropertiesDialog *dialog)
+{
+ return gtk_entry_get_text (GTK_ENTRY (dialog->author));
+}
+
+void
+ev_annotation_properties_dialog_get_color (EvAnnotationPropertiesDialog *dialog,
+ GdkColor *color)
+{
+ gtk_color_button_get_color (GTK_COLOR_BUTTON (dialog->color), color);
+}
+
+gdouble
+ev_annotation_properties_dialog_get_opacity (EvAnnotationPropertiesDialog *dialog)
+{
+ return gtk_range_get_value (GTK_RANGE (dialog->opacity)) / 100;
+}
+
+gboolean
+ev_annotation_properties_dialog_get_popup_is_open (EvAnnotationPropertiesDialog *dialog)
+{
+ return gtk_combo_box_get_active (GTK_COMBO_BOX (dialog->popup_state)) == 0;
+}
+
+EvAnnotationTextIcon
+ev_annotation_properties_dialog_get_text_icon (EvAnnotationPropertiesDialog *dialog)
+{
+ return gtk_combo_box_get_active (GTK_COMBO_BOX (dialog->icon));
+}
diff --git a/shell/ev-annotation-properties-dialog.h b/shell/ev-annotation-properties-dialog.h
new file mode 100644
index 00000000..eee533e1
--- /dev/null
+++ b/shell/ev-annotation-properties-dialog.h
@@ -0,0 +1,54 @@
+/* ev-annotation-properties-dialog.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2010 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EV_ANNOTATION_PROPERTIES_DIALOG_H__
+#define __EV_ANNOTATION_PROPERTIES_DIALOG_H__
+
+#include <gtk/gtk.h>
+#include <glib-object.h>
+
+#include <evince-document.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_ANNOTATION_PROPERTIES_DIALOG (ev_annotation_properties_dialog_get_type())
+#define EV_ANNOTATION_PROPERTIES_DIALOG(o) (G_TYPE_CHECK_INSTANCE_CAST((o), EV_TYPE_ANNOTATION_PROPERTIES_DIALOG, EvAnnotationPropertiesDialog))
+#define EV_ANNOTATION_PROPERTIES_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_ANNOTATION_PROPERTIES_DIALOG, EvAnnotationPropertiesDialogClass))
+#define EV_IS_ANNOTATION_PROPERTIES_DIALOG(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), EV_TYPE_ANNOTATION_PROPERTIES_DIALOG))
+#define EV_IS_ANNOTATION_PROPERTIES_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), EV_TYPE_ANNOTATION_PROPERTIES_DIALOG))
+#define EV_ANNOTATION_PROPERTIES_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), EV_TYPE_ANNOTATION_PROPERTIES_DIALOG, EvAnnotationPropertiesDialogClass))
+
+typedef struct _EvAnnotationPropertiesDialog EvAnnotationPropertiesDialog;
+typedef struct _EvAnnotationPropertiesDialogClass EvAnnotationPropertiesDialogClass;
+
+GType ev_annotation_properties_dialog_get_type (void) G_GNUC_CONST;
+GtkWidget *ev_annotation_properties_dialog_new (EvAnnotationType annot_type);
+GtkWidget *ev_annotation_properties_dialog_new_with_annotation (EvAnnotation *annot);
+
+const gchar *ev_annotation_properties_dialog_get_author (EvAnnotationPropertiesDialog *dialog);
+void ev_annotation_properties_dialog_get_color (EvAnnotationPropertiesDialog *dialog,
+ GdkColor *color);
+gdouble ev_annotation_properties_dialog_get_opacity (EvAnnotationPropertiesDialog *dialog);
+gboolean ev_annotation_properties_dialog_get_popup_is_open (EvAnnotationPropertiesDialog *dialog);
+EvAnnotationTextIcon ev_annotation_properties_dialog_get_text_icon (EvAnnotationPropertiesDialog *dialog);
+
+G_END_DECLS
+
+#endif /* __EV_ANNOTATION_PROPERTIES_DIALOG_H__ */
diff --git a/shell/ev-application.c b/shell/ev-application.c
new file mode 100644
index 00000000..af70617a
--- /dev/null
+++ b/shell/ev-application.c
@@ -0,0 +1,1151 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Martin Kretzschmar
+ * Copyright © 2010 Christian Persch
+ *
+ * Author:
+ * Martin Kretzschmar <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <glib/gstdio.h>
+#include <gtk/gtk.h>
+#ifdef GDK_WINDOWING_X11
+#include <gdk/gdkx.h>
+#endif
+#include <unistd.h>
+
+#include "totem-scrsaver.h"
+
+#ifdef WITH_SMCLIENT
+#include "eggsmclient.h"
+#endif
+
+#include "ev-application.h"
+#include "ev-file-helpers.h"
+#include "ev-stock-icons.h"
+
+#ifdef ENABLE_DBUS
+#include "ev-media-player-keys.h"
+#endif /* ENABLE_DBUS */
+
+struct _EvApplication {
+ GObject base_instance;
+
+ gchar *uri;
+
+ gchar *dot_dir;
+ gchar *data_dir;
+
+#ifdef ENABLE_DBUS
+ GDBusConnection *connection;
+ guint registration_id;
+ EvMediaPlayerKeys *keys;
+ gboolean doc_registered;
+#endif
+
+ TotemScrsaver *scr_saver;
+
+#ifdef WITH_SMCLIENT
+ EggSMClient *smclient;
+#endif
+
+ gchar *filechooser_open_uri;
+ gchar *filechooser_save_uri;
+};
+
+struct _EvApplicationClass {
+ GObjectClass base_class;
+};
+
+static EvApplication *instance;
+
+G_DEFINE_TYPE (EvApplication, ev_application, G_TYPE_OBJECT);
+
+#ifdef ENABLE_DBUS
+#define APPLICATION_DBUS_OBJECT_PATH "/org/mate/evince/Evince"
+#define APPLICATION_DBUS_INTERFACE "org.mate.evince.Application"
+
+#define EVINCE_DAEMON_SERVICE "org.mate.evince.Daemon"
+#define EVINCE_DAEMON_OBJECT_PATH "/org/mate/evince/Daemon"
+#define EVINCE_DAEMON_INTERFACE "org.mate.evince.Daemon"
+#endif
+
+static const gchar *userdir = NULL;
+
+static void _ev_application_open_uri_at_dest (EvApplication *application,
+ const gchar *uri,
+ GdkScreen *screen,
+ EvLinkDest *dest,
+ EvWindowRunMode mode,
+ const gchar *search_string,
+ guint timestamp);
+static void ev_application_open_uri_in_window (EvApplication *application,
+ const char *uri,
+ EvWindow *ev_window,
+ GdkScreen *screen,
+ EvLinkDest *dest,
+ EvWindowRunMode mode,
+ const gchar *search_string,
+ guint timestamp);
+
+/**
+ * ev_application_get_instance:
+ *
+ * Checks for #EvApplication instance, if it doesn't exist it does create it.
+ *
+ * Returns: an instance of the #EvApplication data.
+ */
+EvApplication *
+ev_application_get_instance (void)
+{
+ if (!instance) {
+ instance = EV_APPLICATION (g_object_new (EV_TYPE_APPLICATION, NULL));
+ }
+
+ return instance;
+}
+
+/* Session */
+gboolean
+ev_application_load_session (EvApplication *application)
+{
+ GKeyFile *state_file;
+ gchar *uri;
+
+#ifdef WITH_SMCLIENT
+ if (egg_sm_client_is_resumed (application->smclient)) {
+ state_file = egg_sm_client_get_state_file (application->smclient);
+ if (!state_file)
+ return FALSE;
+ } else
+#endif /* WITH_SMCLIENT */
+ return FALSE;
+
+ uri = g_key_file_get_string (state_file, "Evince", "uri", NULL);
+ if (!uri)
+ return FALSE;
+
+ ev_application_open_uri_at_dest (application, uri,
+ gdk_screen_get_default (),
+ NULL, 0, NULL,
+ GDK_CURRENT_TIME);
+ g_free (uri);
+ g_key_file_free (state_file);
+
+ return TRUE;
+}
+
+#ifdef WITH_SMCLIENT
+
+static void
+smclient_save_state_cb (EggSMClient *client,
+ GKeyFile *state_file,
+ EvApplication *application)
+{
+ if (!application->uri)
+ return;
+
+ g_key_file_set_string (state_file, "Evince", "uri", application->uri);
+}
+
+static void
+smclient_quit_cb (EggSMClient *client,
+ EvApplication *application)
+{
+ ev_application_shutdown (application);
+}
+#endif /* WITH_SMCLIENT */
+
+static void
+ev_application_init_session (EvApplication *application)
+{
+#ifdef WITH_SMCLIENT
+ application->smclient = egg_sm_client_get ();
+ g_signal_connect (application->smclient, "save_state",
+ G_CALLBACK (smclient_save_state_cb),
+ application);
+ g_signal_connect (application->smclient, "quit",
+ G_CALLBACK (smclient_quit_cb),
+ application);
+#endif
+}
+
+/**
+ * ev_display_open_if_needed:
+ * @name: the name of the display to be open if it's needed.
+ *
+ * Search among all the open displays if any of them have the same name as the
+ * passed name. If the display isn't found it tries the open it.
+ *
+ * Returns: a #GdkDisplay of the display with the passed name.
+ */
+static GdkDisplay *
+ev_display_open_if_needed (const gchar *name)
+{
+ GSList *displays;
+ GSList *l;
+ GdkDisplay *display = NULL;
+
+ displays = gdk_display_manager_list_displays (gdk_display_manager_get ());
+
+ for (l = displays; l != NULL; l = l->next) {
+ const gchar *display_name = gdk_display_get_name ((GdkDisplay *) l->data);
+
+ if (g_ascii_strcasecmp (display_name, name) == 0) {
+ display = l->data;
+ break;
+ }
+ }
+
+ g_slist_free (displays);
+
+ return display != NULL ? display : gdk_display_open (name);
+}
+
+static void
+child_setup (gpointer user_data)
+{
+ gchar *startup_id;
+
+ startup_id = g_strdup_printf ("_TIME%lu",
+ (unsigned long)GPOINTER_TO_INT (user_data));
+ g_setenv ("DESKTOP_STARTUP_ID", startup_id, TRUE);
+ g_free (startup_id);
+}
+
+static void
+ev_spawn (const char *uri,
+ GdkScreen *screen,
+ EvLinkDest *dest,
+ EvWindowRunMode mode,
+ const gchar *search_string,
+ guint timestamp)
+{
+ gchar *argv[6];
+ guint arg = 0;
+ gint i;
+ gboolean res;
+ GError *error = NULL;
+
+#ifdef G_OS_WIN32
+{
+ gchar *dir;
+
+ dir = g_win32_get_package_installation_directory_of_module (NULL);
+ argv[arg++] = g_build_filename (dir, "bin", "evince", NULL);
+ g_free (dir);
+}
+#else
+ argv[arg++] = g_build_filename (BINDIR, "evince", NULL);
+#endif
+
+ /* Page label */
+ if (dest) {
+ const gchar *page_label;
+
+ page_label = ev_link_dest_get_page_label (dest);
+ if (page_label)
+ argv[arg++] = g_strdup_printf ("--page-label=%s", page_label);
+ else
+ argv[arg++] = g_strdup_printf ("--page-label=%d",
+ ev_link_dest_get_page (dest));
+ }
+
+ /* Find string */
+ if (search_string) {
+ argv[arg++] = g_strdup_printf ("--find=%s", search_string);
+ }
+
+ /* Mode */
+ switch (mode) {
+ case EV_WINDOW_MODE_FULLSCREEN:
+ argv[arg++] = g_strdup ("-f");
+ break;
+ case EV_WINDOW_MODE_PRESENTATION:
+ argv[arg++] = g_strdup ("-s");
+ break;
+ default:
+ break;
+ }
+
+ argv[arg++] = (gchar *)uri;
+ argv[arg] = NULL;
+
+ res = gdk_spawn_on_screen (screen, NULL /* wd */, argv, NULL /* env */,
+ 0,
+ child_setup,
+ GINT_TO_POINTER(timestamp),
+ NULL, &error);
+ if (!res) {
+ g_warning ("Error launching evince %s: %s\n", uri, error->message);
+ g_error_free (error);
+ }
+
+ for (i = 0; i < arg - 1; i++) {
+ g_free (argv[i]);
+ }
+}
+
+static GList *
+ev_application_get_windows (EvApplication *application)
+{
+ GList *l, *toplevels;
+ GList *windows = NULL;
+
+ toplevels = gtk_window_list_toplevels ();
+
+ for (l = toplevels; l != NULL; l = l->next) {
+ if (EV_IS_WINDOW (l->data)) {
+ windows = g_list_append (windows, l->data);
+ }
+ }
+
+ g_list_free (toplevels);
+
+ return windows;
+}
+
+static EvWindow *
+ev_application_get_empty_window (EvApplication *application,
+ GdkScreen *screen)
+{
+ EvWindow *empty_window = NULL;
+ GList *windows = ev_application_get_windows (application);
+ GList *l;
+
+ for (l = windows; l != NULL; l = l->next) {
+ EvWindow *window = EV_WINDOW (l->data);
+
+ if (ev_window_is_empty (window) &&
+ gtk_window_get_screen (GTK_WINDOW (window)) == screen) {
+ empty_window = window;
+ break;
+ }
+ }
+
+ g_list_free (windows);
+
+ return empty_window;
+}
+
+
+#ifdef ENABLE_DBUS
+typedef struct {
+ gchar *uri;
+ GdkScreen *screen;
+ EvLinkDest *dest;
+ EvWindowRunMode mode;
+ gchar *search_string;
+ guint timestamp;
+} EvRegisterDocData;
+
+static void
+ev_register_doc_data_free (EvRegisterDocData *data)
+{
+ if (!data)
+ return;
+
+ g_free (data->uri);
+ if (data->search_string)
+ g_free (data->search_string);
+ if (data->dest)
+ g_object_unref (data->dest);
+
+ g_free (data);
+}
+
+static void
+on_reload_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GDBusConnection *connection = G_DBUS_CONNECTION (source_object);
+ GVariant *value;
+ GError *error = NULL;
+
+ value = g_dbus_connection_call_finish (connection, res, &error);
+ if (!value) {
+ g_warning ("Failed to Reload: %s", error->message);
+ g_error_free (error);
+ }
+ g_variant_unref (value);
+
+ ev_application_shutdown (EV_APP);
+}
+
+static void
+on_register_uri_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GDBusConnection *connection = G_DBUS_CONNECTION (source_object);
+ EvRegisterDocData *data = (EvRegisterDocData *)user_data;
+ EvApplication *application = EV_APP;
+ GVariant *value;
+ const gchar *owner;
+ GVariantBuilder builder;
+ GError *error = NULL;
+
+ value = g_dbus_connection_call_finish (connection, res, &error);
+ if (!value) {
+ g_warning ("Error registering document: %s\n", error->message);
+ g_error_free (error);
+
+ _ev_application_open_uri_at_dest (application,
+ data->uri,
+ data->screen,
+ data->dest,
+ data->mode,
+ data->search_string,
+ data->timestamp);
+ ev_register_doc_data_free (data);
+
+ return;
+ }
+
+ g_variant_get (value, "(&s)", &owner);
+
+ /* This means that the document wasn't already registered; go
+ * ahead with opening it.
+ */
+ if (owner[0] == '\0') {
+ g_variant_unref (value);
+
+ application->doc_registered = TRUE;
+
+ _ev_application_open_uri_at_dest (application,
+ data->uri,
+ data->screen,
+ data->dest,
+ data->mode,
+ data->search_string,
+ data->timestamp);
+ ev_register_doc_data_free (data);
+
+ return;
+ }
+
+ /* Already registered */
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("(a{sv}u)"));
+ g_variant_builder_open (&builder, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&builder, "{sv}",
+ "display",
+ g_variant_new_string (gdk_display_get_name (gdk_screen_get_display (data->screen))));
+ g_variant_builder_add (&builder, "{sv}",
+ "screen",
+ g_variant_new_int32 (gdk_screen_get_number (data->screen)));
+ if (data->dest) {
+ g_variant_builder_add (&builder, "{sv}",
+ "page-label",
+ g_variant_new_string (ev_link_dest_get_page_label (data->dest)));
+ }
+ if (data->search_string) {
+ g_variant_builder_add (&builder, "{sv}",
+ "find-string",
+ g_variant_new_string (data->search_string));
+ }
+ if (data->mode != EV_WINDOW_MODE_NORMAL) {
+ g_variant_builder_add (&builder, "{sv}",
+ "mode",
+ g_variant_new_uint32 (data->mode));
+ }
+ g_variant_builder_close (&builder);
+
+ g_variant_builder_add (&builder, "u", data->timestamp);
+
+ g_dbus_connection_call (connection,
+ owner,
+ APPLICATION_DBUS_OBJECT_PATH,
+ APPLICATION_DBUS_INTERFACE,
+ "Reload",
+ g_variant_builder_end (&builder),
+ NULL,
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ on_reload_cb,
+ NULL);
+ g_variant_unref (value);
+ ev_register_doc_data_free (data);
+}
+
+/*
+ * ev_application_register_uri:
+ * @application:
+ * @uri:
+ * @screen:
+ * @dest:
+ * @mode:
+ * @search_string:
+ * @timestamp:
+ *
+ * Registers @uri with evince-daemon.
+ *
+ */
+static void
+ev_application_register_uri (EvApplication *application,
+ const gchar *uri,
+ GdkScreen *screen,
+ EvLinkDest *dest,
+ EvWindowRunMode mode,
+ const gchar *search_string,
+ guint timestamp)
+{
+ EvRegisterDocData *data;
+
+ if (!application->connection)
+ return;
+
+ if (application->doc_registered) {
+ /* Already registered, reload */
+ GList *windows, *l;
+
+ windows = ev_application_get_windows (application);
+ for (l = windows; l != NULL; l = g_list_next (l)) {
+ EvWindow *ev_window = EV_WINDOW (l->data);
+
+ ev_application_open_uri_in_window (application, uri, ev_window,
+ screen, dest, mode,
+ search_string,
+ timestamp);
+ }
+ g_list_free (windows);
+
+ return;
+ }
+
+ data = g_new (EvRegisterDocData, 1);
+ data->uri = g_strdup (uri);
+ data->screen = screen;
+ data->dest = dest ? g_object_ref (dest) : NULL;
+ data->mode = mode;
+ data->search_string = search_string ? g_strdup (search_string) : NULL;
+ data->timestamp = timestamp;
+
+ g_dbus_connection_call (application->connection,
+ EVINCE_DAEMON_SERVICE,
+ EVINCE_DAEMON_OBJECT_PATH,
+ EVINCE_DAEMON_INTERFACE,
+ "RegisterDocument",
+ g_variant_new ("(s)", uri),
+ G_VARIANT_TYPE ("(s)"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ on_register_uri_cb,
+ data);
+}
+
+static void
+ev_application_unregister_uri (EvApplication *application,
+ const gchar *uri)
+{
+ GVariant *value;
+ GError *error = NULL;
+
+ if (!application->doc_registered)
+ return;
+
+ /* This is called from ev_application_shutdown(),
+ * so it's safe to use the sync api
+ */
+ value = g_dbus_connection_call_sync (
+ application->connection,
+ EVINCE_DAEMON_SERVICE,
+ EVINCE_DAEMON_OBJECT_PATH,
+ EVINCE_DAEMON_INTERFACE,
+ "UnregisterDocument",
+ g_variant_new ("(s)", uri),
+ NULL,
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ -1,
+ NULL,
+ &error);
+ if (value == NULL) {
+ g_warning ("Error unregistering document: %s\n", error->message);
+ g_error_free (error);
+ } else {
+ g_variant_unref (value);
+ }
+}
+#endif /* ENABLE_DBUS */
+
+static void
+ev_application_open_uri_in_window (EvApplication *application,
+ const char *uri,
+ EvWindow *ev_window,
+ GdkScreen *screen,
+ EvLinkDest *dest,
+ EvWindowRunMode mode,
+ const gchar *search_string,
+ guint timestamp)
+{
+#ifdef GDK_WINDOWING_X11
+ GdkWindow *gdk_window;
+#endif
+
+ if (screen) {
+ ev_stock_icons_set_screen (screen);
+ gtk_window_set_screen (GTK_WINDOW (ev_window), screen);
+ }
+
+ /* We need to load uri before showing the window, so
+ we can restore window size without flickering */
+ ev_window_open_uri (ev_window, uri, dest, mode, search_string);
+
+ if (!gtk_widget_get_realized (GTK_WIDGET (ev_window)))
+ gtk_widget_realize (GTK_WIDGET (ev_window));
+
+#ifdef GDK_WINDOWING_X11
+ gdk_window = gtk_widget_get_window (GTK_WIDGET (ev_window));
+
+ if (timestamp <= 0)
+ timestamp = gdk_x11_get_server_time (gdk_window);
+ gdk_x11_window_set_user_time (gdk_window, timestamp);
+
+ gtk_window_present (GTK_WINDOW (ev_window));
+#else
+ gtk_window_present_with_time (GTK_WINDOW (ev_window), timestamp);
+#endif /* GDK_WINDOWING_X11 */
+}
+
+static void
+_ev_application_open_uri_at_dest (EvApplication *application,
+ const gchar *uri,
+ GdkScreen *screen,
+ EvLinkDest *dest,
+ EvWindowRunMode mode,
+ const gchar *search_string,
+ guint timestamp)
+{
+ EvWindow *ev_window;
+
+ ev_window = ev_application_get_empty_window (application, screen);
+ if (!ev_window)
+ ev_window = EV_WINDOW (ev_window_new ());
+
+ ev_application_open_uri_in_window (application, uri, ev_window,
+ screen, dest, mode,
+ search_string,
+ timestamp);
+}
+
+/**
+ * ev_application_open_uri_at_dest:
+ * @application: The instance of the application.
+ * @uri: The uri to be opened.
+ * @screen: Thee screen where the link will be shown.
+ * @dest: The #EvLinkDest of the document.
+ * @mode: The run mode of the window.
+ * @timestamp: Current time value.
+ */
+void
+ev_application_open_uri_at_dest (EvApplication *application,
+ const char *uri,
+ GdkScreen *screen,
+ EvLinkDest *dest,
+ EvWindowRunMode mode,
+ const gchar *search_string,
+ guint timestamp)
+{
+ g_return_if_fail (uri != NULL);
+
+ if (application->uri && strcmp (application->uri, uri) != 0) {
+ /* spawn a new evince process */
+ ev_spawn (uri, screen, dest, mode, search_string, timestamp);
+ return;
+ } else if (!application->uri) {
+ application->uri = g_strdup (uri);
+ }
+
+#ifdef ENABLE_DBUS
+ /* Register the uri or send Reload to
+ * remote instance if already registered
+ */
+ ev_application_register_uri (application, uri, screen, dest, mode, search_string, timestamp);
+#else
+ _ev_application_open_uri_at_dest (application, uri, screen, dest, mode, search_string, timestamp);
+#endif /* ENABLE_DBUS */
+}
+
+/**
+ * ev_application_open_window:
+ * @application: The instance of the application.
+ * @timestamp: Current time value.
+ *
+ * Creates a new window
+ */
+void
+ev_application_open_window (EvApplication *application,
+ GdkScreen *screen,
+ guint32 timestamp)
+{
+ GtkWidget *new_window = ev_window_new ();
+#ifdef GDK_WINDOWING_X11
+ GdkWindow *gdk_window;
+#endif
+
+ if (screen) {
+ ev_stock_icons_set_screen (screen);
+ gtk_window_set_screen (GTK_WINDOW (new_window), screen);
+ }
+
+ if (!gtk_widget_get_realized (new_window))
+ gtk_widget_realize (new_window);
+
+#ifdef GDK_WINDOWING_X11
+ gdk_window = gtk_widget_get_window (GTK_WIDGET (new_window));
+
+ if (timestamp <= 0)
+ timestamp = gdk_x11_get_server_time (gdk_window);
+ gdk_x11_window_set_user_time (gdk_window, timestamp);
+
+ gtk_window_present (GTK_WINDOW (new_window));
+#else
+ gtk_window_present_with_time (GTK_WINDOW (new_window), timestamp);
+#endif /* GDK_WINDOWING_X11 */
+}
+
+#ifdef ENABLE_DBUS
+static void
+method_call_cb (GDBusConnection *connection,
+ const gchar *sender,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ EvApplication *application = EV_APPLICATION (user_data);
+ GList *windows, *l;
+ guint timestamp;
+ GVariantIter *iter;
+ const gchar *key;
+ GVariant *value;
+ GdkDisplay *display = NULL;
+ int screen_number = 0;
+ EvLinkDest *dest = NULL;
+ EvWindowRunMode mode = EV_WINDOW_MODE_NORMAL;
+ const gchar *search_string = NULL;
+ GdkScreen *screen = NULL;
+
+ if (g_strcmp0 (method_name, "Reload") == 0) {
+ g_variant_get (parameters, "(a{sv}u)", &iter, &timestamp);
+
+ while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
+ if (strcmp (key, "display") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_STRING) {
+ display = ev_display_open_if_needed (g_variant_get_string (value, NULL));
+ } else if (strcmp (key, "screen") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_STRING) {
+ screen_number = g_variant_get_int32 (value);
+ } else if (strcmp (key, "mode") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_UINT32) {
+ mode = g_variant_get_uint32 (value);
+ } else if (strcmp (key, "page-label") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_STRING) {
+ dest = ev_link_dest_new_page_label (g_variant_get_string (value, NULL));
+ } else if (strcmp (key, "find-string") == 0 && g_variant_classify (value) == G_VARIANT_CLASS_STRING) {
+ search_string = g_variant_get_string (value, NULL);
+ }
+ }
+ g_variant_iter_free (iter);
+
+ if (display != NULL &&
+ screen_number >= 0 &&
+ screen_number < gdk_display_get_n_screens (display))
+ screen = gdk_display_get_screen (display, screen_number);
+ else
+ screen = gdk_screen_get_default ();
+
+ windows = ev_application_get_windows (application);
+ for (l = windows; l != NULL; l = g_list_next (l)) {
+ EvWindow *ev_window = EV_WINDOW (l->data);
+
+ ev_application_open_uri_in_window (application, application->uri,
+ ev_window,
+ screen, dest, mode,
+ search_string,
+ timestamp);
+ }
+ g_list_free (windows);
+
+ if (dest)
+ g_object_unref (dest);
+
+ g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
+ } else if (g_strcmp0 (method_name, "GetWindowList") == 0) {
+ GList *windows = ev_application_get_windows (application);
+ GVariantBuilder builder;
+ GList *l;
+
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("(ao)"));
+ g_variant_builder_open (&builder, G_VARIANT_TYPE ("ao"));
+
+ for (l = windows; l; l = g_list_next (l)) {
+ EvWindow *window = (EvWindow *)l->data;
+
+ g_variant_builder_add (&builder, "o", ev_window_get_dbus_object_path (window));
+ }
+
+ g_variant_builder_close (&builder);
+ g_list_free (windows);
+
+ g_dbus_method_invocation_return_value (invocation, g_variant_builder_end (&builder));
+ }
+}
+
+static const char introspection_xml[] =
+ "<node>"
+ "<interface name='org.mate.evince.Application'>"
+ "<method name='Reload'>"
+ "<arg type='a{sv}' name='args' direction='in'/>"
+ "<arg type='u' name='timestamp' direction='in'/>"
+ "</method>"
+ "<method name='GetWindowList'>"
+ "<arg type='ao' name='window_list' direction='out'/>"
+ "</method>"
+ "</interface>"
+ "</node>";
+
+static const GDBusInterfaceVTable interface_vtable = {
+ method_call_cb,
+ NULL,
+ NULL
+};
+
+static GDBusNodeInfo *introspection_data;
+#endif /* ENABLE_DBUS */
+
+void
+ev_application_open_uri_list (EvApplication *application,
+ GSList *uri_list,
+ GdkScreen *screen,
+ guint timestamp)
+{
+ GSList *l;
+
+ for (l = uri_list; l != NULL; l = l->next) {
+ ev_application_open_uri_at_dest (application, (char *)l->data,
+ screen, NULL, 0, NULL,
+ timestamp);
+ }
+}
+
+static void
+ev_application_accel_map_save (EvApplication *application)
+{
+ gchar *accel_map_file;
+ gchar *tmp_filename;
+ gint fd;
+
+ if (userdir) {
+ accel_map_file = g_build_filename (userdir, "accels",
+ "evince", NULL);
+ } else {
+ accel_map_file = g_build_filename (g_get_home_dir (),
+ ".mate2", "accels",
+ "evince", NULL);
+ }
+
+ tmp_filename = g_strdup_printf ("%s.XXXXXX", accel_map_file);
+
+ fd = g_mkstemp (tmp_filename);
+ if (fd == -1) {
+ g_free (accel_map_file);
+ g_free (tmp_filename);
+
+ return;
+ }
+ gtk_accel_map_save_fd (fd);
+ close (fd);
+
+ if (g_rename (tmp_filename, accel_map_file) == -1) {
+ /* FIXME: win32? */
+ g_unlink (tmp_filename);
+ }
+
+ g_free (accel_map_file);
+ g_free (tmp_filename);
+}
+
+static void
+ev_application_accel_map_load (EvApplication *application)
+{
+ gchar *accel_map_file;
+
+ if (userdir) {
+ accel_map_file = g_build_filename (userdir, "accels",
+ "evince", NULL);
+ } else {
+ accel_map_file = g_build_filename (g_get_home_dir (),
+ ".mate2", "accels",
+ "evince", NULL);
+ }
+
+ gtk_accel_map_load (accel_map_file);
+ g_free (accel_map_file);
+}
+
+void
+ev_application_shutdown (EvApplication *application)
+{
+ if (application->uri) {
+#ifdef ENABLE_DBUS
+ ev_application_unregister_uri (application,
+ application->uri);
+#endif
+ g_free (application->uri);
+ application->uri = NULL;
+ }
+
+ ev_application_accel_map_save (application);
+
+ g_object_unref (application->scr_saver);
+ application->scr_saver = NULL;
+
+#ifdef ENABLE_DBUS
+ if (application->keys) {
+ g_object_unref (application->keys);
+ application->keys = NULL;
+ }
+ if (application->registration_id != 0) {
+ g_dbus_connection_unregister_object (application->connection,
+ application->registration_id);
+ application->registration_id = 0;
+ }
+ if (application->connection != NULL) {
+ g_object_unref (application->connection);
+ application->connection = NULL;
+ }
+ if (introspection_data) {
+ g_dbus_node_info_ref (introspection_data);
+ introspection_data = NULL;
+ }
+#endif /* ENABLE_DBUS */
+
+ g_free (application->dot_dir);
+ application->dot_dir = NULL;
+ g_free (application->data_dir);
+ application->data_dir = NULL;
+ g_free (application->filechooser_open_uri);
+ application->filechooser_open_uri = NULL;
+ g_free (application->filechooser_save_uri);
+ application->filechooser_save_uri = NULL;
+
+ g_object_unref (application);
+ instance = NULL;
+
+ gtk_main_quit ();
+}
+
+static void
+ev_application_class_init (EvApplicationClass *ev_application_class)
+{
+}
+
+static void
+ev_application_init (EvApplication *ev_application)
+{
+ GError *error = NULL;
+
+ userdir = g_getenv ("MATE22_USER_DIR");
+ if (userdir)
+ ev_application->dot_dir = g_build_filename (userdir, "evince", NULL);
+ else
+ ev_application->dot_dir = g_build_filename (g_get_home_dir (),
+ ".mate2",
+ "evince",
+ NULL);
+
+#ifdef G_OS_WIN32
+{
+ gchar *dir;
+
+ dir = g_win32_get_package_installation_directory_of_module (NULL);
+ ev_application->data_dir = g_build_filename (dir, "share", "evince", NULL);
+ g_free (dir);
+}
+#else
+ ev_application->data_dir = g_strdup (EVINCEDATADIR);
+#endif
+
+ ev_application_init_session (ev_application);
+
+ ev_application_accel_map_load (ev_application);
+
+#ifdef ENABLE_DBUS
+ ev_application->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+ if (ev_application->connection != NULL) {
+ introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
+ g_assert (introspection_data != NULL);
+
+ ev_application->registration_id =
+ g_dbus_connection_register_object (ev_application->connection,
+ APPLICATION_DBUS_OBJECT_PATH,
+ introspection_data->interfaces[0],
+ &interface_vtable,
+ ev_application, NULL,
+ &error);
+ if (ev_application->registration_id == 0) {
+ g_printerr ("Failed to register bus object: %s\n", error->message);
+ g_error_free (error);
+ }
+ } else {
+ g_printerr ("Failed to get bus connection: %s\n", error->message);
+ g_error_free (error);
+ }
+
+ ev_application->keys = ev_media_player_keys_new ();
+#endif /* ENABLE_DBUS */
+
+ ev_application->scr_saver = totem_scrsaver_new ();
+ g_object_set (ev_application->scr_saver,
+ "reason", _("Running in presentation mode"),
+ NULL);
+}
+
+GDBusConnection *
+ev_application_get_dbus_connection (EvApplication *application)
+{
+#ifdef ENABLE_DBUS
+ return application->connection;
+#else
+ return NULL;
+#endif
+}
+
+gboolean
+ev_application_has_window (EvApplication *application)
+{
+ GList *l, *toplevels;
+ gboolean retval = FALSE;
+
+ toplevels = gtk_window_list_toplevels ();
+
+ for (l = toplevels; l != NULL && !retval; l = l->next) {
+ if (EV_IS_WINDOW (l->data))
+ retval = TRUE;
+ }
+
+ g_list_free (toplevels);
+
+ return retval;
+}
+
+guint
+ev_application_get_n_windows (EvApplication *application)
+{
+ GList *l, *toplevels;
+ guint retval = 0;
+
+ toplevels = gtk_window_list_toplevels ();
+
+ for (l = toplevels; l != NULL; l = l->next) {
+ if (EV_IS_WINDOW (l->data))
+ retval++;
+ }
+
+ g_list_free (toplevels);
+
+ return retval;
+}
+
+const gchar *
+ev_application_get_uri (EvApplication *application)
+{
+ return application->uri;
+}
+
+/**
+ * ev_application_get_media_keys:
+ * @application: The instance of the application.
+ *
+ * It gives you access to the media player keys handler object.
+ *
+ * Returns: A #EvMediaPlayerKeys.
+ */
+GObject *
+ev_application_get_media_keys (EvApplication *application)
+{
+#ifdef ENABLE_DBUS
+ return G_OBJECT (application->keys);
+#else
+ return NULL;
+#endif /* ENABLE_DBUS */
+}
+
+void
+ev_application_set_filechooser_uri (EvApplication *application,
+ GtkFileChooserAction action,
+ const gchar *uri)
+{
+ if (action == GTK_FILE_CHOOSER_ACTION_OPEN) {
+ g_free (application->filechooser_open_uri);
+ application->filechooser_open_uri = g_strdup (uri);
+ } else if (action == GTK_FILE_CHOOSER_ACTION_SAVE) {
+ g_free (application->filechooser_save_uri);
+ application->filechooser_save_uri = g_strdup (uri);
+ }
+}
+
+const gchar *
+ev_application_get_filechooser_uri (EvApplication *application,
+ GtkFileChooserAction action)
+{
+ if (action == GTK_FILE_CHOOSER_ACTION_OPEN) {
+ if (application->filechooser_open_uri)
+ return application->filechooser_open_uri;
+ } else if (action == GTK_FILE_CHOOSER_ACTION_SAVE) {
+ if (application->filechooser_save_uri)
+ return application->filechooser_save_uri;
+ }
+
+ return NULL;
+}
+
+void
+ev_application_screensaver_enable (EvApplication *application)
+{
+ totem_scrsaver_enable (application->scr_saver);
+}
+
+void
+ev_application_screensaver_disable (EvApplication *application)
+{
+ totem_scrsaver_disable (application->scr_saver);
+}
+
+const gchar *
+ev_application_get_dot_dir (EvApplication *application,
+ gboolean create)
+{
+ if (create)
+ g_mkdir_with_parents (application->dot_dir, 0700);
+
+ return application->dot_dir;
+}
+
+const gchar *
+ev_application_get_data_dir (EvApplication *application)
+{
+ return application->data_dir;
+}
diff --git a/shell/ev-application.h b/shell/ev-application.h
new file mode 100644
index 00000000..1e21ebde
--- /dev/null
+++ b/shell/ev-application.h
@@ -0,0 +1,88 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Martin Kretzschmar
+ *
+ * Author:
+ * Martin Kretzschmar <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 EV_APPLICATION_H
+#define EV_APPLICATION_H
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include "ev-window.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvApplication EvApplication;
+typedef struct _EvApplicationClass EvApplicationClass;
+
+#define EV_TYPE_APPLICATION (ev_application_get_type ())
+#define EV_APPLICATION(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_APPLICATION, EvApplication))
+#define EV_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_APPLICATION, EvApplicationClass))
+#define EV_IS_APPLICATION(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_APPLICATION))
+#define EV_IS_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_APPLICATION))
+#define EV_APPLICATION_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_APPLICATION, EvApplicationClass))
+
+#define EV_APP (ev_application_get_instance ())
+
+GType ev_application_get_type (void) G_GNUC_CONST;
+EvApplication *ev_application_get_instance (void);
+
+void ev_application_shutdown (EvApplication *application);
+gboolean ev_application_load_session (EvApplication *application);
+void ev_application_open_window (EvApplication *application,
+ GdkScreen *screen,
+ guint32 timestamp);
+void ev_application_open_uri_at_dest (EvApplication *application,
+ const char *uri,
+ GdkScreen *screen,
+ EvLinkDest *dest,
+ EvWindowRunMode mode,
+ const gchar *search_string,
+ guint32 timestamp);
+void ev_application_open_uri_list (EvApplication *application,
+ GSList *uri_list,
+ GdkScreen *screen,
+ guint32 timestamp);
+GDBusConnection *ev_application_get_dbus_connection (EvApplication *application);
+gboolean ev_application_has_window (EvApplication *application);
+guint ev_application_get_n_windows (EvApplication *application);
+const gchar * ev_application_get_uri (EvApplication *application);
+GObject *ev_application_get_media_keys (EvApplication *application);
+
+void ev_application_set_filechooser_uri (EvApplication *application,
+ GtkFileChooserAction action,
+ const gchar *uri);
+const gchar *ev_application_get_filechooser_uri (EvApplication *application,
+ GtkFileChooserAction action);
+void ev_application_screensaver_enable (EvApplication *application);
+void ev_application_screensaver_disable (EvApplication *application);
+const gchar *ev_application_get_dot_dir (EvApplication *application,
+ gboolean create);
+const gchar *ev_application_get_data_dir (EvApplication *application);
+
+G_END_DECLS
+
+#endif /* !EV_APPLICATION_H */
+
diff --git a/shell/ev-convert-metadata.c b/shell/ev-convert-metadata.c
new file mode 100644
index 00000000..485ce133
--- /dev/null
+++ b/shell/ev-convert-metadata.c
@@ -0,0 +1,302 @@
+/* ev-convert-metadata.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include <gtk/gtk.h>
+#include <glib.h>
+#include <gio/gio.h>
+#include <glib/gi18n.h>
+#include <string.h>
+#include <libxml/tree.h>
+
+#define EV_METADATA_NAMESPACE "metadata::evince"
+
+typedef struct {
+ xmlNodePtr cur;
+ xmlChar *uri;
+} DocItem;
+
+typedef struct {
+ GtkWidget *progress;
+ GtkWidget *label;
+
+ xmlDocPtr doc;
+ GList *items;
+ GList *current;
+ guint n_item;
+} ConvertData;
+
+static void
+free_doc_item (DocItem *item)
+{
+ xmlFree (item->uri);
+ g_free (item);
+}
+
+static void
+convert_finish (ConvertData *data)
+{
+ g_list_foreach (data->items, (GFunc)free_doc_item, NULL);
+ g_list_free (data->items);
+ xmlFreeDoc (data->doc);
+ g_free (data);
+
+ gtk_main_quit ();
+}
+
+static gboolean
+convert_file (ConvertData *data)
+{
+ GFile *file;
+ DocItem *item;
+ const gchar *uri;
+ xmlNodePtr node;
+ xmlNodePtr cur;
+ gint total, current;
+ gchar *text;
+
+ if (!data->current)
+ return FALSE;
+
+ item = (DocItem *) data->current->data;
+ uri = (const gchar *)item->uri;
+ node = item->cur;
+ data->current = g_list_next (data->current);
+
+ /* Update progress information */
+ total = g_list_length (data->items);
+ current = ++(data->n_item);
+
+ text = g_strdup_printf (_("Converting %s"), uri);
+ gtk_label_set_text (GTK_LABEL (data->label), text);
+ g_free (text);
+
+ text = g_strdup_printf (_("%d of %d documents converted"), current, total);
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (data->progress), text);
+ g_free (text);
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (data->progress),
+ (gdouble)(current - 1) / total);
+
+ file = g_file_new_for_uri (uri);
+ if (!g_file_query_exists (file, NULL)) {
+ g_printerr ("Uri %s does not exist\n", uri);
+ g_object_unref (file);
+
+ return data->current != NULL;
+ }
+
+ for (cur = node->xmlChildrenNode; cur != NULL; cur = cur->next) {
+ xmlChar *key;
+ xmlChar *value;
+
+ if (xmlStrcmp (cur->name, (const xmlChar *)"entry") != 0)
+ continue;
+
+ key = xmlGetProp (cur, (const xmlChar *)"key");
+ value = xmlGetProp (cur, (const xmlChar *)"value");
+ if (key && value) {
+ GFileInfo *info;
+ gchar *gio_key;
+ GError *error = NULL;
+
+ info = g_file_info_new ();
+
+ gio_key = g_strconcat (EV_METADATA_NAMESPACE"::", key, NULL);
+ g_file_info_set_attribute_string (info, gio_key, (const gchar *)value);
+ g_free (gio_key);
+
+ if (!g_file_set_attributes_from_info (file, info, 0, NULL, &error)) {
+ g_printerr ("Error setting metadata for %s: %s\n",
+ uri, error->message);
+ g_error_free (error);
+ }
+
+ g_object_unref (info);
+ }
+
+ if (key)
+ xmlFree (key);
+ if (value)
+ xmlFree (value);
+ }
+
+ g_object_unref (file);
+
+ return data->current != NULL;
+}
+
+static void
+convert_metadata_cancel (GtkDialog *dialog,
+ gint response_id,
+ ConvertData *data)
+{
+ convert_finish (data);
+ exit (1);
+}
+
+static void
+show_progress_dialog (ConvertData *data)
+{
+ GtkWidget *dialog;
+ GtkWidget *action_area;
+ GtkWidget *vbox, *pbox;
+ GtkWidget *label;
+ GtkWidget *progress;
+ gchar *text;
+
+ dialog = gtk_dialog_new_with_buttons (_("Converting metadata"),
+ NULL,
+ GTK_DIALOG_NO_SEPARATOR,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ NULL);
+ action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog));
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+ gtk_container_set_border_width (GTK_CONTAINER (action_area), 5);
+ gtk_box_set_spacing (GTK_BOX (action_area), 6);
+
+ vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+ gtk_box_set_spacing (GTK_BOX (vbox), 12);
+
+ label = gtk_label_new (NULL);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
+ text = g_strdup_printf ("<b>%s</b>", _("Converting metadata"));
+ gtk_label_set_markup (GTK_LABEL (label), text);
+ g_free (text);
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ label = gtk_label_new (_("The metadata format used by Evince "
+ "has changed, and hence it needs to be migrated. "
+ "If the migration is cancelled the metadata "
+ "storage will not work."));
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
+ gtk_widget_show (label);
+
+ pbox = gtk_vbox_new (FALSE, 6);
+ progress = gtk_progress_bar_new ();
+ data->progress = progress;
+ gtk_box_pack_start (GTK_BOX (pbox), progress, TRUE, TRUE, 0);
+ gtk_widget_show (progress);
+
+ label = gtk_label_new (NULL);
+ data->label = label;
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
+ gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
+ gtk_box_pack_start (GTK_BOX (pbox), label, FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ gtk_box_pack_start (GTK_BOX (vbox), pbox, TRUE, TRUE, 0);
+ gtk_widget_show (pbox);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (convert_metadata_cancel),
+ data);
+
+ gtk_widget_show (dialog);
+}
+
+static gboolean
+convert_metadata_file (const gchar *filename)
+{
+ ConvertData *data;
+ xmlDocPtr doc;
+ xmlNodePtr cur;
+
+ if (!g_file_test (filename, G_FILE_TEST_EXISTS))
+ return FALSE;
+
+ doc = xmlParseFile (filename);
+ if (!doc) {
+ g_printerr ("Error loading metadata file %s\n", filename);
+ return FALSE;
+ }
+
+ cur = xmlDocGetRootElement (doc);
+ if (!cur) {
+ g_printerr ("Metadata file %s is empty\n", filename);
+ xmlFreeDoc (doc);
+ return TRUE;
+ }
+
+ if (xmlStrcmp (cur->name, (const xmlChar *) "metadata")) {
+ g_printerr ("File %s is not a valid evince metadata file\n", filename);
+ xmlFreeDoc (doc);
+ return FALSE;
+ }
+
+ data = g_new0 (ConvertData, 1);
+ data->doc = doc;
+
+ for (cur = cur->xmlChildrenNode; cur != NULL; cur = cur->next) {
+ xmlChar *uri;
+ DocItem *item;
+
+ if (xmlStrcmp (cur->name, (const xmlChar *)"document") != 0)
+ continue;
+
+ uri = xmlGetProp (cur, (const xmlChar *)"uri");
+ if (!uri)
+ continue;
+
+ item = g_new (DocItem, 1);
+ item->uri = uri;
+ item->cur = cur;
+ data->items = g_list_prepend (data->items, item);
+ }
+
+ if (!data->items) {
+ xmlFreeDoc (data->doc);
+ g_free (data);
+
+ return TRUE;
+ }
+
+ show_progress_dialog (data);
+
+ data->current = data->items;
+ g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+ (GSourceFunc)convert_file,
+ data,
+ (GDestroyNotify)convert_finish);
+
+ return TRUE;
+}
+
+gint
+main (gint argc, gchar **argv)
+{
+ if (argc != 2) {
+ g_printerr ("%s\n", "Usage: evince-convert-metadata FILE");
+ return 1;
+ }
+
+ gtk_init (&argc, &argv);
+
+ if (!convert_metadata_file (argv[1]))
+ return 1;
+
+ gtk_main ();
+
+ return 0;
+}
diff --git a/shell/ev-daemon.c b/shell/ev-daemon.c
new file mode 100644
index 00000000..53bd30ea
--- /dev/null
+++ b/shell/ev-daemon.c
@@ -0,0 +1,553 @@
+/* ev-metadata.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ * Copyright © 2010 Christian Persch
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include <glib.h>
+#include <glib/gstdio.h>
+#include <gio/gio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#define EV_DBUS_DAEMON_NAME "org.mate.evince.Daemon"
+#define EV_DBUS_DAEMON_INTERFACE_NAME "org.mate.evince.Daemon"
+#define EV_DBUS_DAEMON_OBJECT_PATH "/org/mate/evince/Daemon"
+
+#define EV_DBUS_WINDOW_INTERFACE_NAME "org.mate.evince.Window"
+
+#define DAEMON_TIMEOUT (30) /* seconds */
+
+#define LOG g_printerr
+
+static GList *ev_daemon_docs = NULL;
+static guint kill_timer_id;
+static GHashTable *pending_invocations = NULL;
+
+typedef struct {
+ gchar *dbus_name;
+ gchar *uri;
+ guint watch_id;
+ guint loaded_id;
+} EvDoc;
+
+static void
+ev_doc_free (EvDoc *doc)
+{
+ if (!doc)
+ return;
+
+ g_free (doc->dbus_name);
+ g_free (doc->uri);
+
+ g_bus_unwatch_name (doc->watch_id);
+
+ g_free (doc);
+}
+
+static EvDoc *
+ev_daemon_find_doc (const gchar *uri)
+{
+ GList *l;
+
+ for (l = ev_daemon_docs; l != NULL; l = l->next) {
+ EvDoc *doc = (EvDoc *)l->data;
+
+ if (strcmp (doc->uri, uri) == 0)
+ return doc;
+ }
+
+ return NULL;
+}
+
+static void
+ev_daemon_stop_killtimer (void)
+{
+ if (kill_timer_id != 0)
+ g_source_remove (kill_timer_id);
+ kill_timer_id = 0;
+}
+
+static gboolean
+ev_daemon_shutdown (gpointer user_data)
+{
+ GMainLoop *loop = (GMainLoop *) user_data;
+
+ LOG ("Timeout; exiting daemon.\n");
+
+ if (g_main_loop_is_running (loop))
+ g_main_loop_quit (loop);
+
+ return FALSE;
+}
+
+static void
+ev_daemon_maybe_start_killtimer (gpointer data)
+{
+ ev_daemon_stop_killtimer ();
+ if (ev_daemon_docs != NULL)
+ return;
+
+ kill_timer_id = g_timeout_add_seconds (DAEMON_TIMEOUT,
+ (GSourceFunc) ev_daemon_shutdown,
+ data);
+}
+
+static gboolean
+convert_metadata (const gchar *metadata)
+{
+ GFile *file;
+ char *argv[3];
+ gint exit_status;
+ GFileAttributeInfoList *namespaces;
+ gboolean supported = FALSE;
+ GError *error = NULL;
+ gboolean retval;
+
+ /* If metadata is not supported for a local file
+ * is likely because and old gvfs version is running.
+ */
+ file = g_file_new_for_path (metadata);
+ namespaces = g_file_query_writable_namespaces (file, NULL, NULL);
+ if (namespaces) {
+ gint i;
+
+ for (i = 0; i < namespaces->n_infos; i++) {
+ if (strcmp (namespaces->infos[i].name, "metadata") == 0) {
+ supported = TRUE;
+ break;
+ }
+ }
+ g_file_attribute_info_list_unref (namespaces);
+ }
+ if (!supported) {
+ g_warning ("GVFS metadata not supported. "
+ "Evince will run without metadata support.\n");
+ g_object_unref (file);
+ return FALSE;
+ }
+ g_object_unref (file);
+
+ argv[0] = g_build_filename (LIBEXECDIR, "evince-convert-metadata", NULL);
+ argv[1] = (char *) metadata;
+ argv[2] = NULL;
+
+ retval = g_spawn_sync (NULL /* wd */, argv, NULL /* env */,
+ 0, NULL, NULL, NULL, NULL,
+ &exit_status, &error);
+ g_free (argv[0]);
+
+ if (!retval) {
+ g_printerr ("Error migrating metadata: %s\n", error->message);
+ g_error_free (error);
+ }
+
+ return retval && WIFEXITED (exit_status) && WEXITSTATUS (exit_status) == 0;
+}
+
+static void
+ev_migrate_metadata (void)
+{
+ gchar *updated;
+ gchar *metadata;
+ gchar *dot_dir;
+ const gchar *userdir;
+
+ userdir = g_getenv ("MATE22_USER_DIR");
+ if (userdir) {
+ dot_dir = g_build_filename (userdir, "evince", NULL);
+ } else {
+ dot_dir = g_build_filename (g_get_home_dir (),
+ ".mate2",
+ "evince",
+ NULL);
+ }
+
+ updated = g_build_filename (dot_dir, "migrated-to-gvfs", NULL);
+ if (g_file_test (updated, G_FILE_TEST_EXISTS)) {
+ /* Already migrated */
+ g_free (updated);
+ g_free (dot_dir);
+ return;
+ }
+
+ metadata = g_build_filename (dot_dir, "ev-metadata.xml", NULL);
+ if (g_file_test (metadata, G_FILE_TEST_EXISTS)) {
+ if (convert_metadata (metadata)) {
+ gint fd;
+
+ fd = g_creat (updated, 0600);
+ if (fd != -1) {
+ close (fd);
+ }
+ }
+ }
+
+ g_free (dot_dir);
+ g_free (updated);
+ g_free (metadata);
+}
+
+static gboolean
+spawn_evince (const gchar *uri)
+{
+ gchar *argv[3];
+ gboolean retval;
+ GError *error = NULL;
+
+ /* TODO Check that the uri exists */
+ argv[0] = g_build_filename (BINDIR, "evince", NULL);
+ argv[1] = (gchar *) uri;
+ argv[2] = NULL;
+
+ retval = g_spawn_async (NULL /* wd */, argv, NULL /* env */,
+ 0, NULL, NULL, NULL, &error);
+ if (!retval) {
+ g_printerr ("Error spawning evince for uri %s: %s\n", uri, error->message);
+ g_error_free (error);
+ }
+ g_free (argv[0]);
+
+ return retval;
+}
+
+static void
+name_appeared_cb (GDBusConnection *connection,
+ const gchar *name,
+ const gchar *name_owner,
+ gpointer user_data)
+{
+ LOG ("Watch name'%s' appeared with owner '%s'\n", name, name_owner);
+}
+
+static void
+name_vanished_cb (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ GList *l;
+
+ LOG ("Watch name'%s' disappeared\n", name);
+
+ for (l = ev_daemon_docs; l != NULL; l = l->next) {
+ EvDoc *doc = (EvDoc *) l->data;
+
+ if (strcmp (doc->dbus_name, name) != 0)
+ continue;
+
+ LOG ("Watch found URI '%s' for name; removing\n", doc->uri);
+
+ ev_daemon_docs = g_list_delete_link (ev_daemon_docs, l);
+ ev_doc_free (doc);
+
+ ev_daemon_maybe_start_killtimer (user_data);
+ return;
+ }
+}
+
+static void
+process_pending_invocations (const gchar *uri,
+ const gchar *dbus_name)
+{
+ GList *l;
+ GList *uri_invocations;
+
+ LOG ("RegisterDocument process pending invocations for URI %s\n", uri);
+ uri_invocations = g_hash_table_lookup (pending_invocations, uri);
+
+ for (l = uri_invocations; l != NULL; l = l->next) {
+ GDBusMethodInvocation *invocation;
+
+ invocation = (GDBusMethodInvocation *)l->data;
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(s)", dbus_name));
+ }
+
+ g_list_free (uri_invocations);
+ g_hash_table_remove (pending_invocations, uri);
+}
+
+static void
+document_loaded_cb (GDBusConnection *connection,
+ const gchar *sender_name,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ EvDoc *doc)
+{
+ const gchar *uri;
+
+ g_variant_get (parameters, "(&s)", &uri);
+ if (strcmp (uri, doc->uri) == 0)
+ process_pending_invocations (uri, sender_name);
+ g_dbus_connection_signal_unsubscribe (connection, doc->loaded_id);
+}
+
+static void
+method_call_cb (GDBusConnection *connection,
+ const gchar *sender,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ if (g_strcmp0 (interface_name, EV_DBUS_DAEMON_INTERFACE_NAME) != 0)
+ return;
+
+ if (g_strcmp0 (method_name, "RegisterDocument") == 0) {
+ EvDoc *doc;
+ const gchar *uri;
+
+ g_variant_get (parameters, "(&s)", &uri);
+
+ doc = ev_daemon_find_doc (uri);
+ if (doc != NULL) {
+ LOG ("RegisterDocument found owner '%s' for URI '%s'\n", doc->dbus_name, uri);
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(s)", doc->dbus_name));
+ return;
+ }
+
+ ev_daemon_stop_killtimer ();
+
+ doc = g_new (EvDoc, 1);
+ doc->dbus_name = g_strdup (sender);
+ doc->uri = g_strdup (uri);
+
+ doc->loaded_id = g_dbus_connection_signal_subscribe (connection,
+ doc->dbus_name,
+ EV_DBUS_WINDOW_INTERFACE_NAME,
+ "DocumentLoaded",
+ NULL,
+ NULL,
+ 0,
+ (GDBusSignalCallback) document_loaded_cb,
+ doc,
+ NULL);
+ doc->watch_id = g_bus_watch_name_on_connection (connection,
+ sender,
+ G_BUS_NAME_WATCHER_FLAGS_NONE,
+ name_appeared_cb,
+ name_vanished_cb,
+ user_data, NULL);
+
+ LOG ("RegisterDocument registered owner '%s' for URI '%s'\n", doc->dbus_name, uri);
+ ev_daemon_docs = g_list_prepend (ev_daemon_docs, doc);
+
+ g_dbus_method_invocation_return_value (invocation, g_variant_new ("(s)", ""));
+ } else if (g_strcmp0 (method_name, "UnregisterDocument") == 0) {
+ EvDoc *doc;
+ const gchar *uri;
+
+ g_variant_get (parameters, "(&s)", &uri);
+
+ LOG ("UnregisterDocument URI '%s'\n", uri);
+
+ doc = ev_daemon_find_doc (uri);
+ if (doc == NULL) {
+ LOG ("UnregisterDocument URI was not registered!\n");
+ g_dbus_method_invocation_return_error_literal (invocation,
+ G_DBUS_ERROR,
+ G_DBUS_ERROR_INVALID_ARGS,
+ "URI not registered");
+ return;
+ }
+
+ if (strcmp (doc->dbus_name, sender) != 0) {
+ LOG ("UnregisterDocument called by non-owner (owner '%s' sender '%s')\n",
+ doc->dbus_name, sender);
+
+ g_dbus_method_invocation_return_error_literal (invocation,
+ G_DBUS_ERROR,
+ G_DBUS_ERROR_BAD_ADDRESS,
+ "Only owner can call this method");
+ return;
+ }
+
+ ev_daemon_docs = g_list_remove (ev_daemon_docs, doc);
+ ev_doc_free (doc);
+ ev_daemon_maybe_start_killtimer (user_data);
+
+ g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
+ } else if (g_strcmp0 (method_name, "FindDocument") == 0) {
+ EvDoc *doc;
+ const gchar *uri;
+ gboolean spawn;
+
+ g_variant_get (parameters, "(&sb)", &uri, &spawn);
+
+ LOG ("FindDocument URI '%s' \n", uri);
+
+ doc = ev_daemon_find_doc (uri);
+ if (doc != NULL) {
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(s)", doc->dbus_name));
+ return;
+ }
+
+ if (spawn) {
+ GList *uri_invocations;
+ gboolean ret_val = TRUE;
+
+ uri_invocations = g_hash_table_lookup (pending_invocations, uri);
+
+ if (uri_invocations == NULL) {
+ /* Only spawn once. */
+ ret_val = spawn_evince (uri);
+ }
+
+ if (ret_val) {
+ /* Only defer DBUS answer if evince was succesfully spawned */
+ uri_invocations = g_list_prepend (uri_invocations, invocation);
+ g_hash_table_insert (pending_invocations,
+ g_strdup (uri),
+ uri_invocations);
+ return;
+ }
+ }
+
+ LOG ("FindDocument URI '%s' was not registered!\n", uri);
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(s)",""));
+ }
+}
+
+static const char introspection_xml[] =
+ "<node>"
+ "<interface name='org.mate.evince.Daemon'>"
+ "<method name='RegisterDocument'>"
+ "<arg type='s' name='uri' direction='in'/>"
+ "<arg type='s' name='owner' direction='out'/>"
+ "</method>"
+ "<method name='UnregisterDocument'>"
+ "<arg type='s' name='uri' direction='in'/>"
+ "</method>"
+ "<method name='FindDocument'>"
+ "<arg type='s' name='uri' direction='in'/>"
+ "<arg type='b' name='spawn' direction='in'/>"
+ "<arg type='s' name='owner' direction='out'/>"
+ "</method>"
+ "</interface>"
+ "</node>";
+
+static const GDBusInterfaceVTable interface_vtable = {
+ method_call_cb,
+ NULL,
+ NULL
+};
+
+static GDBusNodeInfo *introspection_data;
+
+static void
+bus_acquired_cb (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ GMainLoop *loop = (GMainLoop *) user_data;
+ guint registration_id;
+ GError *error = NULL;
+
+ if (!introspection_data)
+ introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL);
+
+ registration_id = g_dbus_connection_register_object (connection,
+ EV_DBUS_DAEMON_OBJECT_PATH,
+ introspection_data->interfaces[0],
+ &interface_vtable,
+ g_main_loop_ref (loop),
+ (GDestroyNotify) g_main_loop_unref,
+ &error);
+ if (registration_id == 0) {
+ g_printerr ("Failed to register object: %s\n", error->message);
+ g_error_free (error);
+
+ if (g_main_loop_is_running (loop))
+ g_main_loop_quit (loop);
+ }
+}
+
+static void
+name_acquired_cb (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ ev_migrate_metadata ();
+
+ ev_daemon_maybe_start_killtimer (user_data);
+}
+
+static void
+name_lost_cb (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ GMainLoop *loop = (GMainLoop *) user_data;
+
+ /* Failed to acquire the name; exit daemon */
+ if (g_main_loop_is_running (loop))
+ g_main_loop_quit (loop);
+}
+
+gint
+main (gint argc, gchar **argv)
+{
+ GMainLoop *loop;
+ guint owner_id;
+
+ g_set_prgname ("evince-daemon");
+
+ g_type_init ();
+
+ loop = g_main_loop_new (NULL, FALSE);
+
+ pending_invocations = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ (GDestroyNotify)g_free,
+ NULL);
+
+ owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
+ EV_DBUS_DAEMON_NAME,
+ G_BUS_NAME_OWNER_FLAGS_NONE,
+ bus_acquired_cb,
+ name_acquired_cb,
+ name_lost_cb,
+ g_main_loop_ref (loop),
+ (GDestroyNotify) g_main_loop_unref);
+
+ g_main_loop_run (loop);
+
+ g_bus_unown_name (owner_id);
+
+ g_main_loop_unref (loop);
+ if (introspection_data)
+ g_dbus_node_info_unref (introspection_data);
+ g_list_foreach (ev_daemon_docs, (GFunc)ev_doc_free, NULL);
+ g_list_free (ev_daemon_docs);
+ g_hash_table_destroy (pending_invocations);
+
+ return 0;
+}
diff --git a/shell/ev-file-monitor.c b/shell/ev-file-monitor.c
new file mode 100644
index 00000000..3de0ce01
--- /dev/null
+++ b/shell/ev-file-monitor.c
@@ -0,0 +1,168 @@
+/* ev-file-monitor.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include <glib.h>
+#include <gio/gio.h>
+
+#include "ev-file-monitor.h"
+
+enum {
+ CHANGED,
+ N_SIGNALS
+};
+
+struct _EvFileMonitorPrivate {
+ GFileMonitor *monitor;
+
+ guint timeout_id;
+};
+
+static void ev_file_monitor_timeout_start (EvFileMonitor *ev_monitor);
+static void ev_file_monitor_timeout_stop (EvFileMonitor *ev_monitor);
+static void ev_file_monitor_changed_cb (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ EvFileMonitor *ev_monitor);
+
+#define EV_FILE_MONITOR_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_FILE_MONITOR, EvFileMonitorPrivate))
+
+G_DEFINE_TYPE (EvFileMonitor, ev_file_monitor, G_TYPE_OBJECT)
+
+static guint signals[N_SIGNALS];
+
+static void
+ev_file_monitor_init (EvFileMonitor *ev_monitor)
+{
+ ev_monitor->priv = EV_FILE_MONITOR_GET_PRIVATE (ev_monitor);
+}
+
+static void
+ev_file_monitor_finalize (GObject *object)
+{
+ EvFileMonitor *ev_monitor = EV_FILE_MONITOR (object);
+
+ ev_file_monitor_timeout_stop (ev_monitor);
+
+ if (ev_monitor->priv->monitor) {
+ g_signal_handlers_disconnect_by_func (ev_monitor->priv->monitor,
+ ev_file_monitor_changed_cb,
+ ev_monitor);
+ g_object_unref (ev_monitor->priv->monitor);
+ ev_monitor->priv->monitor = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_file_monitor_parent_class)->finalize (object);
+}
+
+static void
+ev_file_monitor_class_init (EvFileMonitorClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (g_object_class, sizeof (EvFileMonitorPrivate));
+
+ g_object_class->finalize = ev_file_monitor_finalize;
+
+ /* Signals */
+ signals[CHANGED] =
+ g_signal_new ("changed",
+ EV_TYPE_FILE_MONITOR,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvFileMonitorClass, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+}
+
+static gboolean
+timeout_cb (EvFileMonitor *ev_monitor)
+{
+ g_signal_emit (ev_monitor, signals[CHANGED], 0);
+
+ ev_monitor->priv->timeout_id = 0;
+ return FALSE;
+}
+
+static void
+ev_file_monitor_timeout_start (EvFileMonitor *ev_monitor)
+{
+ ev_file_monitor_timeout_stop (ev_monitor);
+
+ ev_monitor->priv->timeout_id =
+ g_timeout_add_seconds (5, (GSourceFunc)timeout_cb, ev_monitor);
+}
+
+static void
+ev_file_monitor_timeout_stop (EvFileMonitor *ev_monitor)
+{
+ if (ev_monitor->priv->timeout_id > 0) {
+ g_source_remove (ev_monitor->priv->timeout_id);
+ ev_monitor->priv->timeout_id = 0;
+ }
+}
+
+static void
+ev_file_monitor_changed_cb (GFileMonitor *monitor,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ EvFileMonitor *ev_monitor)
+{
+ switch (event_type) {
+ case G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT:
+ ev_file_monitor_timeout_stop (ev_monitor);
+ g_signal_emit (ev_monitor, signals[CHANGED], 0);
+
+ break;
+ case G_FILE_MONITOR_EVENT_CHANGED:
+ ev_file_monitor_timeout_start (ev_monitor);
+ break;
+ default:
+ break;
+ }
+}
+
+EvFileMonitor *
+ev_file_monitor_new (const gchar *uri)
+{
+ EvFileMonitor *ev_monitor;
+ GFile *file;
+ GError *error = NULL;
+
+ ev_monitor = EV_FILE_MONITOR (g_object_new (EV_TYPE_FILE_MONITOR, NULL));
+
+ file = g_file_new_for_uri (uri);
+ ev_monitor->priv->monitor = g_file_monitor_file (file, G_FILE_MONITOR_NONE, NULL, &error);
+ if (ev_monitor->priv->monitor) {
+ g_signal_connect (ev_monitor->priv->monitor, "changed",
+ G_CALLBACK (ev_file_monitor_changed_cb), ev_monitor);
+ } else if (error) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ }
+
+ g_object_unref (file);
+
+ return ev_monitor;
+}
diff --git a/shell/ev-file-monitor.h b/shell/ev-file-monitor.h
new file mode 100644
index 00000000..6656671f
--- /dev/null
+++ b/shell/ev-file-monitor.h
@@ -0,0 +1,57 @@
+/* ev-file-monitor.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 EV_FILE_MONITOR_H
+#define EV_FILE_MONITOR_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvFileMonitor EvFileMonitor;
+typedef struct _EvFileMonitorClass EvFileMonitorClass;
+typedef struct _EvFileMonitorPrivate EvFileMonitorPrivate;
+
+#define EV_TYPE_FILE_MONITOR (ev_file_monitor_get_type())
+#define EV_FILE_MONITOR(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_FILE_MONITOR, EvFileMonitor))
+#define EV_FILE_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_FILE_MONITOR, EvFileMonitorClass))
+#define EV_IS_FILE_MONITOR(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_FILE_MONITOR))
+#define EV_IS_FILE_MONITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_FILE_MONITOR))
+#define EV_FILE_MONITOR_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_FILE_MONITOR, EvFileMonitorClass))
+
+struct _EvFileMonitor {
+ GObject base_instance;
+
+ EvFileMonitorPrivate *priv;
+};
+
+struct _EvFileMonitorClass {
+ GObjectClass base_class;
+
+ /* Signals */
+ void (*changed) (EvFileMonitor *ev_monitor);
+};
+
+GType ev_file_monitor_get_type (void) G_GNUC_CONST;
+EvFileMonitor *ev_file_monitor_new (const gchar *uri);
+
+G_END_DECLS
+
+#endif /* EV_FILE_MONITOR_H */
diff --git a/shell/ev-history.c b/shell/ev-history.c
new file mode 100644
index 00000000..9b59014c
--- /dev/null
+++ b/shell/ev-history.c
@@ -0,0 +1,148 @@
+/*
+ * Copyright (C) 2005 Marco Pesenti Gritti
+ *
+ * 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, 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 "config.h"
+
+#include <glib/gi18n.h>
+#include <string.h>
+
+#include "ev-history.h"
+
+
+enum
+{
+ HISTORY_CHANGED,
+ N_SIGNALS
+};
+
+static guint signals[N_SIGNALS] = {0, };
+
+struct _EvHistoryPrivate
+{
+ GList *links;
+};
+
+static void ev_history_init (EvHistory *history);
+static void ev_history_class_init (EvHistoryClass *class);
+
+G_DEFINE_TYPE (EvHistory, ev_history, G_TYPE_OBJECT)
+
+#define EV_HISTORY_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_HISTORY, EvHistoryPrivate))
+
+static void
+ev_history_init (EvHistory *history)
+{
+ history->priv = EV_HISTORY_GET_PRIVATE (history);
+
+ history->priv->links = NULL;
+}
+
+static void
+free_links_list (GList *l)
+{
+ g_list_foreach (l, (GFunc)g_object_unref, NULL);
+ g_list_free (l);
+}
+
+static void
+ev_history_finalize (GObject *object)
+{
+ EvHistory *history = EV_HISTORY (object);
+
+ free_links_list (history->priv->links);
+
+ G_OBJECT_CLASS (ev_history_parent_class)->finalize (object);
+}
+
+static void
+ev_history_class_init (EvHistoryClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+ object_class->finalize = ev_history_finalize;
+
+ signals[HISTORY_CHANGED] =
+ g_signal_new ("changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvHistoryClass, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ g_type_class_add_private (object_class, sizeof (EvHistoryPrivate));
+}
+
+#define HISTORY_LENGTH 7
+
+void
+ev_history_add_link (EvHistory *history, EvLink *link)
+{
+ GList *l;
+
+ g_return_if_fail (EV_IS_HISTORY (history));
+ g_return_if_fail (EV_IS_LINK (link));
+
+ for (l = history->priv->links; l; l = l->next) {
+ if (!strcmp (ev_link_get_title (EV_LINK (l->data)), ev_link_get_title (link))) {
+ g_object_unref (G_OBJECT (l->data));
+ history->priv->links = g_list_delete_link (history->priv->links, l);
+ break;
+ }
+ }
+
+ g_object_ref (link);
+ history->priv->links = g_list_append (history->priv->links,
+ link);
+
+ if (g_list_length (history->priv->links) > HISTORY_LENGTH) {
+ g_object_unref (G_OBJECT (history->priv->links->data));
+ history->priv->links = g_list_delete_link (history->priv->links,
+ history->priv->links);
+ }
+
+ g_signal_emit (history, signals[HISTORY_CHANGED], 0);
+}
+
+EvLink *
+ev_history_get_link_nth (EvHistory *history, int index)
+{
+ GList *l;
+
+ g_return_val_if_fail (EV_IS_HISTORY (history), NULL);
+
+ l = g_list_nth (history->priv->links, index);
+
+ return EV_LINK (l->data);
+}
+
+int
+ev_history_get_n_links (EvHistory *history)
+{
+ g_return_val_if_fail (EV_IS_HISTORY (history), -1);
+
+ return g_list_length (history->priv->links);
+}
+
+EvHistory *
+ev_history_new (void)
+{
+ return EV_HISTORY (g_object_new (EV_TYPE_HISTORY, NULL));
+}
+
diff --git a/shell/ev-history.h b/shell/ev-history.h
new file mode 100644
index 00000000..d8bb53f5
--- /dev/null
+++ b/shell/ev-history.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2005 Marco Pesenti Gritti
+ *
+ * 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, 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 EV_HISTORY_H
+#define EV_HISTORY_H
+
+#include <glib-object.h>
+
+#include "ev-link.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_HISTORY (ev_history_get_type ())
+#define EV_HISTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_HISTORY, EvHistory))
+#define EV_HISTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_HISTORY, EvHistoryClass))
+#define EV_IS_HISTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_HISTORY))
+#define EV_IS_HISTORY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EV_TYPE_HISTORY))
+#define EV_HISTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), EV_TYPE_HISTORY, EvHistoryClass))
+
+typedef struct _EvHistory EvHistory;
+typedef struct _EvHistoryPrivate EvHistoryPrivate;
+typedef struct _EvHistoryClass EvHistoryClass;
+
+struct _EvHistory
+{
+ GObject parent;
+
+ /*< private >*/
+ EvHistoryPrivate *priv;
+};
+
+struct _EvHistoryClass
+{
+ GObjectClass parent_class;
+
+ void (*changed) (EvHistory *history);
+};
+
+GType ev_history_get_type (void);
+EvHistory *ev_history_new (void);
+void ev_history_add_link (EvHistory *history,
+ EvLink *linkk);
+EvLink *ev_history_get_link_nth (EvHistory *history,
+ int index);
+int ev_history_get_n_links (EvHistory *history);
+
+G_END_DECLS
+
+#endif
diff --git a/shell/ev-keyring.c b/shell/ev-keyring.c
new file mode 100644
index 00000000..f7d935f0
--- /dev/null
+++ b/shell/ev-keyring.c
@@ -0,0 +1,116 @@
+/* ev-keyring.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include <glib/gi18n.h>
+
+#include "ev-keyring.h"
+
+#ifdef WITH_KEYRING
+#include <mate-keyring.h>
+
+static const MateKeyringPasswordSchema doc_password_schema = {
+ MATE_KEYRING_ITEM_GENERIC_SECRET,
+ {
+ { "type", MATE_KEYRING_ATTRIBUTE_TYPE_STRING },
+ { "uri", MATE_KEYRING_ATTRIBUTE_TYPE_STRING },
+ { NULL, 0 }
+ }
+};
+const MateKeyringPasswordSchema *EV_DOCUMENT_PASSWORD_SCHEMA = &doc_password_schema;
+#endif /* WITH_KEYRING */
+
+gboolean
+ev_keyring_is_available (void)
+{
+#ifdef WITH_KEYRING
+ return mate_keyring_is_available ();
+#else
+ return FALSE;
+#endif
+}
+
+gchar *
+ev_keyring_lookup_password (const gchar *uri)
+{
+ gchar *retval = NULL;
+#ifdef WITH_KEYRING
+ MateKeyringResult result;
+ gchar *password = NULL;
+
+ g_return_val_if_fail (uri != NULL, NULL);
+
+ if (!mate_keyring_is_available ())
+ return NULL;
+
+ result = mate_keyring_find_password_sync (EV_DOCUMENT_PASSWORD_SCHEMA,
+ &password,
+ "type", "document_password",
+ "uri", uri,
+ NULL);
+ if (result != MATE_KEYRING_RESULT_OK || !password) {
+ if (password)
+ mate_keyring_free_password (password);
+ return NULL;
+ }
+
+ retval = g_strdup (password);
+ mate_keyring_free_password (password);
+#endif /* WITH_KEYRING */
+ return retval;
+}
+
+gboolean
+ev_keyring_save_password (const gchar *uri,
+ const gchar *password,
+ GPasswordSave flags)
+{
+#ifdef WITH_KEYRING
+ MateKeyringResult result;
+ const gchar *keyring;
+ gchar *name;
+ gchar *unescaped_uri;
+
+ g_return_val_if_fail (uri != NULL, FALSE);
+
+ if (!mate_keyring_is_available ())
+ return FALSE;
+
+ if (flags == G_PASSWORD_SAVE_NEVER)
+ return FALSE;
+
+ keyring = (flags == G_PASSWORD_SAVE_FOR_SESSION) ? "session" : NULL;
+ unescaped_uri = g_uri_unescape_string (uri, NULL);
+ name = g_strdup_printf (_("Password for document %s"), unescaped_uri);
+ g_free (unescaped_uri);
+
+ result = mate_keyring_store_password_sync (EV_DOCUMENT_PASSWORD_SCHEMA,
+ keyring, name, password,
+ "type", "document_password",
+ "uri", uri,
+ NULL);
+ g_free (name);
+
+ return (result == MATE_KEYRING_RESULT_OK);
+#else
+ return FALSE;
+#endif /* WITH_KEYRING */
+}
diff --git a/shell/ev-keyring.h b/shell/ev-keyring.h
new file mode 100644
index 00000000..d1cc5226
--- /dev/null
+++ b/shell/ev-keyring.h
@@ -0,0 +1,37 @@
+/* ev-keyring.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 __EV_KEYRING_H__
+#define __EV_KEYRING_H__
+
+#include <glib.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+gboolean ev_keyring_is_available (void);
+gchar *ev_keyring_lookup_password (const gchar *uri);
+gboolean ev_keyring_save_password (const gchar *uri,
+ const gchar *password,
+ GPasswordSave flags);
+
+G_END_DECLS
+
+#endif /* __EV_KEYRING_H__ */
diff --git a/shell/ev-marshal.list b/shell/ev-marshal.list
new file mode 100644
index 00000000..72f99379
--- /dev/null
+++ b/shell/ev-marshal.list
@@ -0,0 +1 @@
+VOID:STRING,STRING
diff --git a/shell/ev-media-player-keys.c b/shell/ev-media-player-keys.c
new file mode 100644
index 00000000..f3237873
--- /dev/null
+++ b/shell/ev-media-player-keys.c
@@ -0,0 +1,233 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Jan Arne Petersen <[email protected]>
+ * Copyright (C) 2008 Bastien Nocera <[email protected]>
+ * Copyright © 2010 Christian Persch
+ *
+ * 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 "config.h"
+
+#include "ev-media-player-keys.h"
+
+#include <string.h>
+#include <glib.h>
+#include <gio/gio.h>
+
+#define SD_NAME "org.mate.SettingsDaemon"
+#define SD_OBJECT_PATH "/org/mate/SettingsDaemon/MediaKeys"
+#define SD_INTERFACE "org.mate.SettingsDaemon.MediaKeys"
+
+enum {
+ KEY_PRESSED,
+ LAST_SIGNAL
+};
+
+struct _EvMediaPlayerKeys
+{
+ GObject parent;
+
+ GDBusProxy *proxy;
+ gboolean has_name_owner;
+};
+
+struct _EvMediaPlayerKeysClass
+{
+ GObjectClass parent_class;
+
+ /* Signals */
+ void (* key_pressed) (EvMediaPlayerKeys *keys,
+ const gchar *key);
+};
+
+static guint signals[LAST_SIGNAL];
+
+G_DEFINE_TYPE (EvMediaPlayerKeys, ev_media_player_keys, G_TYPE_OBJECT)
+
+static void ev_media_player_keys_finalize (GObject *object);
+
+static void
+ev_media_player_keys_class_init (EvMediaPlayerKeysClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = ev_media_player_keys_finalize;
+
+ signals[KEY_PRESSED] =
+ g_signal_new ("key_pressed",
+ EV_TYPE_MEDIA_PLAYER_KEYS,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EvMediaPlayerKeysClass, key_pressed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE,
+ 1, G_TYPE_STRING);
+}
+
+static void
+ev_media_player_keys_update_has_name_owner (EvMediaPlayerKeys *keys)
+{
+ gchar *name_owner;
+
+ if (!keys->proxy) {
+ keys->has_name_owner = FALSE;
+ return;
+ }
+
+ name_owner = g_dbus_proxy_get_name_owner (keys->proxy);
+ keys->has_name_owner = (name_owner != NULL);
+ g_free (name_owner);
+}
+
+static void
+ev_media_player_keys_grab_keys (EvMediaPlayerKeys *keys)
+{
+ if (!keys->has_name_owner)
+ return;
+
+ /*
+ * The uint as second argument is time. We give a very low value so that
+ * if a media player is there it gets higher priority on the keys (0 is
+ * a special value having maximum priority).
+ */
+ g_dbus_proxy_call (keys->proxy,
+ "GrabMediaPlayerKeys",
+ g_variant_new ("(su)", "Evince", 1),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ -1,
+ NULL, NULL, NULL);
+}
+
+static void
+ev_media_player_keys_release_keys (EvMediaPlayerKeys *keys)
+{
+ if (!keys->has_name_owner)
+ return;
+
+ g_dbus_proxy_call (keys->proxy,
+ "ReleaseMediaPlayerKeys",
+ g_variant_new ("(s)", "Evince"),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ -1,
+ NULL, NULL, NULL);
+}
+
+static void
+media_player_key_pressed_cb (GDBusProxy *proxy,
+ gchar *sender_name,
+ gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ const char *application, *key;
+
+ if (g_strcmp0 (sender_name, SD_NAME) != 0)
+ return;
+
+ if (g_strcmp0 (signal_name, "MediaPlayerKeyPressed") != 0)
+ return;
+
+ if (!g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(ss)")))
+ return;
+
+ g_variant_get (parameters, "(&s&s)", &application, &key);
+
+ if (strcmp ("Evince", application) == 0) {
+ g_signal_emit (user_data, signals[KEY_PRESSED], 0, key);
+ }
+}
+
+static void
+mediakeys_name_owner_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ EvMediaPlayerKeys *keys = EV_MEDIA_PLAYER_KEYS (user_data);
+
+ ev_media_player_keys_update_has_name_owner (keys);
+}
+
+static void
+mediakeys_service_appeared_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ EvMediaPlayerKeys *keys = EV_MEDIA_PLAYER_KEYS (user_data);
+ GDBusProxy *proxy;
+
+ proxy = g_dbus_proxy_new_for_bus_finish (res, NULL);
+
+ if (proxy == NULL) {
+ return;
+ }
+
+ g_signal_connect (proxy, "g-signal",
+ G_CALLBACK (media_player_key_pressed_cb),
+ keys);
+ g_signal_connect (proxy, "notify::g-name-owner",
+ G_CALLBACK (mediakeys_name_owner_changed),
+ keys);
+
+ keys->proxy = proxy;
+ ev_media_player_keys_update_has_name_owner (keys);
+ ev_media_player_keys_grab_keys (keys);
+}
+
+static void
+ev_media_player_keys_init (EvMediaPlayerKeys *keys)
+{
+ g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
+ NULL,
+ SD_NAME,
+ SD_OBJECT_PATH,
+ SD_INTERFACE,
+ NULL,
+ mediakeys_service_appeared_cb,
+ keys);
+}
+
+void
+ev_media_player_keys_focused (EvMediaPlayerKeys *keys)
+{
+ if (keys->proxy == NULL)
+ return;
+
+ ev_media_player_keys_grab_keys (keys);
+}
+
+static void
+ev_media_player_keys_finalize (GObject *object)
+{
+ EvMediaPlayerKeys *keys = EV_MEDIA_PLAYER_KEYS (object);
+
+ if (keys->proxy != NULL) {
+ ev_media_player_keys_release_keys (keys);
+ g_object_unref (keys->proxy);
+ keys->proxy = NULL;
+ keys->has_name_owner = FALSE;
+ }
+
+ G_OBJECT_CLASS (ev_media_player_keys_parent_class)->finalize (object);
+}
+
+EvMediaPlayerKeys *
+ev_media_player_keys_new (void)
+{
+ return g_object_new (EV_TYPE_MEDIA_PLAYER_KEYS, NULL);
+}
+
diff --git a/shell/ev-media-player-keys.h b/shell/ev-media-player-keys.h
new file mode 100644
index 00000000..8e2d62be
--- /dev/null
+++ b/shell/ev-media-player-keys.h
@@ -0,0 +1,49 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Jan Arne Petersen <[email protected]>
+ * Copyright (C) 2008 Bastien Nocera <[email protected]>
+ *
+ * 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 EV_MEDIA_PLAYER_KEYS_H
+#define EV_MEDIA_PLAYER_KEYS_H
+
+#include <glib-object.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_MEDIA_PLAYER_KEYS (ev_media_player_keys_get_type ())
+#define EV_MEDIA_PLAYER_KEYS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_MEDIA_PLAYER_KEYS, EvMediaPlayerKeys))
+#define EV_MEDIA_PLAYER_KEYS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_MEDIA_PLAYER_KEYS, EvMediaPlayerKeysClass))
+#define EV_IS_MEDIA_PLAYER_KEYS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_MEDIA_PLAYER_KEYS))
+#define EV_IS_MEDIA_PLAYER_KEYS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_MEDIA_PLAYER_KEYS))
+#define EV_MEDIA_PLAYER_KEYS_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EV_TYPE_MEDIA_PLAYER_KEYS, EvMediaPlayerKeysClass))
+
+typedef struct _EvMediaPlayerKeys EvMediaPlayerKeys;
+typedef struct _EvMediaPlayerKeysClass EvMediaPlayerKeysClass;
+
+
+GType ev_media_player_keys_get_type (void) G_GNUC_CONST;
+
+EvMediaPlayerKeys *ev_media_player_keys_new (void);
+
+void ev_media_player_keys_focused (EvMediaPlayerKeys *keys);
+
+G_END_DECLS
+
+#endif /* !EV_MEDIA_PLAYER_KEYS_H */
diff --git a/shell/ev-message-area.c b/shell/ev-message-area.c
new file mode 100644
index 00000000..3530f4a4
--- /dev/null
+++ b/shell/ev-message-area.c
@@ -0,0 +1,354 @@
+/* ev-message-area.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garcia Campos
+ *
+ * Author:
+ * Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include "ev-message-area.h"
+
+#define EV_MESSAGE_AREA_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EV_TYPE_MESSAGE_AREA, EvMessageAreaPrivate))
+
+struct _EvMessageAreaPrivate {
+ GtkWidget *main_box;
+ GtkWidget *image;
+ GtkWidget *label;
+ GtkWidget *secondary_label;
+
+ guint message_type : 3;
+};
+
+enum {
+ PROP_0,
+ PROP_TEXT,
+ PROP_SECONDARY_TEXT,
+ PROP_IMAGE
+};
+
+static void ev_message_area_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void ev_message_area_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+
+G_DEFINE_TYPE (EvMessageArea, ev_message_area, GTK_TYPE_INFO_BAR)
+
+static void
+ev_message_area_class_init (EvMessageAreaClass *class)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+
+ gobject_class->set_property = ev_message_area_set_property;
+ gobject_class->get_property = ev_message_area_get_property;
+
+ g_object_class_install_property (gobject_class,
+ PROP_TEXT,
+ g_param_spec_string ("text",
+ "Text",
+ "The primary text of the message dialog",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class,
+ PROP_SECONDARY_TEXT,
+ g_param_spec_string ("secondary-text",
+ "Secondary Text",
+ "The secondary text of the message dialog",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class,
+ PROP_IMAGE,
+ g_param_spec_object ("image",
+ "Image",
+ "The image",
+ GTK_TYPE_WIDGET,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (gobject_class, sizeof (EvMessageAreaPrivate));
+}
+
+static void
+ev_message_area_init (EvMessageArea *area)
+{
+ GtkWidget *hbox, *vbox;
+ GtkWidget *content_area;
+
+ area->priv = EV_MESSAGE_AREA_GET_PRIVATE (area);
+
+ area->priv->main_box = gtk_vbox_new (FALSE, 12);
+
+ hbox = gtk_hbox_new (FALSE, 12);
+ vbox = gtk_vbox_new (FALSE, 12);
+
+ area->priv->label = gtk_label_new (NULL);
+ gtk_label_set_use_markup (GTK_LABEL (area->priv->label), TRUE);
+ gtk_label_set_line_wrap (GTK_LABEL (area->priv->label), TRUE);
+ gtk_label_set_selectable (GTK_LABEL (area->priv->label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (area->priv->label), 0.0, 0.5);
+ gtk_widget_set_can_focus (area->priv->label, TRUE);
+ gtk_box_pack_start (GTK_BOX (vbox), area->priv->label, TRUE, TRUE, 0);
+ gtk_widget_show (area->priv->label);
+
+ area->priv->secondary_label = gtk_label_new (NULL);
+ gtk_label_set_use_markup (GTK_LABEL (area->priv->secondary_label), TRUE);
+ gtk_label_set_line_wrap (GTK_LABEL (area->priv->secondary_label), TRUE);
+ gtk_label_set_selectable (GTK_LABEL (area->priv->secondary_label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (area->priv->secondary_label), 0.0, 0.5);
+ gtk_widget_set_can_focus (area->priv->secondary_label, TRUE);
+ gtk_box_pack_start (GTK_BOX (vbox), area->priv->secondary_label, TRUE, TRUE, 0);
+
+ area->priv->image = gtk_image_new_from_stock (NULL, GTK_ICON_SIZE_DIALOG);
+ gtk_misc_set_alignment (GTK_MISC (area->priv->image), 0.5, 0.0);
+ gtk_box_pack_start (GTK_BOX (hbox), area->priv->image, FALSE, FALSE, 0);
+ gtk_widget_show (area->priv->image);
+
+ gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
+ gtk_widget_show (vbox);
+
+ gtk_box_pack_start (GTK_BOX (area->priv->main_box), hbox, TRUE, TRUE, 0);
+ gtk_widget_show (hbox);
+
+ content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (area));
+ gtk_container_add (GTK_CONTAINER (content_area), area->priv->main_box);
+ gtk_widget_show (area->priv->main_box);
+}
+
+static void
+ev_message_area_set_image_for_type (EvMessageArea *area,
+ GtkMessageType type)
+{
+ const gchar *stock_id = NULL;
+ AtkObject *atk_obj;
+
+ switch (type) {
+ case GTK_MESSAGE_INFO:
+ stock_id = GTK_STOCK_DIALOG_INFO;
+ break;
+ case GTK_MESSAGE_QUESTION:
+ stock_id = GTK_STOCK_DIALOG_QUESTION;
+ break;
+ case GTK_MESSAGE_WARNING:
+ stock_id = GTK_STOCK_DIALOG_WARNING;
+ break;
+ case GTK_MESSAGE_ERROR:
+ stock_id = GTK_STOCK_DIALOG_ERROR;
+ break;
+ case GTK_MESSAGE_OTHER:
+ break;
+ default:
+ g_warning ("Unknown GtkMessageType %u", type);
+ break;
+ }
+
+ if (stock_id)
+ gtk_image_set_from_stock (GTK_IMAGE (area->priv->image), stock_id,
+ GTK_ICON_SIZE_DIALOG);
+
+ atk_obj = gtk_widget_get_accessible (GTK_WIDGET (area));
+ if (GTK_IS_ACCESSIBLE (atk_obj)) {
+ atk_object_set_role (atk_obj, ATK_ROLE_ALERT);
+ if (stock_id) {
+ GtkStockItem item;
+
+ gtk_stock_lookup (stock_id, &item);
+ atk_object_set_name (atk_obj, item.label);
+ }
+ }
+}
+
+static void
+ev_message_area_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvMessageArea *area = EV_MESSAGE_AREA (object);
+
+ switch (prop_id) {
+ case PROP_TEXT:
+ ev_message_area_set_text (area, g_value_get_string (value));
+ break;
+ case PROP_SECONDARY_TEXT:
+ ev_message_area_set_secondary_text (area, g_value_get_string (value));
+ break;
+ case PROP_IMAGE:
+ ev_message_area_set_image (area, (GtkWidget *)g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ev_message_area_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvMessageArea *area = EV_MESSAGE_AREA (object);
+
+ switch (prop_id) {
+ case PROP_TEXT:
+ g_value_set_string (value, gtk_label_get_label (GTK_LABEL (area->priv->label)));
+ break;
+ case PROP_SECONDARY_TEXT:
+ g_value_set_string (value, gtk_label_get_label (GTK_LABEL (area->priv->secondary_label)));
+ break;
+ case PROP_IMAGE:
+ g_value_set_object (value, area->priv->image);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+void
+_ev_message_area_add_buttons_valist (EvMessageArea *area,
+ const gchar *first_button_text,
+ va_list args)
+{
+ const gchar* text;
+ gint response_id;
+
+ if (first_button_text == NULL)
+ return;
+
+ text = first_button_text;
+ response_id = va_arg (args, gint);
+
+ while (text != NULL) {
+ gtk_info_bar_add_button (GTK_INFO_BAR (area), text, response_id);
+
+ text = va_arg (args, gchar*);
+ if (text == NULL)
+ break;
+
+ response_id = va_arg (args, int);
+ }
+}
+
+GtkWidget *
+_ev_message_area_get_main_box (EvMessageArea *area)
+{
+ return area->priv->main_box;
+}
+
+GtkWidget *
+ev_message_area_new (GtkMessageType type,
+ const gchar *text,
+ const gchar *first_button_text,
+ ...)
+{
+ GtkWidget *widget;
+
+ widget = g_object_new (EV_TYPE_MESSAGE_AREA,
+ "message-type", type,
+ "text", text,
+ NULL);
+ ev_message_area_set_image_for_type (EV_MESSAGE_AREA (widget), type);
+ if (first_button_text) {
+ va_list args;
+
+ va_start (args, first_button_text);
+ _ev_message_area_add_buttons_valist (EV_MESSAGE_AREA (widget),
+ first_button_text, args);
+ va_end (args);
+ }
+
+ return widget;
+}
+
+void
+ev_message_area_set_image (EvMessageArea *area,
+ GtkWidget *image)
+{
+ GtkWidget *parent;
+
+ g_return_if_fail (EV_IS_MESSAGE_AREA (area));
+
+ area->priv->message_type = GTK_MESSAGE_OTHER;
+
+ parent = gtk_widget_get_parent (area->priv->image);
+ gtk_container_add (GTK_CONTAINER (parent), image);
+ gtk_container_remove (GTK_CONTAINER (parent), area->priv->image);
+ gtk_box_reorder_child (GTK_BOX (parent), image, 0);
+
+ area->priv->image = image;
+
+ g_object_notify (G_OBJECT (area), "image");
+}
+
+void
+ev_message_area_set_image_from_stock (EvMessageArea *area,
+ const gchar *stock_id)
+{
+ g_return_if_fail (EV_IS_MESSAGE_AREA (area));
+ g_return_if_fail (stock_id != NULL);
+
+ gtk_image_set_from_stock (GTK_IMAGE (area->priv->image),
+ stock_id,
+ GTK_ICON_SIZE_DIALOG);
+}
+
+void
+ev_message_area_set_text (EvMessageArea *area,
+ const gchar *str)
+{
+ g_return_if_fail (EV_IS_MESSAGE_AREA (area));
+
+ if (str) {
+ gchar *msg;
+
+ msg = g_strdup_printf ("<b>%s</b>", str);
+ gtk_label_set_markup (GTK_LABEL (area->priv->label), msg);
+ g_free (msg);
+ } else {
+ gtk_label_set_markup (GTK_LABEL (area->priv->label), NULL);
+ }
+
+ g_object_notify (G_OBJECT (area), "text");
+}
+
+void
+ev_message_area_set_secondary_text (EvMessageArea *area,
+ const gchar *str)
+{
+ g_return_if_fail (EV_IS_MESSAGE_AREA (area));
+
+ if (str) {
+ gchar *msg;
+
+ msg = g_strdup_printf ("<small>%s</small>", str);
+ gtk_label_set_markup (GTK_LABEL (area->priv->secondary_label), msg);
+ g_free (msg);
+ gtk_widget_show (area->priv->secondary_label);
+ } else {
+ gtk_label_set_markup (GTK_LABEL (area->priv->secondary_label), NULL);
+ gtk_widget_hide (area->priv->secondary_label);
+ }
+
+ g_object_notify (G_OBJECT (area), "secondary-text");
+}
diff --git a/shell/ev-message-area.h b/shell/ev-message-area.h
new file mode 100644
index 00000000..0fc7dd8c
--- /dev/null
+++ b/shell/ev-message-area.h
@@ -0,0 +1,74 @@
+/* ev-message-area.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2007 Carlos Garcia Campos
+ *
+ * Author:
+ * Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 EV_MESSAGE_AREA_H
+#define EV_MESSAGE_AREA_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_MESSAGE_AREA (ev_message_area_get_type ())
+#define EV_MESSAGE_AREA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_MESSAGE_AREA, EvMessageArea))
+#define EV_MESSAGE_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_MESSAGE_AREA, EvMessageAreaClass))
+#define EV_IS_MESSAGE_AREA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_MESSAGE_AREA))
+#define EV_IS_MESSAGE_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EV_TYPE_MESSAGE_AREA))
+#define EV_MESSAGE_AREA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EV_TYPE_MESSAGE_AREA, EvMessageAreaClass))
+
+typedef struct _EvMessageArea EvMessageArea;
+typedef struct _EvMessageAreaClass EvMessageAreaClass;
+typedef struct _EvMessageAreaPrivate EvMessageAreaPrivate;
+
+struct _EvMessageArea {
+ GtkInfoBar parent_instance;
+
+ /*< private >*/
+ EvMessageAreaPrivate *priv;
+};
+
+struct _EvMessageAreaClass {
+ GtkInfoBarClass parent_class;
+};
+
+GType ev_message_area_get_type (void) G_GNUC_CONST;
+GtkWidget *ev_message_area_new (GtkMessageType type,
+ const gchar *text,
+ const gchar *first_button_text,
+ ...);
+void ev_message_area_set_image (EvMessageArea *area,
+ GtkWidget *image);
+void ev_message_area_set_image_from_stock (EvMessageArea *area,
+ const gchar *stock_id);
+void ev_message_area_set_text (EvMessageArea *area,
+ const gchar *str);
+void ev_message_area_set_secondary_text (EvMessageArea *area,
+ const gchar *str);
+
+void _ev_message_area_add_buttons_valist (EvMessageArea *area,
+ const gchar *first_button_text,
+ va_list args);
+GtkWidget *_ev_message_area_get_main_box (EvMessageArea *area);
+
+G_END_DECLS
+
+#endif /* EV_MESSAGE_AREA_H */
diff --git a/shell/ev-metadata.c b/shell/ev-metadata.c
new file mode 100644
index 00000000..9056b2fd
--- /dev/null
+++ b/shell/ev-metadata.c
@@ -0,0 +1,313 @@
+/* ev-metadata.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <gio/gio.h>
+#include <string.h>
+
+#include "ev-metadata.h"
+
+struct _EvMetadata {
+ GObject base;
+
+ GFile *file;
+ GHashTable *items;
+};
+
+struct _EvMetadataClass {
+ GObjectClass base_class;
+};
+
+G_DEFINE_TYPE (EvMetadata, ev_metadata, G_TYPE_OBJECT)
+
+#define EV_METADATA_NAMESPACE "metadata::evince"
+
+static void
+ev_metadata_finalize (GObject *object)
+{
+ EvMetadata *metadata = EV_METADATA (object);
+
+ if (metadata->items) {
+ g_hash_table_destroy (metadata->items);
+ metadata->items = NULL;
+ }
+
+ if (metadata->file) {
+ g_object_unref (metadata->file);
+ metadata->file = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_metadata_parent_class)->finalize (object);
+}
+
+static void
+ev_metadata_init (EvMetadata *metadata)
+{
+ metadata->items = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ g_free);
+}
+
+static void
+ev_metadata_class_init (EvMetadataClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->finalize = ev_metadata_finalize;
+}
+
+static void
+ev_metadata_load (EvMetadata *metadata)
+{
+ GFileInfo *info;
+ gchar **attrs;
+ gint i;
+ GError *error = NULL;
+
+ info = g_file_query_info (metadata->file, "metadata::*", 0, NULL, &error);
+ if (!info) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+
+ return;
+ }
+
+ if (!g_file_info_has_namespace (info, "metadata")) {
+ g_object_unref (info);
+
+ return;
+ }
+
+ attrs = g_file_info_list_attributes (info, "metadata");
+ for (i = 0; attrs[i]; i++) {
+ GFileAttributeType type;
+ gpointer value;
+ const gchar *key;
+
+ if (!g_str_has_prefix (attrs[i], EV_METADATA_NAMESPACE))
+ continue;
+
+ if (!g_file_info_get_attribute_data (info, attrs[i],
+ &type, &value, NULL)) {
+ continue;
+ }
+
+ key = attrs[i] + strlen (EV_METADATA_NAMESPACE"::");
+
+ if (type == G_FILE_ATTRIBUTE_TYPE_STRING) {
+ g_hash_table_insert (metadata->items,
+ g_strdup (key),
+ g_strdup (value));
+ }
+ }
+ g_strfreev (attrs);
+ g_object_unref (info);
+}
+
+EvMetadata *
+ev_metadata_new (GFile *file)
+{
+ EvMetadata *metadata;
+
+ g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+ metadata = EV_METADATA (g_object_new (EV_TYPE_METADATA, NULL));
+ metadata->file = g_object_ref (file);
+
+ ev_metadata_load (metadata);
+
+ return metadata;
+}
+
+gboolean
+ev_metadata_is_empty (EvMetadata *metadata)
+{
+ return g_hash_table_size (metadata->items) == 0;
+}
+
+gboolean
+ev_metadata_get_string (EvMetadata *metadata,
+ const gchar *key,
+ gchar **value)
+{
+ gchar *v;
+
+ v = g_hash_table_lookup (metadata->items, key);
+ if (!v)
+ return FALSE;
+
+ *value = v;
+ return TRUE;
+}
+
+static void
+metadata_set_callback (GObject *file,
+ GAsyncResult *result,
+ EvMetadata *metadata)
+{
+ GError *error = NULL;
+
+ if (!g_file_set_attributes_finish (G_FILE (file), result, NULL, &error)) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ }
+}
+
+gboolean
+ev_metadata_set_string (EvMetadata *metadata,
+ const gchar *key,
+ const gchar *value)
+{
+ GFileInfo *info;
+ gchar *gio_key;
+
+ info = g_file_info_new ();
+
+ gio_key = g_strconcat (EV_METADATA_NAMESPACE"::", key, NULL);
+ if (value) {
+ g_file_info_set_attribute_string (info, gio_key, value);
+ } else {
+ g_file_info_set_attribute (info, gio_key,
+ G_FILE_ATTRIBUTE_TYPE_INVALID,
+ NULL);
+ }
+ g_free (gio_key);
+
+ g_hash_table_insert (metadata->items, g_strdup (key), g_strdup (value));
+ g_file_set_attributes_async (metadata->file,
+ info,
+ 0,
+ G_PRIORITY_DEFAULT,
+ NULL,
+ (GAsyncReadyCallback)metadata_set_callback,
+ metadata);
+ g_object_unref (info);
+
+ return TRUE;
+}
+
+gboolean
+ev_metadata_get_int (EvMetadata *metadata,
+ const gchar *key,
+ gint *value)
+{
+ gchar *string_value;
+ gchar *endptr;
+ gint int_value;
+
+ if (!ev_metadata_get_string (metadata, key, &string_value))
+ return FALSE;
+
+ int_value = g_ascii_strtoull (string_value, &endptr, 0);
+ if (int_value == 0 && string_value == endptr)
+ return FALSE;
+
+ *value = int_value;
+ return TRUE;
+}
+
+gboolean
+ev_metadata_set_int (EvMetadata *metadata,
+ const gchar *key,
+ gint value)
+{
+ gchar string_value[32];
+
+ g_snprintf (string_value, sizeof (string_value), "%d", value);
+
+ return ev_metadata_set_string (metadata, key, string_value);
+}
+
+gboolean
+ev_metadata_get_double (EvMetadata *metadata,
+ const gchar *key,
+ gdouble *value)
+{
+ gchar *string_value;
+ gchar *endptr;
+ gdouble double_value;
+
+ if (!ev_metadata_get_string (metadata, key, &string_value))
+ return FALSE;
+
+ double_value = g_ascii_strtod (string_value, &endptr);
+ if (double_value == 0. && string_value == endptr)
+ return FALSE;
+
+ *value = double_value;
+ return TRUE;
+}
+
+gboolean
+ev_metadata_set_double (EvMetadata *metadata,
+ const gchar *key,
+ gdouble value)
+{
+ gchar string_value[G_ASCII_DTOSTR_BUF_SIZE];
+
+ g_ascii_dtostr (string_value, G_ASCII_DTOSTR_BUF_SIZE, value);
+
+ return ev_metadata_set_string (metadata, key, string_value);
+}
+
+gboolean
+ev_metadata_get_boolean (EvMetadata *metadata,
+ const gchar *key,
+ gboolean *value)
+{
+ gint int_value;
+
+ if (!ev_metadata_get_int (metadata, key, &int_value))
+ return FALSE;
+
+ *value = int_value;
+ return TRUE;
+}
+
+gboolean
+ev_metadata_set_boolean (EvMetadata *metadata,
+ const gchar *key,
+ gboolean value)
+{
+ return ev_metadata_set_string (metadata, key, value ? "1" : "0");
+}
+
+gboolean
+ev_is_metadata_supported_for_file (GFile *file)
+{
+ GFileAttributeInfoList *namespaces;
+ gint i;
+ gboolean retval = FALSE;
+
+ namespaces = g_file_query_writable_namespaces (file, NULL, NULL);
+ if (!namespaces)
+ return retval;
+
+ for (i = 0; i < namespaces->n_infos; i++) {
+ if (strcmp (namespaces->infos[i].name, "metadata") == 0) {
+ retval = TRUE;
+ break;
+ }
+ }
+
+ g_file_attribute_info_list_unref (namespaces);
+
+ return retval;
+}
diff --git a/shell/ev-metadata.h b/shell/ev-metadata.h
new file mode 100644
index 00000000..69468c80
--- /dev/null
+++ b/shell/ev-metadata.h
@@ -0,0 +1,69 @@
+/* ev-metadata.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 EV_METADATA_H
+#define EV_METADATA_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_METADATA (ev_metadata_get_type())
+#define EV_METADATA(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_METADATA, EvMetadata))
+#define EV_METADATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_METADATA, EvMetadataClass))
+#define EV_IS_METADATA(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_METADATA))
+
+typedef struct _EvMetadata EvMetadata;
+typedef struct _EvMetadataClass EvMetadataClass;
+
+GType ev_metadata_get_type (void) G_GNUC_CONST;
+EvMetadata *ev_metadata_new (GFile *file);
+gboolean ev_metadata_is_empty (EvMetadata *metadata);
+
+gboolean ev_metadata_get_string (EvMetadata *metadata,
+ const gchar *key,
+ gchar **value);
+gboolean ev_metadata_set_string (EvMetadata *metadata,
+ const gchar *key,
+ const gchar *value);
+gboolean ev_metadata_get_int (EvMetadata *metadata,
+ const gchar *key,
+ gint *value);
+gboolean ev_metadata_set_int (EvMetadata *metadata,
+ const gchar *key,
+ gint value);
+gboolean ev_metadata_get_double (EvMetadata *metadata,
+ const gchar *key,
+ gdouble *value);
+gboolean ev_metadata_set_double (EvMetadata *metadata,
+ const gchar *key,
+ gdouble value);
+gboolean ev_metadata_get_boolean (EvMetadata *metadata,
+ const gchar *key,
+ gboolean *value);
+gboolean ev_metadata_set_boolean (EvMetadata *metadata,
+ const gchar *key,
+ gboolean value);
+
+gboolean ev_is_metadata_supported_for_file (GFile *file);
+
+G_END_DECLS
+
+#endif /* EV_METADATA_H */
diff --git a/shell/ev-navigation-action-widget.c b/shell/ev-navigation-action-widget.c
new file mode 100644
index 00000000..95c7fdff
--- /dev/null
+++ b/shell/ev-navigation-action-widget.c
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2003, 2004 Marco Pesenti Gritti
+ * Copyright (C) 2003, 2004 Christian Persch
+ *
+ * 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, 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 "config.h"
+#include "ev-navigation-action-widget.h"
+
+#include <glib/gi18n.h>
+#include <string.h>
+
+static void ev_navigation_action_widget_init (EvNavigationActionWidget *action_widget);
+static void ev_navigation_action_widget_class_init (EvNavigationActionWidgetClass *action_widget);
+static void ev_navigation_action_widget_toggled (GtkToggleToolButton *toggle);
+static gboolean ev_navigation_action_widget_button_press_event (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data);
+
+G_DEFINE_TYPE (EvNavigationActionWidget, ev_navigation_action_widget, GTK_TYPE_TOGGLE_TOOL_BUTTON)
+
+enum
+{
+ SHOW_MENU,
+ LAST_SIGNAL
+};
+
+static gint signals[LAST_SIGNAL];
+
+static void
+ev_navigation_action_widget_init (EvNavigationActionWidget *action_widget)
+{
+ GtkWidget *toggle_button;
+
+ /* It's rather dirty hack but we need a child to connect to
+ * button press event
+ */
+
+ toggle_button = gtk_bin_get_child (GTK_BIN (action_widget));
+
+ g_signal_connect (toggle_button, "button-press-event",
+ G_CALLBACK (ev_navigation_action_widget_button_press_event),
+ action_widget);
+ return;
+}
+
+static void
+ev_navigation_action_widget_class_init (EvNavigationActionWidgetClass *klass)
+{
+ GtkToggleToolButtonClass *toggle_tool_button_class = GTK_TOGGLE_TOOL_BUTTON_CLASS (klass);
+
+ toggle_tool_button_class->toggled = ev_navigation_action_widget_toggled;
+
+ signals[SHOW_MENU] =
+ g_signal_new ("show-menu",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (EvNavigationActionWidgetClass, show_menu),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+}
+
+static int
+menu_deactivate_cb (GtkMenuShell *menu_shell,
+ EvNavigationActionWidget *widget)
+{
+ gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (widget), FALSE);
+ return TRUE;
+}
+
+static void
+menu_detacher (GtkWidget *widget,
+ GtkMenu *menu)
+{
+ EvNavigationActionWidget *button = EV_NAVIGATION_ACTION_WIDGET (widget);
+ g_return_if_fail (button->menu == menu);
+ button->menu = NULL;
+}
+
+void
+ev_navigation_action_widget_set_menu(EvNavigationActionWidget *button, GtkWidget *menu)
+{
+
+ if (button->menu == GTK_MENU (menu))
+ return;
+
+ if (button->menu && gtk_widget_get_visible (GTK_WIDGET (button->menu)))
+ gtk_menu_shell_deactivate (GTK_MENU_SHELL (button->menu));
+
+ if (button->menu) {
+ g_signal_handlers_disconnect_by_func (button->menu,
+ menu_deactivate_cb,
+ button);
+ gtk_menu_detach (button->menu);
+ }
+
+ button->menu = GTK_MENU (menu);
+
+ if (button->menu) {
+ gtk_menu_attach_to_widget (button->menu, GTK_WIDGET (button),
+ menu_detacher);
+ g_signal_connect (button->menu, "deactivate",
+ G_CALLBACK (menu_deactivate_cb), button);
+ }
+}
+
+static void
+menu_position_func (GtkMenu *menu,
+ int *x,
+ int *y,
+ gboolean *push_in,
+ EvNavigationActionWidget *button)
+{
+ GtkWidget *widget = GTK_WIDGET (button);
+ GtkRequisition menu_req;
+ GtkAllocation allocation;
+ GtkTextDirection direction;
+ GdkWindow *gdk_window;
+ GdkRectangle monitor;
+ gint monitor_num;
+ GdkScreen *screen;
+
+ gtk_widget_size_request (GTK_WIDGET (button->menu), &menu_req);
+ direction = gtk_widget_get_direction (widget);
+ screen = gtk_widget_get_screen (GTK_WIDGET (menu));
+
+ gdk_window = gtk_widget_get_window (widget);
+ monitor_num = gdk_screen_get_monitor_at_window (screen, gdk_window);
+ if (monitor_num < 0)
+ monitor_num = 0;
+ gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
+
+ gdk_window_get_origin (gdk_window, x, y);
+ gtk_widget_get_allocation (widget, &allocation);
+ *x += allocation.x;
+ *y += allocation.y;
+
+ if (direction == GTK_TEXT_DIR_LTR)
+ *x += MAX (allocation.width - menu_req.width, 0);
+ else if (menu_req.width > allocation.width)
+ *x -= menu_req.width - allocation.width;
+
+ if ((*y + allocation.height + menu_req.height) <= monitor.y + monitor.height)
+ *y += allocation.height;
+ else if ((*y - menu_req.height) >= monitor.y)
+ *y -= menu_req.height;
+ else if (monitor.y + monitor.height - (*y + allocation.height) > *y)
+ *y += allocation.height;
+ else
+ *y -= menu_req.height;
+
+ *push_in = FALSE;
+}
+
+static void
+popup_menu_under_arrow (EvNavigationActionWidget *button,
+ GdkEventButton *event)
+{
+ g_signal_emit (button, signals[SHOW_MENU], 0);
+
+ if (!button->menu)
+ return;
+
+ gtk_menu_popup (button->menu, NULL, NULL,
+ (GtkMenuPositionFunc) menu_position_func,
+ button,
+ event ? event->button : 0,
+ event ? event->time : gtk_get_current_event_time ());
+}
+
+static void
+ev_navigation_action_widget_toggled (GtkToggleToolButton *toggle)
+{
+ EvNavigationActionWidget *button = EV_NAVIGATION_ACTION_WIDGET (toggle);
+ if (!button->menu)
+ return;
+
+ if (gtk_toggle_tool_button_get_active (GTK_TOGGLE_TOOL_BUTTON (button)) &&
+ !gtk_widget_get_visible (GTK_WIDGET (button->menu))) {
+ /* we get here only when the menu is activated by a key
+ * press, so that we can select the first menu item */
+ popup_menu_under_arrow (button, NULL);
+ gtk_menu_shell_select_first (GTK_MENU_SHELL (button->menu), FALSE);
+ }
+}
+
+static gboolean
+ev_navigation_action_widget_button_press_event (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer data)
+{
+ EvNavigationActionWidget *button = EV_NAVIGATION_ACTION_WIDGET (data);
+
+ if (event->button == 1) {
+ popup_menu_under_arrow (button, event);
+ gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (button), TRUE);
+ return TRUE;
+ }
+ return FALSE;
+}
diff --git a/shell/ev-navigation-action-widget.h b/shell/ev-navigation-action-widget.h
new file mode 100644
index 00000000..4241cd31
--- /dev/null
+++ b/shell/ev-navigation-action-widget.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2003, 2004 Marco Pesenti Gritti
+ * Copyright (C) 2003, 2004 Christian Persch
+ *
+ * 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, 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 <gtk/gtk.h>
+
+#define EV_TYPE_NAVIGATION_ACTION_WIDGET (ev_navigation_action_widget_get_type ())
+#define EV_NAVIGATION_ACTION_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_NAVIGATION_ACTION_WIDGET, EvNavigationActionWidget))
+
+typedef struct _EvNavigationActionWidget EvNavigationActionWidget;
+typedef struct _EvNavigationActionWidgetClass EvNavigationActionWidgetClass;
+
+struct _EvNavigationActionWidget
+{
+ GtkToggleToolButton parent;
+
+ GtkMenu *menu;
+};
+
+struct _EvNavigationActionWidgetClass
+{
+ GtkToggleToolButtonClass parent_class;
+
+ void (*show_menu) (EvNavigationActionWidget *widget);
+};
+
+GType ev_navigation_action_widget_get_type (void);
+
+void
+ev_navigation_action_widget_set_menu(EvNavigationActionWidget *widget, GtkWidget *menu);
diff --git a/shell/ev-navigation-action.c b/shell/ev-navigation-action.c
new file mode 100644
index 00000000..b34c3789
--- /dev/null
+++ b/shell/ev-navigation-action.c
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2003, 2004 Marco Pesenti Gritti
+ * Copyright (C) 2003, 2004 Christian Persch
+ *
+ * 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, 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 "config.h"
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "ev-navigation-action.h"
+#include "ev-navigation-action-widget.h"
+
+
+enum
+{
+ WIDGET_ACTIVATE_LINK,
+ WIDGET_N_SIGNALS
+};
+
+static guint widget_signals[WIDGET_N_SIGNALS] = {0, };
+
+struct _EvNavigationActionPrivate
+{
+ EvHistory *history;
+};
+
+static void ev_navigation_action_init (EvNavigationAction *action);
+static void ev_navigation_action_class_init (EvNavigationActionClass *class);
+
+G_DEFINE_TYPE (EvNavigationAction, ev_navigation_action, GTK_TYPE_ACTION)
+
+#define MAX_LABEL_LENGTH 48
+
+#define EV_NAVIGATION_ACTION_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_NAVIGATION_ACTION, EvNavigationActionPrivate))
+
+static void
+ev_navigation_action_history_changed (EvHistory *history,
+ gpointer data)
+{
+ EvNavigationAction *action = EV_NAVIGATION_ACTION (data);
+
+ gtk_action_set_sensitive (GTK_ACTION (action),
+ ev_history_get_n_links (history) > 0);
+}
+
+void
+ev_navigation_action_set_history (EvNavigationAction *action,
+ EvHistory *history)
+{
+ action->priv->history = history;
+
+ g_object_add_weak_pointer (G_OBJECT (action->priv->history),
+ (gpointer) &action->priv->history);
+
+ g_signal_connect_object (history, "changed",
+ G_CALLBACK (ev_navigation_action_history_changed),
+ action, 0);
+}
+
+static void
+activate_menu_item_cb (GtkWidget *widget, EvNavigationAction *action)
+{
+ int index;
+
+ g_return_if_fail (EV_IS_HISTORY (action->priv->history));
+
+ index = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "index"));
+
+ if (action->priv->history) {
+ EvLink *link;
+
+ link = ev_history_get_link_nth (action->priv->history, index);
+
+ g_signal_emit (action, widget_signals[WIDGET_ACTIVATE_LINK], 0, link);
+ }
+}
+
+static GtkWidget *
+new_history_menu_item (EvNavigationAction *action,
+ EvLink *link,
+ int index)
+{
+ GtkLabel *label;
+ GtkWidget *item;
+ const char *title;
+
+ title = ev_link_get_title (link);
+ item = gtk_image_menu_item_new_with_label (title);
+ label = GTK_LABEL (gtk_bin_get_child (GTK_BIN (item)));
+ gtk_label_set_use_markup (label, TRUE);
+ g_object_set_data (G_OBJECT (item), "index",
+ GINT_TO_POINTER (index));
+
+ gtk_label_set_ellipsize (label, PANGO_ELLIPSIZE_END);
+ gtk_label_set_max_width_chars (label, MAX_LABEL_LENGTH);
+
+ g_signal_connect (item, "activate",
+ G_CALLBACK (activate_menu_item_cb),
+ action);
+
+ gtk_widget_show (item);
+
+ return item;
+}
+
+static GtkWidget *
+build_menu (EvNavigationAction *action)
+{
+ GtkMenuShell *menu;
+ GtkWidget *item;
+ EvLink *link;
+ EvHistory *history = action->priv->history;
+ int start, end, i;
+
+ if (history == NULL || ev_history_get_n_links (history) <= 0) {
+ return NULL;
+ }
+
+ menu = GTK_MENU_SHELL (gtk_menu_new ());
+
+ start = 0;
+ end = ev_history_get_n_links (history);
+
+ for (i = start; i < end; i++) {
+ link = ev_history_get_link_nth (history, i);
+ item = new_history_menu_item (action, link, i);
+ gtk_menu_shell_prepend (menu, item);
+ }
+
+ return GTK_WIDGET (menu);
+}
+
+static void
+menu_activated_cb (EvNavigationActionWidget *button,
+ EvNavigationAction *action)
+{
+ GtkWidget *menu;
+
+ menu = build_menu (action);
+ ev_navigation_action_widget_set_menu (button, menu);
+}
+
+static void
+connect_proxy (GtkAction *action, GtkWidget *proxy)
+{
+ GtkWidget *menu;
+
+ if (GTK_IS_TOOL_ITEM (proxy)) {
+ /* set dummy menu so the arrow gets sensitive */
+ menu = gtk_menu_new ();
+ ev_navigation_action_widget_set_menu (EV_NAVIGATION_ACTION_WIDGET (proxy), menu);
+
+ g_signal_connect (proxy, "show-menu",
+ G_CALLBACK (menu_activated_cb), action);
+ }
+
+ GTK_ACTION_CLASS (ev_navigation_action_parent_class)->connect_proxy (action, proxy);
+}
+
+static GtkWidget *
+create_tool_item (GtkAction *action)
+{
+ EvNavigationActionWidget *proxy;
+
+ proxy = g_object_new (EV_TYPE_NAVIGATION_ACTION_WIDGET, NULL);
+ gtk_widget_show (GTK_WIDGET (proxy));
+
+ return GTK_WIDGET (proxy);
+}
+
+static GtkWidget *
+create_menu_item (GtkAction *action)
+{
+ GtkWidget *menu;
+ GtkWidget *menu_item;
+
+ menu = build_menu (EV_NAVIGATION_ACTION (action));
+
+ menu_item = GTK_ACTION_CLASS (ev_navigation_action_parent_class)->create_menu_item (action);
+
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu);
+
+ gtk_widget_show (menu_item);
+
+ return menu_item;
+}
+
+static void
+ev_navigation_action_init (EvNavigationAction *action)
+{
+ action->priv = EV_NAVIGATION_ACTION_GET_PRIVATE (action);
+}
+
+static void
+ev_navigation_action_finalize (GObject *object)
+{
+ EvNavigationAction *action = EV_NAVIGATION_ACTION (object);
+
+ if (action->priv->history) {
+ g_object_remove_weak_pointer (G_OBJECT (action->priv->history),
+ (gpointer) &action->priv->history);
+ action->priv->history = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_navigation_action_parent_class)->finalize (object);
+}
+
+static void
+ev_navigation_action_class_init (EvNavigationActionClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+ GtkActionClass *action_class = GTK_ACTION_CLASS (class);
+
+ object_class->finalize = ev_navigation_action_finalize;
+
+ action_class->toolbar_item_type = GTK_TYPE_TOOL_ITEM;
+ action_class->create_tool_item = create_tool_item;
+ action_class->connect_proxy = connect_proxy;
+ action_class->create_menu_item = create_menu_item;
+
+ widget_signals[WIDGET_ACTIVATE_LINK] = g_signal_new ("activate_link",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvNavigationActionClass, activate_link),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1,
+ G_TYPE_OBJECT);
+
+ g_type_class_add_private (object_class, sizeof (EvNavigationActionPrivate));
+}
diff --git a/shell/ev-navigation-action.h b/shell/ev-navigation-action.h
new file mode 100644
index 00000000..8089e4f4
--- /dev/null
+++ b/shell/ev-navigation-action.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2003, 2004 Marco Pesenti Gritti
+ * Copyright (C) 2003, 2004 Christian Persch
+ *
+ * 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, 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 EV_NAVIGATION_ACTION_H
+#define EV_NAVIGATION_ACTION_H
+
+#include <gtk/gtk.h>
+
+#include "ev-history.h"
+#include "ev-link.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_NAVIGATION_ACTION (ev_navigation_action_get_type ())
+#define EV_NAVIGATION_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_NAVIGATION_ACTION, EvNavigationAction))
+#define EV_NAVIGATION_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_NAVIGATION_ACTION, EvNavigationActionClass))
+#define EV_IS_NAVIGATION_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_NAVIGATION_ACTION))
+#define EV_IS_NAVIGATION_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EV_TYPE_NAVIGATION_ACTION))
+#define EV_NAVIGATION_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), EV_TYPE_NAVIGATION_ACTION, EvNavigationActionClass))
+
+typedef struct _EvNavigationAction EvNavigationAction;
+typedef struct _EvNavigationActionPrivate EvNavigationActionPrivate;
+typedef struct _EvNavigationActionClass EvNavigationActionClass;
+
+struct _EvNavigationAction
+{
+ GtkAction parent;
+
+ /*< private >*/
+ EvNavigationActionPrivate *priv;
+};
+
+struct _EvNavigationActionClass
+{
+ GtkActionClass parent_class;
+
+ void (* activate_link) (EvNavigationAction *action,
+ EvLink *link);
+};
+
+GType ev_navigation_action_get_type (void);
+void ev_navigation_action_set_history (EvNavigationAction *action,
+ EvHistory *history);
+
+G_END_DECLS
+
+#endif
diff --git a/shell/ev-open-recent-action.c b/shell/ev-open-recent-action.c
new file mode 100644
index 00000000..557e87a6
--- /dev/null
+++ b/shell/ev-open-recent-action.c
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2007, Carlos Garcia Campos <[email protected]>
+ *
+ * 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, 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 <config.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "ev-open-recent-action.h"
+
+
+enum {
+ ITEM_ACTIVATED,
+ N_SIGNALS
+};
+
+static void ev_open_recent_action_init (EvOpenRecentAction *action);
+static void ev_open_recent_action_class_init (EvOpenRecentActionClass *class);
+
+static guint action_signals[N_SIGNALS];
+
+G_DEFINE_TYPE (EvOpenRecentAction, ev_open_recent_action, GTK_TYPE_ACTION)
+
+static void
+recent_chooser_item_activated (GtkRecentChooser *chooser,
+ GtkAction *action)
+{
+ gchar *uri;
+
+ uri = gtk_recent_chooser_get_current_uri (chooser);
+ g_signal_emit (action, action_signals[ITEM_ACTIVATED], 0, uri);
+ g_free (uri);
+}
+
+static GtkWidget *
+ev_open_recent_action_create_tool_item (GtkAction *action)
+{
+ GtkWidget *tool_item;
+ GtkWidget *toolbar_recent_menu;
+ GtkRecentFilter *filter;
+
+ toolbar_recent_menu = gtk_recent_chooser_menu_new_for_manager (gtk_recent_manager_get_default ());
+ gtk_recent_chooser_set_local_only (GTK_RECENT_CHOOSER (toolbar_recent_menu), FALSE);
+ gtk_recent_chooser_set_sort_type (GTK_RECENT_CHOOSER (toolbar_recent_menu), GTK_RECENT_SORT_MRU);
+ gtk_recent_chooser_set_limit (GTK_RECENT_CHOOSER (toolbar_recent_menu), 5);
+ g_signal_connect (toolbar_recent_menu, "item_activated",
+ G_CALLBACK (recent_chooser_item_activated),
+ action);
+
+ filter = gtk_recent_filter_new ();
+ gtk_recent_filter_add_application (filter, g_get_application_name ());
+ gtk_recent_chooser_set_filter (GTK_RECENT_CHOOSER (toolbar_recent_menu), filter);
+
+ tool_item = GTK_WIDGET (gtk_menu_tool_button_new_from_stock (GTK_STOCK_OPEN));
+ gtk_menu_tool_button_set_arrow_tooltip_text (GTK_MENU_TOOL_BUTTON (tool_item),
+ _("Open a recently used document"));
+ gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (tool_item),
+ GTK_WIDGET (toolbar_recent_menu));
+ return tool_item;
+}
+
+static void
+ev_open_recent_action_init (EvOpenRecentAction *action)
+{
+}
+
+static void
+ev_open_recent_action_class_init (EvOpenRecentActionClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+ GtkActionClass *action_class = GTK_ACTION_CLASS (class);
+
+ action_class->toolbar_item_type = GTK_TYPE_MENU_TOOL_BUTTON;
+ action_class->create_tool_item = ev_open_recent_action_create_tool_item;
+
+ action_signals[ITEM_ACTIVATED] =
+ g_signal_new ("item_activated",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvOpenRecentActionClass, item_activated),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1,
+ G_TYPE_STRING);
+}
diff --git a/shell/ev-open-recent-action.h b/shell/ev-open-recent-action.h
new file mode 100644
index 00000000..87a8fed7
--- /dev/null
+++ b/shell/ev-open-recent-action.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2007, Carlos Garcia Campos <[email protected]>
+ *
+ * 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, 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 EV_OPEN_RECENT_ACTION_H
+#define EV_OPEN_RECENT_ACTION_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_OPEN_RECENT_ACTION (ev_open_recent_action_get_type ())
+#define EV_OPEN_RECENT_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_OPEN_RECENT_ACTION, EvOpenRecentAction))
+#define EV_OPEN_RECENT_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_OPEN_RECENT_ACTION, EvOpenRecentActionClass))
+#define EV_IS_OPEN_RECENT_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_OPEN_RECENT_ACTION))
+#define EV_IS_OPEN_RECENT_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EV_TYPE_OPEN_RECENT_ACTION))
+#define EV_OPEN_RECENT_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), EV_TYPE_OPEN_RECENT_ACTION, EvOpenRecentActionClass))
+
+typedef struct _EvOpenRecentAction EvOpenRecentAction;
+typedef struct _EvOpenRecentActionClass EvOpenRecentActionClass;
+
+struct _EvOpenRecentAction {
+ GtkAction parent;
+};
+
+struct _EvOpenRecentActionClass {
+ GtkActionClass parent_class;
+
+ void (* item_activated) (EvOpenRecentAction *action,
+ const gchar *uri);
+};
+
+GType ev_open_recent_action_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* EV_OPEN_RECENT_ACTION_H */
diff --git a/shell/ev-password-view.c b/shell/ev-password-view.c
new file mode 100644
index 00000000..8a1162ac
--- /dev/null
+++ b/shell/ev-password-view.c
@@ -0,0 +1,434 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gio/gio.h>
+
+#include "ev-keyring.h"
+#include "ev-password-view.h"
+
+enum {
+ UNLOCK,
+ LAST_SIGNAL
+};
+struct _EvPasswordViewPrivate {
+ GtkWindow *parent_window;
+ GtkWidget *label;
+ GtkWidget *password_entry;
+
+ gchar *password;
+ GPasswordSave password_save;
+
+ GFile *uri_file;
+};
+
+#define EV_PASSWORD_VIEW_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_PASSWORD_VIEW, EvPasswordViewPrivate));
+
+static guint password_view_signals [LAST_SIGNAL] = { 0 };
+
+
+G_DEFINE_TYPE (EvPasswordView, ev_password_view, GTK_TYPE_VIEWPORT)
+
+static void
+ev_password_view_finalize (GObject *object)
+{
+ EvPasswordView *password_view = EV_PASSWORD_VIEW (object);
+
+ if (password_view->priv->password) {
+ g_free (password_view->priv->password);
+ password_view->priv->password = NULL;
+ }
+
+ password_view->priv->parent_window = NULL;
+
+ if (password_view->priv->uri_file) {
+ g_object_unref (password_view->priv->uri_file);
+ password_view->priv->uri_file = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_password_view_parent_class)->finalize (object);
+}
+
+static void
+ev_password_view_class_init (EvPasswordViewClass *class)
+{
+ GObjectClass *g_object_class;
+ GtkWidgetClass *widget_class;
+
+ g_object_class = G_OBJECT_CLASS (class);
+ widget_class = GTK_WIDGET_CLASS (class);
+
+ password_view_signals[UNLOCK] =
+ g_signal_new ("unlock",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvPasswordViewClass, unlock),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ g_type_class_add_private (g_object_class, sizeof (EvPasswordViewPrivate));
+
+ g_object_class->finalize = ev_password_view_finalize;
+}
+
+static void
+ev_password_view_clicked_cb (GtkWidget *button,
+ EvPasswordView *password_view)
+{
+ ev_password_view_ask_password (password_view);
+}
+
+static void
+ev_password_view_init (EvPasswordView *password_view)
+{
+ GtkWidget *align;
+ GtkWidget *vbox;
+ GtkWidget *hbox;
+ GtkWidget *image;
+ GtkWidget *button;
+ GtkWidget *label;
+ gchar *markup;
+
+ password_view->priv = EV_PASSWORD_VIEW_GET_PRIVATE (password_view);
+
+ password_view->priv->password_save = G_PASSWORD_SAVE_NEVER;
+
+ gtk_widget_push_composite_child ();
+
+ /* set ourselves up */
+ align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
+ vbox = gtk_vbox_new (FALSE, 24);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 24);
+ gtk_container_add (GTK_CONTAINER (password_view), align);
+ gtk_container_add (GTK_CONTAINER (align), vbox);
+
+ password_view->priv->label =
+ (GtkWidget *) g_object_new (GTK_TYPE_LABEL,
+ "wrap", TRUE,
+ "selectable", TRUE,
+ NULL);
+ gtk_box_pack_start (GTK_BOX (vbox), password_view->priv->label, FALSE, FALSE, 0);
+
+ image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION,
+ GTK_ICON_SIZE_DIALOG);
+ gtk_box_pack_start (GTK_BOX (vbox), image, FALSE, FALSE, 0);
+
+ label = gtk_label_new (NULL);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ markup = g_strdup_printf ("<span size=\"x-large\">%s</span>",
+ _("This document is locked and can only be read by entering the correct password."));
+ gtk_label_set_markup (GTK_LABEL (label), markup);
+ g_free (markup);
+
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
+
+ button = gtk_button_new_with_mnemonic (_("_Unlock Document"));
+ g_signal_connect (button, "clicked", G_CALLBACK (ev_password_view_clicked_cb), password_view);
+ gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+
+ gtk_widget_show_all (align);
+ gtk_widget_pop_composite_child ();
+}
+
+/* Public functions */
+void
+ev_password_view_set_uri (EvPasswordView *password_view,
+ const char *uri)
+{
+ gchar *markup, *file_name;
+ GFile *file;
+
+ g_return_if_fail (EV_IS_PASSWORD_VIEW (password_view));
+ g_return_if_fail (uri != NULL);
+
+ file = g_file_new_for_uri (uri);
+ if (password_view->priv->uri_file &&
+ g_file_equal (file, password_view->priv->uri_file)) {
+ g_object_unref (file);
+ return;
+ }
+ if (password_view->priv->uri_file)
+ g_object_unref (password_view->priv->uri_file);
+ password_view->priv->uri_file = file;
+
+ file_name = g_file_get_basename (password_view->priv->uri_file);
+ markup = g_markup_printf_escaped ("<span size=\"x-large\" weight=\"bold\">%s</span>",
+ file_name);
+ g_free (file_name);
+
+ gtk_label_set_markup (GTK_LABEL (password_view->priv->label), markup);
+ g_free (markup);
+}
+
+static void
+ev_password_dialog_got_response (GtkDialog *dialog,
+ gint response_id,
+ EvPasswordView *password_view)
+{
+ gtk_widget_set_sensitive (GTK_WIDGET (password_view), TRUE);
+
+ if (response_id == GTK_RESPONSE_OK) {
+ g_free (password_view->priv->password);
+ password_view->priv->password =
+ g_strdup (gtk_entry_get_text (GTK_ENTRY (password_view->priv->password_entry)));
+
+ g_signal_emit (password_view, password_view_signals[UNLOCK], 0);
+ }
+
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+static void
+ev_password_dialog_remember_button_toggled (GtkToggleButton *button,
+ EvPasswordView *password_view)
+{
+ if (gtk_toggle_button_get_active (button)) {
+ gpointer data;
+
+ data = g_object_get_data (G_OBJECT (button), "password-save");
+ password_view->priv->password_save = GPOINTER_TO_INT (data);
+ }
+}
+
+static void
+ev_password_dialog_entry_changed_cb (GtkEditable *editable,
+ GtkDialog *dialog)
+{
+ const char *text;
+
+ text = gtk_entry_get_text (GTK_ENTRY (editable));
+
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK,
+ (text != NULL && *text != '\0'));
+}
+
+static void
+ev_password_dialog_entry_activated_cb (GtkEntry *entry,
+ GtkDialog *dialog)
+{
+ gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+}
+
+void
+ev_password_view_ask_password (EvPasswordView *password_view)
+{
+ GtkDialog *dialog;
+ GtkWidget *content_area, *action_area;
+ GtkWidget *entry_container;
+ GtkWidget *hbox, *main_vbox, *vbox, *icon;
+ GtkWidget *table;
+ GtkWidget *label;
+ gchar *format, *markup, *file_name;
+
+ gtk_widget_set_sensitive (GTK_WIDGET (password_view), FALSE);
+
+ dialog = GTK_DIALOG (gtk_dialog_new ());
+ content_area = gtk_dialog_get_content_area (dialog);
+ action_area = gtk_dialog_get_action_area (dialog);
+
+ /* Set the dialog up with HIG properties */
+ gtk_dialog_set_has_separator (dialog, FALSE);
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
+ gtk_box_set_spacing (GTK_BOX (content_area), 2); /* 2 * 5 + 2 = 12 */
+ gtk_container_set_border_width (GTK_CONTAINER (action_area), 5);
+ gtk_box_set_spacing (GTK_BOX (action_area), 6);
+
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Enter password"));
+ gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+ gtk_window_set_icon_name (GTK_WINDOW (dialog), GTK_STOCK_DIALOG_AUTHENTICATION);
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), password_view->priv->parent_window);
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+
+ gtk_dialog_add_buttons (dialog,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ _("_Unlock Document"), GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response (dialog, GTK_RESPONSE_OK);
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
+ GTK_RESPONSE_OK, FALSE);
+ gtk_dialog_set_alternative_button_order (dialog,
+ GTK_RESPONSE_OK,
+ GTK_RESPONSE_CANCEL,
+ -1);
+
+ /* Build contents */
+ hbox = gtk_hbox_new (FALSE, 12);
+ gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
+ gtk_box_pack_start (GTK_BOX (content_area), hbox, TRUE, TRUE, 0);
+ gtk_widget_show (hbox);
+
+ icon = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION,
+ GTK_ICON_SIZE_DIALOG);
+
+ gtk_misc_set_alignment (GTK_MISC (icon), 0.5, 0.0);
+ gtk_box_pack_start (GTK_BOX (hbox), icon, FALSE, FALSE, 0);
+ gtk_widget_show (icon);
+
+ main_vbox = gtk_vbox_new (FALSE, 18);
+ gtk_box_pack_start (GTK_BOX (hbox), main_vbox, TRUE, TRUE, 0);
+ gtk_widget_show (main_vbox);
+
+ label = gtk_label_new (NULL);
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ file_name = g_file_get_basename (password_view->priv->uri_file);
+ format = g_strdup_printf ("<span size=\"larger\" weight=\"bold\">%s</span>\n\n%s",
+ _("Password required"),
+ _("The document “%s” is locked and requires a password before it can be opened."));
+ markup = g_markup_printf_escaped (format, file_name);
+ gtk_label_set_markup (GTK_LABEL (label), markup);
+ g_free (format);
+ g_free (markup);
+ g_free (file_name);
+ gtk_box_pack_start (GTK_BOX (main_vbox), label,
+ FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (main_vbox), vbox, FALSE, FALSE, 0);
+ gtk_widget_show (vbox);
+
+ /* The table that holds the entries */
+ entry_container = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
+
+ gtk_alignment_set_padding (GTK_ALIGNMENT (entry_container),
+ 0, 0, 0, 0);
+
+ gtk_box_pack_start (GTK_BOX (vbox), entry_container,
+ FALSE, FALSE, 0);
+ gtk_widget_show (entry_container);
+
+ table = gtk_table_new (1, 2, FALSE);
+ gtk_table_set_col_spacings (GTK_TABLE (table), 12);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 6);
+ gtk_container_add (GTK_CONTAINER (entry_container), table);
+ gtk_widget_show (table);
+
+ label = gtk_label_new_with_mnemonic (_("_Password:"));
+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
+
+ password_view->priv->password_entry = gtk_entry_new ();
+ gtk_entry_set_visibility (GTK_ENTRY (password_view->priv->password_entry), FALSE);
+ g_signal_connect (password_view->priv->password_entry, "changed",
+ G_CALLBACK (ev_password_dialog_entry_changed_cb),
+ dialog);
+ g_signal_connect (password_view->priv->password_entry, "activate",
+ G_CALLBACK (ev_password_dialog_entry_activated_cb),
+ dialog);
+ gtk_table_attach (GTK_TABLE (table), label,
+ 0, 1, 0, 1,
+ GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+ gtk_widget_show (label);
+
+ gtk_table_attach_defaults (GTK_TABLE (table), password_view->priv->password_entry,
+ 1, 2, 0, 1);
+ gtk_widget_show (password_view->priv->password_entry);
+
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label),
+ password_view->priv->password_entry);
+
+ if (ev_keyring_is_available ()) {
+ GtkWidget *choice;
+ GtkWidget *remember_box;
+ GSList *group;
+
+ remember_box = gtk_vbox_new (FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (vbox), remember_box,
+ FALSE, FALSE, 0);
+ gtk_widget_show (remember_box);
+
+ choice = gtk_radio_button_new_with_mnemonic (NULL, _("Forget password _immediately"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (choice),
+ password_view->priv->password_save == G_PASSWORD_SAVE_NEVER);
+ g_object_set_data (G_OBJECT (choice), "password-save",
+ GINT_TO_POINTER (G_PASSWORD_SAVE_NEVER));
+ g_signal_connect (choice, "toggled",
+ G_CALLBACK (ev_password_dialog_remember_button_toggled),
+ password_view);
+ gtk_box_pack_start (GTK_BOX (remember_box), choice, FALSE, FALSE, 0);
+ gtk_widget_show (choice);
+
+ group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (choice));
+ choice = gtk_radio_button_new_with_mnemonic (group, _("Remember password until you _log out"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (choice),
+ password_view->priv->password_save == G_PASSWORD_SAVE_FOR_SESSION);
+ g_object_set_data (G_OBJECT (choice), "password-save",
+ GINT_TO_POINTER (G_PASSWORD_SAVE_FOR_SESSION));
+ g_signal_connect (choice, "toggled",
+ G_CALLBACK (ev_password_dialog_remember_button_toggled),
+ password_view);
+ gtk_box_pack_start (GTK_BOX (remember_box), choice, FALSE, FALSE, 0);
+ gtk_widget_show (choice);
+
+ group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (choice));
+ choice = gtk_radio_button_new_with_mnemonic (group, _("Remember _forever"));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (choice),
+ password_view->priv->password_save == G_PASSWORD_SAVE_PERMANENTLY);
+ g_object_set_data (G_OBJECT (choice), "password-save",
+ GINT_TO_POINTER (G_PASSWORD_SAVE_PERMANENTLY));
+ g_signal_connect (choice, "toggled",
+ G_CALLBACK (ev_password_dialog_remember_button_toggled),
+ password_view);
+ gtk_box_pack_start (GTK_BOX (remember_box), choice, FALSE, FALSE, 0);
+ gtk_widget_show (choice);
+ }
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (ev_password_dialog_got_response),
+ password_view);
+
+ gtk_widget_show (GTK_WIDGET (dialog));
+}
+
+const gchar *
+ev_password_view_get_password (EvPasswordView *password_view)
+{
+ return password_view->priv->password;
+}
+
+GPasswordSave
+ev_password_view_get_password_save_flags (EvPasswordView *password_view)
+{
+ return password_view->priv->password_save;
+}
+
+GtkWidget *
+ev_password_view_new (GtkWindow *parent)
+{
+ EvPasswordView *retval;
+
+ retval = EV_PASSWORD_VIEW (g_object_new (EV_TYPE_PASSWORD_VIEW, NULL));
+
+ retval->priv->parent_window = parent;
+
+ return GTK_WIDGET (retval);
+}
+
diff --git a/shell/ev-password-view.h b/shell/ev-password-view.h
new file mode 100644
index 00000000..a98e40c2
--- /dev/null
+++ b/shell/ev-password-view.h
@@ -0,0 +1,59 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 __EV_PASSWORD_VIEW_H__
+#define __EV_PASSWORD_VIEW_H__
+
+#include <gtk/gtk.h>
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_PASSWORD_VIEW (ev_password_view_get_type ())
+#define EV_PASSWORD_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_PASSWORD_VIEW, EvPasswordView))
+#define EV_IS_PASSWORD_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_PASSWORD_VIEW))
+
+typedef struct _EvPasswordView EvPasswordView;
+typedef struct _EvPasswordViewClass EvPasswordViewClass;
+typedef struct _EvPasswordViewPrivate EvPasswordViewPrivate;
+
+struct _EvPasswordView {
+ GtkViewport parent_instance;
+
+ EvPasswordViewPrivate *priv;
+};
+
+struct _EvPasswordViewClass {
+ GtkViewportClass parent_class;
+
+ /* signals */
+ void (*unlock) (EvPasswordView *self);
+};
+
+GType ev_password_view_get_type (void) G_GNUC_CONST;
+GtkWidget *ev_password_view_new (GtkWindow *parent);
+void ev_password_view_set_uri (EvPasswordView *password_view,
+ const char *uri);
+void ev_password_view_ask_password (EvPasswordView *password_view);
+const gchar *ev_password_view_get_password (EvPasswordView *password_view);
+GPasswordSave ev_password_view_get_password_save_flags (EvPasswordView *password_view);
+
+G_END_DECLS
+
+#endif /* __EV_PASSWORD_VIEW_H__ */
diff --git a/shell/ev-progress-message-area.c b/shell/ev-progress-message-area.c
new file mode 100644
index 00000000..a0b74b0a
--- /dev/null
+++ b/shell/ev-progress-message-area.c
@@ -0,0 +1,198 @@
+/* ev-progress-message-area.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+
+#include <gtk/gtk.h>
+
+#include "ev-progress-message-area.h"
+
+#define EV_PROGRESS_MESSAGE_AREA_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EV_TYPE_PROGRESS_MESSAGE_AREA, EvProgressMessageAreaPrivate))
+
+struct _EvProgressMessageAreaPrivate {
+ GtkWidget *label;
+ GtkWidget *progress_bar;
+};
+
+enum {
+ PROP_0,
+ PROP_STATUS,
+ PROP_FRACTION
+};
+
+static void ev_progress_message_area_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void ev_progress_message_area_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+
+G_DEFINE_TYPE (EvProgressMessageArea, ev_progress_message_area, EV_TYPE_MESSAGE_AREA)
+
+static void
+ev_progress_message_area_class_init (EvProgressMessageAreaClass *class)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+
+ gobject_class->set_property = ev_progress_message_area_set_property;
+ gobject_class->get_property = ev_progress_message_area_get_property;
+
+ g_object_class_install_property (gobject_class,
+ PROP_STATUS,
+ g_param_spec_string ("status",
+ "Status",
+ "The status text of the progress area",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (gobject_class,
+ PROP_FRACTION,
+ g_param_spec_double ("fraction",
+ "Fraction",
+ "The fraction of total work that has been completed",
+ 0.0, 1.0, 0.0,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (gobject_class, sizeof (EvProgressMessageAreaPrivate));
+}
+
+static void
+ev_progress_message_area_init (EvProgressMessageArea *area)
+{
+ GtkWidget *contents;
+ GtkWidget *vbox;
+
+ area->priv = EV_PROGRESS_MESSAGE_AREA_GET_PRIVATE (area);
+
+ contents = _ev_message_area_get_main_box (EV_MESSAGE_AREA (area));
+
+ vbox = gtk_vbox_new (FALSE, 6);
+
+ area->priv->label = gtk_label_new (NULL);
+ gtk_label_set_use_markup (GTK_LABEL (area->priv->label), TRUE);
+ gtk_label_set_ellipsize (GTK_LABEL (area->priv->label),
+ PANGO_ELLIPSIZE_END);
+ gtk_misc_set_alignment (GTK_MISC (area->priv->label), 0.0, 0.5);
+ gtk_box_pack_start (GTK_BOX (vbox), area->priv->label, TRUE, TRUE, 0);
+ gtk_widget_show (area->priv->label);
+
+ area->priv->progress_bar = gtk_progress_bar_new ();
+ gtk_widget_set_size_request (area->priv->progress_bar, -1, 15);
+ gtk_box_pack_start (GTK_BOX (vbox), area->priv->progress_bar, TRUE, FALSE, 0);
+ gtk_widget_show (area->priv->progress_bar);
+
+ gtk_box_pack_start (GTK_BOX (contents), vbox, TRUE, TRUE, 0);
+ gtk_widget_show (vbox);
+}
+
+static void
+ev_progress_message_area_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvProgressMessageArea *area = EV_PROGRESS_MESSAGE_AREA (object);
+
+ switch (prop_id) {
+ case PROP_STATUS:
+ ev_progress_message_area_set_status (area, g_value_get_string (value));
+ break;
+ case PROP_FRACTION:
+ ev_progress_message_area_set_fraction (area, g_value_get_double (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_progress_message_area_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvProgressMessageArea *area = EV_PROGRESS_MESSAGE_AREA (object);
+
+ switch (prop_id) {
+ case PROP_STATUS:
+ g_value_set_string (value, gtk_label_get_label (GTK_LABEL (area->priv->label)));
+ break;
+ case PROP_FRACTION: {
+ gdouble fraction;
+
+ fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (area->priv->progress_bar));
+ g_value_set_double (value, fraction);
+ }
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+GtkWidget *
+ev_progress_message_area_new (const gchar *stock_id,
+ const gchar *text,
+ const gchar *first_button_text,
+ ...)
+{
+ GtkWidget *widget;
+
+ widget = g_object_new (EV_TYPE_PROGRESS_MESSAGE_AREA,
+ "message-type", GTK_MESSAGE_OTHER,
+ "text", text,
+ NULL);
+ if (first_button_text) {
+ va_list args;
+
+ va_start (args, first_button_text);
+ _ev_message_area_add_buttons_valist (EV_MESSAGE_AREA (widget),
+ first_button_text,
+ args);
+ va_end (args);
+ }
+
+ ev_message_area_set_image_from_stock (EV_MESSAGE_AREA (widget), stock_id);
+
+ return widget;
+}
+
+void
+ev_progress_message_area_set_status (EvProgressMessageArea *area,
+ const gchar *str)
+{
+ g_return_if_fail (EV_IS_PROGRESS_MESSAGE_AREA (area));
+
+ gtk_label_set_text (GTK_LABEL (area->priv->label), str);
+
+ g_object_notify (G_OBJECT (area), "status");
+}
+
+void
+ev_progress_message_area_set_fraction (EvProgressMessageArea *area,
+ gdouble fraction)
+{
+ g_return_if_fail (EV_IS_PROGRESS_MESSAGE_AREA (area));
+
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (area->priv->progress_bar),
+ fraction);
+ g_object_notify (G_OBJECT (area), "fraction");
+}
diff --git a/shell/ev-progress-message-area.h b/shell/ev-progress-message-area.h
new file mode 100644
index 00000000..ff96d0f7
--- /dev/null
+++ b/shell/ev-progress-message-area.h
@@ -0,0 +1,64 @@
+/* ev-progress-message-area.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 EV_PROGRESS_MESSAGE_AREA_H
+#define EV_PROGRESS_MESSAGE_AREA_H
+
+#include <gtk/gtk.h>
+
+#include "ev-message-area.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_PROGRESS_MESSAGE_AREA (ev_progress_message_area_get_type ())
+#define EV_PROGRESS_MESSAGE_AREA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EV_TYPE_PROGRESS_MESSAGE_AREA, EvProgressMessageArea))
+#define EV_PROGRESS_MESSAGE_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_PROGRESS_MESSAGE_AREA, EvProgressMessageAreaClass))
+#define EV_IS_PROGRESS_MESSAGE_AREA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EV_TYPE_PROGRESS_MESSAGE_AREA))
+#define EV_IS_PROGRESS_MESSAGE_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EV_TYPE_PROGRESS_MESSAGE_AREA))
+#define EV_PROGRESS_MESSAGE_AREA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EV_TYPE_PROGRESS_MESSAGE_AREA, EvProgressMessageAreaClass))
+
+typedef struct _EvProgressMessageArea EvProgressMessageArea;
+typedef struct _EvProgressMessageAreaClass EvProgressMessageAreaClass;
+typedef struct _EvProgressMessageAreaPrivate EvProgressMessageAreaPrivate;
+
+struct _EvProgressMessageArea {
+ EvMessageArea parent_instance;
+
+ /*< private >*/
+ EvProgressMessageAreaPrivate *priv;
+};
+
+struct _EvProgressMessageAreaClass {
+ EvMessageAreaClass parent_class;
+};
+
+GType ev_progress_message_area_get_type (void) G_GNUC_CONST;
+GtkWidget *ev_progress_message_area_new (const gchar *stock_id,
+ const gchar *text,
+ const gchar *first_button_text,
+ ...);
+void ev_progress_message_area_set_status (EvProgressMessageArea *area,
+ const gchar *str);
+void ev_progress_message_area_set_fraction (EvProgressMessageArea *area,
+ gdouble fraction);
+
+G_END_DECLS
+
+#endif /* EV_PROGRESS_MESSAGE_AREA_H */
diff --git a/shell/ev-properties-dialog.c b/shell/ev-properties-dialog.c
new file mode 100644
index 00000000..722c298a
--- /dev/null
+++ b/shell/ev-properties-dialog.c
@@ -0,0 +1,138 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "ev-document-fonts.h"
+#include "ev-properties-dialog.h"
+#include "ev-properties-fonts.h"
+#include "ev-properties-view.h"
+#include "ev-properties-license.h"
+
+struct _EvPropertiesDialog {
+ GtkDialog base_instance;
+
+ EvDocument *document;
+ GtkWidget *notebook;
+ GtkWidget *general_page;
+ GtkWidget *fonts_page;
+ GtkWidget *license_page;
+};
+
+struct _EvPropertiesDialogClass {
+ GtkDialogClass base_class;
+};
+
+G_DEFINE_TYPE (EvPropertiesDialog, ev_properties_dialog, GTK_TYPE_DIALOG)
+
+static void
+ev_properties_dialog_class_init (EvPropertiesDialogClass *properties_class)
+{
+}
+
+static void
+ev_properties_dialog_init (EvPropertiesDialog *properties)
+{
+ GtkBox *content_area;
+
+ content_area = GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (properties)));
+
+ gtk_window_set_title (GTK_WINDOW (properties), _("Properties"));
+ gtk_window_set_destroy_with_parent (GTK_WINDOW (properties), TRUE);
+ gtk_dialog_set_has_separator (GTK_DIALOG (properties), FALSE);
+ gtk_container_set_border_width (GTK_CONTAINER (properties), 5);
+ gtk_box_set_spacing (content_area, 2);
+
+ gtk_dialog_add_button (GTK_DIALOG (properties), GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CANCEL);
+ gtk_dialog_set_default_response (GTK_DIALOG (properties),
+ GTK_RESPONSE_CANCEL);
+
+ properties->notebook = gtk_notebook_new ();
+ gtk_container_set_border_width (GTK_CONTAINER (properties->notebook), 5);
+ gtk_box_pack_start (content_area, properties->notebook, TRUE, TRUE, 0);
+ gtk_widget_show (properties->notebook);
+
+ g_signal_connect (properties, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+}
+
+void
+ev_properties_dialog_set_document (EvPropertiesDialog *properties,
+ const gchar *uri,
+ EvDocument *document)
+{
+ GtkWidget *label;
+ const EvDocumentInfo *info;
+
+ properties->document = document;
+
+ info = ev_document_get_info (document);
+
+ if (properties->general_page == NULL) {
+ label = gtk_label_new (_("General"));
+ properties->general_page = ev_properties_view_new (uri);
+ gtk_notebook_append_page (GTK_NOTEBOOK (properties->notebook),
+ properties->general_page, label);
+ gtk_widget_show (properties->general_page);
+ }
+ ev_properties_view_set_info (EV_PROPERTIES_VIEW (properties->general_page), info);
+
+ if (EV_IS_DOCUMENT_FONTS (document)) {
+ if (properties->fonts_page == NULL) {
+ label = gtk_label_new (_("Fonts"));
+ properties->fonts_page = ev_properties_fonts_new ();
+ gtk_notebook_append_page (GTK_NOTEBOOK (properties->notebook),
+ properties->fonts_page, label);
+ gtk_widget_show (properties->fonts_page);
+ }
+
+ ev_properties_fonts_set_document
+ (EV_PROPERTIES_FONTS (properties->fonts_page), document);
+ }
+
+ if (info->fields_mask & EV_DOCUMENT_INFO_LICENSE && info->license) {
+ if (properties->license_page == NULL) {
+ label = gtk_label_new (_("Document License"));
+ properties->license_page = ev_properties_license_new ();
+ gtk_notebook_append_page (GTK_NOTEBOOK (properties->notebook),
+ properties->license_page, label);
+ gtk_widget_show (properties->license_page);
+ }
+
+ ev_properties_license_set_license
+ (EV_PROPERTIES_LICENSE (properties->license_page), info->license);
+ }
+}
+
+GtkWidget *
+ev_properties_dialog_new ()
+{
+ EvPropertiesDialog *properties;
+
+ properties = g_object_new (EV_TYPE_PROPERTIES_DIALOG, NULL);
+
+ return GTK_WIDGET (properties);
+}
diff --git a/shell/ev-properties-dialog.h b/shell/ev-properties-dialog.h
new file mode 100644
index 00000000..9484627c
--- /dev/null
+++ b/shell/ev-properties-dialog.h
@@ -0,0 +1,47 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 __EV_PROPERTIES_DIALOG_H__
+#define __EV_PROPERTIES_DIALOG_H__
+
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvPropertiesDialog EvPropertiesDialog;
+typedef struct _EvPropertiesDialogClass EvPropertiesDialogClass;
+typedef struct _EvPropertiesDialogPrivate EvPropertiesDialogPrivate;
+
+#define EV_TYPE_PROPERTIES_DIALOG (ev_properties_dialog_get_type())
+#define EV_PROPERTIES_DIALOG(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_PROPERTIES_DIALOG, EvPropertiesDialog))
+#define EV_PROPERTIES_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_PROPERTIES_DIALOG, EvPropertiesDialogClass))
+#define EV_IS_PROPERTIES_DIALOG(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_PROPERTIES_DIALOG))
+#define EV_IS_PROPERTIES_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_PROPERTIES_DIALOG))
+#define EV_PROPERTIES_DIALOG_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_PROPERTIES_DIALOG, EvPropertiesDialogClass))
+
+GType ev_properties_dialog_get_type (void);
+GtkWidget *ev_properties_dialog_new (void);
+void ev_properties_dialog_set_document (EvPropertiesDialog *properties,
+ const gchar *uri,
+ EvDocument *document);
+
+G_END_DECLS
+
+#endif /* __EV_PROPERTIES_DIALOG_H__ */
diff --git a/shell/ev-properties-fonts.c b/shell/ev-properties-fonts.c
new file mode 100644
index 00000000..8480ebd2
--- /dev/null
+++ b/shell/ev-properties-fonts.c
@@ -0,0 +1,224 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "ev-document-fonts.h"
+#include "ev-job-scheduler.h"
+#include "ev-jobs.h"
+#include "ev-properties-fonts.h"
+
+struct _EvPropertiesFonts {
+ GtkVBox base_instance;
+
+ GtkWidget *fonts_treeview;
+ GtkWidget *fonts_progress_label;
+ EvJob *fonts_job;
+
+ EvDocument *document;
+};
+
+struct _EvPropertiesFontsClass {
+ GtkVBoxClass base_class;
+};
+
+static void
+job_fonts_finished_cb (EvJob *job, EvPropertiesFonts *properties);
+
+G_DEFINE_TYPE (EvPropertiesFonts, ev_properties_fonts, GTK_TYPE_VBOX)
+
+static void
+ev_properties_fonts_dispose (GObject *object)
+{
+ EvPropertiesFonts *properties = EV_PROPERTIES_FONTS (object);
+
+ if (properties->fonts_job) {
+ g_signal_handlers_disconnect_by_func (properties->fonts_job,
+ job_fonts_finished_cb,
+ properties);
+ ev_job_cancel (properties->fonts_job);
+
+ g_object_unref (properties->fonts_job);
+ properties->fonts_job = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_properties_fonts_parent_class)->dispose (object);
+}
+
+static void
+ev_properties_fonts_class_init (EvPropertiesFontsClass *properties_class)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (properties_class);
+
+ g_object_class->dispose = ev_properties_fonts_dispose;
+}
+
+static void
+font_cell_data_func (GtkTreeViewColumn *col, GtkCellRenderer *renderer,
+ GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)
+{
+ char *name;
+ char *details;
+ char *markup;
+
+ gtk_tree_model_get (model, iter,
+ EV_DOCUMENT_FONTS_COLUMN_NAME, &name,
+ EV_DOCUMENT_FONTS_COLUMN_DETAILS, &details,
+ -1);
+
+ if (details) {
+ markup = g_strdup_printf ("<b><big>%s</big></b>\n<small>%s</small>",
+ name, details);
+ } else {
+ markup = g_strdup_printf ("<b><big>%s</big></b>", name);
+ }
+
+ g_object_set (renderer, "markup", markup, NULL);
+
+ g_free (markup);
+ g_free (details);
+ g_free (name);
+}
+
+static void
+ev_properties_fonts_init (EvPropertiesFonts *properties)
+{
+ GtkWidget *swindow;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+
+ gtk_container_set_border_width (GTK_CONTAINER (properties), 12);
+ gtk_box_set_spacing (GTK_BOX (properties), 6);
+
+ swindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swindow),
+ GTK_SHADOW_IN);
+
+ properties->fonts_treeview = gtk_tree_view_new ();
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (properties->fonts_treeview),
+ FALSE);
+ column = gtk_tree_view_column_new ();
+ gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (properties->fonts_treeview),
+ column);
+
+ renderer = GTK_CELL_RENDERER (g_object_new (GTK_TYPE_CELL_RENDERER_TEXT,
+ "ypad", 6, NULL));
+ gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column),
+ renderer, FALSE);
+ gtk_tree_view_column_set_title (GTK_TREE_VIEW_COLUMN (column),
+ _("Font"));
+ gtk_tree_view_column_set_cell_data_func (column, renderer,
+ font_cell_data_func,
+ NULL, NULL);
+
+ gtk_container_add (GTK_CONTAINER (swindow), properties->fonts_treeview);
+ gtk_widget_show (properties->fonts_treeview);
+
+ gtk_box_pack_start (GTK_BOX (properties), swindow,
+ TRUE, TRUE, 0);
+ gtk_widget_show (swindow);
+
+ properties->fonts_progress_label = gtk_label_new (NULL);
+ g_object_set (G_OBJECT (properties->fonts_progress_label),
+ "xalign", 0.0,
+ NULL);
+ gtk_box_pack_start (GTK_BOX (properties),
+ properties->fonts_progress_label,
+ FALSE, FALSE, 0);
+ gtk_widget_show (properties->fonts_progress_label);
+}
+
+static void
+update_progress_label (GtkWidget *label, double progress)
+{
+ if (progress > 0) {
+ char *progress_text;
+ progress_text = g_strdup_printf (_("Gathering font information… %3d%%"),
+ (int) (progress * 100));
+ gtk_label_set_text (GTK_LABEL (label), progress_text);
+ g_free (progress_text);
+ gtk_widget_show (label);
+ } else {
+ gtk_widget_hide (label);
+ }
+}
+
+static void
+job_fonts_finished_cb (EvJob *job, EvPropertiesFonts *properties)
+{
+ g_signal_handlers_disconnect_by_func (job, job_fonts_finished_cb, properties);
+ g_object_unref (properties->fonts_job);
+ properties->fonts_job = NULL;
+}
+
+static void
+job_fonts_updated_cb (EvJobFonts *job, gdouble progress, EvPropertiesFonts *properties)
+{
+ GtkTreeModel *model;
+ EvDocumentFonts *document_fonts = EV_DOCUMENT_FONTS (properties->document);
+
+ update_progress_label (properties->fonts_progress_label, progress);
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (properties->fonts_treeview));
+ /* Documen lock is already held by the jop */
+ ev_document_fonts_fill_model (document_fonts, model);
+}
+
+void
+ev_properties_fonts_set_document (EvPropertiesFonts *properties,
+ EvDocument *document)
+{
+ GtkTreeView *tree_view = GTK_TREE_VIEW (properties->fonts_treeview);
+ GtkListStore *list_store;
+
+ properties->document = document;
+
+ list_store = gtk_list_store_new (EV_DOCUMENT_FONTS_COLUMN_NUM_COLUMNS,
+ G_TYPE_STRING, G_TYPE_STRING);
+ gtk_tree_view_set_model (tree_view, GTK_TREE_MODEL (list_store));
+
+ properties->fonts_job = ev_job_fonts_new (properties->document);
+ g_signal_connect (properties->fonts_job, "updated",
+ G_CALLBACK (job_fonts_updated_cb),
+ properties);
+ g_signal_connect (properties->fonts_job, "finished",
+ G_CALLBACK (job_fonts_finished_cb),
+ properties);
+ ev_job_scheduler_push_job (properties->fonts_job, EV_JOB_PRIORITY_NONE);
+}
+
+GtkWidget *
+ev_properties_fonts_new ()
+{
+ EvPropertiesFonts *properties;
+
+ properties = g_object_new (EV_TYPE_PROPERTIES_FONTS, NULL);
+
+ return GTK_WIDGET (properties);
+}
diff --git a/shell/ev-properties-fonts.h b/shell/ev-properties-fonts.h
new file mode 100644
index 00000000..9f6ec0cd
--- /dev/null
+++ b/shell/ev-properties-fonts.h
@@ -0,0 +1,48 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 __EV_PROPERTIES_FONTS_H__
+#define __EV_PROPERTIES_FONTS_H__
+
+#include "ev-document.h"
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvPropertiesFonts EvPropertiesFonts;
+typedef struct _EvPropertiesFontsClass EvPropertiesFontsClass;
+typedef struct _EvPropertiesFontsPrivate EvPropertiesFontsPrivate;
+
+#define EV_TYPE_PROPERTIES_FONTS (ev_properties_fonts_get_type())
+#define EV_PROPERTIES_FONTS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_PROPERTIES_FONTS, EvPropertiesFonts))
+#define EV_PROPERTIES_FONTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_PROPERTIES_FONTS, EvPropertiesFontsClass))
+#define EV_IS_PROPERTIES(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_PROPERTIES_FONTS))
+#define EV_IS_PROPERTIES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_PROPERTIES_FONTS))
+#define EV_PROPERTIES_FONTS_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_PROPERTIES_FONTS, EvPropertiesFontsClass))
+
+GType ev_properties_fonts_get_type (void);
+GtkWidget *ev_properties_fonts_new (void);
+void ev_properties_fonts_set_document (EvPropertiesFonts *properties,
+ EvDocument *document);
+
+G_END_DECLS
+
+#endif /* __EV_PROPERTIES_FONTS_H__ */
diff --git a/shell/ev-properties-license.c b/shell/ev-properties-license.c
new file mode 100644
index 00000000..1216df45
--- /dev/null
+++ b/shell/ev-properties-license.c
@@ -0,0 +1,169 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Juanjo Marín <[email protected]>
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "ev-properties-license.h"
+
+struct _EvPropertiesLicense {
+ GtkVBox base_instance;
+};
+
+struct _EvPropertiesLicenseClass {
+ GtkVBoxClass base_class;
+};
+
+G_DEFINE_TYPE (EvPropertiesLicense, ev_properties_license, GTK_TYPE_VBOX)
+
+static void
+ev_properties_license_class_init (EvPropertiesLicenseClass *properties_license_class)
+{
+}
+
+static GtkWidget *
+get_license_text_widget (EvDocumentLicense *license)
+{
+ GtkWidget *swindow, *textview;
+ GtkTextBuffer *buffer;
+
+ textview = gtk_text_view_new ();
+ gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (textview), GTK_WRAP_WORD);
+ gtk_text_view_set_left_margin (GTK_TEXT_VIEW (textview), 8);
+ gtk_text_view_set_right_margin (GTK_TEXT_VIEW (textview), 8);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview));
+ gtk_text_buffer_set_text (buffer, ev_document_license_get_text (license), -1);
+
+ swindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swindow),
+ GTK_SHADOW_IN);
+ gtk_container_add (GTK_CONTAINER (swindow), textview);
+ gtk_widget_show (textview);
+
+ return swindow;
+}
+
+static GtkWidget *
+get_license_uri_widget (const gchar *uri)
+{
+ GtkWidget *label;
+ gchar *checked_uri;
+ gchar *markup;
+
+ label = gtk_label_new (NULL);
+ g_object_set (G_OBJECT (label),
+ "xalign", 0.0,
+ "width_chars", 25,
+ "selectable", TRUE,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ NULL);
+
+ checked_uri = g_uri_parse_scheme (uri);
+ if (checked_uri) {
+ markup = g_markup_printf_escaped ("<a href=\"%s\">%s</a>", uri, uri);
+ gtk_label_set_markup (GTK_LABEL (label), markup);
+ g_free (markup);
+ g_free (checked_uri);
+ } else {
+ gtk_label_set_text (GTK_LABEL (label), uri);
+ }
+
+ return label;
+}
+
+static void
+ev_properties_license_add_section (EvPropertiesLicense *properties,
+ const gchar *title_text,
+ GtkWidget *contents)
+{
+ GtkWidget *title;
+ GtkWidget *alignment;
+ gchar *markup;
+
+ title = gtk_label_new (NULL);
+ gtk_misc_set_alignment (GTK_MISC (title), 0.0, 0.5);
+ gtk_label_set_use_markup (GTK_LABEL (title), TRUE);
+ markup = g_strdup_printf ("<b>%s</b>", title_text);
+ gtk_label_set_markup (GTK_LABEL (title), markup);
+ g_free (markup);
+ gtk_box_pack_start (GTK_BOX (properties), title, FALSE, FALSE, 0);
+ gtk_widget_show (title);
+
+ alignment = gtk_alignment_new (0.5, 0.5, 1., 1.);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 12, 0);
+ gtk_container_add (GTK_CONTAINER (alignment), contents);
+ gtk_widget_show (contents);
+
+ gtk_box_pack_start (GTK_BOX (properties), alignment, FALSE, TRUE, 0);
+ gtk_widget_show (alignment);
+}
+
+void
+ev_properties_license_set_license (EvPropertiesLicense *properties,
+ EvDocumentLicense *license)
+{
+ const gchar *text = ev_document_license_get_text (license);
+ const gchar *uri = ev_document_license_get_uri (license);
+ const gchar *web_statement = ev_document_license_get_web_statement (license);
+
+ if (text) {
+ ev_properties_license_add_section (properties,
+ _("Usage terms"),
+ get_license_text_widget (license));
+ }
+
+ if (uri) {
+ ev_properties_license_add_section (properties,
+ _("Text License"),
+ get_license_uri_widget (uri));
+ }
+
+ if (web_statement) {
+ ev_properties_license_add_section (properties,
+ _("Further Information"),
+ get_license_uri_widget (web_statement));
+ }
+}
+
+static void
+ev_properties_license_init (EvPropertiesLicense *properties)
+{
+ gtk_box_set_spacing (GTK_BOX (properties), 12);
+ gtk_container_set_border_width (GTK_CONTAINER (properties), 12);
+}
+
+GtkWidget *
+ev_properties_license_new (void)
+{
+ EvPropertiesLicense *properties_license;
+
+ properties_license = g_object_new (EV_TYPE_PROPERTIES_LICENSE, NULL);
+
+ return GTK_WIDGET (properties_license);
+}
diff --git a/shell/ev-properties-license.h b/shell/ev-properties-license.h
new file mode 100644
index 00000000..7b38fa55
--- /dev/null
+++ b/shell/ev-properties-license.h
@@ -0,0 +1,50 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Juanjo Marín <[email protected]>
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 __EV_PROPERTIES_LICENSE_VIEW_H__
+#define __EV_PROPERTIES_LICENSE_VIEW_H__
+
+#include <gtk/gtk.h>
+
+#include <evince-document.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvPropertiesLicense EvPropertiesLicense;
+typedef struct _EvPropertiesLicenseClass EvPropertiesLicenseClass;
+typedef struct _EvPropertiesLicensePrivate EvPropertiesLicensePrivate;
+
+#define EV_TYPE_PROPERTIES_LICENSE (ev_properties_license_get_type())
+#define EV_PROPERTIES_LICENSE(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_PROPERTIES_LICENSE, EvPropertiesLicense))
+#define EV_PROPERTIES_LICENSE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_PROPERTIES_LICENSE, EvPropertiesLicenseClass))
+#define EV_IS_PROPERTIES_LICENSE(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_PROPERTIES_LICENSE))
+#define EV_IS_PROPERTIES_LICENSE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_PROPERTIES_LICENSE))
+#define EV_PROPERTIES_LICENSE_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_PROPERTIES_LICENSE, EvPropertiesLicenseClass))
+
+GType ev_properties_license_get_type (void) G_GNUC_CONST;
+
+GtkWidget *ev_properties_license_new (void);
+void ev_properties_license_set_license (EvPropertiesLicense *properties_license,
+ EvDocumentLicense *license);
+
+G_END_DECLS
+
+#endif /* __EV_PROPERTIES_LICENSE_VIEW_H__ */
diff --git a/shell/ev-sidebar-annotations.c b/shell/ev-sidebar-annotations.c
new file mode 100644
index 00000000..5b8b8309
--- /dev/null
+++ b/shell/ev-sidebar-annotations.c
@@ -0,0 +1,542 @@
+/* ev-sidebar-annotations.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2010 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include "ev-document-annotations.h"
+#include "ev-sidebar-page.h"
+#include "ev-sidebar-annotations.h"
+#include "ev-jobs.h"
+#include "ev-job-scheduler.h"
+#include "ev-stock-icons.h"
+
+enum {
+ PROP_0,
+ PROP_WIDGET
+};
+
+enum {
+ COLUMN_MARKUP,
+ COLUMN_ICON,
+ COLUMN_ANNOT_MAPPING,
+ N_COLUMNS
+};
+
+enum {
+ ANNOT_ACTIVATED,
+ BEGIN_ANNOT_ADD,
+ ANNOT_ADD_CANCELLED,
+ N_SIGNALS
+};
+
+struct _EvSidebarAnnotationsPrivate {
+ EvDocument *document;
+
+ GtkWidget *notebook;
+ GtkWidget *tree_view;
+ GtkWidget *palette;
+ GtkToolItem *annot_text_item;
+
+ EvJob *job;
+ guint selection_changed_id;
+};
+
+static void ev_sidebar_annotations_page_iface_init (EvSidebarPageInterface *iface);
+static void ev_sidebar_annotations_load (EvSidebarAnnotations *sidebar_annots);
+
+static guint signals[N_SIGNALS];
+
+G_DEFINE_TYPE_EXTENDED (EvSidebarAnnotations,
+ ev_sidebar_annotations,
+ GTK_TYPE_VBOX,
+ 0,
+ G_IMPLEMENT_INTERFACE (EV_TYPE_SIDEBAR_PAGE,
+ ev_sidebar_annotations_page_iface_init))
+
+#define EV_SIDEBAR_ANNOTATIONS_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_SIDEBAR_ANNOTATIONS, EvSidebarAnnotationsPrivate))
+
+static void
+ev_sidebar_annotations_dispose (GObject *object)
+{
+ EvSidebarAnnotations *sidebar_annots = EV_SIDEBAR_ANNOTATIONS (object);
+ EvSidebarAnnotationsPrivate *priv = sidebar_annots->priv;
+
+ if (priv->document) {
+ g_object_unref (priv->document);
+ priv->document = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_sidebar_annotations_parent_class)->dispose (object);
+}
+
+static GtkTreeModel *
+ev_sidebar_annotations_create_simple_model (const gchar *message)
+{
+ GtkTreeModel *retval;
+ GtkTreeIter iter;
+ gchar *markup;
+
+ /* Creates a fake model to indicate that we're loading */
+ retval = (GtkTreeModel *)gtk_list_store_new (N_COLUMNS,
+ G_TYPE_STRING,
+ GDK_TYPE_PIXBUF,
+ G_TYPE_POINTER);
+
+ gtk_list_store_append (GTK_LIST_STORE (retval), &iter);
+ markup = g_strdup_printf ("<span size=\"larger\" style=\"italic\">%s</span>",
+ message);
+ gtk_list_store_set (GTK_LIST_STORE (retval), &iter,
+ COLUMN_MARKUP, markup,
+ -1);
+ g_free (markup);
+
+ return retval;
+}
+
+static void
+ev_sidebar_annotations_add_annots_list (EvSidebarAnnotations *ev_annots)
+{
+ GtkWidget *swindow;
+ GtkTreeModel *loading_model;
+ GtkCellRenderer *renderer;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
+ GtkWidget *label;
+
+ swindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swindow),
+ GTK_SHADOW_IN);
+
+ /* Create tree view */
+ loading_model = ev_sidebar_annotations_create_simple_model (_("Loading…"));
+ ev_annots->priv->tree_view = gtk_tree_view_new_with_model (loading_model);
+ g_object_unref (loading_model);
+
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (ev_annots->priv->tree_view),
+ FALSE);
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (ev_annots->priv->tree_view));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
+
+ column = gtk_tree_view_column_new ();
+
+ renderer = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes (column, renderer,
+ "pixbuf", COLUMN_ICON,
+ NULL);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes (column, renderer,
+ "markup", COLUMN_MARKUP,
+ NULL);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (ev_annots->priv->tree_view),
+ column);
+
+ gtk_container_add (GTK_CONTAINER (swindow), ev_annots->priv->tree_view);
+ gtk_widget_show (ev_annots->priv->tree_view);
+
+ label = gtk_label_new (_("List"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (ev_annots->priv->notebook),
+ swindow, label);
+ gtk_widget_show (label);
+
+ gtk_widget_show (swindow);
+}
+
+static void
+ev_sidebar_annotations_text_annot_button_toggled (GtkToggleToolButton *toolbutton,
+ EvSidebarAnnotations *sidebar_annots)
+{
+ EvAnnotationType annot_type;
+
+ if (!gtk_toggle_tool_button_get_active (toolbutton)) {
+ g_signal_emit (sidebar_annots, signals[ANNOT_ADD_CANCELLED], 0, NULL);
+ return;
+ }
+
+ if (GTK_TOOL_ITEM (toolbutton) == sidebar_annots->priv->annot_text_item)
+ annot_type = EV_ANNOTATION_TYPE_TEXT;
+ else
+ annot_type = EV_ANNOTATION_TYPE_UNKNOWN;
+
+ g_signal_emit (sidebar_annots, signals[BEGIN_ANNOT_ADD], 0, annot_type);
+}
+
+static void
+ev_sidebar_annotations_add_annots_palette (EvSidebarAnnotations *ev_annots)
+{
+ GtkWidget *swindow;
+ GtkWidget *group;
+ GtkToolItem *item;
+ GtkWidget *label;
+
+ swindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swindow),
+ GTK_SHADOW_IN);
+
+ ev_annots->priv->palette = gtk_tool_palette_new ();
+ group = gtk_tool_item_group_new (_("Annotations"));
+ gtk_container_add (GTK_CONTAINER (ev_annots->priv->palette), group);
+
+ /* FIXME: use a better icon than EDIT */
+ item = gtk_toggle_tool_button_new ();
+ gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (item), GTK_STOCK_EDIT);
+ gtk_tool_button_set_label (GTK_TOOL_BUTTON (item), _("Text"));
+ gtk_widget_set_tooltip_text (GTK_WIDGET (item), _("Add text annotation"));
+ ev_annots->priv->annot_text_item = item;
+ g_signal_connect (item, "toggled",
+ G_CALLBACK (ev_sidebar_annotations_text_annot_button_toggled),
+ ev_annots);
+ gtk_tool_item_group_insert (GTK_TOOL_ITEM_GROUP (group), item, -1);
+ gtk_widget_show (GTK_WIDGET (item));
+
+ gtk_container_add (GTK_CONTAINER (swindow), ev_annots->priv->palette);
+ gtk_widget_show (ev_annots->priv->palette);
+
+ label = gtk_label_new (_("Add"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (ev_annots->priv->notebook),
+ swindow, label);
+ gtk_widget_show (label);
+
+ gtk_widget_show (swindow);
+}
+
+static void
+ev_sidebar_annotations_init (EvSidebarAnnotations *ev_annots)
+{
+ ev_annots->priv = EV_SIDEBAR_ANNOTATIONS_GET_PRIVATE (ev_annots);
+
+ ev_annots->priv->notebook = gtk_notebook_new ();
+ gtk_notebook_set_show_tabs (GTK_NOTEBOOK (ev_annots->priv->notebook), FALSE);
+ gtk_notebook_set_show_border (GTK_NOTEBOOK (ev_annots->priv->notebook), FALSE);
+ ev_sidebar_annotations_add_annots_list (ev_annots);
+ ev_sidebar_annotations_add_annots_palette (ev_annots);
+ gtk_container_add (GTK_CONTAINER (ev_annots), ev_annots->priv->notebook);
+ gtk_widget_show (ev_annots->priv->notebook);
+}
+
+static void
+ev_sidebar_annotations_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvSidebarAnnotations *ev_sidebar_annots;
+
+ ev_sidebar_annots = EV_SIDEBAR_ANNOTATIONS (object);
+
+ switch (prop_id) {
+ case PROP_WIDGET:
+ g_value_set_object (value, ev_sidebar_annots->priv->notebook);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ev_sidebar_annotations_class_init (EvSidebarAnnotationsClass *klass)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (klass);
+
+ g_object_class->get_property = ev_sidebar_annotations_get_property;
+ g_object_class->dispose = ev_sidebar_annotations_dispose;
+
+ g_type_class_add_private (g_object_class, sizeof (EvSidebarAnnotationsPrivate));
+
+ g_object_class_override_property (g_object_class, PROP_WIDGET, "main-widget");
+
+ signals[ANNOT_ACTIVATED] =
+ g_signal_new ("annot-activated",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvSidebarAnnotationsClass, annot_activated),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
+ signals[BEGIN_ANNOT_ADD] =
+ g_signal_new ("begin-annot-add",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvSidebarAnnotationsClass, begin_annot_add),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__ENUM,
+ G_TYPE_NONE, 1,
+ EV_TYPE_ANNOTATION_TYPE);
+ signals[ANNOT_ADD_CANCELLED] =
+ g_signal_new ("annot-add-cancelled",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvSidebarAnnotationsClass, annot_add_cancelled),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0,
+ G_TYPE_NONE);
+}
+
+GtkWidget *
+ev_sidebar_annotations_new (void)
+{
+ return GTK_WIDGET (g_object_new (EV_TYPE_SIDEBAR_ANNOTATIONS, NULL));
+}
+
+void
+ev_sidebar_annotations_annot_added (EvSidebarAnnotations *sidebar_annots,
+ EvAnnotation *annot)
+{
+ GtkToggleToolButton *toolbutton;
+
+ if (EV_IS_ANNOTATION_TEXT (annot)) {
+ toolbutton = GTK_TOGGLE_TOOL_BUTTON (sidebar_annots->priv->annot_text_item);
+ g_signal_handlers_block_by_func (toolbutton,
+ ev_sidebar_annotations_text_annot_button_toggled,
+ sidebar_annots);
+ gtk_toggle_tool_button_set_active (toolbutton, FALSE);
+ g_signal_handlers_unblock_by_func (toolbutton,
+ ev_sidebar_annotations_text_annot_button_toggled,
+ sidebar_annots);
+ }
+
+ ev_sidebar_annotations_load (sidebar_annots);
+}
+
+static void
+selection_changed_cb (GtkTreeSelection *selection,
+ EvSidebarAnnotations *sidebar_annots)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ EvMapping *mapping = NULL;
+
+ gtk_tree_model_get (model, &iter,
+ COLUMN_ANNOT_MAPPING, &mapping,
+ -1);
+ if (mapping)
+ g_signal_emit (sidebar_annots, signals[ANNOT_ACTIVATED], 0, mapping);
+ }
+}
+
+static void
+job_finished_callback (EvJobAnnots *job,
+ EvSidebarAnnotations *sidebar_annots)
+{
+ EvSidebarAnnotationsPrivate *priv;
+ GtkTreeStore *model;
+ GtkTreeSelection *selection;
+ GList *l;
+ GdkPixbuf *text_icon = NULL;
+ GdkPixbuf *attachment_icon = NULL;
+
+ priv = sidebar_annots->priv;
+
+ if (!job->annots) {
+ GtkTreeModel *list;
+
+ list = ev_sidebar_annotations_create_simple_model (_("Document contains no annotations"));
+ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view), list);
+ g_object_unref (list);
+
+ g_object_unref (job);
+ priv->job = NULL;
+
+ return;
+ }
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree_view));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+ if (priv->selection_changed_id == 0) {
+ priv->selection_changed_id =
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (selection_changed_cb),
+ sidebar_annots);
+ }
+
+ model = gtk_tree_store_new (N_COLUMNS,
+ G_TYPE_STRING,
+ GDK_TYPE_PIXBUF,
+ G_TYPE_POINTER);
+
+ for (l = job->annots; l; l = g_list_next (l)) {
+ EvMappingList *mapping_list;
+ GList *ll;
+ gchar *page_label;
+ GtkTreeIter iter;
+ gboolean found = FALSE;
+
+ mapping_list = (EvMappingList *)l->data;
+ page_label = g_strdup_printf (_("Page %d"),
+ ev_mapping_list_get_page (mapping_list) + 1);
+ gtk_tree_store_append (model, &iter, NULL);
+ gtk_tree_store_set (model, &iter,
+ COLUMN_MARKUP, page_label,
+ -1);
+ g_free (page_label);
+
+ for (ll = ev_mapping_list_get_list (mapping_list); ll; ll = g_list_next (ll)) {
+ EvAnnotation *annot;
+ const gchar *label;
+ const gchar *modified;
+ gchar *markup;
+ GtkTreeIter child_iter;
+ GdkPixbuf *pixbuf = NULL;
+
+ annot = ((EvMapping *)(ll->data))->data;
+ if (!EV_IS_ANNOTATION_MARKUP (annot))
+ continue;
+
+ label = ev_annotation_markup_get_label (EV_ANNOTATION_MARKUP (annot));
+ modified = ev_annotation_get_modified (annot);
+ if (modified) {
+ markup = g_strdup_printf ("<span weight=\"bold\">%s</span>\n%s",
+ label, modified);
+ } else {
+ markup = g_strdup_printf ("<span weight=\"bold\">%s</span>", label);
+ }
+
+ if (EV_IS_ANNOTATION_TEXT (annot)) {
+ if (!text_icon) {
+ /* FIXME: use a better icon than EDIT */
+ text_icon = gtk_widget_render_icon (priv->tree_view,
+ GTK_STOCK_EDIT,
+ GTK_ICON_SIZE_BUTTON,
+ NULL);
+ }
+ pixbuf = text_icon;
+ } else if (EV_IS_ANNOTATION_ATTACHMENT (annot)) {
+ if (!attachment_icon) {
+ attachment_icon = gtk_widget_render_icon (priv->tree_view,
+ EV_STOCK_ATTACHMENT,
+ GTK_ICON_SIZE_BUTTON,
+ NULL);
+ }
+ pixbuf = attachment_icon;
+ }
+
+ gtk_tree_store_append (model, &child_iter, &iter);
+ gtk_tree_store_set (model, &child_iter,
+ COLUMN_MARKUP, markup,
+ COLUMN_ICON, pixbuf,
+ COLUMN_ANNOT_MAPPING, ll->data,
+ -1);
+ g_free (markup);
+ found = TRUE;
+ }
+
+ if (!found)
+ gtk_tree_store_remove (model, &iter);
+ }
+
+ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view),
+ GTK_TREE_MODEL (model));
+ g_object_unref (model);
+
+ if (text_icon)
+ g_object_unref (text_icon);
+ if (attachment_icon)
+ g_object_unref (attachment_icon);
+
+ g_object_unref (job);
+ priv->job = NULL;
+}
+
+static void
+ev_sidebar_annotations_load (EvSidebarAnnotations *sidebar_annots)
+{
+ EvSidebarAnnotationsPrivate *priv = sidebar_annots->priv;
+
+ if (priv->job) {
+ g_signal_handlers_disconnect_by_func (priv->job,
+ job_finished_callback,
+ sidebar_annots);
+ g_object_unref (priv->job);
+ }
+
+ priv->job = ev_job_annots_new (priv->document);
+ g_signal_connect (priv->job, "finished",
+ G_CALLBACK (job_finished_callback),
+ sidebar_annots);
+ /* The priority doesn't matter for this job */
+ ev_job_scheduler_push_job (priv->job, EV_JOB_PRIORITY_NONE);
+}
+
+static void
+ev_sidebar_annotations_document_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvSidebarAnnotations *sidebar_annots)
+{
+ EvDocument *document = ev_document_model_get_document (model);
+ EvSidebarAnnotationsPrivate *priv = sidebar_annots->priv;
+ gboolean show_tabs;
+
+ if (!EV_IS_DOCUMENT_ANNOTATIONS (document))
+ return;
+
+ if (priv->document)
+ g_object_unref (priv->document);
+ priv->document = g_object_ref (document);
+
+ show_tabs = ev_document_annotations_can_add_annotation (EV_DOCUMENT_ANNOTATIONS (document));
+ gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), show_tabs);
+
+ ev_sidebar_annotations_load (sidebar_annots);
+}
+
+/* EvSidebarPageIface */
+static void
+ev_sidebar_annotations_set_model (EvSidebarPage *sidebar_page,
+ EvDocumentModel *model)
+{
+ g_signal_connect (model, "notify::document",
+ G_CALLBACK (ev_sidebar_annotations_document_changed_cb),
+ sidebar_page);
+}
+
+static gboolean
+ev_sidebar_annotations_support_document (EvSidebarPage *sidebar_page,
+ EvDocument *document)
+{
+ return (EV_IS_DOCUMENT_ANNOTATIONS (document));
+}
+
+static const gchar *
+ev_sidebar_annotations_get_label (EvSidebarPage *sidebar_page)
+{
+ return _("Annotations");
+}
+
+static void
+ev_sidebar_annotations_page_iface_init (EvSidebarPageInterface *iface)
+{
+ iface->support_document = ev_sidebar_annotations_support_document;
+ iface->set_model = ev_sidebar_annotations_set_model;
+ iface->get_label = ev_sidebar_annotations_get_label;
+}
diff --git a/shell/ev-sidebar-annotations.h b/shell/ev-sidebar-annotations.h
new file mode 100644
index 00000000..6160868d
--- /dev/null
+++ b/shell/ev-sidebar-annotations.h
@@ -0,0 +1,62 @@
+/* ev-sidebar-annotations.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2010 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EV_SIDEBAR_ANNOTATIONS_H__
+#define __EV_SIDEBAR_ANNOTATIONS_H__
+
+#include <gtk/gtk.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvSidebarAnnotations EvSidebarAnnotations;
+typedef struct _EvSidebarAnnotationsClass EvSidebarAnnotationsClass;
+typedef struct _EvSidebarAnnotationsPrivate EvSidebarAnnotationsPrivate;
+
+#define EV_TYPE_SIDEBAR_ANNOTATIONS (ev_sidebar_annotations_get_type())
+#define EV_SIDEBAR_ANNOTATIONS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_SIDEBAR_ANNOTATIONS, EvSidebarAnnotations))
+#define EV_SIDEBAR_ANNOTATIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_SIDEBAR_ANNOTATIONS, EvSidebarAnnotationsClass))
+#define EV_IS_SIDEBAR_ANNOTATIONS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_SIDEBAR_ANNOTATIONS))
+#define EV_IS_SIDEBAR_ANNOTATIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_SIDEBAR_ANNOTATIONS))
+#define EV_SIDEBAR_ANNOTATIONS_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_SIDEBAR_ANNOTATIONS, EvSidebarAnnotationsClass))
+
+struct _EvSidebarAnnotations {
+ GtkVBox base_instance;
+
+ EvSidebarAnnotationsPrivate *priv;
+};
+
+struct _EvSidebarAnnotationsClass {
+ GtkVBoxClass base_class;
+
+ void (* annot_activated) (EvSidebarAnnotations *sidebar_annots,
+ EvMapping *mapping);
+ void (* begin_annot_add) (EvSidebarAnnotations *sidebar_annots,
+ EvAnnotationType annot_type);
+ void (* annot_add_cancelled) (EvSidebarAnnotations *sidebar_annots);
+};
+
+GType ev_sidebar_annotations_get_type (void) G_GNUC_CONST;
+GtkWidget *ev_sidebar_annotations_new (void);
+void ev_sidebar_annotations_annot_added (EvSidebarAnnotations *sidebar_annots,
+ EvAnnotation *annot);
+G_END_DECLS
+
+#endif /* __EV_SIDEBAR_ANNOTATIONS_H__ */
diff --git a/shell/ev-sidebar-attachments.c b/shell/ev-sidebar-attachments.c
new file mode 100644
index 00000000..273b784f
--- /dev/null
+++ b/shell/ev-sidebar-attachments.c
@@ -0,0 +1,707 @@
+/* ev-sidebar-attachments.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos
+ *
+ * Author:
+ * Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <glib/gstdio.h>
+#include <gtk/gtk.h>
+
+#include "ev-document-attachments.h"
+#include "ev-jobs.h"
+#include "ev-job-scheduler.h"
+#include "ev-file-helpers.h"
+#include "ev-sidebar-attachments.h"
+#include "ev-sidebar-page.h"
+
+enum {
+ COLUMN_ICON,
+ COLUMN_NAME,
+ COLUMN_DESCRIPTION,
+ COLUMN_ATTACHMENT,
+ N_COLS
+};
+
+enum {
+ PROP_0,
+ PROP_WIDGET,
+};
+
+enum {
+ SIGNAL_POPUP_MENU,
+ N_SIGNALS
+};
+
+static guint signals[N_SIGNALS];
+
+struct _EvSidebarAttachmentsPrivate {
+ GtkWidget *icon_view;
+ GtkListStore *model;
+
+ /* Icons */
+ GtkIconTheme *icon_theme;
+ GHashTable *icon_cache;
+};
+
+static void ev_sidebar_attachments_page_iface_init (EvSidebarPageInterface *iface);
+
+G_DEFINE_TYPE_EXTENDED (EvSidebarAttachments,
+ ev_sidebar_attachments,
+ GTK_TYPE_VBOX,
+ 0,
+ G_IMPLEMENT_INTERFACE (EV_TYPE_SIDEBAR_PAGE,
+ ev_sidebar_attachments_page_iface_init))
+
+#define EV_SIDEBAR_ATTACHMENTS_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_SIDEBAR_ATTACHMENTS, EvSidebarAttachmentsPrivate))
+
+/* Icon cache */
+static void
+ev_sidebar_attachments_icon_cache_add (EvSidebarAttachments *ev_attachbar,
+ const gchar *mime_type,
+ const GdkPixbuf *pixbuf)
+{
+ g_assert (mime_type != NULL);
+ g_assert (GDK_IS_PIXBUF (pixbuf));
+
+ g_hash_table_insert (ev_attachbar->priv->icon_cache,
+ (gpointer)g_strdup (mime_type),
+ (gpointer)pixbuf);
+
+}
+
+static GdkPixbuf *
+icon_theme_get_pixbuf_from_mime_type (GtkIconTheme *icon_theme,
+ const gchar *mime_type)
+{
+ const char *separator;
+ GString *icon_name;
+ GdkPixbuf *pixbuf;
+
+ separator = strchr (mime_type, '/');
+ if (!separator)
+ return NULL; /* maybe we should return a GError with "invalid MIME-type" */
+
+ icon_name = g_string_new ("mate-mime-");
+ g_string_append_len (icon_name, mime_type, separator - mime_type);
+ g_string_append_c (icon_name, '-');
+ g_string_append (icon_name, separator + 1);
+ pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name->str, 48, 0, NULL);
+ g_string_free (icon_name, TRUE);
+ if (pixbuf)
+ return pixbuf;
+
+ icon_name = g_string_new ("mate-mime-");
+ g_string_append_len (icon_name, mime_type, separator - mime_type);
+ pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name->str, 48, 0, NULL);
+ g_string_free (icon_name, TRUE);
+
+ return pixbuf;
+}
+
+static GdkPixbuf *
+ev_sidebar_attachments_icon_cache_get (EvSidebarAttachments *ev_attachbar,
+ const gchar *mime_type)
+{
+ GdkPixbuf *pixbuf = NULL;
+
+ g_assert (mime_type != NULL);
+
+ pixbuf = g_hash_table_lookup (ev_attachbar->priv->icon_cache,
+ mime_type);
+
+ if (GDK_IS_PIXBUF (pixbuf))
+ return pixbuf;
+
+ pixbuf = icon_theme_get_pixbuf_from_mime_type (ev_attachbar->priv->icon_theme,
+ mime_type);
+
+ if (GDK_IS_PIXBUF (pixbuf))
+ ev_sidebar_attachments_icon_cache_add (ev_attachbar,
+ mime_type,
+ pixbuf);
+
+ return pixbuf;
+}
+
+static gboolean
+icon_cache_update_icon (gchar *key,
+ GdkPixbuf *value,
+ EvSidebarAttachments *ev_attachbar)
+{
+ GdkPixbuf *pixbuf = NULL;
+
+ pixbuf = icon_theme_get_pixbuf_from_mime_type (ev_attachbar->priv->icon_theme,
+ key);
+
+ ev_sidebar_attachments_icon_cache_add (ev_attachbar,
+ key,
+ pixbuf);
+
+ return FALSE;
+}
+
+static void
+ev_sidebar_attachments_icon_cache_refresh (EvSidebarAttachments *ev_attachbar)
+{
+ g_hash_table_foreach_remove (ev_attachbar->priv->icon_cache,
+ (GHRFunc) icon_cache_update_icon,
+ ev_attachbar);
+}
+
+static EvAttachment *
+ev_sidebar_attachments_get_attachment_at_pos (EvSidebarAttachments *ev_attachbar,
+ gint x,
+ gint y)
+{
+ GtkTreePath *path = NULL;
+ GtkTreeIter iter;
+ EvAttachment *attachment = NULL;
+
+ path = gtk_icon_view_get_path_at_pos (GTK_ICON_VIEW (ev_attachbar->priv->icon_view),
+ x, y);
+ if (!path) {
+ return NULL;
+ }
+
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (ev_attachbar->priv->model),
+ &iter, path);
+ gtk_tree_model_get (GTK_TREE_MODEL (ev_attachbar->priv->model), &iter,
+ COLUMN_ATTACHMENT, &attachment,
+ -1);
+
+ gtk_icon_view_select_path (GTK_ICON_VIEW (ev_attachbar->priv->icon_view),
+ path);
+
+ gtk_tree_path_free (path);
+
+ return attachment;
+}
+
+static gboolean
+ev_sidebar_attachments_popup_menu_show (EvSidebarAttachments *ev_attachbar,
+ gint x,
+ gint y)
+{
+ GtkIconView *icon_view;
+ GtkTreePath *path;
+ GList *selected = NULL, *l;
+ GList *attach_list = NULL;
+
+ icon_view = GTK_ICON_VIEW (ev_attachbar->priv->icon_view);
+
+ path = gtk_icon_view_get_path_at_pos (icon_view, x, y);
+ if (!path)
+ return FALSE;
+
+ if (!gtk_icon_view_path_is_selected (icon_view, path)) {
+ gtk_icon_view_unselect_all (icon_view);
+ gtk_icon_view_select_path (icon_view, path);
+ }
+
+ gtk_tree_path_free (path);
+
+ selected = gtk_icon_view_get_selected_items (icon_view);
+ if (!selected)
+ return FALSE;
+
+ for (l = selected; l && l->data; l = g_list_next (l)) {
+ GtkTreeIter iter;
+ EvAttachment *attachment = NULL;
+
+ path = (GtkTreePath *) l->data;
+
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (ev_attachbar->priv->model),
+ &iter, path);
+ gtk_tree_model_get (GTK_TREE_MODEL (ev_attachbar->priv->model), &iter,
+ COLUMN_ATTACHMENT, &attachment,
+ -1);
+
+ if (attachment)
+ attach_list = g_list_prepend (attach_list, attachment);
+
+ gtk_tree_path_free (path);
+ }
+
+ g_list_free (selected);
+
+ if (!attach_list)
+ return FALSE;
+
+ g_signal_emit (ev_attachbar, signals[SIGNAL_POPUP_MENU], 0, attach_list);
+
+ return TRUE;
+}
+
+static gboolean
+ev_sidebar_attachments_popup_menu (GtkWidget *widget)
+{
+ EvSidebarAttachments *ev_attachbar = EV_SIDEBAR_ATTACHMENTS (widget);
+ gint x, y;
+
+ gtk_widget_get_pointer (widget, &x, &y);
+
+ return ev_sidebar_attachments_popup_menu_show (ev_attachbar, x, y);
+}
+
+static gboolean
+ev_sidebar_attachments_button_press (EvSidebarAttachments *ev_attachbar,
+ GdkEventButton *event,
+ GtkWidget *icon_view)
+{
+ if (!gtk_widget_has_focus (icon_view)) {
+ gtk_widget_grab_focus (icon_view);
+ }
+
+ if (event->button == 2)
+ return FALSE;
+
+ switch (event->button) {
+ case 1:
+ if (event->type == GDK_2BUTTON_PRESS) {
+ GError *error = NULL;
+ EvAttachment *attachment;
+
+ attachment = ev_sidebar_attachments_get_attachment_at_pos (ev_attachbar,
+ event->x,
+ event->y);
+ if (!attachment)
+ return FALSE;
+
+ ev_attachment_open (attachment,
+ gtk_widget_get_screen (GTK_WIDGET (ev_attachbar)),
+ event->time,
+ &error);
+
+ if (error) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ }
+
+ g_object_unref (attachment);
+
+ return TRUE;
+ }
+ break;
+ case 3:
+ return ev_sidebar_attachments_popup_menu_show (ev_attachbar, event->x, event->y);
+ }
+
+ return FALSE;
+}
+
+static void
+ev_sidebar_attachments_update_icons (EvSidebarAttachments *ev_attachbar,
+ gpointer user_data)
+{
+ GtkTreeIter iter;
+ gboolean valid;
+
+ ev_sidebar_attachments_icon_cache_refresh (ev_attachbar);
+
+ valid = gtk_tree_model_get_iter_first (
+ GTK_TREE_MODEL (ev_attachbar->priv->model),
+ &iter);
+
+ while (valid) {
+ EvAttachment *attachment = NULL;
+ GdkPixbuf *pixbuf = NULL;
+ const gchar *mime_type;
+
+ gtk_tree_model_get (GTK_TREE_MODEL (ev_attachbar->priv->model), &iter,
+ COLUMN_ATTACHMENT, &attachment,
+ -1);
+
+ mime_type = ev_attachment_get_mime_type (attachment);
+
+ if (attachment)
+ g_object_unref (attachment);
+
+ pixbuf = ev_sidebar_attachments_icon_cache_get (ev_attachbar,
+ mime_type);
+
+ gtk_list_store_set (ev_attachbar->priv->model, &iter,
+ COLUMN_ICON, pixbuf,
+ -1);
+
+ valid = gtk_tree_model_iter_next (
+ GTK_TREE_MODEL (ev_attachbar->priv->model),
+ &iter);
+ }
+}
+
+static void
+ev_sidebar_attachments_screen_changed (GtkWidget *widget,
+ GdkScreen *old_screen)
+{
+ EvSidebarAttachments *ev_attachbar = EV_SIDEBAR_ATTACHMENTS (widget);
+ GdkScreen *screen;
+
+ if (!ev_attachbar->priv->icon_theme)
+ return;
+
+ screen = gtk_widget_get_screen (widget);
+ if (screen == old_screen)
+ return;
+
+ if (old_screen) {
+ g_signal_handlers_disconnect_by_func (
+ gtk_icon_theme_get_for_screen (old_screen),
+ G_CALLBACK (ev_sidebar_attachments_update_icons),
+ ev_attachbar);
+ }
+
+ ev_attachbar->priv->icon_theme = gtk_icon_theme_get_for_screen (screen);
+ g_signal_connect_swapped (ev_attachbar->priv->icon_theme,
+ "changed",
+ G_CALLBACK (ev_sidebar_attachments_update_icons),
+ (gpointer) ev_attachbar);
+
+ if (GTK_WIDGET_CLASS (ev_sidebar_attachments_parent_class)->screen_changed) {
+ GTK_WIDGET_CLASS (ev_sidebar_attachments_parent_class)->screen_changed (widget, old_screen);
+ }
+}
+
+static void
+ev_sidebar_attachments_drag_data_get (GtkWidget *widget,
+ GdkDragContext *drag_context,
+ GtkSelectionData *data,
+ guint info,
+ guint time,
+ gpointer user_data)
+{
+ EvSidebarAttachments *ev_attachbar = EV_SIDEBAR_ATTACHMENTS (user_data);
+ GList *selected = NULL, *l;
+ GPtrArray *uris;
+ char **uri_list;
+
+ selected = gtk_icon_view_get_selected_items (GTK_ICON_VIEW (ev_attachbar->priv->icon_view));
+ if (!selected)
+ return;
+
+ uris = g_ptr_array_new ();
+
+ for (l = selected; l && l->data; l = g_list_next (l)) {
+ EvAttachment *attachment;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ GFile *file;
+ gchar *template;
+ GError *error = NULL;
+
+ path = (GtkTreePath *) l->data;
+
+ gtk_tree_model_get_iter (GTK_TREE_MODEL (ev_attachbar->priv->model),
+ &iter, path);
+ gtk_tree_model_get (GTK_TREE_MODEL (ev_attachbar->priv->model), &iter,
+ COLUMN_ATTACHMENT, &attachment,
+ -1);
+
+ /* FIXMEchpe: convert to filename encoding first! */
+ template = g_strdup_printf ("%s.XXXXXX", ev_attachment_get_name (attachment));
+ file = ev_mkstemp_file (template, &error);
+ g_free (template);
+
+ if (file != NULL && ev_attachment_save (attachment, file, &error)) {
+ gchar *uri;
+
+ uri = g_file_get_uri (file);
+ g_ptr_array_add (uris, uri);
+ }
+
+ if (error) {
+ g_warning ("%s", error->message);
+ g_error_free (error);
+ }
+
+ gtk_tree_path_free (path);
+ g_object_unref (file);
+ g_object_unref (attachment);
+ }
+
+ g_ptr_array_add (uris, NULL); /* NULL-terminate */
+ uri_list = (char **) g_ptr_array_free (uris, FALSE);
+ gtk_selection_data_set_uris (data, uri_list);
+ g_strfreev (uri_list);
+
+ g_list_free (selected);
+}
+
+static void
+ev_sidebar_attachments_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvSidebarAttachments *ev_sidebar_attachments;
+
+ ev_sidebar_attachments = EV_SIDEBAR_ATTACHMENTS (object);
+
+ switch (prop_id) {
+ case PROP_WIDGET:
+ g_value_set_object (value, ev_sidebar_attachments->priv->icon_view);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ev_sidebar_attachments_destroy (GtkObject *object)
+{
+ EvSidebarAttachments *ev_attachbar = EV_SIDEBAR_ATTACHMENTS (object);
+
+ if (ev_attachbar->priv->icon_theme) {
+ g_signal_handlers_disconnect_by_func (
+ ev_attachbar->priv->icon_theme,
+ G_CALLBACK (ev_sidebar_attachments_update_icons),
+ ev_attachbar);
+ ev_attachbar->priv->icon_theme = NULL;
+ }
+
+ if (ev_attachbar->priv->model) {
+ g_object_unref (ev_attachbar->priv->model);
+ ev_attachbar->priv->model = NULL;
+ }
+
+ if (ev_attachbar->priv->icon_cache) {
+ g_hash_table_destroy (ev_attachbar->priv->icon_cache);
+ ev_attachbar->priv->icon_cache = NULL;
+ }
+
+ (* GTK_OBJECT_CLASS (ev_sidebar_attachments_parent_class)->destroy) (object);
+}
+
+static void
+ev_sidebar_attachments_class_init (EvSidebarAttachmentsClass *ev_attachbar_class)
+{
+ GObjectClass *g_object_class;
+ GtkObjectClass *gtk_object_class;
+ GtkWidgetClass *gtk_widget_class;
+
+ g_object_class = G_OBJECT_CLASS (ev_attachbar_class);
+ gtk_object_class = GTK_OBJECT_CLASS (ev_attachbar_class);
+ gtk_widget_class = GTK_WIDGET_CLASS (ev_attachbar_class);
+
+ g_object_class->get_property = ev_sidebar_attachments_get_property;
+ gtk_object_class->destroy = ev_sidebar_attachments_destroy;
+ gtk_widget_class->popup_menu = ev_sidebar_attachments_popup_menu;
+ gtk_widget_class->screen_changed = ev_sidebar_attachments_screen_changed;
+
+ g_type_class_add_private (g_object_class, sizeof (EvSidebarAttachmentsPrivate));
+
+ /* Signals */
+ signals[SIGNAL_POPUP_MENU] =
+ g_signal_new ("popup",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvSidebarAttachmentsClass, popup_menu),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,
+ G_TYPE_POINTER);
+
+ g_object_class_override_property (g_object_class,
+ PROP_WIDGET,
+ "main-widget");
+}
+
+static void
+ev_sidebar_attachments_init (EvSidebarAttachments *ev_attachbar)
+{
+ GtkWidget *swindow;
+
+ ev_attachbar->priv = EV_SIDEBAR_ATTACHMENTS_GET_PRIVATE (ev_attachbar);
+
+ swindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swindow),
+ GTK_SHADOW_IN);
+ /* Data Model */
+ ev_attachbar->priv->model = gtk_list_store_new (N_COLS,
+ GDK_TYPE_PIXBUF,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ EV_TYPE_ATTACHMENT);
+
+ /* Icon View */
+ ev_attachbar->priv->icon_view =
+ gtk_icon_view_new_with_model (GTK_TREE_MODEL (ev_attachbar->priv->model));
+ gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (ev_attachbar->priv->icon_view),
+ GTK_SELECTION_MULTIPLE);
+ gtk_icon_view_set_columns (GTK_ICON_VIEW (ev_attachbar->priv->icon_view), -1);
+ g_object_set (G_OBJECT (ev_attachbar->priv->icon_view),
+ "text-column", COLUMN_NAME,
+ "pixbuf-column", COLUMN_ICON,
+ NULL);
+ g_signal_connect_swapped (ev_attachbar->priv->icon_view,
+ "button-press-event",
+ G_CALLBACK (ev_sidebar_attachments_button_press),
+ (gpointer) ev_attachbar);
+
+ gtk_container_add (GTK_CONTAINER (swindow),
+ ev_attachbar->priv->icon_view);
+
+ gtk_container_add (GTK_CONTAINER (ev_attachbar),
+ swindow);
+ gtk_widget_show_all (GTK_WIDGET (ev_attachbar));
+
+ /* Icon Theme */
+ ev_attachbar->priv->icon_theme = NULL;
+
+ /* Icon Cache */
+ ev_attachbar->priv->icon_cache = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ g_free,
+ g_object_unref);
+
+ /* Drag and Drop */
+ gtk_icon_view_enable_model_drag_source (
+ GTK_ICON_VIEW (ev_attachbar->priv->icon_view),
+ GDK_BUTTON1_MASK,
+ NULL, 0,
+ GDK_ACTION_COPY);
+ gtk_drag_source_add_uri_targets (ev_attachbar->priv->icon_view);
+
+ g_signal_connect (ev_attachbar->priv->icon_view,
+ "drag-data-get",
+ G_CALLBACK (ev_sidebar_attachments_drag_data_get),
+ (gpointer) ev_attachbar);
+}
+
+GtkWidget *
+ev_sidebar_attachments_new (void)
+{
+ GtkWidget *ev_attachbar;
+
+ ev_attachbar = g_object_new (EV_TYPE_SIDEBAR_ATTACHMENTS, NULL);
+
+ return ev_attachbar;
+}
+
+static void
+job_finished_callback (EvJobAttachments *job,
+ EvSidebarAttachments *ev_attachbar)
+{
+ GList *l;
+
+ for (l = job->attachments; l && l->data; l = g_list_next (l)) {
+ EvAttachment *attachment;
+ GtkTreeIter iter;
+ GdkPixbuf *pixbuf = NULL;
+ const gchar *mime_type;
+
+ attachment = EV_ATTACHMENT (l->data);
+
+ mime_type = ev_attachment_get_mime_type (attachment);
+ pixbuf = ev_sidebar_attachments_icon_cache_get (ev_attachbar,
+ mime_type);
+
+ gtk_list_store_append (ev_attachbar->priv->model, &iter);
+ gtk_list_store_set (ev_attachbar->priv->model, &iter,
+ COLUMN_NAME, ev_attachment_get_name (attachment),
+ COLUMN_ICON, pixbuf,
+ COLUMN_ATTACHMENT, attachment,
+ -1);
+ }
+
+ g_object_unref (job);
+}
+
+
+static void
+ev_sidebar_attachments_document_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvSidebarAttachments *ev_attachbar)
+{
+ EvDocument *document = ev_document_model_get_document (model);
+ EvJob *job;
+
+ if (!EV_IS_DOCUMENT_ATTACHMENTS (document))
+ return;
+
+ if (!ev_document_attachments_has_attachments (EV_DOCUMENT_ATTACHMENTS (document)))
+ return;
+
+ if (!ev_attachbar->priv->icon_theme) {
+ GdkScreen *screen;
+
+ screen = gtk_widget_get_screen (GTK_WIDGET (ev_attachbar));
+ ev_attachbar->priv->icon_theme = gtk_icon_theme_get_for_screen (screen);
+ g_signal_connect_swapped (ev_attachbar->priv->icon_theme,
+ "changed",
+ G_CALLBACK (ev_sidebar_attachments_update_icons),
+ (gpointer) ev_attachbar);
+ }
+
+ gtk_list_store_clear (ev_attachbar->priv->model);
+
+ job = ev_job_attachments_new (document);
+ g_signal_connect (job, "finished",
+ G_CALLBACK (job_finished_callback),
+ ev_attachbar);
+ g_signal_connect (job, "cancelled",
+ G_CALLBACK (g_object_unref),
+ NULL);
+ /* The priority doesn't matter for this job */
+ ev_job_scheduler_push_job (job, EV_JOB_PRIORITY_NONE);
+}
+
+static void
+ev_sidebar_attachments_set_model (EvSidebarPage *page,
+ EvDocumentModel *model)
+{
+ g_signal_connect (model, "notify::document",
+ G_CALLBACK (ev_sidebar_attachments_document_changed_cb),
+ page);
+}
+
+static gboolean
+ev_sidebar_attachments_support_document (EvSidebarPage *sidebar_page,
+ EvDocument *document)
+{
+ return (EV_IS_DOCUMENT_ATTACHMENTS (document) &&
+ ev_document_attachments_has_attachments (EV_DOCUMENT_ATTACHMENTS (document)));
+}
+
+static const gchar*
+ev_sidebar_attachments_get_label (EvSidebarPage *sidebar_page)
+{
+ return _("Attachments");
+}
+
+static void
+ev_sidebar_attachments_page_iface_init (EvSidebarPageInterface *iface)
+{
+ iface->support_document = ev_sidebar_attachments_support_document;
+ iface->set_model = ev_sidebar_attachments_set_model;
+ iface->get_label = ev_sidebar_attachments_get_label;
+}
+
diff --git a/shell/ev-sidebar-attachments.h b/shell/ev-sidebar-attachments.h
new file mode 100644
index 00000000..35e2a324
--- /dev/null
+++ b/shell/ev-sidebar-attachments.h
@@ -0,0 +1,62 @@
+/* ev-sidebar-attachments.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2006 Carlos Garcia Campos
+ *
+ * Author:
+ * Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 __EV_SIDEBAR_ATTACHMENTS_H__
+#define __EV_SIDEBAR_ATTACHMENTS_H__
+
+#include "ev-attachment.h"
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvSidebarAttachments EvSidebarAttachments;
+typedef struct _EvSidebarAttachmentsClass EvSidebarAttachmentsClass;
+typedef struct _EvSidebarAttachmentsPrivate EvSidebarAttachmentsPrivate;
+
+#define EV_TYPE_SIDEBAR_ATTACHMENTS (ev_sidebar_attachments_get_type())
+#define EV_SIDEBAR_ATTACHMENTS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_SIDEBAR_ATTACHMENTS, EvSidebarAttachments))
+#define EV_SIDEBAR_ATTACHMENTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_SIDEBAR_ATTACHMENTS, EvSidebarAttachmentsClass))
+#define EV_IS_SIDEBAR_ATTACHMENTS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_SIDEBAR_ATTACHMENTS))
+#define EV_IS_SIDEBAR_ATTACHMENTS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_SIDEBAR_ATTACHMENTS))
+#define EV_SIDEBAR_ATTACHMENTS_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_SIDEBAR_ATTACHMENTS, EvSidebarAttachmentsClass))
+
+struct _EvSidebarAttachments {
+ GtkVBox base_instance;
+
+ EvSidebarAttachmentsPrivate *priv;
+};
+
+struct _EvSidebarAttachmentsClass {
+ GtkVBoxClass base_class;
+
+ /* Signals */
+ void (*popup_menu) (EvSidebarAttachments *ev_attachbar,
+ EvAttachment *attachment);
+};
+
+GType ev_sidebar_attachments_get_type (void) G_GNUC_CONST;
+GtkWidget *ev_sidebar_attachments_new (void);
+
+G_END_DECLS
+
+#endif /* __EV_SIDEBAR_ATTACHMENTS_H__ */
diff --git a/shell/ev-sidebar-layers.c b/shell/ev-sidebar-layers.c
new file mode 100644
index 00000000..686cacaa
--- /dev/null
+++ b/shell/ev-sidebar-layers.c
@@ -0,0 +1,411 @@
+/* ev-sidebar-layers.c
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 "config.h"
+
+#include <glib/gi18n.h>
+#include "gimpcellrenderertoggle.h"
+
+#include "ev-document-layers.h"
+#include "ev-sidebar-page.h"
+#include "ev-jobs.h"
+#include "ev-job-scheduler.h"
+#include "ev-stock-icons.h"
+#include "ev-sidebar-layers.h"
+
+struct _EvSidebarLayersPrivate {
+ GtkTreeView *tree_view;
+
+ EvDocument *document;
+ EvJob *job;
+};
+
+enum {
+ PROP_0,
+ PROP_WIDGET
+};
+
+enum {
+ LAYERS_VISIBILITY_CHANGED,
+ N_SIGNALS
+};
+
+static void ev_sidebar_layers_page_iface_init (EvSidebarPageInterface *iface);
+static void job_finished_callback (EvJobLayers *job,
+ EvSidebarLayers *sidebar_layers);
+
+static guint signals[N_SIGNALS];
+
+G_DEFINE_TYPE_EXTENDED (EvSidebarLayers,
+ ev_sidebar_layers,
+ GTK_TYPE_VBOX,
+ 0,
+ G_IMPLEMENT_INTERFACE (EV_TYPE_SIDEBAR_PAGE,
+ ev_sidebar_layers_page_iface_init))
+
+#define EV_SIDEBAR_LAYERS_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_SIDEBAR_LAYERS, EvSidebarLayersPrivate))
+
+static void
+ev_sidebar_layers_dispose (GObject *object)
+{
+ EvSidebarLayers *sidebar = EV_SIDEBAR_LAYERS (object);
+
+ if (sidebar->priv->job) {
+ g_signal_handlers_disconnect_by_func (sidebar->priv->job,
+ job_finished_callback,
+ sidebar);
+ ev_job_cancel (sidebar->priv->job);
+ g_object_unref (sidebar->priv->job);
+ sidebar->priv->job = NULL;
+ }
+
+ if (sidebar->priv->document) {
+ g_object_unref (sidebar->priv->document);
+ sidebar->priv->document = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_sidebar_layers_parent_class)->dispose (object);
+}
+
+static void
+ev_sidebar_layers_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvSidebarLayers *ev_sidebar_layers;
+
+ ev_sidebar_layers = EV_SIDEBAR_LAYERS (object);
+
+ switch (prop_id) {
+ case PROP_WIDGET:
+ g_value_set_object (value, ev_sidebar_layers->priv->tree_view);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GtkTreeModel *
+ev_sidebar_layers_create_loading_model (void)
+{
+ GtkTreeModel *retval;
+ GtkTreeIter iter;
+ gchar *markup;
+
+ /* Creates a fake model to indicate that we're loading */
+ retval = (GtkTreeModel *)gtk_list_store_new (EV_DOCUMENT_LAYERS_N_COLUMNS,
+ G_TYPE_STRING,
+ G_TYPE_OBJECT,
+ G_TYPE_BOOLEAN,
+ G_TYPE_BOOLEAN,
+ G_TYPE_BOOLEAN,
+ G_TYPE_INT);
+
+ gtk_list_store_append (GTK_LIST_STORE (retval), &iter);
+ markup = g_strdup_printf ("<span size=\"larger\" style=\"italic\">%s</span>", _("Loading…"));
+ gtk_list_store_set (GTK_LIST_STORE (retval), &iter,
+ EV_DOCUMENT_LAYERS_COLUMN_TITLE, markup,
+ EV_DOCUMENT_LAYERS_COLUMN_VISIBLE, FALSE,
+ EV_DOCUMENT_LAYERS_COLUMN_ENABLED, TRUE,
+ EV_DOCUMENT_LAYERS_COLUMN_SHOWTOGGLE, FALSE,
+ EV_DOCUMENT_LAYERS_COLUMN_RBGROUP, -1,
+ EV_DOCUMENT_LAYERS_COLUMN_LAYER, NULL,
+ -1);
+ g_free (markup);
+
+ return retval;
+}
+
+static gboolean
+update_kids (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ GtkTreeIter *parent)
+{
+ if (gtk_tree_store_is_ancestor (GTK_TREE_STORE (model), parent, iter)) {
+ gboolean visible;
+
+ gtk_tree_model_get (model, parent,
+ EV_DOCUMENT_LAYERS_COLUMN_VISIBLE, &visible,
+ -1);
+ gtk_tree_store_set (GTK_TREE_STORE (model), iter,
+ EV_DOCUMENT_LAYERS_COLUMN_ENABLED, visible,
+ -1);
+ }
+
+ return FALSE;
+}
+
+static gboolean
+clear_rb_group (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gint *rb_group)
+{
+ gint group;
+
+ gtk_tree_model_get (model, iter,
+ EV_DOCUMENT_LAYERS_COLUMN_RBGROUP, &group,
+ -1);
+
+ if (group == *rb_group) {
+ gtk_tree_store_set (GTK_TREE_STORE (model), iter,
+ EV_DOCUMENT_LAYERS_COLUMN_VISIBLE, FALSE,
+ -1);
+ }
+
+ return FALSE;
+}
+
+static void
+ev_sidebar_layers_visibility_changed (GtkCellRendererToggle *cell,
+ gchar *path_str,
+ EvSidebarLayers *ev_layers)
+{
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ gboolean visible;
+ EvLayer *layer;
+
+ model = gtk_tree_view_get_model (ev_layers->priv->tree_view);
+
+ path = gtk_tree_path_new_from_string (path_str);
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_model_get (model, &iter,
+ EV_DOCUMENT_LAYERS_COLUMN_VISIBLE, &visible,
+ EV_DOCUMENT_LAYERS_COLUMN_LAYER, &layer,
+ -1);
+
+ visible = !visible;
+ if (visible) {
+ gint rb_group;
+
+ ev_document_layers_show_layer (EV_DOCUMENT_LAYERS (ev_layers->priv->document),
+ layer);
+
+ rb_group = ev_layer_get_rb_group (layer);
+ if (rb_group) {
+ gtk_tree_model_foreach (model,
+ (GtkTreeModelForeachFunc)clear_rb_group,
+ &rb_group);
+ }
+ } else {
+ ev_document_layers_hide_layer (EV_DOCUMENT_LAYERS (ev_layers->priv->document),
+ layer);
+ }
+
+ gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
+ EV_DOCUMENT_LAYERS_COLUMN_VISIBLE, visible,
+ -1);
+
+ if (ev_layer_is_parent (layer)) {
+ gtk_tree_model_foreach (model,
+ (GtkTreeModelForeachFunc)update_kids,
+ &iter);
+ }
+
+ gtk_tree_path_free (path);
+
+ g_signal_emit (ev_layers, signals[LAYERS_VISIBILITY_CHANGED], 0);
+}
+
+static GtkTreeView *
+ev_sidebar_layers_create_tree_view (EvSidebarLayers *ev_layers)
+{
+ GtkTreeView *tree_view;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+
+ tree_view = GTK_TREE_VIEW (gtk_tree_view_new ());
+ gtk_tree_view_set_headers_visible (tree_view, FALSE);
+ gtk_tree_selection_set_mode (gtk_tree_view_get_selection (tree_view),
+ GTK_SELECTION_NONE);
+
+
+ column = gtk_tree_view_column_new ();
+
+ renderer = gimp_cell_renderer_toggle_new (EV_STOCK_VISIBLE);
+ gtk_tree_view_column_pack_start (column, renderer, FALSE);
+ gtk_tree_view_column_set_attributes (column, renderer,
+ "active", EV_DOCUMENT_LAYERS_COLUMN_VISIBLE,
+ "activatable", EV_DOCUMENT_LAYERS_COLUMN_ENABLED,
+ "visible", EV_DOCUMENT_LAYERS_COLUMN_SHOWTOGGLE,
+ "sensitive", EV_DOCUMENT_LAYERS_COLUMN_ENABLED,
+ NULL);
+ g_object_set (G_OBJECT (renderer),
+ "xpad", 0,
+ "ypad", 0,
+ NULL);
+ g_signal_connect (renderer, "toggled",
+ G_CALLBACK (ev_sidebar_layers_visibility_changed),
+ (gpointer)ev_layers);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (column, renderer, TRUE);
+ gtk_tree_view_column_set_attributes (column, renderer,
+ "markup", EV_DOCUMENT_LAYERS_COLUMN_TITLE,
+ "sensitive", EV_DOCUMENT_LAYERS_COLUMN_ENABLED,
+ NULL);
+ g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
+
+ gtk_tree_view_append_column (tree_view, column);
+
+ return tree_view;
+}
+
+static void
+ev_sidebar_layers_init (EvSidebarLayers *ev_layers)
+{
+ GtkWidget *swindow;
+ GtkTreeModel *model;
+
+ ev_layers->priv = EV_SIDEBAR_LAYERS_GET_PRIVATE (ev_layers);
+
+ swindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swindow),
+ GTK_SHADOW_IN);
+ /* Data Model */
+ model = ev_sidebar_layers_create_loading_model ();
+
+ /* Layers list */
+ ev_layers->priv->tree_view = ev_sidebar_layers_create_tree_view (ev_layers);
+ gtk_tree_view_set_model (ev_layers->priv->tree_view, model);
+ g_object_unref (model);
+
+ gtk_container_add (GTK_CONTAINER (swindow),
+ GTK_WIDGET (ev_layers->priv->tree_view));
+
+ gtk_container_add (GTK_CONTAINER (ev_layers), swindow);
+ gtk_widget_show_all (GTK_WIDGET (ev_layers));
+}
+
+static void
+ev_sidebar_layers_class_init (EvSidebarLayersClass *ev_layers_class)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (ev_layers_class);
+
+ g_object_class->get_property = ev_sidebar_layers_get_property;
+ g_object_class->dispose = ev_sidebar_layers_dispose;
+
+ g_type_class_add_private (g_object_class, sizeof (EvSidebarLayersPrivate));
+
+ g_object_class_override_property (g_object_class, PROP_WIDGET, "main-widget");
+
+ signals[LAYERS_VISIBILITY_CHANGED] =
+ g_signal_new ("layers_visibility_changed",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvSidebarLayersClass, layers_visibility_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0, G_TYPE_NONE);
+}
+
+GtkWidget *
+ev_sidebar_layers_new (void)
+{
+ return GTK_WIDGET (g_object_new (EV_TYPE_SIDEBAR_LAYERS, NULL));
+}
+
+static void
+job_finished_callback (EvJobLayers *job,
+ EvSidebarLayers *sidebar_layers)
+{
+ EvSidebarLayersPrivate *priv;
+
+ priv = sidebar_layers->priv;
+
+ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view), job->model);
+
+ g_object_unref (job);
+ priv->job = NULL;
+}
+
+static void
+ev_sidebar_layers_document_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvSidebarLayers *sidebar_layers)
+{
+ EvDocument *document = ev_document_model_get_document (model);
+ EvSidebarLayersPrivate *priv = sidebar_layers->priv;
+
+ if (!EV_IS_DOCUMENT_LAYERS (document))
+ return;
+
+ if (priv->document) {
+ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view), NULL);
+ g_object_unref (priv->document);
+ }
+
+ priv->document = g_object_ref (document);
+
+ if (priv->job) {
+ g_signal_handlers_disconnect_by_func (priv->job,
+ job_finished_callback,
+ sidebar_layers);
+ g_object_unref (priv->job);
+ }
+
+ priv->job = ev_job_layers_new (document);
+ g_signal_connect (priv->job, "finished",
+ G_CALLBACK (job_finished_callback),
+ sidebar_layers);
+ /* The priority doesn't matter for this job */
+ ev_job_scheduler_push_job (priv->job, EV_JOB_PRIORITY_NONE);
+}
+
+static void
+ev_sidebar_layers_set_model (EvSidebarPage *sidebar_page,
+ EvDocumentModel *model)
+{
+ g_signal_connect (model, "notify::document",
+ G_CALLBACK (ev_sidebar_layers_document_changed_cb),
+ sidebar_page);
+}
+
+static gboolean
+ev_sidebar_layers_support_document (EvSidebarPage *sidebar_page,
+ EvDocument *document)
+{
+ return (EV_IS_DOCUMENT_LAYERS (document) &&
+ ev_document_layers_has_layers (EV_DOCUMENT_LAYERS (document)));
+}
+
+static const gchar*
+ev_sidebar_layers_get_label (EvSidebarPage *sidebar_page)
+{
+ return _("Layers");
+}
+
+static void
+ev_sidebar_layers_page_iface_init (EvSidebarPageInterface *iface)
+{
+ iface->support_document = ev_sidebar_layers_support_document;
+ iface->set_model = ev_sidebar_layers_set_model;
+ iface->get_label = ev_sidebar_layers_get_label;
+}
+
diff --git a/shell/ev-sidebar-layers.h b/shell/ev-sidebar-layers.h
new file mode 100644
index 00000000..573dc277
--- /dev/null
+++ b/shell/ev-sidebar-layers.h
@@ -0,0 +1,58 @@
+/* ev-sidebar-layers.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2008 Carlos Garcia Campos <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 __EV_SIDEBAR_LAYERS_H__
+#define __EV_SIDEBAR_LAYERS_H__
+
+#include <gtk/gtk.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvSidebarLayers EvSidebarLayers;
+typedef struct _EvSidebarLayersClass EvSidebarLayersClass;
+typedef struct _EvSidebarLayersPrivate EvSidebarLayersPrivate;
+
+#define EV_TYPE_SIDEBAR_LAYERS (ev_sidebar_layers_get_type())
+#define EV_SIDEBAR_LAYERS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_SIDEBAR_LAYERS, EvSidebarLayers))
+#define EV_SIDEBAR_LAYERS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_SIDEBAR_LAYERS, EvSidebarLayersClass))
+#define EV_IS_SIDEBAR_LAYERS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_SIDEBAR_LAYERS))
+#define EV_IS_SIDEBAR_LAYERS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_SIDEBAR_LAYERS))
+#define EV_SIDEBAR_LAYERS_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_SIDEBAR_LAYERS, EvSidebarLayersClass))
+
+struct _EvSidebarLayers {
+ GtkVBox base_instance;
+
+ EvSidebarLayersPrivate *priv;
+};
+
+struct _EvSidebarLayersClass {
+ GtkVBoxClass base_class;
+
+ /* Signals */
+ void (* layers_visibility_changed) (EvSidebarLayers *ev_layers);
+};
+
+GType ev_sidebar_layers_get_type (void) G_GNUC_CONST;
+GtkWidget *ev_sidebar_layers_new (void);
+
+G_END_DECLS
+
+#endif /* __EV_SIDEBAR_LAYERS_H__ */
diff --git a/shell/ev-sidebar-links.c b/shell/ev-sidebar-links.c
new file mode 100644
index 00000000..402f3be7
--- /dev/null
+++ b/shell/ev-sidebar-links.c
@@ -0,0 +1,760 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * Author:
+ * Jonathan Blandford <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "ev-document-links.h"
+#include "ev-job-scheduler.h"
+#include "ev-sidebar-links.h"
+#include "ev-sidebar-page.h"
+#include "ev-window.h"
+
+struct _EvSidebarLinksPrivate {
+ GtkWidget *tree_view;
+
+ /* Keep these ids around for blocking */
+ guint selection_id;
+ guint page_changed_id;
+ guint row_activated_id;
+
+ EvJob *job;
+ GtkTreeModel *model;
+ EvDocument *document;
+ EvDocumentModel *doc_model;
+};
+
+enum {
+ PROP_0,
+ PROP_MODEL,
+ PROP_WIDGET,
+};
+
+enum {
+ LINK_ACTIVATED,
+ N_SIGNALS
+};
+
+static void update_page_callback (EvSidebarLinks *sidebar_links,
+ gint old_page,
+ gint current_page);
+static void row_activated_callback (GtkTreeView *treeview,
+ GtkTreePath *arg1,
+ GtkTreeViewColumn *arg2,
+ gpointer user_data);
+static void ev_sidebar_links_set_links_model (EvSidebarLinks *links,
+ GtkTreeModel *model);
+static void job_finished_callback (EvJobLinks *job,
+ EvSidebarLinks *sidebar_links);
+static void ev_sidebar_links_set_current_page (EvSidebarLinks *sidebar_links,
+ gint current_page);
+static void ev_sidebar_links_page_iface_init (EvSidebarPageInterface *iface);
+static gboolean ev_sidebar_links_support_document (EvSidebarPage *sidebar_page,
+ EvDocument *document);
+static const gchar* ev_sidebar_links_get_label (EvSidebarPage *sidebar_page);
+
+static guint signals[N_SIGNALS];
+
+G_DEFINE_TYPE_EXTENDED (EvSidebarLinks,
+ ev_sidebar_links,
+ GTK_TYPE_VBOX,
+ 0,
+ G_IMPLEMENT_INTERFACE (EV_TYPE_SIDEBAR_PAGE,
+ ev_sidebar_links_page_iface_init))
+
+
+#define EV_SIDEBAR_LINKS_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_SIDEBAR_LINKS, EvSidebarLinksPrivate))
+
+static void
+ev_sidebar_links_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvSidebarLinks *ev_sidebar_links = EV_SIDEBAR_LINKS (object);
+
+ switch (prop_id)
+ {
+ case PROP_MODEL:
+ ev_sidebar_links_set_links_model (ev_sidebar_links, g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ev_sidebar_links_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvSidebarLinks *ev_sidebar_links;
+
+ ev_sidebar_links = EV_SIDEBAR_LINKS (object);
+
+ switch (prop_id)
+ {
+ case PROP_MODEL:
+ g_value_set_object (value, ev_sidebar_links->priv->model);
+ break;
+ case PROP_WIDGET:
+ g_value_set_object (value, ev_sidebar_links->priv->tree_view);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ev_sidebar_links_dispose (GObject *object)
+{
+ EvSidebarLinks *sidebar = EV_SIDEBAR_LINKS (object);
+
+ if (sidebar->priv->job) {
+ g_signal_handlers_disconnect_by_func (sidebar->priv->job,
+ job_finished_callback, sidebar);
+ ev_job_cancel (sidebar->priv->job);
+ g_object_unref (sidebar->priv->job);
+ sidebar->priv->job = NULL;
+ }
+
+ if (sidebar->priv->model) {
+ g_object_unref (sidebar->priv->model);
+ sidebar->priv->model = NULL;
+ }
+
+ if (sidebar->priv->document) {
+ g_object_unref (sidebar->priv->document);
+ sidebar->priv->document = NULL;
+ sidebar->priv->doc_model = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_sidebar_links_parent_class)->dispose (object);
+}
+
+static void
+ev_sidebar_links_map (GtkWidget *widget)
+{
+ EvSidebarLinks *links;
+
+ links = EV_SIDEBAR_LINKS (widget);
+
+ GTK_WIDGET_CLASS (ev_sidebar_links_parent_class)->map (widget);
+
+ if (links->priv->model) {
+ ev_sidebar_links_set_current_page (links,
+ ev_document_model_get_page (links->priv->doc_model));
+ }
+}
+
+static void
+ev_sidebar_links_class_init (EvSidebarLinksClass *ev_sidebar_links_class)
+{
+ GObjectClass *g_object_class;
+ GtkWidgetClass *widget_class;
+
+ g_object_class = G_OBJECT_CLASS (ev_sidebar_links_class);
+ widget_class = GTK_WIDGET_CLASS (ev_sidebar_links_class);
+
+ g_object_class->set_property = ev_sidebar_links_set_property;
+ g_object_class->get_property = ev_sidebar_links_get_property;
+ g_object_class->dispose = ev_sidebar_links_dispose;
+
+ widget_class->map = ev_sidebar_links_map;
+
+ signals[LINK_ACTIVATED] = g_signal_new ("link-activated",
+ G_TYPE_FROM_CLASS (g_object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (EvSidebarLinksClass, link_activated),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1, G_TYPE_OBJECT);
+
+ g_object_class_install_property (g_object_class,
+ PROP_MODEL,
+ g_param_spec_object ("model",
+ "Model",
+ "Current Model",
+ GTK_TYPE_TREE_MODEL,
+ G_PARAM_READWRITE));
+ g_object_class_override_property (g_object_class,
+ PROP_WIDGET,
+ "main-widget");
+
+ g_type_class_add_private (g_object_class, sizeof (EvSidebarLinksPrivate));
+}
+
+static void
+selection_changed_callback (GtkTreeSelection *selection,
+ EvSidebarLinks *ev_sidebar_links)
+{
+ EvDocument *document;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ document = EV_DOCUMENT (ev_sidebar_links->priv->document);
+ g_return_if_fail (ev_sidebar_links->priv->document != NULL);
+
+ if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ EvLink *link;
+
+ gtk_tree_model_get (model, &iter,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+ -1);
+
+ if (link == NULL)
+ return;
+
+ g_signal_handler_block (ev_sidebar_links->priv->doc_model,
+ ev_sidebar_links->priv->page_changed_id);
+ g_signal_emit (ev_sidebar_links, signals[LINK_ACTIVATED], 0, link);
+ g_signal_handler_unblock (ev_sidebar_links->priv->doc_model,
+ ev_sidebar_links->priv->page_changed_id);
+
+ g_object_unref (link);
+ }
+}
+
+static GtkTreeModel *
+create_loading_model (void)
+{
+ GtkTreeModel *retval;
+ GtkTreeIter iter;
+ gchar *markup;
+
+ /* Creates a fake model to indicate that we're loading */
+ retval = (GtkTreeModel *)gtk_list_store_new (EV_DOCUMENT_LINKS_COLUMN_NUM_COLUMNS,
+ G_TYPE_STRING,
+ G_TYPE_OBJECT,
+ G_TYPE_BOOLEAN,
+ G_TYPE_STRING);
+
+ gtk_list_store_append (GTK_LIST_STORE (retval), &iter);
+ markup = g_strdup_printf ("<span size=\"larger\" style=\"italic\">%s</span>", _("Loading…"));
+ gtk_list_store_set (GTK_LIST_STORE (retval), &iter,
+ EV_DOCUMENT_LINKS_COLUMN_MARKUP, markup,
+ EV_DOCUMENT_LINKS_COLUMN_EXPAND, FALSE,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, NULL,
+ -1);
+ g_free (markup);
+
+ return retval;
+}
+
+static void
+print_section_cb (GtkWidget *menuitem, EvSidebarLinks *sidebar)
+{
+ GtkWidget *window;
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ selection = gtk_tree_view_get_selection
+ (GTK_TREE_VIEW (sidebar->priv->tree_view));
+
+ if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ EvLink *link;
+ int first_page, last_page = -1;
+
+ gtk_tree_model_get (model, &iter,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+ -1);
+
+ if (!link)
+ return;
+
+ first_page = ev_link_get_page (link);
+ if (first_page == -1) {
+ g_object_unref (link);
+ return;
+ }
+
+ first_page++;
+ g_object_unref (link);
+
+ if (gtk_tree_model_iter_next (model, &iter)) {
+ gtk_tree_model_get (model, &iter,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+ -1);
+
+ if (link) {
+ last_page = ev_link_get_page (link);
+ g_object_unref (link);
+ }
+ } else {
+ last_page = ev_document_get_n_pages (sidebar->priv->document);
+ }
+
+ if (last_page == -1)
+ last_page = ev_document_get_n_pages (sidebar->priv->document);
+
+ window = gtk_widget_get_toplevel (GTK_WIDGET (sidebar));
+ if (EV_IS_WINDOW (window)) {
+ ev_window_print_range (EV_WINDOW (window), first_page, last_page);
+ }
+ }
+}
+
+static GtkMenu *
+build_popup_menu (EvSidebarLinks *sidebar)
+{
+ GtkWidget *menu;
+ GtkWidget *item;
+
+ menu = gtk_menu_new ();
+ item = gtk_image_menu_item_new_from_stock (GTK_STOCK_PRINT, NULL);
+ gtk_label_set_label (GTK_LABEL (gtk_bin_get_child (GTK_BIN (item))), _("Print…"));
+ gtk_widget_show (item);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ g_signal_connect (item, "activate",
+ G_CALLBACK (print_section_cb), sidebar);
+
+ return GTK_MENU (menu);
+}
+
+static void
+popup_menu_cb (GtkWidget *treeview, EvSidebarLinks *sidebar)
+{
+ GtkMenu *menu = build_popup_menu (sidebar);
+
+ gtk_menu_popup (menu, NULL, NULL,
+ ev_gui_menu_position_tree_selection,
+ sidebar->priv->tree_view, 0,
+ gtk_get_current_event_time ());
+ gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
+}
+
+static gboolean
+button_press_cb (GtkWidget *treeview,
+ GdkEventButton *event,
+ EvSidebarLinks *sidebar)
+{
+ GtkTreePath *path = NULL;
+
+ if (event->button == 3) {
+ if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (treeview),
+ event->x,
+ event->y,
+ &path,
+ NULL, NULL, NULL)) {
+ gtk_tree_view_set_cursor (GTK_TREE_VIEW (treeview),
+ path, NULL, FALSE);
+ gtk_menu_popup (build_popup_menu (sidebar), NULL,
+ NULL, NULL, NULL, event->button,
+ gtk_get_current_event_time ());
+ gtk_tree_path_free (path);
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+
+static void
+ev_sidebar_links_construct (EvSidebarLinks *ev_sidebar_links)
+{
+ EvSidebarLinksPrivate *priv;
+ GtkWidget *swindow;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ GtkTreeSelection *selection;
+ GtkTreeModel *loading_model;
+
+ priv = ev_sidebar_links->priv;
+
+ swindow = gtk_scrolled_window_new (NULL, NULL);
+
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (swindow),
+ GTK_SHADOW_IN);
+
+ /* Create tree view */
+ loading_model = create_loading_model ();
+ priv->tree_view = gtk_tree_view_new_with_model (loading_model);
+ g_object_unref (loading_model);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree_view));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->tree_view), FALSE);
+ gtk_container_add (GTK_CONTAINER (swindow), priv->tree_view);
+
+ gtk_box_pack_start (GTK_BOX (ev_sidebar_links), swindow, TRUE, TRUE, 0);
+ gtk_widget_show_all (GTK_WIDGET (ev_sidebar_links));
+
+ column = gtk_tree_view_column_new ();
+ gtk_tree_view_column_set_expand (GTK_TREE_VIEW_COLUMN (column), TRUE);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (priv->tree_view), column);
+
+ renderer = (GtkCellRenderer*)
+ g_object_new (GTK_TYPE_CELL_RENDERER_TEXT,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ NULL);
+ gtk_tree_view_column_pack_start (GTK_TREE_VIEW_COLUMN (column), renderer, TRUE);
+ gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), renderer,
+ "markup", EV_DOCUMENT_LINKS_COLUMN_MARKUP,
+ NULL);
+
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_end (GTK_TREE_VIEW_COLUMN (column), renderer, FALSE);
+ gtk_tree_view_column_set_attributes (GTK_TREE_VIEW_COLUMN (column), renderer,
+ "text", EV_DOCUMENT_LINKS_COLUMN_PAGE_LABEL,
+ NULL);
+ g_object_set (G_OBJECT (renderer), "style", PANGO_STYLE_ITALIC, NULL);
+
+ g_signal_connect (priv->tree_view,
+ "button_press_event",
+ G_CALLBACK (button_press_cb),
+ ev_sidebar_links);
+ g_signal_connect (priv->tree_view,
+ "popup_menu",
+ G_CALLBACK (popup_menu_cb),
+ ev_sidebar_links);
+}
+
+static void
+ev_sidebar_links_init (EvSidebarLinks *ev_sidebar_links)
+{
+ ev_sidebar_links->priv = EV_SIDEBAR_LINKS_GET_PRIVATE (ev_sidebar_links);
+
+ ev_sidebar_links_construct (ev_sidebar_links);
+}
+
+static gboolean
+fill_page_labels (GtkTreeModel *tree_model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ EvSidebarLinks *sidebar_links)
+{
+ EvLink *link;
+ gint page;
+ gchar *page_label;
+
+ gtk_tree_model_get (tree_model, iter,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+ -1);
+
+ if (!link)
+ return FALSE;
+
+ page = ev_link_get_page (link);
+
+ if (page < 0)
+ return FALSE;
+
+ page_label = ev_document_get_page_label (sidebar_links->priv->document,
+ page);
+ gtk_tree_store_set (GTK_TREE_STORE (tree_model), iter,
+ EV_DOCUMENT_LINKS_COLUMN_PAGE_LABEL, page_label,
+ -1);
+
+ g_free (page_label);
+
+ g_object_unref (link);
+ return FALSE;
+}
+
+/* Public Functions */
+
+GtkWidget *
+ev_sidebar_links_new (void)
+{
+ GtkWidget *ev_sidebar_links;
+
+ ev_sidebar_links = g_object_new (EV_TYPE_SIDEBAR_LINKS, NULL);
+
+ return ev_sidebar_links;
+}
+
+static gboolean
+update_page_callback_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ EvSidebarLinks *sidebar_links = (data);
+ EvLink *link;
+
+ gtk_tree_model_get (model, iter,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+ -1);
+
+ if (link) {
+ int current_page;
+ int dest_page;
+
+ dest_page = ev_link_get_page (link);
+ g_object_unref (link);
+
+ current_page = ev_document_model_get_page (sidebar_links->priv->doc_model);
+
+ if (dest_page == current_page) {
+ gtk_tree_view_expand_to_path (GTK_TREE_VIEW (sidebar_links->priv->tree_view),
+ path);
+ gtk_tree_view_set_cursor (GTK_TREE_VIEW (sidebar_links->priv->tree_view),
+ path, NULL, FALSE);
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static void
+ev_sidebar_links_set_current_page (EvSidebarLinks *sidebar_links,
+ gint current_page)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ /* Widget is not currently visible */
+ if (!gtk_widget_get_mapped (GTK_WIDGET (sidebar_links)))
+ return;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (sidebar_links->priv->tree_view));
+
+ if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ EvLink *link;
+
+ gtk_tree_model_get (model, &iter,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+ -1);
+ if (link) {
+ gint dest_page;
+
+ dest_page = ev_link_get_page (link);
+ g_object_unref (link);
+
+ if (dest_page == current_page)
+ return;
+ }
+ }
+
+ /* We go through the tree linearly looking for the first page that
+ * matches. This is pretty inefficient. We can do something neat with
+ * a GtkTreeModelSort here to make it faster, if it turns out to be
+ * slow.
+ */
+ g_signal_handler_block (selection, sidebar_links->priv->selection_id);
+ g_signal_handler_block (sidebar_links->priv->tree_view, sidebar_links->priv->row_activated_id);
+
+ gtk_tree_model_foreach (model,
+ update_page_callback_foreach,
+ sidebar_links);
+
+ g_signal_handler_unblock (selection, sidebar_links->priv->selection_id);
+ g_signal_handler_unblock (sidebar_links->priv->tree_view, sidebar_links->priv->row_activated_id);
+}
+
+static void
+update_page_callback (EvSidebarLinks *sidebar_links,
+ gint old_page,
+ gint new_page)
+{
+ ev_sidebar_links_set_current_page (sidebar_links, new_page);
+}
+
+static void
+row_activated_callback (GtkTreeView *treeview,
+ GtkTreePath *arg1,
+ GtkTreeViewColumn *arg2,
+ gpointer user_data)
+{
+ if (gtk_tree_view_row_expanded (GTK_TREE_VIEW (treeview), arg1)) {
+ gtk_tree_view_collapse_row (GTK_TREE_VIEW (treeview), arg1);
+ } else {
+ gtk_tree_view_expand_row (GTK_TREE_VIEW (treeview), arg1, FALSE);
+ }
+}
+
+static void
+expand_open_links (GtkTreeView *tree_view, GtkTreeModel *model, GtkTreeIter *parent)
+{
+ GtkTreeIter iter;
+ gboolean expand;
+
+ if (gtk_tree_model_iter_children (model, &iter, parent)) {
+ do {
+ gtk_tree_model_get (model, &iter,
+ EV_DOCUMENT_LINKS_COLUMN_EXPAND, &expand,
+ -1);
+ if (expand) {
+ GtkTreePath *path;
+
+ path = gtk_tree_model_get_path (model, &iter);
+ gtk_tree_view_expand_row (tree_view, path, FALSE);
+ gtk_tree_path_free (path);
+ }
+
+ expand_open_links (tree_view, model, &iter);
+ } while (gtk_tree_model_iter_next (model, &iter));
+ }
+}
+
+static void
+ev_sidebar_links_set_links_model (EvSidebarLinks *sidebar_links,
+ GtkTreeModel *model)
+{
+ EvSidebarLinksPrivate *priv = sidebar_links->priv;
+
+ if (priv->model == model)
+ return;
+
+ if (priv->model)
+ g_object_unref (priv->model);
+ priv->model = g_object_ref (model);
+
+ g_object_notify (G_OBJECT (sidebar_links), "model");
+}
+
+static void
+job_finished_callback (EvJobLinks *job,
+ EvSidebarLinks *sidebar_links)
+{
+ EvSidebarLinksPrivate *priv = sidebar_links->priv;
+ GtkTreeSelection *selection;
+
+ ev_sidebar_links_set_links_model (sidebar_links, job->model);
+
+ gtk_tree_model_foreach (priv->model, (GtkTreeModelForeachFunc)fill_page_labels, sidebar_links);
+
+ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view), job->model);
+
+ g_object_unref (job);
+ priv->job = NULL;
+
+ expand_open_links (GTK_TREE_VIEW (priv->tree_view), priv->model, NULL);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree_view));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+ if (priv->selection_id <= 0) {
+ priv->selection_id =
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (selection_changed_callback),
+ sidebar_links);
+ }
+ priv->page_changed_id =
+ g_signal_connect_swapped (priv->doc_model, "page-changed",
+ G_CALLBACK (update_page_callback),
+ sidebar_links);
+ if (priv->row_activated_id <= 0) {
+ priv->row_activated_id =
+ g_signal_connect (priv->tree_view, "row-activated",
+ G_CALLBACK (row_activated_callback),
+ sidebar_links);
+ }
+
+ ev_sidebar_links_set_current_page (sidebar_links,
+ ev_document_model_get_page (priv->doc_model));
+}
+
+static void
+ev_sidebar_links_document_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvSidebarLinks *sidebar_links)
+{
+ EvDocument *document = ev_document_model_get_document (model);
+ EvSidebarLinksPrivate *priv = sidebar_links->priv;
+
+ if (!EV_IS_DOCUMENT_LINKS (document))
+ return;
+
+ if (!ev_document_links_has_document_links (EV_DOCUMENT_LINKS (document)))
+ return;
+
+ if (priv->document) {
+ gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view), NULL);
+ g_object_unref (priv->document);
+ }
+
+ priv->document = g_object_ref (document);
+
+ if (priv->job) {
+ g_signal_handlers_disconnect_by_func (priv->job,
+ job_finished_callback,
+ sidebar_links);
+ g_object_unref (priv->job);
+ }
+
+ priv->job = ev_job_links_new (document);
+ g_signal_connect (priv->job,
+ "finished",
+ G_CALLBACK (job_finished_callback),
+ sidebar_links);
+ /* The priority doesn't matter for this job */
+ ev_job_scheduler_push_job (priv->job, EV_JOB_PRIORITY_NONE);
+}
+
+static void
+ev_sidebar_links_set_model (EvSidebarPage *sidebar_page,
+ EvDocumentModel *model)
+{
+ EvSidebarLinks *sidebar_links = EV_SIDEBAR_LINKS (sidebar_page);
+ EvSidebarLinksPrivate *priv = sidebar_links->priv;
+
+ if (priv->doc_model == model)
+ return;
+
+ priv->doc_model = model;
+ g_signal_connect (model, "notify::document",
+ G_CALLBACK (ev_sidebar_links_document_changed_cb),
+ sidebar_page);
+}
+
+static gboolean
+ev_sidebar_links_support_document (EvSidebarPage *sidebar_page,
+ EvDocument *document)
+{
+ return (EV_IS_DOCUMENT_LINKS (document) &&
+ ev_document_links_has_document_links (EV_DOCUMENT_LINKS (document)));
+}
+
+static const gchar*
+ev_sidebar_links_get_label (EvSidebarPage *sidebar_page)
+{
+ return _("Index");
+}
+
+static void
+ev_sidebar_links_page_iface_init (EvSidebarPageInterface *iface)
+{
+ iface->support_document = ev_sidebar_links_support_document;
+ iface->set_model = ev_sidebar_links_set_model;
+ iface->get_label = ev_sidebar_links_get_label;
+}
+
diff --git a/shell/ev-sidebar-links.h b/shell/ev-sidebar-links.h
new file mode 100644
index 00000000..dd4acce6
--- /dev/null
+++ b/shell/ev-sidebar-links.h
@@ -0,0 +1,66 @@
+/* ev-sidebar-links.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * Author:
+ * Jonathan Blandford <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 __EV_SIDEBAR_LINKS_H__
+#define __EV_SIDEBAR_LINKS_H__
+
+#include <gtk/gtk.h>
+
+#include "ev-document.h"
+#include "ev-link.h"
+#include "ev-utils.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvSidebarLinks EvSidebarLinks;
+typedef struct _EvSidebarLinksClass EvSidebarLinksClass;
+typedef struct _EvSidebarLinksPrivate EvSidebarLinksPrivate;
+
+#define EV_TYPE_SIDEBAR_LINKS (ev_sidebar_links_get_type())
+#define EV_SIDEBAR_LINKS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_SIDEBAR_LINKS, EvSidebarLinks))
+#define EV_SIDEBAR_LINKS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_SIDEBAR_LINKS, EvSidebarLinksClass))
+#define EV_IS_SIDEBAR_LINKS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_SIDEBAR_LINKS))
+#define EV_IS_SIDEBAR_LINKS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_SIDEBAR_LINKS))
+#define EV_SIDEBAR_LINKS_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_SIDEBAR_LINKS, EvSidebarLinksClass))
+
+struct _EvSidebarLinks {
+ GtkVBox base_instance;
+
+ EvSidebarLinksPrivate *priv;
+};
+
+struct _EvSidebarLinksClass {
+ GtkVBoxClass base_class;
+
+ void (* link_activated) (EvSidebarLinks *sidebar_links,
+ EvLink *link);
+};
+
+GType ev_sidebar_links_get_type (void);
+GtkWidget *ev_sidebar_links_new (void);
+
+G_END_DECLS
+
+#endif /* __EV_SIDEBAR_LINKS_H__ */
+
+
diff --git a/shell/ev-sidebar-page.c b/shell/ev-sidebar-page.c
new file mode 100644
index 00000000..fdb8d4af
--- /dev/null
+++ b/shell/ev-sidebar-page.c
@@ -0,0 +1,92 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2005 Marco Pesenti Gritti
+ *
+ * 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, 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.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gtk/gtk.h>
+
+#include "ev-sidebar-page.h"
+
+G_DEFINE_INTERFACE (EvSidebarPage, ev_sidebar_page, 0)
+
+gboolean
+ev_sidebar_page_support_document (EvSidebarPage *sidebar_page,
+ EvDocument *document)
+{
+ EvSidebarPageInterface *iface;
+
+ g_return_val_if_fail (EV_IS_SIDEBAR_PAGE (sidebar_page), FALSE);
+ g_return_val_if_fail (EV_IS_DOCUMENT (document), FALSE);
+
+ iface = EV_SIDEBAR_PAGE_GET_IFACE (sidebar_page);
+
+ g_return_val_if_fail (iface->support_document, FALSE);
+
+ return iface->support_document (sidebar_page, document);
+}
+
+void
+ev_sidebar_page_set_model (EvSidebarPage *sidebar_page,
+ EvDocumentModel *model)
+{
+ EvSidebarPageInterface *iface;
+
+ g_return_if_fail (EV_IS_SIDEBAR_PAGE (sidebar_page));
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ iface = EV_SIDEBAR_PAGE_GET_IFACE (sidebar_page);
+
+ g_assert (iface->set_model);
+
+ iface->set_model (sidebar_page, model);
+}
+
+const gchar *
+ev_sidebar_page_get_label (EvSidebarPage *sidebar_page)
+{
+ EvSidebarPageInterface *iface;
+
+ g_return_val_if_fail (EV_IS_SIDEBAR_PAGE (sidebar_page), NULL);
+
+ iface = EV_SIDEBAR_PAGE_GET_IFACE (sidebar_page);
+
+ g_assert (iface->get_label);
+
+ return iface->get_label (sidebar_page);
+}
+
+
+static void
+ev_sidebar_page_default_init (EvSidebarPageInterface *iface)
+{
+ static gboolean initialized = FALSE;
+
+ if (!initialized) {
+ g_object_interface_install_property (iface,
+ g_param_spec_object ("main-widget",
+ "Main Widget",
+ "Main page widget, used to handle focus",
+ GTK_TYPE_WIDGET,
+ G_PARAM_READABLE));
+ initialized = TRUE;
+ }
+}
diff --git a/shell/ev-sidebar-page.h b/shell/ev-sidebar-page.h
new file mode 100644
index 00000000..21ef92cf
--- /dev/null
+++ b/shell/ev-sidebar-page.h
@@ -0,0 +1,64 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2005 Marco Pesenti Gritti
+ *
+ * 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, 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 EV_SIDEBAR_PAGE_H
+#define EV_SIDEBAR_PAGE_H
+
+#include <glib-object.h>
+#include <glib.h>
+
+#include "ev-document.h"
+#include "ev-document-model.h"
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_SIDEBAR_PAGE (ev_sidebar_page_get_type ())
+#define EV_SIDEBAR_PAGE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_SIDEBAR_PAGE, EvSidebarPage))
+#define EV_SIDEBAR_PAGE_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_SIDEBAR_PAGE, EvSidebarPageInterface))
+#define EV_IS_SIDEBAR_PAGE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_SIDEBAR_PAGE))
+#define EV_IS_SIDEBAR_PAGE_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_SIDEBAR_PAGE))
+#define EV_SIDEBAR_PAGE_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_SIDEBAR_PAGE, EvSidebarPageInterface))
+
+typedef struct _EvSidebarPage EvSidebarPage;
+typedef struct _EvSidebarPageInterface EvSidebarPageInterface;
+
+struct _EvSidebarPageInterface
+{
+ GTypeInterface base_iface;
+
+ /* Methods */
+ gboolean (* support_document) (EvSidebarPage *sidebar_page,
+ EvDocument *document);
+ void (* set_model) (EvSidebarPage *sidebar_page,
+ EvDocumentModel *model);
+ const gchar*(* get_label) (EvSidebarPage *sidebar_page);
+};
+
+GType ev_sidebar_page_get_type (void) G_GNUC_CONST;
+gboolean ev_sidebar_page_support_document (EvSidebarPage *sidebar_page,
+ EvDocument *document);
+void ev_sidebar_page_set_model (EvSidebarPage *sidebar_page,
+ EvDocumentModel *model);
+const gchar* ev_sidebar_page_get_label (EvSidebarPage *page);
+
+
+G_END_DECLS
+
+#endif /* EV_SIDEBAR_PAGE */
diff --git a/shell/ev-sidebar-thumbnails.c b/shell/ev-sidebar-thumbnails.c
new file mode 100644
index 00000000..65fb3141
--- /dev/null
+++ b/shell/ev-sidebar-thumbnails.c
@@ -0,0 +1,974 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ * Copyright (C) 2004, 2005 Anders Carlsson <[email protected]>
+ *
+ * Authors:
+ * Jonathan Blandford <[email protected]>
+ * Anders Carlsson <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "ev-document-misc.h"
+#include "ev-document-thumbnails.h"
+#include "ev-job-scheduler.h"
+#include "ev-sidebar-page.h"
+#include "ev-sidebar-thumbnails.h"
+#include "ev-utils.h"
+#include "ev-window.h"
+
+#define THUMBNAIL_WIDTH 100
+
+/* The IconView doesn't scale nearly as well as the TreeView, so we arbitrarily
+ * limit its use */
+#define MAX_ICON_VIEW_PAGE_COUNT 1500
+
+typedef struct _EvThumbsSize
+{
+ gint width;
+ gint height;
+} EvThumbsSize;
+
+typedef struct _EvThumbsSizeCache {
+ gboolean uniform;
+ gint uniform_width;
+ gint uniform_height;
+ EvThumbsSize *sizes;
+} EvThumbsSizeCache;
+
+struct _EvSidebarThumbnailsPrivate {
+ GtkWidget *swindow;
+ GtkWidget *icon_view;
+ GtkWidget *tree_view;
+ GtkAdjustment *vadjustment;
+ GtkListStore *list_store;
+ GHashTable *loading_icons;
+ EvDocument *document;
+ EvDocumentModel *model;
+ EvThumbsSizeCache *size_cache;
+
+ gint n_pages, pages_done;
+
+ int rotation;
+ gboolean inverted_colors;
+
+ /* Visible pages */
+ gint start_page, end_page;
+};
+
+enum {
+ COLUMN_PAGE_STRING,
+ COLUMN_PIXBUF,
+ COLUMN_THUMBNAIL_SET,
+ COLUMN_JOB,
+ NUM_COLUMNS
+};
+
+enum {
+ PROP_0,
+ PROP_WIDGET,
+};
+
+static void ev_sidebar_thumbnails_clear_model (EvSidebarThumbnails *sidebar);
+static gboolean ev_sidebar_thumbnails_support_document (EvSidebarPage *sidebar_page,
+ EvDocument *document);
+static void ev_sidebar_thumbnails_page_iface_init (EvSidebarPageInterface *iface);
+static const gchar* ev_sidebar_thumbnails_get_label (EvSidebarPage *sidebar_page);
+static void thumbnail_job_completed_callback (EvJobThumbnail *job,
+ EvSidebarThumbnails *sidebar_thumbnails);
+static void adjustment_changed_cb (EvSidebarThumbnails *sidebar_thumbnails);
+
+G_DEFINE_TYPE_EXTENDED (EvSidebarThumbnails,
+ ev_sidebar_thumbnails,
+ GTK_TYPE_VBOX,
+ 0,
+ G_IMPLEMENT_INTERFACE (EV_TYPE_SIDEBAR_PAGE,
+ ev_sidebar_thumbnails_page_iface_init))
+
+#define EV_SIDEBAR_THUMBNAILS_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_SIDEBAR_THUMBNAILS, EvSidebarThumbnailsPrivate));
+
+/* Thumbnails dimensions cache */
+#define EV_THUMBNAILS_SIZE_CACHE_KEY "ev-thumbnails-size-cache"
+
+static EvThumbsSizeCache *
+ev_thumbnails_size_cache_new (EvDocument *document)
+{
+ EvThumbsSizeCache *cache;
+ EvRenderContext *rc = NULL;
+ gint i, n_pages;
+ EvThumbsSize *thumb_size;
+
+ cache = g_new0 (EvThumbsSizeCache, 1);
+
+ n_pages = ev_document_get_n_pages (document);
+
+ /* Assume all pages are the same size until proven otherwise */
+ cache->uniform = TRUE;
+
+ for (i = 0; i < n_pages; i++) {
+ EvPage *page;
+ gdouble page_width, page_height;
+ gint thumb_width = 0;
+ gint thumb_height = 0;
+
+ page = ev_document_get_page (document, i);
+
+ ev_document_get_page_size (document, i, &page_width, &page_height);
+
+ if (!rc) {
+ rc = ev_render_context_new (page, 0, (gdouble)THUMBNAIL_WIDTH / page_width);
+ } else {
+ ev_render_context_set_page (rc, page);
+ ev_render_context_set_scale (rc, (gdouble)THUMBNAIL_WIDTH / page_width);
+ }
+
+ ev_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (document),
+ rc, &thumb_width, &thumb_height);
+
+ if (i == 0) {
+ cache->uniform_width = thumb_width;
+ cache->uniform_height = thumb_height;
+ } else if (cache->uniform &&
+ (cache->uniform_width != thumb_width ||
+ cache->uniform_height != thumb_height)) {
+ /* It's a different thumbnail size. Backfill the array. */
+ int j;
+
+ cache->sizes = g_new0 (EvThumbsSize, n_pages);
+
+ for (j = 0; j < i; j++) {
+ thumb_size = &(cache->sizes[j]);
+ thumb_size->width = cache->uniform_width;
+ thumb_size->height = cache->uniform_height;
+ }
+ cache->uniform = FALSE;
+ }
+
+ if (! cache->uniform) {
+ thumb_size = &(cache->sizes[i]);
+
+ thumb_size->width = thumb_width;
+ thumb_size->height = thumb_height;
+ }
+
+ g_object_unref (page);
+ }
+
+ if (rc) {
+ g_object_unref (rc);
+ }
+
+ return cache;
+}
+
+static void
+ev_thumbnails_size_cache_get_size (EvThumbsSizeCache *cache,
+ gint page,
+ gint rotation,
+ gint *width,
+ gint *height)
+{
+ gint w, h;
+
+ if (cache->uniform) {
+ w = cache->uniform_width;
+ h = cache->uniform_height;
+ } else {
+ EvThumbsSize *thumb_size;
+
+ thumb_size = &(cache->sizes[page]);
+
+ w = thumb_size->width;
+ h = thumb_size->height;
+ }
+
+ if (rotation == 0 || rotation == 180) {
+ if (width) *width = w;
+ if (height) *height = h;
+ } else {
+ if (width) *width = h;
+ if (height) *height = w;
+ }
+}
+
+static void
+ev_thumbnails_size_cache_free (EvThumbsSizeCache *cache)
+{
+ if (cache->sizes) {
+ g_free (cache->sizes);
+ cache->sizes = NULL;
+ }
+
+ g_free (cache);
+}
+
+static EvThumbsSizeCache *
+ev_thumbnails_size_cache_get (EvDocument *document)
+{
+ EvThumbsSizeCache *cache;
+
+ cache = g_object_get_data (G_OBJECT (document), EV_THUMBNAILS_SIZE_CACHE_KEY);
+ if (!cache) {
+ cache = ev_thumbnails_size_cache_new (document);
+ g_object_set_data_full (G_OBJECT (document),
+ EV_THUMBNAILS_SIZE_CACHE_KEY,
+ cache,
+ (GDestroyNotify)ev_thumbnails_size_cache_free);
+ }
+
+ return cache;
+}
+
+
+static void
+ev_sidebar_thumbnails_dispose (GObject *object)
+{
+ EvSidebarThumbnails *sidebar_thumbnails = EV_SIDEBAR_THUMBNAILS (object);
+
+ if (sidebar_thumbnails->priv->loading_icons) {
+ g_hash_table_destroy (sidebar_thumbnails->priv->loading_icons);
+ sidebar_thumbnails->priv->loading_icons = NULL;
+ }
+
+ if (sidebar_thumbnails->priv->list_store) {
+ ev_sidebar_thumbnails_clear_model (sidebar_thumbnails);
+ g_object_unref (sidebar_thumbnails->priv->list_store);
+ sidebar_thumbnails->priv->list_store = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_sidebar_thumbnails_parent_class)->dispose (object);
+}
+
+static void
+ev_sidebar_thumbnails_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvSidebarThumbnails *sidebar = EV_SIDEBAR_THUMBNAILS (object);
+
+ switch (prop_id) {
+ case PROP_WIDGET:
+ if (sidebar->priv->tree_view)
+ g_value_set_object (value, sidebar->priv->tree_view);
+ else
+ g_value_set_object (value, sidebar->priv->icon_view);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ev_sidebar_thumbnails_map (GtkWidget *widget)
+{
+ EvSidebarThumbnails *sidebar;
+
+ sidebar = EV_SIDEBAR_THUMBNAILS (widget);
+
+ GTK_WIDGET_CLASS (ev_sidebar_thumbnails_parent_class)->map (widget);
+
+ adjustment_changed_cb (sidebar);
+}
+
+static void
+ev_sidebar_thumbnails_class_init (EvSidebarThumbnailsClass *ev_sidebar_thumbnails_class)
+{
+ GObjectClass *g_object_class;
+ GtkObjectClass *gtk_object_class;
+ GtkWidgetClass *widget_class;
+
+ g_object_class = G_OBJECT_CLASS (ev_sidebar_thumbnails_class);
+ gtk_object_class = GTK_OBJECT_CLASS (ev_sidebar_thumbnails_class);
+ widget_class = GTK_WIDGET_CLASS (ev_sidebar_thumbnails_class);
+
+ g_object_class->dispose = ev_sidebar_thumbnails_dispose;
+ g_object_class->get_property = ev_sidebar_thumbnails_get_property;
+ widget_class->map = ev_sidebar_thumbnails_map;
+
+ g_object_class_override_property (g_object_class,
+ PROP_WIDGET,
+ "main-widget");
+
+ g_type_class_add_private (g_object_class, sizeof (EvSidebarThumbnailsPrivate));
+}
+
+GtkWidget *
+ev_sidebar_thumbnails_new (void)
+{
+ GtkWidget *ev_sidebar_thumbnails;
+
+ ev_sidebar_thumbnails = g_object_new (EV_TYPE_SIDEBAR_THUMBNAILS, NULL);
+
+ return ev_sidebar_thumbnails;
+}
+
+static GdkPixbuf *
+ev_sidebar_thumbnails_get_loading_icon (EvSidebarThumbnails *sidebar_thumbnails,
+ gint width,
+ gint height)
+{
+ EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+ GdkPixbuf *icon;
+ gchar *key;
+
+ key = g_strdup_printf ("%dx%d", width, height);
+ icon = g_hash_table_lookup (priv->loading_icons, key);
+ if (!icon) {
+ gboolean inverted_colors;
+
+ inverted_colors = ev_document_model_get_inverted_colors (priv->model);
+ icon = ev_document_misc_get_loading_thumbnail (width, height, inverted_colors);
+ g_hash_table_insert (priv->loading_icons, key, icon);
+ } else {
+ g_free (key);
+ }
+
+ return icon;
+}
+
+static void
+clear_range (EvSidebarThumbnails *sidebar_thumbnails,
+ gint start_page,
+ gint end_page)
+{
+ EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ gboolean result;
+ gint prev_width = -1;
+ gint prev_height = -1;
+
+ g_assert (start_page <= end_page);
+
+ path = gtk_tree_path_new_from_indices (start_page, -1);
+ for (result = gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->list_store), &iter, path);
+ result && start_page <= end_page;
+ result = gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->list_store), &iter), start_page ++) {
+ EvJobThumbnail *job;
+ GdkPixbuf *loading_icon = NULL;
+ gint width, height;
+
+ gtk_tree_model_get (GTK_TREE_MODEL (priv->list_store),
+ &iter,
+ COLUMN_JOB, &job,
+ -1);
+
+ if (job) {
+ g_signal_handlers_disconnect_by_func (job, thumbnail_job_completed_callback, sidebar_thumbnails);
+ ev_job_cancel (EV_JOB (job));
+ g_object_unref (job);
+ }
+
+ ev_thumbnails_size_cache_get_size (priv->size_cache, start_page,
+ priv->rotation,
+ &width, &height);
+ if (!loading_icon || (width != prev_width && height != prev_height)) {
+ loading_icon =
+ ev_sidebar_thumbnails_get_loading_icon (sidebar_thumbnails,
+ width, height);
+ }
+
+ prev_width = width;
+ prev_height = height;
+
+ gtk_list_store_set (priv->list_store, &iter,
+ COLUMN_JOB, NULL,
+ COLUMN_THUMBNAIL_SET, FALSE,
+ COLUMN_PIXBUF, loading_icon,
+ -1);
+ }
+ gtk_tree_path_free (path);
+}
+
+static gdouble
+get_scale_for_page (EvSidebarThumbnails *sidebar_thumbnails,
+ gint page)
+{
+ EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+ gdouble width;
+
+ ev_document_get_page_size (priv->document, page, &width, NULL);
+
+ return (gdouble)THUMBNAIL_WIDTH / width;
+}
+
+static void
+add_range (EvSidebarThumbnails *sidebar_thumbnails,
+ gint start_page,
+ gint end_page)
+{
+ EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ gboolean result;
+ gint page = start_page;
+
+ g_assert (start_page <= end_page);
+
+ path = gtk_tree_path_new_from_indices (start_page, -1);
+ for (result = gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->list_store), &iter, path);
+ result && page <= end_page;
+ result = gtk_tree_model_iter_next (GTK_TREE_MODEL (priv->list_store), &iter), page ++) {
+ EvJob *job;
+ gboolean thumbnail_set;
+
+ gtk_tree_model_get (GTK_TREE_MODEL (priv->list_store), &iter,
+ COLUMN_JOB, &job,
+ COLUMN_THUMBNAIL_SET, &thumbnail_set,
+ -1);
+
+ if (job == NULL && !thumbnail_set) {
+ job = ev_job_thumbnail_new (priv->document,
+ page, priv->rotation,
+ get_scale_for_page (sidebar_thumbnails, page));
+ ev_job_scheduler_push_job (EV_JOB (job), EV_JOB_PRIORITY_HIGH);
+
+ g_object_set_data_full (G_OBJECT (job), "tree_iter",
+ gtk_tree_iter_copy (&iter),
+ (GDestroyNotify) gtk_tree_iter_free);
+ g_signal_connect (job, "finished",
+ G_CALLBACK (thumbnail_job_completed_callback),
+ sidebar_thumbnails);
+ gtk_list_store_set (priv->list_store, &iter,
+ COLUMN_JOB, job,
+ -1);
+
+ /* The queue and the list own a ref to the job now */
+ g_object_unref (job);
+ } else if (job) {
+ g_object_unref (job);
+ }
+ }
+ gtk_tree_path_free (path);
+}
+
+/* This modifies start */
+static void
+update_visible_range (EvSidebarThumbnails *sidebar_thumbnails,
+ gint start_page,
+ gint end_page)
+{
+ EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+ int old_start_page, old_end_page;
+
+ old_start_page = priv->start_page;
+ old_end_page = priv->end_page;
+
+ if (start_page == old_start_page &&
+ end_page == old_end_page)
+ return;
+
+ /* Clear the areas we no longer display */
+ if (old_start_page >= 0 && old_start_page < start_page)
+ clear_range (sidebar_thumbnails, old_start_page, MIN (start_page - 1, old_end_page));
+
+ if (old_end_page > 0 && old_end_page > end_page)
+ clear_range (sidebar_thumbnails, MAX (end_page + 1, old_start_page), old_end_page);
+
+ add_range (sidebar_thumbnails, start_page, end_page);
+
+ priv->start_page = start_page;
+ priv->end_page = end_page;
+}
+
+static void
+adjustment_changed_cb (EvSidebarThumbnails *sidebar_thumbnails)
+{
+ EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+ GtkTreePath *path = NULL;
+ GtkTreePath *path2 = NULL;
+ gdouble page_size;
+ gdouble value;
+ gint wy1;
+ gint wy2;
+
+ /* Widget is not currently visible */
+ if (!gtk_widget_get_mapped (GTK_WIDGET (sidebar_thumbnails)))
+ return;
+
+ page_size = gtk_adjustment_get_page_size (priv->vadjustment);
+
+ if (page_size == 0)
+ return;
+
+ value = gtk_adjustment_get_value (priv->vadjustment);
+
+ if (priv->tree_view) {
+ if (! gtk_widget_get_realized (priv->tree_view))
+ return;
+
+ gtk_tree_view_convert_tree_to_bin_window_coords (GTK_TREE_VIEW (priv->tree_view),
+ 0, (int) value,
+ NULL, &wy1);
+ gtk_tree_view_convert_tree_to_bin_window_coords (GTK_TREE_VIEW (priv->tree_view),
+ 0, (int) (value + page_size),
+ NULL, &wy2);
+ gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (priv->tree_view),
+ 1, wy1 + 1, &path,
+ NULL, NULL, NULL);
+ gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (priv->tree_view),
+ 1, wy2 -1, &path2,
+ NULL, NULL, NULL);
+ } else if (priv->icon_view) {
+ if (! gtk_widget_get_realized (priv->icon_view))
+ return;
+ if (! gtk_icon_view_get_visible_range (GTK_ICON_VIEW (priv->icon_view), &path, &path2))
+ return;
+ } else {
+ return;
+ }
+
+ if (path && path2) {
+ update_visible_range (sidebar_thumbnails,
+ gtk_tree_path_get_indices (path)[0],
+ gtk_tree_path_get_indices (path2)[0]);
+ }
+
+ gtk_tree_path_free (path);
+ gtk_tree_path_free (path2);
+}
+
+static void
+ev_sidebar_thumbnails_fill_model (EvSidebarThumbnails *sidebar_thumbnails)
+{
+ EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+ GtkTreeIter iter;
+ int i;
+ gint prev_width = -1;
+ gint prev_height = -1;
+
+ for (i = 0; i < sidebar_thumbnails->priv->n_pages; i++) {
+ gchar *page_label;
+ gchar *page_string;
+ GdkPixbuf *loading_icon = NULL;
+ gint width, height;
+
+ page_label = ev_document_get_page_label (priv->document, i);
+ page_string = g_markup_printf_escaped ("<i>%s</i>", page_label);
+ ev_thumbnails_size_cache_get_size (sidebar_thumbnails->priv->size_cache, i,
+ sidebar_thumbnails->priv->rotation,
+ &width, &height);
+ if (!loading_icon || (width != prev_width && height != prev_height)) {
+ loading_icon =
+ ev_sidebar_thumbnails_get_loading_icon (sidebar_thumbnails,
+ width, height);
+ }
+
+ prev_width = width;
+ prev_height = height;
+
+ gtk_list_store_append (priv->list_store, &iter);
+ gtk_list_store_set (priv->list_store, &iter,
+ COLUMN_PAGE_STRING, page_string,
+ COLUMN_PIXBUF, loading_icon,
+ COLUMN_THUMBNAIL_SET, FALSE,
+ -1);
+ g_free (page_label);
+ g_free (page_string);
+ }
+}
+
+static void
+ev_sidebar_tree_selection_changed (GtkTreeSelection *selection,
+ EvSidebarThumbnails *ev_sidebar_thumbnails)
+{
+ EvSidebarThumbnailsPrivate *priv = ev_sidebar_thumbnails->priv;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ int page;
+
+ if (!gtk_tree_selection_get_selected (selection, NULL, &iter))
+ return;
+
+ path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->list_store),
+ &iter);
+ page = gtk_tree_path_get_indices (path)[0];
+ gtk_tree_path_free (path);
+
+ ev_document_model_set_page (priv->model, page);
+}
+
+static void
+ev_sidebar_icon_selection_changed (GtkIconView *icon_view,
+ EvSidebarThumbnails *ev_sidebar_thumbnails)
+{
+ EvSidebarThumbnailsPrivate *priv = ev_sidebar_thumbnails->priv;
+ GtkTreePath *path;
+ GList *selected;
+ int page;
+
+ selected = gtk_icon_view_get_selected_items (icon_view);
+ if (selected == NULL)
+ return;
+
+ /* We don't handle or expect multiple selection. */
+ g_assert (selected->next == NULL);
+
+ path = selected->data;
+ page = gtk_tree_path_get_indices (path)[0];
+
+ gtk_tree_path_free (path);
+ g_list_free (selected);
+
+ ev_document_model_set_page (priv->model, page);
+}
+
+static void
+ev_sidebar_init_tree_view (EvSidebarThumbnails *ev_sidebar_thumbnails)
+{
+ EvSidebarThumbnailsPrivate *priv;
+ GtkTreeSelection *selection;
+ GtkCellRenderer *renderer;
+
+ priv = ev_sidebar_thumbnails->priv;
+ priv->tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (priv->list_store));
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree_view));
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (ev_sidebar_tree_selection_changed), ev_sidebar_thumbnails);
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->tree_view), FALSE);
+ renderer = g_object_new (GTK_TYPE_CELL_RENDERER_PIXBUF,
+ "xpad", 2,
+ "ypad", 2,
+ NULL);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->tree_view), -1,
+ NULL, renderer,
+ "pixbuf", 1,
+ NULL);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->tree_view), -1,
+ NULL, gtk_cell_renderer_text_new (),
+ "markup", 0, NULL);
+ gtk_container_add (GTK_CONTAINER (priv->swindow), priv->tree_view);
+ gtk_widget_show (priv->tree_view);
+}
+
+static void
+ev_sidebar_init_icon_view (EvSidebarThumbnails *ev_sidebar_thumbnails)
+{
+ EvSidebarThumbnailsPrivate *priv;
+
+ priv = ev_sidebar_thumbnails->priv;
+
+ priv->icon_view = gtk_icon_view_new_with_model (GTK_TREE_MODEL (priv->list_store));
+ gtk_icon_view_set_markup_column (GTK_ICON_VIEW (priv->icon_view), 0);
+ gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (priv->icon_view), 1);
+ g_signal_connect (priv->icon_view, "selection-changed",
+ G_CALLBACK (ev_sidebar_icon_selection_changed), ev_sidebar_thumbnails);
+
+ gtk_container_add (GTK_CONTAINER (priv->swindow), priv->icon_view);
+ gtk_widget_show (priv->icon_view);
+}
+
+static gboolean
+ev_sidebar_thumbnails_use_icon_view (EvSidebarThumbnails *sidebar_thumbnails)
+{
+ EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+
+ return (ev_document_get_n_pages (priv->document) <= MAX_ICON_VIEW_PAGE_COUNT);
+}
+
+static void
+ev_sidebar_thumbnails_init (EvSidebarThumbnails *ev_sidebar_thumbnails)
+{
+ EvSidebarThumbnailsPrivate *priv;
+
+ priv = ev_sidebar_thumbnails->priv = EV_SIDEBAR_THUMBNAILS_GET_PRIVATE (ev_sidebar_thumbnails);
+
+ priv->list_store = gtk_list_store_new (NUM_COLUMNS,
+ G_TYPE_STRING,
+ GDK_TYPE_PIXBUF,
+ G_TYPE_BOOLEAN,
+ EV_TYPE_JOB_THUMBNAIL);
+
+ priv->swindow = gtk_scrolled_window_new (NULL, NULL);
+
+ /* We actually don't want GTK_POLICY_AUTOMATIC for horizontal scrollbar here
+ * it's just a workaround for bug #449462
+ */
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->swindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (priv->swindow),
+ GTK_SHADOW_IN);
+ priv->vadjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (priv->swindow));
+ g_signal_connect_data (priv->vadjustment, "value-changed",
+ G_CALLBACK (adjustment_changed_cb),
+ ev_sidebar_thumbnails, NULL,
+ G_CONNECT_SWAPPED | G_CONNECT_AFTER);
+ g_signal_connect_swapped (priv->swindow, "size-allocate",
+ G_CALLBACK (adjustment_changed_cb),
+ ev_sidebar_thumbnails);
+ gtk_box_pack_start (GTK_BOX (ev_sidebar_thumbnails), priv->swindow, TRUE, TRUE, 0);
+
+ /* Put it all together */
+ gtk_widget_show_all (priv->swindow);
+}
+
+static void
+ev_sidebar_thumbnails_set_current_page (EvSidebarThumbnails *sidebar,
+ gint page)
+{
+ GtkTreeView *tree_view;
+ GtkTreePath *path;
+
+ path = gtk_tree_path_new_from_indices (page, -1);
+
+ if (sidebar->priv->tree_view) {
+ tree_view = GTK_TREE_VIEW (sidebar->priv->tree_view);
+ gtk_tree_view_set_cursor (tree_view, path, NULL, FALSE);
+ gtk_tree_view_scroll_to_cell (tree_view, path, NULL, FALSE, 0.0, 0.0);
+ } else if (sidebar->priv->icon_view) {
+
+ g_signal_handlers_block_by_func
+ (sidebar->priv->icon_view,
+ G_CALLBACK (ev_sidebar_icon_selection_changed), sidebar);
+
+ gtk_icon_view_select_path (GTK_ICON_VIEW (sidebar->priv->icon_view), path);
+
+ g_signal_handlers_unblock_by_func
+ (sidebar->priv->icon_view,
+ G_CALLBACK (ev_sidebar_icon_selection_changed), sidebar);
+
+ gtk_icon_view_set_cursor (GTK_ICON_VIEW (sidebar->priv->icon_view), path, NULL, FALSE);
+ }
+
+ gtk_tree_path_free (path);
+}
+
+static void
+page_changed_cb (EvSidebarThumbnails *sidebar,
+ gint old_page,
+ gint new_page)
+{
+ ev_sidebar_thumbnails_set_current_page (sidebar, new_page);
+}
+
+static gboolean
+refresh (EvSidebarThumbnails *sidebar_thumbnails)
+{
+ adjustment_changed_cb (sidebar_thumbnails);
+ return FALSE;
+}
+
+static void
+ev_sidebar_thumbnails_reload (EvSidebarThumbnails *sidebar_thumbnails)
+{
+ EvDocumentModel *model;
+
+ if (sidebar_thumbnails->priv->loading_icons)
+ g_hash_table_remove_all (sidebar_thumbnails->priv->loading_icons);
+
+ if (sidebar_thumbnails->priv->document == NULL ||
+ sidebar_thumbnails->priv->n_pages <= 0)
+ return;
+
+ model = sidebar_thumbnails->priv->model;
+
+ ev_sidebar_thumbnails_clear_model (sidebar_thumbnails);
+ ev_sidebar_thumbnails_fill_model (sidebar_thumbnails);
+
+ /* Trigger a redraw */
+ sidebar_thumbnails->priv->start_page = -1;
+ sidebar_thumbnails->priv->end_page = -1;
+ ev_sidebar_thumbnails_set_current_page (sidebar_thumbnails,
+ ev_document_model_get_page (model));
+ g_idle_add ((GSourceFunc)refresh, sidebar_thumbnails);
+}
+
+static void
+ev_sidebar_thumbnails_rotation_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvSidebarThumbnails *sidebar_thumbnails)
+{
+ gint rotation = ev_document_model_get_rotation (model);
+
+ sidebar_thumbnails->priv->rotation = rotation;
+ ev_sidebar_thumbnails_reload (sidebar_thumbnails);
+}
+
+static void
+ev_sidebar_thumbnails_inverted_colors_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvSidebarThumbnails *sidebar_thumbnails)
+{
+ gboolean inverted_colors = ev_document_model_get_inverted_colors (model);
+
+ sidebar_thumbnails->priv->inverted_colors = inverted_colors;
+ ev_sidebar_thumbnails_reload (sidebar_thumbnails);
+}
+
+static void
+thumbnail_job_completed_callback (EvJobThumbnail *job,
+ EvSidebarThumbnails *sidebar_thumbnails)
+{
+ EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+ GtkTreeIter *iter;
+
+ iter = (GtkTreeIter *) g_object_get_data (G_OBJECT (job), "tree_iter");
+ if (priv->inverted_colors)
+ ev_document_misc_invert_pixbuf (job->thumbnail);
+ gtk_list_store_set (priv->list_store,
+ iter,
+ COLUMN_PIXBUF, job->thumbnail,
+ COLUMN_THUMBNAIL_SET, TRUE,
+ COLUMN_JOB, NULL,
+ -1);
+}
+
+static void
+ev_sidebar_thumbnails_document_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvSidebarThumbnails *sidebar_thumbnails)
+{
+ EvDocument *document = ev_document_model_get_document (model);
+ EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+
+ if (!EV_IS_DOCUMENT_THUMBNAILS (document) ||
+ ev_document_get_n_pages (document) <= 0 ||
+ !ev_document_check_dimensions (document)) {
+ return;
+ }
+
+ priv->size_cache = ev_thumbnails_size_cache_get (document);
+ priv->document = document;
+ priv->n_pages = ev_document_get_n_pages (document);
+ priv->rotation = ev_document_model_get_rotation (model);
+ priv->inverted_colors = ev_document_model_get_inverted_colors (model);
+ priv->loading_icons = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ (GDestroyNotify)g_free,
+ (GDestroyNotify)g_object_unref);
+
+ ev_sidebar_thumbnails_clear_model (sidebar_thumbnails);
+ ev_sidebar_thumbnails_fill_model (sidebar_thumbnails);
+
+ /* Create the view widget, and remove the old one, if needed */
+ if (ev_sidebar_thumbnails_use_icon_view (sidebar_thumbnails)) {
+ if (priv->tree_view) {
+ gtk_container_remove (GTK_CONTAINER (priv->swindow), priv->tree_view);
+ priv->tree_view = NULL;
+ }
+
+ if (! priv->icon_view) {
+ ev_sidebar_init_icon_view (sidebar_thumbnails);
+ g_object_notify (G_OBJECT (sidebar_thumbnails), "main_widget");
+ } else {
+ gtk_widget_queue_resize (priv->icon_view);
+ }
+ } else {
+ if (priv->icon_view) {
+ gtk_container_remove (GTK_CONTAINER (priv->swindow), priv->icon_view);
+ priv->icon_view = NULL;
+ }
+
+ if (! priv->tree_view) {
+ ev_sidebar_init_tree_view (sidebar_thumbnails);
+ g_object_notify (G_OBJECT (sidebar_thumbnails), "main_widget");
+ }
+ }
+
+ /* Connect to the signal and trigger a fake callback */
+ g_signal_connect_swapped (priv->model, "page-changed",
+ G_CALLBACK (page_changed_cb),
+ sidebar_thumbnails);
+ g_signal_connect (priv->model, "notify::rotation",
+ G_CALLBACK (ev_sidebar_thumbnails_rotation_changed_cb),
+ sidebar_thumbnails);
+ g_signal_connect (priv->model, "notify::inverted-colors",
+ G_CALLBACK (ev_sidebar_thumbnails_inverted_colors_changed_cb),
+ sidebar_thumbnails);
+ sidebar_thumbnails->priv->start_page = -1;
+ sidebar_thumbnails->priv->end_page = -1;
+ ev_sidebar_thumbnails_set_current_page (sidebar_thumbnails,
+ ev_document_model_get_page (model));
+ adjustment_changed_cb (sidebar_thumbnails);
+}
+
+static void
+ev_sidebar_thumbnails_set_model (EvSidebarPage *sidebar_page,
+ EvDocumentModel *model)
+{
+ EvSidebarThumbnails *sidebar_thumbnails = EV_SIDEBAR_THUMBNAILS (sidebar_page);
+ EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+
+ if (priv->model == model)
+ return;
+
+ priv->model = model;
+ g_signal_connect (model, "notify::document",
+ G_CALLBACK (ev_sidebar_thumbnails_document_changed_cb),
+ sidebar_page);
+}
+
+static gboolean
+ev_sidebar_thumbnails_clear_job (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ EvJob *job;
+
+ gtk_tree_model_get (model, iter, COLUMN_JOB, &job, -1);
+
+ if (job != NULL) {
+ ev_job_cancel (job);
+ g_signal_handlers_disconnect_by_func (job, thumbnail_job_completed_callback, data);
+ g_object_unref (job);
+ }
+
+ return FALSE;
+}
+
+static void
+ev_sidebar_thumbnails_clear_model (EvSidebarThumbnails *sidebar_thumbnails)
+{
+ EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+
+ gtk_tree_model_foreach (GTK_TREE_MODEL (priv->list_store), ev_sidebar_thumbnails_clear_job, sidebar_thumbnails);
+ gtk_list_store_clear (priv->list_store);
+}
+
+static gboolean
+ev_sidebar_thumbnails_support_document (EvSidebarPage *sidebar_page,
+ EvDocument *document)
+{
+ return (EV_IS_DOCUMENT_THUMBNAILS (document));
+}
+
+static const gchar*
+ev_sidebar_thumbnails_get_label (EvSidebarPage *sidebar_page)
+{
+ return _("Thumbnails");
+}
+
+static void
+ev_sidebar_thumbnails_page_iface_init (EvSidebarPageInterface *iface)
+{
+ iface->support_document = ev_sidebar_thumbnails_support_document;
+ iface->set_model = ev_sidebar_thumbnails_set_model;
+ iface->get_label = ev_sidebar_thumbnails_get_label;
+}
diff --git a/shell/ev-sidebar-thumbnails.h b/shell/ev-sidebar-thumbnails.h
new file mode 100644
index 00000000..0e312469
--- /dev/null
+++ b/shell/ev-sidebar-thumbnails.h
@@ -0,0 +1,59 @@
+/* ev-sidebar-thumbnails.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * Author:
+ * Jonathan Blandford <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 __EV_SIDEBAR_THUMBNAILS_H__
+#define __EV_SIDEBAR_THUMBNAILS_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EvSidebarThumbnails EvSidebarThumbnails;
+typedef struct _EvSidebarThumbnailsClass EvSidebarThumbnailsClass;
+typedef struct _EvSidebarThumbnailsPrivate EvSidebarThumbnailsPrivate;
+
+#define EV_TYPE_SIDEBAR_THUMBNAILS (ev_sidebar_thumbnails_get_type())
+#define EV_SIDEBAR_THUMBNAILS(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_SIDEBAR_THUMBNAILS, EvSidebarThumbnails))
+#define EV_SIDEBAR_THUMBNAILS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_SIDEBAR_THUMBNAILS, EvSidebarThumbnailsClass))
+#define EV_IS_SIDEBAR_THUMBNAILS(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_SIDEBAR_THUMBNAILS))
+#define EV_IS_SIDEBAR_THUMBNAILS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_SIDEBAR_THUMBNAILS))
+#define EV_SIDEBAR_THUMBNAILS_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_SIDEBAR_THUMBNAILS, EvSidebarThumbnailsClass))
+
+struct _EvSidebarThumbnails {
+ GtkVBox base_instance;
+
+ EvSidebarThumbnailsPrivate *priv;
+};
+
+struct _EvSidebarThumbnailsClass {
+ GtkVBoxClass base_class;
+};
+
+GType ev_sidebar_thumbnails_get_type (void) G_GNUC_CONST;
+GtkWidget *ev_sidebar_thumbnails_new (void);
+
+G_END_DECLS
+
+#endif /* __EV_SIDEBAR_THUMBNAILS_H__ */
+
+
diff --git a/shell/ev-sidebar.c b/shell/ev-sidebar.c
new file mode 100644
index 00000000..cf7b5f84
--- /dev/null
+++ b/shell/ev-sidebar.c
@@ -0,0 +1,543 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * Author:
+ * Jonathan Blandford <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+#include "ev-sidebar.h"
+#include "ev-sidebar-page.h"
+
+enum
+{
+ PROP_0,
+ PROP_CURRENT_PAGE
+};
+
+enum
+{
+ PAGE_COLUMN_TITLE,
+ PAGE_COLUMN_MENU_ITEM,
+ PAGE_COLUMN_MAIN_WIDGET,
+ PAGE_COLUMN_NOTEBOOK_INDEX,
+ PAGE_COLUMN_NUM_COLS
+};
+
+struct _EvSidebarPrivate {
+ GtkWidget *notebook;
+ GtkWidget *select_button;
+ GtkWidget *menu;
+ GtkWidget *hbox;
+ GtkWidget *label;
+
+ EvDocumentModel *model;
+ GtkTreeModel *page_model;
+};
+
+G_DEFINE_TYPE (EvSidebar, ev_sidebar, GTK_TYPE_VBOX)
+
+#define EV_SIDEBAR_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_SIDEBAR, EvSidebarPrivate))
+
+static void
+ev_sidebar_destroy (GtkObject *object)
+{
+ EvSidebar *ev_sidebar = EV_SIDEBAR (object);
+
+ if (ev_sidebar->priv->menu) {
+ gtk_menu_detach (GTK_MENU (ev_sidebar->priv->menu));
+ ev_sidebar->priv->menu = NULL;
+ }
+
+ if (ev_sidebar->priv->page_model) {
+ g_object_unref (ev_sidebar->priv->page_model);
+ ev_sidebar->priv->page_model = NULL;
+ }
+
+
+ (* GTK_OBJECT_CLASS (ev_sidebar_parent_class)->destroy) (object);
+}
+
+static void
+ev_sidebar_select_page (EvSidebar *ev_sidebar, GtkTreeIter *iter)
+{
+ char *title;
+ int index;
+
+ gtk_tree_model_get (ev_sidebar->priv->page_model, iter,
+ PAGE_COLUMN_TITLE, &title,
+ PAGE_COLUMN_NOTEBOOK_INDEX, &index,
+ -1);
+
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (ev_sidebar->priv->notebook), index);
+ gtk_label_set_text (GTK_LABEL (ev_sidebar->priv->label), title);
+
+ g_free (title);
+}
+
+void
+ev_sidebar_set_page (EvSidebar *ev_sidebar,
+ GtkWidget *main_widget)
+{
+ GtkTreeIter iter;
+ gboolean valid;
+
+ valid = gtk_tree_model_get_iter_first (ev_sidebar->priv->page_model, &iter);
+
+ while (valid) {
+ GtkWidget *widget;
+
+ gtk_tree_model_get (ev_sidebar->priv->page_model, &iter,
+ PAGE_COLUMN_MAIN_WIDGET, &widget,
+ -1);
+
+ if (widget == main_widget) {
+ ev_sidebar_select_page (ev_sidebar, &iter);
+ valid = FALSE;
+ } else {
+ valid = gtk_tree_model_iter_next (ev_sidebar->priv->page_model, &iter);
+ }
+ g_object_unref (widget);
+ }
+
+ g_object_notify (G_OBJECT (ev_sidebar), "current-page");
+}
+
+static void
+ev_sidebar_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvSidebar *sidebar = EV_SIDEBAR (object);
+
+ switch (prop_id)
+ {
+ case PROP_CURRENT_PAGE:
+ ev_sidebar_set_page (sidebar, g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static GtkWidget *
+ev_sidebar_get_current_page (EvSidebar *sidebar)
+{
+ GtkNotebook *notebook = GTK_NOTEBOOK (sidebar->priv->notebook);
+
+ return gtk_notebook_get_nth_page
+ (notebook, gtk_notebook_get_current_page (notebook));
+}
+
+static void
+ev_sidebar_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvSidebar *sidebar = EV_SIDEBAR (object);
+
+ switch (prop_id)
+ {
+ case PROP_CURRENT_PAGE:
+ g_value_set_object (value, ev_sidebar_get_current_page (sidebar));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ev_sidebar_class_init (EvSidebarClass *ev_sidebar_class)
+{
+ GObjectClass *g_object_class;
+ GtkWidgetClass *widget_class;
+ GtkObjectClass *gtk_object_klass;
+
+ g_object_class = G_OBJECT_CLASS (ev_sidebar_class);
+ widget_class = GTK_WIDGET_CLASS (ev_sidebar_class);
+ gtk_object_klass = GTK_OBJECT_CLASS (ev_sidebar_class);
+
+ g_type_class_add_private (g_object_class, sizeof (EvSidebarPrivate));
+
+ gtk_object_klass->destroy = ev_sidebar_destroy;
+ g_object_class->get_property = ev_sidebar_get_property;
+ g_object_class->set_property = ev_sidebar_set_property;
+
+ g_object_class_install_property (g_object_class,
+ PROP_CURRENT_PAGE,
+ g_param_spec_object ("current-page",
+ "Current page",
+ "The currently visible page",
+ GTK_TYPE_WIDGET,
+ G_PARAM_READWRITE));
+}
+
+static void
+ev_sidebar_menu_position_under (GtkMenu *menu,
+ int *x,
+ int *y,
+ gboolean *push_in,
+ gpointer user_data)
+{
+ GtkWidget *widget;
+ GtkAllocation allocation;
+
+ g_return_if_fail (GTK_IS_BUTTON (user_data));
+ g_return_if_fail (!gtk_widget_get_has_window (GTK_WIDGET (user_data)));
+
+ widget = GTK_WIDGET (user_data);
+
+ gdk_window_get_origin (gtk_widget_get_window (widget), x, y);
+ gtk_widget_get_allocation (widget, &allocation);
+
+ *x += allocation.x;
+ *y += allocation.y + allocation.height;
+
+ *push_in = FALSE;
+}
+
+static gboolean
+ev_sidebar_select_button_press_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ gpointer user_data)
+{
+ EvSidebar *ev_sidebar = EV_SIDEBAR (user_data);
+
+ if (event->button == 1) {
+ GtkRequisition requisition;
+ GtkAllocation allocation;
+ gint width;
+
+ gtk_widget_get_allocation (widget, &allocation);
+ width = allocation.width;
+ gtk_widget_set_size_request (ev_sidebar->priv->menu, -1, -1);
+ gtk_widget_size_request (ev_sidebar->priv->menu, &requisition);
+ gtk_widget_set_size_request (ev_sidebar->priv->menu,
+ MAX (width, requisition.width), -1);
+
+ gtk_widget_grab_focus (widget);
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
+ gtk_menu_popup (GTK_MENU (ev_sidebar->priv->menu),
+ NULL, NULL, ev_sidebar_menu_position_under, widget,
+ event->button, event->time);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+ev_sidebar_select_button_key_press_cb (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer user_data)
+{
+ EvSidebar *ev_sidebar = EV_SIDEBAR (user_data);
+
+ if (event->keyval == GDK_space ||
+ event->keyval == GDK_KP_Space ||
+ event->keyval == GDK_Return ||
+ event->keyval == GDK_KP_Enter) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
+ gtk_menu_popup (GTK_MENU (ev_sidebar->priv->menu),
+ NULL, NULL, ev_sidebar_menu_position_under, widget,
+ 1, event->time);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+ev_sidebar_close_clicked_cb (GtkWidget *widget,
+ gpointer user_data)
+{
+ EvSidebar *ev_sidebar = EV_SIDEBAR (user_data);
+
+ gtk_widget_hide (GTK_WIDGET (ev_sidebar));
+}
+
+static void
+ev_sidebar_menu_deactivate_cb (GtkWidget *widget,
+ gpointer user_data)
+{
+ GtkWidget *menu_button;
+
+ menu_button = GTK_WIDGET (user_data);
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (menu_button), FALSE);
+}
+
+static void
+ev_sidebar_menu_detach_cb (GtkWidget *widget,
+ GtkMenu *menu)
+{
+ EvSidebar *ev_sidebar = EV_SIDEBAR (widget);
+
+ ev_sidebar->priv->menu = NULL;
+}
+
+static void
+ev_sidebar_menu_item_activate_cb (GtkWidget *widget,
+ gpointer user_data)
+{
+ EvSidebar *ev_sidebar = EV_SIDEBAR (user_data);
+ GtkTreeIter iter;
+ GtkWidget *menu_item, *item;
+ gboolean valid;
+
+ menu_item = gtk_menu_get_active (GTK_MENU (ev_sidebar->priv->menu));
+ valid = gtk_tree_model_get_iter_first (ev_sidebar->priv->page_model, &iter);
+
+ while (valid) {
+ gtk_tree_model_get (ev_sidebar->priv->page_model, &iter,
+ PAGE_COLUMN_MENU_ITEM, &item,
+ -1);
+
+ if (item == menu_item) {
+ ev_sidebar_select_page (ev_sidebar, &iter);
+ valid = FALSE;
+ } else {
+ valid = gtk_tree_model_iter_next (ev_sidebar->priv->page_model, &iter);
+ }
+ g_object_unref (item);
+ }
+
+ g_object_notify (G_OBJECT (ev_sidebar), "current-page");
+}
+
+static void
+ev_sidebar_init (EvSidebar *ev_sidebar)
+{
+ GtkWidget *hbox;
+ GtkWidget *close_button;
+ GtkWidget *select_hbox;
+ GtkWidget *arrow;
+ GtkWidget *image;
+
+ ev_sidebar->priv = EV_SIDEBAR_GET_PRIVATE (ev_sidebar);
+
+ /* data model */
+ ev_sidebar->priv->page_model = (GtkTreeModel *)
+ gtk_list_store_new (PAGE_COLUMN_NUM_COLS,
+ G_TYPE_STRING,
+ GTK_TYPE_WIDGET,
+ GTK_TYPE_WIDGET,
+ G_TYPE_INT);
+
+ /* top option menu */
+ hbox = gtk_hbox_new (FALSE, 0);
+ ev_sidebar->priv->hbox = hbox;
+ gtk_box_pack_start (GTK_BOX (ev_sidebar), hbox, FALSE, FALSE, 0);
+ gtk_widget_show (hbox);
+
+ ev_sidebar->priv->select_button = gtk_toggle_button_new ();
+ gtk_button_set_relief (GTK_BUTTON (ev_sidebar->priv->select_button), GTK_RELIEF_NONE);
+ g_signal_connect (ev_sidebar->priv->select_button, "button_press_event",
+ G_CALLBACK (ev_sidebar_select_button_press_cb),
+ ev_sidebar);
+ g_signal_connect (ev_sidebar->priv->select_button, "key_press_event",
+ G_CALLBACK (ev_sidebar_select_button_key_press_cb),
+ ev_sidebar);
+
+ select_hbox = gtk_hbox_new (FALSE, 0);
+
+ ev_sidebar->priv->label = gtk_label_new ("");
+ gtk_box_pack_start (GTK_BOX (select_hbox),
+ ev_sidebar->priv->label,
+ FALSE, FALSE, 0);
+ gtk_widget_show (ev_sidebar->priv->label);
+
+ arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
+ gtk_box_pack_end (GTK_BOX (select_hbox), arrow, FALSE, FALSE, 0);
+ gtk_widget_show (arrow);
+
+ gtk_container_add (GTK_CONTAINER (ev_sidebar->priv->select_button), select_hbox);
+ gtk_widget_show (select_hbox);
+
+ gtk_box_pack_start (GTK_BOX (hbox), ev_sidebar->priv->select_button, TRUE, TRUE, 0);
+ gtk_widget_show (ev_sidebar->priv->select_button);
+
+ close_button = gtk_button_new ();
+ gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE);
+ g_signal_connect (close_button, "clicked",
+ G_CALLBACK (ev_sidebar_close_clicked_cb),
+ ev_sidebar);
+
+ image = gtk_image_new_from_stock (GTK_STOCK_CLOSE,
+ GTK_ICON_SIZE_MENU);
+ gtk_container_add (GTK_CONTAINER (close_button), image);
+ gtk_widget_show (image);
+
+ gtk_box_pack_end (GTK_BOX (hbox), close_button, FALSE, FALSE, 0);
+ gtk_widget_show (close_button);
+
+ ev_sidebar->priv->menu = gtk_menu_new ();
+ g_signal_connect (ev_sidebar->priv->menu, "deactivate",
+ G_CALLBACK (ev_sidebar_menu_deactivate_cb),
+ ev_sidebar->priv->select_button);
+ gtk_menu_attach_to_widget (GTK_MENU (ev_sidebar->priv->menu),
+ GTK_WIDGET (ev_sidebar),
+ ev_sidebar_menu_detach_cb);
+ gtk_widget_show (ev_sidebar->priv->menu);
+
+ ev_sidebar->priv->notebook = gtk_notebook_new ();
+ gtk_notebook_set_show_border (GTK_NOTEBOOK (ev_sidebar->priv->notebook), FALSE);
+ gtk_notebook_set_show_tabs (GTK_NOTEBOOK (ev_sidebar->priv->notebook), FALSE);
+ gtk_box_pack_start (GTK_BOX (ev_sidebar), ev_sidebar->priv->notebook,
+ TRUE, TRUE, 0);
+ gtk_widget_show (ev_sidebar->priv->notebook);
+
+ gtk_widget_set_sensitive (GTK_WIDGET (ev_sidebar->priv->notebook), FALSE);
+ gtk_widget_set_sensitive (GTK_WIDGET (ev_sidebar->priv->select_button), FALSE);
+}
+
+/* Public functions */
+
+GtkWidget *
+ev_sidebar_new (void)
+{
+ GtkWidget *ev_sidebar;
+
+ ev_sidebar = g_object_new (EV_TYPE_SIDEBAR, NULL);
+
+ return ev_sidebar;
+}
+
+void
+ev_sidebar_add_page (EvSidebar *ev_sidebar,
+ GtkWidget *main_widget)
+{
+ GtkTreeIter iter;
+ GtkWidget *menu_item;
+ gchar *label_title;
+ const gchar *title;
+ int index;
+
+ g_return_if_fail (EV_IS_SIDEBAR (ev_sidebar));
+ g_return_if_fail (EV_IS_SIDEBAR_PAGE (main_widget));
+ g_return_if_fail (GTK_IS_WIDGET (main_widget));
+
+ ev_sidebar_page_set_model (EV_SIDEBAR_PAGE (main_widget),
+ ev_sidebar->priv->model);
+ title = ev_sidebar_page_get_label (EV_SIDEBAR_PAGE (main_widget));
+
+ index = gtk_notebook_append_page (GTK_NOTEBOOK (ev_sidebar->priv->notebook),
+ main_widget, NULL);
+
+ menu_item = gtk_image_menu_item_new_with_label (title);
+ g_signal_connect (menu_item, "activate",
+ G_CALLBACK (ev_sidebar_menu_item_activate_cb),
+ ev_sidebar);
+ gtk_widget_show (menu_item);
+ gtk_menu_shell_append (GTK_MENU_SHELL (ev_sidebar->priv->menu),
+ menu_item);
+
+ /* Insert and move to end */
+ gtk_list_store_insert_with_values (GTK_LIST_STORE (ev_sidebar->priv->page_model),
+ &iter, 0,
+ PAGE_COLUMN_TITLE, title,
+ PAGE_COLUMN_MENU_ITEM, menu_item,
+ PAGE_COLUMN_MAIN_WIDGET, main_widget,
+ PAGE_COLUMN_NOTEBOOK_INDEX, index,
+ -1);
+ gtk_list_store_move_before(GTK_LIST_STORE(ev_sidebar->priv->page_model),
+ &iter, NULL);
+
+
+ /* Set the first item added as active */
+ gtk_tree_model_get_iter_first (ev_sidebar->priv->page_model, &iter);
+ gtk_tree_model_get (ev_sidebar->priv->page_model,
+ &iter,
+ PAGE_COLUMN_TITLE, &label_title,
+ PAGE_COLUMN_NOTEBOOK_INDEX, &index,
+ -1);
+
+ gtk_menu_set_active (GTK_MENU (ev_sidebar->priv->menu), index);
+ gtk_label_set_text (GTK_LABEL (ev_sidebar->priv->label), label_title);
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (ev_sidebar->priv->notebook),
+ index);
+ g_free (label_title);
+}
+
+static void
+ev_sidebar_document_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvSidebar *sidebar)
+{
+ EvSidebarPrivate *priv = sidebar->priv;
+ EvDocument *document = ev_document_model_get_document (model);
+ GtkTreeIter iter;
+ gboolean valid;
+ gboolean has_pages = FALSE;
+
+ for (valid = gtk_tree_model_get_iter_first (priv->page_model, &iter);
+ valid;
+ valid = gtk_tree_model_iter_next (priv->page_model, &iter)) {
+ GtkWidget *widget;
+ GtkWidget *menu_widget;
+
+ gtk_tree_model_get (priv->page_model, &iter,
+ PAGE_COLUMN_MAIN_WIDGET, &widget,
+ PAGE_COLUMN_MENU_ITEM, &menu_widget,
+ -1);
+
+ if (ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (widget), document)) {
+ has_pages = TRUE;
+ } else {
+ gtk_widget_set_sensitive (menu_widget, FALSE);
+ }
+ g_object_unref (widget);
+ g_object_unref (menu_widget);
+ }
+
+ if (!has_pages) {
+ gtk_widget_hide (GTK_WIDGET (sidebar));
+ } else {
+ gtk_widget_set_sensitive (GTK_WIDGET (sidebar->priv->notebook), TRUE);
+ gtk_widget_set_sensitive (GTK_WIDGET (sidebar->priv->select_button), TRUE);
+ }
+}
+
+void
+ev_sidebar_set_model (EvSidebar *sidebar,
+ EvDocumentModel *model)
+{
+ g_return_if_fail (EV_IS_SIDEBAR (sidebar));
+ g_return_if_fail (EV_IS_DOCUMENT_MODEL (model));
+
+ if (model == sidebar->priv->model)
+ return;
+
+ sidebar->priv->model = model;
+ g_signal_connect (model, "notify::document",
+ G_CALLBACK (ev_sidebar_document_changed_cb),
+ sidebar);
+}
diff --git a/shell/ev-sidebar.h b/shell/ev-sidebar.h
new file mode 100644
index 00000000..68440221
--- /dev/null
+++ b/shell/ev-sidebar.h
@@ -0,0 +1,67 @@
+/* ev-sidebar.h
+ * this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Red Hat, Inc.
+ *
+ * Author:
+ * Jonathan Blandford <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 __EV_SIDEBAR_H__
+#define __EV_SIDEBAR_H__
+
+#include <gtk/gtk.h>
+
+#include "ev-document-model.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvSidebar EvSidebar;
+typedef struct _EvSidebarClass EvSidebarClass;
+typedef struct _EvSidebarPrivate EvSidebarPrivate;
+
+#define EV_TYPE_SIDEBAR (ev_sidebar_get_type())
+#define EV_SIDEBAR(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_SIDEBAR, EvSidebar))
+#define EV_SIDEBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_SIDEBAR, EvSidebarClass))
+#define EV_IS_SIDEBAR(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_SIDEBAR))
+#define EV_IS_SIDEBAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_SIDEBAR))
+#define EV_SIDEBAR_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_SIDEBAR, EvSidebarClass))
+
+struct _EvSidebar {
+ GtkVBox base_instance;
+
+ EvSidebarPrivate *priv;
+};
+
+struct _EvSidebarClass {
+ GtkVBoxClass base_class;
+};
+
+GType ev_sidebar_get_type (void) G_GNUC_CONST;
+GtkWidget *ev_sidebar_new (void);
+void ev_sidebar_add_page (EvSidebar *ev_sidebar,
+ GtkWidget *main_widget);
+void ev_sidebar_set_page (EvSidebar *ev_sidebar,
+ GtkWidget *main_widget);
+void ev_sidebar_set_model (EvSidebar *sidebar,
+ EvDocumentModel *model);
+
+G_END_DECLS
+
+#endif /* __EV_SIDEBAR_H__ */
+
+
diff --git a/shell/ev-utils.c b/shell/ev-utils.c
new file mode 100644
index 00000000..83cfcdbc
--- /dev/null
+++ b/shell/ev-utils.c
@@ -0,0 +1,389 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2004 Anders Carlsson <[email protected]>
+ *
+ * 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, 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 <config.h>
+
+#include "ev-utils.h"
+#include "ev-file-helpers.h"
+
+#include <string.h>
+#include <math.h>
+#include <glib/gi18n.h>
+
+typedef struct
+{
+ int size;
+ double *data;
+} ConvFilter;
+
+static double
+gaussian (double x, double y, double r)
+{
+ return ((1 / (2 * M_PI * r)) *
+ exp ((- (x * x + y * y)) / (2 * r * r)));
+}
+
+static ConvFilter *
+create_blur_filter (int radius)
+{
+ ConvFilter *filter;
+ int x, y;
+ double sum;
+
+ filter = g_new0 (ConvFilter, 1);
+ filter->size = radius * 2 + 1;
+ filter->data = g_new (double, filter->size * filter->size);
+
+ sum = 0.0;
+
+ for (y = 0 ; y < filter->size; y++)
+ {
+ for (x = 0 ; x < filter->size; x++)
+ {
+ sum += filter->data[y * filter->size + x] = gaussian (x - (filter->size >> 1),
+ y - (filter->size >> 1),
+ radius);
+ }
+ }
+
+ for (y = 0; y < filter->size; y++)
+ {
+ for (x = 0; x < filter->size; x++)
+ {
+ filter->data[y * filter->size + x] /= sum;
+ }
+ }
+
+ return filter;
+
+}
+
+static GdkPixbuf *
+create_shadow (GdkPixbuf *src, int blur_radius,
+ int x_offset, int y_offset, double opacity)
+{
+ int x, y, i, j;
+ int width, height;
+ GdkPixbuf *dest;
+ static ConvFilter *filter = NULL;
+ int src_rowstride, dest_rowstride;
+ int src_bpp, dest_bpp;
+
+ guchar *src_pixels, *dest_pixels;
+
+ if (!filter)
+ filter = create_blur_filter (blur_radius);
+
+ if (x_offset < 0)
+ x_offset = (blur_radius * 4) / 5;
+
+ if (y_offset < 0)
+ y_offset = (blur_radius * 4) / 5;
+
+
+ width = gdk_pixbuf_get_width (src) + blur_radius * 2 + x_offset;
+ height = gdk_pixbuf_get_height (src) + blur_radius * 2 + y_offset;
+
+ dest = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (src), TRUE,
+ gdk_pixbuf_get_bits_per_sample (src),
+ width, height);
+ gdk_pixbuf_fill (dest, 0);
+ src_pixels = gdk_pixbuf_get_pixels (src);
+ src_rowstride = gdk_pixbuf_get_rowstride (src);
+ src_bpp = gdk_pixbuf_get_has_alpha (src) ? 4 : 3;
+
+ dest_pixels = gdk_pixbuf_get_pixels (dest);
+ dest_rowstride = gdk_pixbuf_get_rowstride (dest);
+ dest_bpp = gdk_pixbuf_get_has_alpha (dest) ? 4 : 3;
+
+ for (y = 0; y < height; y++)
+ {
+ for (x = 0; x < width; x++)
+ {
+ int sumr = 0, sumg = 0, sumb = 0, suma = 0;
+
+ for (i = 0; i < filter->size; i++)
+ {
+ for (j = 0; j < filter->size; j++)
+ {
+ int src_x, src_y;
+
+ src_y = -(blur_radius + x_offset) + y - (filter->size >> 1) + i;
+ src_x = -(blur_radius + y_offset) + x - (filter->size >> 1) + j;
+
+ if (src_y < 0 || src_y > gdk_pixbuf_get_height (src) ||
+ src_x < 0 || src_x > gdk_pixbuf_get_width (src))
+ continue;
+
+ sumr += src_pixels [src_y * src_rowstride +
+ src_x * src_bpp + 0] *
+ filter->data [i * filter->size + j];
+ sumg += src_pixels [src_y * src_rowstride +
+ src_x * src_bpp + 1] *
+ filter->data [i * filter->size + j];
+
+ sumb += src_pixels [src_y * src_rowstride +
+ src_x * src_bpp + 2] *
+ filter->data [i * filter->size + j];
+
+ if (src_bpp == 4)
+ suma += src_pixels [src_y * src_rowstride +
+ src_x * src_bpp + 3] *
+ filter->data [i * filter->size + j];
+ else
+ suma += 0xff;
+
+ }
+ }
+
+ if (dest_bpp == 4)
+ dest_pixels [y * dest_rowstride +
+ x * dest_bpp + 3] = (suma * opacity) / (filter->size * filter->size);
+
+ }
+ }
+
+ return dest;
+}
+
+GdkPixbuf *
+ev_pixbuf_add_shadow (GdkPixbuf *src, int size,
+ int x_offset, int y_offset, double opacity)
+{
+ GdkPixbuf *dest;
+
+ dest = create_shadow (src, size, x_offset, y_offset, opacity);
+
+ gdk_pixbuf_composite (src, dest,
+ size, size,
+ gdk_pixbuf_get_width (src),
+ gdk_pixbuf_get_height (src),
+ size, size,
+ 1.0, 1.0,
+ GDK_INTERP_NEAREST, 255);
+
+ return dest;
+}
+
+
+/* Simple function to output the contents of a region. Used solely for testing
+ * the region code.
+ */
+void
+ev_print_region_contents (cairo_region_t *region)
+{
+ gint n_rectangles, i;
+
+ if (region == NULL) {
+ g_print ("<empty region>\n");
+ return;
+ }
+
+ g_print ("<region %p>\n", region);
+ n_rectangles = cairo_region_num_rectangles (region);
+ for (i = 0; i < n_rectangles; i++) {
+ GdkRectangle rect;
+
+ cairo_region_get_rectangle (region, i, &rect);
+ g_print ("\t(%d %d, %d %d) [%dx%d]\n",
+ rect.x,
+ rect.y,
+ rect.x + rect.width,
+ rect.y + rect.height,
+ rect.width,
+ rect.height);
+ }
+}
+
+static void
+ev_gui_sanitise_popup_position (GtkMenu *menu,
+ GtkWidget *widget,
+ gint *x,
+ gint *y)
+{
+ GdkScreen *screen = gtk_widget_get_screen (widget);
+ gint monitor_num;
+ GdkRectangle monitor;
+ GtkRequisition req;
+
+ g_return_if_fail (widget != NULL);
+
+ gtk_widget_size_request (GTK_WIDGET (menu), &req);
+
+ monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
+ gtk_menu_set_monitor (menu, monitor_num);
+ gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
+
+ *x = CLAMP (*x, monitor.x, monitor.x + MAX (0, monitor.width - req.width));
+ *y = CLAMP (*y, monitor.y, monitor.y + MAX (0, monitor.height - req.height));
+}
+
+void
+ev_gui_menu_position_tree_selection (GtkMenu *menu,
+ gint *x,
+ gint *y,
+ gboolean *push_in,
+ gpointer user_data)
+{
+ GtkTreeSelection *selection;
+ GList *selected_rows;
+ GtkTreeModel *model;
+ GtkTreeView *tree_view = GTK_TREE_VIEW (user_data);
+ GtkWidget *widget = GTK_WIDGET (user_data);
+ GtkRequisition req;
+ GtkAllocation allocation;
+ GdkRectangle visible;
+
+ gtk_widget_size_request (GTK_WIDGET (menu), &req);
+ gdk_window_get_origin (gtk_widget_get_window (widget), x, y);
+ gtk_widget_get_allocation (widget, &allocation);
+
+ *x += (allocation.width - req.width) / 2;
+
+ /* Add on height for the treeview title */
+ gtk_tree_view_get_visible_rect (tree_view, &visible);
+ *y += allocation.height - visible.height;
+
+ selection = gtk_tree_view_get_selection (tree_view);
+ selected_rows = gtk_tree_selection_get_selected_rows (selection, &model);
+ if (selected_rows)
+ {
+ GdkRectangle cell_rect;
+
+ gtk_tree_view_get_cell_area (tree_view, selected_rows->data,
+ NULL, &cell_rect);
+
+ *y += CLAMP (cell_rect.y + cell_rect.height, 0, visible.height);
+
+ g_list_foreach (selected_rows, (GFunc)gtk_tree_path_free, NULL);
+ g_list_free (selected_rows);
+ }
+
+ ev_gui_sanitise_popup_position (menu, widget, x, y);
+}
+
+/**
+ * get_num_monitors: Get the number of user monitors.
+ * @window: optional GtkWindow to look at.
+ *
+ * Returns: Number of monitors, -1 if uncertain situation (like multiple screens)
+ */
+gint
+get_num_monitors (GtkWindow *window)
+{
+ GdkDisplay *display;
+ GdkScreen *screen;
+ gint num_screen;
+
+ display = gdk_display_get_default ();
+ num_screen = gdk_display_get_n_screens (display);
+
+ if (num_screen != 1)
+ return -1;
+
+ if (window)
+ screen = gtk_window_get_screen (window);
+ else
+ screen = gdk_display_get_screen (display, 0);
+
+ return gdk_screen_get_n_monitors (screen);
+}
+
+void
+file_chooser_dialog_add_writable_pixbuf_formats (GtkFileChooser *chooser)
+{
+ GSList *pixbuf_formats = NULL;
+ GSList *iter;
+ GtkFileFilter *filter;
+ int i;
+
+ filter = gtk_file_filter_new();
+ gtk_file_filter_set_name (filter, _("By extension"));
+ g_object_set_data (G_OBJECT(filter), "pixbuf-format", NULL);
+ gtk_file_chooser_add_filter (chooser, filter);
+
+ pixbuf_formats = gdk_pixbuf_get_formats ();
+
+ for (iter = pixbuf_formats; iter; iter = iter->next) {
+ GdkPixbufFormat *format = iter->data;
+
+ gchar *description, *name, *extensions;
+ gchar **extension_list, **mime_types;
+
+ if (gdk_pixbuf_format_is_disabled (format) ||
+ !gdk_pixbuf_format_is_writable (format))
+ continue;
+
+ name = gdk_pixbuf_format_get_description (format);
+ extension_list = gdk_pixbuf_format_get_extensions (format);
+ extensions = g_strjoinv (", ", extension_list);
+ g_strfreev (extension_list);
+ description = g_strdup_printf ("%s (%s)", name, extensions);
+
+ filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, description);
+ g_object_set_data (G_OBJECT (filter), "pixbuf-format", format);
+ gtk_file_chooser_add_filter (chooser, filter);
+
+ g_free (description);
+ g_free (extensions);
+ g_free (name);
+
+ mime_types = gdk_pixbuf_format_get_mime_types (format);
+ for (i = 0; mime_types[i] != 0; i++)
+ gtk_file_filter_add_mime_type (filter, mime_types[i]);
+ g_strfreev (mime_types);
+ }
+
+ g_slist_free (pixbuf_formats);
+}
+
+GdkPixbufFormat*
+get_gdk_pixbuf_format_by_extension (gchar *uri)
+{
+ GSList *pixbuf_formats = NULL;
+ GSList *iter;
+ int i;
+
+ pixbuf_formats = gdk_pixbuf_get_formats ();
+
+ for (iter = pixbuf_formats; iter; iter = iter->next) {
+ gchar **extension_list;
+ GdkPixbufFormat *format = iter->data;
+
+ if (gdk_pixbuf_format_is_disabled (format) ||
+ !gdk_pixbuf_format_is_writable (format))
+ continue;
+
+ extension_list = gdk_pixbuf_format_get_extensions (format);
+
+ for (i = 0; extension_list[i] != 0; i++) {
+ if (g_str_has_suffix (uri, extension_list[i])) {
+ g_slist_free (pixbuf_formats);
+ g_strfreev (extension_list);
+ return format;
+ }
+ }
+ g_strfreev (extension_list);
+ }
+
+ g_slist_free (pixbuf_formats);
+ return NULL;
+}
diff --git a/shell/ev-utils.h b/shell/ev-utils.h
new file mode 100644
index 00000000..81acc463
--- /dev/null
+++ b/shell/ev-utils.h
@@ -0,0 +1,47 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/*
+ * Copyright (C) 2004 Anders Carlsson <[email protected]>
+ *
+ * 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, 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 __EV_UTILS_H__
+#define __EV_UTILS_H__
+
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+GdkPixbuf* ev_pixbuf_add_shadow (GdkPixbuf *src, int size,
+ int x_offset, int y_offset, double opacity);
+
+void ev_print_region_contents (cairo_region_t *region);
+
+void ev_gui_menu_position_tree_selection (GtkMenu *menu,
+ gint *x,
+ gint *y,
+ gboolean *push_in,
+ gpointer user_data);
+
+gint get_num_monitors (GtkWindow * window);
+
+void file_chooser_dialog_add_writable_pixbuf_formats (GtkFileChooser *chooser);
+GdkPixbufFormat* get_gdk_pixbuf_format_by_extension (gchar *uri);
+
+G_END_DECLS
+
+#endif /* __EV_VIEW_H__ */
diff --git a/shell/ev-window-title.c b/shell/ev-window-title.c
new file mode 100644
index 00000000..ad2837a4
--- /dev/null
+++ b/shell/ev-window-title.c
@@ -0,0 +1,203 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 <config.h>
+#include "ev-window-title.h"
+#include "ev-backends-manager.h"
+#include "ev-utils.h"
+
+#include <string.h>
+#include <gio/gio.h>
+#include <glib/gi18n.h>
+
+/* Known backends (for bad extensions fix) */
+#define EV_BACKEND_PS "psdocument"
+#define EV_BACKEND_PDF "pdfdocument"
+
+typedef struct
+{
+ const gchar *backend;
+ const gchar *text;
+} BadTitleEntry;
+
+struct _EvWindowTitle
+{
+ EvWindow *window;
+ EvWindowTitleType type;
+ EvDocument *document;
+ char *uri;
+};
+
+static const BadTitleEntry bad_extensions[] = {
+ { EV_BACKEND_PS, ".dvi" },
+ { EV_BACKEND_PDF, ".doc" },
+ { EV_BACKEND_PDF, ".dvi" },
+ { EV_BACKEND_PDF, ".indd" },
+ { EV_BACKEND_PDF, ".rtf" }
+};
+
+static const BadTitleEntry bad_prefixes[] = {
+ { EV_BACKEND_PDF, "Microsoft Word - " },
+ { EV_BACKEND_PDF, "Microsoft PowerPoint - " }
+};
+
+EvWindowTitle *
+ev_window_title_new (EvWindow *window)
+{
+ EvWindowTitle *window_title;
+
+ window_title = g_new0 (EvWindowTitle, 1);
+ window_title->window = window;
+ window_title->type = EV_WINDOW_TITLE_DOCUMENT;
+
+ return window_title;
+}
+
+static char *
+get_filename_from_uri (const char *uri)
+{
+ char *filename;
+ char *basename;
+
+ filename = g_uri_unescape_string (uri, NULL);
+ basename = g_path_get_basename (filename);
+ g_free(filename);
+
+ return basename;
+}
+
+/* Some docs report titles with confusing extensions (ex. .doc for pdf).
+ Let's show the filename in this case */
+static void
+ev_window_title_sanitize_title (EvWindowTitle *window_title, char **title) {
+ const gchar *backend;
+ int i;
+
+ backend = ev_backends_manager_get_document_module_name (window_title->document);
+
+ for (i = 0; i < G_N_ELEMENTS (bad_extensions); i++) {
+ if (g_ascii_strcasecmp (bad_extensions[i].backend, backend) == 0 &&
+ g_str_has_suffix (*title, bad_extensions[i].text)) {
+ char *new_title;
+ char *filename = get_filename_from_uri (window_title->uri);
+
+ new_title = g_strdup_printf ("%s (%s)", *title, filename);
+ g_free (*title);
+ *title = new_title;
+
+ g_free (filename);
+ }
+ }
+ for (i = 0; i < G_N_ELEMENTS (bad_prefixes); i++) {
+ if (g_ascii_strcasecmp (bad_prefixes[i].backend, backend) == 0 &&
+ g_str_has_prefix (*title, bad_prefixes[i].text)) {
+ char *new_title;
+ int len = strlen(bad_prefixes[i].text);
+
+ new_title = g_strdup_printf ("%s", (*title) + len);
+ g_free (*title);
+ *title = new_title;
+ }
+ }
+}
+
+static void
+ev_window_title_update (EvWindowTitle *window_title)
+{
+ GtkWindow *window = GTK_WINDOW (window_title->window);
+ char *title = NULL, *password_title, *p;
+
+ if (window_title->document != NULL) {
+ gchar *doc_title;
+
+ doc_title = g_strdup (ev_document_get_title (window_title->document));
+
+ /* Make sure we get a valid title back */
+ if (doc_title != NULL) {
+ doc_title = g_strstrip (doc_title);
+
+ if (doc_title[0] != '\0' &&
+ g_utf8_validate (doc_title, -1, NULL)) {
+ title = g_strdup (doc_title);
+ }
+
+ g_free (doc_title);
+ }
+ }
+
+ if (title && window_title->uri) {
+ ev_window_title_sanitize_title (window_title, &title);
+ } else if (window_title->uri) {
+ title = get_filename_from_uri (window_title->uri);
+ } else if (!title) {
+ title = g_strdup (_("Document Viewer"));
+ }
+
+ for (p = title; *p; ++p) {
+ /* an '\n' byte is always ASCII, no need for UTF-8 special casing */
+ if (*p == '\n') *p = ' ';
+ }
+
+ switch (window_title->type) {
+ case EV_WINDOW_TITLE_DOCUMENT:
+ gtk_window_set_title (window, title);
+ break;
+ case EV_WINDOW_TITLE_PASSWORD:
+ password_title = g_strdup_printf (_("%s — Password Required"), title);
+ gtk_window_set_title (window, password_title);
+ g_free (password_title);
+ break;
+ }
+
+ g_free (title);
+}
+
+void
+ev_window_title_set_type (EvWindowTitle *window_title, EvWindowTitleType type)
+{
+ window_title->type = type;
+
+ ev_window_title_update (window_title);
+}
+
+void
+ev_window_title_set_document (EvWindowTitle *window_title,
+ EvDocument *document)
+{
+ window_title->document = document;
+
+ ev_window_title_update (window_title);
+}
+
+void
+ev_window_title_set_uri (EvWindowTitle *window_title,
+ const char *uri)
+{
+ g_free (window_title->uri);
+ window_title->uri = g_strdup (uri);
+
+ ev_window_title_update (window_title);
+}
+
+void
+ev_window_title_free (EvWindowTitle *window_title)
+{
+ g_free (window_title->uri);
+ g_free (window_title);
+}
diff --git a/shell/ev-window-title.h b/shell/ev-window-title.h
new file mode 100644
index 00000000..8002ee35
--- /dev/null
+++ b/shell/ev-window-title.h
@@ -0,0 +1,47 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2005 Red Hat, Inc
+ *
+ * Evince 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.
+ *
+ * Evince 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 __EV_WINDOW_TITLE_H__
+#define __EV_WINDOW_TITLE_H__
+
+#include "ev-window.h"
+#include "ev-document.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EvWindowTitle EvWindowTitle;
+
+typedef enum
+{
+ EV_WINDOW_TITLE_DOCUMENT,
+ EV_WINDOW_TITLE_PASSWORD
+} EvWindowTitleType;
+
+EvWindowTitle *ev_window_title_new (EvWindow *window);
+void ev_window_title_set_type (EvWindowTitle *window_title,
+ EvWindowTitleType type);
+void ev_window_title_set_document (EvWindowTitle *window_title,
+ EvDocument *document);
+void ev_window_title_set_uri (EvWindowTitle *window_title,
+ const char *uri);
+void ev_window_title_free (EvWindowTitle *window_title);
+
+G_END_DECLS
+
+#endif /* __EV_WINDOW_TITLE_H__ */
diff --git a/shell/ev-window.c b/shell/ev-window.c
new file mode 100644
index 00000000..088ac95b
--- /dev/null
+++ b/shell/ev-window.c
@@ -0,0 +1,7149 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2009 Juanjo Marín <[email protected]>
+ * Copyright (C) 2008 Carlos Garcia Campos
+ * Copyright (C) 2004 Martin Kretzschmar
+ * Copyright (C) 2004 Red Hat, Inc.
+ * Copyright (C) 2000, 2001, 2002, 2003, 2004 Marco Pesenti Gritti
+ * Copyright © 2003, 2004, 2005, 2009 Christian Persch
+ *
+ * Author:
+ * Martin Kretzschmar <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <math.h>
+
+#include <glib/gstdio.h>
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+#include <gtk/gtk.h>
+
+#ifdef WITH_MATECONF
+#include <mateconf/mateconf-client.h>
+#endif
+
+#include "egg-editable-toolbar.h"
+#include "egg-toolbar-editor.h"
+#include "egg-toolbars-model.h"
+
+#include "eggfindbar.h"
+
+#include "ephy-zoom-action.h"
+#include "ephy-zoom.h"
+
+#include "ev-application.h"
+#include "ev-document-factory.h"
+#include "ev-document-find.h"
+#include "ev-document-fonts.h"
+#include "ev-document-images.h"
+#include "ev-document-links.h"
+#include "ev-document-thumbnails.h"
+#include "ev-document-annotations.h"
+#include "ev-document-type-builtins.h"
+#include "ev-document-misc.h"
+#include "ev-file-exporter.h"
+#include "ev-file-helpers.h"
+#include "ev-file-monitor.h"
+#include "ev-history.h"
+#include "ev-image.h"
+#include "ev-job-scheduler.h"
+#include "ev-jobs.h"
+#include "ev-message-area.h"
+#include "ev-metadata.h"
+#include "ev-navigation-action.h"
+#include "ev-open-recent-action.h"
+#include "ev-page-action.h"
+#include "ev-password-view.h"
+#include "ev-properties-dialog.h"
+#include "ev-sidebar-annotations.h"
+#include "ev-sidebar-attachments.h"
+#include "ev-sidebar.h"
+#include "ev-sidebar-links.h"
+#include "ev-sidebar-page.h"
+#include "ev-sidebar-thumbnails.h"
+#include "ev-sidebar-layers.h"
+#include "ev-stock-icons.h"
+#include "ev-utils.h"
+#include "ev-keyring.h"
+#include "ev-view.h"
+#include "ev-view-presentation.h"
+#include "ev-view-type-builtins.h"
+#include "ev-window.h"
+#include "ev-window-title.h"
+#include "ev-print-operation.h"
+#include "ev-progress-message-area.h"
+#include "ev-annotation-properties-dialog.h"
+
+#ifdef ENABLE_DBUS
+#include "ev-media-player-keys.h"
+#endif /* ENABLE_DBUS */
+
+typedef enum {
+ PAGE_MODE_DOCUMENT,
+ PAGE_MODE_PASSWORD
+} EvWindowPageMode;
+
+typedef enum {
+ EV_CHROME_MENUBAR = 1 << 0,
+ EV_CHROME_TOOLBAR = 1 << 1,
+ EV_CHROME_FINDBAR = 1 << 2,
+ EV_CHROME_RAISE_TOOLBAR = 1 << 3,
+ EV_CHROME_FULLSCREEN_TOOLBAR = 1 << 4,
+ EV_CHROME_SIDEBAR = 1 << 5,
+ EV_CHROME_NORMAL = EV_CHROME_MENUBAR | EV_CHROME_TOOLBAR | EV_CHROME_SIDEBAR
+} EvChrome;
+
+typedef enum {
+ EV_SAVE_DOCUMENT,
+ EV_SAVE_ATTACHMENT,
+ EV_SAVE_IMAGE
+} EvSaveType;
+
+struct _EvWindowPrivate {
+ /* UI */
+ EvChrome chrome;
+
+ GtkWidget *main_box;
+ GtkWidget *menubar;
+ GtkWidget *toolbar;
+ GtkWidget *hpaned;
+ GtkWidget *view_box;
+ GtkWidget *sidebar;
+ GtkWidget *find_bar;
+ GtkWidget *scrolled_window;
+ GtkWidget *view;
+ GtkWidget *presentation_view;
+ GtkWidget *message_area;
+ GtkWidget *password_view;
+ GtkWidget *sidebar_thumbs;
+ GtkWidget *sidebar_links;
+ GtkWidget *sidebar_attachments;
+ GtkWidget *sidebar_layers;
+ GtkWidget *sidebar_annots;
+
+ /* Settings */
+ GSettings *settings;
+ GSettings *default_settings;
+
+ /* Menubar accels */
+ guint menubar_accel_keyval;
+ GdkModifierType menubar_accel_modifier;
+
+ /* Progress Messages */
+ guint progress_idle;
+ GCancellable *progress_cancellable;
+
+ /* Dialogs */
+ GtkWidget *properties;
+ GtkWidget *print_dialog;
+
+ /* UI Builders */
+ GtkActionGroup *action_group;
+ GtkActionGroup *view_popup_action_group;
+ GtkActionGroup *attachment_popup_action_group;
+ GtkRecentManager *recent_manager;
+ GtkActionGroup *recent_action_group;
+ guint recent_ui_id;
+ GtkUIManager *ui_manager;
+
+ /* Fullscreen mode */
+ GtkWidget *fullscreen_toolbar;
+
+ /* Popup view */
+ GtkWidget *view_popup;
+ EvLink *link;
+ EvImage *image;
+ EvAnnotation *annot;
+
+ /* Popup attachment */
+ GtkWidget *attachment_popup;
+ GList *attach_list;
+
+ /* Document */
+ EvDocumentModel *model;
+ char *uri;
+ glong uri_mtime;
+ char *local_uri;
+ gboolean in_reload;
+ EvFileMonitor *monitor;
+ guint setup_document_idle;
+
+ EvDocument *document;
+ EvHistory *history;
+ EvWindowPageMode page_mode;
+ EvWindowTitle *title;
+ EvMetadata *metadata;
+ gboolean is_new_doc;
+
+ /* Load params */
+ EvLinkDest *dest;
+ gchar *search_string;
+ EvWindowRunMode window_mode;
+
+ EvJob *load_job;
+ EvJob *reload_job;
+ EvJob *thumbnail_job;
+ EvJob *save_job;
+ EvJob *find_job;
+
+ /* Printing */
+ GQueue *print_queue;
+ GtkPrintSettings *print_settings;
+ GtkPageSetup *print_page_setup;
+ gboolean close_after_print;
+#ifdef WITH_MATECONF
+ MateConfClient *mateconf_client;
+#endif
+#ifdef ENABLE_DBUS
+ /* DBus */
+ guint dbus_object_id;
+ gchar *dbus_object_path;
+#endif
+};
+
+#define EV_WINDOW_GET_PRIVATE(object) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_WINDOW, EvWindowPrivate))
+
+#define EV_WINDOW_IS_PRESENTATION(w) (w->priv->presentation_view != NULL)
+
+#define PAGE_SELECTOR_ACTION "PageSelector"
+#define ZOOM_CONTROL_ACTION "ViewZoom"
+#define NAVIGATION_ACTION "Navigation"
+
+#define MATECONF_LOCKDOWN_DIR "/desktop/mate/lockdown"
+#define MATECONF_LOCKDOWN_SAVE "/desktop/mate/lockdown/disable_save_to_disk"
+#define MATECONF_LOCKDOWN_PRINT "/desktop/mate/lockdown/disable_printing"
+#define MATECONF_LOCKDOWN_PRINT_SETUP "/desktop/mate/lockdown/disable_print_setup"
+
+#ifdef ENABLE_DBUS
+#define EV_WINDOW_DBUS_OBJECT_PATH "/org/mate/evince/Window/%d"
+#define EV_WINDOW_DBUS_INTERFACE "org.mate.evince.Window"
+#endif
+
+#define GS_SCHEMA_NAME "org.mate.Evince"
+#define GS_OVERRIDE_RESTRICTIONS "override-restrictions"
+
+#define SIDEBAR_DEFAULT_SIZE 132
+#define LINKS_SIDEBAR_ID "links"
+#define THUMBNAILS_SIDEBAR_ID "thumbnails"
+#define ATTACHMENTS_SIDEBAR_ID "attachments"
+#define LAYERS_SIDEBAR_ID "layers"
+#define ANNOTS_SIDEBAR_ID "annotations"
+
+#define EV_PRINT_SETTINGS_FILE "print-settings"
+#define EV_PRINT_SETTINGS_GROUP "Print Settings"
+#define EV_PAGE_SETUP_GROUP "Page Setup"
+
+#define EV_TOOLBARS_FILENAME "evince-toolbar.xml"
+
+#define MIN_SCALE 0.05409
+#define PAGE_CACHE_SIZE 52428800 /* 50MB */
+
+#define MAX_RECENT_ITEM_LEN (40)
+
+static const gchar *document_print_settings[] = {
+ GTK_PRINT_SETTINGS_N_COPIES,
+ GTK_PRINT_SETTINGS_COLLATE,
+ GTK_PRINT_SETTINGS_REVERSE,
+ GTK_PRINT_SETTINGS_NUMBER_UP,
+ GTK_PRINT_SETTINGS_SCALE,
+ GTK_PRINT_SETTINGS_PRINT_PAGES,
+ GTK_PRINT_SETTINGS_PAGE_RANGES,
+ GTK_PRINT_SETTINGS_PAGE_SET,
+ GTK_PRINT_SETTINGS_OUTPUT_URI
+};
+
+static void ev_window_update_actions (EvWindow *ev_window);
+static void ev_window_sidebar_visibility_changed_cb (EvSidebar *ev_sidebar,
+ GParamSpec *pspec,
+ EvWindow *ev_window);
+static void ev_window_view_toolbar_cb (GtkAction *action,
+ EvWindow *ev_window);
+static void ev_window_set_page_mode (EvWindow *window,
+ EvWindowPageMode page_mode);
+static void ev_window_load_job_cb (EvJob *job,
+ gpointer data);
+static void ev_window_reload_document (EvWindow *window,
+ EvLinkDest *dest);
+static void ev_window_reload_job_cb (EvJob *job,
+ EvWindow *window);
+static void ev_window_set_icon_from_thumbnail (EvJobThumbnail *job,
+ EvWindow *ev_window);
+static void ev_window_save_job_cb (EvJob *save,
+ EvWindow *window);
+static void ev_window_sizing_mode_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvWindow *ev_window);
+static void ev_window_zoom_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvWindow *ev_window);
+static void ev_window_add_recent (EvWindow *window,
+ const char *filename);
+static void ev_window_run_fullscreen (EvWindow *window);
+static void ev_window_stop_fullscreen (EvWindow *window,
+ gboolean unfullscreen_window);
+static void ev_window_cmd_view_fullscreen (GtkAction *action,
+ EvWindow *window);
+static void ev_window_run_presentation (EvWindow *window);
+static void ev_window_stop_presentation (EvWindow *window,
+ gboolean unfullscreen_window);
+static void ev_window_cmd_view_presentation (GtkAction *action,
+ EvWindow *window);
+static void ev_view_popup_cmd_open_link (GtkAction *action,
+ EvWindow *window);
+static void ev_view_popup_cmd_open_link_new_window (GtkAction *action,
+ EvWindow *window);
+static void ev_view_popup_cmd_copy_link_address (GtkAction *action,
+ EvWindow *window);
+static void ev_view_popup_cmd_save_image_as (GtkAction *action,
+ EvWindow *window);
+static void ev_view_popup_cmd_copy_image (GtkAction *action,
+ EvWindow *window);
+static void ev_view_popup_cmd_annot_properties (GtkAction *action,
+ EvWindow *window);
+static void ev_attachment_popup_cmd_open_attachment (GtkAction *action,
+ EvWindow *window);
+static void ev_attachment_popup_cmd_save_attachment_as (GtkAction *action,
+ EvWindow *window);
+static void ev_window_cmd_view_best_fit (GtkAction *action,
+ EvWindow *ev_window);
+static void ev_window_cmd_view_page_width (GtkAction *action,
+ EvWindow *ev_window);
+static void view_handle_link_cb (EvView *view,
+ EvLink *link,
+ EvWindow *window);
+static void ev_window_update_find_status_message (EvWindow *ev_window);
+static void ev_window_cmd_edit_find (GtkAction *action,
+ EvWindow *ev_window);
+static void find_bar_search_changed_cb (EggFindBar *find_bar,
+ GParamSpec *param,
+ EvWindow *ev_window);
+static void ev_window_load_file_remote (EvWindow *ev_window,
+ GFile *source_file);
+static void ev_window_media_player_key_pressed (EvWindow *window,
+ const gchar *key,
+ gpointer user_data);
+static void ev_window_update_max_min_scale (EvWindow *window);
+#ifdef ENABLE_DBUS
+static void ev_window_emit_closed (EvWindow *window);
+static void ev_window_emit_doc_loaded (EvWindow *window);
+#endif
+
+static guint ev_window_n_copies = 0;
+
+G_DEFINE_TYPE (EvWindow, ev_window, GTK_TYPE_WINDOW)
+
+static gdouble
+get_screen_dpi (EvWindow *window)
+{
+ GdkScreen *screen;
+
+ screen = gtk_window_get_screen (GTK_WINDOW (window));
+ return ev_document_misc_get_screen_dpi (screen);
+}
+
+static void
+ev_window_set_action_sensitive (EvWindow *ev_window,
+ const char *name,
+ gboolean sensitive)
+{
+ GtkAction *action = gtk_action_group_get_action (ev_window->priv->action_group,
+ name);
+ gtk_action_set_sensitive (action, sensitive);
+}
+
+
+static void
+ev_window_setup_action_sensitivity (EvWindow *ev_window)
+{
+ EvDocument *document = ev_window->priv->document;
+ const EvDocumentInfo *info = NULL;
+ gboolean has_document = FALSE;
+ gboolean ok_to_print = TRUE;
+ gboolean ok_to_copy = TRUE;
+ gboolean has_properties = TRUE;
+ gboolean override_restrictions = TRUE;
+ gboolean can_get_text = FALSE;
+ gboolean has_pages = FALSE;
+ gboolean can_find = FALSE;
+
+ if (document) {
+ has_document = TRUE;
+ has_pages = ev_document_get_n_pages (document) > 0;
+ info = ev_document_get_info (document);
+ }
+
+ if (!info || info->fields_mask == 0) {
+ has_properties = FALSE;
+ }
+
+ if (has_document && EV_IS_SELECTION (document)) {
+ can_get_text = TRUE;
+ }
+
+ if (has_pages && EV_IS_DOCUMENT_FIND (document)) {
+ can_find = TRUE;
+ }
+
+ if (has_document && ev_window->priv->settings) {
+ override_restrictions =
+ g_settings_get_boolean (ev_window->priv->settings,
+ GS_OVERRIDE_RESTRICTIONS);
+ }
+
+ if (!override_restrictions && info && info->fields_mask & EV_DOCUMENT_INFO_PERMISSIONS) {
+ ok_to_print = (info->permissions & EV_DOCUMENT_PERMISSIONS_OK_TO_PRINT);
+ ok_to_copy = (info->permissions & EV_DOCUMENT_PERMISSIONS_OK_TO_COPY);
+ }
+
+ if (has_document && !ev_print_operation_exists_for_document(document))
+ ok_to_print = FALSE;
+
+#ifdef WITH_MATECONF
+ if (has_document &&
+ mateconf_client_get_bool (ev_window->priv->mateconf_client, MATECONF_LOCKDOWN_SAVE, NULL)) {
+ ok_to_copy = FALSE;
+ }
+
+ if (has_document &&
+ mateconf_client_get_bool (ev_window->priv->mateconf_client, MATECONF_LOCKDOWN_PRINT, NULL)) {
+ ok_to_print = FALSE;
+ }
+#endif
+
+ /* File menu */
+ ev_window_set_action_sensitive (ev_window, "FileOpenCopy", has_document);
+ ev_window_set_action_sensitive (ev_window, "FileSaveAs", has_document && ok_to_copy);
+ ev_window_set_action_sensitive (ev_window, "FilePrint", has_pages && ok_to_print);
+ ev_window_set_action_sensitive (ev_window, "FileProperties", has_document && has_properties);
+
+ /* Edit menu */
+ ev_window_set_action_sensitive (ev_window, "EditSelectAll", has_pages && can_get_text);
+ ev_window_set_action_sensitive (ev_window, "EditFind", can_find);
+ ev_window_set_action_sensitive (ev_window, "Slash", can_find);
+ ev_window_set_action_sensitive (ev_window, "EditRotateLeft", has_pages);
+ ev_window_set_action_sensitive (ev_window, "EditRotateRight", has_pages);
+
+ /* View menu */
+ ev_window_set_action_sensitive (ev_window, "ViewContinuous", has_pages);
+ ev_window_set_action_sensitive (ev_window, "ViewDual", has_pages);
+ ev_window_set_action_sensitive (ev_window, "ViewBestFit", has_pages);
+ ev_window_set_action_sensitive (ev_window, "ViewPageWidth", has_pages);
+ ev_window_set_action_sensitive (ev_window, "ViewReload", has_pages);
+ ev_window_set_action_sensitive (ev_window, "ViewAutoscroll", has_pages);
+ ev_window_set_action_sensitive (ev_window, "ViewInvertedColors", has_pages);
+
+ /* Toolbar-specific actions: */
+ ev_window_set_action_sensitive (ev_window, PAGE_SELECTOR_ACTION, has_pages);
+ ev_window_set_action_sensitive (ev_window, ZOOM_CONTROL_ACTION, has_pages);
+ ev_window_set_action_sensitive (ev_window, NAVIGATION_ACTION, FALSE);
+
+ ev_window_update_actions (ev_window);
+}
+
+static void
+ev_window_update_actions (EvWindow *ev_window)
+{
+ EvView *view = EV_VIEW (ev_window->priv->view);
+ int n_pages = 0, page = -1;
+ gboolean has_pages = FALSE;
+ gboolean presentation_mode;
+ gboolean can_find_in_page = FALSE;
+ EvSizingMode sizing_mode;
+
+ if (ev_window->priv->document) {
+ page = ev_document_model_get_page (ev_window->priv->model);
+ n_pages = ev_document_get_n_pages (ev_window->priv->document);
+ has_pages = n_pages > 0;
+ }
+
+ can_find_in_page = (ev_window->priv->find_job &&
+ ev_job_find_has_results (EV_JOB_FIND (ev_window->priv->find_job)));
+
+ ev_window_set_action_sensitive (ev_window, "EditCopy",
+ has_pages &&
+ ev_view_get_has_selection (view));
+ ev_window_set_action_sensitive (ev_window, "EditFindNext",
+ has_pages && can_find_in_page);
+ ev_window_set_action_sensitive (ev_window, "EditFindPrevious",
+ has_pages && can_find_in_page);
+ ev_window_set_action_sensitive (ev_window, "F3",
+ has_pages && can_find_in_page);
+
+ presentation_mode = EV_WINDOW_IS_PRESENTATION (ev_window);
+
+ ev_window_set_action_sensitive (ev_window, "ViewZoomIn",
+ has_pages &&
+ ev_view_can_zoom_in (view) &&
+ !presentation_mode);
+ ev_window_set_action_sensitive (ev_window, "ViewZoomOut",
+ has_pages &&
+ ev_view_can_zoom_out (view) &&
+ !presentation_mode);
+
+ /* Go menu */
+ if (has_pages) {
+ ev_window_set_action_sensitive (ev_window, "GoPreviousPage", page > 0);
+ ev_window_set_action_sensitive (ev_window, "GoNextPage", page < n_pages - 1);
+ ev_window_set_action_sensitive (ev_window, "GoFirstPage", page > 0);
+ ev_window_set_action_sensitive (ev_window, "GoLastPage", page < n_pages - 1);
+ } else {
+ ev_window_set_action_sensitive (ev_window, "GoFirstPage", FALSE);
+ ev_window_set_action_sensitive (ev_window, "GoPreviousPage", FALSE);
+ ev_window_set_action_sensitive (ev_window, "GoNextPage", FALSE);
+ ev_window_set_action_sensitive (ev_window, "GoLastPage", FALSE);
+ }
+
+ sizing_mode = ev_document_model_get_sizing_mode (ev_window->priv->model);
+ if (has_pages && sizing_mode != EV_SIZING_FIT_WIDTH && sizing_mode != EV_SIZING_BEST_FIT) {
+ GtkAction *action;
+ float zoom;
+ float real_zoom;
+
+ action = gtk_action_group_get_action (ev_window->priv->action_group,
+ ZOOM_CONTROL_ACTION);
+
+ real_zoom = ev_document_model_get_scale (ev_window->priv->model);
+ real_zoom *= 72.0 / get_screen_dpi (ev_window);
+ zoom = ephy_zoom_get_nearest_zoom_level (real_zoom);
+
+ ephy_zoom_action_set_zoom_level (EPHY_ZOOM_ACTION (action), zoom);
+ }
+}
+
+static void
+ev_window_set_view_accels_sensitivity (EvWindow *window, gboolean sensitive)
+{
+ gboolean can_find;
+
+ can_find = window->priv->document &&
+ EV_IS_DOCUMENT_FIND (window->priv->document);
+
+ if (window->priv->action_group) {
+ ev_window_set_action_sensitive (window, "PageDown", sensitive);
+ ev_window_set_action_sensitive (window, "PageUp", sensitive);
+ ev_window_set_action_sensitive (window, "Space", sensitive);
+ ev_window_set_action_sensitive (window, "ShiftSpace", sensitive);
+ ev_window_set_action_sensitive (window, "BackSpace", sensitive);
+ ev_window_set_action_sensitive (window, "ShiftBackSpace", sensitive);
+ ev_window_set_action_sensitive (window, "Return", sensitive);
+ ev_window_set_action_sensitive (window, "ShiftReturn", sensitive);
+ ev_window_set_action_sensitive (window, "Plus", sensitive);
+ ev_window_set_action_sensitive (window, "Minus", sensitive);
+ ev_window_set_action_sensitive (window, "KpPlus", sensitive);
+ ev_window_set_action_sensitive (window, "KpMinus", sensitive);
+ ev_window_set_action_sensitive (window, "Equal", sensitive);
+ ev_window_set_action_sensitive (window, "p", sensitive);
+ ev_window_set_action_sensitive (window, "n", sensitive);
+
+ ev_window_set_action_sensitive (window, "Slash", sensitive && can_find);
+ }
+}
+
+static void
+set_widget_visibility (GtkWidget *widget, gboolean visible)
+{
+ g_assert (GTK_IS_WIDGET (widget));
+
+ if (visible)
+ gtk_widget_show (widget);
+ else
+ gtk_widget_hide (widget);
+}
+
+static void
+update_chrome_visibility (EvWindow *window)
+{
+ EvWindowPrivate *priv = window->priv;
+ gboolean menubar, toolbar, findbar, fullscreen_toolbar, sidebar;
+ gboolean fullscreen_mode, presentation, fullscreen;
+
+ presentation = EV_WINDOW_IS_PRESENTATION (window);
+ fullscreen = ev_document_model_get_fullscreen (priv->model);
+ fullscreen_mode = fullscreen || presentation;
+
+ menubar = (priv->chrome & EV_CHROME_MENUBAR) != 0 && !fullscreen_mode;
+ toolbar = ((priv->chrome & EV_CHROME_TOOLBAR) != 0 ||
+ (priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0) && !fullscreen_mode;
+ fullscreen_toolbar = ((priv->chrome & EV_CHROME_FULLSCREEN_TOOLBAR) != 0 ||
+ (priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0) && fullscreen;
+ findbar = (priv->chrome & EV_CHROME_FINDBAR) != 0;
+ sidebar = (priv->chrome & EV_CHROME_SIDEBAR) != 0 && priv->document && !presentation;
+
+ set_widget_visibility (priv->menubar, menubar);
+ set_widget_visibility (priv->toolbar, toolbar);
+ set_widget_visibility (priv->find_bar, findbar);
+ set_widget_visibility (priv->sidebar, sidebar);
+
+ ev_window_set_action_sensitive (window, "EditToolbar", toolbar);
+
+ if (priv->fullscreen_toolbar != NULL) {
+ set_widget_visibility (priv->fullscreen_toolbar, fullscreen_toolbar);
+ }
+}
+
+static void
+update_chrome_flag (EvWindow *window, EvChrome flag, gboolean active)
+{
+ EvWindowPrivate *priv = window->priv;
+
+ if (active) {
+ priv->chrome |= flag;
+ } else {
+ priv->chrome &= ~flag;
+ }
+}
+
+static void
+update_sizing_buttons (EvWindow *window)
+{
+ GtkActionGroup *action_group = window->priv->action_group;
+ GtkAction *action;
+ gboolean best_fit, page_width;
+
+ switch (ev_document_model_get_sizing_mode (window->priv->model)) {
+ case EV_SIZING_BEST_FIT:
+ best_fit = TRUE;
+ page_width = FALSE;
+ break;
+ case EV_SIZING_FIT_WIDTH:
+ best_fit = FALSE;
+ page_width = TRUE;
+ break;
+ default:
+ best_fit = page_width = FALSE;
+ break;
+ }
+
+ action = gtk_action_group_get_action (action_group, "ViewBestFit");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_best_fit), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), best_fit);
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_best_fit), window);
+
+ action = gtk_action_group_get_action (action_group, "ViewPageWidth");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_page_width), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), page_width);
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_page_width), window);
+
+ action = gtk_action_group_get_action (window->priv->action_group,
+ ZOOM_CONTROL_ACTION);
+ if (best_fit) {
+ ephy_zoom_action_set_zoom_level (EPHY_ZOOM_ACTION (action),
+ EPHY_ZOOM_BEST_FIT);
+ } else if (page_width) {
+ ephy_zoom_action_set_zoom_level (EPHY_ZOOM_ACTION (action),
+ EPHY_ZOOM_FIT_WIDTH);
+ }
+}
+
+static void
+update_chrome_actions (EvWindow *window)
+{
+ EvWindowPrivate *priv = window->priv;
+ GtkActionGroup *action_group = priv->action_group;
+ GtkAction *action;
+
+ action= gtk_action_group_get_action (action_group, "ViewToolbar");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_view_toolbar_cb), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ (priv->chrome & EV_CHROME_TOOLBAR) != 0);
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_view_toolbar_cb), window);
+}
+
+/**
+ * ev_window_is_empty:
+ * @ev_window: The instance of the #EvWindow.
+ *
+ * It does look if there is any document loaded or if there is any job to load
+ * a document.
+ *
+ * Returns: %TRUE if there isn't any document loaded or any any documente to be
+ * loaded, %FALSE in other case.
+ */
+gboolean
+ev_window_is_empty (const EvWindow *ev_window)
+{
+ g_return_val_if_fail (EV_IS_WINDOW (ev_window), FALSE);
+
+ return (ev_window->priv->document == NULL) &&
+ (ev_window->priv->load_job == NULL);
+}
+
+static void
+ev_window_set_message_area (EvWindow *window,
+ GtkWidget *area)
+{
+ if (window->priv->message_area == area)
+ return;
+
+ if (window->priv->message_area)
+ gtk_widget_destroy (window->priv->message_area);
+ window->priv->message_area = area;
+
+ if (!area)
+ return;
+
+ gtk_box_pack_start (GTK_BOX (window->priv->view_box),
+ window->priv->message_area,
+ FALSE, FALSE, 0);
+ gtk_box_reorder_child (GTK_BOX (window->priv->view_box),
+ window->priv->message_area, 0);
+ g_object_add_weak_pointer (G_OBJECT (window->priv->message_area),
+ (gpointer) &(window->priv->message_area));
+}
+
+static void
+ev_window_message_area_response_cb (EvMessageArea *area,
+ gint response_id,
+ EvWindow *window)
+{
+ ev_window_set_message_area (window, NULL);
+}
+
+static void
+ev_window_error_message (EvWindow *window,
+ GError *error,
+ const gchar *format,
+ ...)
+{
+ GtkWidget *area;
+ va_list args;
+ gchar *msg = NULL;
+
+ if (window->priv->message_area)
+ return;
+
+ va_start (args, format);
+ msg = g_strdup_vprintf (format, args);
+ va_end (args);
+
+ area = ev_message_area_new (GTK_MESSAGE_ERROR,
+ msg,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CLOSE,
+ NULL);
+ g_free (msg);
+
+ if (error)
+ ev_message_area_set_secondary_text (EV_MESSAGE_AREA (area), error->message);
+ g_signal_connect (area, "response",
+ G_CALLBACK (ev_window_message_area_response_cb),
+ window);
+ gtk_widget_show (area);
+ ev_window_set_message_area (window, area);
+}
+
+static void
+ev_window_warning_message (EvWindow *window,
+ const gchar *format,
+ ...)
+{
+ GtkWidget *area;
+ va_list args;
+ gchar *msg = NULL;
+
+ if (window->priv->message_area)
+ return;
+
+ va_start (args, format);
+ msg = g_strdup_vprintf (format, args);
+ va_end (args);
+
+ area = ev_message_area_new (GTK_MESSAGE_WARNING,
+ msg,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CLOSE,
+ NULL);
+ g_free (msg);
+
+ g_signal_connect (area, "response",
+ G_CALLBACK (ev_window_message_area_response_cb),
+ window);
+ gtk_widget_show (area);
+ ev_window_set_message_area (window, area);
+}
+
+typedef struct _FindTask {
+ const gchar *page_label;
+ gchar *chapter;
+} FindTask;
+
+static gboolean
+ev_window_find_chapter (GtkTreeModel *tree_model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ FindTask *task = (FindTask *)data;
+ gchar *page_string;
+
+ gtk_tree_model_get (tree_model, iter,
+ EV_DOCUMENT_LINKS_COLUMN_PAGE_LABEL, &page_string,
+ -1);
+
+ if (!page_string)
+ return FALSE;
+
+ if (!strcmp (page_string, task->page_label)) {
+ gtk_tree_model_get (tree_model, iter,
+ EV_DOCUMENT_LINKS_COLUMN_MARKUP, &task->chapter,
+ -1);
+ g_free (page_string);
+ return TRUE;
+ }
+
+ g_free (page_string);
+ return FALSE;
+}
+
+static void
+ev_window_add_history (EvWindow *window, gint page, EvLink *link)
+{
+ gchar *page_label = NULL;
+ gchar *link_title;
+ FindTask find_task;
+ EvLink *real_link;
+ EvLinkAction *action;
+ EvLinkDest *dest;
+
+ if (window->priv->history == NULL)
+ return;
+
+ if (!EV_IS_DOCUMENT_LINKS (window->priv->document))
+ return;
+
+ if (link) {
+ action = g_object_ref (ev_link_get_action (link));
+ dest = ev_link_action_get_dest (action);
+ page_label = ev_document_links_get_dest_page_label (EV_DOCUMENT_LINKS (window->priv->document), dest);
+ } else {
+ dest = ev_link_dest_new_page (page);
+ action = ev_link_action_new_dest (dest);
+ page_label = ev_document_get_page_label (window->priv->document, page);
+ }
+
+ if (!page_label)
+ return;
+
+ find_task.page_label = page_label;
+ find_task.chapter = NULL;
+
+ if (ev_document_links_has_document_links (EV_DOCUMENT_LINKS (window->priv->document))) {
+ GtkTreeModel *model;
+
+ g_object_get (G_OBJECT (window->priv->sidebar_links), "model", &model, NULL);
+
+ if (model) {
+ gtk_tree_model_foreach (model,
+ ev_window_find_chapter,
+ &find_task);
+
+ g_object_unref (model);
+ }
+ }
+
+ if (find_task.chapter)
+ link_title = g_strdup_printf (_("Page %s — %s"), page_label, find_task.chapter);
+ else
+ link_title = g_strdup_printf (_("Page %s"), page_label);
+
+ real_link = ev_link_new (link_title, action);
+
+ ev_history_add_link (window->priv->history, real_link);
+
+ g_free (find_task.chapter);
+ g_free (link_title);
+ g_free (page_label);
+ g_object_unref (real_link);
+}
+
+static void
+view_handle_link_cb (EvView *view, EvLink *link, EvWindow *window)
+{
+ int current_page = ev_document_model_get_page (window->priv->model);
+
+ ev_window_add_history (window, 0, link);
+ ev_window_add_history (window, current_page, NULL);
+}
+
+static void
+view_selection_changed_cb (EvView *view,
+ EvWindow *window)
+{
+ ev_window_set_action_sensitive (window, "EditCopy",
+ ev_view_get_has_selection (view));
+}
+
+static void
+ev_window_page_changed_cb (EvWindow *ev_window,
+ gint old_page,
+ gint new_page,
+ EvDocumentModel *model)
+{
+ ev_window_update_actions (ev_window);
+
+ ev_window_update_find_status_message (ev_window);
+
+ if (abs (new_page - old_page) > 1) {
+ ev_window_add_history (ev_window, new_page, NULL);
+ ev_window_add_history (ev_window, old_page, NULL);
+ }
+
+ if (ev_window->priv->metadata && !ev_window_is_empty (ev_window))
+ ev_metadata_set_int (ev_window->priv->metadata, "page", new_page);
+}
+
+static const gchar *
+ev_window_sidebar_get_current_page_id (EvWindow *ev_window)
+{
+ GtkWidget *current_page;
+ const gchar *id;
+
+ g_object_get (ev_window->priv->sidebar,
+ "current_page", &current_page,
+ NULL);
+
+ if (current_page == ev_window->priv->sidebar_links) {
+ id = LINKS_SIDEBAR_ID;
+ } else if (current_page == ev_window->priv->sidebar_thumbs) {
+ id = THUMBNAILS_SIDEBAR_ID;
+ } else if (current_page == ev_window->priv->sidebar_attachments) {
+ id = ATTACHMENTS_SIDEBAR_ID;
+ } else if (current_page == ev_window->priv->sidebar_layers) {
+ id = LAYERS_SIDEBAR_ID;
+ } else if (current_page == ev_window->priv->sidebar_annots) {
+ id = ANNOTS_SIDEBAR_ID;
+ } else {
+ g_assert_not_reached();
+ }
+
+ g_object_unref (current_page);
+
+ return id;
+}
+
+static void
+ev_window_sidebar_set_current_page (EvWindow *window,
+ const gchar *page_id)
+{
+ EvDocument *document = window->priv->document;
+ EvSidebar *sidebar = EV_SIDEBAR (window->priv->sidebar);
+ GtkWidget *links = window->priv->sidebar_links;
+ GtkWidget *thumbs = window->priv->sidebar_thumbs;
+ GtkWidget *attachments = window->priv->sidebar_attachments;
+ GtkWidget *annots = window->priv->sidebar_annots;
+ GtkWidget *layers = window->priv->sidebar_layers;
+
+ if (strcmp (page_id, LINKS_SIDEBAR_ID) == 0 &&
+ ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (links), document)) {
+ ev_sidebar_set_page (sidebar, links);
+ } else if (strcmp (page_id, THUMBNAILS_SIDEBAR_ID) == 0 &&
+ ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (thumbs), document)) {
+ ev_sidebar_set_page (sidebar, thumbs);
+ } else if (strcmp (page_id, ATTACHMENTS_SIDEBAR_ID) == 0 &&
+ ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (attachments), document)) {
+ ev_sidebar_set_page (sidebar, attachments);
+ } else if (strcmp (page_id, LAYERS_SIDEBAR_ID) == 0 &&
+ ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (layers), document)) {
+ ev_sidebar_set_page (sidebar, layers);
+ } else if (strcmp (page_id, ANNOTS_SIDEBAR_ID) == 0 &&
+ ev_sidebar_page_support_document (EV_SIDEBAR_PAGE (annots), document)) {
+ ev_sidebar_set_page (sidebar, annots);
+ }
+}
+
+static void
+update_document_mode (EvWindow *window, EvDocumentMode mode)
+{
+ if (mode == EV_DOCUMENT_MODE_PRESENTATION) {
+ ev_window_run_presentation (window);
+ }
+ else if (mode == EV_DOCUMENT_MODE_FULL_SCREEN) {
+ ev_window_run_fullscreen (window);
+ }
+}
+
+static void
+setup_chrome_from_metadata (EvWindow *window)
+{
+ EvChrome chrome = EV_CHROME_NORMAL;
+ gboolean show_toolbar = TRUE;
+
+ if (ev_window_is_empty (window)) {
+ window->priv->chrome = chrome;
+
+ return;
+ }
+
+ if (!window->priv->metadata) {
+ show_toolbar = g_settings_get_boolean (window->priv->default_settings, "show-toolbar");
+ } else if (!ev_metadata_get_boolean (window->priv->metadata, "show_toolbar", &show_toolbar)) {
+ if (window->priv->is_new_doc)
+ show_toolbar = g_settings_get_boolean (window->priv->default_settings, "show-toolbar");
+ }
+
+ if (!show_toolbar)
+ chrome &= ~EV_CHROME_TOOLBAR;
+
+ window->priv->chrome = chrome;
+}
+
+static void
+setup_sidebar_from_metadata (EvWindow *window)
+{
+ EvDocument *document = window->priv->document;
+ GSettings *settings = window->priv->default_settings;
+ gchar *page_id;
+ gint sidebar_size;
+ gboolean sidebar_visibility = TRUE;
+
+ if (ev_window_is_empty (window))
+ return;
+
+ if (!window->priv->metadata) {
+ sidebar_visibility = g_settings_get_boolean (settings, "show-sidebar");
+ } else if (!ev_metadata_get_boolean (window->priv->metadata, "sidebar_visibility", &sidebar_visibility)) {
+ if (window->priv->is_new_doc)
+ sidebar_visibility = g_settings_get_boolean (settings, "show-sidebar");
+ }
+
+ update_chrome_flag (window, EV_CHROME_SIDEBAR, sidebar_visibility);
+ update_chrome_visibility (window);
+
+ if (!window->priv->metadata) {
+ /* Set default values */
+ gtk_paned_set_position (GTK_PANED (window->priv->hpaned),
+ g_settings_get_int (settings, "sidebar-size"));
+ if (document) {
+ page_id = g_settings_get_string (settings, "sidebar-page");
+ ev_window_sidebar_set_current_page (window, page_id);
+ g_free (page_id);
+ }
+
+ return;
+ }
+
+ if (ev_metadata_get_int (window->priv->metadata, "sidebar_size", &sidebar_size)) {
+ gtk_paned_set_position (GTK_PANED (window->priv->hpaned), sidebar_size);
+ } else if (window->priv->is_new_doc) {
+ gtk_paned_set_position (GTK_PANED (window->priv->hpaned),
+ g_settings_get_int (settings, "sidebar-size"));
+ }
+
+ if (!document)
+ return;
+
+ if (ev_metadata_get_string (window->priv->metadata, "sidebar_page", &page_id)) {
+ ev_window_sidebar_set_current_page (window, page_id);
+ } else if (window->priv->is_new_doc) {
+ page_id = g_settings_get_string (settings, "sidebar-page");
+ ev_window_sidebar_set_current_page (window, page_id);
+ g_free (page_id);
+ }
+}
+
+static void
+setup_model_from_metadata (EvWindow *window)
+{
+ GSettings *settings = window->priv->default_settings;
+ gint page;
+ gchar *sizing_mode;
+ gdouble zoom;
+ gint rotation;
+ gboolean inverted_colors = FALSE;
+ gboolean continuous = FALSE;
+ gboolean dual_page = FALSE;
+ gboolean fullscreen = FALSE;
+
+ if (!window->priv->metadata) {
+ /* Set default values */
+ ev_document_model_set_sizing_mode (window->priv->model,
+ g_settings_get_enum (settings, "sizing-mode"));
+ ev_document_model_set_inverted_colors (window->priv->model,
+ g_settings_get_boolean (settings, "inverted-colors"));
+ ev_document_model_set_continuous (window->priv->model,
+ g_settings_get_boolean (settings, "continuous"));
+ ev_document_model_set_dual_page (window->priv->model,
+ g_settings_get_boolean (settings, "dual-page"));
+ fullscreen = g_settings_get_boolean (settings, "fullscreen");
+ if (fullscreen)
+ ev_window_run_fullscreen (window);
+
+ return;
+ }
+
+ /* Current page */
+ if (!window->priv->dest &&
+ ev_metadata_get_int (window->priv->metadata, "page", &page)) {
+ ev_document_model_set_page (window->priv->model, page);
+ }
+
+ /* Sizing mode */
+ if (ev_metadata_get_string (window->priv->metadata, "sizing_mode", &sizing_mode)) {
+ GEnumValue *enum_value;
+
+ enum_value = g_enum_get_value_by_nick
+ (g_type_class_peek (EV_TYPE_SIZING_MODE), sizing_mode);
+ ev_document_model_set_sizing_mode (window->priv->model, enum_value->value);
+ } else if (window->priv->is_new_doc) {
+ ev_document_model_set_sizing_mode (window->priv->model,
+ g_settings_get_enum (settings, "sizing-mode"));
+ }
+
+ /* Zoom */
+ if (ev_document_model_get_sizing_mode (window->priv->model) == EV_SIZING_FREE &&
+ ev_metadata_get_double (window->priv->metadata, "zoom", &zoom)) {
+ zoom *= get_screen_dpi (window) / 72.0;
+ ev_document_model_set_scale (window->priv->model, zoom);
+ }
+
+ /* Rotation */
+ if (ev_metadata_get_int (window->priv->metadata, "rotation", &rotation)) {
+ switch (rotation) {
+ case 90:
+ rotation = 90;
+ break;
+ case 180:
+ rotation = 180;
+ break;
+ case 270:
+ rotation = 270;
+ break;
+ default:
+ rotation = 0;
+ break;
+ }
+ ev_document_model_set_rotation (window->priv->model, rotation);
+ }
+
+ /* Inverted Colors */
+ if (ev_metadata_get_boolean (window->priv->metadata, "inverted-colors", &inverted_colors)) {
+ ev_document_model_set_inverted_colors (window->priv->model, inverted_colors);
+ } else if (window->priv->is_new_doc) {
+ ev_document_model_set_inverted_colors (window->priv->model,
+ g_settings_get_boolean (settings, "inverted-colors"));
+ }
+
+ /* Continuous */
+ if (ev_metadata_get_boolean (window->priv->metadata, "continuous", &continuous)) {
+ ev_document_model_set_continuous (window->priv->model, continuous);
+ } else if (window->priv->is_new_doc) {
+ ev_document_model_set_continuous (window->priv->model,
+ g_settings_get_boolean (settings, "continuous"));
+ }
+
+ /* Dual page */
+ if (ev_metadata_get_boolean (window->priv->metadata, "dual-page", &dual_page)) {
+ ev_document_model_set_dual_page (window->priv->model, dual_page);
+ } else if (window->priv->is_new_doc) {
+ ev_document_model_set_dual_page (window->priv->model,
+ g_settings_get_boolean (settings, "dual-page"));
+ }
+
+ /* Fullscreen */
+ if (!ev_metadata_get_boolean (window->priv->metadata, "fullscreen", &fullscreen)) {
+ if (window->priv->is_new_doc)
+ fullscreen = g_settings_get_boolean (settings, "fullscreen");
+ }
+
+ if (fullscreen)
+ ev_window_run_fullscreen (window);
+}
+
+static void
+setup_document_from_metadata (EvWindow *window)
+{
+ gint page, n_pages;
+ gint width;
+ gint height;
+ gdouble width_ratio;
+ gdouble height_ratio;
+
+ setup_sidebar_from_metadata (window);
+
+ if (window->priv->metadata) {
+ /* Make sure to not open a document on the last page,
+ * since closing it on the last page most likely means the
+ * user was finished reading the document. In that case, reopening should
+ * show the first page. */
+ page = ev_document_model_get_page (window->priv->model);
+ n_pages = ev_document_get_n_pages (window->priv->document);
+ if (page == n_pages - 1)
+ ev_document_model_set_page (window->priv->model, 0);
+
+ if (ev_metadata_get_int (window->priv->metadata, "window_width", &width) &&
+ ev_metadata_get_int (window->priv->metadata, "window_height", &height))
+ return; /* size was already set in setup_size_from_metadata */
+ }
+
+ g_settings_get (window->priv->default_settings, "window-ratio", "(dd)", &width_ratio, &height_ratio);
+ if (width_ratio > 0. && height_ratio > 0.) {
+ gdouble document_width;
+ gdouble document_height;
+ GdkScreen *screen;
+ gint request_width;
+ gint request_height;
+
+ ev_document_get_max_page_size (window->priv->document,
+ &document_width, &document_height);
+
+ request_width = (gint)(width_ratio * document_width + 0.5);
+ request_height = (gint)(height_ratio * document_height + 0.5);
+
+ screen = gtk_window_get_screen (GTK_WINDOW (window));
+ if (screen) {
+ request_width = MIN (request_width, gdk_screen_get_width (screen));
+ request_height = MIN (request_height, gdk_screen_get_height (screen));
+ }
+
+ if (request_width > 0 && request_height > 0) {
+ gtk_window_resize (GTK_WINDOW (window),
+ request_width,
+ request_height);
+ }
+ }
+}
+
+static void
+setup_size_from_metadata (EvWindow *window)
+{
+ gint width;
+ gint height;
+ gboolean maximized;
+ gint x;
+ gint y;
+
+ if (!window->priv->metadata)
+ return;
+
+ if (ev_metadata_get_boolean (window->priv->metadata, "window_maximized", &maximized)) {
+ if (maximized) {
+ gtk_window_maximize (GTK_WINDOW (window));
+ return;
+ } else {
+ gtk_window_unmaximize (GTK_WINDOW (window));
+ }
+ }
+
+ if (ev_metadata_get_int (window->priv->metadata, "window_x", &x) &&
+ ev_metadata_get_int (window->priv->metadata, "window_y", &y)) {
+ gtk_window_move (GTK_WINDOW (window), x, y);
+ }
+
+ if (ev_metadata_get_int (window->priv->metadata, "window_width", &width) &&
+ ev_metadata_get_int (window->priv->metadata, "window_height", &height)) {
+ gtk_window_resize (GTK_WINDOW (window), width, height);
+ }
+}
+
+static void
+setup_view_from_metadata (EvWindow *window)
+{
+ gboolean presentation;
+
+ if (!window->priv->metadata)
+ return;
+
+ /* Presentation */
+ if (ev_metadata_get_boolean (window->priv->metadata, "presentation", &presentation)) {
+ if (presentation) {
+ ev_window_run_presentation (window);
+ }
+ }
+}
+
+static void
+ev_window_clear_thumbnail_job (EvWindow *ev_window)
+{
+ if (ev_window->priv->thumbnail_job != NULL) {
+ if (!ev_job_is_finished (ev_window->priv->thumbnail_job))
+ ev_job_cancel (ev_window->priv->thumbnail_job);
+
+ g_signal_handlers_disconnect_by_func (ev_window->priv->thumbnail_job,
+ ev_window_set_icon_from_thumbnail,
+ ev_window);
+ g_object_unref (ev_window->priv->thumbnail_job);
+ ev_window->priv->thumbnail_job = NULL;
+ }
+}
+
+static void
+ev_window_set_icon_from_thumbnail (EvJobThumbnail *job,
+ EvWindow *ev_window)
+{
+ if (job->thumbnail) {
+ if (ev_document_model_get_inverted_colors (ev_window->priv->model))
+ ev_document_misc_invert_pixbuf (job->thumbnail);
+ gtk_window_set_icon (GTK_WINDOW (ev_window),
+ job->thumbnail);
+ }
+
+ ev_window_clear_thumbnail_job (ev_window);
+}
+
+static void
+ev_window_refresh_window_thumbnail (EvWindow *ev_window)
+{
+ gdouble page_width;
+ gdouble scale;
+ gint rotation;
+ EvDocument *document = ev_window->priv->document;
+
+ if (!EV_IS_DOCUMENT_THUMBNAILS (document) ||
+ ev_document_get_n_pages (document) <= 0 ||
+ !ev_document_check_dimensions (document)) {
+ return;
+ }
+
+ ev_window_clear_thumbnail_job (ev_window);
+
+ ev_document_get_page_size (document, 0, &page_width, NULL);
+ scale = 128. / page_width;
+ rotation = ev_document_model_get_rotation (ev_window->priv->model);
+
+ ev_window->priv->thumbnail_job = ev_job_thumbnail_new (document, 0, rotation, scale);
+ g_signal_connect (ev_window->priv->thumbnail_job, "finished",
+ G_CALLBACK (ev_window_set_icon_from_thumbnail),
+ ev_window);
+ ev_job_scheduler_push_job (ev_window->priv->thumbnail_job, EV_JOB_PRIORITY_NONE);
+}
+
+static void
+override_restrictions_changed (GSettings *settings,
+ gchar *key,
+ EvWindow *ev_window)
+{
+ ev_window_setup_action_sensitivity (ev_window);
+}
+
+#ifdef WITH_MATECONF
+static void
+lockdown_changed (MateConfClient *client,
+ guint cnxn_id,
+ MateConfEntry *entry,
+ EvWindow *ev_window)
+{
+ ev_window_setup_action_sensitivity (ev_window);
+}
+#endif /* WITH_MATECONF */
+
+static gboolean
+ev_window_setup_document (EvWindow *ev_window)
+{
+ const EvDocumentInfo *info;
+ EvDocument *document = ev_window->priv->document;
+ GtkAction *action;
+
+ ev_window->priv->setup_document_idle = 0;
+
+ ev_window_refresh_window_thumbnail (ev_window);
+
+ ev_window_set_page_mode (ev_window, PAGE_MODE_DOCUMENT);
+ ev_window_title_set_document (ev_window->priv->title, document);
+ ev_window_title_set_uri (ev_window->priv->title, ev_window->priv->uri);
+
+ if (!ev_window->priv->settings) {
+ ev_window->priv->settings = g_settings_new (GS_SCHEMA_NAME);
+ g_signal_connect (ev_window->priv->settings,
+ "changed::"GS_OVERRIDE_RESTRICTIONS,
+ G_CALLBACK (override_restrictions_changed),
+ ev_window);
+ }
+
+#ifdef WITH_MATECONF
+ if (!ev_window->priv->mateconf_client)
+ ev_window->priv->mateconf_client = mateconf_client_get_default ();
+ mateconf_client_add_dir (ev_window->priv->mateconf_client,
+ MATECONF_LOCKDOWN_DIR,
+ MATECONF_CLIENT_PRELOAD_ONELEVEL,
+ NULL);
+ mateconf_client_notify_add (ev_window->priv->mateconf_client,
+ MATECONF_LOCKDOWN_DIR,
+ (MateConfClientNotifyFunc)lockdown_changed,
+ ev_window, NULL, NULL);
+#endif /* WITH_MATECONF */
+
+ ev_window_setup_action_sensitivity (ev_window);
+
+ if (ev_window->priv->history)
+ g_object_unref (ev_window->priv->history);
+ ev_window->priv->history = ev_history_new ();
+ action = gtk_action_group_get_action (ev_window->priv->action_group, NAVIGATION_ACTION);
+ ev_navigation_action_set_history (EV_NAVIGATION_ACTION (action), ev_window->priv->history);
+
+ if (ev_window->priv->properties) {
+ ev_properties_dialog_set_document (EV_PROPERTIES_DIALOG (ev_window->priv->properties),
+ ev_window->priv->uri,
+ ev_window->priv->document);
+ }
+
+ info = ev_document_get_info (document);
+ update_document_mode (ev_window, info->mode);
+
+ if (EV_WINDOW_IS_PRESENTATION (ev_window))
+ gtk_widget_grab_focus (ev_window->priv->presentation_view);
+ else
+ gtk_widget_grab_focus (ev_window->priv->view);
+
+ return FALSE;
+}
+
+static void
+ev_window_set_document (EvWindow *ev_window, EvDocument *document)
+{
+ if (ev_window->priv->document == document)
+ return;
+
+ if (ev_window->priv->document)
+ g_object_unref (ev_window->priv->document);
+ ev_window->priv->document = g_object_ref (document);
+
+ ev_window_update_max_min_scale (ev_window);
+
+ ev_window_set_message_area (ev_window, NULL);
+
+ if (ev_document_get_n_pages (document) <= 0) {
+ ev_window_warning_message (ev_window, "%s",
+ _("The document contains no pages"));
+ } else if (!ev_document_check_dimensions (document)) {
+ ev_window_warning_message (ev_window, "%s",
+ _("The document contains only empty pages"));
+ }
+
+ if (EV_WINDOW_IS_PRESENTATION (ev_window)) {
+ gtk_widget_destroy (ev_window->priv->presentation_view);
+ ev_window->priv->presentation_view = NULL;
+ ev_window_run_presentation (ev_window);
+ }
+
+ if (ev_window->priv->setup_document_idle > 0)
+ g_source_remove (ev_window->priv->setup_document_idle);
+
+ ev_window->priv->setup_document_idle = g_idle_add ((GSourceFunc)ev_window_setup_document, ev_window);
+}
+
+static void
+ev_window_document_changed (EvWindow *ev_window,
+ gpointer user_data)
+{
+ ev_window_reload_document (ev_window, NULL);
+}
+
+static void
+ev_window_password_view_unlock (EvWindow *ev_window)
+{
+ const gchar *password;
+
+ g_assert (ev_window->priv->load_job);
+
+ password = ev_password_view_get_password (EV_PASSWORD_VIEW (ev_window->priv->password_view));
+ ev_job_load_set_password (EV_JOB_LOAD (ev_window->priv->load_job), password);
+ ev_job_scheduler_push_job (ev_window->priv->load_job, EV_JOB_PRIORITY_NONE);
+}
+
+static void
+ev_window_clear_load_job (EvWindow *ev_window)
+{
+ if (ev_window->priv->load_job != NULL) {
+ if (!ev_job_is_finished (ev_window->priv->load_job))
+ ev_job_cancel (ev_window->priv->load_job);
+
+ g_signal_handlers_disconnect_by_func (ev_window->priv->load_job, ev_window_load_job_cb, ev_window);
+ g_object_unref (ev_window->priv->load_job);
+ ev_window->priv->load_job = NULL;
+ }
+}
+
+static void
+ev_window_clear_reload_job (EvWindow *ev_window)
+{
+ if (ev_window->priv->reload_job != NULL) {
+ if (!ev_job_is_finished (ev_window->priv->reload_job))
+ ev_job_cancel (ev_window->priv->reload_job);
+
+ g_signal_handlers_disconnect_by_func (ev_window->priv->reload_job, ev_window_reload_job_cb, ev_window);
+ g_object_unref (ev_window->priv->reload_job);
+ ev_window->priv->reload_job = NULL;
+ }
+}
+
+static void
+ev_window_clear_local_uri (EvWindow *ev_window)
+{
+ if (ev_window->priv->local_uri) {
+ ev_tmp_uri_unlink (ev_window->priv->local_uri);
+ g_free (ev_window->priv->local_uri);
+ ev_window->priv->local_uri = NULL;
+ }
+}
+
+static void
+ev_window_handle_link (EvWindow *ev_window,
+ EvLinkDest *dest)
+{
+ if (dest) {
+ EvLink *link;
+ EvLinkAction *link_action;
+
+ link_action = ev_link_action_new_dest (dest);
+ link = ev_link_new (NULL, link_action);
+ ev_view_handle_link (EV_VIEW (ev_window->priv->view), link);
+ g_object_unref (link);
+ }
+}
+
+/* This callback will executed when load job will be finished.
+ *
+ * Since the flow of the error dialog is very confusing, we assume that both
+ * document and uri will go away after this function is called, and thus we need
+ * to ref/dup them. Additionally, it needs to clear
+ * ev_window->priv->password_{uri,document}, and thus people who call this
+ * function should _not_ necessarily expect those to exist after being
+ * called. */
+static void
+ev_window_load_job_cb (EvJob *job,
+ gpointer data)
+{
+ EvWindow *ev_window = EV_WINDOW (data);
+ EvDocument *document = EV_JOB (job)->document;
+ EvJobLoad *job_load = EV_JOB_LOAD (job);
+
+ g_assert (job_load->uri);
+
+ ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE);
+
+ /* Success! */
+ if (!ev_job_is_failed (job)) {
+ ev_document_model_set_document (ev_window->priv->model, document);
+
+#ifdef ENABLE_DBUS
+ ev_window_emit_doc_loaded (ev_window);
+#endif
+ setup_chrome_from_metadata (ev_window);
+ update_chrome_actions (ev_window);
+ setup_document_from_metadata (ev_window);
+ setup_view_from_metadata (ev_window);
+
+ ev_window_add_recent (ev_window, ev_window->priv->uri);
+
+ ev_window_title_set_type (ev_window->priv->title,
+ EV_WINDOW_TITLE_DOCUMENT);
+ if (job_load->password) {
+ GPasswordSave flags;
+
+ flags = ev_password_view_get_password_save_flags (
+ EV_PASSWORD_VIEW (ev_window->priv->password_view));
+ ev_keyring_save_password (ev_window->priv->uri,
+ job_load->password,
+ flags);
+ }
+
+ ev_window_handle_link (ev_window, ev_window->priv->dest);
+ /* Already unrefed by ev_link_action
+ * FIXME: link action should inc dest ref counting
+ * or not unref it at all
+ */
+ ev_window->priv->dest = NULL;
+
+ switch (ev_window->priv->window_mode) {
+ case EV_WINDOW_MODE_FULLSCREEN:
+ ev_window_run_fullscreen (ev_window);
+ break;
+ case EV_WINDOW_MODE_PRESENTATION:
+ ev_window_run_presentation (ev_window);
+ break;
+ default:
+ break;
+ }
+
+ if (ev_window->priv->search_string && EV_IS_DOCUMENT_FIND (document)) {
+ ev_window_cmd_edit_find (NULL, ev_window);
+ egg_find_bar_set_search_string (EGG_FIND_BAR (ev_window->priv->find_bar),
+ ev_window->priv->search_string);
+ }
+
+ g_free (ev_window->priv->search_string);
+ ev_window->priv->search_string = NULL;
+
+ /* Create a monitor for the document */
+ ev_window->priv->monitor = ev_file_monitor_new (ev_window->priv->uri);
+ g_signal_connect_swapped (ev_window->priv->monitor, "changed",
+ G_CALLBACK (ev_window_document_changed),
+ ev_window);
+
+ ev_window_clear_load_job (ev_window);
+ return;
+ }
+
+ if (g_error_matches (job->error, EV_DOCUMENT_ERROR, EV_DOCUMENT_ERROR_ENCRYPTED)) {
+ gchar *password;
+
+ setup_view_from_metadata (ev_window);
+
+ /* First look whether password is in keyring */
+ password = ev_keyring_lookup_password (ev_window->priv->uri);
+ if (password) {
+ if (job_load->password && strcmp (password, job_load->password) == 0) {
+ /* Password in kering is wrong */
+ ev_job_load_set_password (job_load, NULL);
+ /* FIXME: delete password from keyring? */
+ } else {
+ ev_job_load_set_password (job_load, password);
+ ev_job_scheduler_push_job (job, EV_JOB_PRIORITY_NONE);
+ g_free (password);
+ return;
+ }
+
+ g_free (password);
+ }
+
+ /* We need to ask the user for a password */
+ ev_window_title_set_uri (ev_window->priv->title,
+ ev_window->priv->uri);
+ ev_window_title_set_type (ev_window->priv->title,
+ EV_WINDOW_TITLE_PASSWORD);
+
+ ev_password_view_set_uri (EV_PASSWORD_VIEW (ev_window->priv->password_view),
+ job_load->uri);
+
+ ev_window_set_page_mode (ev_window, PAGE_MODE_PASSWORD);
+
+ ev_job_load_set_password (job_load, NULL);
+ ev_password_view_ask_password (EV_PASSWORD_VIEW (ev_window->priv->password_view));
+ } else {
+ ev_window_error_message (ev_window, job->error,
+ "%s", _("Unable to open document"));
+ ev_window_clear_load_job (ev_window);
+ }
+}
+
+static void
+ev_window_reload_job_cb (EvJob *job,
+ EvWindow *ev_window)
+{
+ GtkWidget *widget;
+
+ if (ev_job_is_failed (job)) {
+ ev_window_clear_reload_job (ev_window);
+ ev_window->priv->in_reload = FALSE;
+ if (ev_window->priv->dest) {
+ g_object_unref (ev_window->priv->dest);
+ ev_window->priv->dest = NULL;
+ }
+
+ return;
+ }
+
+ ev_document_model_set_document (ev_window->priv->model,
+ job->document);
+ if (ev_window->priv->dest) {
+ ev_window_handle_link (ev_window, ev_window->priv->dest);
+ /* Already unrefed by ev_link_action
+ * FIXME: link action should inc dest ref counting
+ * or not unref it at all
+ */
+ ev_window->priv->dest = NULL;
+ }
+
+ /* Restart the search after reloading */
+ widget = gtk_window_get_focus (GTK_WINDOW (ev_window));
+ if (widget && gtk_widget_get_ancestor (widget, EGG_TYPE_FIND_BAR)) {
+ find_bar_search_changed_cb (EGG_FIND_BAR (ev_window->priv->find_bar),
+ NULL, ev_window);
+ }
+
+ ev_window_clear_reload_job (ev_window);
+ ev_window->priv->in_reload = FALSE;
+}
+
+/**
+ * ev_window_get_uri:
+ * @ev_window: The instance of the #EvWindow.
+ *
+ * It returns the uri of the document showed in the #EvWindow.
+ *
+ * Returns: the uri of the document showed in the #EvWindow.
+ */
+const char *
+ev_window_get_uri (EvWindow *ev_window)
+{
+ return ev_window->priv->uri;
+}
+
+/**
+ * ev_window_close_dialogs:
+ * @ev_window: The window where dialogs will be closed.
+ *
+ * It looks for password, print and properties dialogs and closes them and
+ * frees them from memory. If there is any print job it does free it too.
+ */
+static void
+ev_window_close_dialogs (EvWindow *ev_window)
+{
+ if (ev_window->priv->print_dialog)
+ gtk_widget_destroy (ev_window->priv->print_dialog);
+ ev_window->priv->print_dialog = NULL;
+
+ if (ev_window->priv->properties)
+ gtk_widget_destroy (ev_window->priv->properties);
+ ev_window->priv->properties = NULL;
+}
+
+static void
+ev_window_clear_progress_idle (EvWindow *ev_window)
+{
+ if (ev_window->priv->progress_idle > 0)
+ g_source_remove (ev_window->priv->progress_idle);
+ ev_window->priv->progress_idle = 0;
+}
+
+static void
+reset_progress_idle (EvWindow *ev_window)
+{
+ ev_window->priv->progress_idle = 0;
+}
+
+static void
+ev_window_show_progress_message (EvWindow *ev_window,
+ guint interval,
+ GSourceFunc function)
+{
+ if (ev_window->priv->progress_idle > 0)
+ g_source_remove (ev_window->priv->progress_idle);
+ ev_window->priv->progress_idle =
+ g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
+ interval, function,
+ ev_window,
+ (GDestroyNotify)reset_progress_idle);
+}
+
+static void
+ev_window_reset_progress_cancellable (EvWindow *ev_window)
+{
+ if (ev_window->priv->progress_cancellable)
+ g_cancellable_reset (ev_window->priv->progress_cancellable);
+ else
+ ev_window->priv->progress_cancellable = g_cancellable_new ();
+}
+
+static void
+ev_window_progress_response_cb (EvProgressMessageArea *area,
+ gint response,
+ EvWindow *ev_window)
+{
+ if (response == GTK_RESPONSE_CANCEL)
+ g_cancellable_cancel (ev_window->priv->progress_cancellable);
+ ev_window_set_message_area (ev_window, NULL);
+}
+
+static gboolean
+show_loading_progress (EvWindow *ev_window)
+{
+ GtkWidget *area;
+ gchar *text;
+ gchar *display_name;
+
+ if (ev_window->priv->message_area)
+ return FALSE;
+
+ text = g_uri_unescape_string (ev_window->priv->uri, NULL);
+ display_name = g_markup_escape_text (text, -1);
+ g_free (text);
+ text = g_strdup_printf (_("Loading document from “%s”"),
+ display_name);
+
+ area = ev_progress_message_area_new (GTK_STOCK_OPEN,
+ text,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CLOSE,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ NULL);
+ g_signal_connect (area, "response",
+ G_CALLBACK (ev_window_progress_response_cb),
+ ev_window);
+ gtk_widget_show (area);
+ ev_window_set_message_area (ev_window, area);
+
+ g_free (text);
+ g_free (display_name);
+
+ return FALSE;
+}
+
+static void
+ev_window_load_remote_failed (EvWindow *ev_window,
+ GError *error)
+{
+ ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE);
+ ev_window->priv->in_reload = FALSE;
+ ev_window_error_message (ev_window, error,
+ "%s", _("Unable to open document"));
+ g_free (ev_window->priv->local_uri);
+ ev_window->priv->local_uri = NULL;
+ ev_window->priv->uri_mtime = 0;
+}
+
+static void
+set_uri_mtime (GFile *source,
+ GAsyncResult *async_result,
+ EvWindow *ev_window)
+{
+ GFileInfo *info;
+ GError *error = NULL;
+
+ info = g_file_query_info_finish (source, async_result, &error);
+
+ if (error) {
+ ev_window->priv->uri_mtime = 0;
+ g_error_free (error);
+ } else {
+ GTimeVal mtime;
+
+ g_file_info_get_modification_time (info, &mtime);
+ ev_window->priv->uri_mtime = mtime.tv_sec;
+ g_object_unref (info);
+ }
+
+ g_object_unref (source);
+}
+
+static void
+mount_volume_ready_cb (GFile *source,
+ GAsyncResult *async_result,
+ EvWindow *ev_window)
+{
+ GError *error = NULL;
+
+ g_file_mount_enclosing_volume_finish (source, async_result, &error);
+
+ if (error) {
+ ev_window_load_remote_failed (ev_window, error);
+ g_object_unref (source);
+ g_error_free (error);
+ } else {
+ /* Volume successfully mounted,
+ try opening the file again */
+ ev_window_load_file_remote (ev_window, source);
+ }
+}
+
+static void
+window_open_file_copy_ready_cb (GFile *source,
+ GAsyncResult *async_result,
+ EvWindow *ev_window)
+{
+ GError *error = NULL;
+
+ ev_window_clear_progress_idle (ev_window);
+ ev_window_set_message_area (ev_window, NULL);
+
+ g_file_copy_finish (source, async_result, &error);
+ if (!error) {
+ ev_job_scheduler_push_job (ev_window->priv->load_job, EV_JOB_PRIORITY_NONE);
+ g_file_query_info_async (source,
+ G_FILE_ATTRIBUTE_TIME_MODIFIED,
+ 0, G_PRIORITY_DEFAULT,
+ NULL,
+ (GAsyncReadyCallback)set_uri_mtime,
+ ev_window);
+ return;
+ }
+
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED)) {
+ GMountOperation *operation;
+
+ operation = gtk_mount_operation_new (GTK_WINDOW (ev_window));
+ g_file_mount_enclosing_volume (source,
+ G_MOUNT_MOUNT_NONE,
+ operation, NULL,
+ (GAsyncReadyCallback)mount_volume_ready_cb,
+ ev_window);
+ g_object_unref (operation);
+ } else if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+ ev_window_clear_load_job (ev_window);
+ ev_window_clear_local_uri (ev_window);
+ g_free (ev_window->priv->uri);
+ ev_window->priv->uri = NULL;
+ g_object_unref (source);
+
+ ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE);
+ } else {
+ ev_window_load_remote_failed (ev_window, error);
+ g_object_unref (source);
+ }
+
+ g_error_free (error);
+}
+
+static void
+window_open_file_copy_progress_cb (goffset n_bytes,
+ goffset total_bytes,
+ EvWindow *ev_window)
+{
+ gchar *status;
+ gdouble fraction;
+
+ if (!ev_window->priv->message_area)
+ return;
+
+ if (total_bytes <= 0)
+ return;
+
+ fraction = n_bytes / (gdouble)total_bytes;
+ status = g_strdup_printf (_("Downloading document (%d%%)"),
+ (gint)(fraction * 100));
+
+ ev_progress_message_area_set_status (EV_PROGRESS_MESSAGE_AREA (ev_window->priv->message_area),
+ status);
+ ev_progress_message_area_set_fraction (EV_PROGRESS_MESSAGE_AREA (ev_window->priv->message_area),
+ fraction);
+
+ g_free (status);
+}
+
+static void
+ev_window_load_file_remote (EvWindow *ev_window,
+ GFile *source_file)
+{
+ GFile *target_file;
+
+ if (!ev_window->priv->local_uri) {
+ char *base_name, *template;
+ GFile *tmp_file;
+ GError *err = NULL;
+
+ /* We'd like to keep extension of source uri since
+ * it helps to resolve some mime types, say cbz.
+ */
+ base_name = g_file_get_basename (source_file);
+ template = g_strdup_printf ("document.XXXXXX-%s", base_name);
+ g_free (base_name);
+
+ tmp_file = ev_mkstemp_file (template, &err);
+ g_free (template);
+ if (tmp_file == NULL) {
+ ev_window_error_message (ev_window, err,
+ "%s", _("Failed to load remote file."));
+ g_error_free (err);
+ return;
+ }
+
+ ev_window->priv->local_uri = g_file_get_uri (tmp_file);
+ g_object_unref (tmp_file);
+
+ ev_job_load_set_uri (EV_JOB_LOAD (ev_window->priv->load_job),
+ ev_window->priv->local_uri);
+ }
+
+ ev_window_reset_progress_cancellable (ev_window);
+
+ target_file = g_file_new_for_uri (ev_window->priv->local_uri);
+ g_file_copy_async (source_file, target_file,
+ G_FILE_COPY_OVERWRITE,
+ G_PRIORITY_DEFAULT,
+ ev_window->priv->progress_cancellable,
+ (GFileProgressCallback)window_open_file_copy_progress_cb,
+ ev_window,
+ (GAsyncReadyCallback)window_open_file_copy_ready_cb,
+ ev_window);
+ g_object_unref (target_file);
+
+ ev_window_show_progress_message (ev_window, 1,
+ (GSourceFunc)show_loading_progress);
+}
+
+void
+ev_window_open_uri (EvWindow *ev_window,
+ const char *uri,
+ EvLinkDest *dest,
+ EvWindowRunMode mode,
+ const gchar *search_string)
+{
+ GFile *source_file;
+
+ ev_window->priv->in_reload = FALSE;
+
+ if (ev_window->priv->uri &&
+ g_ascii_strcasecmp (ev_window->priv->uri, uri) == 0) {
+ ev_window_reload_document (ev_window, dest);
+ return;
+ }
+
+ if (ev_window->priv->monitor) {
+ g_object_unref (ev_window->priv->monitor);
+ ev_window->priv->monitor = NULL;
+ }
+
+ ev_window_close_dialogs (ev_window);
+ ev_window_clear_load_job (ev_window);
+ ev_window_clear_local_uri (ev_window);
+
+ ev_window->priv->window_mode = mode;
+
+ if (ev_window->priv->uri)
+ g_free (ev_window->priv->uri);
+ ev_window->priv->uri = g_strdup (uri);
+
+ if (ev_window->priv->metadata)
+ g_object_unref (ev_window->priv->metadata);
+
+ source_file = g_file_new_for_uri (uri);
+ if (!ev_file_is_temp (source_file) && ev_is_metadata_supported_for_file (source_file)) {
+ ev_window->priv->metadata = ev_metadata_new (source_file);
+ ev_window->priv->is_new_doc = ev_metadata_is_empty (ev_window->priv->metadata);
+ } else {
+ ev_window->priv->metadata = NULL;
+ }
+
+ if (ev_window->priv->search_string)
+ g_free (ev_window->priv->search_string);
+ ev_window->priv->search_string = search_string ?
+ g_strdup (search_string) : NULL;
+
+ if (ev_window->priv->dest)
+ g_object_unref (ev_window->priv->dest);
+ ev_window->priv->dest = dest ? g_object_ref (dest) : NULL;
+
+ setup_size_from_metadata (ev_window);
+ setup_model_from_metadata (ev_window);
+
+ ev_window->priv->load_job = ev_job_load_new (uri);
+ g_signal_connect (ev_window->priv->load_job,
+ "finished",
+ G_CALLBACK (ev_window_load_job_cb),
+ ev_window);
+
+ if (!g_file_is_native (source_file) && !ev_window->priv->local_uri) {
+ ev_window_load_file_remote (ev_window, source_file);
+ } else {
+ ev_view_set_loading (EV_VIEW (ev_window->priv->view), TRUE);
+ g_object_unref (source_file);
+ ev_job_scheduler_push_job (ev_window->priv->load_job, EV_JOB_PRIORITY_NONE);
+ }
+}
+
+void
+ev_window_open_document (EvWindow *ev_window,
+ EvDocument *document,
+ EvLinkDest *dest,
+ EvWindowRunMode mode,
+ const gchar *search_string)
+{
+ if (document == ev_window->priv->document)
+ return;
+
+ ev_window_close_dialogs (ev_window);
+ ev_window_clear_load_job (ev_window);
+ ev_window_clear_local_uri (ev_window);
+
+ if (ev_window->priv->monitor) {
+ g_object_unref (ev_window->priv->monitor);
+ ev_window->priv->monitor = NULL;
+ }
+
+ if (ev_window->priv->uri)
+ g_free (ev_window->priv->uri);
+ ev_window->priv->uri = g_strdup (ev_document_get_uri (document));
+
+ setup_size_from_metadata (ev_window);
+ setup_model_from_metadata (ev_window);
+
+ ev_document_model_set_document (ev_window->priv->model, document);
+
+ setup_document_from_metadata (ev_window);
+ setup_view_from_metadata (ev_window);
+
+ if (dest) {
+ EvLink *link;
+ EvLinkAction *link_action;
+
+ link_action = ev_link_action_new_dest (dest);
+ link = ev_link_new (NULL, link_action);
+ ev_view_handle_link (EV_VIEW (ev_window->priv->view), link);
+ /* FIXME: link action should inc dest ref counting
+ * or not unref it at all
+ */
+ g_object_ref (dest);
+ g_object_unref (link);
+ }
+
+ switch (mode) {
+ case EV_WINDOW_MODE_FULLSCREEN:
+ ev_window_run_fullscreen (ev_window);
+ break;
+ case EV_WINDOW_MODE_PRESENTATION:
+ ev_window_run_presentation (ev_window);
+ break;
+ default:
+ break;
+ }
+
+ if (search_string && EV_IS_DOCUMENT_FIND (document)) {
+ ev_window_cmd_edit_find (NULL, ev_window);
+ egg_find_bar_set_search_string (EGG_FIND_BAR (ev_window->priv->find_bar),
+ search_string);
+ }
+
+ /* Create a monitor for the document */
+ ev_window->priv->monitor = ev_file_monitor_new (ev_window->priv->uri);
+ g_signal_connect_swapped (ev_window->priv->monitor, "changed",
+ G_CALLBACK (ev_window_document_changed),
+ ev_window);
+}
+
+static void
+ev_window_reload_local (EvWindow *ev_window)
+{
+ const gchar *uri;
+
+ uri = ev_window->priv->local_uri ? ev_window->priv->local_uri : ev_window->priv->uri;
+ ev_window->priv->reload_job = ev_job_load_new (uri);
+ g_signal_connect (ev_window->priv->reload_job, "finished",
+ G_CALLBACK (ev_window_reload_job_cb),
+ ev_window);
+ ev_job_scheduler_push_job (ev_window->priv->reload_job, EV_JOB_PRIORITY_NONE);
+}
+
+static gboolean
+show_reloading_progress (EvWindow *ev_window)
+{
+ GtkWidget *area;
+ gchar *text;
+
+ if (ev_window->priv->message_area)
+ return FALSE;
+
+ text = g_strdup_printf (_("Reloading document from %s"),
+ ev_window->priv->uri);
+ area = ev_progress_message_area_new (GTK_STOCK_REFRESH,
+ text,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CLOSE,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ NULL);
+ g_signal_connect (area, "response",
+ G_CALLBACK (ev_window_progress_response_cb),
+ ev_window);
+ gtk_widget_show (area);
+ ev_window_set_message_area (ev_window, area);
+ g_free (text);
+
+ return FALSE;
+}
+
+static void
+reload_remote_copy_ready_cb (GFile *remote,
+ GAsyncResult *async_result,
+ EvWindow *ev_window)
+{
+ GError *error = NULL;
+
+ ev_window_clear_progress_idle (ev_window);
+
+ g_file_copy_finish (remote, async_result, &error);
+ if (error) {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ ev_window_error_message (ev_window, error,
+ "%s", _("Failed to reload document."));
+ g_error_free (error);
+ } else {
+ ev_window_reload_local (ev_window);
+ }
+
+ g_object_unref (remote);
+}
+
+static void
+reload_remote_copy_progress_cb (goffset n_bytes,
+ goffset total_bytes,
+ EvWindow *ev_window)
+{
+ gchar *status;
+ gdouble fraction;
+
+ if (!ev_window->priv->message_area)
+ return;
+
+ if (total_bytes <= 0)
+ return;
+
+ fraction = n_bytes / (gdouble)total_bytes;
+ status = g_strdup_printf (_("Downloading document (%d%%)"),
+ (gint)(fraction * 100));
+
+ ev_progress_message_area_set_status (EV_PROGRESS_MESSAGE_AREA (ev_window->priv->message_area),
+ status);
+ ev_progress_message_area_set_fraction (EV_PROGRESS_MESSAGE_AREA (ev_window->priv->message_area),
+ fraction);
+
+ g_free (status);
+}
+
+static void
+query_remote_uri_mtime_cb (GFile *remote,
+ GAsyncResult *async_result,
+ EvWindow *ev_window)
+{
+ GFileInfo *info;
+ GTimeVal mtime;
+ GError *error = NULL;
+
+ info = g_file_query_info_finish (remote, async_result, &error);
+ if (error) {
+ g_error_free (error);
+ g_object_unref (remote);
+ ev_window_reload_local (ev_window);
+
+ return;
+ }
+
+ g_file_info_get_modification_time (info, &mtime);
+ if (ev_window->priv->uri_mtime != mtime.tv_sec) {
+ GFile *target_file;
+
+ /* Remote file has changed */
+ ev_window->priv->uri_mtime = mtime.tv_sec;
+
+ ev_window_reset_progress_cancellable (ev_window);
+
+ target_file = g_file_new_for_uri (ev_window->priv->local_uri);
+ g_file_copy_async (remote, target_file,
+ G_FILE_COPY_OVERWRITE,
+ G_PRIORITY_DEFAULT,
+ ev_window->priv->progress_cancellable,
+ (GFileProgressCallback)reload_remote_copy_progress_cb,
+ ev_window,
+ (GAsyncReadyCallback)reload_remote_copy_ready_cb,
+ ev_window);
+ g_object_unref (target_file);
+ ev_window_show_progress_message (ev_window, 1,
+ (GSourceFunc)show_reloading_progress);
+ } else {
+ g_object_unref (remote);
+ ev_window_reload_local (ev_window);
+ }
+
+ g_object_unref (info);
+}
+
+static void
+ev_window_reload_remote (EvWindow *ev_window)
+{
+ GFile *remote;
+
+ remote = g_file_new_for_uri (ev_window->priv->uri);
+ /* Reload the remote uri only if it has changed */
+ g_file_query_info_async (remote,
+ G_FILE_ATTRIBUTE_TIME_MODIFIED,
+ 0, G_PRIORITY_DEFAULT,
+ NULL,
+ (GAsyncReadyCallback)query_remote_uri_mtime_cb,
+ ev_window);
+}
+
+static void
+ev_window_reload_document (EvWindow *ev_window,
+ EvLinkDest *dest)
+{
+ gint page;
+
+
+ ev_window_clear_reload_job (ev_window);
+ ev_window->priv->in_reload = TRUE;
+
+ page = ev_document_model_get_page (ev_window->priv->model);
+
+ if (ev_window->priv->dest)
+ g_object_unref (ev_window->priv->dest);
+ ev_window->priv->dest = dest ? g_object_ref (dest) : NULL;
+
+ if (ev_window->priv->local_uri) {
+ ev_window_reload_remote (ev_window);
+ } else {
+ ev_window_reload_local (ev_window);
+ }
+}
+
+static void
+file_open_dialog_response_cb (GtkWidget *chooser,
+ gint response_id,
+ EvWindow *ev_window)
+{
+ if (response_id == GTK_RESPONSE_OK) {
+ GSList *uris;
+ gchar *uri;
+
+ uris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (chooser));
+
+ ev_application_open_uri_list (EV_APP, uris,
+ gtk_window_get_screen (GTK_WINDOW (ev_window)),
+ gtk_get_current_event_time ());
+
+ g_slist_foreach (uris, (GFunc)g_free, NULL);
+ g_slist_free (uris);
+
+ uri = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (chooser));
+ ev_application_set_filechooser_uri (EV_APP,
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ uri);
+ g_free (uri);
+ }
+
+ gtk_widget_destroy (chooser);
+}
+
+static void
+ev_window_cmd_file_open (GtkAction *action, EvWindow *window)
+{
+ GtkWidget *chooser;
+ const gchar *default_uri;
+ gchar *parent_uri = NULL;
+
+ chooser = gtk_file_chooser_dialog_new (_("Open Document"),
+ GTK_WINDOW (window),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_OK,
+ NULL);
+
+ ev_document_factory_add_filters (chooser, NULL);
+ gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (chooser), TRUE);
+ gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (chooser), FALSE);
+
+ default_uri = ev_application_get_filechooser_uri (EV_APP, GTK_FILE_CHOOSER_ACTION_OPEN);
+ if (!default_uri && window->priv->uri) {
+ GFile *file, *parent;
+
+ file = g_file_new_for_uri (window->priv->uri);
+ parent = g_file_get_parent (file);
+ if (parent) {
+ parent_uri = g_file_get_uri (parent);
+ default_uri = parent_uri;
+ g_object_unref (parent);
+ }
+ g_object_unref (file);
+ }
+
+ if (default_uri) {
+ gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (chooser), default_uri);
+ } else {
+ const gchar *folder;
+
+ folder = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS);
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser),
+ folder ? folder : g_get_home_dir ());
+ }
+ g_free (parent_uri);
+
+ g_signal_connect (chooser, "response",
+ G_CALLBACK (file_open_dialog_response_cb),
+ window);
+
+ gtk_widget_show (chooser);
+}
+
+static void
+ev_window_open_copy_at_dest (EvWindow *window,
+ EvLinkDest *dest)
+{
+ EvWindow *new_window = EV_WINDOW (ev_window_new ());
+
+ ev_window_n_copies++;
+
+ if (window->priv->metadata)
+ new_window->priv->metadata = g_object_ref (window->priv->metadata);
+ ev_window_open_document (new_window,
+ window->priv->document,
+ dest, 0, NULL);
+ gtk_window_present (GTK_WINDOW (new_window));
+}
+
+static void
+ev_window_cmd_file_open_copy (GtkAction *action, EvWindow *window)
+{
+ ev_window_open_copy_at_dest (window, NULL);
+}
+
+static void
+ev_window_cmd_recent_file_activate (GtkAction *action,
+ EvWindow *window)
+{
+ GtkRecentInfo *info;
+ const gchar *uri;
+
+ info = g_object_get_data (G_OBJECT (action), "gtk-recent-info");
+ g_assert (info != NULL);
+
+ uri = gtk_recent_info_get_uri (info);
+
+ ev_application_open_uri_at_dest (EV_APP, uri,
+ gtk_window_get_screen (GTK_WINDOW (window)),
+ NULL, 0, NULL, gtk_get_current_event_time ());
+}
+
+static void
+ev_window_open_recent_action_item_activated (EvOpenRecentAction *action,
+ const gchar *uri,
+ EvWindow *window)
+{
+ ev_application_open_uri_at_dest (EV_APP, uri,
+ gtk_window_get_screen (GTK_WINDOW (window)),
+ NULL, 0, NULL, gtk_get_current_event_time ());
+}
+
+static void
+ev_window_add_recent (EvWindow *window, const char *filename)
+{
+ gtk_recent_manager_add_item (window->priv->recent_manager, filename);
+}
+
+static gint
+compare_recent_items (GtkRecentInfo *a, GtkRecentInfo *b)
+{
+ gboolean has_ev_a, has_ev_b;
+ const gchar *evince = g_get_application_name ();
+
+ has_ev_a = gtk_recent_info_has_application (a, evince);
+ has_ev_b = gtk_recent_info_has_application (b, evince);
+
+ if (has_ev_a && has_ev_b) {
+ time_t time_a, time_b;
+
+ time_a = gtk_recent_info_get_modified (a);
+ time_b = gtk_recent_info_get_modified (b);
+
+ return (time_b - time_a);
+ } else if (has_ev_a) {
+ return -1;
+ } else if (has_ev_b) {
+ return 1;
+ }
+
+ return 0;
+}
+
+/*
+ * Doubles underscore to avoid spurious menu accels.
+ */
+static gchar *
+ev_window_get_recent_file_label (gint index, const gchar *filename)
+{
+ GString *str;
+ gint length;
+ const gchar *p;
+ const gchar *end;
+ gboolean is_rtl;
+
+ is_rtl = (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL);
+
+ g_return_val_if_fail (filename != NULL, NULL);
+
+ length = strlen (filename);
+ str = g_string_sized_new (length + 10);
+ g_string_printf (str, "%s_%d. ", is_rtl ? "\xE2\x80\x8F" : "", index);
+
+ p = filename;
+ end = filename + length;
+
+ while (p != end) {
+ const gchar *next;
+ next = g_utf8_next_char (p);
+
+ switch (*p) {
+ case '_':
+ g_string_append (str, "__");
+ break;
+ default:
+ g_string_append_len (str, p, next - p);
+ break;
+ }
+
+ p = next;
+ }
+
+ return g_string_free (str, FALSE);
+}
+
+static void
+ev_window_recent_action_connect_proxy_cb (GtkActionGroup *action_group,
+ GtkAction *action,
+ GtkWidget *proxy,
+ gpointer data)
+{
+ GtkLabel *label;
+
+ if (!GTK_IS_MENU_ITEM (proxy))
+ return;
+
+ label = GTK_LABEL (gtk_bin_get_child (GTK_BIN (proxy)));
+
+ gtk_label_set_ellipsize (label, PANGO_ELLIPSIZE_MIDDLE);
+ gtk_label_set_max_width_chars (label, MAX_RECENT_ITEM_LEN);
+}
+
+static void
+ev_window_setup_recent (EvWindow *ev_window)
+{
+ GList *items, *l;
+ guint n_items = 0;
+ const gchar *evince = g_get_application_name ();
+ static guint i = 0;
+
+ if (ev_window->priv->recent_ui_id > 0) {
+ gtk_ui_manager_remove_ui (ev_window->priv->ui_manager,
+ ev_window->priv->recent_ui_id);
+ gtk_ui_manager_ensure_update (ev_window->priv->ui_manager);
+ }
+ ev_window->priv->recent_ui_id = gtk_ui_manager_new_merge_id (ev_window->priv->ui_manager);
+
+ if (ev_window->priv->recent_action_group) {
+ gtk_ui_manager_remove_action_group (ev_window->priv->ui_manager,
+ ev_window->priv->recent_action_group);
+ g_object_unref (ev_window->priv->recent_action_group);
+ }
+ ev_window->priv->recent_action_group = gtk_action_group_new ("RecentFilesActions");
+ g_signal_connect (ev_window->priv->recent_action_group, "connect-proxy",
+ G_CALLBACK (ev_window_recent_action_connect_proxy_cb), NULL);
+
+ gtk_ui_manager_insert_action_group (ev_window->priv->ui_manager,
+ ev_window->priv->recent_action_group, -1);
+
+ items = gtk_recent_manager_get_items (ev_window->priv->recent_manager);
+ items = g_list_sort (items, (GCompareFunc) compare_recent_items);
+
+ for (l = items; l && l->data; l = g_list_next (l)) {
+ GtkRecentInfo *info;
+ GtkAction *action;
+ gchar *action_name;
+ gchar *label;
+ const gchar *mime_type;
+ gchar *content_type;
+ GIcon *icon = NULL;
+
+ info = (GtkRecentInfo *) l->data;
+
+ if (!gtk_recent_info_has_application (info, evince) ||
+ (gtk_recent_info_is_local (info) && !gtk_recent_info_exists (info)))
+ continue;
+
+ action_name = g_strdup_printf ("RecentFile%u", i++);
+ label = ev_window_get_recent_file_label (
+ n_items + 1, gtk_recent_info_get_display_name (info));
+
+ mime_type = gtk_recent_info_get_mime_type (info);
+ content_type = g_content_type_from_mime_type (mime_type);
+ if (content_type != NULL) {
+ icon = g_content_type_get_icon (content_type);
+ g_free (content_type);
+ }
+
+ action = g_object_new (GTK_TYPE_ACTION,
+ "name", action_name,
+ "label", label,
+ "gicon", icon,
+ "always-show-image", TRUE,
+ NULL);
+
+ g_object_set_data_full (G_OBJECT (action),
+ "gtk-recent-info",
+ gtk_recent_info_ref (info),
+ (GDestroyNotify) gtk_recent_info_unref);
+
+ g_signal_connect (action, "activate",
+ G_CALLBACK (ev_window_cmd_recent_file_activate),
+ (gpointer) ev_window);
+
+ gtk_action_group_add_action (ev_window->priv->recent_action_group,
+ action);
+ g_object_unref (action);
+
+ gtk_ui_manager_add_ui (ev_window->priv->ui_manager,
+ ev_window->priv->recent_ui_id,
+ "/MainMenu/FileMenu/RecentFilesMenu",
+ label,
+ action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+ g_free (action_name);
+ g_free (label);
+ if (icon != NULL)
+ g_object_unref (icon);
+
+ if (++n_items == 5)
+ break;
+ }
+
+ g_list_foreach (items, (GFunc) gtk_recent_info_unref, NULL);
+ g_list_free (items);
+}
+
+static gboolean
+show_saving_progress (GFile *dst)
+{
+ EvWindow *ev_window;
+ GtkWidget *area;
+ gchar *text;
+ gchar *uri;
+ EvSaveType save_type;
+
+ ev_window = EV_WINDOW (g_object_get_data (G_OBJECT (dst), "ev-window"));
+ ev_window->priv->progress_idle = 0;
+
+ if (ev_window->priv->message_area)
+ return FALSE;
+
+ save_type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (dst), "save-type"));
+ uri = g_file_get_uri (dst);
+ switch (save_type) {
+ case EV_SAVE_DOCUMENT:
+ text = g_strdup_printf (_("Saving document to %s"), uri);
+ break;
+ case EV_SAVE_ATTACHMENT:
+ text = g_strdup_printf (_("Saving attachment to %s"), uri);
+ break;
+ case EV_SAVE_IMAGE:
+ text = g_strdup_printf (_("Saving image to %s"), uri);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+ g_free (uri);
+ area = ev_progress_message_area_new (GTK_STOCK_SAVE,
+ text,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CLOSE,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ NULL);
+ g_signal_connect (area, "response",
+ G_CALLBACK (ev_window_progress_response_cb),
+ ev_window);
+ gtk_widget_show (area);
+ ev_window_set_message_area (ev_window, area);
+ g_free (text);
+
+ return FALSE;
+}
+
+static void
+window_save_file_copy_ready_cb (GFile *src,
+ GAsyncResult *async_result,
+ GFile *dst)
+{
+ EvWindow *ev_window;
+ GError *error = NULL;
+
+ ev_window = EV_WINDOW (g_object_get_data (G_OBJECT (dst), "ev-window"));
+ ev_window_clear_progress_idle (ev_window);
+
+ if (g_file_copy_finish (src, async_result, &error)) {
+ ev_tmp_file_unlink (src);
+ return;
+ }
+
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+ gchar *name;
+
+ name = g_file_get_basename (dst);
+ ev_window_error_message (ev_window, error,
+ _("The file could not be saved as “%s”."),
+ name);
+ g_free (name);
+ }
+ ev_tmp_file_unlink (src);
+ g_error_free (error);
+}
+
+static void
+window_save_file_copy_progress_cb (goffset n_bytes,
+ goffset total_bytes,
+ GFile *dst)
+{
+ EvWindow *ev_window;
+ EvSaveType save_type;
+ gchar *status;
+ gdouble fraction;
+
+ ev_window = EV_WINDOW (g_object_get_data (G_OBJECT (dst), "ev-window"));
+
+ if (!ev_window->priv->message_area)
+ return;
+
+ if (total_bytes <= 0)
+ return;
+
+ fraction = n_bytes / (gdouble)total_bytes;
+ save_type = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (dst), "save-type"));
+
+ switch (save_type) {
+ case EV_SAVE_DOCUMENT:
+ status = g_strdup_printf (_("Uploading document (%d%%)"),
+ (gint)(fraction * 100));
+ break;
+ case EV_SAVE_ATTACHMENT:
+ status = g_strdup_printf (_("Uploading attachment (%d%%)"),
+ (gint)(fraction * 100));
+ break;
+ case EV_SAVE_IMAGE:
+ status = g_strdup_printf (_("Uploading image (%d%%)"),
+ (gint)(fraction * 100));
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ ev_progress_message_area_set_status (EV_PROGRESS_MESSAGE_AREA (ev_window->priv->message_area),
+ status);
+ ev_progress_message_area_set_fraction (EV_PROGRESS_MESSAGE_AREA (ev_window->priv->message_area),
+ fraction);
+
+ g_free (status);
+}
+
+static void
+ev_window_save_remote (EvWindow *ev_window,
+ EvSaveType save_type,
+ GFile *src,
+ GFile *dst)
+{
+ ev_window_reset_progress_cancellable (ev_window);
+ g_object_set_data (G_OBJECT (dst), "ev-window", ev_window);
+ g_object_set_data (G_OBJECT (dst), "save-type", GINT_TO_POINTER (save_type));
+ g_file_copy_async (src, dst,
+ G_FILE_COPY_OVERWRITE,
+ G_PRIORITY_DEFAULT,
+ ev_window->priv->progress_cancellable,
+ (GFileProgressCallback)window_save_file_copy_progress_cb,
+ dst,
+ (GAsyncReadyCallback)window_save_file_copy_ready_cb,
+ dst);
+ ev_window->priv->progress_idle =
+ g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
+ 1,
+ (GSourceFunc)show_saving_progress,
+ dst,
+ NULL);
+}
+
+static void
+ev_window_clear_save_job (EvWindow *ev_window)
+{
+ if (ev_window->priv->save_job != NULL) {
+ if (!ev_job_is_finished (ev_window->priv->save_job))
+ ev_job_cancel (ev_window->priv->save_job);
+
+ g_signal_handlers_disconnect_by_func (ev_window->priv->save_job,
+ ev_window_save_job_cb,
+ ev_window);
+ g_object_unref (ev_window->priv->save_job);
+ ev_window->priv->save_job = NULL;
+ }
+}
+
+static void
+ev_window_save_job_cb (EvJob *job,
+ EvWindow *window)
+{
+ if (ev_job_is_failed (job)) {
+ ev_window_error_message (window, job->error,
+ _("The file could not be saved as “%s”."),
+ EV_JOB_SAVE (job)->uri);
+ } else {
+ ev_window_add_recent (window, EV_JOB_SAVE (job)->uri);
+ }
+
+ ev_window_clear_save_job (window);
+}
+
+static void
+file_save_dialog_response_cb (GtkWidget *fc,
+ gint response_id,
+ EvWindow *ev_window)
+{
+ gchar *uri;
+ GFile *file, *parent;
+
+ if (response_id != GTK_RESPONSE_OK) {
+ gtk_widget_destroy (fc);
+ return;
+ }
+
+ uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (fc));
+ file = g_file_new_for_uri (uri);
+ parent = g_file_get_parent (file);
+ g_object_unref (file);
+ if (parent) {
+ gchar *folder_uri;
+
+ folder_uri = g_file_get_uri (parent);
+ ev_application_set_filechooser_uri (EV_APP,
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ folder_uri);
+ g_free (folder_uri);
+ g_object_unref (parent);
+ }
+
+ /* FIXME: remote copy should be done here rather than in the save job,
+ * so that we can track progress and cancel the operation
+ */
+
+ ev_window_clear_save_job (ev_window);
+ ev_window->priv->save_job = ev_job_save_new (ev_window->priv->document,
+ uri, ev_window->priv->uri);
+ g_signal_connect (ev_window->priv->save_job, "finished",
+ G_CALLBACK (ev_window_save_job_cb),
+ ev_window);
+ /* The priority doesn't matter for this job */
+ ev_job_scheduler_push_job (ev_window->priv->save_job, EV_JOB_PRIORITY_NONE);
+
+ g_free (uri);
+ gtk_widget_destroy (fc);
+}
+
+static void
+ev_window_cmd_save_as (GtkAction *action, EvWindow *ev_window)
+{
+ GtkWidget *fc;
+ gchar *base_name;
+ GFile *file;
+ const gchar *default_uri;
+
+ fc = gtk_file_chooser_dialog_new (
+ _("Save a Copy"),
+ GTK_WINDOW (ev_window), GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_SAVE, GTK_RESPONSE_OK,
+ NULL);
+
+ ev_document_factory_add_filters (fc, ev_window->priv->document);
+ gtk_dialog_set_default_response (GTK_DIALOG (fc), GTK_RESPONSE_OK);
+ gtk_dialog_set_alternative_button_order (GTK_DIALOG (fc),
+ GTK_RESPONSE_OK,
+ GTK_RESPONSE_CANCEL,
+ -1);
+
+ gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (fc), FALSE);
+ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (fc), TRUE);
+ file = g_file_new_for_uri (ev_window->priv->uri);
+ base_name = g_file_get_basename (file);
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (fc), base_name);
+
+ default_uri = ev_application_get_filechooser_uri (EV_APP, GTK_FILE_CHOOSER_ACTION_SAVE);
+ if (default_uri) {
+ gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (fc), default_uri);
+ } else {
+ const gchar *folder;
+
+ folder = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS);
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fc),
+ folder ? folder : g_get_home_dir ());
+ }
+
+ g_object_unref (file);
+ g_free (base_name);
+
+ g_signal_connect (fc, "response",
+ G_CALLBACK (file_save_dialog_response_cb),
+ ev_window);
+
+ gtk_widget_show (fc);
+}
+
+static GKeyFile *
+get_print_settings_file (void)
+{
+ GKeyFile *print_settings_file;
+ gchar *filename;
+ GError *error = NULL;
+
+ print_settings_file = g_key_file_new ();
+
+ filename = g_build_filename (ev_application_get_dot_dir (EV_APP, FALSE),
+ EV_PRINT_SETTINGS_FILE, NULL);
+ if (!g_key_file_load_from_file (print_settings_file,
+ filename,
+ G_KEY_FILE_KEEP_COMMENTS |
+ G_KEY_FILE_KEEP_TRANSLATIONS,
+ &error)) {
+
+ /* Don't warn if the file simply doesn't exist */
+ if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
+ g_warning ("%s", error->message);
+
+ g_error_free (error);
+ }
+
+ g_free (filename);
+
+ return print_settings_file;
+}
+
+static void
+save_print_setting_file (GKeyFile *key_file)
+{
+ gchar *filename;
+ gchar *data;
+ gsize data_length;
+ GError *error = NULL;
+
+ filename = g_build_filename (ev_application_get_dot_dir (EV_APP, TRUE),
+ EV_PRINT_SETTINGS_FILE, NULL);
+ data = g_key_file_to_data (key_file, &data_length, NULL);
+ g_file_set_contents (filename, data, data_length, &error);
+ if (error) {
+ g_warning ("Failed to save print settings: %s", error->message);
+ g_error_free (error);
+ }
+ g_free (data);
+ g_free (filename);
+}
+
+static void
+ev_window_save_print_settings (EvWindow *window,
+ GtkPrintSettings *print_settings)
+{
+ GKeyFile *key_file;
+ gint i;
+
+ key_file = get_print_settings_file ();
+ gtk_print_settings_to_key_file (print_settings, key_file, EV_PRINT_SETTINGS_GROUP);
+
+ /* Save print settings that are specific to the document */
+ for (i = 0; i < G_N_ELEMENTS (document_print_settings); i++) {
+ /* Remove it from global settings */
+ g_key_file_remove_key (key_file, EV_PRINT_SETTINGS_GROUP,
+ document_print_settings[i], NULL);
+
+ if (window->priv->metadata) {
+ const gchar *value;
+
+ value = gtk_print_settings_get (print_settings,
+ document_print_settings[i]);
+ ev_metadata_set_string (window->priv->metadata,
+ document_print_settings[i], value);
+ }
+ }
+
+ save_print_setting_file (key_file);
+ g_key_file_free (key_file);
+}
+
+static void
+ev_window_save_print_page_setup (EvWindow *window,
+ GtkPageSetup *page_setup)
+{
+ GKeyFile *key_file;
+
+ key_file = get_print_settings_file ();
+ gtk_page_setup_to_key_file (page_setup, key_file, EV_PAGE_SETUP_GROUP);
+
+ /* Do not save document settings in global file */
+ g_key_file_remove_key (key_file, EV_PAGE_SETUP_GROUP,
+ "page-setup-orientation", NULL);
+ g_key_file_remove_key (key_file, EV_PAGE_SETUP_GROUP,
+ "page-setup-margin-top", NULL);
+ g_key_file_remove_key (key_file, EV_PAGE_SETUP_GROUP,
+ "page-setup-margin-bottom", NULL);
+ g_key_file_remove_key (key_file, EV_PAGE_SETUP_GROUP,
+ "page-setup-margin-left", NULL);
+ g_key_file_remove_key (key_file, EV_PAGE_SETUP_GROUP,
+ "page-setup-margin-right", NULL);
+
+ save_print_setting_file (key_file);
+ g_key_file_free (key_file);
+
+ if (!window->priv->metadata)
+ return;
+
+ /* Save page setup options that are specific to the document */
+ ev_metadata_set_int (window->priv->metadata, "page-setup-orientation",
+ gtk_page_setup_get_orientation (page_setup));
+ ev_metadata_set_double (window->priv->metadata, "page-setup-margin-top",
+ gtk_page_setup_get_top_margin (page_setup, GTK_UNIT_MM));
+ ev_metadata_set_double (window->priv->metadata, "page-setup-margin-bottom",
+ gtk_page_setup_get_bottom_margin (page_setup, GTK_UNIT_MM));
+ ev_metadata_set_double (window->priv->metadata, "page-setup-margin-left",
+ gtk_page_setup_get_left_margin (page_setup, GTK_UNIT_MM));
+ ev_metadata_set_double (window->priv->metadata, "page-setup-margin-right",
+ gtk_page_setup_get_right_margin (page_setup, GTK_UNIT_MM));
+}
+
+static void
+ev_window_load_print_settings_from_metadata (EvWindow *window,
+ GtkPrintSettings *print_settings)
+{
+ gint i;
+
+ if (!window->priv->metadata)
+ return;
+
+ /* Load print setting that are specific to the document */
+ for (i = 0; i < G_N_ELEMENTS (document_print_settings); i++) {
+ gchar *value = NULL;
+
+ ev_metadata_get_string (window->priv->metadata,
+ document_print_settings[i], &value);
+ gtk_print_settings_set (print_settings,
+ document_print_settings[i], value);
+ }
+}
+
+static void
+ev_window_load_print_page_setup_from_metadata (EvWindow *window,
+ GtkPageSetup *page_setup)
+{
+ gint int_value;
+ gdouble double_value;
+ GtkPaperSize *paper_size = gtk_page_setup_get_paper_size (page_setup);
+
+ /* Load page setup options that are specific to the document */
+ if (window->priv->metadata &&
+ ev_metadata_get_int (window->priv->metadata, "page-setup-orientation", &int_value)) {
+ gtk_page_setup_set_orientation (page_setup, int_value);
+ } else {
+ gtk_page_setup_set_orientation (page_setup, GTK_PAGE_ORIENTATION_PORTRAIT);
+ }
+
+ if (window->priv->metadata &&
+ ev_metadata_get_double (window->priv->metadata, "page-setup-margin-top", &double_value)) {
+ gtk_page_setup_set_top_margin (page_setup, double_value, GTK_UNIT_MM);
+ } else {
+ gtk_page_setup_set_top_margin (page_setup,
+ gtk_paper_size_get_default_top_margin (paper_size, GTK_UNIT_MM),
+ GTK_UNIT_MM);
+ }
+
+ if (window->priv->metadata &&
+ ev_metadata_get_double (window->priv->metadata, "page-setup-margin-bottom", &double_value)) {
+ gtk_page_setup_set_bottom_margin (page_setup, double_value, GTK_UNIT_MM);
+ } else {
+ gtk_page_setup_set_bottom_margin (page_setup,
+ gtk_paper_size_get_default_bottom_margin (paper_size, GTK_UNIT_MM),
+ GTK_UNIT_MM);
+ }
+
+ if (window->priv->metadata &&
+ ev_metadata_get_double (window->priv->metadata, "page-setup-margin-left", &double_value)) {
+ gtk_page_setup_set_left_margin (page_setup, double_value, GTK_UNIT_MM);
+ } else {
+ gtk_page_setup_set_left_margin (page_setup,
+ gtk_paper_size_get_default_left_margin (paper_size, GTK_UNIT_MM),
+ GTK_UNIT_MM);
+ }
+
+ if (window->priv->metadata &&
+ ev_metadata_get_double (window->priv->metadata, "page-setup-margin-right", &double_value)) {
+ gtk_page_setup_set_right_margin (page_setup, double_value, GTK_UNIT_MM);
+ } else {
+ gtk_page_setup_set_right_margin (page_setup,
+ gtk_paper_size_get_default_right_margin (paper_size, GTK_UNIT_MM),
+ GTK_UNIT_MM);
+ }
+}
+
+static GtkPrintSettings *
+get_print_settings (GKeyFile *key_file)
+{
+ GtkPrintSettings *print_settings;
+
+ print_settings = g_key_file_has_group (key_file, EV_PRINT_SETTINGS_GROUP) ?
+ gtk_print_settings_new_from_key_file (key_file, EV_PRINT_SETTINGS_GROUP, NULL) :
+ gtk_print_settings_new ();
+
+ return print_settings ? print_settings : gtk_print_settings_new ();
+}
+
+static GtkPageSetup *
+get_print_page_setup (GKeyFile *key_file)
+{
+ GtkPageSetup *page_setup;
+
+ page_setup = g_key_file_has_group (key_file, EV_PAGE_SETUP_GROUP) ?
+ gtk_page_setup_new_from_key_file (key_file, EV_PAGE_SETUP_GROUP, NULL) :
+ gtk_page_setup_new ();
+
+ return page_setup ? page_setup : gtk_page_setup_new ();
+}
+
+static void
+ev_window_print_cancel (EvWindow *ev_window)
+{
+ EvPrintOperation *op;
+
+ if (!ev_window->priv->print_queue)
+ return;
+
+ while ((op = g_queue_peek_tail (ev_window->priv->print_queue))) {
+ ev_print_operation_cancel (op);
+ }
+}
+
+static void
+ev_window_print_update_pending_jobs_message (EvWindow *ev_window,
+ gint n_jobs)
+{
+ gchar *text = NULL;
+
+ if (!EV_IS_PROGRESS_MESSAGE_AREA (ev_window->priv->message_area) ||
+ !ev_window->priv->print_queue)
+ return;
+
+ if (n_jobs == 0) {
+ ev_window_set_message_area (ev_window, NULL);
+ return;
+ }
+
+ if (n_jobs > 1) {
+ text = g_strdup_printf (ngettext ("%d pending job in queue",
+ "%d pending jobs in queue",
+ n_jobs - 1), n_jobs - 1);
+ }
+
+ ev_message_area_set_secondary_text (EV_MESSAGE_AREA (ev_window->priv->message_area),
+ text);
+ g_free (text);
+}
+
+static gboolean
+destroy_window (GtkWidget *window)
+{
+ gtk_widget_destroy (window);
+
+ return FALSE;
+}
+
+static void
+ev_window_print_operation_done (EvPrintOperation *op,
+ GtkPrintOperationResult result,
+ EvWindow *ev_window)
+{
+ gint n_jobs;
+
+ switch (result) {
+ case GTK_PRINT_OPERATION_RESULT_APPLY: {
+ GtkPrintSettings *print_settings;
+
+ print_settings = ev_print_operation_get_print_settings (op);
+ ev_window_save_print_settings (ev_window, print_settings);
+
+ if (ev_print_operation_get_embed_page_setup (op)) {
+ GtkPageSetup *page_setup;
+
+ page_setup = ev_print_operation_get_default_page_setup (op);
+ ev_window_save_print_page_setup (ev_window, page_setup);
+ }
+ }
+
+ break;
+ case GTK_PRINT_OPERATION_RESULT_ERROR: {
+ GtkWidget *dialog;
+ GError *error = NULL;
+
+
+ ev_print_operation_get_error (op, &error);
+
+ /* The message area is already used by
+ * the printing progress, so it's better to
+ * use a popup dialog in this case
+ */
+ dialog = gtk_message_dialog_new (GTK_WINDOW (ev_window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ "%s", _("Failed to print document"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ "%s", error->message);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy),
+ NULL);
+ gtk_widget_show (dialog);
+
+ g_error_free (error);
+ }
+ break;
+ case GTK_PRINT_OPERATION_RESULT_CANCEL:
+ default:
+ break;
+ }
+
+ g_queue_remove (ev_window->priv->print_queue, op);
+ g_object_unref (op);
+ n_jobs = g_queue_get_length (ev_window->priv->print_queue);
+ ev_window_print_update_pending_jobs_message (ev_window, n_jobs);
+
+ if (n_jobs == 0 && ev_window->priv->close_after_print)
+ g_idle_add ((GSourceFunc)destroy_window,
+ ev_window);
+}
+
+static void
+ev_window_print_progress_response_cb (EvProgressMessageArea *area,
+ gint response,
+ EvWindow *ev_window)
+{
+ if (response == GTK_RESPONSE_CANCEL) {
+ EvPrintOperation *op;
+
+ op = g_queue_peek_tail (ev_window->priv->print_queue);
+ ev_print_operation_cancel (op);
+ } else {
+ gtk_widget_hide (GTK_WIDGET (area));
+ }
+}
+
+static void
+ev_window_print_operation_status_changed (EvPrintOperation *op,
+ EvWindow *ev_window)
+{
+ const gchar *status;
+ gdouble fraction;
+
+ status = ev_print_operation_get_status (op);
+ fraction = ev_print_operation_get_progress (op);
+
+ if (!ev_window->priv->message_area) {
+ GtkWidget *area;
+ const gchar *job_name;
+ gchar *text;
+
+ job_name = ev_print_operation_get_job_name (op);
+ text = g_strdup_printf (_("Printing job “%s”"), job_name);
+
+ area = ev_progress_message_area_new (GTK_STOCK_PRINT,
+ text,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CLOSE,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ NULL);
+ ev_window_print_update_pending_jobs_message (ev_window, 1);
+ g_signal_connect (area, "response",
+ G_CALLBACK (ev_window_print_progress_response_cb),
+ ev_window);
+ gtk_widget_show (area);
+ ev_window_set_message_area (ev_window, area);
+ g_free (text);
+ }
+
+ ev_progress_message_area_set_status (EV_PROGRESS_MESSAGE_AREA (ev_window->priv->message_area),
+ status);
+ ev_progress_message_area_set_fraction (EV_PROGRESS_MESSAGE_AREA (ev_window->priv->message_area),
+ fraction);
+}
+
+static void
+ev_window_print_operation_begin_print (EvPrintOperation *op,
+ EvWindow *ev_window)
+{
+ if (!ev_window->priv->print_queue)
+ ev_window->priv->print_queue = g_queue_new ();
+
+ g_queue_push_head (ev_window->priv->print_queue, op);
+ ev_window_print_update_pending_jobs_message (ev_window,
+ g_queue_get_length (ev_window->priv->print_queue));
+}
+
+void
+ev_window_print_range (EvWindow *ev_window,
+ gint first_page,
+ gint last_page)
+{
+ EvPrintOperation *op;
+ GKeyFile *print_settings_file;
+ GtkPrintSettings *print_settings;
+ GtkPageSetup *print_page_setup;
+ gint current_page;
+ gint document_last_page;
+
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+ g_return_if_fail (ev_window->priv->document != NULL);
+
+ if (!ev_window->priv->print_queue)
+ ev_window->priv->print_queue = g_queue_new ();
+
+ op = ev_print_operation_new (ev_window->priv->document);
+ if (!op) {
+ g_warning ("%s", "Printing is not supported for document\n");
+ return;
+ }
+
+ g_signal_connect (op, "begin_print",
+ G_CALLBACK (ev_window_print_operation_begin_print),
+ (gpointer)ev_window);
+ g_signal_connect (op, "status_changed",
+ G_CALLBACK (ev_window_print_operation_status_changed),
+ (gpointer)ev_window);
+ g_signal_connect (op, "done",
+ G_CALLBACK (ev_window_print_operation_done),
+ (gpointer)ev_window);
+
+ current_page = ev_document_model_get_page (ev_window->priv->model);
+ document_last_page = ev_document_get_n_pages (ev_window->priv->document);
+
+ print_settings_file = get_print_settings_file ();
+
+ print_settings = get_print_settings (print_settings_file);
+ ev_window_load_print_settings_from_metadata (ev_window, print_settings);
+
+ print_page_setup = get_print_page_setup (print_settings_file);
+ ev_window_load_print_page_setup_from_metadata (ev_window, print_page_setup);
+
+ if (first_page != 1 || last_page != document_last_page) {
+ GtkPageRange range;
+
+ /* Ranges in GtkPrint are 0 - N */
+ range.start = first_page - 1;
+ range.end = last_page - 1;
+
+ gtk_print_settings_set_print_pages (print_settings,
+ GTK_PRINT_PAGES_RANGES);
+ gtk_print_settings_set_page_ranges (print_settings,
+ &range, 1);
+ }
+
+ ev_print_operation_set_job_name (op, gtk_window_get_title (GTK_WINDOW (ev_window)));
+ ev_print_operation_set_current_page (op, current_page);
+ ev_print_operation_set_print_settings (op, print_settings);
+ ev_print_operation_set_default_page_setup (op, print_page_setup);
+#ifdef WITH_MATECONF
+ ev_print_operation_set_embed_page_setup (op, !mateconf_client_get_bool (ev_window->priv->mateconf_client,
+ MATECONF_LOCKDOWN_PRINT_SETUP,
+ NULL));
+#else
+ ev_print_operation_set_embed_page_setup (op, TRUE);
+#endif
+
+ g_object_unref (print_settings);
+ g_object_unref (print_page_setup);
+ g_key_file_free (print_settings_file);
+
+ ev_print_operation_run (op, GTK_WINDOW (ev_window));
+}
+
+static void
+ev_window_print (EvWindow *window)
+{
+ ev_window_print_range (window, 1,
+ ev_document_get_n_pages (window->priv->document));
+}
+
+static void
+ev_window_cmd_file_print (GtkAction *action, EvWindow *ev_window)
+{
+ ev_window_print (ev_window);
+}
+
+static void
+ev_window_cmd_file_properties (GtkAction *action, EvWindow *ev_window)
+{
+ if (ev_window->priv->properties == NULL) {
+ ev_window->priv->properties = ev_properties_dialog_new ();
+ ev_properties_dialog_set_document (EV_PROPERTIES_DIALOG (ev_window->priv->properties),
+ ev_window->priv->uri,
+ ev_window->priv->document);
+ g_object_add_weak_pointer (G_OBJECT (ev_window->priv->properties),
+ (gpointer) &(ev_window->priv->properties));
+ gtk_window_set_transient_for (GTK_WINDOW (ev_window->priv->properties),
+ GTK_WINDOW (ev_window));
+ }
+
+ ev_document_fc_mutex_lock ();
+ gtk_widget_show (ev_window->priv->properties);
+ ev_document_fc_mutex_unlock ();
+}
+
+static void
+document_modified_confirmation_dialog_response (GtkDialog *dialog,
+ gint response,
+ EvWindow *ev_window)
+{
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+
+ switch (response) {
+ case GTK_RESPONSE_YES:
+ ev_window_cmd_save_as (NULL, ev_window);
+ break;
+ case GTK_RESPONSE_NO:
+ gtk_widget_destroy (GTK_WIDGET (ev_window));
+ break;
+ case GTK_RESPONSE_CANCEL:
+ default:
+ break;
+ }
+}
+
+static gboolean
+ev_window_check_document_modified (EvWindow *ev_window)
+{
+ EvDocument *document = ev_window->priv->document;
+ GtkWidget *dialog;
+ gchar *text, *markup;
+ const gchar *secondary_text;
+
+ if (!document)
+ return FALSE;
+
+ if (EV_IS_DOCUMENT_FORMS (document) &&
+ ev_document_forms_document_is_modified (EV_DOCUMENT_FORMS (document))) {
+ secondary_text = _("Document contains form fields that have been filled out. "
+ "If you don't save a copy, changes will be permanently lost.");
+ } else if (EV_IS_DOCUMENT_ANNOTATIONS (document) &&
+ ev_document_annotations_document_is_modified (EV_DOCUMENT_ANNOTATIONS (document))) {
+ secondary_text = _("Document contains new or modified annotations. "
+ "If you don't save a copy, changes will be permanently lost.");
+ } else {
+ return FALSE;
+ }
+
+
+ text = g_markup_printf_escaped (_("Save a copy of document “%s” before closing?"),
+ gtk_window_get_title (GTK_WINDOW (ev_window)));
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (ev_window),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ NULL);
+
+ markup = g_strdup_printf ("<b>%s</b>", text);
+ g_free (text);
+
+ gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (dialog), markup);
+ g_free (markup);
+
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ "%s", secondary_text);
+
+ gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+ _("Close _without Saving"),
+ GTK_RESPONSE_NO,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ _("Save a _Copy"),
+ GTK_RESPONSE_YES,
+ NULL);
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
+ gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
+ GTK_RESPONSE_YES,
+ GTK_RESPONSE_NO,
+ GTK_RESPONSE_CANCEL,
+ -1);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (document_modified_confirmation_dialog_response),
+ ev_window);
+ gtk_widget_show (dialog);
+
+ return TRUE;
+}
+
+static void
+print_jobs_confirmation_dialog_response (GtkDialog *dialog,
+ gint response,
+ EvWindow *ev_window)
+{
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+
+ switch (response) {
+ case GTK_RESPONSE_YES:
+ if (!ev_window->priv->print_queue ||
+ g_queue_is_empty (ev_window->priv->print_queue))
+ gtk_widget_destroy (GTK_WIDGET (ev_window));
+ else
+ ev_window->priv->close_after_print = TRUE;
+ break;
+ case GTK_RESPONSE_NO:
+ ev_window->priv->close_after_print = TRUE;
+ if (ev_window->priv->print_queue &&
+ !g_queue_is_empty (ev_window->priv->print_queue)) {
+ gtk_widget_set_sensitive (GTK_WIDGET (ev_window), FALSE);
+ ev_window_print_cancel (ev_window);
+ } else {
+ gtk_widget_destroy (GTK_WIDGET (ev_window));
+ }
+ break;
+ case GTK_RESPONSE_CANCEL:
+ default:
+ ev_window->priv->close_after_print = FALSE;
+ }
+}
+
+static gboolean
+ev_window_check_print_queue (EvWindow *ev_window)
+{
+ GtkWidget *dialog;
+ gchar *text, *markup;
+ gint n_print_jobs;
+
+ n_print_jobs = ev_window->priv->print_queue ?
+ g_queue_get_length (ev_window->priv->print_queue) : 0;
+
+ if (n_print_jobs == 0)
+ return FALSE;
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (ev_window),
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ NULL);
+ if (n_print_jobs == 1) {
+ EvPrintOperation *op;
+ const gchar *job_name;
+
+ op = g_queue_peek_tail (ev_window->priv->print_queue);
+ job_name = ev_print_operation_get_job_name (op);
+
+ text = g_strdup_printf (_("Wait until print job “%s” finishes before closing?"),
+ job_name);
+ } else {
+ text = g_strdup_printf (_("There are %d print jobs active. "
+ "Wait until print finishes before closing?"),
+ n_print_jobs);
+ }
+
+ markup = g_strdup_printf ("<b>%s</b>", text);
+ g_free (text);
+
+ gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (dialog), markup);
+ g_free (markup);
+
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s",
+ _("If you close the window, pending print "
+ "jobs will not be printed."));
+
+ gtk_dialog_add_buttons (GTK_DIALOG (dialog),
+ _("Cancel _print and Close"),
+ GTK_RESPONSE_NO,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ _("Close _after Printing"),
+ GTK_RESPONSE_YES,
+ NULL);
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES);
+ gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
+ GTK_RESPONSE_YES,
+ GTK_RESPONSE_NO,
+ GTK_RESPONSE_CANCEL,
+ -1);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (print_jobs_confirmation_dialog_response),
+ ev_window);
+ gtk_widget_show (dialog);
+
+ return TRUE;
+}
+
+static gboolean
+ev_window_close (EvWindow *ev_window)
+{
+ if (EV_WINDOW_IS_PRESENTATION (ev_window)) {
+ gint current_page;
+
+ /* Save current page */
+ current_page = ev_view_presentation_get_current_page (
+ EV_VIEW_PRESENTATION (ev_window->priv->presentation_view));
+ ev_document_model_set_page (ev_window->priv->model, current_page);
+ }
+
+ if (ev_window_check_document_modified (ev_window))
+ return FALSE;
+
+ if (ev_window_check_print_queue (ev_window))
+ return FALSE;
+
+ return TRUE;
+}
+
+static void
+ev_window_cmd_file_close_window (GtkAction *action, EvWindow *ev_window)
+{
+ if (ev_window_close (ev_window))
+ gtk_widget_destroy (GTK_WIDGET (ev_window));
+}
+
+static void
+ev_window_cmd_focus_page_selector (GtkAction *act, EvWindow *window)
+{
+ GtkAction *action;
+
+ update_chrome_flag (window, EV_CHROME_RAISE_TOOLBAR, TRUE);
+ ev_window_set_action_sensitive (window, "ViewToolbar", FALSE);
+ update_chrome_visibility (window);
+
+ action = gtk_action_group_get_action (window->priv->action_group,
+ PAGE_SELECTOR_ACTION);
+ ev_page_action_grab_focus (EV_PAGE_ACTION (action));
+}
+
+static void
+ev_window_cmd_scroll_forward (GtkAction *action, EvWindow *window)
+{
+ ev_view_scroll (EV_VIEW (window->priv->view), GTK_SCROLL_PAGE_FORWARD, FALSE);
+}
+
+static void
+ev_window_cmd_scroll_backward (GtkAction *action, EvWindow *window)
+{
+ ev_view_scroll (EV_VIEW (window->priv->view), GTK_SCROLL_PAGE_BACKWARD, FALSE);
+}
+
+static void
+ev_window_cmd_continuous (GtkAction *action, EvWindow *ev_window)
+{
+ gboolean continuous;
+
+ ev_window_stop_presentation (ev_window, TRUE);
+ continuous = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+ ev_document_model_set_continuous (ev_window->priv->model, continuous);
+}
+
+static void
+ev_window_cmd_dual (GtkAction *action, EvWindow *ev_window)
+{
+ gboolean dual_page;
+
+ ev_window_stop_presentation (ev_window, TRUE);
+ dual_page = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+ ev_document_model_set_dual_page (ev_window->priv->model, dual_page);
+}
+
+static void
+ev_window_cmd_view_best_fit (GtkAction *action, EvWindow *ev_window)
+{
+ ev_window_stop_presentation (ev_window, TRUE);
+
+ if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
+ ev_document_model_set_sizing_mode (ev_window->priv->model, EV_SIZING_BEST_FIT);
+ } else {
+ ev_document_model_set_sizing_mode (ev_window->priv->model, EV_SIZING_FREE);
+ }
+ ev_window_update_actions (ev_window);
+}
+
+static void
+ev_window_cmd_view_page_width (GtkAction *action, EvWindow *ev_window)
+{
+ ev_window_stop_presentation (ev_window, TRUE);
+
+ if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
+ ev_document_model_set_sizing_mode (ev_window->priv->model, EV_SIZING_FIT_WIDTH);
+ } else {
+ ev_document_model_set_sizing_mode (ev_window->priv->model, EV_SIZING_FREE);
+ }
+ ev_window_update_actions (ev_window);
+}
+
+
+static void
+ev_window_cmd_edit_select_all (GtkAction *action, EvWindow *ev_window)
+{
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+ ev_view_select_all (EV_VIEW (ev_window->priv->view));
+}
+
+static void
+ev_window_cmd_edit_find (GtkAction *action, EvWindow *ev_window)
+{
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+ if (ev_window->priv->document == NULL || !EV_IS_DOCUMENT_FIND (ev_window->priv->document)) {
+ g_error ("Find action should be insensitive since document doesn't support find");
+ return;
+ }
+
+ update_chrome_flag (ev_window, EV_CHROME_FINDBAR, TRUE);
+ update_chrome_visibility (ev_window);
+ gtk_widget_grab_focus (ev_window->priv->find_bar);
+}
+
+static void
+ev_window_cmd_edit_find_next (GtkAction *action, EvWindow *ev_window)
+{
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+ update_chrome_flag (ev_window, EV_CHROME_FINDBAR, TRUE);
+ update_chrome_visibility (ev_window);
+ gtk_widget_grab_focus (ev_window->priv->find_bar);
+ ev_view_find_next (EV_VIEW (ev_window->priv->view));
+}
+
+static void
+ev_window_cmd_edit_find_previous (GtkAction *action, EvWindow *ev_window)
+{
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+ update_chrome_flag (ev_window, EV_CHROME_FINDBAR, TRUE);
+ update_chrome_visibility (ev_window);
+ gtk_widget_grab_focus (ev_window->priv->find_bar);
+ ev_view_find_previous (EV_VIEW (ev_window->priv->view));
+}
+
+static void
+ev_window_cmd_edit_copy (GtkAction *action, EvWindow *ev_window)
+{
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+ ev_view_copy (EV_VIEW (ev_window->priv->view));
+}
+
+static void
+ev_window_sidebar_position_change_cb (GObject *object,
+ GParamSpec *pspec,
+ EvWindow *ev_window)
+{
+ if (ev_window->priv->metadata && !ev_window_is_empty (ev_window))
+ ev_metadata_set_int (ev_window->priv->metadata, "sidebar_size",
+ gtk_paned_get_position (GTK_PANED (object)));
+}
+
+static void
+ev_window_update_fullscreen_action (EvWindow *window)
+{
+ GtkAction *action;
+
+ action = gtk_action_group_get_action (window->priv->action_group, "ViewFullscreen");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_fullscreen), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ ev_document_model_get_fullscreen (window->priv->model));
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_fullscreen), window);
+}
+
+static void
+fullscreen_toolbar_setup_item_properties (GtkUIManager *ui_manager)
+{
+ GtkWidget *item;
+
+ item = gtk_ui_manager_get_widget (ui_manager, "/FullscreenToolbar/GoPreviousPage");
+ g_object_set (item, "is-important", FALSE, NULL);
+
+ item = gtk_ui_manager_get_widget (ui_manager, "/FullscreenToolbar/GoNextPage");
+ g_object_set (item, "is-important", FALSE, NULL);
+
+ item = gtk_ui_manager_get_widget (ui_manager, "/FullscreenToolbar/StartPresentation");
+ g_object_set (item, "is-important", TRUE, NULL);
+
+ item = gtk_ui_manager_get_widget (ui_manager, "/FullscreenToolbar/LeaveFullscreen");
+ g_object_set (item, "is-important", TRUE, NULL);
+}
+
+static void
+fullscreen_toolbar_remove_shadow (GtkWidget *toolbar)
+{
+ static gboolean done = FALSE;
+
+ if (!done) {
+ gtk_rc_parse_string (
+ "\n"
+ " style \"fullscreen-toolbar-style\"\n"
+ " {\n"
+ " GtkToolbar::shadow-type=GTK_SHADOW_NONE\n"
+ " }\n"
+ "\n"
+ " widget \"*.fullscreen-toolbar\" style \"fullscreen-toolbar-style\"\n"
+ "\n");
+ done = TRUE;
+ }
+
+ gtk_widget_set_name (toolbar, "fullscreen-toolbar");
+}
+
+static void
+ev_window_run_fullscreen (EvWindow *window)
+{
+ gboolean fullscreen_window = TRUE;
+
+ if (ev_document_model_get_fullscreen (window->priv->model))
+ return;
+
+ if (!window->priv->fullscreen_toolbar) {
+ window->priv->fullscreen_toolbar =
+ gtk_ui_manager_get_widget (window->priv->ui_manager,
+ "/FullscreenToolbar");
+
+ gtk_toolbar_set_style (GTK_TOOLBAR (window->priv->fullscreen_toolbar),
+ GTK_TOOLBAR_BOTH_HORIZ);
+ fullscreen_toolbar_remove_shadow (window->priv->fullscreen_toolbar);
+ fullscreen_toolbar_setup_item_properties (window->priv->ui_manager);
+
+ gtk_box_pack_start (GTK_BOX (window->priv->main_box),
+ window->priv->fullscreen_toolbar,
+ FALSE, FALSE, 0);
+ gtk_box_reorder_child (GTK_BOX (window->priv->main_box),
+ window->priv->fullscreen_toolbar, 1);
+ }
+
+ if (EV_WINDOW_IS_PRESENTATION (window)) {
+ ev_window_stop_presentation (window, FALSE);
+ fullscreen_window = FALSE;
+ }
+
+ g_object_set (G_OBJECT (window->priv->scrolled_window),
+ "shadow-type", GTK_SHADOW_NONE,
+ NULL);
+
+ ev_document_model_set_fullscreen (window->priv->model, TRUE);
+ ev_window_update_fullscreen_action (window);
+
+ /* If the user doesn't have the main toolbar he/she won't probably want
+ * the toolbar in fullscreen mode. See bug #483048
+ */
+ update_chrome_flag (window, EV_CHROME_FULLSCREEN_TOOLBAR,
+ (window->priv->chrome & EV_CHROME_TOOLBAR) != 0);
+ update_chrome_visibility (window);
+
+ if (fullscreen_window)
+ gtk_window_fullscreen (GTK_WINDOW (window));
+ gtk_widget_grab_focus (window->priv->view);
+
+ if (window->priv->metadata && !ev_window_is_empty (window))
+ ev_metadata_set_boolean (window->priv->metadata, "fullscreen", TRUE);
+}
+
+static void
+ev_window_stop_fullscreen (EvWindow *window,
+ gboolean unfullscreen_window)
+{
+ if (!ev_document_model_get_fullscreen (window->priv->model))
+ return;
+
+ g_object_set (G_OBJECT (window->priv->scrolled_window),
+ "shadow-type", GTK_SHADOW_IN,
+ NULL);
+
+ ev_document_model_set_fullscreen (window->priv->model, FALSE);
+ ev_window_update_fullscreen_action (window);
+ update_chrome_flag (window, EV_CHROME_FULLSCREEN_TOOLBAR, FALSE);
+ update_chrome_visibility (window);
+ if (unfullscreen_window)
+ gtk_window_unfullscreen (GTK_WINDOW (window));
+
+ if (window->priv->metadata && !ev_window_is_empty (window))
+ ev_metadata_set_boolean (window->priv->metadata, "fullscreen", FALSE);
+}
+
+static void
+ev_window_cmd_view_fullscreen (GtkAction *action, EvWindow *window)
+{
+ gboolean fullscreen;
+
+ fullscreen = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+ if (fullscreen) {
+ ev_window_run_fullscreen (window);
+ } else {
+ ev_window_stop_fullscreen (window, TRUE);
+ }
+}
+
+static void
+ev_window_update_presentation_action (EvWindow *window)
+{
+ GtkAction *action;
+
+ action = gtk_action_group_get_action (window->priv->action_group, "ViewPresentation");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_presentation), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ EV_WINDOW_IS_PRESENTATION (window));
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_presentation), window);
+}
+
+static void
+ev_window_view_presentation_finished (EvWindow *window)
+{
+ ev_window_stop_presentation (window, TRUE);
+}
+
+static void
+ev_window_run_presentation (EvWindow *window)
+{
+ gboolean fullscreen_window = TRUE;
+ guint current_page;
+ guint rotation;
+ gboolean inverted_colors;
+
+ if (EV_WINDOW_IS_PRESENTATION (window))
+ return;
+
+ if (ev_document_model_get_fullscreen (window->priv->model)) {
+ ev_window_stop_fullscreen (window, FALSE);
+ fullscreen_window = FALSE;
+ }
+
+ current_page = ev_document_model_get_page (window->priv->model);
+ rotation = ev_document_model_get_rotation (window->priv->model);
+ inverted_colors = ev_document_model_get_inverted_colors (window->priv->model);
+ window->priv->presentation_view = ev_view_presentation_new (window->priv->document,
+ current_page,
+ rotation,
+ inverted_colors);
+ g_signal_connect_swapped (window->priv->presentation_view, "finished",
+ G_CALLBACK (ev_window_view_presentation_finished),
+ window);
+
+ gtk_box_pack_start (GTK_BOX (window->priv->main_box),
+ window->priv->presentation_view,
+ TRUE, TRUE, 0);
+
+ gtk_widget_hide (window->priv->hpaned);
+ ev_window_update_presentation_action (window);
+ update_chrome_visibility (window);
+
+ gtk_widget_grab_focus (window->priv->presentation_view);
+ if (fullscreen_window)
+ gtk_window_fullscreen (GTK_WINDOW (window));
+
+ gtk_widget_show (window->priv->presentation_view);
+
+ ev_application_screensaver_disable (EV_APP);
+
+ if (window->priv->metadata && !ev_window_is_empty (window))
+ ev_metadata_set_boolean (window->priv->metadata, "presentation", TRUE);
+}
+
+static void
+ev_window_stop_presentation (EvWindow *window,
+ gboolean unfullscreen_window)
+{
+ guint current_page;
+
+ if (!EV_WINDOW_IS_PRESENTATION (window))
+ return;
+
+ current_page = ev_view_presentation_get_current_page (EV_VIEW_PRESENTATION (window->priv->presentation_view));
+ ev_document_model_set_page (window->priv->model, current_page);
+
+ gtk_container_remove (GTK_CONTAINER (window->priv->main_box),
+ window->priv->presentation_view);
+ window->priv->presentation_view = NULL;
+
+ gtk_widget_show (window->priv->hpaned);
+ ev_window_update_presentation_action (window);
+ update_chrome_visibility (window);
+ if (unfullscreen_window)
+ gtk_window_unfullscreen (GTK_WINDOW (window));
+
+ gtk_widget_grab_focus (window->priv->view);
+
+ ev_application_screensaver_enable (EV_APP);
+
+ if (window->priv->metadata && !ev_window_is_empty (window))
+ ev_metadata_set_boolean (window->priv->metadata, "presentation", FALSE);
+}
+
+static void
+ev_window_cmd_view_presentation (GtkAction *action, EvWindow *window)
+{
+ gboolean presentation;
+
+ presentation = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+ if (presentation) {
+ ev_window_run_presentation (window);
+ }
+}
+
+static void
+ev_window_setup_gtk_settings (EvWindow *window)
+{
+ GtkSettings *settings;
+ GdkScreen *screen;
+ gchar *menubar_accel_accel;
+
+ screen = gtk_window_get_screen (GTK_WINDOW (window));
+ settings = gtk_settings_get_for_screen (screen);
+
+ g_object_get (settings,
+ "gtk-menu-bar-accel", &menubar_accel_accel,
+ NULL);
+ if (menubar_accel_accel != NULL && menubar_accel_accel[0] != '\0') {
+ gtk_accelerator_parse (menubar_accel_accel,
+ &window->priv->menubar_accel_keyval,
+ &window->priv->menubar_accel_modifier);
+ if (window->priv->menubar_accel_keyval == 0) {
+ g_warning ("Failed to parse menu bar accelerator '%s'\n",
+ menubar_accel_accel);
+ }
+ } else {
+ window->priv->menubar_accel_keyval = 0;
+ window->priv->menubar_accel_modifier = 0;
+ }
+
+ g_free (menubar_accel_accel);
+}
+
+static void
+ev_window_update_max_min_scale (EvWindow *window)
+{
+ gdouble dpi;
+ GtkAction *action;
+ gdouble min_width, min_height;
+ gdouble width, height;
+ gdouble max_scale;
+ gint rotation = ev_document_model_get_rotation (window->priv->model);
+
+ if (!window->priv->document)
+ return;
+
+ dpi = get_screen_dpi (window) / 72.0;
+
+ ev_document_get_min_page_size (window->priv->document, &min_width, &min_height);
+ width = (rotation == 0 || rotation == 180) ? min_width : min_height;
+ height = (rotation == 0 || rotation == 180) ? min_height : min_width;
+ max_scale = sqrt (PAGE_CACHE_SIZE / (width * dpi * 4 * height * dpi));
+
+ action = gtk_action_group_get_action (window->priv->action_group,
+ ZOOM_CONTROL_ACTION);
+ ephy_zoom_action_set_max_zoom_level (EPHY_ZOOM_ACTION (action), max_scale * dpi);
+
+ ev_document_model_set_min_scale (window->priv->model, MIN_SCALE * dpi);
+ ev_document_model_set_max_scale (window->priv->model, max_scale * dpi);
+}
+
+static void
+ev_window_screen_changed (GtkWidget *widget,
+ GdkScreen *old_screen)
+{
+ EvWindow *window = EV_WINDOW (widget);
+ GdkScreen *screen;
+
+ screen = gtk_widget_get_screen (widget);
+ if (screen == old_screen)
+ return;
+
+ ev_window_setup_gtk_settings (window);
+ ev_window_update_max_min_scale (window);
+
+ if (GTK_WIDGET_CLASS (ev_window_parent_class)->screen_changed) {
+ GTK_WIDGET_CLASS (ev_window_parent_class)->screen_changed (widget, old_screen);
+ }
+}
+
+static gboolean
+ev_window_state_event (GtkWidget *widget,
+ GdkEventWindowState *event)
+{
+ EvWindow *window = EV_WINDOW (widget);
+
+ if (GTK_WIDGET_CLASS (ev_window_parent_class)->window_state_event) {
+ GTK_WIDGET_CLASS (ev_window_parent_class)->window_state_event (widget, event);
+ }
+
+ if ((event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) == 0)
+ return FALSE;
+
+ if (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) {
+ if (ev_document_model_get_fullscreen (window->priv->model) || EV_WINDOW_IS_PRESENTATION (window))
+ return FALSE;
+
+ ev_window_run_fullscreen (window);
+ } else {
+ if (ev_document_model_get_fullscreen (window->priv->model))
+ ev_window_stop_fullscreen (window, FALSE);
+ else if (EV_WINDOW_IS_PRESENTATION (window))
+ ev_window_stop_presentation (window, FALSE);
+ }
+
+ return FALSE;
+}
+
+static void
+ev_window_set_page_mode (EvWindow *window,
+ EvWindowPageMode page_mode)
+{
+ GtkWidget *child = NULL;
+ GtkWidget *real_child;
+
+ if (window->priv->page_mode == page_mode)
+ return;
+
+ window->priv->page_mode = page_mode;
+
+ switch (page_mode) {
+ case PAGE_MODE_DOCUMENT:
+ child = window->priv->view;
+ break;
+ case PAGE_MODE_PASSWORD:
+ child = window->priv->password_view;
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ real_child = gtk_bin_get_child (GTK_BIN (window->priv->scrolled_window));
+ if (child != real_child) {
+ gtk_container_remove (GTK_CONTAINER (window->priv->scrolled_window),
+ real_child);
+ gtk_container_add (GTK_CONTAINER (window->priv->scrolled_window),
+ child);
+ }
+ ev_window_update_actions (window);
+}
+
+
+static void
+ev_window_cmd_edit_rotate_left (GtkAction *action, EvWindow *ev_window)
+{
+ gint rotation = ev_document_model_get_rotation (ev_window->priv->model);
+
+ ev_document_model_set_rotation (ev_window->priv->model, rotation - 90);
+}
+
+static void
+ev_window_cmd_edit_rotate_right (GtkAction *action, EvWindow *ev_window)
+{
+ gint rotation = ev_document_model_get_rotation (ev_window->priv->model);
+
+ ev_document_model_set_rotation (ev_window->priv->model, rotation + 90);
+}
+
+static void
+ev_window_cmd_view_inverted_colors (GtkAction *action, EvWindow *ev_window)
+{
+ gboolean inverted_colors = ev_document_model_get_inverted_colors (ev_window->priv->model);
+
+ ev_document_model_set_inverted_colors (ev_window->priv->model, !inverted_colors);
+}
+
+static void
+ev_window_cmd_edit_toolbar_cb (GtkDialog *dialog,
+ gint response,
+ EvWindow *ev_window)
+{
+ EggEditableToolbar *toolbar;
+ gchar *toolbars_file;
+
+ toolbar = EGG_EDITABLE_TOOLBAR (ev_window->priv->toolbar);
+ egg_editable_toolbar_set_edit_mode (toolbar, FALSE);
+
+ toolbars_file = g_build_filename (ev_application_get_dot_dir (EV_APP, TRUE),
+ "evince_toolbar.xml", NULL);
+ egg_toolbars_model_save_toolbars (egg_editable_toolbar_get_model (toolbar),
+ toolbars_file, "1.0");
+ g_free (toolbars_file);
+
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+static void
+ev_window_cmd_edit_toolbar (GtkAction *action, EvWindow *ev_window)
+{
+ GtkWidget *dialog;
+ GtkWidget *editor;
+ GtkWidget *content_area;
+ EggEditableToolbar *toolbar;
+
+ dialog = gtk_dialog_new_with_buttons (_("Toolbar Editor"),
+ GTK_WINDOW (ev_window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CLOSE,
+ NULL);
+ content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CLOSE);
+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)), 5);
+ gtk_box_set_spacing (GTK_BOX (content_area), 2);
+ gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
+ gtk_window_set_default_size (GTK_WINDOW (dialog), 500, 400);
+
+ toolbar = EGG_EDITABLE_TOOLBAR (ev_window->priv->toolbar);
+ editor = egg_toolbar_editor_new (ev_window->priv->ui_manager,
+ egg_editable_toolbar_get_model (toolbar));
+
+ gtk_container_set_border_width (GTK_CONTAINER (editor), 5);
+ gtk_box_set_spacing (GTK_BOX (EGG_TOOLBAR_EDITOR (editor)), 5);
+
+ gtk_container_add (GTK_CONTAINER (content_area), editor);
+
+ egg_editable_toolbar_set_edit_mode (toolbar, TRUE);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (ev_window_cmd_edit_toolbar_cb),
+ ev_window);
+ gtk_widget_show_all (dialog);
+}
+
+static void
+ev_window_cmd_edit_save_settings (GtkAction *action, EvWindow *ev_window)
+{
+ EvWindowPrivate *priv = ev_window->priv;
+ EvDocumentModel *model = priv->model;
+ GSettings *settings = priv->default_settings;
+
+ g_settings_set_boolean (settings, "continuous",
+ ev_document_model_get_continuous (model));
+ g_settings_set_boolean (settings, "dual-page",
+ ev_document_model_get_dual_page (model));
+ g_settings_set_boolean (settings, "fullscreen",
+ ev_document_model_get_fullscreen (model));
+ g_settings_set_boolean (settings, "inverted-colors",
+ ev_document_model_get_inverted_colors (model));
+ g_settings_set_enum (settings, "sizing-mode",
+ ev_document_model_get_sizing_mode (model));
+ g_settings_set_boolean (settings, "show-toolbar",
+ gtk_widget_get_visible (priv->toolbar));
+ g_settings_set_boolean (settings, "show-sidebar",
+ gtk_widget_get_visible (priv->sidebar));
+ g_settings_set_int (settings, "sidebar-size",
+ gtk_paned_get_position (GTK_PANED (priv->hpaned)));
+ g_settings_set_string (settings, "sidebar-page",
+ ev_window_sidebar_get_current_page_id (ev_window));
+ g_settings_apply (settings);
+}
+
+static void
+ev_window_cmd_view_zoom_in (GtkAction *action, EvWindow *ev_window)
+{
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+ ev_document_model_set_sizing_mode (ev_window->priv->model, EV_SIZING_FREE);
+ ev_view_zoom_in (EV_VIEW (ev_window->priv->view));
+}
+
+static void
+ev_window_cmd_view_zoom_out (GtkAction *action, EvWindow *ev_window)
+{
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+ ev_document_model_set_sizing_mode (ev_window->priv->model, EV_SIZING_FREE);
+ ev_view_zoom_out (EV_VIEW (ev_window->priv->view));
+}
+
+static void
+ev_window_cmd_go_previous_page (GtkAction *action, EvWindow *ev_window)
+{
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+ ev_view_previous_page (EV_VIEW (ev_window->priv->view));
+}
+
+static void
+ev_window_cmd_go_next_page (GtkAction *action, EvWindow *ev_window)
+{
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+ ev_view_next_page (EV_VIEW (ev_window->priv->view));
+}
+
+static void
+ev_window_cmd_go_first_page (GtkAction *action, EvWindow *ev_window)
+{
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+ ev_document_model_set_page (ev_window->priv->model, 0);
+}
+
+static void
+ev_window_cmd_go_last_page (GtkAction *action, EvWindow *ev_window)
+{
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+ ev_document_model_set_page (ev_window->priv->model,
+ ev_document_get_n_pages (ev_window->priv->document) - 1);
+}
+
+static void
+ev_window_cmd_go_forward (GtkAction *action, EvWindow *ev_window)
+{
+ int n_pages, current_page;
+
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+ n_pages = ev_document_get_n_pages (ev_window->priv->document);
+ current_page = ev_document_model_get_page (ev_window->priv->model);
+
+ if (current_page + 10 < n_pages) {
+ ev_document_model_set_page (ev_window->priv->model, current_page + 10);
+ }
+}
+
+static void
+ev_window_cmd_go_backward (GtkAction *action, EvWindow *ev_window)
+{
+ int current_page;
+
+ g_return_if_fail (EV_IS_WINDOW (ev_window));
+
+ current_page = ev_document_model_get_page (ev_window->priv->model);
+
+ if (current_page - 10 >= 0) {
+ ev_document_model_set_page (ev_window->priv->model, current_page - 10);
+ }
+}
+
+static void
+ev_window_cmd_view_reload (GtkAction *action, EvWindow *ev_window)
+{
+ ev_window_reload_document (ev_window, NULL);
+}
+
+static void
+ev_window_cmd_view_autoscroll (GtkAction *action, EvWindow *ev_window)
+{
+ ev_view_autoscroll_start (EV_VIEW (ev_window->priv->view));
+}
+
+#if OFFLINE_HELP_ENABLED
+#define EV_HELP "ghelp:evince"
+#else
+#define EV_HELP "http://library.mate.org/users/evince/stable/"
+#endif
+
+static void
+ev_window_cmd_help_contents (GtkAction *action, EvWindow *ev_window)
+{
+ GError *error = NULL;
+
+ gtk_show_uri (gtk_window_get_screen (GTK_WINDOW (ev_window)),
+ EV_HELP,
+ gtk_get_current_event_time (),
+ &error);
+ if (error) {
+ ev_window_error_message (ev_window, error,
+ "%s", _("There was an error displaying help"));
+ g_error_free (error);
+ }
+}
+
+static void
+ev_window_cmd_leave_fullscreen (GtkAction *action, EvWindow *window)
+{
+ ev_window_stop_fullscreen (window, TRUE);
+}
+
+static void
+ev_window_cmd_start_presentation (GtkAction *action, EvWindow *window)
+{
+ ev_window_run_presentation (window);
+}
+
+static void
+ev_window_cmd_escape (GtkAction *action, EvWindow *window)
+{
+ GtkWidget *widget;
+
+ ev_view_autoscroll_stop (EV_VIEW (window->priv->view));
+
+ widget = gtk_window_get_focus (GTK_WINDOW (window));
+ if (widget && gtk_widget_get_ancestor (widget, EGG_TYPE_FIND_BAR)) {
+ update_chrome_flag (window, EV_CHROME_FINDBAR, FALSE);
+ update_chrome_visibility (window);
+ gtk_widget_grab_focus (window->priv->view);
+ } else {
+ gboolean fullscreen;
+
+ fullscreen = ev_document_model_get_fullscreen (window->priv->model);
+
+ if (fullscreen) {
+ ev_window_stop_fullscreen (window, TRUE);
+ } else if (EV_WINDOW_IS_PRESENTATION (window)) {
+ ev_window_stop_presentation (window, TRUE);
+ gtk_widget_grab_focus (window->priv->view);
+ } else {
+ gtk_widget_grab_focus (window->priv->view);
+ }
+
+ if (fullscreen && EV_WINDOW_IS_PRESENTATION (window))
+ g_warning ("Both fullscreen and presentation set somehow");
+ }
+}
+
+static void
+save_sizing_mode (EvWindow *window)
+{
+ EvSizingMode mode;
+ GEnumValue *enum_value;
+
+ if (!window->priv->metadata || ev_window_is_empty (window))
+ return;
+
+ mode = ev_document_model_get_sizing_mode (window->priv->model);
+ enum_value = g_enum_get_value (g_type_class_peek (EV_TYPE_SIZING_MODE), mode);
+ ev_metadata_set_string (window->priv->metadata, "sizing_mode",
+ enum_value->value_nick);
+}
+
+static void
+ev_window_document_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvWindow *ev_window)
+{
+ ev_window_set_document (ev_window,
+ ev_document_model_get_document (model));
+}
+
+static void
+ev_window_sizing_mode_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvWindow *ev_window)
+{
+ EvSizingMode sizing_mode = ev_document_model_get_sizing_mode (model);
+
+ g_object_set (ev_window->priv->scrolled_window,
+ "hscrollbar-policy",
+ sizing_mode == EV_SIZING_FREE ?
+ GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER,
+ "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
+ NULL);
+
+ update_sizing_buttons (ev_window);
+ save_sizing_mode (ev_window);
+}
+
+static void
+ev_window_zoom_changed_cb (EvDocumentModel *model, GParamSpec *pspec, EvWindow *ev_window)
+{
+ ev_window_update_actions (ev_window);
+
+ if (!ev_window->priv->metadata)
+ return;
+
+ if (ev_document_model_get_sizing_mode (model) == EV_SIZING_FREE && !ev_window_is_empty (ev_window)) {
+ gdouble zoom;
+
+ zoom = ev_document_model_get_scale (model);
+ zoom *= 72.0 / get_screen_dpi (ev_window);
+ ev_metadata_set_double (ev_window->priv->metadata, "zoom", zoom);
+ }
+}
+
+static void
+ev_window_update_continuous_action (EvWindow *window)
+{
+ GtkAction *action;
+
+ action = gtk_action_group_get_action (window->priv->action_group, "ViewContinuous");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_cmd_continuous), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ ev_document_model_get_continuous (window->priv->model));
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_cmd_continuous), window);
+}
+
+static void
+ev_window_update_dual_page_action (EvWindow *window)
+{
+ GtkAction *action;
+
+ action = gtk_action_group_get_action (window->priv->action_group, "ViewDual");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_cmd_dual), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ ev_document_model_get_dual_page (window->priv->model));
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_cmd_dual), window);
+}
+
+static void
+ev_window_continuous_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvWindow *ev_window)
+{
+ ev_window_update_continuous_action (ev_window);
+
+ if (ev_window->priv->metadata && !ev_window_is_empty (ev_window))
+ ev_metadata_set_boolean (ev_window->priv->metadata, "continuous",
+ ev_document_model_get_continuous (model));
+}
+
+static void
+ev_window_rotation_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvWindow *window)
+{
+ gint rotation = ev_document_model_get_rotation (model);
+
+ if (window->priv->metadata && !ev_window_is_empty (window))
+ ev_metadata_set_int (window->priv->metadata, "rotation",
+ rotation);
+
+ ev_window_update_max_min_scale (window);
+ ev_window_refresh_window_thumbnail (window);
+}
+
+static void
+ev_window_update_inverted_colors_action (EvWindow *window)
+{
+ GtkAction *action;
+
+ action = gtk_action_group_get_action (window->priv->action_group, "ViewInvertedColors");
+ g_signal_handlers_block_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_inverted_colors), window);
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+ ev_document_model_get_inverted_colors (window->priv->model));
+ g_signal_handlers_unblock_by_func
+ (action, G_CALLBACK (ev_window_cmd_view_inverted_colors), window);
+}
+
+static void
+ev_window_inverted_colors_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvWindow *window)
+{
+ gboolean inverted_colors = ev_document_model_get_inverted_colors (model);
+
+ ev_window_update_inverted_colors_action (window);
+
+ if (window->priv->metadata && !ev_window_is_empty (window))
+ ev_metadata_set_boolean (window->priv->metadata, "inverted-colors",
+ inverted_colors);
+
+ ev_window_refresh_window_thumbnail (window);
+}
+
+static void
+ev_window_dual_mode_changed_cb (EvDocumentModel *model,
+ GParamSpec *pspec,
+ EvWindow *ev_window)
+{
+ ev_window_update_dual_page_action (ev_window);
+
+ if (ev_window->priv->metadata && !ev_window_is_empty (ev_window))
+ ev_metadata_set_boolean (ev_window->priv->metadata, "dual-page",
+ ev_document_model_get_dual_page (model));
+}
+
+static char *
+build_comments_string (EvDocument *document)
+{
+ gchar *comments = NULL;
+ EvDocumentBackendInfo info;
+
+ if (document && ev_document_get_backend_info (document, &info)) {
+ comments = g_strdup_printf (
+ _("Document Viewer\nUsing %s (%s)"),
+ info.name, info.version);
+ } else {
+ comments = g_strdup_printf (
+ _("Document Viewer"));
+ }
+
+ return comments;
+}
+
+static void
+ev_window_cmd_help_about (GtkAction *action, EvWindow *ev_window)
+{
+ const char *authors[] = {
+ "Martin Kretzschmar <[email protected]>",
+ "Jonathan Blandford <[email protected]>",
+ "Marco Pesenti Gritti <[email protected]>",
+ "Nickolay V. Shmyrev <[email protected]>",
+ "Bryan Clark <[email protected]>",
+ "Carlos Garcia Campos <[email protected]>",
+ "Wouter Bolsterlee <[email protected]>",
+ "Christian Persch <chpe" "\100" "mate.org>",
+ NULL
+ };
+
+ const char *documenters[] = {
+ "Nickolay V. Shmyrev <[email protected]>",
+ NULL
+ };
+
+ const char *license[] = {
+ N_("Evince 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.\n"),
+ N_("Evince 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.\n"),
+ N_("You should have received a copy of the GNU General Public License "
+ "along with Evince; if not, write to the Free Software Foundation, Inc., "
+ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n")
+ };
+
+ char *license_trans;
+ char *comments;
+
+#ifdef ENABLE_NLS
+ const char **p;
+
+ for (p = authors; *p; ++p)
+ *p = _(*p);
+
+ for (p = documenters; *p; ++p)
+ *p = _(*p);
+#endif
+
+ license_trans = g_strconcat (_(license[0]), "\n", _(license[1]), "\n",
+ _(license[2]), "\n", NULL);
+
+ comments = build_comments_string (ev_window->priv->document);
+
+ gtk_show_about_dialog (
+ GTK_WINDOW (ev_window),
+ "name", _("Evince"),
+ "version", VERSION,
+ "copyright",
+ _("© 1996–2009 The Evince authors"),
+ "license", license_trans,
+ "website", "http://www.mate.org/projects/evince",
+ "comments", comments,
+ "authors", authors,
+ "documenters", documenters,
+ "translator-credits", _("translator-credits"),
+ "logo-icon-name", "evince",
+ "wrap-license", TRUE,
+ NULL);
+
+ g_free (comments);
+ g_free (license_trans);
+}
+
+static void
+ev_window_view_toolbar_cb (GtkAction *action, EvWindow *ev_window)
+{
+ gboolean active;
+
+ active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+ update_chrome_flag (ev_window, EV_CHROME_TOOLBAR, active);
+ update_chrome_visibility (ev_window);
+ if (ev_window->priv->metadata)
+ ev_metadata_set_boolean (ev_window->priv->metadata, "show_toolbar", active);
+}
+
+static void
+ev_window_view_sidebar_cb (GtkAction *action, EvWindow *ev_window)
+{
+ if (EV_WINDOW_IS_PRESENTATION (ev_window))
+ return;
+
+ update_chrome_flag (ev_window, EV_CHROME_SIDEBAR,
+ gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
+ update_chrome_visibility (ev_window);
+}
+
+static void
+ev_window_sidebar_current_page_changed_cb (EvSidebar *ev_sidebar,
+ GParamSpec *pspec,
+ EvWindow *ev_window)
+{
+ if (ev_window->priv->metadata && !ev_window_is_empty (ev_window)) {
+ ev_metadata_set_string (ev_window->priv->metadata,
+ "sidebar_page",
+ ev_window_sidebar_get_current_page_id (ev_window));
+ }
+}
+
+static void
+ev_window_sidebar_visibility_changed_cb (EvSidebar *ev_sidebar,
+ GParamSpec *pspec,
+ EvWindow *ev_window)
+{
+ GtkAction *action;
+
+ action = gtk_action_group_get_action (ev_window->priv->action_group, "ViewSidebar");
+
+ if (!EV_WINDOW_IS_PRESENTATION (ev_window)) {
+ gboolean visible = gtk_widget_get_visible (GTK_WIDGET (ev_sidebar));
+
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), visible);
+
+ if (ev_window->priv->metadata)
+ ev_metadata_set_boolean (ev_window->priv->metadata, "sidebar_visibility",
+ visible);
+ }
+}
+
+static void
+view_menu_link_popup (EvWindow *ev_window,
+ EvLink *link)
+{
+ gboolean show_external = FALSE;
+ gboolean show_internal = FALSE;
+ GtkAction *action;
+
+ if (ev_window->priv->link)
+ g_object_unref (ev_window->priv->link);
+
+ if (link)
+ ev_window->priv->link = g_object_ref (link);
+ else
+ ev_window->priv->link = NULL;
+
+ if (ev_window->priv->link) {
+ EvLinkAction *ev_action;
+
+ ev_action = ev_link_get_action (link);
+ if (ev_action) {
+ switch (ev_link_action_get_action_type (ev_action)) {
+ case EV_LINK_ACTION_TYPE_GOTO_DEST:
+ case EV_LINK_ACTION_TYPE_GOTO_REMOTE:
+ show_internal = TRUE;
+ break;
+ case EV_LINK_ACTION_TYPE_EXTERNAL_URI:
+ case EV_LINK_ACTION_TYPE_LAUNCH:
+ show_external = TRUE;
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ action = gtk_action_group_get_action (ev_window->priv->view_popup_action_group,
+ "OpenLink");
+ gtk_action_set_visible (action, show_external);
+
+ action = gtk_action_group_get_action (ev_window->priv->view_popup_action_group,
+ "CopyLinkAddress");
+ gtk_action_set_visible (action, show_external);
+
+ action = gtk_action_group_get_action (ev_window->priv->view_popup_action_group,
+ "GoLink");
+ gtk_action_set_visible (action, show_internal);
+
+ action = gtk_action_group_get_action (ev_window->priv->view_popup_action_group,
+ "OpenLinkNewWindow");
+ gtk_action_set_visible (action, show_internal);
+}
+
+static void
+view_menu_image_popup (EvWindow *ev_window,
+ EvImage *image)
+{
+ GtkAction *action;
+ gboolean show_image = FALSE;
+
+ if (ev_window->priv->image)
+ g_object_unref (ev_window->priv->image);
+
+ if (image)
+ ev_window->priv->image = g_object_ref (image);
+ else
+ ev_window->priv->image = NULL;
+
+ show_image = (ev_window->priv->image != NULL);
+
+ action = gtk_action_group_get_action (ev_window->priv->view_popup_action_group,
+ "SaveImageAs");
+ gtk_action_set_visible (action, show_image);
+
+ action = gtk_action_group_get_action (ev_window->priv->view_popup_action_group,
+ "CopyImage");
+ gtk_action_set_visible (action, show_image);
+}
+
+static void
+view_menu_annot_popup (EvWindow *ev_window,
+ EvAnnotation *annot)
+{
+ GtkAction *action;
+ gboolean show_annot = FALSE;
+
+ if (ev_window->priv->annot)
+ g_object_unref (ev_window->priv->annot);
+ ev_window->priv->annot = (annot) ? g_object_ref (annot) : NULL;
+
+ action = gtk_action_group_get_action (ev_window->priv->view_popup_action_group,
+ "AnnotProperties");
+ gtk_action_set_visible (action, (annot != NULL && EV_IS_ANNOTATION_MARKUP (annot)));
+
+ if (annot && EV_IS_ANNOTATION_ATTACHMENT (annot)) {
+ EvAttachment *attachment;
+
+ attachment = ev_annotation_attachment_get_attachment (EV_ANNOTATION_ATTACHMENT (annot));
+ if (attachment) {
+ show_annot = TRUE;
+ if (ev_window->priv->attach_list) {
+ g_list_foreach (ev_window->priv->attach_list,
+ (GFunc) g_object_unref, NULL);
+ g_list_free (ev_window->priv->attach_list);
+ ev_window->priv->attach_list = NULL;
+ }
+ ev_window->priv->attach_list =
+ g_list_prepend (ev_window->priv->attach_list,
+ g_object_ref (attachment));
+ }
+ }
+
+ action = gtk_action_group_get_action (ev_window->priv->attachment_popup_action_group,
+ "OpenAttachment");
+ gtk_action_set_visible (action, show_annot);
+
+ action = gtk_action_group_get_action (ev_window->priv->attachment_popup_action_group,
+ "SaveAttachmentAs");
+ gtk_action_set_visible (action, show_annot);
+}
+
+static gboolean
+view_menu_popup_cb (EvView *view,
+ GList *items,
+ EvWindow *ev_window)
+{
+ GList *l;
+ gboolean has_link = FALSE;
+ gboolean has_image = FALSE;
+ gboolean has_annot = FALSE;
+
+ for (l = items; l; l = g_list_next (l)) {
+ if (EV_IS_LINK (l->data)) {
+ view_menu_link_popup (ev_window, EV_LINK (l->data));
+ has_link = TRUE;
+ } else if (EV_IS_IMAGE (l->data)) {
+ view_menu_image_popup (ev_window, EV_IMAGE (l->data));
+ has_image = TRUE;
+ } else if (EV_IS_ANNOTATION (l->data)) {
+ view_menu_annot_popup (ev_window, EV_ANNOTATION (l->data));
+ has_annot = TRUE;
+ }
+ }
+
+ if (!has_link)
+ view_menu_link_popup (ev_window, NULL);
+ if (!has_image)
+ view_menu_image_popup (ev_window, NULL);
+ if (!has_annot)
+ view_menu_annot_popup (ev_window, NULL);
+
+ gtk_menu_popup (GTK_MENU (ev_window->priv->view_popup),
+ NULL, NULL, NULL, NULL,
+ 3, gtk_get_current_event_time ());
+ return TRUE;
+}
+
+static gboolean
+attachment_bar_menu_popup_cb (EvSidebarAttachments *attachbar,
+ GList *attach_list,
+ EvWindow *ev_window)
+{
+ GtkWidget *popup;
+
+ g_assert (attach_list != NULL);
+
+ if (ev_window->priv->attach_list) {
+ g_list_foreach (ev_window->priv->attach_list,
+ (GFunc) g_object_unref, NULL);
+ g_list_free (ev_window->priv->attach_list);
+ }
+
+ ev_window->priv->attach_list = attach_list;
+
+ popup = ev_window->priv->attachment_popup;
+
+ gtk_menu_popup (GTK_MENU (popup), NULL, NULL,
+ NULL, NULL,
+ 3, gtk_get_current_event_time ());
+
+ return TRUE;
+}
+
+static void
+ev_window_update_find_status_message (EvWindow *ev_window)
+{
+ gchar *message;
+
+ if (!ev_window->priv->find_job)
+ return;
+
+ if (ev_job_is_finished (ev_window->priv->find_job)) {
+ EvJobFind *job_find = EV_JOB_FIND (ev_window->priv->find_job);
+
+ if (ev_job_find_has_results (job_find)) {
+ gint n_results;
+
+ n_results = ev_job_find_get_n_results (job_find,
+ ev_document_model_get_page (ev_window->priv->model));
+ /* TRANS: Sometimes this could be better translated as
+ "%d hit(s) on this page". Therefore this string
+ contains plural cases. */
+ message = g_strdup_printf (ngettext ("%d found on this page",
+ "%d found on this page",
+ n_results),
+ n_results);
+ } else {
+ message = g_strdup (_("Not found"));
+ }
+ } else {
+ gdouble percent;
+
+ percent = ev_job_find_get_progress (EV_JOB_FIND (ev_window->priv->find_job));
+ message = g_strdup_printf (_("%3d%% remaining to search"),
+ (gint) ((1.0 - percent) * 100));
+ }
+
+ egg_find_bar_set_status_text (EGG_FIND_BAR (ev_window->priv->find_bar), message);
+ g_free (message);
+}
+
+static void
+ev_window_find_job_finished_cb (EvJobFind *job,
+ EvWindow *ev_window)
+{
+ ev_window_update_find_status_message (ev_window);
+}
+
+static void
+ev_window_find_job_updated_cb (EvJobFind *job,
+ gint page,
+ EvWindow *ev_window)
+{
+ ev_window_update_actions (ev_window);
+
+ ev_view_find_changed (EV_VIEW (ev_window->priv->view),
+ ev_job_find_get_results (job),
+ page);
+ ev_window_update_find_status_message (ev_window);
+}
+
+static void
+ev_window_clear_find_job (EvWindow *ev_window)
+{
+ if (ev_window->priv->find_job != NULL) {
+ if (!ev_job_is_finished (ev_window->priv->find_job))
+ ev_job_cancel (ev_window->priv->find_job);
+
+ g_signal_handlers_disconnect_by_func (ev_window->priv->find_job,
+ ev_window_find_job_finished_cb,
+ ev_window);
+ g_signal_handlers_disconnect_by_func (ev_window->priv->find_job,
+ ev_window_find_job_updated_cb,
+ ev_window);
+ g_object_unref (ev_window->priv->find_job);
+ ev_window->priv->find_job = NULL;
+ }
+}
+
+static void
+find_bar_previous_cb (EggFindBar *find_bar,
+ EvWindow *ev_window)
+{
+ ev_view_find_previous (EV_VIEW (ev_window->priv->view));
+}
+
+static void
+find_bar_next_cb (EggFindBar *find_bar,
+ EvWindow *ev_window)
+{
+ ev_view_find_next (EV_VIEW (ev_window->priv->view));
+}
+
+static void
+find_bar_close_cb (EggFindBar *find_bar,
+ EvWindow *ev_window)
+{
+ ev_view_find_cancel (EV_VIEW (ev_window->priv->view));
+ ev_window_clear_find_job (ev_window);
+ update_chrome_flag (ev_window, EV_CHROME_FINDBAR, FALSE);
+ update_chrome_visibility (ev_window);
+}
+
+static void
+find_bar_search_changed_cb (EggFindBar *find_bar,
+ GParamSpec *param,
+ EvWindow *ev_window)
+{
+ gboolean case_sensitive;
+ const char *search_string;
+
+ if (!ev_window->priv->document || !EV_IS_DOCUMENT_FIND (ev_window->priv->document))
+ return;
+
+ /* Either the string or case sensitivity could have changed. */
+ case_sensitive = egg_find_bar_get_case_sensitive (find_bar);
+ search_string = egg_find_bar_get_search_string (find_bar);
+
+ ev_view_find_search_changed (EV_VIEW (ev_window->priv->view));
+
+ ev_window_clear_find_job (ev_window);
+
+ if (search_string && search_string[0]) {
+ ev_window->priv->find_job = ev_job_find_new (ev_window->priv->document,
+ ev_document_model_get_page (ev_window->priv->model),
+ ev_document_get_n_pages (ev_window->priv->document),
+ search_string,
+ case_sensitive);
+ g_signal_connect (ev_window->priv->find_job, "finished",
+ G_CALLBACK (ev_window_find_job_finished_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->find_job, "updated",
+ G_CALLBACK (ev_window_find_job_updated_cb),
+ ev_window);
+ ev_job_scheduler_push_job (ev_window->priv->find_job, EV_JOB_PRIORITY_NONE);
+ } else {
+ ev_window_update_actions (ev_window);
+ egg_find_bar_set_status_text (EGG_FIND_BAR (ev_window->priv->find_bar),
+ NULL);
+ gtk_widget_queue_draw (GTK_WIDGET (ev_window->priv->view));
+ }
+}
+
+static void
+find_bar_visibility_changed_cb (EggFindBar *find_bar,
+ GParamSpec *param,
+ EvWindow *ev_window)
+{
+ gboolean visible;
+
+ visible = gtk_widget_get_visible (GTK_WIDGET (find_bar));
+
+ if (ev_window->priv->document &&
+ EV_IS_DOCUMENT_FIND (ev_window->priv->document)) {
+ ev_view_find_set_highlight_search (EV_VIEW (ev_window->priv->view), visible);
+ ev_view_find_search_changed (EV_VIEW (ev_window->priv->view));
+ ev_window_update_actions (ev_window);
+
+ if (visible)
+ find_bar_search_changed_cb (find_bar, NULL, ev_window);
+ else
+ egg_find_bar_set_status_text (EGG_FIND_BAR (ev_window->priv->find_bar), NULL);
+ }
+}
+
+static void
+find_bar_scroll (EggFindBar *find_bar,
+ GtkScrollType scroll,
+ EvWindow *ev_window)
+{
+ ev_view_scroll (EV_VIEW (ev_window->priv->view), scroll, FALSE);
+}
+
+static void
+zoom_control_changed_cb (EphyZoomAction *action,
+ float zoom,
+ EvWindow *ev_window)
+{
+ EvSizingMode mode;
+
+ if (zoom == EPHY_ZOOM_BEST_FIT) {
+ mode = EV_SIZING_BEST_FIT;
+ } else if (zoom == EPHY_ZOOM_FIT_WIDTH) {
+ mode = EV_SIZING_FIT_WIDTH;
+ } else {
+ mode = EV_SIZING_FREE;
+ }
+
+ ev_document_model_set_sizing_mode (ev_window->priv->model, mode);
+
+ if (mode == EV_SIZING_FREE) {
+ ev_document_model_set_scale (ev_window->priv->model,
+ zoom * get_screen_dpi (ev_window) / 72.0);
+ }
+}
+
+static void
+ev_window_drag_data_received (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time)
+
+{
+ EvWindow *window = EV_WINDOW (widget);
+ gchar **uris;
+ gint i = 0;
+ GSList *uri_list = NULL;
+ GtkWidget *source;
+
+ source = gtk_drag_get_source_widget (context);
+ if (source && widget == gtk_widget_get_toplevel (source)) {
+ gtk_drag_finish (context, FALSE, FALSE, time);
+ return;
+ }
+
+ uris = gtk_selection_data_get_uris (selection_data);
+ if (!uris) {
+ gtk_drag_finish (context, FALSE, FALSE, time);
+ return;
+ }
+
+ for (i = 0; uris[i]; i++) {
+ uri_list = g_slist_prepend (uri_list, (gpointer) uris[i]);
+ }
+
+ ev_application_open_uri_list (EV_APP, uri_list,
+ gtk_window_get_screen (GTK_WINDOW (window)),
+ 0);
+ gtk_drag_finish (context, TRUE, FALSE, time);
+
+ g_strfreev (uris);
+ g_slist_free (uri_list);
+}
+
+static void
+ev_window_finalize (GObject *object)
+{
+ G_OBJECT_CLASS (ev_window_parent_class)->finalize (object);
+
+ if (ev_window_n_copies == 0) {
+ ev_application_shutdown (EV_APP);
+ } else {
+ ev_window_n_copies--;
+ }
+}
+
+static void
+ev_window_dispose (GObject *object)
+{
+ EvWindow *window = EV_WINDOW (object);
+ EvWindowPrivate *priv = window->priv;
+ GObject *mpkeys = ev_application_get_media_keys (EV_APP);
+
+ if (mpkeys) {
+ g_signal_handlers_disconnect_by_func (mpkeys,
+ ev_window_media_player_key_pressed,
+ window);
+ }
+
+#ifdef ENABLE_DBUS
+ if (priv->dbus_object_id > 0) {
+ ev_window_emit_closed (window);
+ g_dbus_connection_unregister_object (ev_application_get_dbus_connection (EV_APP),
+ priv->dbus_object_id);
+ priv->dbus_object_id = 0;
+ }
+
+ if (priv->dbus_object_path) {
+ g_free (priv->dbus_object_path);
+ priv->dbus_object_path = NULL;
+ }
+#endif /* ENABLE_DBUS */
+
+ if (priv->metadata) {
+ g_object_unref (priv->metadata);
+ priv->metadata = NULL;
+ }
+
+ if (priv->setup_document_idle > 0) {
+ g_source_remove (priv->setup_document_idle);
+ priv->setup_document_idle = 0;
+ }
+
+#ifdef WITH_MATECONF
+ if (priv->mateconf_client) {
+ g_object_unref (priv->mateconf_client);
+ priv->mateconf_client = NULL;
+ }
+#endif
+
+ if (priv->monitor) {
+ g_object_unref (priv->monitor);
+ priv->monitor = NULL;
+ }
+
+ if (priv->title) {
+ ev_window_title_free (priv->title);
+ priv->title = NULL;
+ }
+
+ if (priv->ui_manager) {
+ g_object_unref (priv->ui_manager);
+ priv->ui_manager = NULL;
+ }
+
+ if (priv->action_group) {
+ g_object_unref (priv->action_group);
+ priv->action_group = NULL;
+ }
+
+ if (priv->view_popup_action_group) {
+ g_object_unref (priv->view_popup_action_group);
+ priv->view_popup_action_group = NULL;
+ }
+
+ if (priv->attachment_popup_action_group) {
+ g_object_unref (priv->attachment_popup_action_group);
+ priv->attachment_popup_action_group = NULL;
+ }
+
+ if (priv->recent_action_group) {
+ g_object_unref (priv->recent_action_group);
+ priv->recent_action_group = NULL;
+ }
+
+ if (priv->recent_manager) {
+ g_signal_handlers_disconnect_by_func (priv->recent_manager,
+ ev_window_setup_recent,
+ window);
+ priv->recent_manager = NULL;
+ }
+
+ if (priv->settings) {
+ g_object_unref (priv->settings);
+ priv->settings = NULL;
+ }
+
+ if (priv->default_settings) {
+ g_settings_apply (priv->default_settings);
+ g_object_unref (priv->default_settings);
+ priv->default_settings = NULL;
+ }
+
+ priv->recent_ui_id = 0;
+
+ if (priv->model) {
+ g_signal_handlers_disconnect_by_func (priv->model,
+ ev_window_page_changed_cb,
+ window);
+ g_object_unref (priv->model);
+ priv->model = NULL;
+ }
+
+ if (priv->document) {
+ g_object_unref (priv->document);
+ priv->document = NULL;
+ }
+
+ if (priv->view) {
+ g_object_unref (priv->view);
+ priv->view = NULL;
+ }
+
+ if (priv->password_view) {
+ g_object_unref (priv->password_view);
+ priv->password_view = NULL;
+ }
+
+ if (priv->load_job) {
+ ev_window_clear_load_job (window);
+ }
+
+ if (priv->reload_job) {
+ ev_window_clear_reload_job (window);
+ }
+
+ if (priv->save_job) {
+ ev_window_clear_save_job (window);
+ }
+
+ if (priv->thumbnail_job) {
+ ev_window_clear_thumbnail_job (window);
+ }
+
+ if (priv->find_job) {
+ ev_window_clear_find_job (window);
+ }
+
+ if (priv->local_uri) {
+ ev_window_clear_local_uri (window);
+ priv->local_uri = NULL;
+ }
+
+ ev_window_clear_progress_idle (window);
+ if (priv->progress_cancellable) {
+ g_object_unref (priv->progress_cancellable);
+ priv->progress_cancellable = NULL;
+ }
+
+ ev_window_close_dialogs (window);
+
+ if (priv->link) {
+ g_object_unref (priv->link);
+ priv->link = NULL;
+ }
+
+ if (priv->image) {
+ g_object_unref (priv->image);
+ priv->image = NULL;
+ }
+
+ if (priv->annot) {
+ g_object_unref (priv->annot);
+ priv->annot = NULL;
+ }
+
+ if (priv->attach_list) {
+ g_list_foreach (priv->attach_list,
+ (GFunc) g_object_unref,
+ NULL);
+ g_list_free (priv->attach_list);
+ priv->attach_list = NULL;
+ }
+
+ if (priv->find_bar) {
+ g_signal_handlers_disconnect_by_func
+ (window->priv->find_bar,
+ G_CALLBACK (find_bar_close_cb),
+ window);
+ priv->find_bar = NULL;
+ }
+
+ if (priv->uri) {
+ g_free (priv->uri);
+ priv->uri = NULL;
+ }
+
+ if (priv->search_string) {
+ g_free (priv->search_string);
+ priv->search_string = NULL;
+ }
+
+ if (priv->dest) {
+ g_object_unref (priv->dest);
+ priv->dest = NULL;
+ }
+
+ if (priv->history) {
+ g_object_unref (priv->history);
+ priv->history = NULL;
+ }
+
+ if (priv->print_queue) {
+ g_queue_free (priv->print_queue);
+ priv->print_queue = NULL;
+ }
+
+ G_OBJECT_CLASS (ev_window_parent_class)->dispose (object);
+}
+
+static void
+menubar_deactivate_cb (GtkWidget *menubar,
+ EvWindow *window)
+{
+ g_signal_handlers_disconnect_by_func (menubar,
+ G_CALLBACK (menubar_deactivate_cb),
+ window);
+
+ gtk_menu_shell_deselect (GTK_MENU_SHELL (menubar));
+
+ update_chrome_visibility (window);
+}
+
+static gboolean
+ev_window_key_press_event (GtkWidget *widget,
+ GdkEventKey *event)
+{
+ EvWindow *ev_window = EV_WINDOW (widget);
+ EvWindowPrivate *priv = ev_window->priv;
+ gboolean handled = FALSE;
+
+ /* Propagate the event to the view first
+ * It's needed to be able to type in
+ * annot popups windows
+ */
+ if (priv->view) {
+ g_object_ref (priv->view);
+ if (gtk_widget_is_sensitive (priv->view))
+ handled = gtk_widget_event (priv->view, (GdkEvent*) event);
+ g_object_unref (priv->view);
+ }
+
+ if (!handled && !EV_WINDOW_IS_PRESENTATION (ev_window)) {
+ guint modifier = event->state & gtk_accelerator_get_default_mod_mask ();
+
+ if (priv->menubar_accel_keyval != 0 &&
+ event->keyval == priv->menubar_accel_keyval &&
+ modifier == priv->menubar_accel_modifier) {
+ if (!gtk_widget_get_visible (priv->menubar)) {
+ g_signal_connect (priv->menubar, "deactivate",
+ G_CALLBACK (menubar_deactivate_cb),
+ ev_window);
+
+ gtk_widget_show (priv->menubar);
+ gtk_menu_shell_select_first (GTK_MENU_SHELL (priv->menubar),
+ FALSE);
+
+ handled = TRUE;
+ }
+ }
+ }
+
+ if (!handled)
+ handled = GTK_WIDGET_CLASS (ev_window_parent_class)->key_press_event (widget, event);
+
+ return handled;
+}
+
+static gboolean
+ev_window_delete_event (GtkWidget *widget,
+ GdkEventAny *event)
+{
+ return !ev_window_close (EV_WINDOW (widget));
+}
+
+static void
+ev_window_class_init (EvWindowClass *ev_window_class)
+{
+ GObjectClass *g_object_class = G_OBJECT_CLASS (ev_window_class);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (ev_window_class);
+
+ g_object_class->dispose = ev_window_dispose;
+ g_object_class->finalize = ev_window_finalize;
+
+ widget_class->delete_event = ev_window_delete_event;
+ widget_class->key_press_event = ev_window_key_press_event;
+ widget_class->screen_changed = ev_window_screen_changed;
+ widget_class->window_state_event = ev_window_state_event;
+ widget_class->drag_data_received = ev_window_drag_data_received;
+
+ g_type_class_add_private (g_object_class, sizeof (EvWindowPrivate));
+}
+
+/* Normal items */
+static const GtkActionEntry entries[] = {
+ { "File", NULL, N_("_File") },
+ { "Edit", NULL, N_("_Edit") },
+ { "View", NULL, N_("_View") },
+ { "Go", NULL, N_("_Go") },
+ { "Help", NULL, N_("_Help") },
+
+ /* File menu */
+ { "FileOpen", GTK_STOCK_OPEN, N_("_Open…"), "<control>O",
+ N_("Open an existing document"),
+ G_CALLBACK (ev_window_cmd_file_open) },
+ { "FileOpenCopy", NULL, N_("Op_en a Copy"), "<control>N",
+ N_("Open a copy of the current document in a new window"),
+ G_CALLBACK (ev_window_cmd_file_open_copy) },
+ { "FileSaveAs", GTK_STOCK_SAVE_AS, N_("_Save a Copy…"), "<control>S",
+ N_("Save a copy of the current document"),
+ G_CALLBACK (ev_window_cmd_save_as) },
+ { "FilePrint", GTK_STOCK_PRINT, N_("_Print…"), "<control>P",
+ N_("Print this document"),
+ G_CALLBACK (ev_window_cmd_file_print) },
+ { "FileProperties", GTK_STOCK_PROPERTIES, N_("P_roperties"), "<alt>Return", NULL,
+ G_CALLBACK (ev_window_cmd_file_properties) },
+ { "FileCloseWindow", GTK_STOCK_CLOSE, NULL, "<control>W", NULL,
+ G_CALLBACK (ev_window_cmd_file_close_window) },
+
+ /* Edit menu */
+ { "EditCopy", GTK_STOCK_COPY, NULL, "<control>C", NULL,
+ G_CALLBACK (ev_window_cmd_edit_copy) },
+ { "EditSelectAll", GTK_STOCK_SELECT_ALL, N_("Select _All"), "<control>A", NULL,
+ G_CALLBACK (ev_window_cmd_edit_select_all) },
+ { "EditFind", GTK_STOCK_FIND, N_("_Find…"), "<control>F",
+ N_("Find a word or phrase in the document"),
+ G_CALLBACK (ev_window_cmd_edit_find) },
+ { "EditFindNext", NULL, N_("Find Ne_xt"), "<control>G", NULL,
+ G_CALLBACK (ev_window_cmd_edit_find_next) },
+ { "EditFindPrevious", NULL, N_("Find Pre_vious"), "<shift><control>G", NULL,
+ G_CALLBACK (ev_window_cmd_edit_find_previous) },
+ { "EditToolbar", NULL, N_("T_oolbar"), NULL, NULL,
+ G_CALLBACK (ev_window_cmd_edit_toolbar) },
+ { "EditRotateLeft", EV_STOCK_ROTATE_LEFT, N_("Rotate _Left"), "<control>Left", NULL,
+ G_CALLBACK (ev_window_cmd_edit_rotate_left) },
+ { "EditRotateRight", EV_STOCK_ROTATE_RIGHT, N_("Rotate _Right"), "<control>Right", NULL,
+ G_CALLBACK (ev_window_cmd_edit_rotate_right) },
+ { "EditSaveSettings", NULL, N_("Save Current Settings as _Default"), "<control>T", NULL,
+ G_CALLBACK (ev_window_cmd_edit_save_settings) },
+
+
+ /* View menu */
+ { "ViewZoomIn", GTK_STOCK_ZOOM_IN, NULL, "<control>plus",
+ N_("Enlarge the document"),
+ G_CALLBACK (ev_window_cmd_view_zoom_in) },
+ { "ViewZoomOut", GTK_STOCK_ZOOM_OUT, NULL, "<control>minus",
+ N_("Shrink the document"),
+ G_CALLBACK (ev_window_cmd_view_zoom_out) },
+ { "ViewReload", GTK_STOCK_REFRESH, N_("_Reload"), "<control>R",
+ N_("Reload the document"),
+ G_CALLBACK (ev_window_cmd_view_reload) },
+
+ { "ViewAutoscroll", GTK_STOCK_MEDIA_PLAY, N_("Auto_scroll"), NULL, NULL,
+ G_CALLBACK (ev_window_cmd_view_autoscroll) },
+
+ /* Go menu */
+ { "GoPreviousPage", GTK_STOCK_GO_UP, N_("_Previous Page"), "<control>Page_Up",
+ N_("Go to the previous page"),
+ G_CALLBACK (ev_window_cmd_go_previous_page) },
+ { "GoNextPage", GTK_STOCK_GO_DOWN, N_("_Next Page"), "<control>Page_Down",
+ N_("Go to the next page"),
+ G_CALLBACK (ev_window_cmd_go_next_page) },
+ { "GoFirstPage", GTK_STOCK_GOTO_TOP, N_("_First Page"), "<control>Home",
+ N_("Go to the first page"),
+ G_CALLBACK (ev_window_cmd_go_first_page) },
+ { "GoLastPage", GTK_STOCK_GOTO_BOTTOM, N_("_Last Page"), "<control>End",
+ N_("Go to the last page"),
+ G_CALLBACK (ev_window_cmd_go_last_page) },
+
+ /* Help menu */
+ { "HelpContents", GTK_STOCK_HELP, N_("_Contents"), "F1", NULL,
+ G_CALLBACK (ev_window_cmd_help_contents) },
+
+ { "HelpAbout", GTK_STOCK_ABOUT, N_("_About"), NULL, NULL,
+ G_CALLBACK (ev_window_cmd_help_about) },
+
+ /* Toolbar-only */
+ { "LeaveFullscreen", GTK_STOCK_LEAVE_FULLSCREEN, N_("Leave Fullscreen"), NULL,
+ N_("Leave fullscreen mode"),
+ G_CALLBACK (ev_window_cmd_leave_fullscreen) },
+ { "StartPresentation", EV_STOCK_RUN_PRESENTATION, N_("Start Presentation"), NULL,
+ N_("Start a presentation"),
+ G_CALLBACK (ev_window_cmd_start_presentation) },
+
+ /* Accellerators */
+ { "Escape", NULL, "", "Escape", "",
+ G_CALLBACK (ev_window_cmd_escape) },
+ { "Slash", GTK_STOCK_FIND, NULL, "slash", NULL,
+ G_CALLBACK (ev_window_cmd_edit_find) },
+ { "F3", NULL, "", "F3", NULL,
+ G_CALLBACK (ev_window_cmd_edit_find_next) },
+ { "PageDown", NULL, "", "Page_Down", NULL,
+ G_CALLBACK (ev_window_cmd_scroll_forward) },
+ { "PageUp", NULL, "", "Page_Up", NULL,
+ G_CALLBACK (ev_window_cmd_scroll_backward) },
+ { "Space", NULL, "", "space", NULL,
+ G_CALLBACK (ev_window_cmd_scroll_forward) },
+ { "ShiftSpace", NULL, "", "<shift>space", NULL,
+ G_CALLBACK (ev_window_cmd_scroll_backward) },
+ { "BackSpace", NULL, "", "BackSpace", NULL,
+ G_CALLBACK (ev_window_cmd_scroll_backward) },
+ { "ShiftBackSpace", NULL, "", "<shift>BackSpace", NULL,
+ G_CALLBACK (ev_window_cmd_scroll_forward) },
+ { "Return", NULL, "", "Return", NULL,
+ G_CALLBACK (ev_window_cmd_scroll_forward) },
+ { "ShiftReturn", NULL, "", "<shift>Return", NULL,
+ G_CALLBACK (ev_window_cmd_scroll_backward) },
+ { "p", GTK_STOCK_GO_UP, "", "p", NULL,
+ G_CALLBACK (ev_window_cmd_go_previous_page) },
+ { "n", GTK_STOCK_GO_DOWN, "", "n", NULL,
+ G_CALLBACK (ev_window_cmd_go_next_page) },
+ { "Plus", GTK_STOCK_ZOOM_IN, NULL, "plus", NULL,
+ G_CALLBACK (ev_window_cmd_view_zoom_in) },
+ { "CtrlEqual", GTK_STOCK_ZOOM_IN, NULL, "<control>equal", NULL,
+ G_CALLBACK (ev_window_cmd_view_zoom_in) },
+ { "Equal", GTK_STOCK_ZOOM_IN, NULL, "equal", NULL,
+ G_CALLBACK (ev_window_cmd_view_zoom_in) },
+ { "Minus", GTK_STOCK_ZOOM_OUT, NULL, "minus", NULL,
+ G_CALLBACK (ev_window_cmd_view_zoom_out) },
+ { "FocusPageSelector", NULL, "", "<control>l", NULL,
+ G_CALLBACK (ev_window_cmd_focus_page_selector) },
+ { "GoBackwardFast", NULL, "", "<shift>Page_Up", NULL,
+ G_CALLBACK (ev_window_cmd_go_backward) },
+ { "GoForwardFast", NULL, "", "<shift>Page_Down", NULL,
+ G_CALLBACK (ev_window_cmd_go_forward) },
+ { "KpPlus", GTK_STOCK_ZOOM_IN, NULL, "KP_Add", NULL,
+ G_CALLBACK (ev_window_cmd_view_zoom_in) },
+ { "KpMinus", GTK_STOCK_ZOOM_OUT, NULL, "KP_Subtract", NULL,
+ G_CALLBACK (ev_window_cmd_view_zoom_out) },
+ { "CtrlKpPlus", GTK_STOCK_ZOOM_IN, NULL, "<control>KP_Add", NULL,
+ G_CALLBACK (ev_window_cmd_view_zoom_in) },
+ { "CtrlKpMinus", GTK_STOCK_ZOOM_OUT, NULL, "<control>KP_Subtract", NULL,
+ G_CALLBACK (ev_window_cmd_view_zoom_out) },
+ { "CtrlInsert", GTK_STOCK_COPY, NULL, "<control>Insert", NULL,
+ G_CALLBACK (ev_window_cmd_edit_copy) },
+};
+
+/* Toggle items */
+static const GtkToggleActionEntry toggle_entries[] = {
+ /* View Menu */
+ { "ViewToolbar", NULL, N_("_Toolbar"), NULL,
+ N_("Show or hide the toolbar"),
+ G_CALLBACK (ev_window_view_toolbar_cb), TRUE },
+ { "ViewSidebar", GTK_STOCK_INDEX, N_("Side _Pane"), "F9",
+ N_("Show or hide the side pane"),
+ G_CALLBACK (ev_window_view_sidebar_cb), TRUE },
+ { "ViewContinuous", EV_STOCK_VIEW_CONTINUOUS, N_("_Continuous"), NULL,
+ N_("Show the entire document"),
+ G_CALLBACK (ev_window_cmd_continuous), TRUE },
+ { "ViewDual", EV_STOCK_VIEW_DUAL, N_("_Dual"), NULL,
+ N_("Show two pages at once"),
+ G_CALLBACK (ev_window_cmd_dual), FALSE },
+ { "ViewFullscreen", GTK_STOCK_FULLSCREEN, N_("_Fullscreen"), "F11",
+ N_("Expand the window to fill the screen"),
+ G_CALLBACK (ev_window_cmd_view_fullscreen) },
+ { "ViewPresentation", EV_STOCK_RUN_PRESENTATION, N_("Pre_sentation"), "F5",
+ N_("Run document as a presentation"),
+ G_CALLBACK (ev_window_cmd_view_presentation) },
+ { "ViewBestFit", EV_STOCK_ZOOM_PAGE, N_("_Best Fit"), NULL,
+ N_("Make the current document fill the window"),
+ G_CALLBACK (ev_window_cmd_view_best_fit) },
+ { "ViewPageWidth", EV_STOCK_ZOOM_WIDTH, N_("Fit Page _Width"), NULL,
+ N_("Make the current document fill the window width"),
+ G_CALLBACK (ev_window_cmd_view_page_width) },
+ { "ViewInvertedColors", EV_STOCK_INVERTED_COLORS, N_("_Inverted Colors"), "<control>I",
+ N_("Show page contents with the colors inverted"),
+ G_CALLBACK (ev_window_cmd_view_inverted_colors) },
+
+};
+
+/* Popups specific items */
+static const GtkActionEntry view_popup_entries [] = {
+ /* Links */
+ { "OpenLink", GTK_STOCK_OPEN, N_("_Open Link"), NULL,
+ NULL, G_CALLBACK (ev_view_popup_cmd_open_link) },
+ { "GoLink", GTK_STOCK_GO_FORWARD, N_("_Go To"), NULL,
+ NULL, G_CALLBACK (ev_view_popup_cmd_open_link) },
+ { "OpenLinkNewWindow", NULL, N_("Open in New _Window"), NULL,
+ NULL, G_CALLBACK (ev_view_popup_cmd_open_link_new_window) },
+ { "CopyLinkAddress", NULL, N_("_Copy Link Address"), NULL,
+ NULL, G_CALLBACK (ev_view_popup_cmd_copy_link_address) },
+ { "SaveImageAs", NULL, N_("_Save Image As…"), NULL,
+ NULL, G_CALLBACK (ev_view_popup_cmd_save_image_as) },
+ { "CopyImage", NULL, N_("Copy _Image"), NULL,
+ NULL, G_CALLBACK (ev_view_popup_cmd_copy_image) },
+ { "AnnotProperties", NULL, N_("Annotation Properties…"), NULL,
+ NULL, G_CALLBACK (ev_view_popup_cmd_annot_properties) }
+};
+
+static const GtkActionEntry attachment_popup_entries [] = {
+ { "OpenAttachment", GTK_STOCK_OPEN, N_("_Open Attachment"), NULL,
+ NULL, G_CALLBACK (ev_attachment_popup_cmd_open_attachment) },
+ { "SaveAttachmentAs", GTK_STOCK_SAVE_AS, N_("_Save Attachment As…"), NULL,
+ NULL, G_CALLBACK (ev_attachment_popup_cmd_save_attachment_as) },
+};
+
+static void
+sidebar_links_link_activated_cb (EvSidebarLinks *sidebar_links, EvLink *link, EvWindow *window)
+{
+ ev_view_handle_link (EV_VIEW (window->priv->view), link);
+}
+
+static void
+activate_link_cb (EvPageAction *page_action, EvLink *link, EvWindow *window)
+{
+ ev_view_handle_link (EV_VIEW (window->priv->view), link);
+ gtk_widget_grab_focus (window->priv->view);
+}
+
+static void
+navigation_action_activate_link_cb (EvNavigationAction *action, EvLink *link, EvWindow *window)
+{
+
+ ev_view_handle_link (EV_VIEW (window->priv->view), link);
+ gtk_widget_grab_focus (window->priv->view);
+}
+
+static void
+sidebar_layers_visibility_changed (EvSidebarLayers *layers,
+ EvWindow *window)
+{
+ ev_view_reload (EV_VIEW (window->priv->view));
+}
+
+static void
+sidebar_annots_annot_activated_cb (EvSidebarAnnotations *sidebar_annots,
+ EvMapping *annot_mapping,
+ EvWindow *window)
+{
+ ev_view_focus_annotation (EV_VIEW (window->priv->view), annot_mapping);
+}
+
+static void
+sidebar_annots_begin_annot_add (EvSidebarAnnotations *sidebar_annots,
+ EvAnnotationType annot_type,
+ EvWindow *window)
+{
+ ev_view_begin_add_annotation (EV_VIEW (window->priv->view), annot_type);
+}
+
+static void
+view_annot_added (EvView *view,
+ EvAnnotation *annot,
+ EvWindow *window)
+{
+ ev_sidebar_annotations_annot_added (EV_SIDEBAR_ANNOTATIONS (window->priv->sidebar_annots),
+ annot);
+}
+
+static void
+sidebar_annots_annot_add_cancelled (EvSidebarAnnotations *sidebar_annots,
+ EvWindow *window)
+{
+ ev_view_cancel_add_annotation (EV_VIEW (window->priv->view));
+}
+
+static void
+register_custom_actions (EvWindow *window, GtkActionGroup *group)
+{
+ GtkAction *action;
+
+ action = g_object_new (EV_TYPE_PAGE_ACTION,
+ "name", PAGE_SELECTOR_ACTION,
+ "label", _("Page"),
+ "tooltip", _("Select Page"),
+ "icon_name", "text-x-generic",
+ "visible_overflown", FALSE,
+ NULL);
+ ev_page_action_set_model (EV_PAGE_ACTION (action),
+ window->priv->model);
+ g_signal_connect (action, "activate_link",
+ G_CALLBACK (activate_link_cb), window);
+ gtk_action_group_add_action (group, action);
+ g_object_unref (action);
+
+ action = g_object_new (EPHY_TYPE_ZOOM_ACTION,
+ "name", ZOOM_CONTROL_ACTION,
+ "label", _("Zoom"),
+ "stock_id", EV_STOCK_ZOOM,
+ "tooltip", _("Adjust the zoom level"),
+ "zoom", 1.0,
+ NULL);
+ g_signal_connect (action, "zoom_to_level",
+ G_CALLBACK (zoom_control_changed_cb), window);
+ gtk_action_group_add_action (group, action);
+ g_object_unref (action);
+
+ action = g_object_new (EV_TYPE_NAVIGATION_ACTION,
+ "name", NAVIGATION_ACTION,
+ "label", _("Navigation"),
+ "is_important", TRUE,
+ "short_label", _("Back"),
+ "stock_id", GTK_STOCK_GO_DOWN,
+ /*translators: this is the history action*/
+ "tooltip", _("Move across visited pages"),
+ NULL);
+ g_signal_connect (action, "activate_link",
+ G_CALLBACK (navigation_action_activate_link_cb), window);
+ gtk_action_group_add_action (group, action);
+ g_object_unref (action);
+
+ action = g_object_new (EV_TYPE_OPEN_RECENT_ACTION,
+ "name", "FileOpenRecent",
+ "label", _("_Open…"),
+ "tooltip", _("Open an existing document"),
+ "stock_id", GTK_STOCK_OPEN,
+ NULL);
+ g_signal_connect (action, "activate",
+ G_CALLBACK (ev_window_cmd_file_open), window);
+ g_signal_connect (action, "item_activated",
+ G_CALLBACK (ev_window_open_recent_action_item_activated),
+ window);
+ gtk_action_group_add_action (group, action);
+ g_object_unref (action);
+}
+
+static void
+set_action_properties (GtkActionGroup *action_group)
+{
+ GtkAction *action;
+
+ action = gtk_action_group_get_action (action_group, "GoPreviousPage");
+ g_object_set (action, "is-important", TRUE, NULL);
+ /*translators: this is the label for toolbar button*/
+ g_object_set (action, "short_label", _("Previous"), NULL);
+
+ action = gtk_action_group_get_action (action_group, "GoNextPage");
+ g_object_set (action, "is-important", TRUE, NULL);
+ /*translators: this is the label for toolbar button*/
+ g_object_set (action, "short_label", _("Next"), NULL);
+
+ action = gtk_action_group_get_action (action_group, "ViewZoomIn");
+ /*translators: this is the label for toolbar button*/
+ g_object_set (action, "short_label", _("Zoom In"), NULL);
+
+ action = gtk_action_group_get_action (action_group, "ViewZoomOut");
+ /*translators: this is the label for toolbar button*/
+ g_object_set (action, "short_label", _("Zoom Out"), NULL);
+
+ action = gtk_action_group_get_action (action_group, "ViewBestFit");
+ /*translators: this is the label for toolbar button*/
+ g_object_set (action, "short_label", _("Best Fit"), NULL);
+
+ action = gtk_action_group_get_action (action_group, "ViewPageWidth");
+ /*translators: this is the label for toolbar button*/
+ g_object_set (action, "short_label", _("Fit Width"), NULL);
+
+ action = gtk_action_group_get_action (action_group, "LeaveFullscreen");
+ g_object_set (action, "is-important", TRUE, NULL);
+}
+
+static void
+sidebar_widget_model_set (EvSidebarLinks *ev_sidebar_links,
+ GParamSpec *pspec,
+ EvWindow *ev_window)
+{
+ GtkTreeModel *model;
+ GtkAction *action;
+
+ g_object_get (G_OBJECT (ev_sidebar_links),
+ "model", &model,
+ NULL);
+
+ action = gtk_action_group_get_action (ev_window->priv->action_group, PAGE_SELECTOR_ACTION);
+ ev_page_action_set_links_model (EV_PAGE_ACTION (action), model);
+ g_object_unref (model);
+}
+
+static gboolean
+view_actions_focus_in_cb (GtkWidget *widget, GdkEventFocus *event, EvWindow *window)
+{
+#ifdef ENABLE_DBUS
+ GObject *keys;
+
+ keys = ev_application_get_media_keys (EV_APP);
+ ev_media_player_keys_focused (EV_MEDIA_PLAYER_KEYS (keys));
+#endif /* ENABLE_DBUS */
+
+ update_chrome_flag (window, EV_CHROME_RAISE_TOOLBAR, FALSE);
+ ev_window_set_action_sensitive (window, "ViewToolbar", TRUE);
+
+ ev_window_set_view_accels_sensitivity (window, TRUE);
+
+ update_chrome_visibility (window);
+
+ return FALSE;
+}
+
+static gboolean
+view_actions_focus_out_cb (GtkWidget *widget, GdkEventFocus *event, EvWindow *window)
+{
+ ev_window_set_view_accels_sensitivity (window, FALSE);
+
+ return FALSE;
+}
+
+static void
+sidebar_page_main_widget_update_cb (GObject *ev_sidebar_page,
+ GParamSpec *pspec,
+ EvWindow *ev_window)
+{
+ GtkWidget *widget;
+
+ g_object_get (ev_sidebar_page, "main_widget", &widget, NULL);
+
+ if (widget != NULL) {
+ g_signal_connect_object (widget, "focus_in_event",
+ G_CALLBACK (view_actions_focus_in_cb),
+ ev_window, 0);
+ g_signal_connect_object (widget, "focus_out_event",
+ G_CALLBACK (view_actions_focus_out_cb),
+ ev_window, 0);
+ g_object_unref (widget);
+ }
+}
+
+static gboolean
+window_state_event_cb (EvWindow *window, GdkEventWindowState *event, gpointer dummy)
+{
+ if (!(event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)) {
+ gboolean maximized;
+
+ maximized = event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED;
+ if (window->priv->metadata && !ev_window_is_empty (window))
+ ev_metadata_set_boolean (window->priv->metadata, "window_maximized", maximized);
+ }
+
+ return FALSE;
+}
+
+static gboolean
+window_configure_event_cb (EvWindow *window, GdkEventConfigure *event, gpointer dummy)
+{
+ GdkWindowState state;
+ gdouble document_width, document_height;
+
+ if (!window->priv->metadata)
+ return FALSE;
+
+ state = gdk_window_get_state (gtk_widget_get_window (GTK_WIDGET (window)));
+
+ if (!(state & GDK_WINDOW_STATE_FULLSCREEN)) {
+ if (window->priv->document) {
+ ev_document_get_max_page_size (window->priv->document,
+ &document_width, &document_height);
+ g_settings_set (window->priv->default_settings, "window-ratio", "(dd)",
+ (double)event->width / document_width,
+ (double)event->height / document_height);
+
+ ev_metadata_set_int (window->priv->metadata, "window_x", event->x);
+ ev_metadata_set_int (window->priv->metadata, "window_y", event->y);
+ ev_metadata_set_int (window->priv->metadata, "window_width", event->width);
+ ev_metadata_set_int (window->priv->metadata, "window_height", event->height);
+ }
+ }
+
+ return FALSE;
+}
+
+static void
+launch_action (EvWindow *window, EvLinkAction *action)
+{
+ const char *filename = ev_link_action_get_filename (action);
+ GAppInfo *app_info;
+ GFile *file;
+ GList file_list = {NULL};
+ GAppLaunchContext *context;
+ GError *error = NULL;
+
+ if (filename == NULL)
+ return;
+
+ if (g_path_is_absolute (filename)) {
+ file = g_file_new_for_path (filename);
+ } else {
+ GFile *base_file;
+ gchar *dir;
+
+ dir = g_path_get_dirname (window->priv->uri);
+ base_file = g_file_new_for_uri (dir);
+ g_free (dir);
+
+ file = g_file_resolve_relative_path (base_file, filename);
+ g_object_unref (base_file);
+ }
+
+ app_info = g_file_query_default_handler (file, NULL, &error);
+ if (!app_info) {
+ ev_window_error_message (window, error,
+ "%s",
+ _("Unable to launch external application."));
+ g_object_unref (file);
+ g_error_free (error);
+
+ return;
+ }
+
+ context = G_APP_LAUNCH_CONTEXT (gdk_app_launch_context_new ());
+ gdk_app_launch_context_set_screen (GDK_APP_LAUNCH_CONTEXT (context),
+ gtk_window_get_screen (GTK_WINDOW (window)));
+ gdk_app_launch_context_set_timestamp (GDK_APP_LAUNCH_CONTEXT (context),
+ gtk_get_current_event_time ());
+
+ file_list.data = file;
+ if (!g_app_info_launch (app_info, &file_list, context, &error)) {
+ ev_window_error_message (window, error,
+ "%s",
+ _("Unable to launch external application."));
+ g_error_free (error);
+ }
+
+ g_object_unref (app_info);
+ g_object_unref (file);
+ /* FIXMEchpe: unref launch context? */
+
+ /* According to the PDF spec filename can be an executable. I'm not sure
+ allowing to launch executables is a good idea though. -- marco */
+}
+
+static void
+launch_external_uri (EvWindow *window, EvLinkAction *action)
+{
+ const gchar *uri = ev_link_action_get_uri (action);
+ GError *error = NULL;
+ gboolean ret;
+ GAppLaunchContext *context;
+
+ context = G_APP_LAUNCH_CONTEXT (gdk_app_launch_context_new ());
+ gdk_app_launch_context_set_screen (GDK_APP_LAUNCH_CONTEXT (context),
+ gtk_window_get_screen (GTK_WINDOW (window)));
+ gdk_app_launch_context_set_timestamp (GDK_APP_LAUNCH_CONTEXT (context),
+ gtk_get_current_event_time ());
+
+ if (!g_strstr_len (uri, strlen (uri), "://") &&
+ !g_str_has_prefix (uri, "mailto:")) {
+ gchar *new_uri;
+
+ /* Not a valid uri, assume http if it starts with www */
+ if (g_str_has_prefix (uri, "www.")) {
+ new_uri = g_strdup_printf ("http://%s", uri);
+ } else {
+ GFile *file, *parent;
+
+ file = g_file_new_for_uri (window->priv->uri);
+ parent = g_file_get_parent (file);
+ g_object_unref (file);
+ if (parent) {
+ gchar *parent_uri = g_file_get_uri (parent);
+
+ new_uri = g_build_filename (parent_uri, uri, NULL);
+ g_free (parent_uri);
+ g_object_unref (parent);
+ } else {
+ new_uri = g_strdup_printf ("file:///%s", uri);
+ }
+ }
+ ret = g_app_info_launch_default_for_uri (new_uri, context, &error);
+ g_free (new_uri);
+ } else {
+ ret = g_app_info_launch_default_for_uri (uri, context, &error);
+ }
+
+ if (ret == FALSE) {
+ ev_window_error_message (window, error,
+ "%s", _("Unable to open external link"));
+ g_error_free (error);
+ }
+
+ /* FIXMEchpe: unref launch context? */
+}
+
+static void
+open_remote_link (EvWindow *window, EvLinkAction *action)
+{
+ gchar *uri;
+ gchar *dir;
+
+ dir = g_path_get_dirname (window->priv->uri);
+
+ uri = g_build_filename (dir, ev_link_action_get_filename (action),
+ NULL);
+ g_free (dir);
+
+ ev_application_open_uri_at_dest (EV_APP, uri,
+ gtk_window_get_screen (GTK_WINDOW (window)),
+ ev_link_action_get_dest (action),
+ 0,
+ NULL,
+ gtk_get_current_event_time ());
+
+ g_free (uri);
+}
+
+static void
+do_action_named (EvWindow *window, EvLinkAction *action)
+{
+ const gchar *name = ev_link_action_get_name (action);
+
+ if (g_ascii_strcasecmp (name, "FirstPage") == 0) {
+ ev_window_cmd_go_first_page (NULL, window);
+ } else if (g_ascii_strcasecmp (name, "PrevPage") == 0) {
+ ev_window_cmd_go_previous_page (NULL, window);
+ } else if (g_ascii_strcasecmp (name, "NextPage") == 0) {
+ ev_window_cmd_go_next_page (NULL, window);
+ } else if (g_ascii_strcasecmp (name, "LastPage") == 0) {
+ ev_window_cmd_go_last_page (NULL, window);
+ } else if (g_ascii_strcasecmp (name, "GoToPage") == 0) {
+ ev_window_cmd_focus_page_selector (NULL, window);
+ } else if (g_ascii_strcasecmp (name, "Find") == 0) {
+ ev_window_cmd_edit_find (NULL, window);
+ } else if (g_ascii_strcasecmp (name, "Close") == 0) {
+ ev_window_cmd_file_close_window (NULL, window);
+ } else if (g_ascii_strcasecmp (name, "Print") == 0) {
+ ev_window_cmd_file_print (NULL, window);
+ } else {
+ g_warning ("Unimplemented named action: %s, please post a "
+ "bug report in Evince bugzilla "
+ "(http://bugzilla.mate.org) with a testcase.",
+ name);
+ }
+}
+
+static void
+view_external_link_cb (EvView *view, EvLinkAction *action, EvWindow *window)
+{
+ switch (ev_link_action_get_action_type (action)) {
+ case EV_LINK_ACTION_TYPE_GOTO_DEST: {
+ EvLinkDest *dest;
+
+ dest = ev_link_action_get_dest (action);
+ if (!dest)
+ return;
+
+ ev_window_open_copy_at_dest (window, dest);
+ }
+ break;
+ case EV_LINK_ACTION_TYPE_EXTERNAL_URI:
+ launch_external_uri (window, action);
+ break;
+ case EV_LINK_ACTION_TYPE_LAUNCH:
+ launch_action (window, action);
+ break;
+ case EV_LINK_ACTION_TYPE_GOTO_REMOTE:
+ open_remote_link (window, action);
+ break;
+ case EV_LINK_ACTION_TYPE_NAMED:
+ do_action_named (window, action);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void
+ev_view_popup_cmd_open_link (GtkAction *action, EvWindow *window)
+{
+ ev_view_handle_link (EV_VIEW (window->priv->view), window->priv->link);
+}
+
+static void
+ev_view_popup_cmd_open_link_new_window (GtkAction *action, EvWindow *window)
+{
+ EvLinkAction *ev_action = NULL;
+ EvLinkDest *dest;
+
+ ev_action = ev_link_get_action (window->priv->link);
+ if (!ev_action)
+ return;
+
+ dest = ev_link_action_get_dest (ev_action);
+ if (!dest)
+ return;
+
+ ev_window_open_copy_at_dest (window, dest);
+}
+
+static void
+ev_view_popup_cmd_copy_link_address (GtkAction *action, EvWindow *window)
+{
+ EvLinkAction *ev_action;
+
+ ev_action = ev_link_get_action (window->priv->link);
+ if (!ev_action)
+ return;
+
+ ev_view_copy_link_address (EV_VIEW (window->priv->view),
+ ev_action);
+}
+
+
+static void
+image_save_dialog_response_cb (GtkWidget *fc,
+ gint response_id,
+ EvWindow *ev_window)
+{
+ GFile *target_file;
+ gboolean is_native;
+ GError *error = NULL;
+ GdkPixbuf *pixbuf;
+ gchar *uri;
+ gchar **extensions;
+ gchar *filename;
+ gchar *file_format;
+ GdkPixbufFormat *format;
+ GtkFileFilter *filter;
+
+ if (response_id != GTK_RESPONSE_OK) {
+ gtk_widget_destroy (fc);
+ return;
+ }
+
+ uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (fc));
+ filter = gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (fc));
+ format = g_object_get_data (G_OBJECT (filter), "pixbuf-format");
+
+ if (format == NULL) {
+ format = get_gdk_pixbuf_format_by_extension (uri);
+ }
+
+ if (format == NULL && g_strrstr (uri, ".") == NULL) {
+ /* no extension found and no extension provided within uri */
+ format = get_gdk_pixbuf_format_by_extension (".png");
+ if (format == NULL) {
+ /* no .png support, try .jpeg */
+ format = get_gdk_pixbuf_format_by_extension (".jpeg");
+ }
+ }
+
+ if (format == NULL) {
+ ev_window_error_message (ev_window, NULL,
+ "%s",
+ _("Couldn't find appropriate format to save image"));
+ g_free (uri);
+ gtk_widget_destroy (fc);
+
+ return;
+ }
+
+ extensions = gdk_pixbuf_format_get_extensions (format);
+ if (!g_str_has_suffix (uri, extensions[0])) {
+ gchar *uri_extension;
+
+ uri_extension = g_strconcat (uri, ".", extensions[0], NULL);
+ target_file = g_file_new_for_uri (uri_extension);
+ g_free (uri_extension);
+ } else {
+ target_file = g_file_new_for_uri (uri);
+ }
+ g_strfreev (extensions);
+ g_free (uri);
+
+ is_native = g_file_is_native (target_file);
+ if (is_native) {
+ filename = g_file_get_path (target_file);
+ } else {
+ /* Create a temporary local file to save to */
+ if (ev_mkstemp ("saveimage.XXXXXX", &filename, &error) == -1)
+ goto has_error;
+ }
+
+ ev_document_doc_mutex_lock ();
+ pixbuf = ev_document_images_get_image (EV_DOCUMENT_IMAGES (ev_window->priv->document),
+ ev_window->priv->image);
+ ev_document_doc_mutex_unlock ();
+
+ file_format = gdk_pixbuf_format_get_name (format);
+ gdk_pixbuf_save (pixbuf, filename, file_format, &error, NULL);
+ g_free (file_format);
+ g_object_unref (pixbuf);
+
+ has_error:
+ if (error) {
+ ev_window_error_message (ev_window, error,
+ "%s", _("The image could not be saved."));
+ g_error_free (error);
+ g_free (filename);
+ g_object_unref (target_file);
+ gtk_widget_destroy (fc);
+
+ return;
+ }
+
+ if (!is_native) {
+ GFile *source_file;
+
+ source_file = g_file_new_for_path (filename);
+
+ ev_window_save_remote (ev_window, EV_SAVE_IMAGE,
+ source_file, target_file);
+ g_object_unref (source_file);
+ }
+
+ g_free (filename);
+ g_object_unref (target_file);
+ gtk_widget_destroy (fc);
+}
+
+static void
+ev_view_popup_cmd_save_image_as (GtkAction *action, EvWindow *window)
+{
+ GtkWidget *fc;
+
+ if (!window->priv->image)
+ return;
+
+ fc = gtk_file_chooser_dialog_new (_("Save Image"),
+ GTK_WINDOW (window),
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ GTK_STOCK_SAVE, GTK_RESPONSE_OK,
+ NULL);
+
+ gtk_dialog_set_default_response (GTK_DIALOG (fc), GTK_RESPONSE_OK);
+ gtk_dialog_set_alternative_button_order (GTK_DIALOG (fc),
+ GTK_RESPONSE_OK,
+ GTK_RESPONSE_CANCEL,
+ -1);
+
+ gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (fc), FALSE);
+ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (fc), TRUE);
+
+ file_chooser_dialog_add_writable_pixbuf_formats (GTK_FILE_CHOOSER (fc));
+
+ g_signal_connect (fc, "response",
+ G_CALLBACK (image_save_dialog_response_cb),
+ window);
+
+ gtk_widget_show (fc);
+}
+
+static void
+ev_view_popup_cmd_copy_image (GtkAction *action, EvWindow *window)
+{
+ GtkClipboard *clipboard;
+ GdkPixbuf *pixbuf;
+
+ if (!window->priv->image)
+ return;
+
+ clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window),
+ GDK_SELECTION_CLIPBOARD);
+ ev_document_doc_mutex_lock ();
+ pixbuf = ev_document_images_get_image (EV_DOCUMENT_IMAGES (window->priv->document),
+ window->priv->image);
+ ev_document_doc_mutex_unlock ();
+
+ gtk_clipboard_set_image (clipboard, pixbuf);
+ g_object_unref (pixbuf);
+}
+
+static void
+ev_view_popup_cmd_annot_properties (GtkAction *action,
+ EvWindow *window)
+{
+ const gchar *author;
+ GdkColor color;
+ gdouble opacity;
+ gboolean popup_is_open;
+ EvAnnotationPropertiesDialog *dialog;
+ EvAnnotation *annot = window->priv->annot;
+ EvAnnotationsSaveMask mask = EV_ANNOTATIONS_SAVE_NONE;
+
+ if (!annot)
+ return;
+
+ dialog = EV_ANNOTATION_PROPERTIES_DIALOG (ev_annotation_properties_dialog_new_with_annotation (window->priv->annot));
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_APPLY) {
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+
+ return;
+ }
+
+ /* Set annotations changes */
+ author = ev_annotation_properties_dialog_get_author (dialog);
+ if (ev_annotation_markup_set_label (EV_ANNOTATION_MARKUP (annot), author))
+ mask |= EV_ANNOTATIONS_SAVE_LABEL;
+
+ ev_annotation_properties_dialog_get_color (dialog, &color);
+ if (ev_annotation_set_color (annot, &color))
+ mask |= EV_ANNOTATIONS_SAVE_COLOR;
+
+ opacity = ev_annotation_properties_dialog_get_opacity (dialog);
+ if (ev_annotation_markup_set_opacity (EV_ANNOTATION_MARKUP (annot), opacity))
+ mask |= EV_ANNOTATIONS_SAVE_OPACITY;
+
+ popup_is_open = ev_annotation_properties_dialog_get_popup_is_open (dialog);
+ if (ev_annotation_markup_set_popup_is_open (EV_ANNOTATION_MARKUP (annot), popup_is_open))
+ mask |= EV_ANNOTATIONS_SAVE_POPUP_IS_OPEN;
+
+ if (EV_IS_ANNOTATION_TEXT (annot)) {
+ EvAnnotationTextIcon icon;
+
+ icon = ev_annotation_properties_dialog_get_text_icon (dialog);
+ if (ev_annotation_text_set_icon (EV_ANNOTATION_TEXT (annot), icon))
+ mask |= EV_ANNOTATIONS_SAVE_TEXT_ICON;
+ }
+
+ if (mask != EV_ANNOTATIONS_SAVE_NONE) {
+ ev_document_doc_mutex_lock ();
+ ev_document_annotations_save_annotation (EV_DOCUMENT_ANNOTATIONS (window->priv->document),
+ window->priv->annot,
+ mask);
+ ev_document_doc_mutex_unlock ();
+
+ /* FIXME: update annot region only */
+ ev_view_reload (EV_VIEW (window->priv->view));
+ }
+
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+static void
+ev_attachment_popup_cmd_open_attachment (GtkAction *action, EvWindow *window)
+{
+ GList *l;
+ GdkScreen *screen;
+
+ if (!window->priv->attach_list)
+ return;
+
+ screen = gtk_window_get_screen (GTK_WINDOW (window));
+
+ for (l = window->priv->attach_list; l && l->data; l = g_list_next (l)) {
+ EvAttachment *attachment;
+ GError *error = NULL;
+
+ attachment = (EvAttachment *) l->data;
+
+ ev_attachment_open (attachment, screen, gtk_get_current_event_time (), &error);
+
+ if (error) {
+ ev_window_error_message (window, error,
+ "%s", _("Unable to open attachment"));
+ g_error_free (error);
+ }
+ }
+}
+
+static void
+attachment_save_dialog_response_cb (GtkWidget *fc,
+ gint response_id,
+ EvWindow *ev_window)
+{
+ GFile *target_file;
+ gchar *uri;
+ GList *l;
+ GtkFileChooserAction fc_action;
+ gboolean is_dir;
+ gboolean is_native;
+
+ if (response_id != GTK_RESPONSE_OK) {
+ gtk_widget_destroy (fc);
+ return;
+ }
+
+ uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (fc));
+ target_file = g_file_new_for_uri (uri);
+ g_object_get (G_OBJECT (fc), "action", &fc_action, NULL);
+ is_dir = (fc_action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+ is_native = g_file_is_native (target_file);
+
+ for (l = ev_window->priv->attach_list; l && l->data; l = g_list_next (l)) {
+ EvAttachment *attachment;
+ GFile *save_to = NULL;
+ GError *error = NULL;
+
+ attachment = (EvAttachment *) l->data;
+
+ if (is_native) {
+ if (is_dir) {
+ save_to = g_file_get_child (target_file,
+ /* FIXMEchpe: file name encoding! */
+ ev_attachment_get_name (attachment));
+ } else {
+ save_to = g_object_ref (target_file);
+ }
+ } else {
+ save_to = ev_mkstemp_file ("saveattachment.XXXXXX", &error);
+ }
+
+ if (save_to)
+ ev_attachment_save (attachment, save_to, &error);
+
+ if (error) {
+ ev_window_error_message (ev_window, error,
+ "%s", _("The attachment could not be saved."));
+ g_error_free (error);
+ g_object_unref (save_to);
+
+ continue;
+ }
+
+ if (!is_native) {
+ GFile *dest_file;
+
+ if (is_dir) {
+ dest_file = g_file_get_child (target_file,
+ ev_attachment_get_name (attachment));
+ } else {
+ dest_file = g_object_ref (target_file);
+ }
+
+ ev_window_save_remote (ev_window, EV_SAVE_ATTACHMENT,
+ save_to, dest_file);
+
+ g_object_unref (dest_file);
+ }
+
+ g_object_unref (save_to);
+ }
+
+ g_free (uri);
+ g_object_unref (target_file);
+
+ gtk_widget_destroy (fc);
+}
+
+static void
+ev_attachment_popup_cmd_save_attachment_as (GtkAction *action, EvWindow *window)
+{
+ GtkWidget *fc;
+ EvAttachment *attachment = NULL;
+
+ if (!window->priv->attach_list)
+ return;
+
+ if (g_list_length (window->priv->attach_list) == 1)
+ attachment = (EvAttachment *) window->priv->attach_list->data;
+
+ fc = gtk_file_chooser_dialog_new (
+ _("Save Attachment"),
+ GTK_WINDOW (window),
+ attachment ? GTK_FILE_CHOOSER_ACTION_SAVE : GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ GTK_STOCK_SAVE, GTK_RESPONSE_OK,
+ NULL);
+
+ gtk_dialog_set_default_response (GTK_DIALOG (fc), GTK_RESPONSE_OK);
+ gtk_dialog_set_alternative_button_order (GTK_DIALOG (fc),
+ GTK_RESPONSE_OK,
+ GTK_RESPONSE_CANCEL,
+ -1);
+
+ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (fc), TRUE);
+ gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (fc), FALSE);
+
+ if (attachment)
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (fc),
+ ev_attachment_get_name (attachment));
+
+ g_signal_connect (fc, "response",
+ G_CALLBACK (attachment_save_dialog_response_cb),
+ window);
+
+ gtk_widget_show (fc);
+}
+
+static void
+ev_window_media_player_key_pressed (EvWindow *window,
+ const gchar *key,
+ gpointer user_data)
+{
+ if (!gtk_window_is_active (GTK_WINDOW (window)))
+ return;
+
+ /* Note how Previous/Next only go to the
+ * next/previous page despite their icon telling you
+ * they should go to the beginning/end.
+ *
+ * There's very few keyboards with FFW/RWD though,
+ * so we stick the most useful keybinding on the most
+ * often seen keys
+ */
+ if (strcmp (key, "Play") == 0) {
+ ev_window_run_presentation (window);
+ } else if (strcmp (key, "Previous") == 0) {
+ ev_window_cmd_go_previous_page (NULL, window);
+ } else if (strcmp (key, "Next") == 0) {
+ ev_window_cmd_go_next_page (NULL, window);
+ } else if (strcmp (key, "FastForward") == 0) {
+ ev_window_cmd_go_last_page (NULL, window);
+ } else if (strcmp (key, "Rewind") == 0) {
+ ev_window_cmd_go_first_page (NULL, window);
+ }
+}
+
+static EggToolbarsModel *
+get_toolbars_model (void)
+{
+ EggToolbarsModel *toolbars_model;
+ gchar *toolbars_file;
+ gchar *toolbars_path;
+ gint i;
+
+ toolbars_model = egg_toolbars_model_new ();
+
+ toolbars_file = g_build_filename (ev_application_get_dot_dir (EV_APP, FALSE),
+ "evince_toolbar.xml", NULL);
+ toolbars_path = g_build_filename (ev_application_get_data_dir (EV_APP),
+ "evince-toolbar.xml", NULL);
+ egg_toolbars_model_load_names (toolbars_model, toolbars_path);
+
+ if (!egg_toolbars_model_load_toolbars (toolbars_model, toolbars_file)) {
+ egg_toolbars_model_load_toolbars (toolbars_model, toolbars_path);
+ goto skip_conversion;
+ }
+
+ /* Open item doesn't exist anymore,
+ * convert it to OpenRecent for compatibility
+ */
+ for (i = 0; i < egg_toolbars_model_n_items (toolbars_model, 0); i++) {
+ const gchar *item;
+
+ item = egg_toolbars_model_item_nth (toolbars_model, 0, i);
+ if (g_ascii_strcasecmp (item, "FileOpen") == 0) {
+ egg_toolbars_model_remove_item (toolbars_model, 0, i);
+ egg_toolbars_model_add_item (toolbars_model, 0, i,
+ "FileOpenRecent");
+ egg_toolbars_model_save_toolbars (toolbars_model, toolbars_file, "1.0");
+ break;
+ }
+ }
+
+ skip_conversion:
+ g_free (toolbars_file);
+ g_free (toolbars_path);
+
+ egg_toolbars_model_set_flags (toolbars_model, 0, EGG_TB_MODEL_NOT_REMOVABLE);
+
+ return toolbars_model;
+}
+
+#ifdef ENABLE_DBUS
+static void
+ev_window_sync_source (EvWindow *window,
+ EvSourceLink *link)
+{
+ GDBusConnection *connection;
+ GError *error = NULL;
+
+ if (window->priv->dbus_object_id <= 0)
+ return;
+
+ connection = ev_application_get_dbus_connection (EV_APP);
+ if (!connection)
+ return;
+
+ g_dbus_connection_emit_signal (connection,
+ NULL,
+ window->priv->dbus_object_path,
+ EV_WINDOW_DBUS_INTERFACE,
+ "SyncSource",
+ g_variant_new ("(s(ii))",
+ link->filename,
+ link->line,
+ link->col),
+ &error);
+ if (error) {
+ g_printerr ("Failed to emit DBus signal SyncSource: %s\n",
+ error->message);
+ g_error_free (error);
+ }
+}
+
+static void
+ev_window_emit_closed (EvWindow *window)
+{
+ GDBusConnection *connection;
+ GError *error = NULL;
+
+ if (window->priv->dbus_object_id <= 0)
+ return;
+
+ connection = ev_application_get_dbus_connection (EV_APP);
+ if (!connection)
+ return;
+
+ g_dbus_connection_emit_signal (connection,
+ NULL,
+ window->priv->dbus_object_path,
+ EV_WINDOW_DBUS_INTERFACE,
+ "Closed",
+ NULL,
+ &error);
+ if (error) {
+ g_printerr ("Failed to emit DBus signal Closed: %s\n",
+ error->message);
+ g_error_free (error);
+
+ return;
+ }
+
+ /* If this is the last window call g_dbus_connection_flush_sync()
+ * to make sure the signal is emitted.
+ */
+ if (ev_application_get_n_windows (EV_APP) == 1)
+ g_dbus_connection_flush_sync (connection, NULL, NULL);
+}
+
+static void
+ev_window_emit_doc_loaded (EvWindow *window)
+{
+ GDBusConnection *connection;
+ GError *error = NULL;
+
+ if (window->priv->dbus_object_id <= 0)
+ return;
+
+ connection = ev_application_get_dbus_connection (EV_APP);
+ if (!connection)
+ return;
+
+ g_dbus_connection_emit_signal (connection,
+ NULL,
+ window->priv->dbus_object_path,
+ EV_WINDOW_DBUS_INTERFACE,
+ "DocumentLoaded",
+ g_variant_new("(s)", window->priv->uri),
+ &error);
+ if (error) {
+ g_printerr ("Failed to emit DBus signal DocumentLoaded: %s\n",
+ error->message);
+ g_error_free (error);
+
+ return;
+ }
+}
+
+static void
+method_call_cb (GDBusConnection *connection,
+ const gchar *sender,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ EvWindow *window = EV_WINDOW (user_data);
+
+ if (g_strcmp0 (method_name, "SyncView") != 0)
+ return;
+
+ if (window->priv->document && ev_document_has_synctex (window->priv->document)) {
+ EvSourceLink link;
+
+ g_variant_get (parameters, "(&s(ii))", &link.filename, &link.line, &link.col);
+ ev_view_highlight_forward_search (EV_VIEW (window->priv->view), &link);
+ gtk_window_present (GTK_WINDOW (window));
+ }
+
+ g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
+}
+
+static const char introspection_xml[] =
+ "<node>"
+ "<interface name='org.mate.evince.Window'>"
+ "<method name='SyncView'>"
+ "<arg type='s' name='source_file' direction='in'/>"
+ "<arg type='(ii)' name='source_point' direction='in'/>"
+ "</method>"
+ "<signal name='SyncSource'>"
+ "<arg type='s' name='source_file' direction='out'/>"
+ "<arg type='(ii)' name='source_point' direction='out'/>"
+ "</signal>"
+ "<signal name='Closed'/>"
+ "<signal name='DocumentLoaded'>"
+ "<arg type='s' name='uri' direction='out'/>"
+ "</signal>"
+ "</interface>"
+ "</node>";
+
+static const GDBusInterfaceVTable interface_vtable = {
+ method_call_cb,
+ NULL,
+ NULL
+};
+
+static GDBusNodeInfo *introspection_data;
+#endif /* ENABLE_DBUS */
+
+static void
+ev_window_init (EvWindow *ev_window)
+{
+ GtkActionGroup *action_group;
+ GtkAccelGroup *accel_group;
+ GError *error = NULL;
+ GtkWidget *sidebar_widget;
+ GtkWidget *menuitem;
+ EggToolbarsModel *toolbars_model;
+ GObject *mpkeys;
+ gchar *ui_path;
+#ifdef ENABLE_DBUS
+ GDBusConnection *connection;
+ static gint window_id = 0;
+#endif
+
+ g_signal_connect (ev_window, "configure_event",
+ G_CALLBACK (window_configure_event_cb), NULL);
+ g_signal_connect (ev_window, "window_state_event",
+ G_CALLBACK (window_state_event_cb), NULL);
+
+ ev_window->priv = EV_WINDOW_GET_PRIVATE (ev_window);
+
+#ifdef ENABLE_DBUS
+ connection = ev_application_get_dbus_connection (EV_APP);
+ if (connection) {
+ if (!introspection_data) {
+ introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, &error);
+ if (error) g_warning ("%s\n", error->message);
+ }
+ g_assert (introspection_data != NULL);
+
+ ev_window->priv->dbus_object_path = g_strdup_printf (EV_WINDOW_DBUS_OBJECT_PATH, window_id++);
+ ev_window->priv->dbus_object_id =
+ g_dbus_connection_register_object (connection,
+ ev_window->priv->dbus_object_path,
+ introspection_data->interfaces[0],
+ &interface_vtable,
+ ev_window, NULL,
+ &error);
+ if (ev_window->priv->dbus_object_id == 0) {
+ g_printerr ("Failed to register bus object %s: %s\n",
+ ev_window->priv->dbus_object_path, error->message);
+ g_error_free (error);
+ g_free (ev_window->priv->dbus_object_path);
+ ev_window->priv->dbus_object_path = NULL;
+ error = NULL;
+ }
+ }
+
+#endif /* ENABLE_DBUS */
+
+ ev_window->priv->model = ev_document_model_new ();
+
+ ev_window->priv->page_mode = PAGE_MODE_DOCUMENT;
+ ev_window->priv->title = ev_window_title_new (ev_window);
+
+ ev_window->priv->main_box = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (ev_window), ev_window->priv->main_box);
+ gtk_widget_show (ev_window->priv->main_box);
+
+ action_group = gtk_action_group_new ("MenuActions");
+ ev_window->priv->action_group = action_group;
+ gtk_action_group_set_translation_domain (action_group, NULL);
+ gtk_action_group_add_actions (action_group, entries,
+ G_N_ELEMENTS (entries), ev_window);
+ gtk_action_group_add_toggle_actions (action_group, toggle_entries,
+ G_N_ELEMENTS (toggle_entries),
+ ev_window);
+ set_action_properties (action_group);
+ register_custom_actions (ev_window, action_group);
+
+ ev_window->priv->ui_manager = gtk_ui_manager_new ();
+ gtk_ui_manager_insert_action_group (ev_window->priv->ui_manager,
+ action_group, 0);
+
+ accel_group =
+ gtk_ui_manager_get_accel_group (ev_window->priv->ui_manager);
+ gtk_window_add_accel_group (GTK_WINDOW (ev_window), accel_group);
+
+ ev_window_set_view_accels_sensitivity (ev_window, FALSE);
+
+ action_group = gtk_action_group_new ("ViewPopupActions");
+ ev_window->priv->view_popup_action_group = action_group;
+ gtk_action_group_set_translation_domain (action_group, NULL);
+ gtk_action_group_add_actions (action_group, view_popup_entries,
+ G_N_ELEMENTS (view_popup_entries),
+ ev_window);
+ gtk_ui_manager_insert_action_group (ev_window->priv->ui_manager,
+ action_group, 0);
+
+ action_group = gtk_action_group_new ("AttachmentPopupActions");
+ ev_window->priv->attachment_popup_action_group = action_group;
+ gtk_action_group_set_translation_domain (action_group, NULL);
+ gtk_action_group_add_actions (action_group, attachment_popup_entries,
+ G_N_ELEMENTS (attachment_popup_entries),
+ ev_window);
+ gtk_ui_manager_insert_action_group (ev_window->priv->ui_manager,
+ action_group, 0);
+
+ ui_path = g_build_filename (ev_application_get_data_dir (EV_APP),
+ "evince-ui.xml", NULL);
+ if (!gtk_ui_manager_add_ui_from_file (
+ ev_window->priv->ui_manager, ui_path, &error))
+ {
+ g_warning ("building menus failed: %s", error->message);
+ g_error_free (error);
+ }
+ g_free (ui_path);
+
+ ev_window->priv->recent_manager = gtk_recent_manager_get_default ();
+ ev_window->priv->recent_action_group = NULL;
+ ev_window->priv->recent_ui_id = 0;
+ g_signal_connect_swapped (ev_window->priv->recent_manager,
+ "changed",
+ G_CALLBACK (ev_window_setup_recent),
+ ev_window);
+
+ ev_window->priv->menubar =
+ gtk_ui_manager_get_widget (ev_window->priv->ui_manager,
+ "/MainMenu");
+ gtk_box_pack_start (GTK_BOX (ev_window->priv->main_box),
+ ev_window->priv->menubar,
+ FALSE, FALSE, 0);
+ menuitem = gtk_ui_manager_get_widget (ev_window->priv->ui_manager,
+ "/MainMenu/EditMenu/EditRotateLeftMenu");
+ gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menuitem), TRUE);
+ menuitem = gtk_ui_manager_get_widget (ev_window->priv->ui_manager,
+ "/MainMenu/EditMenu/EditRotateRightMenu");
+ gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menuitem), TRUE);
+
+ toolbars_model = get_toolbars_model ();
+ ev_window->priv->toolbar = GTK_WIDGET
+ (g_object_new (EGG_TYPE_EDITABLE_TOOLBAR,
+ "ui-manager", ev_window->priv->ui_manager,
+ "popup-path", "/ToolbarPopup",
+ "model", toolbars_model,
+ NULL));
+ g_object_unref (toolbars_model);
+
+ egg_editable_toolbar_show (EGG_EDITABLE_TOOLBAR (ev_window->priv->toolbar),
+ "DefaultToolBar");
+ gtk_box_pack_start (GTK_BOX (ev_window->priv->main_box),
+ ev_window->priv->toolbar,
+ FALSE, FALSE, 0);
+ gtk_widget_show (ev_window->priv->toolbar);
+
+ /* Add the main area */
+ ev_window->priv->hpaned = gtk_hpaned_new ();
+ g_signal_connect (ev_window->priv->hpaned,
+ "notify::position",
+ G_CALLBACK (ev_window_sidebar_position_change_cb),
+ ev_window);
+
+ gtk_paned_set_position (GTK_PANED (ev_window->priv->hpaned), SIDEBAR_DEFAULT_SIZE);
+ gtk_box_pack_start (GTK_BOX (ev_window->priv->main_box), ev_window->priv->hpaned,
+ TRUE, TRUE, 0);
+ gtk_widget_show (ev_window->priv->hpaned);
+
+ ev_window->priv->sidebar = ev_sidebar_new ();
+ ev_sidebar_set_model (EV_SIDEBAR (ev_window->priv->sidebar),
+ ev_window->priv->model);
+ gtk_paned_pack1 (GTK_PANED (ev_window->priv->hpaned),
+ ev_window->priv->sidebar, FALSE, FALSE);
+ gtk_widget_show (ev_window->priv->sidebar);
+
+ /* Stub sidebar, for now */
+
+ sidebar_widget = ev_sidebar_thumbnails_new ();
+ ev_window->priv->sidebar_thumbs = sidebar_widget;
+ g_signal_connect (sidebar_widget,
+ "notify::main-widget",
+ G_CALLBACK (sidebar_page_main_widget_update_cb),
+ ev_window);
+ sidebar_page_main_widget_update_cb (G_OBJECT (sidebar_widget), NULL, ev_window);
+ gtk_widget_show (sidebar_widget);
+ ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar),
+ sidebar_widget);
+
+ sidebar_widget = ev_sidebar_links_new ();
+ ev_window->priv->sidebar_links = sidebar_widget;
+ g_signal_connect (sidebar_widget,
+ "notify::model",
+ G_CALLBACK (sidebar_widget_model_set),
+ ev_window);
+ g_signal_connect (sidebar_widget,
+ "link_activated",
+ G_CALLBACK (sidebar_links_link_activated_cb),
+ ev_window);
+ sidebar_page_main_widget_update_cb (G_OBJECT (sidebar_widget), NULL, ev_window);
+ gtk_widget_show (sidebar_widget);
+ ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar),
+ sidebar_widget);
+
+ sidebar_widget = ev_sidebar_attachments_new ();
+ ev_window->priv->sidebar_attachments = sidebar_widget;
+ g_signal_connect_object (sidebar_widget,
+ "popup",
+ G_CALLBACK (attachment_bar_menu_popup_cb),
+ ev_window, 0);
+ gtk_widget_show (sidebar_widget);
+ ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar),
+ sidebar_widget);
+
+ sidebar_widget = ev_sidebar_layers_new ();
+ ev_window->priv->sidebar_layers = sidebar_widget;
+ g_signal_connect (sidebar_widget,
+ "layers_visibility_changed",
+ G_CALLBACK (sidebar_layers_visibility_changed),
+ ev_window);
+ gtk_widget_show (sidebar_widget);
+ ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar),
+ sidebar_widget);
+
+ sidebar_widget = ev_sidebar_annotations_new ();
+ ev_window->priv->sidebar_annots = sidebar_widget;
+ g_signal_connect (sidebar_widget,
+ "annot_activated",
+ G_CALLBACK (sidebar_annots_annot_activated_cb),
+ ev_window);
+ g_signal_connect (sidebar_widget,
+ "begin_annot_add",
+ G_CALLBACK (sidebar_annots_begin_annot_add),
+ ev_window);
+ g_signal_connect (sidebar_widget,
+ "annot_add_cancelled",
+ G_CALLBACK (sidebar_annots_annot_add_cancelled),
+ ev_window);
+ gtk_widget_show (sidebar_widget);
+ ev_sidebar_add_page (EV_SIDEBAR (ev_window->priv->sidebar),
+ sidebar_widget);
+
+ ev_window->priv->view_box = gtk_vbox_new (FALSE, 0);
+ ev_window->priv->scrolled_window =
+ GTK_WIDGET (g_object_new (GTK_TYPE_SCROLLED_WINDOW,
+ "shadow-type", GTK_SHADOW_IN,
+ NULL));
+ gtk_box_pack_start (GTK_BOX (ev_window->priv->view_box),
+ ev_window->priv->scrolled_window,
+ TRUE, TRUE, 0);
+ gtk_widget_show (ev_window->priv->scrolled_window);
+
+ gtk_paned_add2 (GTK_PANED (ev_window->priv->hpaned),
+ ev_window->priv->view_box);
+ gtk_widget_show (ev_window->priv->view_box);
+
+ ev_window->priv->view = ev_view_new ();
+ ev_view_set_page_cache_size (EV_VIEW (ev_window->priv->view), PAGE_CACHE_SIZE);
+ ev_view_set_model (EV_VIEW (ev_window->priv->view), ev_window->priv->model);
+
+ ev_window->priv->password_view = ev_password_view_new (GTK_WINDOW (ev_window));
+ g_signal_connect_swapped (ev_window->priv->password_view,
+ "unlock",
+ G_CALLBACK (ev_window_password_view_unlock),
+ ev_window);
+ g_signal_connect_object (ev_window->priv->view, "focus_in_event",
+ G_CALLBACK (view_actions_focus_in_cb),
+ ev_window, 0);
+ g_signal_connect_object (ev_window->priv->view, "focus_out_event",
+ G_CALLBACK (view_actions_focus_out_cb),
+ ev_window, 0);
+ g_signal_connect_object (ev_window->priv->view, "external-link",
+ G_CALLBACK (view_external_link_cb),
+ ev_window, 0);
+ g_signal_connect_object (ev_window->priv->view, "handle-link",
+ G_CALLBACK (view_handle_link_cb),
+ ev_window, 0);
+ g_signal_connect_object (ev_window->priv->view, "popup",
+ G_CALLBACK (view_menu_popup_cb),
+ ev_window, 0);
+ g_signal_connect_object (ev_window->priv->view, "selection-changed",
+ G_CALLBACK (view_selection_changed_cb),
+ ev_window, 0);
+ g_signal_connect_object (ev_window->priv->view, "annot-added",
+ G_CALLBACK (view_annot_added),
+ ev_window, 0);
+#ifdef ENABLE_DBUS
+ g_signal_connect_swapped (ev_window->priv->view, "sync-source",
+ G_CALLBACK (ev_window_sync_source),
+ ev_window);
+#endif
+ gtk_widget_show (ev_window->priv->view);
+ gtk_widget_show (ev_window->priv->password_view);
+
+ /* Find Bar */
+ ev_window->priv->find_bar = egg_find_bar_new ();
+ gtk_box_pack_end (GTK_BOX (ev_window->priv->main_box),
+ ev_window->priv->find_bar,
+ FALSE, TRUE, 0);
+
+ /* We own a ref on these widgets, as we can swap them in and out */
+ g_object_ref (ev_window->priv->view);
+ g_object_ref (ev_window->priv->password_view);
+
+ gtk_container_add (GTK_CONTAINER (ev_window->priv->scrolled_window),
+ ev_window->priv->view);
+
+ /* Connect to model signals */
+ g_signal_connect_swapped (ev_window->priv->model,
+ "page-changed",
+ G_CALLBACK (ev_window_page_changed_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->model,
+ "notify::document",
+ G_CALLBACK (ev_window_document_changed_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->model,
+ "notify::scale",
+ G_CALLBACK (ev_window_zoom_changed_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->model,
+ "notify::sizing-mode",
+ G_CALLBACK (ev_window_sizing_mode_changed_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->model,
+ "notify::rotation",
+ G_CALLBACK (ev_window_rotation_changed_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->model,
+ "notify::continuous",
+ G_CALLBACK (ev_window_continuous_changed_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->model,
+ "notify::dual-page",
+ G_CALLBACK (ev_window_dual_mode_changed_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->model,
+ "notify::inverted-colors",
+ G_CALLBACK (ev_window_inverted_colors_changed_cb),
+ ev_window);
+
+ /* Connect sidebar signals */
+ g_signal_connect (ev_window->priv->sidebar,
+ "notify::visible",
+ G_CALLBACK (ev_window_sidebar_visibility_changed_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->sidebar,
+ "notify::current-page",
+ G_CALLBACK (ev_window_sidebar_current_page_changed_cb),
+ ev_window);
+
+ /* Connect to find bar signals */
+ g_signal_connect (ev_window->priv->find_bar,
+ "previous",
+ G_CALLBACK (find_bar_previous_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->find_bar,
+ "next",
+ G_CALLBACK (find_bar_next_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->find_bar,
+ "close",
+ G_CALLBACK (find_bar_close_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->find_bar,
+ "notify::search-string",
+ G_CALLBACK (find_bar_search_changed_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->find_bar,
+ "notify::case-sensitive",
+ G_CALLBACK (find_bar_search_changed_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->find_bar,
+ "notify::visible",
+ G_CALLBACK (find_bar_visibility_changed_cb),
+ ev_window);
+ g_signal_connect (ev_window->priv->find_bar,
+ "scroll",
+ G_CALLBACK (find_bar_scroll),
+ ev_window);
+
+ /* Popups */
+ ev_window->priv->view_popup = gtk_ui_manager_get_widget (ev_window->priv->ui_manager,
+ "/DocumentPopup");
+ ev_window->priv->link = NULL;
+
+ ev_window->priv->attachment_popup = gtk_ui_manager_get_widget (ev_window->priv->ui_manager,
+ "/AttachmentPopup");
+ ev_window->priv->attach_list = NULL;
+
+ /* Media player keys */
+ mpkeys = ev_application_get_media_keys (EV_APP);
+ if (mpkeys) {
+ g_signal_connect_swapped (mpkeys, "key_pressed",
+ G_CALLBACK (ev_window_media_player_key_pressed),
+ ev_window);
+ }
+
+ /* Give focus to the document view */
+ gtk_widget_grab_focus (ev_window->priv->view);
+
+ ev_window->priv->default_settings = g_settings_new (GS_SCHEMA_NAME".Default");
+ g_settings_delay (ev_window->priv->default_settings);
+
+ /* Set it user interface params */
+ ev_window_setup_recent (ev_window);
+
+ ev_window_setup_gtk_settings (ev_window);
+
+ setup_chrome_from_metadata (ev_window);
+ update_chrome_actions (ev_window);
+ update_chrome_visibility (ev_window);
+
+ gtk_window_set_default_size (GTK_WINDOW (ev_window), 600, 600);
+
+ setup_view_from_metadata (ev_window);
+ setup_sidebar_from_metadata (ev_window);
+
+ ev_window_sizing_mode_changed_cb (ev_window->priv->model, NULL, ev_window);
+ ev_window_setup_action_sensitivity (ev_window);
+
+ /* Drag and Drop */
+ gtk_drag_dest_set (GTK_WIDGET (ev_window),
+ GTK_DEST_DEFAULT_ALL,
+ NULL, 0,
+ GDK_ACTION_COPY);
+ gtk_drag_dest_add_uri_targets (GTK_WIDGET (ev_window));
+}
+
+/**
+ * ev_window_new:
+ *
+ * Creates a #GtkWidget that represents the window.
+ *
+ * Returns: the #GtkWidget that represents the window.
+ */
+GtkWidget *
+ev_window_new (void)
+{
+ GtkWidget *ev_window;
+
+ ev_window = GTK_WIDGET (g_object_new (EV_TYPE_WINDOW,
+ "type", GTK_WINDOW_TOPLEVEL,
+ NULL));
+
+ return ev_window;
+}
+
+const gchar *
+ev_window_get_dbus_object_path (EvWindow *ev_window)
+{
+#ifdef ENABLE_DBUS
+ return ev_window->priv->dbus_object_path;
+#else
+ return NULL;
+#endif
+}
diff --git a/shell/ev-window.h b/shell/ev-window.h
new file mode 100644
index 00000000..c6e4bd1b
--- /dev/null
+++ b/shell/ev-window.h
@@ -0,0 +1,93 @@
+/* this file is part of evince, a mate document viewer
+ *
+ * Copyright (C) 2004 Martin Kretzschmar
+ *
+ * Author:
+ * Martin Kretzschmar <[email protected]>
+ *
+ * Evince 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.
+ *
+ * Evince 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 EV_WINDOW_H
+#define EV_WINDOW_H
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include "ev-link.h"
+
+G_BEGIN_DECLS
+
+typedef enum {
+ EV_WINDOW_MODE_NORMAL,
+ EV_WINDOW_MODE_FULLSCREEN,
+ EV_WINDOW_MODE_PRESENTATION
+} EvWindowRunMode;
+
+typedef struct {
+ gint start;
+ gint end;
+} EvPrintRange;
+
+typedef enum {
+ EV_PRINT_PAGE_SET_ALL,
+ EV_PRINT_PAGE_SET_EVEN,
+ EV_PRINT_PAGE_SET_ODD
+} EvPrintPageSet;
+
+typedef struct _EvWindow EvWindow;
+typedef struct _EvWindowClass EvWindowClass;
+typedef struct _EvWindowPrivate EvWindowPrivate;
+
+#define EV_TYPE_WINDOW (ev_window_get_type())
+#define EV_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_WINDOW, EvWindow))
+#define EV_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_WINDOW, EvWindowClass))
+#define EV_IS_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_WINDOW))
+#define EV_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_WINDOW))
+#define EV_WINDOW_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_WINDOW, EvWindowClass))
+
+
+struct _EvWindow {
+ GtkWindow base_instance;
+ EvWindowPrivate *priv;
+};
+
+struct _EvWindowClass {
+ GtkWindowClass base_class;
+};
+
+GType ev_window_get_type (void) G_GNUC_CONST;
+GtkWidget *ev_window_new (void);
+const char *ev_window_get_uri (EvWindow *ev_window);
+void ev_window_open_uri (EvWindow *ev_window,
+ const char *uri,
+ EvLinkDest *dest,
+ EvWindowRunMode mode,
+ const gchar *search_string);
+void ev_window_open_document (EvWindow *ev_window,
+ EvDocument *document,
+ EvLinkDest *dest,
+ EvWindowRunMode mode,
+ const gchar *search_string);
+gboolean ev_window_is_empty (const EvWindow *ev_window);
+void ev_window_print_range (EvWindow *ev_window,
+ int first_page,
+ int last_page);
+const gchar * ev_window_get_dbus_object_path (EvWindow *ev_window);
+
+
+G_END_DECLS
+
+#endif /* !EV_WINDOW_H */
diff --git a/shell/evince-icon.rc b/shell/evince-icon.rc
new file mode 100644
index 00000000..7a37b524
--- /dev/null
+++ b/shell/evince-icon.rc
@@ -0,0 +1 @@
+1 ICON "evince.ico"
diff --git a/shell/main.c b/shell/main.c
new file mode 100644
index 00000000..5e3b6774
--- /dev/null
+++ b/shell/main.c
@@ -0,0 +1,328 @@
+/*
+ * Copyright (C) 2004 Marco Pesenti Gritti
+ *
+ * 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, 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 "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#include <glib/gstdio.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include "ev-application.h"
+#include "ev-debug.h"
+#include "ev-init.h"
+#include "ev-file-helpers.h"
+#include "ev-stock-icons.h"
+#include "ev-metadata.h"
+
+#ifdef WITH_SMCLIENT
+#include "eggsmclient.h"
+#ifdef GDK_WINDOWING_X11
+#include "eggdesktopfile.h"
+#endif
+#endif /* WITH_SMCLIENT */
+
+#ifdef G_OS_WIN32
+#include <io.h>
+#include <conio.h>
+#if !(_WIN32_WINNT >= 0x0500)
+#error "_WIN32_WINNT must be defined >= 0x0500"
+#endif
+#include <windows.h>
+#endif
+
+static gchar *ev_page_label;
+static gchar *ev_find_string;
+static gint ev_page_index = 0;
+static gboolean preview_mode = FALSE;
+static gboolean fullscreen_mode = FALSE;
+static gboolean presentation_mode = FALSE;
+static gboolean unlink_temp_file = FALSE;
+static gchar *print_settings;
+static const char **file_arguments = NULL;
+
+
+static gboolean
+option_version_cb (const gchar *option_name,
+ const gchar *value,
+ gpointer data,
+ GError **error)
+{
+ g_print ("%s %s\n", _("MATE Document Viewer"), VERSION);
+
+ exit (0);
+ return FALSE;
+}
+
+static const GOptionEntry goption_options[] =
+{
+ { "page-label", 'p', 0, G_OPTION_ARG_STRING, &ev_page_label, N_("The page label of the document to display."), N_("PAGE")},
+ { "page-index", 'i', 0, G_OPTION_ARG_INT, &ev_page_index, N_("The page number of the document to display."), N_("NUMBER")},
+ { "fullscreen", 'f', 0, G_OPTION_ARG_NONE, &fullscreen_mode, N_("Run evince in fullscreen mode"), NULL },
+ { "presentation", 's', 0, G_OPTION_ARG_NONE, &presentation_mode, N_("Run evince in presentation mode"), NULL },
+ { "preview", 'w', 0, G_OPTION_ARG_NONE, &preview_mode, N_("Run evince as a previewer"), NULL },
+ { "find", 'l', 0, G_OPTION_ARG_STRING, &ev_find_string, N_("The word or phrase to find in the document"), N_("STRING")},
+ { "unlink-tempfile", 'u', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &unlink_temp_file, NULL, NULL },
+ { "print-settings", 't', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_FILENAME, &print_settings, NULL, NULL },
+ { "version", 0, G_OPTION_FLAG_NO_ARG | G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_CALLBACK, option_version_cb, NULL, NULL },
+ { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &file_arguments, NULL, N_("[FILE…]") },
+ { NULL }
+};
+
+static gboolean
+launch_previewer (void)
+{
+ GString *cmd_str;
+ gchar *cmd;
+ gint argc;
+ gchar **argv;
+ gboolean retval = FALSE;
+ GError *error = NULL;
+
+ /* Rebuild the command line, ignoring options
+ * not supported by the previewer and taking only
+ * the first path given
+ */
+ cmd_str = g_string_new ("evince-previewer");
+
+ if (print_settings) {
+ gchar *quoted;
+
+ quoted = g_shell_quote (print_settings);
+ g_string_append_printf (cmd_str, " --print-settings %s", quoted);
+ g_free (quoted);
+ }
+
+ if (unlink_temp_file)
+ g_string_append (cmd_str, " --unlink-tempfile");
+
+ if (file_arguments) {
+ gchar *quoted;
+
+ quoted = g_shell_quote (file_arguments[0]);
+ g_string_append_printf (cmd_str, " %s", quoted);
+ g_free (quoted);
+ }
+
+ cmd = g_string_free (cmd_str, FALSE);
+ g_shell_parse_argv (cmd, &argc, &argv, &error);
+ g_free (cmd);
+
+ if (!error) {
+ retval = gdk_spawn_on_screen (gdk_screen_get_default (),
+ NULL, argv, NULL,
+ G_SPAWN_SEARCH_PATH,
+ NULL, NULL, NULL,
+ &error);
+ g_strfreev (argv);
+ }
+
+ if (error) {
+ g_warning ("Error launching previewer: %s\n", error->message);
+ g_error_free (error);
+ }
+
+ return retval;
+}
+
+static gchar *
+get_label_from_filename (const gchar *filename)
+{
+ GFile *file;
+ gchar *label;
+ gboolean exists;
+
+ label = g_strrstr (filename, "#");
+ if (!label)
+ return NULL;
+
+ /* Filename contains a #, check
+ * whether it's part of the path
+ * or a label
+ */
+ file = g_file_new_for_commandline_arg (filename);
+ exists = g_file_query_exists (file, NULL);
+ g_object_unref (file);
+
+ return exists ? NULL : label;
+}
+
+static void
+load_files (const char **files)
+{
+ GdkScreen *screen = gdk_screen_get_default ();
+ EvWindowRunMode mode = EV_WINDOW_MODE_NORMAL;
+ gint i;
+ EvLinkDest *global_dest = NULL;
+
+ if (!files) {
+ if (!ev_application_has_window (EV_APP))
+ ev_application_open_window (EV_APP, screen, GDK_CURRENT_TIME);
+ return;
+ }
+
+ if (ev_page_label)
+ global_dest = ev_link_dest_new_page_label (ev_page_label);
+ else if (ev_page_index)
+ global_dest = ev_link_dest_new_page (MAX (0, ev_page_index - 1));
+
+ if (fullscreen_mode)
+ mode = EV_WINDOW_MODE_FULLSCREEN;
+ else if (presentation_mode)
+ mode = EV_WINDOW_MODE_PRESENTATION;
+
+ for (i = 0; files[i]; i++) {
+ const gchar *filename;
+ gchar *uri;
+ gchar *label;
+ GFile *file;
+ EvLinkDest *dest = NULL;
+ const gchar *app_uri;
+
+ filename = files[i];
+ label = get_label_from_filename (filename);
+ if (label) {
+ *label = 0;
+ label++;
+ dest = ev_link_dest_new_page_label (label);
+ } else if (global_dest) {
+ dest = g_object_ref (global_dest);
+ }
+
+ file = g_file_new_for_commandline_arg (filename);
+ uri = g_file_get_uri (file);
+ g_object_unref (file);
+
+ app_uri = ev_application_get_uri (EV_APP);
+ if (app_uri && strcmp (app_uri, uri) == 0) {
+ g_free (uri);
+ continue;
+ }
+
+
+
+ ev_application_open_uri_at_dest (EV_APP, uri, screen, dest,
+ mode, ev_find_string,
+ GDK_CURRENT_TIME);
+
+ if (dest)
+ g_object_unref (dest);
+ g_free (uri);
+ }
+}
+
+int
+main (int argc, char *argv[])
+{
+ GOptionContext *context;
+ GError *error = NULL;
+
+#ifdef G_OS_WIN32
+
+ if (fileno (stdout) != -1 &&
+ _get_osfhandle (fileno (stdout)) != -1)
+ {
+ /* stdout is fine, presumably redirected to a file or pipe */
+ }
+ else
+ {
+ typedef BOOL (* WINAPI AttachConsole_t) (DWORD);
+
+ AttachConsole_t p_AttachConsole =
+ (AttachConsole_t) GetProcAddress (GetModuleHandle ("kernel32.dll"), "AttachConsole");
+
+ if (p_AttachConsole != NULL && p_AttachConsole (ATTACH_PARENT_PROCESS))
+ {
+ freopen ("CONOUT$", "w", stdout);
+ dup2 (fileno (stdout), 1);
+ freopen ("CONOUT$", "w", stderr);
+ dup2 (fileno (stderr), 2);
+
+ }
+ }
+#endif
+
+ /* Init glib threads asap */
+ if (!g_thread_supported ())
+ g_thread_init (NULL);
+
+#ifdef ENABLE_NLS
+ /* Initialize the i18n stuff */
+ bindtextdomain (GETTEXT_PACKAGE, ev_get_locale_dir());
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+#endif
+
+ context = g_option_context_new (N_("MATE Document Viewer"));
+ g_option_context_set_translation_domain(context, GETTEXT_PACKAGE);
+ g_option_context_add_main_entries (context, goption_options, GETTEXT_PACKAGE);
+
+#ifdef WITH_SMCLIENT
+ g_option_context_add_group (context, egg_sm_client_get_option_group ());
+#endif
+
+ g_option_context_add_group (context, gtk_get_option_group (TRUE));
+
+ if (!g_option_context_parse (context, &argc, &argv, &error)) {
+ g_printerr ("Cannot parse arguments: %s\n", error->message);
+ g_error_free (error);
+ g_option_context_free (context);
+
+ return 1;
+ }
+ g_option_context_free (context);
+
+ if (preview_mode) {
+ gboolean retval;
+
+ retval = launch_previewer ();
+
+ return retval ? 0 : 1;
+ }
+
+ if (!ev_init ())
+ return 1;
+
+ ev_stock_icons_init ();
+
+#if defined(WITH_SMCLIENT) && defined(GDK_WINDOWING_X11)
+ egg_set_desktop_file (MATEDATADIR "/applications/evince.desktop");
+#else
+ /* Manually set name and icon */
+ g_set_application_name (_("Document Viewer"));
+ gtk_window_set_default_icon_name ("evince");
+#endif /* WITH_SMCLIENT && GDK_WINDOWING_X11 */
+
+ ev_application_load_session (EV_APP);
+ load_files (file_arguments);
+
+ /* Change directory so we don't prevent unmounting in case the initial cwd
+ * is on an external device (see bug #575436)
+ */
+ g_chdir (g_get_home_dir ());
+
+ gtk_main ();
+
+ ev_shutdown ();
+ ev_stock_icons_shutdown ();
+
+ return 0;
+}
diff --git a/test/Makefile.am b/test/Makefile.am
new file mode 100644
index 00000000..3f0a90c5
--- /dev/null
+++ b/test/Makefile.am
@@ -0,0 +1,19 @@
+
+dist_check_SCRIPTS = \
+ test1.py \
+ test2.py \
+ test3.py \
+ test4.py \
+ test5.py
+
+TESTS = $(dist_check_SCRIPTS)
+
+EXTRA_DIST = \
+ test-encrypt.pdf \
+ test-links.pdf \
+ test-mime.bin \
+ test-page-labels.pdf \
+ test6.py \
+ test7.py
+
+-include $(top_srcdir)/git.mk
diff --git a/test/test-encrypt.pdf b/test/test-encrypt.pdf
new file mode 100644
index 00000000..8f8f5c1f
--- /dev/null
+++ b/test/test-encrypt.pdf
Binary files differ
diff --git a/test/test-links.pdf b/test/test-links.pdf
new file mode 100644
index 00000000..0b1e6203
--- /dev/null
+++ b/test/test-links.pdf
Binary files differ
diff --git a/test/test-mime.bin b/test/test-mime.bin
new file mode 100644
index 00000000..0b1e6203
--- /dev/null
+++ b/test/test-mime.bin
Binary files differ
diff --git a/test/test-page-labels.pdf b/test/test-page-labels.pdf
new file mode 100644
index 00000000..c7d12671
--- /dev/null
+++ b/test/test-page-labels.pdf
Binary files differ
diff --git a/test/test1.py b/test/test1.py
new file mode 100755
index 00000000..42d83c01
--- /dev/null
+++ b/test/test1.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python
+
+# This test opens the interface and just clicks around a bit.
+
+import os
+os.environ['LANG']='C'
+
+from dogtail.procedural import *
+
+run('evince')
+
+# Test file->open
+click('File', roleName='menu')
+click('Open...', roleName='menu item')
+focus.dialog('Open Document')
+click('Cancel', roleName='push button')
+
+# Toolbar editor
+click('Edit', roleName='menu')
+click('Toolbar', roleName='menu item')
+focus.dialog('Toolbar Editor')
+click('Close', roleName='push button')
+
+# About dialog
+click('Help', roleName='menu')
+click('About', roleName='menu item')
+focus.dialog('About Document Viewer')
+click('Credits', roleName='push button')
+focus.dialog('Credits')
+click('Close', roleName='push button')
+focus.dialog('About Document Viewer')
+click('Close', roleName='push button')
+
+# Close evince
+click('File', roleName='menu')
+click('Close', roleName='menu item')
diff --git a/test/test2.py b/test/test2.py
new file mode 100755
index 00000000..ca06b66b
--- /dev/null
+++ b/test/test2.py
@@ -0,0 +1,28 @@
+#!/usr/bin/python
+
+# This test opens a password encrypted file and tries to unlock it.
+
+import os
+os.environ['LANG']='C'
+srcdir = os.environ['srcdir']
+
+from dogtail.procedural import *
+
+run('evince', arguments=' '+srcdir+'/test-encrypt.pdf')
+
+# Try an incorrect password first
+focus.dialog('Enter password')
+focus.widget('Password Entry', roleName='password text')
+type('wrong password')
+click('Unlock Document', roleName='push button')
+click('Cancel', roleName='push button')
+
+# Try again with the correct password
+click('Unlock Document', roleName='push button')
+focus.widget('Password Entry', roleName='password text')
+type('Foo')
+click('Unlock Document', roleName='push button')
+
+# Close evince
+click('File', roleName='menu')
+click('Close', roleName='menu item')
diff --git a/test/test3.py b/test/test3.py
new file mode 100755
index 00000000..56b90df1
--- /dev/null
+++ b/test/test3.py
@@ -0,0 +1,15 @@
+#!/usr/bin/python
+
+# This test opens a file with wrong extenstion.
+
+import os
+os.environ['LANG']='C'
+srcdir = os.environ['srcdir']
+
+from dogtail.procedural import *
+
+run('evince', arguments=' '+srcdir+'/test-mime.bin')
+
+# Close evince
+click('File', roleName='menu')
+click('Close', roleName='menu item')
diff --git a/test/test4.py b/test/test4.py
new file mode 100755
index 00000000..789030e3
--- /dev/null
+++ b/test/test4.py
@@ -0,0 +1,20 @@
+#!/usr/bin/python
+
+# This test tries document reload action.
+
+import os
+os.environ['LANG']='C'
+srcdir = os.environ['srcdir']
+
+from dogtail.procedural import *
+
+run('evince', arguments=' '+srcdir+'/test-links.pdf')
+
+# Reload document a few times
+for i in range(1,6):
+ click('View', roleName='menu')
+ click('Reload', roleName='menu item')
+
+# Close evince
+click('File', roleName='menu')
+click('Close', roleName='menu item')
diff --git a/test/test5.py b/test/test5.py
new file mode 100755
index 00000000..9fd7276e
--- /dev/null
+++ b/test/test5.py
@@ -0,0 +1,24 @@
+#!/usr/bin/python
+
+# This test tries document reload action.
+
+import os
+os.environ['LANG']='C'
+srcdir = os.environ['srcdir']
+
+from dogtail.procedural import *
+
+run('evince', arguments=' '+srcdir+'/test-page-labels.pdf')
+
+focus.widget('page-label-entry')
+focus.widget.text = "iii"
+activate()
+
+if focus.widget.text != "III":
+ click('File', roleName='menu')
+ click('Close', roleName='menu item')
+ exit (1)
+
+# Close evince
+click('File', roleName='menu')
+click('Close', roleName='menu item')
diff --git a/test/test6.py b/test/test6.py
new file mode 100755
index 00000000..89b6e5d0
--- /dev/null
+++ b/test/test6.py
@@ -0,0 +1,31 @@
+#!/usr/bin/python
+
+# Test printing
+
+import os
+os.environ['LANG']='C'
+srcdir = os.environ['srcdir']
+homedir = os.environ["HOME"] + "/";
+
+from dogtail.procedural import *
+
+if os.path.exists(homedir + "output.ps"):
+ os.unlink(homedir + "output.ps")
+
+run('evince', arguments=' '+srcdir+'/test-page-labels.pdf')
+
+click('File', roleName='menu')
+click('Print...', roleName='menu item')
+
+focus.dialog('Print')
+click('Print to File', roleName='table cell', raw=True)
+click('Print', roleName='push button')
+
+statinfo = os.stat (homedir + "output.ps")
+if statinfo.st_size > 100000:
+ exit(1)
+os.unlink (homedir + "output.ps")
+
+# Close evince
+click('File', roleName='menu')
+click('Close', roleName='menu item')
diff --git a/test/test7.py b/test/test7.py
new file mode 100755
index 00000000..f104a472
--- /dev/null
+++ b/test/test7.py
@@ -0,0 +1,33 @@
+#!/usr/bin/python
+
+# Test printing
+
+import os
+os.environ['LANG']='C'
+srcdir = os.environ['srcdir']
+
+from dogtail.procedural import *
+
+run('evince', arguments=' '+srcdir+'/test-page-labels.pdf')
+
+#!/usr/bin/python
+from dogtail.procedural import *
+
+focus.application('evince')
+focus.frame('test-page-labels.pdf')
+click('File', roleName='menu')
+click('Print...', roleName='menu item')
+focus.dialog('Print')
+click('Pages:', roleName='radio button')
+keyCombo('Tab')
+type('1')
+click('Page Setup', roleName='page tab', raw=True)
+click('All sheets')
+click('Even sheets')
+click('Print Preview', roleName='push button')
+keyCombo('Return')
+click('Cancel')
+
+# Close evince
+click('File', roleName='menu')
+click('Close', roleName='menu item')
diff --git a/thumbnailer/Makefile.am b/thumbnailer/Makefile.am
new file mode 100644
index 00000000..bc5a3314
--- /dev/null
+++ b/thumbnailer/Makefile.am
@@ -0,0 +1,83 @@
+
+bin_PROGRAMS = evince-thumbnailer
+
+evince_thumbnailer_SOURCES = \
+ evince-thumbnailer.c
+
+evince_thumbnailer_CPPFLAGS = \
+ -DEVINCEDATADIR=\"$(pkgdatadir)\" \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ -DMATELOCALEDIR=\"$(datadir)/locale\" \
+ -DMATEICONDIR=\""$(datadir)/pixmaps"\" \
+ $(AM_CPPFLAGS)
+
+evince_thumbnailer_CFLAGS = \
+ $(FRONTEND_CFLAGS) \
+ $(DISABLE_DEPRECATED) \
+ $(WARN_CFLAGS) \
+ $(AM_CFLAGS)
+
+evince_thumbnailer_LDFLAGS = $(AM_LDFLAGS)
+
+if PLATFORM_WIN32
+evince_thumbnailer_LDFLAGS += -mwindows
+endif
+
+evince_thumbnailer_LDADD = \
+ $(top_builddir)/libdocument/libevdocument.la \
+ $(FRONTEND_LIBS)
+
+schema_files = \
+ evince-thumbnailer-dvi.schemas.in \
+ evince-thumbnailer-djvu.schemas.in \
+ evince-thumbnailer-comics.schemas.in \
+ evince-thumbnailer-ps.schemas.in \
+ evince-thumbnailer.schemas.in
+
+if WITH_MATECONF
+
+@INTLTOOL_SCHEMAS_RULE@
+
+schema_DATA =
+
+if ENABLE_PDF
+schema_DATA += evince-thumbnailer.schemas
+endif
+
+if ENABLE_PS
+schema_DATA += evince-thumbnailer-ps.schemas
+endif
+
+if ENABLE_DJVU
+schema_DATA += evince-thumbnailer-djvu.schemas
+endif
+
+if ENABLE_DVI
+schema_DATA += evince-thumbnailer-dvi.schemas
+endif
+
+if ENABLE_COMICS
+schema_DATA += evince-thumbnailer-comics.schemas
+endif
+
+schemadir = $(MATECONF_SCHEMA_FILE_DIR)
+
+install-data-local:
+if MATECONF_SCHEMAS_INSTALL
+ if test -z "$(DESTDIR)" ; then \
+ for p in $(schema_DATA) ; do \
+ MATECONF_CONFIG_SOURCE=$(MATECONF_SCHEMA_CONFIG_SOURCE) $(MATECONFTOOL) --makefile-install-rule $(top_builddir)/thumbnailer/$$p >&1 > /dev/null; \
+ done \
+ fi
+endif
+
+endif # WITH_MATECONF
+
+EXTRA_DIST = \
+ $(schema_files)
+
+DISTCLEANFILES = \
+ $(schema_DATA)
+
+-include $(top_srcdir)/git.mk
diff --git a/thumbnailer/evince-thumbnailer-comics.schemas.in b/thumbnailer/evince-thumbnailer-comics.schemas.in
new file mode 100644
index 00000000..2f00a802
--- /dev/null
+++ b/thumbnailer/evince-thumbnailer-comics.schemas.in
@@ -0,0 +1,106 @@
+<mateconfschemafile>
+ <schemalist>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-cbz/enable</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-cbz/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-cbz/command</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-cbz/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-cbr/enable</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-cbr/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-cbr/command</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-cbr/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-cb7/enable</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-cb7/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-cb7/command</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-cb7/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-cbt/enable</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-cbt/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-cbt/command</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-cbt/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+ </schemalist>
+</mateconfschemafile>
diff --git a/thumbnailer/evince-thumbnailer-djvu.schemas.in b/thumbnailer/evince-thumbnailer-djvu.schemas.in
new file mode 100644
index 00000000..4ea35272
--- /dev/null
+++ b/thumbnailer/evince-thumbnailer-djvu.schemas.in
@@ -0,0 +1,30 @@
+<mateconfschemafile>
+ <schemalist>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/[email protected]/enable</key>
+ <applyto>/desktop/mate/thumbnailers/[email protected]/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/[email protected]/command</key>
+ <applyto>/desktop/mate/thumbnailers/[email protected]/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+ </schemalist>
+</mateconfschemafile>
diff --git a/thumbnailer/evince-thumbnailer-dvi.schemas.in b/thumbnailer/evince-thumbnailer-dvi.schemas.in
new file mode 100644
index 00000000..eab49a61
--- /dev/null
+++ b/thumbnailer/evince-thumbnailer-dvi.schemas.in
@@ -0,0 +1,83 @@
+<mateconfschemafile>
+ <schemalist>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-dvi/enable</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-dvi/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-dvi/command</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-dvi/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-gzdvi/enable</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-gzdvi/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-gzdvi/command</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-gzdvi/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-bzdvi/enable</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-bzdvi/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-bzdvi/command</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-bzdvi/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ </schemalist>
+</mateconfschemafile>
diff --git a/thumbnailer/evince-thumbnailer-ps.schemas.in b/thumbnailer/evince-thumbnailer-ps.schemas.in
new file mode 100644
index 00000000..6866ef5a
--- /dev/null
+++ b/thumbnailer/evince-thumbnailer-ps.schemas.in
@@ -0,0 +1,154 @@
+<mateconfschemafile>
+ <schemalist>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@postscript/enable</key>
+ <applyto>/desktop/mate/thumbnailers/application@postscript/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@postscript/command</key>
+ <applyto>/desktop/mate/thumbnailers/application@postscript/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-bzpostscript/enable</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-bzpostscript/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-bzpostscript/command</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-bzpostscript/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-gzpostscript/enable</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-gzpostscript/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-gzpostscript/command</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-gzpostscript/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/image@x-eps/enable</key>
+ <applyto>/desktop/mate/thumbnailers/image@x-eps/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/image@x-eps/command</key>
+ <applyto>/desktop/mate/thumbnailers/image@x-eps/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/image@x-bzeps/enable</key>
+ <applyto>/desktop/mate/thumbnailers/image@x-bzeps/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/image@x-bzeps/command</key>
+ <applyto>/desktop/mate/thumbnailers/image@x-bzeps/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/image@x-gzeps/enable</key>
+ <applyto>/desktop/mate/thumbnailers/image@x-gzeps/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/image@x-gzeps/command</key>
+ <applyto>/desktop/mate/thumbnailers/image@x-gzeps/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short></short>
+ <long></long>
+ </locale>
+ </schema>
+
+ </schemalist>
+</mateconfschemafile>
diff --git a/thumbnailer/evince-thumbnailer.c b/thumbnailer/evince-thumbnailer.c
new file mode 100644
index 00000000..23ad92b0
--- /dev/null
+++ b/thumbnailer/evince-thumbnailer.c
@@ -0,0 +1,309 @@
+/*
+ Copyright (C) 2005 Fernando Herrera <[email protected]>
+
+ 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 <config.h>
+
+#include <evince-document.h>
+
+#include <gio/gio.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef G_OS_WIN32
+#include <io.h>
+#include <conio.h>
+#if !(_WIN32_WINNT >= 0x0500)
+#error "_WIN32_WINNT must be defined >= 0x0500"
+#endif
+#include <windows.h>
+#endif
+
+#define THUMBNAIL_SIZE 128
+
+static gint size = THUMBNAIL_SIZE;
+static const gchar **file_arguments;
+
+static const GOptionEntry goption_options[] = {
+ { "size", 's', 0, G_OPTION_ARG_INT, &size, NULL, "SIZE" },
+ { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &file_arguments, NULL, "<input> <ouput>" },
+ { NULL }
+};
+
+struct AsyncData {
+ EvDocument *document;
+ const gchar *output;
+ gint size;
+ gboolean success;
+};
+
+static void
+delete_temp_file (GFile *file)
+{
+ ev_tmp_file_unlink (file);
+ g_object_unref (file);
+}
+
+static EvDocument *
+evince_thumbnailer_get_document (GFile *file)
+{
+ EvDocument *document = NULL;
+ gchar *uri;
+ GFile *tmp_file = NULL;
+ GError *error = NULL;
+
+ if (!g_file_is_native (file)) {
+ gchar *base_name, *template;
+
+ base_name = g_file_get_basename (file);
+ template = g_strdup_printf ("document.XXXXXX-%s", base_name);
+ g_free (base_name);
+
+ tmp_file = ev_mkstemp_file (template, &error);
+ g_free (template);
+ if (!tmp_file) {
+ g_printerr ("Error loading remote document: %s\n", error->message);
+ g_error_free (error);
+
+ return NULL;
+ }
+
+ g_file_copy (file, tmp_file, G_FILE_COPY_OVERWRITE,
+ NULL, NULL, NULL, &error);
+ if (error) {
+ g_printerr ("Error loading remote document: %s\n", error->message);
+ g_error_free (error);
+ g_object_unref (tmp_file);
+
+ return NULL;
+ }
+ uri = g_file_get_uri (tmp_file);
+ } else {
+ uri = g_file_get_uri (file);
+ }
+
+ document = ev_document_factory_get_document (uri, &error);
+ if (tmp_file) {
+ if (document) {
+ g_object_weak_ref (G_OBJECT (document),
+ (GWeakNotify)delete_temp_file,
+ tmp_file);
+ } else {
+ ev_tmp_file_unlink (tmp_file);
+ g_object_unref (tmp_file);
+ }
+ }
+ g_free (uri);
+ if (error) {
+ if (error->domain == EV_DOCUMENT_ERROR &&
+ error->code == EV_DOCUMENT_ERROR_ENCRYPTED) {
+ /* FIXME: Create a thumb for cryp docs */
+ g_error_free (error);
+ return NULL;
+ }
+ g_printerr ("Error loading document: %s\n", error->message);
+ g_error_free (error);
+ return NULL;
+ }
+
+ return document;
+}
+
+static gboolean
+evince_thumbnail_pngenc_get (EvDocument *document, const char *thumbnail, int size)
+{
+ EvRenderContext *rc;
+ double width, height;
+ GdkPixbuf *pixbuf;
+ EvPage *page;
+
+ page = ev_document_get_page (document, 0);
+
+ ev_document_get_page_size (document, 0, &width, &height);
+
+ rc = ev_render_context_new (page, 0, size / width);
+ pixbuf = ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (document),
+ rc, FALSE);
+ g_object_unref (rc);
+ g_object_unref (page);
+
+ if (pixbuf != NULL) {
+ const char *overlaid_icon_name = NULL;
+
+ if (overlaid_icon_name) {
+ GdkPixbuf *overlaid_pixbuf;
+
+#ifdef G_OS_WIN32
+ gchar *dir = g_win32_get_package_installation_directory_of_module (NULL);
+ gchar *overlaid_icon_path = g_build_filename (dir, "share", "evince", overlaid_icon_name, NULL);
+ g_free (dir);
+#else
+ gchar *overlaid_icon_path = g_strdup_printf ("%s/%s", EVINCEDATADIR, overlaid_icon_name);
+#endif
+ overlaid_pixbuf = gdk_pixbuf_new_from_file (overlaid_icon_path, NULL);
+ g_free (overlaid_icon_path);
+ if (overlaid_pixbuf != NULL) {
+ int delta_height, delta_width;
+
+ delta_width = gdk_pixbuf_get_width (pixbuf) -
+ gdk_pixbuf_get_width (overlaid_pixbuf);
+ delta_height = gdk_pixbuf_get_height (pixbuf) -
+ gdk_pixbuf_get_height (overlaid_pixbuf);
+
+ gdk_pixbuf_composite (overlaid_pixbuf, pixbuf,
+ delta_width, delta_height,
+ gdk_pixbuf_get_width (overlaid_pixbuf),
+ gdk_pixbuf_get_height (overlaid_pixbuf),
+ delta_width, delta_height,
+ 1, 1,
+ GDK_INTERP_NEAREST, 100);
+
+ g_object_unref (overlaid_pixbuf);
+ }
+ }
+
+ if (gdk_pixbuf_save (pixbuf, thumbnail, "png", NULL, NULL)) {
+ g_object_unref (pixbuf);
+ return TRUE;
+ }
+
+ g_object_unref (pixbuf);
+ }
+
+ return FALSE;
+}
+
+static gpointer
+evince_thumbnail_pngenc_get_async (struct AsyncData *data)
+{
+ ev_document_doc_mutex_lock ();
+ data->success = evince_thumbnail_pngenc_get (data->document,
+ data->output,
+ data->size);
+ ev_document_doc_mutex_unlock ();
+
+ g_idle_add ((GSourceFunc)gtk_main_quit, NULL);
+
+ return NULL;
+}
+
+static void
+print_usage (GOptionContext *context)
+{
+ gchar *help;
+
+ help = g_option_context_get_help (context, TRUE, NULL);
+ g_print ("%s", help);
+ g_free (help);
+}
+
+int
+main (int argc, char *argv[])
+{
+ EvDocument *document;
+ GOptionContext *context;
+ const char *input;
+ const char *output;
+ GFile *file;
+ GError *error = NULL;
+
+ context = g_option_context_new ("- MATE Document Thumbnailer");
+ g_option_context_add_main_entries (context, goption_options, NULL);
+
+ if (!g_option_context_parse (context, &argc, &argv, &error)) {
+ g_printerr ("%s\n", error->message);
+ g_error_free (error);
+ print_usage (context);
+ g_option_context_free (context);
+
+ return -1;
+ }
+
+ input = file_arguments ? file_arguments[0] : NULL;
+ output = input ? file_arguments[1] : NULL;
+ if (!input || !output) {
+ print_usage (context);
+ g_option_context_free (context);
+
+ return -1;
+ }
+
+ g_option_context_free (context);
+
+ if (size < 1) {
+ g_print ("Size cannot be smaller than 1 pixel\n");
+ return -1;
+ }
+
+ input = file_arguments[0];
+ output = file_arguments[1];
+
+ g_type_init ();
+
+ if (!g_thread_supported ())
+ g_thread_init (NULL);
+
+ if (!ev_init ())
+ return -1;
+
+ file = g_file_new_for_commandline_arg (input);
+ document = evince_thumbnailer_get_document (file);
+ g_object_unref (file);
+
+ if (!document) {
+ ev_shutdown ();
+ return -2;
+ }
+
+ if (!EV_IS_DOCUMENT_THUMBNAILS (document)) {
+ g_object_unref (document);
+ ev_shutdown ();
+ return -2;
+ }
+
+ if (EV_IS_ASYNC_RENDERER (document)) {
+ struct AsyncData data;
+
+ gtk_init (&argc, &argv);
+
+ data.document = document;
+ data.output = output;
+ data.size = size;
+
+ g_thread_create ((GThreadFunc) evince_thumbnail_pngenc_get_async,
+ &data, FALSE, NULL);
+
+ gtk_main ();
+
+ g_object_unref (document);
+ ev_shutdown ();
+
+ return data.success ? 0 : -2;
+ }
+
+ if (!evince_thumbnail_pngenc_get (document, output, size)) {
+ g_object_unref (document);
+ ev_shutdown ();
+ return -2;
+ }
+
+ g_object_unref (document);
+ ev_shutdown ();
+
+ return 0;
+}
diff --git a/thumbnailer/evince-thumbnailer.schemas.in b/thumbnailer/evince-thumbnailer.schemas.in
new file mode 100644
index 00000000..6dafb8f0
--- /dev/null
+++ b/thumbnailer/evince-thumbnailer.schemas.in
@@ -0,0 +1,80 @@
+<mateconfschemafile>
+ <schemalist>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@pdf/enable</key>
+ <applyto>/desktop/mate/thumbnailers/application@pdf/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Enable thumbnailing of PDF Documents</short>
+ <long>Boolean options available: true enables thumbnailing and false disables the creation of new thumbnails</long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@pdf/command</key>
+ <applyto>/desktop/mate/thumbnailers/application@pdf/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short>Thumbnail command for PDF Documents</short>
+ <long>Valid command plus arguments for the PDF Document thumbnailer. See Caja thumbnailer documentation for more information.</long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-bzpdf/enable</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-bzpdf/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Enable thumbnailing of PDF Documents</short>
+ <long>Boolean options available: true enables thumbnailing and false disables the creation of new thumbnails</long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-bzpdf/command</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-bzpdf/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short>Thumbnail command for PDF Documents</short>
+ <long>Valid command plus arguments for the PDF Document thumbnailer. See Caja thumbnailer documentation for more information.</long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-gzpdf/enable</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-gzpdf/enable</applyto>
+ <owner>evince</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Enable thumbnailing of PDF Documents</short>
+ <long>Boolean options available: true enables thumbnailing and false disables the creation of new thumbnails</long>
+ </locale>
+ </schema>
+
+
+ <schema>
+ <key>/schemas/desktop/mate/thumbnailers/application@x-gzpdf/command</key>
+ <applyto>/desktop/mate/thumbnailers/application@x-gzpdf/command</applyto>
+ <owner>evince</owner>
+ <type>string</type>
+ <default>evince-thumbnailer -s %s %u %o</default>
+ <locale name="C">
+ <short>Thumbnail command for PDF Documents</short>
+ <long>Valid command plus arguments for the PDF Document thumbnailer. See Caja thumbnailer documentation for more information.</long>
+ </locale>
+ </schema>
+
+ </schemalist>
+</mateconfschemafile>