/*
 * Copyright 2006 by Hans Leidekker
 *
 * 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 library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL

MAINMENU MENU DISCARDABLE 
BEGIN
    POPUP "&Bestand"
    BEGIN
        MENUITEM "&Nieuw\tCtrl+N"         ID_FILE_NEW
        MENUITEM "&Openen...\tCtrl+O",    ID_FILE_OPEN
        MENUITEM "O&pslaan\tCtrl+S",      ID_FILE_SAVE
        MENUITEM "Ops&laan als...",       ID_FILE_SAVEAS
        MENUITEM SEPARATOR
        MENUITEM "&Afsluiten",    ID_FILE_EXIT
    END
    POPUP "Be&werken"
    BEGIN
        MENUITEM "&Ongedaan maken\tCtrl+Z",     ID_EDIT_UNDO
        MENUITEM "O&pnieuw\tCtrl+Y",            ID_EDIT_REDO
        MENUITEM SEPARATOR
        MENUITEM "K&nippen\tCtrl+X",            ID_EDIT_CUT
        MENUITEM "&Kopieren\tCtrl+C",           ID_EDIT_COPY
        MENUITEM "&Plakken\tCtrl+V",            ID_EDIT_PASTE
        MENUITEM "&Verwijderen\tDel",           ID_EDIT_CLEAR
        MENUITEM "&Alles selecteren\tCtrl+A",   ID_EDIT_SELECTALL
        MENUITEM SEPARATOR
        MENUITEM "Alleen &lezen",               ID_EDIT_READONLY
        MENUITEM "&Gewijzigd",                  ID_EDIT_MODIFIED
        MENUITEM SEPARATOR
        POPUP "&Extra's"
        BEGIN
            MENUITEM "Selectie&informatie",          ID_EDIT_SELECTIONINFO
            MENUITEM "&Karakterformaat",             ID_EDIT_CHARFORMAT
            MENUITEM "&Standaard karakterformaat",   ID_EDIT_DEFCHARFORMAT
            MENUITEM "&Paragraafformaat",            ID_EDIT_PARAFORMAT
            MENUITEM "&Haal tekst",                  ID_EDIT_GETTEXT
        END
    END
    POPUP "&View"
    BEGIN
        MENUITEM "&Toolbar",        ID_TOGGLE_TOOLBAR
        MENUITEM "&Formatbar",      ID_TOGGLE_FORMATBAR
        MENUITEM "&Statusbar",      ID_TOGGLE_STATUSBAR
    END
    POPUP "&Opmaak"
    BEGIN
        POPUP "&Achtergrond"
        BEGIN
            MENUITEM "&Systeem\tCtrl+1",   ID_BACK_1
            MENUITEM "&Geeltje\tCtrl+2",   ID_BACK_2
        END
        POPUP "&Uitlijning"
        BEGIN
            MENUITEM "&Links\tCtrl+L",        ID_ALIGN_LEFT
            MENUITEM "&Gecentreerd\tCtrl+E",  ID_ALIGN_CENTER
            MENUITEM "&Rechts\tCtrl+R",       ID_ALIGN_RIGHT
        END
    END
END
