#!/bin/sh
#\
exec tclsh8.6 "$0" "$@"


################################################################################
# Programmers Cool Editor ######################################################
#
# Copyright (C) 2018 - 2019 Joachim Moskalewski <code@jmos.net>.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# + Redistributions of source code must retain the above copyright notice, this
#   list of conditions and the following disclaimer.
#
# + Redistributions in binary form must reproduce the above copyright notice,
#   this list of conditions and the following disclaimer in the documentation
#   and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
# NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
################################################################################


set sProgName "Damn Cool Editor"
set sVersion  "0.15"
set sAuthor   "Joachim Moskalewski"
set sYear     "2018 \u2013 2019"
set sEmail    "code@jmos.net"
set sWww      "http://www.jmos.net/software/"
set sAbout    "The \"${sProgName}\" is a plain but clever development environment with extrem few dependencies."


# Subversion: Revision
set sSubversionrevision "126"


# Kurzname (z.B. fuer Config-Verzeichnis)
set sProgNameShort ""
foreach sTmp $sProgName {
	append sProgNameShort [ string index $sTmp 0 ]
}
set sProgNameShort [ string tolower $sProgNameShort ]


################################################################################
# FILE: tcltk/0002_date.tcl

set sCompileDate "07.01.2019"



################################################################################
# FILE: tcltk/0010_packages.tcl

package require Tk
package require msgcat

set bStructList 0
if { [ lsearch [ package names ] "struct::list" ] >= 0 } {
	set bStructList 1
	package require struct::list
}

# weitere Themes ggf. einbinden (nur ich)
if { [ file exists "/home/jo/src/tcltkstuff/theme_extender.tcl" ] } {
	source "/home/jo/src/tcltkstuff/theme_extender.tcl"
}


################################################################################
# FILE: tcltk/1000_lang.tcl

namespace import msgcat::mcset
set lLanguages [ list [ list "english" "en" "Joachim Moskalewski" ] ]

mcset en "red" "Red"
mcset en "pink" "Pink"
mcset en "purple" "Purple"
mcset en "blue" "Blue"
mcset en "cyanblue" "Cyan Blue"
mcset en "turquoise" "Turquoise"
mcset en "green" "Green"
mcset en "yellow" "Yellow"
mcset en "orange" "Orange"
mcset en "Tab" "Tabulator"
mcset en "LF" "LF (Linefeed / Unix)"
mcset en "CR" "CR (Carriage Return)"
mcset en "CRLF" "CRLF (Carriage Return + Linefeed / Windows)"


################################################################################
# FILE: tcltk/translations/german.tcl

################################################################################
# translation: german
################################################################################


################################################################################
# register a language
#  - list index 0: name (in the target language, not in english)
#  - list index 1: ISO 639-1 (official two char lowercase language name)
#  - list index 2: your name

lappend lLanguages [ list "deutsch" "de" "Joachim Moskalewski" ]


################################################################################
# translation syntax
#   mcset language to_translate translation
#
# example translation: english word "Save" to french (fr)
#   mcset fr "Save" "Enregistrer"

mcset de $sAbout "Der \"${sProgName}\" ist eine schlichte und dennoch clevere Entwicklungsumgebung mit extrem wenigen Abh\u00e4ngigkeiten."
mcset de "Version" "Version"
mcset de "generated" "erstellt"
mcset de "Author" "Autor"
mcset de "Available Languages" "Verf\u00fcgbare Sprachen"
mcset de "License" "Lizenz"
mcset de "Close" "Schliessen"
mcset de "Am I running more than once?" "Bin ich mehrfach am Start?"
mcset de "If that's not true just klick on me!" "Sollte das nicht stimmen, klicke mich einfach an!"

mcset de "New File" "neue Datei"
mcset de "Open File" "Datei \u00f6ffnen"
mcset de "Reload File" "Datei neu laden"
mcset de "Undo" "R\u00fcckg\u00e4ngig"
mcset de "Redo" "Wiederholen"
mcset de "Save" "Speichern"
mcset de "Cancel" "Abbrechen"

mcset de "Session Menu" "Session Men\u00fc"
mcset de "File Menu" "Datei Men\u00fc"
mcset de "Subversion Menu" "Subversion Men\u00fc"
mcset de "Syntax Menu" "Syntax Men\u00fc"
mcset de "Line Jumper" "Zeilensprung"

mcset de "There are unsaved files!" "Es gibt nicht gespeicherte Dateien!"
mcset de "Do you really want to quit?" "M\u00f6chstest Du dennoch beenden?"
mcset de "Do you really want to close the current session?" "M\u00f6chstest Du die aktuelle Session dennoch schliessen?"
mcset de "File has been modified!" "Datei wurder ver\u00e4ndert!"
mcset de "Do you really want to close this file without saving it?" "M\u00f6chtest Du diese Datei wirklich schliessen ohne zu speichern?"

mcset de "Warning" "Warnung"
mcset de "All changes will be lost!" "Alle \u00c4nderungen gehen verloren!"
mcset de "Do you really want to reload this file?" "M\u00f6chstest Du diese Datei wirklich neu laden?"

mcset de "Session" "Session"
mcset de "Sessions" "Sessions"
mcset de "Create Session" "Session erstellen"
mcset de "Last Sessions" "Letzte Sessions"
mcset de "Create" "Anlegen"
mcset de "File" "Datei"
mcset de "Files" "Dateien"
mcset de "Project" "Projekt"
mcset de "Syntax" "Syntax"
mcset de "unknown" "unbekannt"
mcset de "unnamed" "unbenannt"
mcset de "none" "keine"
mcset de "Search" "Suchen"
mcset de "Replace" "Ersetzen"
mcset de "just search" "nur suchen"
mcset de "search & replace" "suchen & ersetzen"
mcset de "Selection" "Auswahl"
mcset de "confirm replace" "ersetzen best\u00e4tigen"
mcset de "Won't work, because case insensitive both strings are the same\u2026" "Klappt nicht, denn ohne Gross-Kleinschreibung sind beide Zeichenfolgen identisch\u2026"
mcset de "Won't work, because both strings are the same\u2026" "Klappt nicht, denn beide Zeichenfolgen sind identisch\u2026"
mcset de "Won't work, because none text is selected\u2026" "Klappt nicht, denn es gibt keinen ausgew\u00e4hlten Text\u2026"
mcset de "Line" "Zeile"
mcset de "Column" "Spalte"
mcset de "No" "Nein"
mcset de "cancel search & replace operation" "Suchen & Ersetzen abbrechen"
mcset de "skip this position" "Position \u00fcberspringen"
mcset de "replace this position" "Position ersetzen"
mcset de "Save all" "Alles speichern"
mcset de "Dynamic Base Directory" "Dynamisches Basisverzeichnis"
mcset de "Choose a directory" "Verzeichnis w\u00e4hlen"

mcset de "Note that running \"svn update\" may overwrite your local copy and forces a reload in the editor." "Bitte beachte, dass \"svn update\" Deine lokale Kopie ggf. \u00fcberschreibt."
mcset de "Subversion returned the following information:" "Subversion gab folgende Meldung zur\u00fcck:"
mcset de "So far modified files:" "Bislang ver\u00e4nderte Dateien:"
mcset de "Message" "Anmerkung"
mcset de "Commit aborted: Got no message." "Commit abgebrochen: Keinen Anmerkungstext erhalten."
mcset de "Important Note: Related files will be saved before a \"svn commit\" will be performed!" "Wichtiger Hinweis: Vor einem \"svn commit\" werden die relevanten Dateien gespeichert!"
mcset de "Status" "Status"
mcset de "There is nothing to commit." "Es gibt nichts f\u00fcr einen Commit."

mcset de "Quit" "Beenden"
mcset de "Help" "Hilfe"
mcset de "About" "\u00dcber"
mcset de "Settings" "Einstellungen"
mcset de "Documentation" "Dokumentation"
mcset de "Keyboard Reference" "Tastaturbedienung"

mcset de "Ups!" "Hoppla!"
mcset de "That session is currently used!" "Diese Session ist gerade in Verwendung!"
mcset de "To delete that session you've got to open another one first." "Um jene Session zu l\u00f6schen musst Du zuerst eine andere \u00f6ffnen."

mcset de "Rename Session" "Session umbenennen"
mcset de "Session name invalid!" "Session Name ung\u00fcltig!"
mcset de "Renaming failed!" "Die Umbenennung ist fehlgeschlagen!"
mcset de "The chosen session name has already been assigned." "Der gew\u00e4hlte Session Name wurde bereits vergeben."
mcset de "The session name can only contain the following chars: 0-9, A-Z, a-z, \"-\", \"+\", \"_\" and \".\"." "Der Session Name darf nur aus folgenden Zeichen bestehen: 0-9, A-Z, a-z, \"-\", \"+\", \"_\" und \".\"."

mcset de "Please confirm" "Bitte best\u00e4tigen"
mcset de "Do you really want to delete that session?" "M\u00f6chtest Du diese Session wirklich l\u00f6schen?"

mcset de "Error!" "Fehler!"
mcset de "Due to permission problems the file cannot be saved." "Datei konnte wegen mangelnder Dateirechte nicht gespeichert werden."

mcset de "End of File" "Dateiende"
mcset de "End of file reached." "Das Dateiende wurde erreicht."
mcset de "Should we start again from top?" "Suche am Dateianfang nochmals starten?"

mcset de "refreshs session file tree" "Session-Dateibaum erneuern"
mcset de "file tree basis: home directory" "Dateibaum Basis: Userverzeichnis"
mcset de "file tree basis: root" "Dateibaum Basis: Root"
mcset de "file tree one level up" "Dateibaum eine Ebene h\u00f6her"
mcset de "replace only: target" "nur ersetzen: Ziel"
mcset de "case sensitive on/off" "Gross-Kleinschreibung an/aus"

mcset de "Interface" "Oberfl\u00e4che"
mcset de "Appearance" "Erscheinungsbild"
mcset de "Editor" "Editor"
mcset de "Language" "Sprache"
mcset de "Font" "Schrift"
mcset de "Font Size" "Schriftgr\u00f6\u00dfe"
mcset de "Tooltips" "Tooltips"
mcset de "show tooltips" "Tooltips anzeigen"
mcset de "Distances" "Abst\u00e4nde"
mcset de "space between some elements" "Platz zwischen einigen Elementen"
mcset de "Scrollbar" "Scrollbalken"
mcset de "thickness of the plain scrollbars" "Breite der einfachen Scrollbalken"
mcset de "Base Color" "Basisfarbe"
mcset de "white background" "wei\u00dfer Hintergrund"
mcset de "black background" "schwarzer Hintergrund"
mcset de "Accent Colors" "Akzentfarben"
mcset de "red" "Rot"
mcset de "pink" "Rosa"
mcset de "purple" "Violett"
mcset de "blue" "Blau"
mcset de "cyanblue" "T\u00fcrkies-Blau"
mcset de "turquoise" "T\u00fcrkies"
mcset de "green" "Gr\u00fcn"
mcset de "yellow" "Gelb"
mcset de "orange" "Orange"
mcset de "Ttk Widget Theme" "Ttk Widget Theme"
mcset de "Indent" "Einr\u00fcckung"
mcset de "default indent character" "Standard Einr\u00fcckungszeichen"
mcset de "Tab" "Tabulator"
mcset de "Blank" "Leerzeichen"
mcset de "Tab Indent" "Tab Einr\u00fcckung"
mcset de "display tabs with the width of X blanks" "Tabs mit einer Breite von X Leerzeichen darstellen"
mcset de "Linefeed" "Zeilenumbruch"
mcset de "LF" "LF (Linefeed / Unix)"
mcset de "CR" "CR (Carriage Return)"
mcset de "CRLF" "CRLF (Carriage Return + Linefeed / Windows)"
mcset de "Long Lines" "Lange Zeilen"
mcset de "get a hint if lines are longer" "Hinweis erhalten wenn Zeilen l\u00e4nger sind"
mcset de "Brackets" "Klammern"
mcset de "auto bracket completion" "Klammern automatisch schliessen"
mcset de "Bottom Lines" "Fusszeilen"
mcset de "try to display at least X lines after the cursor" "versuche mindestens X Zeilen nach dem Cursor sichtbar zu halten"
mcset de "Date Format" "Datumsformat"
mcset de "in Tcl \"clock\" format" "im Tcl \"clock\" Format"
mcset de "blockcursor" "Blockcursor"
mcset de "blinking cursor" "blinkender Cursor"
mcset de "blink on duration" "Blinkdauer: an"
mcset de "blink off duration" "Blinkdauer: aus"
mcset de "cursor width" "Cursorbreite"
mcset de "Note that any changes here requires a restart to take effect." "Hinweis: \u00c4nderungen werden erst nach einem Neustart aktiv."
mcset de "Else" "Sonstiges"
mcset de "Compare Files" "Dateivergleich"
mcset de "internal" "eingebaut"
mcset de "tcllib required" "ben\u00f6tigt tcllib"
mcset de "diff (not available!)" "diff (nicht verf\u00fcgbar!)"
mcset de "Backup History" "Backup History"
mcset de "days to keep backup copies" "f\u00fcr X Tage Backup Kopien aufbewahren"

mcset de "restore" "wieder herstellen"
mcset de "saved" "gespeichert"
mcset de "edited" "bearbeitet"
mcset de "view or compare" "anzeigen oder vergleichen"
mcset de "Restoring means that the actual version will be overwritten by the selected one. Should this really be done?" "Ein Wiederherstellen bedeutet, dass die aktuelle Version mit der gew\u00e4hlten \u00fcberschrieben wird. Soll das wirklich ausgef\u00fchrt werden?"
mcset de "Clean Backup History" "Backup History verwerfen"
mcset de "Done" "Erledigt"
mcset de "Done. Freed space:" "Erledigt. Freigegebener Plattenplatz:"


################################################################################
# FILE: tcltk/2000_environment.tcl

################################################################################
# Environment ##################################################################
################################################################################


# Verzeichnisstruktur
if { ! [ file isdirectory [ file join "~" ".config" ] ] } {
	file mkdir [ file join "~" ".config" ]
}
if { ! [ file isdirectory [ file join "~" ".config" $sProgNameShort ] ] } {
	file mkdir [ file join "~" ".config" $sProgNameShort ]
}
if { ! [ file isdirectory [ file join "~" ".config" $sProgNameShort "session" ] ] } {
	file mkdir [ file join "~" ".config" $sProgNameShort "session" ]
}
if { ! [ file isdirectory [ file join "~" ".config" $sProgNameShort "syntax" ] ] } {
	file mkdir [ file join "~" ".config" $sProgNameShort "syntax" ]
}
if { ! [ file isdirectory [ file join "~" ".config" $sProgNameShort "language" ] ] } {
	file mkdir [ file join "~" ".config" $sProgNameShort "language" ]
}
if { ! [ file isdirectory [ file join "~" ".cache" ] ] } {
	file mkdir [ file join "~" ".cache" ]
}
if { ! [ file isdirectory [ file join "~" ".cache" $sProgNameShort ] ] } {
	file mkdir [ file join "~" ".cache" $sProgNameShort ]
}


# .-Files nicht anzeigen
if { [ tk windowingsystem ] == "x11" } {
	catch { tk_getSaveFile foo bar }
	set ::tk::dialog::file::showHiddenVar 0
	set ::tk::dialog::file::showHiddenBtn 1
}


# SVN - verfuegbar?
set sTmp [ auto_execok {svn} ]
if { $sTmp == "" } {
	set sTmp [ auto_execok {svnlite} ]
}
set sSvnBinary $sTmp


# Mehrfachstart
set sPidFile [ file join "~" ".config" $sProgNameShort "pid.txt" ]


# einige Variablen vorbelegen ##################################################

# Liste der offenen Dateien
#  0: Dateiname mit vollem Pfad
#  1: Dateityp
#  2: Frame-Widget
set lOpenFiles [ list ]

# aktive Datei und Basisverzeichnis
set sFileActive ""
set sSessionBaseDir "dynamic"


################################################################################
# FILE: tcltk/3000_syntax.tcl

################################################################################
# Syntax Listen erstellen
#  - $lFileTypes   :: Syntax Highlighting
#  - $lCompletions :: Syntax Completion
#  - $lSyntaxHelp  :: Syntax Hilfe
################################################################################


# Syntax Highlighting
#   0: $sLanguageName
#   1: $lExtensions
#   2: $lAutoClose
#   3: $sRegexpComment
#   4: $sCharStartVar
#   5: $sCharsBrackets
#   6: $lKeywordsFunctions
#   7: $lKeywords1
#   8: $sCharStart1
#   9: $sChars1
#  10: $sRegexp1
#  11: $lKeywords2
#  12: $sCharStart2
#  13: $sChars2
#  14: $sRegexp2
#  15: $lKeywords3
#  16: $sCharStart3
#  17: $sChars3
#  18: $sRegexp3
#  19: $lKeywords4
#  20: $sCharStart4
#  21: $sChars4
#  22: $sRegexp4
#  23: $lKeywords5
#  24: $sCharStart5
#  25: $sChars5
#  26: $sRegexp5
#  27: $lKeywords6
#  28: $sCharStart6
#  29: $sChars6
#  30: $sRegexp6
#  31: $bCStyleComment
set lFileTypes [ list ]


# Syntax Completion
#   0: String  Name
#   0: String  Keywords
set lCompletions [ list ]


# Syntax Hilfe
#   0: String  Name
#   0: String  Keywords
set lSyntaxHelp  [ list ]


# Syntax Klammern schliesen
#   0: String  Name
#   0: String  Keywords
set lSyntaxBrackets  [ list ]


# neue Syntax vorbereiten - Variablen leeren
proc syntax_create {sName } {
	global sLanguageName lExtensions lAutoClose sRegexpComment sCharStartVar sCharsBrackets lKeywordsFunctions lKeywords1 sCharStart1 sChars1 sRegexp1 lKeywords2 sCharStart2 sChars2 sRegexp2 lKeywords3 sCharStart3 sChars3 sRegexp3 lKeywords4 sCharStart4 sChars4 sRegexp4 lKeywords5 sCharStart5 sChars5 sRegexp5 lKeywords6 sCharStart6 sChars6 sRegexp6 bCStyleComment
	set sLanguageName $sName
	set lExtensions        [ list ]
	set lAutoClose         [ list ]
	set sRegexpComment     {}
	set sCharStartVar      {}
	set sCharsBrackets     {}
	set lKeywordsFunctions [ list ]
	set lKeywords1         [ list ]
	set sCharStart1        {}
	set sChars1            {}
	set sRegexp1           {}
	set lKeywords2         [ list ]
	set sCharStart2        {}
	set sChars2            {}
	set sRegexp2           {}
	set lKeywords3         [ list ]
	set sCharStart3        {}
	set sChars3            {}
	set sRegexp3           {}
	set lKeywords4         [ list ]
	set sCharStart4        {}
	set sChars4            {}
	set sRegexp4           {}
	set lKeywords5         [ list ]
	set sCharStart5        {}
	set sChars5            {}
	set sRegexp5           {}
	set lKeywords6         [ list ]
	set sCharStart6        {}
	set sChars6            {}
	set sRegexp6           {}
	set bCStyleComment     0
}


# obige Variablen befuellen ;)
proc syntax_add {} {
	global lFileTypes lCompletions lSyntaxHelp lSyntaxBrackets sLanguageName lExtensions lAutoClose sRegexpComment sCharStartVar sCharsBrackets lKeywordsFunctions lKeywords1 sCharStart1 sChars1 sRegexp1 lKeywords2 sCharStart2 sChars2 sRegexp2 lKeywords3 sCharStart3 sChars3 sRegexp3 lKeywords4 sCharStart4 sChars4 sRegexp4 lKeywords5 sCharStart5 sChars5 sRegexp5 lKeywords6 sCharStart6 sChars6 sRegexp6 bCStyleComment

	set lSuggestions [ list ]
	set lHelp [ list ]

	# Funktions
	set lTmp [ list ]
	foreach sKeyword $lKeywordsFunctions {
		set lKeyword [ split $sKeyword {|} ]
		if { [ llength $lKeyword ] > 1 } {
			lappend lSuggestions [ lindex $lKeyword 0 ]
			lappend lTmp         [ lindex $lKeyword 0 ]
			lappend lHelp        [ list [ lindex $lKeyword 0 ] [ join [ lrange $lKeyword 1 end ] {|} ] ]
		} else {
			lappend lSuggestions $sKeyword
			lappend lTmp         $sKeyword
		}
	}
	set lKeywordsFunctions $lTmp

	# Keywords 1
	set lTmp [ list ]
	foreach sKeyword $lKeywords1 {
		set lKeyword [ split $sKeyword {|} ]
		if { [ llength $lKeyword ] > 1 } {
			lappend lSuggestions [ lindex $lKeyword 0 ]
			lappend lTmp         [ lindex $lKeyword 0 ]
			lappend lHelp        [ list [ lindex $lKeyword 0 ] [ join [ lrange $lKeyword 1 end ] {|} ] ]
		} else {
			lappend lSuggestions $sKeyword
			lappend lTmp         $sKeyword
		}
	}
	set lKeywords1 $lTmp

	# Keywords 2
	set lTmp [ list ]
	foreach sKeyword $lKeywords2 {
		set lKeyword [ split $sKeyword {|} ]
		if { [ llength $lKeyword ] > 1 } {
			lappend lSuggestions [ lindex $lKeyword 0 ]
			lappend lTmp         [ lindex $lKeyword 0 ]
			lappend lHelp        [ list [ lindex $lKeyword 0 ] [ join [ lrange $lKeyword 1 end ] {|} ] ]
		} else {
			lappend lSuggestions $sKeyword
			lappend lTmp         $sKeyword
		}
	}
	set lKeywords2 $lTmp

	# Keywords 3
	set lTmp [ list ]
	foreach sKeyword $lKeywords3 {
		set lKeyword [ split $sKeyword {|} ]
		if { [ llength $lKeyword ] > 1 } {
			lappend lSuggestions [ lindex $lKeyword 0 ]
			lappend lTmp         [ lindex $lKeyword 0 ]
			lappend lHelp        [ list [ lindex $lKeyword 0 ] [ join [ lrange $lKeyword 1 end ] {|} ] ]
		} else {
			lappend lSuggestions $sKeyword
			lappend lTmp         $sKeyword
		}
	}
	set lKeywords3 $lTmp

	# Keywords 4
	set lTmp [ list ]
	foreach sKeyword $lKeywords4 {
		set lKeyword [ split $sKeyword {|} ]
		if { [ llength $lKeyword ] > 1 } {
			lappend lSuggestions [ lindex $lKeyword 0 ]
			lappend lTmp         [ lindex $lKeyword 0 ]
			lappend lHelp        [ list [ lindex $lKeyword 0 ] [ join [ lrange $lKeyword 1 end ] {|} ] ]
		} else {
			lappend lSuggestions $sKeyword
			lappend lTmp         $sKeyword
		}
	}
	set lKeywords4 $lTmp

	# Keywords 5
	set lTmp [ list ]
	foreach sKeyword $lKeywords5 {
		set lKeyword [ split $sKeyword {|} ]
		if { [ llength $lKeyword ] > 1 } {
			lappend lSuggestions [ lindex $lKeyword 0 ]
			lappend lTmp         [ lindex $lKeyword 0 ]
			lappend lHelp        [ list [ lindex $lKeyword 0 ] [ join [ lrange $lKeyword 1 end ] {|} ] ]
		} else {
			lappend lSuggestions $sKeyword
			lappend lTmp         $sKeyword
		}
	}
	set lKeywords5 $lTmp

	# Keywords 6
	set lTmp [ list ]
	foreach sKeyword $lKeywords6 {
		set lKeyword [ split $sKeyword {|} ]
		if { [ llength $lKeyword ] > 1 } {
			lappend lSuggestions [ lindex $lKeyword 0 ]
			lappend lTmp         [ lindex $lKeyword 0 ]
			lappend lHelp        [ list [ lindex $lKeyword 0 ] [ join [ lrange $lKeyword 1 end ] {|} ] ]
		} else {
			lappend lSuggestions $sKeyword
			lappend lTmp         $sKeyword
		}
	}
	set lKeywords6 $lTmp

	# Syntax Hilfe
	lappend lSyntaxHelp     [ list $sLanguageName $lHelp ]

	# Syntax Completion
	lappend lCompletions    [ list $sLanguageName [ lsort -unique -dictionary $lSuggestions ] ]

	# Syntax Highlighting
	lappend lFileTypes      [ list $sLanguageName $lExtensions $lAutoClose $sRegexpComment $sCharStartVar $sCharsBrackets $lKeywordsFunctions $lKeywords1 $sCharStart1 $sChars1 $sRegexp1 $lKeywords2 $sCharStart2 $sChars2 $sRegexp2 $lKeywords3 $sCharStart3 $sChars3 $sRegexp3 $lKeywords4 $sCharStart4 $sChars4 $sRegexp4 $lKeywords5 $sCharStart5 $sChars5 $sRegexp5 $lKeywords6 $sCharStart6 $sChars6 $sRegexp6 $bCStyleComment ]

	# Klammern schliessen
	lappend lSyntaxBrackets [ list $sLanguageName $lAutoClose ]

}


################################################################################
# FILE: tcltk/syntax/tcltk.tcl

################################################################################
# Syntax Declaration
syntax_create "Tcl/Tk"
#
# 20180120, jmos: Tcl/Tk version 8.6.8 complete
#
################################################################################


################################################################################
# file extensions
lappend lExtensions {.tcl}
lappend lExtensions {.tk}


################################################################################
# characters which can be auto-closed
lappend lAutoClose "\{"
lappend lAutoClose {[}
#lappend lAutoClose {(}
lappend lAutoClose {"}
#lappend lAutoClose {'}
#lappend lAutoClose {<}


################################################################################
# comments (tcl regexp)
set sRegexpComment {#[^\n\r]*}
set bCStyleComment 0


################################################################################
# character for variables
set sCharStartVar {$}


################################################################################
# bracket characters
set sCharsBrackets {[]{}}


################################################################################
# functions (optionally add help text with "|")
lappend lKeywordsFunctions {proc|proc name args body}


################################################################################
# Color #1
#  - $lKeywords1  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart1 :: char   :: all words starting with this character matches
#  - $sChars1     :: string :: every char in string matches
#  - $sRegexp1    :: regexp :: regular expression in Tcl style
lappend lKeywords1 {after|after ms
after ms ?script script script ...?
after cancel id
after cancel script script script ...
after idle ?script script script ...?
after info ?id?}
lappend lKeywords1 {append|append varName ?value value value ...?}
lappend lKeywords1 {apply|apply func ?arg1 arg2 ...?}
lappend lKeywords1 {array|array option arrayName ?arg arg ...?}
lappend lKeywords1 {bgerror|bgerror message}
lappend lKeywords1 {binary|binary decode format ?-option value ...? data
binary encode format ?-option value ...? data
binary format formatString ?arg arg ...?
binary scan string formatString ?varName varName ...?}
lappend lKeywords1 {catch|catch script ?resultVarName? ?optionsVarName?}
lappend lKeywords1 {cd|cd ?dirName?}
lappend lKeywords1 {chan|chan option ?arg arg ...?}
lappend lKeywords1 {clock|clock add timeVal ?count unit...? ?-option value?
clock clicks ?-option?
clock format timeVal ?-option value...?
clock microseconds
clock milliseconds
clock scan inputString ?-option value...?
clock seconds}
lappend lKeywords1 {close|close channelId ?r(ead)|w(rite)?}
lappend lKeywords1 {concat|concat ?arg arg ...?}
lappend lKeywords1 {coroutine|coroutine name command ?arg...?
yield ?value?
yieldto command ?arg...?
name ?value...?}
lappend lKeywords1 {yield|coroutine name command ?arg...?
yield ?value?
yieldto command ?arg...?
name ?value...?}
lappend lKeywords1 {yieldto|coroutine name command ?arg...?
yield ?value?
yieldto command ?arg...?
name ?value...?}
lappend lKeywords1 {dict|dict option arg ?arg ...?}
lappend lKeywords1 {encoding|encoding option ?arg arg ...?}
lappend lKeywords1 {eof|eof channelId}
lappend lKeywords1 {error|error message ?info? ?code?}
lappend lKeywords1 {eval|eval arg ?arg ...?}
lappend lKeywords1 {exec|exec ?switches? arg ?arg ...? ?&?}
lappend lKeywords1 {exit|exit ?returnCode?}
lappend lKeywords1 {expr|expr arg ?arg arg ...?}
lappend lKeywords1 {fblocked|fblocked channelId}
lappend lKeywords1 {fconfigure|fconfigure channelId
fconfigure channelId name
fconfigure channelId name value ?name value ...?}
lappend lKeywords1 {fcopy|fcopy inchan outchan ?-size size? ?-command callback?}
lappend lKeywords1 {file|file option name ?arg arg ...?}
lappend lKeywords1 {fileevent|fileevent channelId readable ?script?
fileevent channelId writable ?script?}
lappend lKeywords1 {flush|flush channelId}
lappend lKeywords1 {format|format formatString ?arg arg ...?}
lappend lKeywords1 {gets|gets channelId ?varName?}
lappend lKeywords1 {glob|glob ?switches? ?pattern ...?}
lappend lKeywords1 {history|history ?option? ?arg arg ...?}
lappend lKeywords1 {incr|incr varName ?increment?}
lappend lKeywords1 {info|info option ?arg arg ...?}
lappend lKeywords1 {interp|interp subcommand ?arg arg ...?}
lappend lKeywords1 {join|join list ?joinString?}
lappend lKeywords1 {lappend|lappend varName ?value value value ...?}
lappend lKeywords1 {lassign|lassign list ?varName ...?}
lappend lKeywords1 {lindex|lindex list ?index ...?}
lappend lKeywords1 {linsert|linsert list index ?element element ...?}
lappend lKeywords1 {list|list ?arg arg ...?}
lappend lKeywords1 {llength|llength list}
lappend lKeywords1 {lmap|lmap varname list body
lmap varlist1 list1 ?varlist2 list2 ...? body}
lappend lKeywords1 {load|load ?-global? ?-lazy? ?--? fileName
load ?-global? ?-lazy? ?--? fileName packageName
load ?-global? ?-lazy? ?--? fileName packageName interp}
lappend lKeywords1 {lrange|lrange list first last}
lappend lKeywords1 {lrepeat|lrepeat count ?element ...?}
lappend lKeywords1 {lreplace|lreplace list first last ?element element ...?}
lappend lKeywords1 {lreverse|lreverse list}
lappend lKeywords1 {lsearch|lsearch ?options? list pattern}
lappend lKeywords1 {lset|lset varName ?index ...? newValue}
lappend lKeywords1 {lsort|lsort ?options? list}
lappend lKeywords1 {mathfunc|::tcl::mathfunc::abs arg
::tcl::mathfunc::acos arg
::tcl::mathfunc::asin arg
::tcl::mathfunc::atan arg
::tcl::mathfunc::atan2 y x
::tcl::mathfunc::bool arg
::tcl::mathfunc::ceil arg
::tcl::mathfunc::cos arg
::tcl::mathfunc::cosh arg
::tcl::mathfunc::double arg
::tcl::mathfunc::entier arg
::tcl::mathfunc::exp arg
::tcl::mathfunc::floor arg
::tcl::mathfunc::fmod x y
::tcl::mathfunc::hypot x y
::tcl::mathfunc::int arg
::tcl::mathfunc::isqrt arg
::tcl::mathfunc::log arg
::tcl::mathfunc::log10 arg
::tcl::mathfunc::max arg ?arg ...?
::tcl::mathfunc::min arg ?arg ...?
::tcl::mathfunc::pow x y
::tcl::mathfunc::rand
::tcl::mathfunc::round arg
::tcl::mathfunc::sin arg
::tcl::mathfunc::sinh arg
::tcl::mathfunc::sqrt arg
::tcl::mathfunc::srand arg
::tcl::mathfunc::tan arg
::tcl::mathfunc::tanh arg
::tcl::mathfunc::wide arg}
lappend lKeywords1 {mathop|::tcl::mathop::! number
::tcl::mathop::~ number
::tcl::mathop::+ ?number ...?
::tcl::mathop::- number ?number ...?
::tcl::mathop::* ?number ...?
::tcl::mathop::/ number ?number ...?
::tcl::mathop::% number number
::tcl::mathop::** ?number ...?
::tcl::mathop::& ?number ...?
::tcl::mathop::| ?number ...?
::tcl::mathop::^ ?number ...?
::tcl::mathop::<< number number
::tcl::mathop::>> number number
::tcl::mathop::== ?arg ...?
::tcl::mathop::!= arg arg
::tcl::mathop::< ?arg ...?
::tcl::mathop::<= ?arg ...?
::tcl::mathop::>= ?arg ...?
::tcl::mathop::> ?arg ...?
::tcl::mathop::eq ?arg ...?
::tcl::mathop::ne arg arg
::tcl::mathop::in arg list
::tcl::mathop::ni arg list}
lappend lKeywords1 {memory|memory option ?arg arg ...?}
lappend lKeywords1 {my|my methodName ?arg ...?}
lappend lKeywords1 {namespace|namespace ?subcommand? ?arg ...?}
lappend lKeywords1 {open|open fileName
open fileName access
open fileName access permissions}
lappend lKeywords1 {package|package forget ?package package ...?
package ifneeded package version ?script?
package names
package present package ?requirement...?
package present -exact package version
package provide package ?version?
package require package ?requirement...?
package require -exact package version
package unknown ?command?
package vcompare version1 version2
package versions package
package vsatisfies version requirement...
package prefer ?latest|stable?}
lappend lKeywords1 {pid|pid ?fileId?}
lappend lKeywords1 {pkg::create|::pkg::create -name packageName -version packageVersion ?-load filespec? ... ?-source filespec? ...}
lappend lKeywords1 {pkg_mkIndex|pkg_mkIndex ?options...? dir ?pattern pattern ...?}
lappend lKeywords1 {puts|puts ?-nonewline? ?channelId? string}
lappend lKeywords1 {pwd}
lappend lKeywords1 {read|read ?-nonewline? channelId
read channelId numChars}
lappend lKeywords1 {regexp|regexp ?switches? exp string ?matchVar? ?subMatchVar subMatchVar ...?}
lappend lKeywords1 {regsub|regsub ?switches? exp string subSpec ?varName?}
lappend lKeywords1 {rename|rename oldName newName}
lappend lKeywords1 {return|return ?result?
return ?-code code? ?result?
return ?option value ...? ?result?}
lappend lKeywords1 {::safe::interpCreate|::safe::interpCreate ?slave? ?options...?}
lappend lKeywords1 {::safe::interpInit|::safe::interpInit slave ?options...?}
lappend lKeywords1 {::safe::interpConfigure|::safe::interpConfigure slave ?options...?}
lappend lKeywords1 {::safe::interpDelete|::safe::interpDelete slave}
lappend lKeywords1 {::safe::interpAddToAccessPath|::safe::interpAddToAccessPath slave directory}
lappend lKeywords1 {::safe::interpFindInAccessPath|::safe::interpFindInAccessPath slave directory}
lappend lKeywords1 {::safe::setLogCmd|::safe::setLogCmd ?cmd arg...?}
lappend lKeywords1 {scan|scan string format ?varName varName ...?}
lappend lKeywords1 {seek|seek channelId offset ?origin?}
lappend lKeywords1 {socket|socket ?options? host port
socket -server command ?options? port}
lappend lKeywords1 {source|source fileName
source -encoding encodingName fileName}
lappend lKeywords1 {split|split string ?splitChars?}
lappend lKeywords1 {string|string option arg ?arg ...?}
lappend lKeywords1 {subst|subst ?-nobackslashes? ?-nocommands? ?-novariables? string}
lappend lKeywords1 {tailcall|tailcall command ?arg ...?}
lappend lKeywords1 {::tcl::prefix|::tcl::prefix all table string
::tcl::prefix longest table string
::tcl::prefix match ?option ...? table string}
lappend lKeywords1 {tell|tell channelId}
lappend lKeywords1 {throw|throw type message}
lappend lKeywords1 {time|time script ?count?}
lappend lKeywords1 {::tcl::tm|::tcl::tm::path add ?path...?
::tcl::tm::path remove ?path...?
::tcl::tm::path list
::tcl::tm::roots ?path...?}
lappend lKeywords1 {trace|trace option ?arg arg ...?}
lappend lKeywords1 {try|try body ?handler...? ?finally script?}
lappend lKeywords1 {unknown|unknown cmdName ?arg arg ...?}
lappend lKeywords1 {unload|unload ?switches? fileName
unload ?switches? fileName packageName
unload ?switches? fileName packageName interp}
lappend lKeywords1 {update|update ?idletasks?}
lappend lKeywords1 {uplevel|uplevel ?level? arg ?arg ...?}
lappend lKeywords1 {zlib|zlib subcommand arg ...}
lappend lKeywords1 {auto_execok|auto_execok cmd}
lappend lKeywords1 {auto_import|auto_import pattern}
lappend lKeywords1 {auto_load|auto_load cmd}
lappend lKeywords1 {auto_mkindex|auto_mkindex dir pattern pattern ...}
lappend lKeywords1 {auto_qualify|auto_qualify command namespace}
lappend lKeywords1 {auto_reset}
lappend lKeywords1 {tcl_endOfWord|tcl_endOfWord str start}
lappend lKeywords1 {tcl_startOfNextWord|tcl_startOfNextWord str start}
lappend lKeywords1 {tcl_startOfPreviousWord|tcl_startOfPreviousWord str start}
lappend lKeywords1 {tcl_wordBreakAfter|tcl_wordBreakAfter str start}
lappend lKeywords1 {tcl_wordBreakBefore|tcl_wordBreakBefore str start}
lappend lKeywords1 {tcl_findLibrary|tcl_findLibrary basename version patch initScript enVarName varName}


################################################################################
# Color #2
#  - $lKeywords2  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart2 :: char   :: all words starting with this character matches
#  - $sChars2     :: string :: every char in string matches
#  - $sRegexp2    :: regexp :: regular expression in Tcl style
lappend lKeywords2 {dde|package require dde
dde servername ?-force? ?-handler proc? ?--? ?topic?
dde execute ?-async? ?-binary? service topic data
dde poke ?-binary? service topic item data
dde request ?-binary? service topic item
dde services service topic
dde eval ?-async? topic cmd ?arg arg ...?}

lappend lKeywords2 {http|package require http
::http::config ?-option value ...?
::http::geturl url ?-option value ...?
::http::formatQuery key value ?key value ...?
::http::reset token ?why?
::http::wait token
::http::status token
::http::size token
::http::code token
::http::ncode token
::http::meta token
::http::data token
::http::error token
::http::cleanup token
::http::register proto port command
::http::unregister proto}

lappend lKeywords2 {::msgcat|package require msgcat
::msgcat::mc src-string ?arg arg ...?
::msgcat::mcmax ?src-string src-string ...?
::msgcat::mcexists ?-exactnamespace? ?-exactlocale? src-string
::msgcat::mclocale ?newLocale?
::msgcat::mcpreferences
::msgcat::mcloadedlocales subcommand ?locale?
::msgcat::mcload dirname
::msgcat::mcset locale src-string ?translate-string?
::msgcat::mcmset locale src-trans-list
::msgcat::mcflset src-string ?translate-string?
::msgcat::mcflmset src-trans-list
::msgcat::mcunknown locale src-string ?arg arg ...?
::msgcat::mcpackagelocale subcommand ?locale?
::msgcat::mcpackageconfig subcommand option ?value?
::msgcat::mcforgetpackage}
lappend lKeywords2 {::msgcat::mc|::msgcat::mc src-string ?arg arg ...?}
lappend lKeywords2 {mcset|mcset lang src-string to-string}

lappend lKeywords2 {next|package require TclOO
next ?arg ...?}
lappend lKeywords2 {nextto|package require TclOO
nextto class ?arg ...?}

lappend lKeywords2 {oo::class|package require TclOO
oo::class method ?arg ...?}
lappend lKeywords2 {oo::copy|package require TclOO
oo::copy sourceObject ?targetObject? ?targetNamespace?}
lappend lKeywords2 {oo::define|package require TclOO
oo::define class defScript
oo::define class subcommand arg ?arg ...?}
lappend lKeywords2 {oo::objdefine|package require TclOO
oo::objdefine class defScript
oo::objdefine class subcommand arg ?arg ...?}
lappend lKeywords2 {oo::object|package require TclOO
oo::object method ?arg ...?}
lappend lKeywords2 {self|package require TclOO
self ?subcommand?}

lappend lKeywords2 {platform::generic|package require platform
platform::generic}
lappend lKeywords2 {platform::identify|package require platform
platform::identify}
lappend lKeywords2 {platform::patterns|package require platform
platform::patterns identifier}

lappend lKeywords2 {platform::shell::identify|package require platform::shell
platform::shell::identify shell}
lappend lKeywords2 {platform::shell::generic|package require platform::shell
platform::shell::generic shell}
lappend lKeywords2 {platform::shell::platform|package require platform::shell
platform::shell::platform shell}

lappend lKeywords2 {registry|package require registry
registry ?-mode? option keyName ?arg arg ...?}

lappend lKeywords2 {tcltest|package require tcltest
tcltest::test name description ?-option value ...?
tcltest::test name description ?constraints? body result
tcltest::loadTestedCommands
tcltest::makeDirectory name ?directory?
tcltest::removeDirectory name ?directory?
tcltest::makeFile contents name ?directory?
tcltest::removeFile name ?directory?
tcltest::viewFile name ?directory?
tcltest::cleanupTests ?runningMultipleTests?
tcltest::runAllTests
tcltest::configure
tcltest::configure -option
tcltest::configure -option value ?-option value ...?
tcltest::customMatch mode command
tcltest::testConstraint constraint ?value?
tcltest::outputChannel ?channelID?
tcltest::errorChannel ?channelID?
tcltest::interpreter ?interp?
tcltest::debug ?level?
tcltest::errorFile ?filename?
tcltest::limitConstraints ?boolean?
tcltest::loadFile ?filename?
tcltest::loadScript ?script?
tcltest::match ?patternList?
tcltest::matchDirectories ?patternList?
tcltest::matchFiles ?patternList?
tcltest::outputFile ?filename?
tcltest::preserveCore ?level?
tcltest::singleProcess ?boolean?
tcltest::skip ?patternList?
tcltest::skipDirectories ?patternList?
tcltest::skipFiles ?patternList?
tcltest::temporaryDirectory ?directory?
tcltest::testsDirectory ?directory?
tcltest::verbose ?level?
tcltest::test name description optionList
tcltest::bytestring string
tcltest::normalizeMsg msg
tcltest::normalizePath pathVar
tcltest::workingDirectory ?dir?}

lappend lKeywords2 {bell|bell ?-displayof window? ?-nice?}
lappend lKeywords2 {bind|bind tag ?sequence? ?+??script?}
lappend lKeywords2 {bindtags|bindtags window ?tagList?}
lappend lKeywords2 {bitmap|image create bitmap ?name? ?options?
imageName cget option
imageName configure ?option? ?value option value ...?}
lappend lKeywords2 {button|button pathName ?options?}
lappend lKeywords2 {canvas|canvas pathName ?options?}
lappend lKeywords2 {checkbutton|checkbutton pathName ?options?}
lappend lKeywords2 {clipboard|clipboard option ?arg arg ...?}
lappend lKeywords2 {console|console subcommand ?arg ...?}
lappend lKeywords2 {destroy|destroy ?window window ...?}
lappend lKeywords2 {entry|entry pathName ?options?}
lappend lKeywords2 {event|event option ?arg arg ...?}
lappend lKeywords2 {focus|focus
focus window
focus option ?arg arg ...?}
lappend lKeywords2 {font|font option ?arg arg ...?}
lappend lKeywords2 {frame|frame pathName ?options?}
lappend lKeywords2 {grab|grab ?-global? window
grab option ?arg arg ...?}
lappend lKeywords2 {grid|grid option arg ?arg ...?}
lappend lKeywords2 {image|image option ?arg arg ...?}
lappend lKeywords2 {label|label pathName ?options?}
lappend lKeywords2 {labelframe|labelframe pathName ?options?}
lappend lKeywords2 {listbox|listbox pathName ?options?}
lappend lKeywords2 {lower|lower window ?belowThis?}
lappend lKeywords2 {menu|menu pathName ?options?
tk_menuSetFocus pathName}
lappend lKeywords2 {tk_menuSetFocus|menu pathName ?options?
tk_menuSetFocus pathName}
lappend lKeywords2 {menubutton|menubutton pathName ?options?}
lappend lKeywords2 {message|message pathName ?options?}
lappend lKeywords2 {option|option add pattern value ?priority?
option clear
option get window name class
option readfile fileName ?priority?}
lappend lKeywords2 {pack|pack option arg ?arg ...?}
lappend lKeywords2 {panedwindow|panedwindow pathName ?options?}
lappend lKeywords2 {photo|image create photo ?name? ?options?
imageName blank
imageName cget option
imageName configure ?option? ?value option value ...?
imageName copy sourceImage ?option value(s) ...?
imageName data ?option value(s) ...?
imageName get x y
imageName put data ?option value(s) ...?
imageName read filename ?option value(s) ...?
imageName redither
imageName transparency subcommand ?arg arg ...?
imageName write filename ?option value(s) ...?}
lappend lKeywords2 {place|place option arg ?arg ...?}
lappend lKeywords2 {radiobutton|radiobutton pathName ?options?}
lappend lKeywords2 {raise|raise window ?aboveThis?}
lappend lKeywords2 {safe::loadTk|safe::loadTk slave ?-use windowId? ?-display displayName?}
lappend lKeywords2 {scale|scale pathName ?options?}
lappend lKeywords2 {scrollbar|scrollbar pathName ?options?}
lappend lKeywords2 {selection|selection option ?arg arg ...?}
lappend lKeywords2 {send|send ?options? app cmd ?arg arg ...?}
lappend lKeywords2 {spinbox|spinbox pathName ?options?}
lappend lKeywords2 {text|text pathName ?options?
tk_textCopy pathName
tk_textCut pathName
tk_textPaste pathName}
lappend lKeywords2 {tk_textCopy|text pathName ?options?
tk_textCopy pathName}
lappend lKeywords2 {tk_textCut|text pathName ?options?
tk_textCut pathName}
lappend lKeywords2 {tk_textPaste|text pathName ?options?
tk_textPaste pathName}
lappend lKeywords2 {tk|tk appname ?newName?
tk busy window ?options?
tk busy hold window ?options?
tk busy configure window ?option value?...
tk busy forget window ?window ?...
tk busy current ?pattern?
tk busy status window
tk caret window ?-x x? ?-y y? ?-height height?
tk inactive ?-displayof window? ?reset?
tk fontchooser configure ?-option value -option value ...?
tk fontchooser show
tk fontchooser hide
tk scaling ?-displayof window? ?number?
tk useinputmethods ?-displayof window? ?boolean?
tk windowingsystem}
lappend lKeywords2 {::tk::mac|::tk::mac::ShowPreferences
::tk::mac::OpenApplication
::tk::mac::ReopenApplication
::tk::mac::OpenDocument file...
::tk::mac::PrintDocument file...
::tk::mac::Quit
::tk::mac::OnHide
::tk::mac::OnShow
::tk::mac::ShowHelp
::tk::mac::standardAboutPanel
::tk::mac::useCompatibilityMetrics boolean
::tk::mac::CGAntialiasLimit limit
::tk::mac::antialiasedtext number
::tk::mac::useThemedToplevel boolean
::tk::mac::iconBitmap name width height -kind value}
lappend lKeywords2 {tk_setPalette|tk_setPalette background
tk_setPalette name value ?name value ...?}
lappend lKeywords2 {tk_bisque}
lappend lKeywords2 {tk_chooseColor|tk_chooseColor ?option value ...?}
lappend lKeywords2 {tk_chooseDirectory|tk_chooseDirectory ?option value ...?}
lappend lKeywords2 {tk_dialog|tk_dialog window title text bitmap default string string ...}
lappend lKeywords2 {tk_focusNext|tk_focusNext window}
lappend lKeywords2 {tk_focusPrev|tk_focusPrev window}
lappend lKeywords2 {tk_focusFollowsMouse}
lappend lKeywords2 {tk_getOpenFile|tk_getOpenFile ?option value ...?}
lappend lKeywords2 {tk_getSaveFile|tk_getSaveFile ?option value ...?}
lappend lKeywords2 {tk_messageBox|tk_messageBox ?option value ...?}
lappend lKeywords2 {tk_optionMenu|tk_optionMenu pathName varName value ?value value ...?}
lappend lKeywords2 {tk_popup|tk_popup menu x y ?entry?}
lappend lKeywords2 {tkerror|tkerror message}
lappend lKeywords2 {tkwait|tkwait variable name
tkwait visibility name
tkwait window name}
lappend lKeywords2 {toplevel|toplevel pathName ?options?}
lappend lKeywords2 {ttk::button|ttk::button pathName ?options?}
lappend lKeywords2 {ttk::checkbutton|ttk::checkbutton pathName ?options?}
lappend lKeywords2 {ttk::combobox|ttk::combobox pathName ?options?}
lappend lKeywords2 {ttk::entry|ttk::entry pathName ?options?}
lappend lKeywords2 {ttk::frame|ttk::frame pathName ?options?}
lappend lKeywords2 {ttk::label|ttk::label pathName ?options?}
lappend lKeywords2 {ttk::labelframe|ttk::labelframe pathName ?options?}
lappend lKeywords2 {ttk::menubutton|ttk::menubutton pathName ?options?}
lappend lKeywords2 {ttk::notebook|ttk::notebook pathname ?options...?
pathname add window ?options...?
pathname insert index window ?options...?}
lappend lKeywords2 {ttk::panedwindow|ttk::panedwindow pathname ?options?
pathname add window ?options...?
pathname insert index window ?options...?}
lappend lKeywords2 {ttk::progressbar|ttk::progressbar pathName ?options?}
lappend lKeywords2 {ttk::radiobutton|ttk::radiobutton pathName ?options?}
lappend lKeywords2 {ttk::scale|ttk::scale pathName ?options...?}
lappend lKeywords2 {ttk::scrollbar|ttk::scrollbar pathName ?options...?}
lappend lKeywords2 {ttk::separator|ttk::separator pathName ?options?}
lappend lKeywords2 {ttk::sizegrip|ttk::sizegrip pathName ?options?}
lappend lKeywords2 {ttk::spinbox|ttk::spinbox pathName ?options?}
lappend lKeywords2 {ttk::style|ttk::style configure style ?-option ?value option value...? ?
ttk::style map style ?-option { statespec value... }?
ttk::style lookup style -option ?state ?default??
ttk::style layout style ?layoutSpec?
ttk::style element create elementName type ?args...?
ttk::style element names
ttk::style element options element
ttk::style theme create themeName ?-parent basedon? ?-settings script... ?
ttk::style theme settings themeName script
ttk::style theme names
ttk::style theme use ?themeName?}
lappend lKeywords2 {ttk::treeview|ttk::treeview pathname ?options?}
lappend lKeywords2 {winfo|winfo option ?arg arg ...?}
lappend lKeywords2 {wm|wm option window ?args?}


################################################################################
# Color #3
#  - $lKeywords3  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart3 :: char   :: all words starting with this character matches
#  - $sChars3     :: string :: every char in string matches
#  - $sRegexp3    :: regexp :: regular expression in Tcl style
lappend lKeywords3 {global|global ?varname ...?}
lappend lKeywords3 {parray|parray arrayName ?pattern?}
lappend lKeywords3 {set|set varName ?value?}
lappend lKeywords3 {unset|unset ?-nocomplain? ?--? ?name name name ...?}
lappend lKeywords3 {variable|variable name
variable ?name value...?}
lappend lKeywords3 {upvar|upvar ?level? otherVar myVar ?otherVar myVar ...?}
lappend lKeywords3 {vwait|vwait varName}


################################################################################
# Color #4
#  - $lKeywords4  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart4 :: char   :: all words starting with this character matches
#  - $sChars4     :: string :: every char in string matches
#  - $sRegexp4    :: regexp :: regular expression in Tcl style
lappend lKeywords4 {while|while test body}
lappend lKeywords4 {for|for start test next body}
lappend lKeywords4 {foreach|foreach varname list body
foreach varlist1 list1 ?varlist2 list2 ...? body}
lappend lKeywords4 {if|if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN?}
lappend lKeywords4 {else|if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN?}
lappend lKeywords4 {elseif|if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN?}
lappend lKeywords4 {switch|switch ?options? string pattern body ?pattern body ...?
switch ?options? string {pattern body ?pattern body ...?}}
lappend lKeywords4 {break}
lappend lKeywords4 {continue}


################################################################################
# Color #5
#  - $lKeywords5  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart5 :: char   :: all words starting with this character matches
#  - $sChars5     :: string :: every char in string matches
#  - $sRegexp5    :: regexp :: regular expression in Tcl style
lappend lKeywords5 {-text}
lappend lKeywords5 {-icon}
lappend lKeywords5 {-command}
lappend lKeywords5 {-yscrollcommand}
lappend lKeywords5 {-xscrollcommand}
lappend lKeywords5 {-background}
lappend lKeywords5 {-foreground}
lappend lKeywords5 {-fg}
lappend lKeywords5 {-bg}
lappend lKeywords5 {-highlightbackground}
lappend lKeywords5 {-y}
lappend lKeywords5 {-x}
lappend lKeywords5 {-highlightcolor}
lappend lKeywords5 {-relief}
lappend lKeywords5 {-width}
lappend lKeywords5 {-height}
lappend lKeywords5 {-wrap}
lappend lKeywords5 {-font}
lappend lKeywords5 {-fill}
lappend lKeywords5 {-side}
lappend lKeywords5 {-outline}
lappend lKeywords5 {-style}
lappend lKeywords5 {-insertwidth}
lappend lKeywords5 {-textvariable}
lappend lKeywords5 {-activebackground}
lappend lKeywords5 {-activeforeground}
lappend lKeywords5 {-insertbackground}
lappend lKeywords5 {-anchor}
lappend lKeywords5 {-orient}
lappend lKeywords5 {-troughcolor}
lappend lKeywords5 {-nonewline}
lappend lKeywords5 {-expand}
lappend lKeywords5 {-type}
lappend lKeywords5 {-message}
lappend lKeywords5 {-title}
lappend lKeywords5 {-offset}
lappend lKeywords5 {-in}
lappend lKeywords5 {-after}
lappend lKeywords5 {-yscroll}
lappend lKeywords5 {-xscroll}
lappend lKeywords5 {-forward}
lappend lKeywords5 {-regexp}
lappend lKeywords5 {-count}
lappend lKeywords5 {-exact}
lappend lKeywords5 {-padx}
lappend lKeywords5 {-ipadx}
lappend lKeywords5 {-filetypes}
lappend lKeywords5 {-all}
lappend lKeywords5 {-from}
lappend lKeywords5 {-to}
lappend lKeywords5 {-label}
lappend lKeywords5 {-value}
lappend lKeywords5 {-variable}
lappend lKeywords5 {-regexp}
lappend lKeywords5 {-backwards}
lappend lKeywords5 {-forwards}
lappend lKeywords5 {-bd}
lappend lKeywords5 {-pady}
lappend lKeywords5 {-ipady}
lappend lKeywords5 {-state}
lappend lKeywords5 {-row}
lappend lKeywords5 {-column}
lappend lKeywords5 {-cursor}
lappend lKeywords5 {-highlightcolors}
lappend lKeywords5 {-linemap}
lappend lKeywords5 {-menu}
lappend lKeywords5 {-tearoff}
lappend lKeywords5 {-displayof}
lappend lKeywords5 {-cursor}
lappend lKeywords5 {-underline}
lappend lKeywords5 {-tags}
lappend lKeywords5 {-tag}
lappend lKeywords5 {-dictionary}
lappend lKeywords5 {-nocomplain}
lappend lKeywords5 {-directory}
lappend lKeywords5 {-values}
lappend lKeywords5 {-borderwidth}
lappend lKeywords5 {-tabs}
lappend lKeywords5 {-tabstyle}
lappend lKeywords5 {-sticky}
lappend lKeywords5 {-columnspan}
lappend lKeywords5 {-rowspan}
lappend lKeywords5 {-weight}
lappend lKeywords5 {-values}
lappend lKeywords5 {-family}
lappend lKeywords5 {-size}
lappend lKeywords5 {-slant}
lappend lKeywords5 {-selectbackground}
lappend lKeywords5 {-selectforeground}
lappend lKeywords5 {-toplevel}
lappend lKeywords5 {-highlightthickness}
lappend lKeywords5 {-window}
lappend lKeywords5 {-showhandle}
lappend lKeywords5 {-sashwidth}
lappend lKeywords5 {-compound}
lappend lKeywords5 {-image}
lappend lKeywords5 {-accelerator}
lappend lKeywords5 {-padding}
lappend lKeywords5 {-selectmode}
lappend lKeywords5 {-exportselection}
lappend lKeywords5 {-activestyle}
lappend lKeywords5 {-show}
lappend lKeywords5 {-unique}
lappend lKeywords5 {-format}
lappend lKeywords5 {-parent}
lappend lKeywords5 {-detail}
lappend lKeywords5 {-index}
lappend lKeywords5 {-lines}
lappend lKeywords5 {-integer}
lappend lKeywords5 {-onvalue}
lappend lKeywords5 {-offvalue}
lappend lKeywords5 {-takefocus}
lappend lKeywords5 {-justify}
lappend lKeywords5 {-indicatorcolor}
lappend lKeywords5 {-fieldbackground}
lappend lKeywords5 {-indent}
lappend lKeywords5 {-columns}
lappend lKeywords5 {-displaycolumns}
lappend lKeywords5 {-postcommand}


################################################################################
# Color #6
#  - $lKeywords6  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart6 :: char   :: all words starting with this character matches
#  - $sChars6     :: string :: every char in string matches
#  - $sRegexp6    :: regexp :: regular expression in Tcl style
lappend lKeywords6 {==}
lappend lKeywords6 {!=}
lappend lKeywords6 {<}
lappend lKeywords6 {>}
lappend lKeywords6 {<=}
lappend lKeywords6 {>=}
lappend lKeywords6 {||}


################################################################################
# finished - now add your syntax
syntax_add
################################################################################


################################################################################
# FILE: tcltk/syntax/shell.tcl

################################################################################
# Syntax Declaration
syntax_create "Shell"
################################################################################


################################################################################
# file extensions
lappend lExtensions {.sh}


################################################################################
# characters which can be auto-closed
lappend lAutoClose "\{"
# lappend lAutoClose {[}
# lappend lAutoClose {(}
# lappend lAutoClose {"}
# lappend lAutoClose {'}
# lappend lAutoClose {<}


################################################################################
# comments (tcl regexp)
set sRegexpComment {#[^\n\r]*}
set bCStyleComment 0


################################################################################
# character for variables
set sCharStartVar {$}


################################################################################
# bracket characters
set sCharsBrackets {[]{}}


################################################################################
# functions (optionally add help text with "|")
lappend lKeywordsFunctions {function}


################################################################################
# Color #1
#  - $lKeywords1  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart1 :: char   :: all words starting with this character matches
#  - $sChars1     :: string :: every char in string matches
#  - $sRegexp1    :: regexp :: regular expression in Tcl style
lappend lKeywords1 {select}
lappend lKeywords1 {coproc}
lappend lKeywords1 {parallel}
lappend lKeywords1 {alias}
lappend lKeywords1 {declare}
lappend lKeywords1 {typeset}
lappend lKeywords1 {export}
lappend lKeywords1 {readonly}
lappend lKeywords1 {local}
lappend lKeywords1 {wait}
lappend lKeywords1 {disown}
lappend lKeywords1 {kill}
lappend lKeywords1 {echo}
lappend lKeywords1 {exit}


################################################################################
# Color #2
#  - $lKeywords2  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart2 :: char   :: all words starting with this character matches
#  - $sChars2     :: string :: every char in string matches
#  - $sRegexp2    :: regexp :: regular expression in Tcl style


################################################################################
# Color #3
#  - $lKeywords3  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart3 :: char   :: all words starting with this character matches
#  - $sChars3     :: string :: every char in string matches
#  - $sRegexp3    :: regexp :: regular expression in Tcl style


################################################################################
# Color #4
#  - $lKeywords4  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart4 :: char   :: all words starting with this character matches
#  - $sChars4     :: string :: every char in string matches
#  - $sRegexp4    :: regexp :: regular expression in Tcl style
lappend lKeywords4 {until}
lappend lKeywords4 {while}
lappend lKeywords4 {for}
lappend lKeywords4 {do}
lappend lKeywords4 {done}
lappend lKeywords4 {in}
lappend lKeywords4 {if}
lappend lKeywords4 {then}
lappend lKeywords4 {elif}
lappend lKeywords4 {else}
lappend lKeywords4 {fi}
lappend lKeywords4 {case}
lappend lKeywords4 {esac}


################################################################################
# Color #5
#  - $lKeywords5  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart5 :: char   :: all words starting with this character matches
#  - $sChars5     :: string :: every char in string matches
#  - $sRegexp5    :: regexp :: regular expression in Tcl style


################################################################################
# Color #6
#  - $lKeywords6  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart6 :: char   :: all words starting with this character matches
#  - $sChars6     :: string :: every char in string matches
#  - $sRegexp6    :: regexp :: regular expression in Tcl style
lappend lKeywords6 {==}
lappend lKeywords6 {=}
lappend lKeywords6 {!=}
lappend lKeywords6 {<=}
lappend lKeywords6 {>}
lappend lKeywords6 {<}
lappend lKeywords6 {>=}
lappend lKeywords6 {||}
lappend lKeywords6 {|}


################################################################################
# finished - now add your syntax
syntax_add
################################################################################


################################################################################
# FILE: tcltk/syntax/ini.tcl

################################################################################
# Syntax Declaration
syntax_create "INI"
################################################################################


################################################################################
# file extensions
lappend lExtensions {.ini}


################################################################################
# characters which can be auto-closed
# lappend lAutoClose "\{"
lappend lAutoClose {[}
# lappend lAutoClose {(}
lappend lAutoClose {"}
# lappend lAutoClose {'}
# lappend lAutoClose {<}


################################################################################
# comments (tcl regexp)
# Note: es gibt auch die Variante mit einem Semikolon...
set sRegexpComment {#[^\n\r]*}
set bCStyleComment 0


################################################################################
# character for variables
# set sCharStartVar {$}


################################################################################
# bracket characters
set sCharsBrackets {[]}


################################################################################
# functions (optionally add help text with "|")
# lappend lKeywordsFunctions {function}


################################################################################
# Color #1
#  - $lKeywords1  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart1 :: char   :: all words starting with this character matches
#  - $sChars1     :: string :: every char in string matches
#  - $sRegexp1    :: regexp :: regular expression in Tcl style
set sRegexp1 {\[[^?]*\]}


################################################################################
# Color #2
#  - $lKeywords2  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart2 :: char   :: all words starting with this character matches
#  - $sChars2     :: string :: every char in string matches
#  - $sRegexp2    :: regexp :: regular expression in Tcl style


################################################################################
# Color #3
#  - $lKeywords3  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart3 :: char   :: all words starting with this character matches
#  - $sChars3     :: string :: every char in string matches
#  - $sRegexp3    :: regexp :: regular expression in Tcl style
set sRegexp3 {[^?]*=}


################################################################################
# Color #4
#  - $lKeywords4  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart4 :: char   :: all words starting with this character matches
#  - $sChars4     :: string :: every char in string matches
#  - $sRegexp4    :: regexp :: regular expression in Tcl style
set sRegexp4 {=[^?]*}


################################################################################
# Color #5
#  - $lKeywords5  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart5 :: char   :: all words starting with this character matches
#  - $sChars5     :: string :: every char in string matches
#  - $sRegexp5    :: regexp :: regular expression in Tcl style


################################################################################
# Color #6
#  - $lKeywords6  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart6 :: char   :: all words starting with this character matches
#  - $sChars6     :: string :: every char in string matches
#  - $sRegexp6    :: regexp :: regular expression in Tcl style
set sChars6 {=}


################################################################################
# finished - now add your syntax
syntax_add
################################################################################


################################################################################
# FILE: tcltk/syntax/xml.tcl

################################################################################
# Syntax Declaration
syntax_create "XML"
#
# note: heavy usage of regular expressions is expensive
#       finding fast regexp is not easy...
#
################################################################################


################################################################################
# file extensions
lappend lExtensions {.xml}


################################################################################
# characters which can be auto-closed
# lappend lAutoClose "\{"
# lappend lAutoClose {[}
# lappend lAutoClose {(}
lappend lAutoClose {"}
# lappend lAutoClose {'}
lappend lAutoClose {<}


################################################################################
# comments (tcl regexp)
set sRegexpComment {<!--[^?>].*?-->}
set bCStyleComment 0


################################################################################
# character for variables


################################################################################
# bracket characters


################################################################################
# functions (optionally add help text with "|")


################################################################################
# Color #1
#  - $lKeywords1  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart1 :: char   :: all words starting with this character matches
#  - $sChars1     :: string :: every char in string matches
#  - $sRegexp1    :: regexp :: regular expression in Tcl style



################################################################################
# Color #2
#  - $lKeywords2  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart2 :: char   :: all words starting with this character matches
#  - $sChars2     :: string :: every char in string matches
#  - $sRegexp2    :: regexp :: regular expression in Tcl style
# Entities
set sRegexp2 {&[a-zA-Z0-9]*;}


################################################################################
# Color #3
#  - $lKeywords3  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart3 :: char   :: all words starting with this character matches
#  - $sChars3     :: string :: every char in string matches
#  - $sRegexp3    :: regexp :: regular expression in Tcl style
# Tags
set sRegexp3 {<[^?>].*?>}


################################################################################
# Color #4
#  - $lKeywords4  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart4 :: char   :: all words starting with this character matches
#  - $sChars4     :: string :: every char in string matches
#  - $sRegexp4    :: regexp :: regular expression in Tcl style
# Params
set sRegexp4 {[a-zA-Z0-9-]*="[^"]*"}


################################################################################
# Color #5
#  - $lKeywords5  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart5 :: char   :: all words starting with this character matches
#  - $sChars5     :: string :: every char in string matches
#  - $sRegexp5    :: regexp :: regular expression in Tcl style


################################################################################
# Color #6
#  - $lKeywords6  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart6 :: char   :: all words starting with this character matches
#  - $sChars6     :: string :: every char in string matches
#  - $sRegexp6    :: regexp :: regular expression in Tcl style
# Values
set sRegexp6 {"[^"]*"}


################################################################################
# finished - now add your syntax
syntax_add
################################################################################


################################################################################
# FILE: tcltk/syntax/html.tcl

################################################################################
# Syntax Declaration
syntax_create "HTML"
#
# includes CSS highlighting
#
# note: heavy usage of regular expressions is expensive
#       finding fast regexp is not easy...
#
################################################################################


################################################################################
# file extensions
lappend lExtensions {.html}
lappend lExtensions {.htm}
lappend lExtensions {.shtml}
lappend lExtensions {.stm}
lappend lExtensions {.css}


################################################################################
# characters which can be auto-closed
# lappend lAutoClose "\{"
# lappend lAutoClose {[}
# lappend lAutoClose {(}
lappend lAutoClose {"}
# lappend lAutoClose {'}
lappend lAutoClose {<}


################################################################################
# comments (tcl regexp)
set sRegexpComment {<!--[^?>].*?-->}
set bCStyleComment 0


################################################################################
# character for variables


################################################################################
# bracket characters
set sCharsBrackets {()"}


################################################################################
# functions (optionally add help text with "|")


################################################################################
# Color #1
#  - $lKeywords1  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart1 :: char   :: all words starting with this character matches
#  - $sChars1     :: string :: every char in string matches
#  - $sRegexp1    :: regexp :: regular expression in Tcl style
lappend lKeywords1 {!DOCTYPE}
lappend lKeywords1 {a}
lappend lKeywords1 {abbr}
lappend lKeywords1 {acronym}
lappend lKeywords1 {address}
lappend lKeywords1 {applet}
lappend lKeywords1 {area}
lappend lKeywords1 {article}
lappend lKeywords1 {aside}
lappend lKeywords1 {audio}
lappend lKeywords1 {b}
lappend lKeywords1 {base}
lappend lKeywords1 {basefont}
lappend lKeywords1 {bdi}
lappend lKeywords1 {bdo}
lappend lKeywords1 {big}
lappend lKeywords1 {blockquote}
lappend lKeywords1 {body}
lappend lKeywords1 {br}
lappend lKeywords1 {button}
lappend lKeywords1 {canvas}
lappend lKeywords1 {caption}
lappend lKeywords1 {center}
lappend lKeywords1 {cite}
lappend lKeywords1 {code}
lappend lKeywords1 {col}
lappend lKeywords1 {colgroup}
lappend lKeywords1 {datalist}
lappend lKeywords1 {dd}
lappend lKeywords1 {del}
lappend lKeywords1 {details}
lappend lKeywords1 {dfn}
lappend lKeywords1 {dialog}
lappend lKeywords1 {dir}
lappend lKeywords1 {div}
lappend lKeywords1 {dl}
lappend lKeywords1 {dt}
lappend lKeywords1 {em}
lappend lKeywords1 {embed}
lappend lKeywords1 {fieldset}
lappend lKeywords1 {figcaption}
lappend lKeywords1 {figure}
lappend lKeywords1 {font}
lappend lKeywords1 {footer}
lappend lKeywords1 {form}
lappend lKeywords1 {frame}
lappend lKeywords1 {frameset}
lappend lKeywords1 {h1}
lappend lKeywords1 {h2}
lappend lKeywords1 {h3}
lappend lKeywords1 {h4}
lappend lKeywords1 {h5}
lappend lKeywords1 {h6}
lappend lKeywords1 {head}
lappend lKeywords1 {header}
lappend lKeywords1 {hr}
lappend lKeywords1 {html}
lappend lKeywords1 {i}
lappend lKeywords1 {iframe}
lappend lKeywords1 {img}
lappend lKeywords1 {input}
lappend lKeywords1 {ins}
lappend lKeywords1 {kbd}
lappend lKeywords1 {label}
lappend lKeywords1 {legend}
lappend lKeywords1 {li}
lappend lKeywords1 {link}
lappend lKeywords1 {main}
lappend lKeywords1 {map}
lappend lKeywords1 {mark}
lappend lKeywords1 {menu}
lappend lKeywords1 {menuitem}
lappend lKeywords1 {meta}
lappend lKeywords1 {meter}
lappend lKeywords1 {nav}
lappend lKeywords1 {noframes}
lappend lKeywords1 {noscript}
lappend lKeywords1 {object}
lappend lKeywords1 {ol}
lappend lKeywords1 {optgroup}
lappend lKeywords1 {option}
lappend lKeywords1 {p}
lappend lKeywords1 {param}
lappend lKeywords1 {picture}
lappend lKeywords1 {pre}
lappend lKeywords1 {progress}
lappend lKeywords1 {q}
lappend lKeywords1 {rp}
lappend lKeywords1 {rt}
lappend lKeywords1 {ruby}
lappend lKeywords1 {s}
lappend lKeywords1 {samp}
lappend lKeywords1 {script}
lappend lKeywords1 {section}
lappend lKeywords1 {select}
lappend lKeywords1 {small}
lappend lKeywords1 {source}
lappend lKeywords1 {span}
lappend lKeywords1 {strike}
lappend lKeywords1 {strong}
lappend lKeywords1 {style}
lappend lKeywords1 {sub}
lappend lKeywords1 {summary}
lappend lKeywords1 {sup}
lappend lKeywords1 {table}
lappend lKeywords1 {tbody}
lappend lKeywords1 {td}
lappend lKeywords1 {template}
lappend lKeywords1 {textarea}
lappend lKeywords1 {tfoot}
lappend lKeywords1 {th}
lappend lKeywords1 {thead}
lappend lKeywords1 {time}
lappend lKeywords1 {title}
lappend lKeywords1 {tr}
lappend lKeywords1 {track}
lappend lKeywords1 {tt}
lappend lKeywords1 {u}
lappend lKeywords1 {ul}
lappend lKeywords1 {var}
lappend lKeywords1 {video}
lappend lKeywords1 {wbr}


################################################################################
# Color #2
#  - $lKeywords2  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart2 :: char   :: all words starting with this character matches
#  - $sChars2     :: string :: every char in string matches
#  - $sRegexp2    :: regexp :: regular expression in Tcl style
# Entities
set sRegexp2 {&[a-zA-Z0-9#]*;}


################################################################################
# Color #3
#  - $lKeywords3  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart3 :: char   :: all words starting with this character matches
#  - $sChars3     :: string :: every char in string matches
#  - $sRegexp3    :: regexp :: regular expression in Tcl style
# HTML Tags
# set sRegexp3 {<[^?>].*?>}
set sRegexp3 {<[^?>]*>}


################################################################################
# Color #4
#  - $lKeywords4  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart4 :: char   :: all words starting with this character matches
#  - $sChars4     :: string :: every char in string matches
#  - $sRegexp4    :: regexp :: regular expression in Tcl style
# Params
# set sRegexp4 {[a-zA-Z0-9-]*="[^"]*"}
set sRegexp4 {[a-zA-Z0-9-]*="}


################################################################################
# Color #5
#  - $lKeywords5  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart5 :: char   :: all words starting with this character matches
#  - $sChars5     :: string :: every char in string matches
#  - $sRegexp5    :: regexp :: regular expression in Tcl style
lappend lKeywords5 {align-content:}
lappend lKeywords5 {align-items:}
lappend lKeywords5 {align-self:}
lappend lKeywords5 {all:}
lappend lKeywords5 {animation:}
lappend lKeywords5 {animation-delay:}
lappend lKeywords5 {animation-direction:}
lappend lKeywords5 {animation-duration:}
lappend lKeywords5 {animation-fill-mode:}
lappend lKeywords5 {animation-iteration-count:}
lappend lKeywords5 {animation-name:}
lappend lKeywords5 {animation-play-state:}
lappend lKeywords5 {animation-timing-function:}
lappend lKeywords5 {backface-visibility:}
lappend lKeywords5 {background:}
lappend lKeywords5 {background-attachment:}
lappend lKeywords5 {background-blend-mode:}
lappend lKeywords5 {background-clip:}
lappend lKeywords5 {background-color:}
lappend lKeywords5 {background-image:}
lappend lKeywords5 {background-origin:}
lappend lKeywords5 {background-position:}
lappend lKeywords5 {background-repeat:}
lappend lKeywords5 {background-size:}
lappend lKeywords5 {border:}
lappend lKeywords5 {border-bottom:}
lappend lKeywords5 {border-bottom-color:}
lappend lKeywords5 {border-bottom-left-radius:}
lappend lKeywords5 {border-bottom-right-radius:}
lappend lKeywords5 {border-bottom-style:}
lappend lKeywords5 {border-bottom-width:}
lappend lKeywords5 {border-collapse:}
lappend lKeywords5 {border-color:}
lappend lKeywords5 {border-image:}
lappend lKeywords5 {border-image-outset:}
lappend lKeywords5 {border-image-repeat:}
lappend lKeywords5 {border-image-slice:}
lappend lKeywords5 {border-image-source:}
lappend lKeywords5 {border-image-width:}
lappend lKeywords5 {border-left:}
lappend lKeywords5 {border-left-color:}
lappend lKeywords5 {border-left-style:}
lappend lKeywords5 {border-left-width:}
lappend lKeywords5 {border-radius:}
lappend lKeywords5 {border-right:}
lappend lKeywords5 {border-right-color:}
lappend lKeywords5 {border-right-style:}
lappend lKeywords5 {border-right-width:}
lappend lKeywords5 {border-spacing:}
lappend lKeywords5 {border-style:}
lappend lKeywords5 {border-top:}
lappend lKeywords5 {border-top-color:}
lappend lKeywords5 {border-top-left-radius:}
lappend lKeywords5 {border-top-right-radius:}
lappend lKeywords5 {border-top-style:}
lappend lKeywords5 {border-top-width:}
lappend lKeywords5 {border-width:}
lappend lKeywords5 {bottom:}
lappend lKeywords5 {box-decoration-break:}
lappend lKeywords5 {box-shadow:}
lappend lKeywords5 {box-sizing:}
lappend lKeywords5 {break-after:}
lappend lKeywords5 {break-before:}
lappend lKeywords5 {break-inside:}
lappend lKeywords5 {caption-side:}
lappend lKeywords5 {caret-color:}
lappend lKeywords5 {@charset:}
lappend lKeywords5 {clear:}
lappend lKeywords5 {clip:}
lappend lKeywords5 {color:}
lappend lKeywords5 {column-count:}
lappend lKeywords5 {column-fill:}
lappend lKeywords5 {column-gap:}
lappend lKeywords5 {column-rule:}
lappend lKeywords5 {column-rule-color:}
lappend lKeywords5 {column-rule-style:}
lappend lKeywords5 {column-rule-width:}
lappend lKeywords5 {column-span:}
lappend lKeywords5 {column-width:}
lappend lKeywords5 {columns:}
lappend lKeywords5 {content:}
lappend lKeywords5 {counter-increment:}
lappend lKeywords5 {counter-reset:}
lappend lKeywords5 {cursor:}
lappend lKeywords5 {direction:}
lappend lKeywords5 {display:}
lappend lKeywords5 {empty-cells:}
lappend lKeywords5 {filter:}
lappend lKeywords5 {flex:}
lappend lKeywords5 {flex-basis:}
lappend lKeywords5 {flex-direction:}
lappend lKeywords5 {flex-flow:}
lappend lKeywords5 {flex-grow:}
lappend lKeywords5 {flex-shrink:}
lappend lKeywords5 {flex-wrap:}
lappend lKeywords5 {float:}
lappend lKeywords5 {font:}
lappend lKeywords5 {@font-face:}
lappend lKeywords5 {font-family:}
lappend lKeywords5 {font-feature-settings:}
lappend lKeywords5 {@font-feature-values:}
lappend lKeywords5 {font-kerning:}
lappend lKeywords5 {font-language-override:}
lappend lKeywords5 {font-size:}
lappend lKeywords5 {font-size-adjust:}
lappend lKeywords5 {font-stretch:}
lappend lKeywords5 {font-style:}
lappend lKeywords5 {font-synthesis:}
lappend lKeywords5 {font-variant:}
lappend lKeywords5 {font-variant-alternates:}
lappend lKeywords5 {font-variant-caps:}
lappend lKeywords5 {font-variant-east-asian:}
lappend lKeywords5 {font-variant-ligatures:}
lappend lKeywords5 {font-variant-numeric:}
lappend lKeywords5 {font-variant-position:}
lappend lKeywords5 {font-weight:}
lappend lKeywords5 {grid:}
lappend lKeywords5 {grid-area:}
lappend lKeywords5 {grid-auto-columns:}
lappend lKeywords5 {grid-auto-flow:}
lappend lKeywords5 {grid-auto-rows:}
lappend lKeywords5 {grid-column:}
lappend lKeywords5 {grid-column-end:}
lappend lKeywords5 {grid-column-gap:}
lappend lKeywords5 {grid-column-start:}
lappend lKeywords5 {grid-gap:}
lappend lKeywords5 {grid-row:}
lappend lKeywords5 {grid-row-end:}
lappend lKeywords5 {grid-row-gap:}
lappend lKeywords5 {grid-row-start:}
lappend lKeywords5 {grid-template:}
lappend lKeywords5 {grid-template-areas:}
lappend lKeywords5 {grid-template-columns:}
lappend lKeywords5 {grid-template-rows:}
lappend lKeywords5 {hanging-punctuation:}
lappend lKeywords5 {height:}
lappend lKeywords5 {hyphens:}
lappend lKeywords5 {image-orientation:}
lappend lKeywords5 {image-rendering:}
lappend lKeywords5 {image-resolution:}
lappend lKeywords5 {@import:}
lappend lKeywords5 {justify-content:}
lappend lKeywords5 {@keyframes:}
lappend lKeywords5 {left:}
lappend lKeywords5 {letter-spacing:}
lappend lKeywords5 {line-break:}
lappend lKeywords5 {line-height:}
lappend lKeywords5 {list-style:}
lappend lKeywords5 {list-style-image:}
lappend lKeywords5 {list-style-position:}
lappend lKeywords5 {list-style-type:}
lappend lKeywords5 {margin:}
lappend lKeywords5 {margin-bottom:}
lappend lKeywords5 {margin-left:}
lappend lKeywords5 {margin-right:}
lappend lKeywords5 {margin-top:}
lappend lKeywords5 {max-height:}
lappend lKeywords5 {max-width:}
lappend lKeywords5 {@media:}
lappend lKeywords5 {min-height:}
lappend lKeywords5 {min-width:}
lappend lKeywords5 {object-fit:}
lappend lKeywords5 {object-position:}
lappend lKeywords5 {opacity:}
lappend lKeywords5 {order:}
lappend lKeywords5 {orphans:}
lappend lKeywords5 {outline:}
lappend lKeywords5 {outline-color:}
lappend lKeywords5 {outline-offset:}
lappend lKeywords5 {outline-style:}
lappend lKeywords5 {outline-width:}
lappend lKeywords5 {overflow:}
lappend lKeywords5 {overflow-wrap:}
lappend lKeywords5 {overflow-x:}
lappend lKeywords5 {overflow-y:}
lappend lKeywords5 {padding:}
lappend lKeywords5 {padding-bottom:}
lappend lKeywords5 {padding-left:}
lappend lKeywords5 {padding-right:}
lappend lKeywords5 {padding-top:}
lappend lKeywords5 {page-break-after:}
lappend lKeywords5 {page-break-before:}
lappend lKeywords5 {page-break-inside:}
lappend lKeywords5 {perspective:}
lappend lKeywords5 {perspective-origin:}
lappend lKeywords5 {position:}
lappend lKeywords5 {quotes:}
lappend lKeywords5 {resize:}
lappend lKeywords5 {right:}
lappend lKeywords5 {tab-size:}
lappend lKeywords5 {table-layout:}
lappend lKeywords5 {text-align:}
lappend lKeywords5 {text-align-last:}
lappend lKeywords5 {text-combine-upright:}
lappend lKeywords5 {text-decoration:}
lappend lKeywords5 {text-decoration-color:}
lappend lKeywords5 {text-decoration-line:}
lappend lKeywords5 {text-decoration-style:}
lappend lKeywords5 {text-indent:}
lappend lKeywords5 {text-justify:}
lappend lKeywords5 {text-orientation:}
lappend lKeywords5 {text-overflow:}
lappend lKeywords5 {text-shadow:}
lappend lKeywords5 {text-transform:}
lappend lKeywords5 {text-underline-position:}
lappend lKeywords5 {top:}
lappend lKeywords5 {transform:}
lappend lKeywords5 {transform-origin:}
lappend lKeywords5 {transform-style:}
lappend lKeywords5 {transition:}
lappend lKeywords5 {transition-delay:}
lappend lKeywords5 {transition-duration:}
lappend lKeywords5 {transition-property:}
lappend lKeywords5 {transition-timing-function:}
lappend lKeywords5 {unicode-bidi:}
lappend lKeywords5 {user-select:}
lappend lKeywords5 {vertical-align:}
lappend lKeywords5 {visibility:}
lappend lKeywords5 {white-space:}
lappend lKeywords5 {widows:}
lappend lKeywords5 {width:}
lappend lKeywords5 {word-break:}
lappend lKeywords5 {word-spacing:}
lappend lKeywords5 {word-wrap:}
lappend lKeywords5 {writing-mode:}
lappend lKeywords5 {z-index:}


################################################################################
# Color #6
#  - $lKeywords6  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart6 :: char   :: all words starting with this character matches
#  - $sChars6     :: string :: every char in string matches
#  - $sRegexp6    :: regexp :: regular expression in Tcl style
# Values
set sRegexp6 {"[^?]*"}


################################################################################
# finished - now add your syntax
syntax_add
################################################################################


################################################################################
# FILE: tcltk/syntax/javascript.tcl

################################################################################
# Syntax Declaration
syntax_create "JavaScript"
#
# 20180120 jmos: keywords are complete, but: no syntax help so far...
#
################################################################################


################################################################################
# file extensions
lappend lExtensions {.jsf}
lappend lExtensions {.js}


################################################################################
# characters which can be auto-closed
lappend lAutoClose "\{"
lappend lAutoClose {[}
lappend lAutoClose {(}
lappend lAutoClose {"}
lappend lAutoClose {'}
lappend lAutoClose {<}


################################################################################
# comments (tcl regexp)
set sRegexpComment {//[^\n\r]*}
set bCStyleComment 0


################################################################################
# character for variables
set sCharStartVar {$}


################################################################################
# bracket characters
set sCharsBrackets {[]{}()}

#async
#block
#class const
#debugger default delete do
#export extends
#finally from
#import in instanceof
#super
#this throw try typeof
#with
#yield
#enum implements interface let package private protected public static await
#abstract boolean byte char double final float goto int long native short
#synchronized throws transient volatile


################################################################################
# functions (optionally add help text with "|")
lappend lKeywordsFunctions {function}


################################################################################
# Color #1
#  - $lKeywords1  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart1 :: char   :: all words starting with this character matches
#  - $sChars1     :: string :: every char in string matches
#  - $sRegexp1    :: regexp :: regular expression in Tcl style
lappend lKeywords1 {var}
lappend lKeywords1 {new}
lappend lKeywords1 {constructor}
lappend lKeywords1 {prototype}
lappend lKeywords1 {MAX_VALUE}
lappend lKeywords1 {MIN_VALUE}
lappend lKeywords1 {NEGATIVE_INFINITY}
lappend lKeywords1 {POSITIVE_INFINITY}
lappend lKeywords1 {global}
lappend lKeywords1 {ignoreCase}
lappend lKeywords1 {lastIndex}
lappend lKeywords1 {multiline}
lappend lKeywords1 {source}


################################################################################
# Color #2
#  - $lKeywords2  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart2 :: char   :: all words starting with this character matches
#  - $sChars2     :: string :: every char in string matches
#  - $sRegexp2    :: regexp :: regular expression in Tcl style
lappend lKeywords2 {charAt}
lappend lKeywords2 {charCodeAt}
lappend lKeywords2 {concat}
lappend lKeywords2 {endsWith}
lappend lKeywords2 {fromCharCode}
lappend lKeywords2 {includes}
lappend lKeywords2 {indexOff}
lappend lKeywords2 {lastIndexOff}
lappend lKeywords2 {localeCompare}
lappend lKeywords2 {match}
lappend lKeywords2 {repeat}
lappend lKeywords2 {replace}
lappend lKeywords2 {search}
lappend lKeywords2 {slice}
lappend lKeywords2 {split}
lappend lKeywords2 {startsWith}
lappend lKeywords2 {substr}
lappend lKeywords2 {substring}
lappend lKeywords2 {toLocaleLowerCase}
lappend lKeywords2 {toLocaleUpperCase}
lappend lKeywords2 {toLowerCase}
lappend lKeywords2 {toUpperCase}
lappend lKeywords2 {toString}
lappend lKeywords2 {trim}
lappend lKeywords2 {valueOff}
lappend lKeywords2 {isFinite}
lappend lKeywords2 {isInteger}
lappend lKeywords2 {isNaN}
lappend lKeywords2 {isSaveInteger}
lappend lKeywords2 {toExponential}
lappend lKeywords2 {toFixed}
lappend lKeywords2 {toPrecision}
lappend lKeywords2 {toString}
lappend lKeywords2 {abs}
lappend lKeywords2 {acos}
lappend lKeywords2 {asin}
lappend lKeywords2 {atan}
lappend lKeywords2 {atan2}
lappend lKeywords2 {ceil}
lappend lKeywords2 {cos}
lappend lKeywords2 {exp}
lappend lKeywords2 {floor}
lappend lKeywords2 {log}
lappend lKeywords2 {max}
lappend lKeywords2 {min}
lappend lKeywords2 {pow}
lappend lKeywords2 {random}
lappend lKeywords2 {round}
lappend lKeywords2 {sin}
lappend lKeywords2 {sqrt}
lappend lKeywords2 {tan}
lappend lKeywords2 {getDate}
lappend lKeywords2 {getDay}
lappend lKeywords2 {getFullYear}
lappend lKeywords2 {getHours}
lappend lKeywords2 {getMilliseconds}
lappend lKeywords2 {getMinutes}
lappend lKeywords2 {getMonth}
lappend lKeywords2 {getSeconds}
lappend lKeywords2 {getTime}
lappend lKeywords2 {getTimezoneOffset}
lappend lKeywords2 {getUTCDate}
lappend lKeywords2 {getUTCDay}
lappend lKeywords2 {getUTCFullYear}
lappend lKeywords2 {getUTCHours}
lappend lKeywords2 {getUTCMilliseconds}
lappend lKeywords2 {getUTCMinutes}
lappend lKeywords2 {getUTCMonth}
lappend lKeywords2 {getUTCSeconds}
lappend lKeywords2 {getYear}
lappend lKeywords2 {now}
lappend lKeywords2 {parse}
lappend lKeywords2 {setDate}
lappend lKeywords2 {setFullYear}
lappend lKeywords2 {setHours}
lappend lKeywords2 {setMilliseconds}
lappend lKeywords2 {setMinutes}
lappend lKeywords2 {setMonth}
lappend lKeywords2 {setSeconds}
lappend lKeywords2 {setTime}
lappend lKeywords2 {setUTCDate}
lappend lKeywords2 {setUTCFullYear}
lappend lKeywords2 {setUTCHours}
lappend lKeywords2 {setUTCMilliseconds}
lappend lKeywords2 {setUTCMinutes}
lappend lKeywords2 {setUTCMonth}
lappend lKeywords2 {setUTCSeconds}
lappend lKeywords2 {setYear}
lappend lKeywords2 {toDateString}
lappend lKeywords2 {toGMTString}
lappend lKeywords2 {toISOString}
lappend lKeywords2 {toJSON}
lappend lKeywords2 {toLocaleDateString}
lappend lKeywords2 {toLocaleTimeString}
lappend lKeywords2 {toLocaleString}
lappend lKeywords2 {toString}
lappend lKeywords2 {toTimeString}
lappend lKeywords2 {toUTCString}
lappend lKeywords2 {UTC}
lappend lKeywords2 {valueOf}
lappend lKeywords2 {copyWithin}
lappend lKeywords2 {every}
lappend lKeywords2 {fill}
lappend lKeywords2 {filter}
lappend lKeywords2 {find}
lappend lKeywords2 {findIndex}
lappend lKeywords2 {forEach}
lappend lKeywords2 {indexOf}
lappend lKeywords2 {isArray}
lappend lKeywords2 {join}
lappend lKeywords2 {lastIndexOf}
lappend lKeywords2 {map}
lappend lKeywords2 {pop}
lappend lKeywords2 {push}
lappend lKeywords2 {reduce}
lappend lKeywords2 {reduceHeight}
lappend lKeywords2 {reverse}
lappend lKeywords2 {shift}
lappend lKeywords2 {some}
lappend lKeywords2 {sort}
lappend lKeywords2 {unShift}
lappend lKeywords2 {name}
lappend lKeywords2 {message}
lappend lKeywords2 {compile}
lappend lKeywords2 {exec}
lappend lKeywords2 {test}
lappend lKeywords2 {decodeURI}
lappend lKeywords2 {decodeURIComponent}
lappend lKeywords2 {encodeURI}
lappend lKeywords2 {encodeURIComponent}
lappend lKeywords2 {escape}
lappend lKeywords2 {eval}
lappend lKeywords2 {number}
lappend lKeywords2 {parseFloat}
lappend lKeywords2 {parseInt}
lappend lKeywords2 {String}
lappend lKeywords2 {unescape}
lappend lKeywords2 {anchor}
lappend lKeywords2 {big}
lappend lKeywords2 {blink}
lappend lKeywords2 {bold}
lappend lKeywords2 {fixed}
lappend lKeywords2 {fontcolor}
lappend lKeywords2 {fontsize}
lappend lKeywords2 {italics}
lappend lKeywords2 {link}
lappend lKeywords2 {small}
lappend lKeywords2 {strike}
lappend lKeywords2 {sub}
lappend lKeywords2 {sup}


################################################################################
# Color #3
#  - $lKeywords3  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart3 :: char   :: all words starting with this character matches
#  - $sChars3     :: string :: every char in string matches
#  - $sRegexp3    :: regexp :: regular expression in Tcl style
lappend lKeywords3 {closed}
lappend lKeywords3 {defaultStatus}
lappend lKeywords3 {document}
lappend lKeywords3 {frameElement}
lappend lKeywords3 {frames}
lappend lKeywords3 {history}
lappend lKeywords3 {innerHeight}
lappend lKeywords3 {innerWidth}
lappend lKeywords3 {length}
lappend lKeywords3 {localStorage}
lappend lKeywords3 {location}
lappend lKeywords3 {navigator}
lappend lKeywords3 {opener}
lappend lKeywords3 {outerHeight}
lappend lKeywords3 {outerWidth}
lappend lKeywords3 {pageXOffset}
lappend lKeywords3 {pageYOffset}
lappend lKeywords3 {parent}
lappend lKeywords3 {screen}
lappend lKeywords3 {screenLeft}
lappend lKeywords3 {screenTop}
lappend lKeywords3 {screenX}
lappend lKeywords3 {screenY}
lappend lKeywords3 {sessionStorage}
lappend lKeywords3 {scrollX}
lappend lKeywords3 {scrollY}
lappend lKeywords3 {self}
lappend lKeywords3 {status}
lappend lKeywords3 {top}
lappend lKeywords3 {alert}
lappend lKeywords3 {atop}
lappend lKeywords3 {blur}
lappend lKeywords3 {btoa}
lappend lKeywords3 {clearInterval}
lappend lKeywords3 {clearTimeout}
lappend lKeywords3 {close}
lappend lKeywords3 {confirm}
lappend lKeywords3 {focus}
lappend lKeywords3 {getComputedStyle}
lappend lKeywords3 {getSelection}
lappend lKeywords3 {matchMedia}
lappend lKeywords3 {moveBy}
lappend lKeywords3 {moveTo}
lappend lKeywords3 {open}
lappend lKeywords3 {print}
lappend lKeywords3 {prompt}
lappend lKeywords3 {resizeBy}
lappend lKeywords3 {resizeTo}
lappend lKeywords3 {scroll}
lappend lKeywords3 {scrollBy}
lappend lKeywords3 {scrollTo}
lappend lKeywords3 {setInterval}
lappend lKeywords3 {setTimeout}
lappend lKeywords3 {stop}
lappend lKeywords3 {appCodeName}
lappend lKeywords3 {appName}
lappend lKeywords3 {appVersion}
lappend lKeywords3 {cookieEnabled}
lappend lKeywords3 {geolocation}
lappend lKeywords3 {language}
lappend lKeywords3 {onLine}
lappend lKeywords3 {platform}
lappend lKeywords3 {product}
lappend lKeywords3 {userAgent}
lappend lKeywords3 {javaEnabled}
lappend lKeywords3 {availHeight}
lappend lKeywords3 {availWidth}
lappend lKeywords3 {colorDepth}
lappend lKeywords3 {height}
lappend lKeywords3 {pixelDepth}
lappend lKeywords3 {width}
lappend lKeywords3 {back}
lappend lKeywords3 {forward}
lappend lKeywords3 {go}
lappend lKeywords3 {hash}
lappend lKeywords3 {host}
lappend lKeywords3 {hostname}
lappend lKeywords3 {href}
lappend lKeywords3 {origin}
lappend lKeywords3 {pathname}
lappend lKeywords3 {port}
lappend lKeywords3 {protocol}
lappend lKeywords3 {assign}
lappend lKeywords3 {reload}


################################################################################
# Color #4
#  - $lKeywords4  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart4 :: char   :: all words starting with this character matches
#  - $sChars4     :: string :: every char in string matches
#  - $sRegexp4    :: regexp :: regular expression in Tcl style
lappend lKeywords4 {break}
lappend lKeywords4 {continue}
lappend lKeywords4 {debugger}
lappend lKeywords4 {do}
lappend lKeywords4 {while}
lappend lKeywords4 {for}
lappend lKeywords4 {in}
lappend lKeywords4 {if}
lappend lKeywords4 {else}
lappend lKeywords4 {then}
lappend lKeywords4 {return}
lappend lKeywords4 {switch}
lappend lKeywords4 {throw}
lappend lKeywords4 {try}
lappend lKeywords4 {catch}
lappend lKeywords4 {finally}


################################################################################
# Color #5
#  - $lKeywords5  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart5 :: char   :: all words starting with this character matches
#  - $sChars5     :: string :: every char in string matches
#  - $sRegexp5    :: regexp :: regular expression in Tcl style
lappend lKeywords5 {activeElement}
lappend lKeywords5 {addEventListener}
lappend lKeywords5 {adoptNode}
lappend lKeywords5 {anchors}
lappend lKeywords5 {applets}
lappend lKeywords5 {baseURI}
lappend lKeywords5 {body}
lappend lKeywords5 {cookie}
lappend lKeywords5 {charset}
lappend lKeywords5 {characterSet}
lappend lKeywords5 {createAttribute}
lappend lKeywords5 {createComment}
lappend lKeywords5 {createDocumentFragment}
lappend lKeywords5 {createElement}
lappend lKeywords5 {createTextNode}
lappend lKeywords5 {doctype}
lappend lKeywords5 {documentElement}
lappend lKeywords5 {documentMode}
lappend lKeywords5 {documentURI}
lappend lKeywords5 {domain}
lappend lKeywords5 {comConfig}
lappend lKeywords5 {embeds}
lappend lKeywords5 {forms}
lappend lKeywords5 {getElementById}
lappend lKeywords5 {getElementsByClassName}
lappend lKeywords5 {getElementsByName}
lappend lKeywords5 {getElementsByTagName}
lappend lKeywords5 {hasFocus}
lappend lKeywords5 {head}
lappend lKeywords5 {images}
lappend lKeywords5 {implementation}
lappend lKeywords5 {importNode}
lappend lKeywords5 {inputEncoding}
lappend lKeywords5 {lastModified}
lappend lKeywords5 {links}
lappend lKeywords5 {normalize}
lappend lKeywords5 {normalizeDocument}
lappend lKeywords5 {querySelector}
lappend lKeywords5 {querySelectorAll}
lappend lKeywords5 {readyState}
lappend lKeywords5 {referrer}
lappend lKeywords5 {removeEventListener}
lappend lKeywords5 {renameNode}
lappend lKeywords5 {scripts}
lappend lKeywords5 {strictErrorChecking}
lappend lKeywords5 {title}
lappend lKeywords5 {URL}
lappend lKeywords5 {write}
lappend lKeywords5 {writeln}
lappend lKeywords5 {accessKey}
lappend lKeywords5 {appendChild}
lappend lKeywords5 {attributes}
lappend lKeywords5 {element}
lappend lKeywords5 {blur}
lappend lKeywords5 {childElementCount}
lappend lKeywords5 {childNodes}
lappend lKeywords5 {children}
lappend lKeywords5 {classList}
lappend lKeywords5 {className}
lappend lKeywords5 {click}
lappend lKeywords5 {clientHeight}
lappend lKeywords5 {clientLeft}
lappend lKeywords5 {clientTop}
lappend lKeywords5 {clientWidth}
lappend lKeywords5 {cloneNode}
lappend lKeywords5 {compareDocumentPosition}
lappend lKeywords5 {contains}
lappend lKeywords5 {contentEditable}
lappend lKeywords5 {dir}
lappend lKeywords5 {firstChild}
lappend lKeywords5 {firstElementChild}
lappend lKeywords5 {getAttribute}
lappend lKeywords5 {getAttributeNode}
lappend lKeywords5 {getFeature}
lappend lKeywords5 {hasAttribute}
lappend lKeywords5 {hasAttributes}
lappend lKeywords5 {hasChildNodes}
lappend lKeywords5 {id}
lappend lKeywords5 {innerHTML}
lappend lKeywords5 {insertBefore}
lappend lKeywords5 {isContentEditable}
lappend lKeywords5 {isDefaultNamespace}
lappend lKeywords5 {isEqualNode}
lappend lKeywords5 {isSameNode}
lappend lKeywords5 {isSupported}
lappend lKeywords5 {lang}
lappend lKeywords5 {lastChild}
lappend lKeywords5 {lastElementChild}
lappend lKeywords5 {namespaceURI}
lappend lKeywords5 {nextSibling}
lappend lKeywords5 {nextElementSibling}
lappend lKeywords5 {nodeName}
lappend lKeywords5 {nodeType}
lappend lKeywords5 {nodeValue}
lappend lKeywords5 {offsetHeight}
lappend lKeywords5 {offsetWidth}
lappend lKeywords5 {offsetLeft}
lappend lKeywords5 {offsetParent}
lappend lKeywords5 {offsetTop}
lappend lKeywords5 {ownerDocument}
lappend lKeywords5 {parentNode}
lappend lKeywords5 {parentElement}
lappend lKeywords5 {previousSibling}
lappend lKeywords5 {previousElementSibling}
lappend lKeywords5 {querySelector}
lappend lKeywords5 {querySelectorAll}
lappend lKeywords5 {removeAttribute}
lappend lKeywords5 {removeAttributeNode}
lappend lKeywords5 {removeChild}
lappend lKeywords5 {removeEventListener}
lappend lKeywords5 {replaceChild}
lappend lKeywords5 {scrollHeight}
lappend lKeywords5 {scrollIntoView}
lappend lKeywords5 {scrollLeft}
lappend lKeywords5 {scrollTop}
lappend lKeywords5 {scrollWidth}
lappend lKeywords5 {setAttribute}
lappend lKeywords5 {setAttributeNode}
lappend lKeywords5 {style}
lappend lKeywords5 {tabIndex}
lappend lKeywords5 {tagName}
lappend lKeywords5 {textContent}
lappend lKeywords5 {item}
lappend lKeywords5 {isId}
lappend lKeywords5 {specified}
lappend lKeywords5 {getNamedItem}
lappend lKeywords5 {removeNamedItem}
lappend lKeywords5 {setNamedItem}

lappend lKeywords5 {window}
lappend lKeywords5 {submit}
lappend lKeywords5 {keyCode}
lappend lKeywords5 {send}
lappend lKeywords5 {value}
lappend lKeywords5 {http_request}
lappend lKeywords5 {responseText}
lappend lKeywords5 {readyState}
lappend lKeywords5 {onreadystatechange}
lappend lKeywords5 {XMLHttpRequest}
lappend lKeywords5 {overrideMimeType}
lappend lKeywords5 {ActiveXObject}


################################################################################
# Color #6
#  - $lKeywords6  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart6 :: char   :: all words starting with this character matches
#  - $sChars6     :: string :: every char in string matches
#  - $sRegexp6    :: regexp :: regular expression in Tcl style
lappend lKeywords6 {true}
lappend lKeywords6 {false}
lappend lKeywords6 {null}
lappend lKeywords6 {void}
lappend lKeywords6 {NaN}
lappend lKeywords6 {Infinite}
lappend lKeywords6 {undefined}


################################################################################
# finished - now add your syntax
syntax_add
################################################################################


################################################################################
# FILE: tcltk/syntax/perl.tcl

################################################################################
# Syntax Declaration
syntax_create "Perl"
#
# 20180323, jmos: basically implemented without a clue about perl...
#
################################################################################


################################################################################
# file extensions
lappend lExtensions {.pl}
lappend lExtensions {.perl}
lappend lExtensions {.perl5}
lappend lExtensions {.pm}
lappend lExtensions {.cgi}


################################################################################
# characters which can be auto-closed
lappend lAutoClose "\{"
lappend lAutoClose {[}
lappend lAutoClose {(}
lappend lAutoClose {"}
# lappend lAutoClose {'}
# lappend lAutoClose {<}


################################################################################
# comments (tcl regexp)
set sRegexpComment {#[^\n\r]*}
set bCStyleComment 0


################################################################################
# character for variables
set sCharStartVar {$}


################################################################################
# bracket characters
set sCharsBrackets {(){}"[]}


################################################################################
# functions (optionally add help text with "|")
lappend lKeywordsFunctions {sub|sub NAME BLOCK
sub NAME (PROTO) BLOCK
sub NAME : ATTRS BLOCK
sub NAME (PROTO) : ATTRS BLOCK}


################################################################################
# Color #1
#  - $lKeywords1  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart1 :: char   :: all words starting with this character matches
#  - $sChars1     :: string :: every char in string matches
#  - $sRegexp1    :: regexp :: regular expression in Tcl style
lappend lKeywords1 {abs|abs VALUE}
lappend lKeywords1 {accept|accept NEWSOCKET,GENERICSOCKET}
lappend lKeywords1 {alarm|alarm SECONDS}
lappend lKeywords1 {and}
lappend lKeywords1 {atan2|atan2 Y,X}
lappend lKeywords1 {bind|bind SOCKET,NAME}
lappend lKeywords1 {binmode|binmode FILEHANDLE, LAYER
binmode FILEHANDLE}
lappend lKeywords1 {bless|bless REF,CLASSNAME
bless REF}
lappend lKeywords1 {break}
lappend lKeywords1 {caller|caller EXPR}
lappend lKeywords1 {chdir|chdir EXPR
chdir FILEHANDLE
chdir DIRHANDLE}
lappend lKeywords1 {chmod|chmod LIST}
lappend lKeywords1 {chomp|chomp VARIABLE
chomp( LIST )}
lappend lKeywords1 {chop|chop VARIABLE
chop( LIST )}
lappend lKeywords1 {chown|chown LIST}
lappend lKeywords1 {chr|chr NUMBER}
lappend lKeywords1 {chroot|chroot FILENAME}
lappend lKeywords1 {close|close FILEHANDLE}
lappend lKeywords1 {closedir|closedir DIRHANDLE}
lappend lKeywords1 {cmp}
lappend lKeywords1 {connect|connect SOCKET,NAME}
lappend lKeywords1 {cos|cos EXPR}
lappend lKeywords1 {crypt|crypt PLAINTEXT,SALT}
lappend lKeywords1 {dbmclose|dbmclose HASH}
lappend lKeywords1 {dbmopen|dbmopen HASH,DBNAME,MASK}
lappend lKeywords1 {defined|defined EXPR}
lappend lKeywords1 {delete|delete EXPR}
lappend lKeywords1 {die|die LIST}
lappend lKeywords1 {dump|dump LABEL
dump EXPR}
lappend lKeywords1 {endgrent}
lappend lKeywords1 {endhostend}
lappend lKeywords1 {endnetend}
lappend lKeywords1 {endprotoend}
lappend lKeywords1 {endpwent}
lappend lKeywords1 {endservent}
lappend lKeywords1 {eof|eof FILEHANDLE
eof ()}
lappend lKeywords1 {eq}
lappend lKeywords1 {eval|eval EXPR
eval BLOCK}
lappend lKeywords1 {evalbytes|evalbytes EXPR}
lappend lKeywords1 {exec|exec LIST
exec PROGRAM LIST}
lappend lKeywords1 {exists|exists EXPR}
lappend lKeywords1 {exit|exit EXPR}
lappend lKeywords1 {exp|exp EXPR}
lappend lKeywords1 {fc|fc EXPR}
lappend lKeywords1 {fcntl|fcntl FILEHANDLE,FUNCTION,SCALAR}
lappend lKeywords1 {fileno|fileno FILEHANDLE}
lappend lKeywords1 {flock|flock FILEHANDLE,OPERATION}
lappend lKeywords1 {fork}
lappend lKeywords1 {format}
lappend lKeywords1 {formline|formline PICTURE,LIST}
lappend lKeywords1 {ge}
lappend lKeywords1 {getc|getc FILEHANDLE}
lappend lKeywords1 {getgrent}
lappend lKeywords1 {getgrgid|getgrgid GID}
lappend lKeywords1 {getgrnam|getgrnam NAME}
lappend lKeywords1 {gethostbyaddr|gethostbyaddr ADDR,ADDRTYPE}
lappend lKeywords1 {gethostbyname|gethostbyname NAME}
lappend lKeywords1 {gethostent}
lappend lKeywords1 {getlogin}
lappend lKeywords1 {getnetbyaddr|getnetbyaddr ADDR,ADDRTYPE}
lappend lKeywords1 {getnetbyname|getnetbyname NAME}
lappend lKeywords1 {getnetent}
lappend lKeywords1 {getpeername|getpeername SOCKET}
lappend lKeywords1 {getpgrp|getpgrp PID}
lappend lKeywords1 {getppid}
lappend lKeywords1 {getpriority|getpriority WHICH,WHO}
lappend lKeywords1 {getprotobyname|getprotobyname NAME}
lappend lKeywords1 {getprotobynumber|getprotobynumber NUMBER}
lappend lKeywords1 {getprotoent}
lappend lKeywords1 {getpwent}
lappend lKeywords1 {getpwnam|getpwnam NAME}
lappend lKeywords1 {getpwuid|getpwuid UID}
lappend lKeywords1 {getservbyname|getservbyname NAME,PROTO}
lappend lKeywords1 {getservbyport|getservbyport PORT,PROTO}
lappend lKeywords1 {getservent}
lappend lKeywords1 {getsockname|getsockname SOCKET}
lappend lKeywords1 {getsockopt|getsockopt SOCKET,LEVEL,OPTNAME}
lappend lKeywords1 {glob|glob EXPR}
lappend lKeywords1 {gmtime|gmtime EXPR}
lappend lKeywords1 {goto|goto LABEL
goto EXPR
goto &NAME}
lappend lKeywords1 {grep|grep BLOCK LIST
grep EXPR,LIST}
lappend lKeywords1 {gt}
lappend lKeywords1 {hex|hex EXPR}
lappend lKeywords1 {import|import LIST}
lappend lKeywords1 {index|index STR,SUBSTR,POSITION
index STR,SUBSTR}
lappend lKeywords1 {int|int EXPR}
lappend lKeywords1 {ioctl|ioctl FILEHANDLE,FUNCTION,SCALAR}
lappend lKeywords1 {join|join EXPR,LIST}
lappend lKeywords1 {keys|keys HASH
keys ARRAY}
lappend lKeywords1 {kill|kill SIGNAL, LIST
kill SIGNAL}
lappend lKeywords1 {lc|lc EXPR}
lappend lKeywords1 {lcfirst|lcfirst EXPR}
lappend lKeywords1 {le}
lappend lKeywords1 {length|length EXPR}
lappend lKeywords1 {link|link OLDFILE,NEWFILE}
lappend lKeywords1 {listen|listen SOCKET,QUEUESIZE}
lappend lKeywords1 {local|local EXPR}
lappend lKeywords1 {localtime|localtime EXPR}
lappend lKeywords1 {lock|lock THING}
lappend lKeywords1 {log|log EXPR}
lappend lKeywords1 {lstat|lstat FILEHANDLE
lstat EXPR
lstat DIRHANDLE}
lappend lKeywords1 {lt}
lappend lKeywords1 {map|map BLOCK LIST
map EXPR,LIST}
lappend lKeywords1 {mkdir|mkdir FILENAME,MASK
mkdir FILENAME}
lappend lKeywords1 {msgctl|msgctl ID,CMD,ARG}
lappend lKeywords1 {msgget|msgget KEY,FLAGS}
lappend lKeywords1 {msgrcv|msgrcv ID,VAR,SIZE,TYPE,FLAGS}
lappend lKeywords1 {msgsnd|msgsnd ID,MSG,FLAGS}
lappend lKeywords1 {my|my VARLIST
my TYPE VARLIST
my VARLIST : ATTRS
my TYPE VARLIST : ATTRS}
lappend lKeywords1 {ne}
lappend lKeywords1 {no|no MODULE VERSION LIST
no MODULE VERSION
no MODULE LIST
no MODULE
no VERSION}
lappend lKeywords1 {not}
lappend lKeywords1 {oct|oct EXPR}
lappend lKeywords1 {open|open FILEHANDLE,EXPR
open FILEHANDLE,MODE,EXPR
open FILEHANDLE,MODE,EXPR,LIST
open FILEHANDLE,MODE,REFERENCE
open FILEHANDLE}
lappend lKeywords1 {opendir|opendir DIRHANDLE,EXPR}
lappend lKeywords1 {or}
lappend lKeywords1 {ord|ord EXPR}
lappend lKeywords1 {our|our VARLIST
our TYPE VARLIST
our VARLIST : ATTRS
our TYPE VARLIST : ATTRS}
lappend lKeywords1 {pack|pack TEMPLATE,LIST}
lappend lKeywords1 {package|package NAMESPACE
package NAMESPACE VERSION
package NAMESPACE BLOCK
package NAMESPACE VERSION BLOCK}
lappend lKeywords1 {pipe|pipe READHANDLE,WRITEHANDLE}
lappend lKeywords1 {pop|pop ARRAY}
lappend lKeywords1 {pos|pos SCALAR}
lappend lKeywords1 {print|print FILEHANDLE LIST
print FILEHANDLE
print LIST}
lappend lKeywords1 {printf|printf FILEHANDLE FORMAT, LIST
printf FILEHANDLE
printf FORMAT, LIST}
lappend lKeywords1 {prototype|prototype FUNCTION}
lappend lKeywords1 {push|push ARRAY,LIST}
lappend lKeywords1 {q|q/STRING/}
lappend lKeywords1 {qq|qq/STRING/}
lappend lKeywords1 {qr|qr/STRING/}
lappend lKeywords1 {quotemeta|quotemeta EXPR}
lappend lKeywords1 {qw|qw/STRING/}
lappend lKeywords1 {qx|qx/STRING/}
lappend lKeywords1 {rand|rand EXPR}
lappend lKeywords1 {read|read FILEHANDLE,SCALAR,LENGTH,OFFSET
read FILEHANDLE,SCALAR,LENGTH}
lappend lKeywords1 {readdir|readdir DIRHANDLE}
lappend lKeywords1 {readline|readline EXPR}
lappend lKeywords1 {readlink|readlink EXPR}
lappend lKeywords1 {readpipe|readpipe EXPR}
lappend lKeywords1 {recv|recv SOCKET,SCALAR,LENGTH,FLAGS}
lappend lKeywords1 {ref|ref EXPR}
lappend lKeywords1 {rename|rename OLDNAME,NEWNAME}
lappend lKeywords1 {require|require VERSION
require EXPR}
lappend lKeywords1 {reset|reset EXPR}
lappend lKeywords1 {return|return EXPR}
lappend lKeywords1 {reverse|reverse LIST}
lappend lKeywords1 {rewinddir|rewinddir DIRHANDLE}
lappend lKeywords1 {rindex|rindex STR,SUBSTR,POSITION
rindex STR,SUBSTR}
lappend lKeywords1 {rmdir|rmdir FILENAME}
lappend lKeywords1 {say|say FILEHANDLE LIST
say FILEHANDLE
say LIST}
lappend lKeywords1 {scalar|scalar EXPR}
lappend lKeywords1 {seek|seek FILEHANDLE,POSITION,WHENCE}
lappend lKeywords1 {seekdir|seekdir DIRHANDLE,POS}
lappend lKeywords1 {select|select FILEHANDLE}
lappend lKeywords1 {semctl|semctl ID,SEMNUM,CMD,ARG}
lappend lKeywords1 {semget|semget KEY,NSEMS,FLAGS}
lappend lKeywords1 {semop|semop KEY,OPSTRING}
lappend lKeywords1 {send|send SOCKET,MSG,FLAGS,TO
send SOCKET,MSG,FLAGS}
lappend lKeywords1 {setgrent}
lappend lKeywords1 {sethostent|sethostent STAYOPEN}
lappend lKeywords1 {setnetent|setnetent STAYOPEN}
lappend lKeywords1 {setpgrp|setpgrp PID,PGRP}
lappend lKeywords1 {setpriority|setpriority WHICH,WHO,PRIORITY}
lappend lKeywords1 {setprotoent|setprotoent STAYOPEN}
lappend lKeywords1 {setpwent}
lappend lKeywords1 {setservent|setservent STAYOPEN}
lappend lKeywords1 {setsockopt|setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL}
lappend lKeywords1 {shift|shift ARRAY}
lappend lKeywords1 {shmctl|shmctl ID,CMD,ARG}
lappend lKeywords1 {shmget|shmget KEY,SIZE,FLAGS}
lappend lKeywords1 {shmread|shmread ID,VAR,POS,SIZE}
lappend lKeywords1 {shmwrite|shmwrite ID,STRING,POS,SIZE}
lappend lKeywords1 {shutdown|shutdown SOCKET,HOW}
lappend lKeywords1 {sin|sin EXPR}
lappend lKeywords1 {sleep|sleep EXPR}
lappend lKeywords1 {socket|socket SOCKET,DOMAIN,TYPE,PROTOCOL}
lappend lKeywords1 {socketpair|socketpair SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL}
lappend lKeywords1 {sort|sort SUBNAME LIST
sort BLOCK LIST
sort LIST}
lappend lKeywords1 {splice|splice ARRAY,OFFSET,LENGTH,LIST
splice ARRAY,OFFSET,LENGTH
splice ARRAY,OFFSET
splice ARRAY}
lappend lKeywords1 {split|split /PATTERN/,EXPR,LIMIT
split /PATTERN/,EXPR
split /PATTERN/}
lappend lKeywords1 {sprintf|sprintf FORMAT, LIST}
lappend lKeywords1 {sqrt|sqrt EXPR}
lappend lKeywords1 {srand|srand EXPR}
lappend lKeywords1 {stat|stat FILEHANDLE
stat EXPR
stat DIRHANDLE}
lappend lKeywords1 {state|state VARLIST
state TYPE VARLIST
state VARLIST : ATTRS
state TYPE VARLIST : ATTRS}
lappend lKeywords1 {study|study SCALAR}
lappend lKeywords1 {substr|substr EXPR,OFFSET,LENGTH,REPLACEMENT
substr EXPR,OFFSET,LENGTH
substr EXPR,OFFSET}
lappend lKeywords1 {symlink|symlink OLDFILE,NEWFILE}
lappend lKeywords1 {syscall|syscall NUMBER, LIST}
lappend lKeywords1 {sysopen|sysopen FILEHANDLE,FILENAME,MODE
sysopen FILEHANDLE,FILENAME,MODE,PERMS}
lappend lKeywords1 {sysread|sysread FILEHANDLE,SCALAR,LENGTH,OFFSET
sysread FILEHANDLE,SCALAR,LENGTH}
lappend lKeywords1 {sysseek|sysseek FILEHANDLE,POSITION,WHENCE}
lappend lKeywords1 {system|system LIST
system PROGRAM LIST}
lappend lKeywords1 {syswrite|syswrite FILEHANDLE,SCALAR,LENGTH,OFFSET
syswrite FILEHANDLE,SCALAR,LENGTH
syswrite FILEHANDLE,SCALAR}
lappend lKeywords1 {tell|tell FILEHANDLE}
lappend lKeywords1 {telldir|telldir DIRHANDLE}
lappend lKeywords1 {tie|tie VARIABLE,CLASSNAME,LIST}
lappend lKeywords1 {tied|tied VARIABLE}
lappend lKeywords1 {time}
lappend lKeywords1 {times}
lappend lKeywords1 {truncate|truncate FILEHANDLE,LENGTH
truncate EXPR,LENGTH}
lappend lKeywords1 {uc|uc EXPR}
lappend lKeywords1 {ucfirst|ucfirst EXPR}
lappend lKeywords1 {umask|umask EXPR}
lappend lKeywords1 {undef|undef EXPR}
lappend lKeywords1 {unlink|unlink LIST}
lappend lKeywords1 {unpack|unpack TEMPLATE,EXPR}
lappend lKeywords1 {unshift|unshift ARRAY,LIST}
lappend lKeywords1 {untie|untie VARIABLE}
lappend lKeywords1 {use|use Module VERSION LIST
use Module VERSION
use Module LIST
use Module
use VERSION}
lappend lKeywords1 {utime|utime LIST}
lappend lKeywords1 {values|values HASH
values ARRAY}
lappend lKeywords1 {vec|vec EXPR,OFFSET,BITS}
lappend lKeywords1 {wait}
lappend lKeywords1 {waitpid|waitpid PID,FLAGS}
lappend lKeywords1 {wantarray}
lappend lKeywords1 {warn|warn LIST}
lappend lKeywords1 {write|write FILEHANDLE
write EXPR}
lappend lKeywords1 {-X|-X FILEHANDLE
-X EXPR
-X DIRHANDLE}


################################################################################
# Color #2
#  - $lKeywords2  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart2 :: char   :: all words starting with this character matches
#  - $sChars2     :: string :: every char in string matches
#  - $sRegexp2    :: regexp :: regular expression in Tcl style
set sCharStart2 {@}


################################################################################
# Color #3
#  - $lKeywords3  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart3 :: char   :: all words starting with this character matches
#  - $sChars3     :: string :: every char in string matches
#  - $sRegexp3    :: regexp :: regular expression in Tcl style
set sCharStart3 {%}


################################################################################
# Color #4
#  - $lKeywords4  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart4 :: char   :: all words starting with this character matches
#  - $sChars4     :: string :: every char in string matches
#  - $sRegexp4    :: regexp :: regular expression in Tcl style
set sCharStart4 {&}
lappend lKeywords4 {AUTOLOAD}
lappend lKeywords4 {BEGIN}
lappend lKeywords4 {CHECK}
lappend lKeywords4 {DESTROY}
lappend lKeywords4 {__DATA__}
lappend lKeywords4 {END}
lappend lKeywords4 {__END__}
lappend lKeywords4 {__FILE__}
lappend lKeywords4 {INIT}
lappend lKeywords4 {__LINE__}
lappend lKeywords4 {__PACKAGE__}
lappend lKeywords4 {__SUB__}
lappend lKeywords4 {UNITCHECK}


################################################################################
# Color #5
#  - $lKeywords5  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart5 :: char   :: all words starting with this character matches
#  - $sChars5     :: string :: every char in string matches
#  - $sRegexp5    :: regexp :: regular expression in Tcl style
set sCharStart5 {*}
lappend lKeywords5 {continue|continue BLOCK}
lappend lKeywords5 {default}
lappend lKeywords5 {do|do BLOCK
do EXPR}
lappend lKeywords5 {each|each HASH
each ARRAY}
lappend lKeywords5 {else}
lappend lKeywords5 {elseif}
lappend lKeywords5 {elsif}
lappend lKeywords5 {for}
lappend lKeywords5 {foreach}
lappend lKeywords5 {given}
lappend lKeywords5 {if}
lappend lKeywords5 {last|last LABEL
last EXPR}
lappend lKeywords5 {next|next LABEL
next EXPR}
lappend lKeywords5 {redo|redo LABEL
redo EXPR}
lappend lKeywords5 {switch}
lappend lKeywords5 {unless}
lappend lKeywords5 {until}
lappend lKeywords5 {when}
lappend lKeywords5 {while}


################################################################################
# Color #6
#  - $lKeywords6  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart6 :: char   :: all words starting with this character matches
#  - $sChars6     :: string :: every char in string matches
#  - $sRegexp6    :: regexp :: regular expression in Tcl style
lappend lKeywords6 {<}
lappend lKeywords6 {>}
lappend lKeywords6 {<=}
lappend lKeywords6 {>=}
lappend lKeywords6 {lt}
lappend lKeywords6 {gt}
lappend lKeywords6 {le}
lappend lKeywords6 {ge}
lappend lKeywords6 {==}
lappend lKeywords6 {!=}
lappend lKeywords6 {<=>}
lappend lKeywords6 {eq}
lappend lKeywords6 {ne}
lappend lKeywords6 {cmp}
lappend lKeywords6 {~~}
lappend lKeywords6 {!~}
lappend lKeywords6 {&}
lappend lKeywords6 {|}
lappend lKeywords6 {^}
lappend lKeywords6 {&&}
lappend lKeywords6 {||}
lappend lKeywords6 {//}
lappend lKeywords6 {..}
lappend lKeywords6 {:}
lappend lKeywords6 {and}
lappend lKeywords6 {or}
lappend lKeywords6 {not}
lappend lKeywords6 {x}
lappend lKeywords6 {xor}
lappend lKeywords6 {m|m//}
lappend lKeywords6 {s|s///}
lappend lKeywords6 {tr|tr///}
lappend lKeywords6 {y|y///}


################################################################################
# finished - now add your syntax
syntax_add
################################################################################


################################################################################
# FILE: tcltk/syntax/php.tcl

################################################################################
# Syntax Declaration
syntax_create "PHP"
#
# 20180120 jmos: keywords are complete as official PHP reference list
#                but: they don't list some oo-variants...
#
# Todo: add more syntax help... source: http://php.net/manual/en/
#
################################################################################


################################################################################
# file extensions
lappend lExtensions {.php}


################################################################################
# characters which can be auto-closed
lappend lAutoClose "\{"
# lappend lAutoClose {[}
lappend lAutoClose {(}
lappend lAutoClose {"}
lappend lAutoClose {'}
# lappend lAutoClose {<}


################################################################################
# comments (tcl regexp)
# set sRegexpComment {(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/|//[^\n\r]*)}
set sRegexpComment {//[^\n\r]*}
set bCStyleComment 1


################################################################################
# character for variables
set sCharStartVar {$}


################################################################################
# bracket characters
set sCharsBrackets {[](){}"'}


################################################################################
# functions (optionally add help text with "|")
lappend lKeywordsFunctions {function}
# okay, not really, but...
lappend lKeywordsFunctions {new}
lappend lKeywordsFunctions {<?php}
lappend lKeywordsFunctions {?>}


################################################################################
# Color #1
#  - $lKeywords1  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart1 :: char   :: all words starting with this character matches
#  - $sChars1     :: string :: every char in string matches
#  - $sRegexp1    :: regexp :: regular expression in Tcl style
set sRegexp1 {->[a-zA-Z0-9]*}
lappend lKeywords1 {abs|number abs ( mixed $number )}
lappend lKeywords1 {acos|float acos ( float $arg )}
lappend lKeywords1 {acosh|float acosh ( float $arg )}
lappend lKeywords1 {addcslashes|string addcslashes ( string $str , string $charlist )}
lappend lKeywords1 {addslashes|string addslashes ( string $str )}
lappend lKeywords1 {array|array array ([ mixed $... ] )}
lappend lKeywords1 {arsort|bool arsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )}
lappend lKeywords1 {asin|float asin ( float $arg )}
lappend lKeywords1 {asinh|float asinh ( float $arg )}
lappend lKeywords1 {asort|bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] )}
lappend lKeywords1 {assert|bool assert ( mixed $assertion [, string $description ] )
bool assert ( mixed $assertion [, Throwable $exception ] )}
lappend lKeywords1 {assert_options|mixed assert_options ( int $what [, mixed $value ] )}
lappend lKeywords1 {atan|float atan ( float $arg )}
lappend lKeywords1 {atan2|float atan2 ( float $y , float $x )}
lappend lKeywords1 {atanh|float atanh ( float $arg )}
lappend lKeywords1 {base64_decode|string base64_decode ( string $data [, bool $strict = false ] )}
lappend lKeywords1 {base64_encode|string base64_encode ( string $data )}
lappend lKeywords1 {basename|string basename ( string $path [, string $suffix ] )}
lappend lKeywords1 {base_convert|string base_convert ( string $number , int $frombase , int $tobase )}
lappend lKeywords1 {bcadd|string bcadd ( string $left_operand , string $right_operand [, int $scale = 0 ] )}
lappend lKeywords1 {bccomp|int bccomp ( string $left_operand , string $right_operand [, int $scale = 0 ] )}
lappend lKeywords1 {bcdiv|string bcdiv ( string $dividend , string $divisor [, int $scale = 0 ] )}
lappend lKeywords1 {bcmod|string bcmod ( string $dividend , string $modulus )}
lappend lKeywords1 {bcmul|string bcmul ( string $left_operand , string $right_operand [, int $scale = 0 ] )}
lappend lKeywords1 {bcpow|string bcpow ( string $base , string $exponent [, int $scale = 0 ] )}
lappend lKeywords1 {bcpowmod|string bcpowmod ( string $base , string $exponent , string $modulus [, int $scale = 0 ] )}
lappend lKeywords1 {bcscale|bool bcscale ( int $scale )}
lappend lKeywords1 {bcsqrt|string bcsqrt ( string $operand [, int $scale = 0 ] )}
lappend lKeywords1 {bcsub|string bcsub ( string $left_operand , string $right_operand [, int $scale = 0 ] )}
lappend lKeywords1 {bin2hex|string bin2hex ( string $str )}
lappend lKeywords1 {bindec|number bindec ( string $binary_string )}
lappend lKeywords1 {bindtextdomain|string bindtextdomain ( string $domain , string $directory )}
lappend lKeywords1 {bind_textdomain_codeset|string bind_textdomain_codeset ( string $domain , string $codeset )}
lappend lKeywords1 {blenc_encrypt|string blenc_encrypt ( string $plaintext , string $encodedfile [, string $encryption_key ] )}
lappend lKeywords1 {boolval|boolean boolval ( mixed $var )}
lappend lKeywords1 {bson_decode|array bson_decode ( string $bson )}
lappend lKeywords1 {bson_encode|string bson_encode ( mixed $anything )}
lappend lKeywords1 {bzclose|int bzclose ( resource $bz )}
lappend lKeywords1 {bzcompress|mixed bzcompress ( string $source [, int $blocksize = 4 [, int $workfactor = 0 ]] )}
lappend lKeywords1 {bzdecompress|mixed bzdecompress ( string $source [, int $small = 0 ] )}
lappend lKeywords1 {bzerrno|int bzerrno ( resource $bz )}
lappend lKeywords1 {bzerror|array bzerror ( resource $bz )}
lappend lKeywords1 {bzerrstr|string bzerrstr ( resource $bz )}
lappend lKeywords1 {bzflush|bool bzflush ( resource $bz )}
lappend lKeywords1 {bzopen|resource bzopen ( mixed $file , string $mode )}
lappend lKeywords1 {bzread|string bzread ( resource $bz [, int $length = 1024 ] )}
lappend lKeywords1 {bzwrite|int bzwrite ( resource $bz , string $data [, int $length ] )}
lappend lKeywords1 {ceil|float ceil ( float $value )}
lappend lKeywords1 {chdb_create|bool chdb_create ( string $pathname , array $data )}
lappend lKeywords1 {chdir|bool chdir ( string $directory )}
lappend lKeywords1 {checkdate|bool checkdate ( int $month , int $day , int $year )}
lappend lKeywords1 {checkdnsrr|bool checkdnsrr ( string $host [, string $type = "MX" ] )}
lappend lKeywords1 {chgrp|bool chgrp ( string $filename , mixed $group )}
lappend lKeywords1 {chmod|bool chmod ( string $filename , int $mode )}
lappend lKeywords1 {chop|alias of: rtrim()}
lappend lKeywords1 {chown|bool chown ( string $filename , mixed $user )}
lappend lKeywords1 {chr|string chr ( int $ascii )}
lappend lKeywords1 {chroot|bool chroot ( string $directory )}
lappend lKeywords1 {chunk_split|string chunk_split ( string $body [, int $chunklen = 76 [, string $end = "\r\n" ]] )}
lappend lKeywords1 {clearstatcache|void clearstatcache ([ bool $clear_realpath_cache = false [, string $filename ]] )}
lappend lKeywords1 {closedir|void closedir ([ resource $dir_handle ] )}
lappend lKeywords1 {closelog|bool closelog ( void )}
lappend lKeywords1 {compact|array compact ( mixed $varname1 [, mixed $... ] )}
lappend lKeywords1 {connection_aborted|int connection_aborted ( void )}
lappend lKeywords1 {connection_status|int connection_status ( void )}
lappend lKeywords1 {convert_cyr_string|string convert_cyr_string ( string $str , string $from , string $to )}
lappend lKeywords1 {convert_uudecode|string convert_uudecode ( string $data )}
lappend lKeywords1 {convert_uuencode|string convert_uuencode ( string $data )}
lappend lKeywords1 {copy|bool copy ( string $source , string $dest [, resource $context ] )}
lappend lKeywords1 {cos|float cos ( float $arg )}
lappend lKeywords1 {cosh|float cosh ( float $arg )}
lappend lKeywords1 {count|int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] )}
lappend lKeywords1 {count_chars|mixed count_chars ( string $string [, int $mode = 0 ] )}
lappend lKeywords1 {crc32|int crc32 ( string $str )}
lappend lKeywords1 {crypt|string crypt ( string $str [, string $salt ] )}
lappend lKeywords1 {current|mixed current ( array $array )}
lappend lKeywords1 {date|string date ( string $format [, int $timestamp = time() ] )}
lappend lKeywords1 {dcgettext|string dcgettext ( string $domain , string $message , int $category )}
lappend lKeywords1 {dcngettext|string dcngettext ( string $domain , string $msgid1 , string $msgid2 , int $n , int $category )}
lappend lKeywords1 {debug_backtrace|array debug_backtrace ([ int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $limit = 0 ]] )}
lappend lKeywords1 {debug_print_backtrace|void debug_print_backtrace ([ int $options = 0 [, int $limit = 0 ]] )}
lappend lKeywords1 {debug_zval_dump|void debug_zval_dump ( mixed $variable [, mixed $... ] )}
lappend lKeywords1 {decbin|string decbin ( int $number )}
lappend lKeywords1 {dechex|string dechex ( int $number )}
lappend lKeywords1 {decoct|string decoct ( int $number )}
lappend lKeywords1 {define_syslog_variables|void define_syslog_variables ( void )}
lappend lKeywords1 {deflate_add|string deflate_add ( resource $context , string $data [, int $flush_mode = ZLIB_SYNC_FLUSH ] )}
lappend lKeywords1 {deflate_init|resource deflate_init ( int $encoding [, array $options = array() ] )}
lappend lKeywords1 {deg2rad|float deg2rad ( float $number )}
lappend lKeywords1 {dgettext|string dgettext ( string $domain , string $message )}
lappend lKeywords1 {dir|Directory dir ( string $directory [, resource $context ] )}
lappend lKeywords1 {dirname|string dirname ( string $path [, int $levels = 1 ] )}
lappend lKeywords1 {diskfreespace|alias of: disk_free_space()}
lappend lKeywords1 {disk_free_space|float disk_free_space ( string $directory )}
lappend lKeywords1 {disk_total_space|float disk_total_space ( string $directory )}
lappend lKeywords1 {dngettext|string dngettext ( string $domain , string $msgid1 , string $msgid2 , int $n )}
lappend lKeywords1 {dns_check_record|alias of: checkdnsrr()}
lappend lKeywords1 {dns_get_mx|alias of: getmxrr()}
lappend lKeywords1 {dns_get_record|array dns_get_record ( string $hostname [, int $type = DNS_ANY [, array &$authns [, array &$addtl [, bool $raw = false ]]]] )}
lappend lKeywords1 {dom_import_simplexml|DOMElement dom_import_simplexml ( SimpleXMLElement $node )}
lappend lKeywords1 {doubleval|alias of: floatval()}
lappend lKeywords1 {easter_date|int easter_date ([ int $year = date("Y") ] )}
lappend lKeywords1 {easter_days|int easter_days ([ int $year = date("Y") [, int $method = CAL_EASTER_DEFAULT ]] )}
lappend lKeywords1 {end|mixed end ( array &$array )}
lappend lKeywords1 {error_clear_last|void error_clear_last ( void )}
lappend lKeywords1 {error_get_last|array error_get_last ( void )}
lappend lKeywords1 {error_log|bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )}
lappend lKeywords1 {error_reporting|int error_reporting ([ int $level ] )}
lappend lKeywords1 {escapeshellarg|string escapeshellarg ( string $arg )}
lappend lKeywords1 {escapeshellcmd|string escapeshellcmd ( string $command )}
lappend lKeywords1 {eval|mixed eval ( string $code )}
lappend lKeywords1 {exec|string exec ( string $command [, array &$output [, int &$return_var ]] )}
lappend lKeywords1 {exif_imagetype|int exif_imagetype ( string $filename )}
lappend lKeywords1 {exif_read_data|array exif_read_data ( mixed $stream [, string $sections = NULL [, bool $arrays = false [, bool $thumbnail = false ]]] )}
lappend lKeywords1 {exif_tagname|string exif_tagname ( int $index )}
lappend lKeywords1 {exif_thumbnail|string exif_thumbnail ( mixed $stream [, int &$width [, int &$height [, int &$imagetype ]]] )}
lappend lKeywords1 {exp|float exp ( float $arg )}
lappend lKeywords1 {expect_expectl|int expect_expectl ( resource $expect , array $cases [, array &$match ] )}
lappend lKeywords1 {expect_popen|resource expect_popen ( string $command )}
lappend lKeywords1 {explode|array explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] )}
lappend lKeywords1 {expm1|float expm1 ( float $arg )}
lappend lKeywords1 {extension_loaded|bool extension_loaded ( string $name )}
lappend lKeywords1 {extract|int extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL ]] )}
lappend lKeywords1 {ezmlm_hash|int ezmlm_hash ( string $addr )}
lappend lKeywords1 {fastcgi_finish_request|boolean fastcgi_finish_request ( void )}
lappend lKeywords1 {fclose|bool fclose ( resource $handle )}
lappend lKeywords1 {feof|bool feof ( resource $handle )}
lappend lKeywords1 {fflush|bool fflush ( resource $handle )}
lappend lKeywords1 {fgetc|string fgetc ( resource $handle )}
lappend lKeywords1 {fgetcsv|array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\" ]]]] )}
lappend lKeywords1 {fgets|string fgets ( resource $handle [, int $length ] )}
lappend lKeywords1 {fgetss|string fgetss ( resource $handle [, int $length [, string $allowable_tags ]] )}
lappend lKeywords1 {file|array file ( string $filename [, int $flags = 0 [, resource $context ]] )}
lappend lKeywords1 {fileatime|int fileatime ( string $filename )}
lappend lKeywords1 {filectime|int filectime ( string $filename )}
lappend lKeywords1 {filegroup|int filegroup ( string $filename )}
lappend lKeywords1 {fileinode|int fileinode ( string $filename )}
lappend lKeywords1 {filemtime|int filemtime ( string $filename )}
lappend lKeywords1 {fileowner|int fileowner ( string $filename )}
lappend lKeywords1 {fileperms|int fileperms ( string $filename )}
lappend lKeywords1 {filesize|int filesize ( string $filename )}
lappend lKeywords1 {filetype|string filetype ( string $filename )}
lappend lKeywords1 {file_get_contents|string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )}
lappend lKeywords1 {file_put_contents|int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )}
lappend lKeywords1 {filter_has_var|bool filter_has_var ( int $type , string $variable_name )}
lappend lKeywords1 {filter_id|int filter_id ( string $filtername )}
lappend lKeywords1 {filter_input|mixed filter_input ( int $type , string $variable_name [, int $filter = FILTER_DEFAULT [, mixed $options ]] )}
lappend lKeywords1 {filter_input_array|mixed filter_input_array ( int $type [, mixed $definition [, bool $add_empty = true ]] )}
lappend lKeywords1 {filter_list|array filter_list ( void )}
lappend lKeywords1 {filter_var|mixed filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] )}
lappend lKeywords1 {filter_var_array|mixed filter_var_array ( array $data [, mixed $definition [, bool $add_empty = true ]] )}
lappend lKeywords1 {finfo_close|bool finfo_close ( resource $finfo )}
lappend lKeywords1 {finfo_open|resource finfo_open ([ int $options = FILEINFO_NONE [, string $magic_file = NULL ]] )
public finfo::__construct ([ int $options = FILEINFO_NONE [, string $magic_file = NULL ]] )}
lappend lKeywords1 {floatval|float floatval ( mixed $var )}
lappend lKeywords1 {flock|bool flock ( resource $handle , int $operation [, int &$wouldblock ] )}
lappend lKeywords1 {floor|mixed floor ( float $value )}
lappend lKeywords1 {flush|void flush ( void )}
lappend lKeywords1 {fmod|float fmod ( float $x , float $y )}
lappend lKeywords1 {fnmatch|bool fnmatch ( string $pattern , string $string [, int $flags = 0 ] )}
lappend lKeywords1 {fopen|resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )}
lappend lKeywords1 {forward_static_call|mixed forward_static_call ( callable $function [, mixed $parameter [, mixed $... ]] )}
lappend lKeywords1 {forward_static_call_array|mixed forward_static_call_array ( callable $function , array $parameters )}
lappend lKeywords1 {fpassthru|int fpassthru ( resource $handle )}
lappend lKeywords1 {fprintf|int fprintf ( resource $handle , string $format [, mixed $args [, mixed $... ]] )}
lappend lKeywords1 {fputcsv|int fputcsv ( resource $handle , array $fields [, string $delimiter = "," [, string $enclosure = '"' [, string $escape_char = "\" ]]] )}
lappend lKeywords1 {fputs|alias of: fwrite()}
lappend lKeywords1 {fread|string fread ( resource $handle , int $length )}
lappend lKeywords1 {frenchtojd|int frenchtojd ( int $month , int $day , int $year )}
lappend lKeywords1 {fribidi_log2vis|string fribidi_log2vis ( string $str , string $direction , int $charset )}
lappend lKeywords1 {fscanf|mixed fscanf ( resource $handle , string $format [, mixed &$... ] )}
lappend lKeywords1 {fseek|int fseek ( resource $handle , int $offset [, int $whence = SEEK_SET ] )}
lappend lKeywords1 {fsockopen|resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )}
lappend lKeywords1 {fstat|array fstat ( resource $handle )}
lappend lKeywords1 {ftell|int ftell ( resource $handle )}
lappend lKeywords1 {ftok|int ftok ( string $pathname , string $proj )}
lappend lKeywords1 {ftruncate|bool ftruncate ( resource $handle , int $size )}
lappend lKeywords1 {func_get_arg|mixed func_get_arg ( int $arg_num )}
lappend lKeywords1 {func_get_args|array func_get_args ( void )}
lappend lKeywords1 {func_num_args|int func_num_args ( void )}
lappend lKeywords1 {fwrite|int fwrite ( resource $handle , string $string [, int $length ] )}
lappend lKeywords1 {gc_collect_cycles|int gc_collect_cycles ( void )}
lappend lKeywords1 {gc_disable|void gc_disable ( void )}
lappend lKeywords1 {gc_enable|void gc_enable ( void )}
lappend lKeywords1 {gc_enabled|bool gc_enabled ( void )}
lappend lKeywords1 {gc_mem_caches|int gc_mem_caches ( void )}
lappend lKeywords1 {gd_info|array gd_info ( void )}
lappend lKeywords1 {getallheaders|array getallheaders ( void )}
lappend lKeywords1 {getcwd|string getcwd ( void )}
lappend lKeywords1 {getdate|array getdate ([ int $timestamp = time() ] )}
lappend lKeywords1 {getenv|string getenv ( string $varname [, bool $local_only = false ] )}
lappend lKeywords1 {gethostbyaddr|string gethostbyaddr ( string $ip_address )}
lappend lKeywords1 {gethostbyname|string gethostbyname ( string $hostname )}
lappend lKeywords1 {gethostbynamel|array gethostbynamel ( string $hostname )}
lappend lKeywords1 {gethostname|string gethostname ( void )}
lappend lKeywords1 {getimagesize|array getimagesize ( string $filename [, array &$imageinfo ] )}
lappend lKeywords1 {getimagesizefromstring|array getimagesizefromstring ( string $imagedata [, array &$imageinfo ] )}
lappend lKeywords1 {getlastmod|int getlastmod ( void )}
lappend lKeywords1 {getmxrr|bool getmxrr ( string $hostname , array &$mxhosts [, array &$weight ] )}
lappend lKeywords1 {getmygid|int getmygid ( void )}
lappend lKeywords1 {getmyinode|int getmyinode ( void )}
lappend lKeywords1 {getmypid|int getmypid ( void )}
lappend lKeywords1 {getmyuid|int getmyuid ( void )}
lappend lKeywords1 {getopt|array getopt ( string $options [, array $longopts [, int &$optind ]] )}
lappend lKeywords1 {getprotobyname|int getprotobyname ( string $name )}
lappend lKeywords1 {getprotobynumber|string getprotobynumber ( int $number )}
lappend lKeywords1 {getrandmax|int getrandmax ( void )}
lappend lKeywords1 {getrusage|array getrusage ([ int $who = 0 ] )}
lappend lKeywords1 {getservbyname|int getservbyname ( string $service , string $protocol )}
lappend lKeywords1 {getservbyport|string getservbyport ( int $port , string $protocol )}
lappend lKeywords1 {gettext|string gettext ( string $message )}
lappend lKeywords1 {gettimeofday|mixed gettimeofday ([ bool $return_float = false ] )}
lappend lKeywords1 {gettype|string gettype ( mixed $var )}
lappend lKeywords1 {glob|array glob ( string $pattern [, int $flags = 0 ] )}
lappend lKeywords1 {gmdate|string gmdate ( string $format [, int $timestamp = time() ] )}
lappend lKeywords1 {gmmktime|int gmmktime ([ int $hour = gmdate("H") [, int $minute = gmdate("i") [, int $second = gmdate("s") [, int $month = gmdate("n") [, int $day = gmdate("j") [, int $year = gmdate("Y") [, int $is_dst = -1 ]]]]]]] )}
lappend lKeywords1 {gmstrftime|string gmstrftime ( string $format [, int $timestamp = time() ] )}
lappend lKeywords1 {gopher_parsedir|array gopher_parsedir ( string $dirent )}
lappend lKeywords1 {gregoriantojd|int gregoriantojd ( int $month , int $day , int $year )}
lappend lKeywords1 {gzclose|bool gzclose ( resource $zp )}
lappend lKeywords1 {gzcompress|string gzcompress ( string $data [, int $level = -1 [, int $encoding = ZLIB_ENCODING_DEFLATE ]] )}
lappend lKeywords1 {gzdecode|string gzdecode ( string $data [, int $length ] )}
lappend lKeywords1 {gzdeflate|string gzdeflate ( string $data [, int $level = -1 [, int $encoding = ZLIB_ENCODING_RAW ]] )}
lappend lKeywords1 {gzencode|string gzencode ( string $data [, int $level = -1 [, int $encoding_mode = FORCE_GZIP ]] )}
lappend lKeywords1 {gzeof|int gzeof ( resource $zp )}
lappend lKeywords1 {gzfile|array gzfile ( string $filename [, int $use_include_path = 0 ] )}
lappend lKeywords1 {gzgetc|string gzgetc ( resource $zp )}
lappend lKeywords1 {gzgets|string gzgets ( resource $zp [, int $length ] )}
lappend lKeywords1 {gzgetss|string gzgetss ( resource $zp , int $length [, string $allowable_tags ] )}
lappend lKeywords1 {gzinflate|string gzinflate ( string $data [, int $length = 0 ] )}
lappend lKeywords1 {gzopen|resource gzopen ( string $filename , string $mode [, int $use_include_path = 0 ] )}
lappend lKeywords1 {gzpassthru|int gzpassthru ( resource $zp )}
lappend lKeywords1 {gzputs|alias of: gzwrite()}
lappend lKeywords1 {gzread|string gzread ( resource $zp , int $length )}
lappend lKeywords1 {gzrewind|bool gzrewind ( resource $zp )}
lappend lKeywords1 {gzseek|int gzseek ( resource $zp , int $offset [, int $whence = SEEK_SET ] )}
lappend lKeywords1 {gztell|int gztell ( resource $zp )}
lappend lKeywords1 {gzuncompress|string gzuncompress ( string $data [, int $length = 0 ] )}
lappend lKeywords1 {gzwrite|int gzwrite ( resource $zp , string $string [, int $length ] )}
lappend lKeywords1 {header|void header ( string $string [, bool $replace = true [, int $http_response_code ]] )}
lappend lKeywords1 {headers_list|array headers_list ( void )}
lappend lKeywords1 {headers_sent|bool headers_sent ([ string &$file [, int &$line ]] )}
lappend lKeywords1 {header_register_callback|bool header_register_callback ( callable $callback )}
lappend lKeywords1 {header_remove|void header_remove ([ string $name ] )}
lappend lKeywords1 {hebrev|string hebrev ( string $hebrew_text [, int $max_chars_per_line = 0 ] )}
lappend lKeywords1 {hebrevc|string hebrevc ( string $hebrew_text [, int $max_chars_per_line = 0 ] )}
lappend lKeywords1 {hex2bin|string hex2bin ( string $data )}
lappend lKeywords1 {hexdec|number hexdec ( string $hex_string )}
lappend lKeywords1 {highlight_file|mixed highlight_file ( string $filename [, bool $return = false ] )}
lappend lKeywords1 {highlight_string|mixed highlight_string ( string $str [, bool $return = false ] )}
lappend lKeywords1 {htmlentities|string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )}
lappend lKeywords1 {htmlspecialchars|string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )}
lappend lKeywords1 {htmlspecialchars_decode|string htmlspecialchars_decode ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 ] )}
lappend lKeywords1 {html_entity_decode|string html_entity_decode ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") ]] )}
lappend lKeywords1 {http_build_query|string http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )}
lappend lKeywords1 {http_response_code|mixed http_response_code ([ int $response_code ] )}
lappend lKeywords1 {hypot|float hypot ( float $x , float $y )}
lappend lKeywords1 {idate|int idate ( string $format [, int $timestamp = time() ] )}
lappend lKeywords1 {idn_to_ascii|string idn_to_ascii ( string $domain [, int $options = 0 [, int $variant = INTL_IDNA_VARIANT_2003 [, array &$idna_info ]]] )}
lappend lKeywords1 {idn_to_utf8|string idn_to_utf8 ( string $domain [, int $options = 0 [, int $variant = INTL_IDNA_VARIANT_2003 [, array &$idna_info ]]] )}
lappend lKeywords1 {ignore_user_abort|int ignore_user_abort ([ bool $value ] )}
lappend lKeywords1 {image2wbmp|bool image2wbmp ( resource $image [, string $filename [, int $threshold ]] )}
lappend lKeywords1 {imageaffine|resource imageaffine ( resource $image , array $affine [, array $clip ] )}
lappend lKeywords1 {imageaffinematrixconcat|array imageaffinematrixconcat ( array $m1 , array $m2 )}
lappend lKeywords1 {imageaffinematrixget|array imageaffinematrixget ( int $type , mixed $options )}
lappend lKeywords1 {imagealphablending|bool imagealphablending ( resource $image , bool $blendmode )}
lappend lKeywords1 {imageantialias|bool imageantialias ( resource $image , bool $enabled )}
lappend lKeywords1 {imagearc|bool imagearc ( resource $image , int $cx , int $cy , int $width , int $height , int $start , int $end , int $color )}
lappend lKeywords1 {imagebmp|bool imagebmp ( resource $image [, mixed $to = NULL [, bool $compressed = TRUE ]] )}
lappend lKeywords1 {imagechar|bool imagechar ( resource $image , int $font , int $x , int $y , string $c , int $color )}
lappend lKeywords1 {imagecharup|bool imagecharup ( resource $image , int $font , int $x , int $y , string $c , int $color )}
lappend lKeywords1 {imagecolorallocate|int imagecolorallocate ( resource $image , int $red , int $green , int $blue )}
lappend lKeywords1 {imagecolorallocatealpha|int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )}
lappend lKeywords1 {imagecolorat|int imagecolorat ( resource $image , int $x , int $y )}
lappend lKeywords1 {imagecolorclosest|int imagecolorclosest ( resource $image , int $red , int $green , int $blue )}
lappend lKeywords1 {imagecolorclosestalpha|int imagecolorclosestalpha ( resource $image , int $red , int $green , int $blue , int $alpha )}
lappend lKeywords1 {imagecolorclosesthwb|int imagecolorclosesthwb ( resource $image , int $red , int $green , int $blue )}
lappend lKeywords1 {imagecolordeallocate|bool imagecolordeallocate ( resource $image , int $color )}
lappend lKeywords1 {imagecolorexact|int imagecolorexact ( resource $image , int $red , int $green , int $blue )}
lappend lKeywords1 {imagecolorexactalpha|int imagecolorexactalpha ( resource $image , int $red , int $green , int $blue , int $alpha )}
lappend lKeywords1 {imagecolormatch|bool imagecolormatch ( resource $image1 , resource $image2 )}
lappend lKeywords1 {imagecolorresolve|int imagecolorresolve ( resource $image , int $red , int $green , int $blue )}
lappend lKeywords1 {imagecolorresolvealpha|int imagecolorresolvealpha ( resource $image , int $red , int $green , int $blue , int $alpha )}
lappend lKeywords1 {imagecolorset|void imagecolorset ( resource $image , int $index , int $red , int $green , int $blue [, int $alpha = 0 ] )}
lappend lKeywords1 {imagecolorsforindex|array imagecolorsforindex ( resource $image , int $index )}
lappend lKeywords1 {imagecolorstotal|int imagecolorstotal ( resource $image )}
lappend lKeywords1 {imagecolortransparent|int imagecolortransparent ( resource $image [, int $color ] )}
lappend lKeywords1 {imageconvolution|bool imageconvolution ( resource $image , array $matrix , float $div , float $offset )}
lappend lKeywords1 {imagecopy|bool imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h )}
lappend lKeywords1 {imagecopymerge|bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )}
lappend lKeywords1 {imagecopymergegray|bool imagecopymergegray ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )}
lappend lKeywords1 {imagecopyresampled|bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )}
lappend lKeywords1 {imagecopyresized|bool imagecopyresized ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )}
lappend lKeywords1 {imagecreate|resource imagecreate ( int $width , int $height )}
lappend lKeywords1 {imagecreatefrombmp|resource imagecreatefrombmp ( string $filename )}
lappend lKeywords1 {imagecreatefromgd|resource imagecreatefromgd ( string $filename )}
lappend lKeywords1 {imagecreatefromgd2|resource imagecreatefromgd2 ( string $filename )}
lappend lKeywords1 {imagecreatefromgd2part|resource imagecreatefromgd2part ( string $filename , int $srcX , int $srcY , int $width , int $height )}
lappend lKeywords1 {imagecreatefromgif|resource imagecreatefromgif ( string $filename )}
lappend lKeywords1 {imagecreatefromjpeg|resource imagecreatefromjpeg ( string $filename )}
lappend lKeywords1 {imagecreatefrompng|resource imagecreatefrompng ( string $filename )}
lappend lKeywords1 {imagecreatefromstring|resource imagecreatefromstring ( string $image )}
lappend lKeywords1 {imagecreatefromwbmp|resource imagecreatefromwbmp ( string $filename )}
lappend lKeywords1 {imagecreatefromwebp|resource imagecreatefromwebp ( string $filename )}
lappend lKeywords1 {imagecreatefromxbm|resource imagecreatefromxbm ( string $filename )}
lappend lKeywords1 {imagecreatefromxpm|resource imagecreatefromxpm ( string $filename )}
lappend lKeywords1 {imagecreatetruecolor|resource imagecreatetruecolor ( int $width , int $height )}
lappend lKeywords1 {imagecrop|resource imagecrop ( resource $image , array $rect )}
lappend lKeywords1 {imagecropauto|resource imagecropauto ( resource $image [, int $mode = -1 [, float $threshold = .5 [, int $color = -1 ]]] )}
lappend lKeywords1 {imagedashedline|bool imagedashedline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )}
lappend lKeywords1 {imagedestroy|bool imagedestroy ( resource $image )}
lappend lKeywords1 {imageellipse|bool imageellipse ( resource $image , int $cx , int $cy , int $width , int $height , int $color )}
lappend lKeywords1 {imagefill|bool imagefill ( resource $image , int $x , int $y , int $color )}
lappend lKeywords1 {imagefilledarc|bool imagefilledarc ( resource $image , int $cx , int $cy , int $width , int $height , int $start , int $end , int $color , int $style )}
lappend lKeywords1 {imagefilledellipse|bool imagefilledellipse ( resource $image , int $cx , int $cy , int $width , int $height , int $color )}
lappend lKeywords1 {imagefilledpolygon|bool imagefilledpolygon ( resource $image , array $points , int $num_points , int $color )}
lappend lKeywords1 {imagefilledrectangle|bool imagefilledrectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )}
lappend lKeywords1 {imagefilltoborder|bool imagefilltoborder ( resource $image , int $x , int $y , int $border , int $color )}
lappend lKeywords1 {imagefilter|bool imagefilter ( resource $image , int $filtertype [, int $arg1 [, int $arg2 [, int $arg3 [, int $arg4 ]]]] )}
lappend lKeywords1 {imageflip|bool imageflip ( resource $image , int $mode )}
lappend lKeywords1 {imagefontheight|int imagefontheight ( int $font )}
lappend lKeywords1 {imagefontwidth|int imagefontwidth ( int $font )}
lappend lKeywords1 {imageftbbox|array imageftbbox ( float $size , float $angle , string $fontfile , string $text [, array $extrainfo ] )}
lappend lKeywords1 {imagefttext|array imagefttext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text [, array $extrainfo ] )}
lappend lKeywords1 {imagegammacorrect|bool imagegammacorrect ( resource $image , float $inputgamma , float $outputgamma )}
lappend lKeywords1 {imagegd|bool imagegd ( resource $image [, mixed $to = NULL ] )}
lappend lKeywords1 {imagegd2|bool imagegd2 ( resource $image [, mixed $to = NULL [, int $chunk_size = 128 [, int $type = IMG_GD2_RAW ]]] )}
lappend lKeywords1 {imagegetclip|array imagegetclip ( resource $im )}
lappend lKeywords1 {imagegif|bool imagegif ( resource $image [, mixed $to ] )}
lappend lKeywords1 {imagegrabscreen|resource imagegrabscreen ( void )}
lappend lKeywords1 {imagegrabwindow|resource imagegrabwindow ( int $window_handle [, int $client_area = 0 ] )}
lappend lKeywords1 {imageinterlace|int imageinterlace ( resource $image [, int $interlace = 0 ] )}
lappend lKeywords1 {imageistruecolor|bool imageistruecolor ( resource $image )}
lappend lKeywords1 {imagejpeg|bool imagejpeg ( resource $image [, mixed $to [, int $quality ]] )}
lappend lKeywords1 {imagelayereffect|bool imagelayereffect ( resource $image , int $effect )}
lappend lKeywords1 {imageline|bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )}
lappend lKeywords1 {imageloadfont|int imageloadfont ( string $file )}
lappend lKeywords1 {imageopenpolygon|bool imageopenpolygon ( resource $image , array $points , int $num_points , int $color )}
lappend lKeywords1 {imagepalettecopy|void imagepalettecopy ( resource $destination , resource $source )}
lappend lKeywords1 {imagepalettetotruecolor|bool imagepalettetotruecolor ( resource $src )}
lappend lKeywords1 {imagepng|bool imagepng ( resource $image [, mixed $to [, int $quality [, int $filters ]]] )}
lappend lKeywords1 {imagepolygon|bool imagepolygon ( resource $image , array $points , int $num_points , int $color )}
lappend lKeywords1 {imagerectangle|bool imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )}
lappend lKeywords1 {imageresolution|mixed imageresolution ( resource $image [, int $res_x [, int $res_y ]] )}
lappend lKeywords1 {imagerotate|resource imagerotate ( resource $image , float $angle , int $bgd_color [, int $ignore_transparent = 0 ] )}
lappend lKeywords1 {imagesavealpha|bool imagesavealpha ( resource $image , bool $saveflag )}
lappend lKeywords1 {imagescale|resource imagescale ( resource $image , int $new_width [, int $new_height = -1 [, int $mode = IMG_BILINEAR_FIXED ]] )}
lappend lKeywords1 {imagesetbrush|bool imagesetbrush ( resource $image , resource $brush )}
lappend lKeywords1 {imagesetclip|bool imagesetclip ( resource $im , int $x1 , int $y1 , int $x2 , int $y2 )}
lappend lKeywords1 {imagesetinterpolation|bool imagesetinterpolation ( resource $image [, int $method = IMG_BILINEAR_FIXED ] )}
lappend lKeywords1 {imagesetpixel|bool imagesetpixel ( resource $image , int $x , int $y , int $color )}
lappend lKeywords1 {imagesetstyle|bool imagesetstyle ( resource $image , array $style )}
lappend lKeywords1 {imagesetthickness|bool imagesetthickness ( resource $image , int $thickness )}
lappend lKeywords1 {imagesettile|bool imagesettile ( resource $image , resource $tile )}
lappend lKeywords1 {imagestring|bool imagestring ( resource $image , int $font , int $x , int $y , string $string , int $color )}
lappend lKeywords1 {imagestringup|bool imagestringup ( resource $image , int $font , int $x , int $y , string $string , int $color )}
lappend lKeywords1 {imagesx|int imagesx ( resource $image )}
lappend lKeywords1 {imagesy|int imagesy ( resource $image )}
lappend lKeywords1 {imagetruecolortopalette|bool imagetruecolortopalette ( resource $image , bool $dither , int $ncolors )}
lappend lKeywords1 {imagettfbbox|array imagettfbbox ( float $size , float $angle , string $fontfile , string $text )}
lappend lKeywords1 {imagettftext|array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )}
lappend lKeywords1 {imagetypes|int imagetypes ( void )}
lappend lKeywords1 {imagewbmp|bool imagewbmp ( resource $image [, mixed $to [, int $foreground ]] )}
lappend lKeywords1 {imagewebp|bool imagewebp ( resource $image [, mixed $to = NULL [, int $quality = 80 ]] )}
lappend lKeywords1 {imagexbm|bool imagexbm ( resource $image , string $filename [, int $foreground ] )}
lappend lKeywords1 {image_type_to_extension|string image_type_to_extension ( int $imagetype [, bool $include_dot = TRUE ] )}
lappend lKeywords1 {image_type_to_mime_type|string image_type_to_mime_type ( int $imagetype )}
lappend lKeywords1 {implode|string implode ( string $glue , array $pieces )
string implode ( array $pieces )}
lappend lKeywords1 {inclued_get_data|array inclued_get_data ( void )}
lappend lKeywords1 {inet_ntop|string inet_ntop ( string $in_addr )}
lappend lKeywords1 {inet_pton|string inet_pton ( string $address )}
lappend lKeywords1 {inflate_add|string inflate_add ( resource $context , string $encoded_data [, int $flush_mode = ZLIB_SYNC_FLUSH ] )}
lappend lKeywords1 {inflate_init|resource inflate_init ( int $encoding [, array $options = array() ] )}
lappend lKeywords1 {ini_alter|alias of: ini_set()}
lappend lKeywords1 {ini_get|string ini_get ( string $varname )}
lappend lKeywords1 {ini_get_all|array ini_get_all ([ string $extension [, bool $details = true ]] )}
lappend lKeywords1 {ini_restore|void ini_restore ( string $varname )}
lappend lKeywords1 {ini_set|string ini_set ( string $varname , string $newvalue )}
lappend lKeywords1 {inotify_add_watch|int inotify_add_watch ( resource $inotify_instance , string $pathname , int $mask )}
lappend lKeywords1 {inotify_init|resource inotify_init ( void )}
lappend lKeywords1 {inotify_queue_len|int inotify_queue_len ( resource $inotify_instance )}
lappend lKeywords1 {inotify_read|array inotify_read ( resource $inotify_instance )}
lappend lKeywords1 {inotify_rm_watch|bool inotify_rm_watch ( resource $inotify_instance , int $watch_descriptor )}
lappend lKeywords1 {intdiv|int intdiv ( int $dividend , int $divisor )}
lappend lKeywords1 {intl_error_name|string intl_error_name ( int $error_code )}
lappend lKeywords1 {intl_get_error_code|int intl_get_error_code ( void )}
lappend lKeywords1 {intl_get_error_message|string intl_get_error_message ( void )}
lappend lKeywords1 {intl_is_failure|bool intl_is_failure ( int $error_code )}
lappend lKeywords1 {intval|int intval ( mixed $var [, int $base = 10 ] )}
lappend lKeywords1 {in_array|bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )}
lappend lKeywords1 {ip2long|int ip2long ( string $ip_address )}
lappend lKeywords1 {iptcembed|mixed iptcembed ( string $iptcdata , string $jpeg_file_name [, int $spool = 0 ] )}
lappend lKeywords1 {iptcparse|array iptcparse ( string $iptcblock )}
lappend lKeywords1 {iterator_apply|int iterator_apply ( Traversable $iterator , callable $function [, array $args ] )}
lappend lKeywords1 {iterator_count|int iterator_count ( Traversable $iterator )}
lappend lKeywords1 {iterator_to_array|array iterator_to_array ( Traversable $iterator [, bool $use_keys = true ] )}
lappend lKeywords1 {jddayofweek|mixed jddayofweek ( int $julianday [, int $mode = CAL_DOW_DAYNO ] )}
lappend lKeywords1 {jdmonthname|string jdmonthname ( int $julianday , int $mode )}
lappend lKeywords1 {jdtofrench|string jdtofrench ( int $juliandaycount )}
lappend lKeywords1 {jdtogregorian|string jdtogregorian ( int $julianday )}
lappend lKeywords1 {jdtojewish|string jdtojewish ( int $juliandaycount [, bool $hebrew = false [, int $fl = 0 ]] )}
lappend lKeywords1 {jdtojulian|string jdtojulian ( int $julianday )}
lappend lKeywords1 {jdtounix|int jdtounix ( int $jday )}
lappend lKeywords1 {jewishtojd|int jewishtojd ( int $month , int $day , int $year )}
lappend lKeywords1 {join|alias to: implode()}
lappend lKeywords1 {json_decode|mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )}
lappend lKeywords1 {json_encode|string json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] )}
lappend lKeywords1 {json_last_error|int json_last_error ( void )}
lappend lKeywords1 {json_last_error_msg|string json_last_error_msg ( void )}
lappend lKeywords1 {judy_type|int judy_type ( Judy $array )}
lappend lKeywords1 {judy_version|string judy_version ( void )}
lappend lKeywords1 {juliantojd|int juliantojd ( int $month , int $day , int $year )}
lappend lKeywords1 {key|mixed key ( array $array )}
lappend lKeywords1 {krsort|bool krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )}
lappend lKeywords1 {ksort|bool ksort ( array &$array [, int $sort_flags = SORT_REGULAR ] )}
lappend lKeywords1 {lcfirst|string lcfirst ( string $str )}
lappend lKeywords1 {lcg_value|float lcg_value ( void )}
lappend lKeywords1 {lchgrp|bool lchgrp ( string $filename , mixed $group )}
lappend lKeywords1 {lchown|bool lchown ( string $filename , mixed $user )}
lappend lKeywords1 {levenshtein<int levenshtein ( string $str1 , string $str2 )
int levenshtein ( string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del )}
lappend lKeywords1 {link|bool link ( string $target , string $link )}
lappend lKeywords1 {linkinfo|int linkinfo ( string $path )}
lappend lKeywords1 {list|array list ( mixed $var1 [, mixed $... ] )}
lappend lKeywords1 {localeconv|array localeconv ( void )}
lappend lKeywords1 {localtime|array localtime ([ int $timestamp = time() [, bool $is_associative = false ]] )}
lappend lKeywords1 {long2ip|string long2ip ( int $proper_address )}
lappend lKeywords1 {lstat|array lstat ( string $filename )}
lappend lKeywords1 {ltrim|string ltrim ( string $str [, string $character_mask ] )}
lappend lKeywords1 {mail|bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )}
lappend lKeywords1 {main}
lappend lKeywords1 {max|mixed max ( array $values )
mixed max ( mixed $value1 , mixed $value2 [, mixed $... ] )}
lappend lKeywords1 {md5|string md5 ( string $str [, bool $raw_output = false ] )}
lappend lKeywords1 {md5_file|string md5_file ( string $filename [, bool $raw_output = false ] )}
lappend lKeywords1 {memcache_debug|bool memcache_debug ( bool $on_off )}
lappend lKeywords1 {memory_get_peak_usage|int memory_get_peak_usage ([ bool $real_usage = false ] )}
lappend lKeywords1 {memory_get_usage|int memory_get_usage ([ bool $real_usage = false ] )}
lappend lKeywords1 {metaphone|string metaphone ( string $str [, int $phonemes = 0 ] )}
lappend lKeywords1 {mhash|string mhash ( int $hash , string $data [, string $key ] )}
lappend lKeywords1 {mhash_count|int mhash_count ( void )}
lappend lKeywords1 {mhash_get_block_size|int mhash_get_block_size ( int $hash )}
lappend lKeywords1 {mhash_get_hash_name<string mhash_get_hash_name ( int $hash )}
lappend lKeywords1 {mhash_keygen_s2k|string mhash_keygen_s2k ( int $hash , string $password , string $salt , int $bytes )}
lappend lKeywords1 {microtime|mixed microtime ([ bool $get_as_float = false ] )}
lappend lKeywords1 {mime_content_type|string mime_content_type ( string $filename )}
lappend lKeywords1 {min|mixed min ( array $values )
mixed min ( mixed $value1 , mixed $value2 [, mixed $... ] )}
lappend lKeywords1 {ming_keypress|int ming_keypress ( string $char )}
lappend lKeywords1 {ming_setcubicthreshold|void ming_setcubicthreshold ( int $threshold )}
lappend lKeywords1 {ming_setscale|void ming_setscale ( float $scale )}
lappend lKeywords1 {ming_setswfcompression|void ming_setswfcompression ( int $level )}
lappend lKeywords1 {ming_useconstants|void ming_useconstants ( int $use )}
lappend lKeywords1 {ming_useswfversion|void ming_useswfversion ( int $version )}
lappend lKeywords1 {mkdir|bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] )}
lappend lKeywords1 {mktime|int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )}
lappend lKeywords1 {money_format|string money_format ( string $format , float $number )}
lappend lKeywords1 {move_uploaded_file|bool move_uploaded_file ( string $filename , string $destination )}
lappend lKeywords1 {natcasesort|bool natcasesort ( array &$array )}
lappend lKeywords1 {natsort|bool natsort ( array &$array )}
lappend lKeywords1 {next|mixed next ( array &$array )}
lappend lKeywords1 {ngettext|string ngettext ( string $msgid1 , string $msgid2 , int $n )}
lappend lKeywords1 {nl2br|string nl2br ( string $string [, bool $is_xhtml = true ] )}
lappend lKeywords1 {nl_langinfo|string nl_langinfo ( int $item )}
lappend lKeywords1 {number_format|string number_format ( float $number [, int $decimals = 0 ] )
string number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," )}
lappend lKeywords1 {oauth_get_sbs|string oauth_get_sbs ( string $http_method , string $uri [, array $request_parameters ] )}
lappend lKeywords1 {oauth_urlencode|string oauth_urlencode ( string $uri )}
lappend lKeywords1 {octdec|number octdec ( string $octal_string )}
lappend lKeywords1 {opendir|resource opendir ( string $path [, resource $context ] )}
lappend lKeywords1 {openlog|bool openlog ( string $ident , int $option , int $facility )}
lappend lKeywords1 {ord|int ord ( string $string )}
lappend lKeywords1 {output_add_rewrite_var|bool output_add_rewrite_var ( string $name , string $value )}
lappend lKeywords1 {output_reset_rewrite_vars|bool output_reset_rewrite_vars ( void )}
lappend lKeywords1 {override_function|bool override_function ( string $function_name , string $function_args , string $function_code )}
lappend lKeywords1 {pack|string pack ( string $format [, mixed $args [, mixed $... ]] )}
lappend lKeywords1 {parse_ini_file|array parse_ini_file ( string $filename [, bool $process_sections = false [, int $scanner_mode = INI_SCANNER_NORMAL ]] )}
lappend lKeywords1 {parse_ini_string|array parse_ini_string ( string $ini [, bool $process_sections = false [, int $scanner_mode = INI_SCANNER_NORMAL ]] )}
lappend lKeywords1 {parse_str|void parse_str ( string $encoded_string [, array &$result ] )}
lappend lKeywords1 {parse_url|mixed parse_url ( string $url [, int $component = -1 ] )}
lappend lKeywords1 {passthru|void passthru ( string $command [, int &$return_var ] )}
lappend lKeywords1 {password_get_info|array password_get_info ( string $hash )}
lappend lKeywords1 {password_hash|string password_hash ( string $password , integer $algo [, array $options ] )}
lappend lKeywords1 {password_needs_rehash|boolean password_needs_rehash ( string $hash , integer $algo [, array $options ] )}
lappend lKeywords1 {password_verify|boolean password_verify ( string $password , string $hash )}
lappend lKeywords1 {pathinfo|mixed pathinfo ( string $path [, int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ] )}
lappend lKeywords1 {pclose|int pclose ( resource $handle )}
lappend lKeywords1 {pfsockopen|resource pfsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )}
lappend lKeywords1 {phpcredits|bool phpcredits ([ int $flag = CREDITS_ALL ] )}
lappend lKeywords1 {phpinfo|bool phpinfo ([ int $what = INFO_ALL ] )}
lappend lKeywords1 {phpversion|string phpversion ([ string $extension ] )}
lappend lKeywords1 {php_check_syntax|bool php_check_syntax ( string $filename [, string &$error_message ] )}
lappend lKeywords1 {php_ini_loaded_file|string php_ini_loaded_file ( void )}
lappend lKeywords1 {php_ini_scanned_files|string php_ini_scanned_files ( void )}
lappend lKeywords1 {php_sapi_name|string php_sapi_name ( void )}
lappend lKeywords1 {php_strip_whitespace|string php_strip_whitespace ( string $filename )}
lappend lKeywords1 {php_uname|string php_uname ([ string $mode = "a" ] )}
lappend lKeywords1 {pi|float pi ( void )}
lappend lKeywords1 {popen|resource popen ( string $command , string $mode )}
lappend lKeywords1 {pos|alias of: current()}
lappend lKeywords1 {pow|number pow ( number $base , number $exp )}
lappend lKeywords1 {prev|mixed prev ( array &$array )}
lappend lKeywords1 {print|int print ( string $arg )}
lappend lKeywords1 {printf|int printf ( string $format [, mixed $args [, mixed $... ]] )}
lappend lKeywords1 {print_r|mixed print_r ( mixed $expression [, bool $return = false ] )}
lappend lKeywords1 {quoted_printable_decode|string quoted_printable_decode ( string $str )}
lappend lKeywords1 {quoted_printable_encode|string quoted_printable_encode ( string $str )}
lappend lKeywords1 {quotemeta|string quotemeta ( string $str )}
lappend lKeywords1 {rad2deg|float rad2deg ( float $number )}
lappend lKeywords1 {rand|int rand ( void )
int rand ( int $min , int $max )}
lappend lKeywords1 {random_bytes|string random_bytes ( int $length )}
lappend lKeywords1 {random_int|int random_int ( int $min , int $max )}
lappend lKeywords1 {range|array range ( mixed $start , mixed $end [, number $step = 1 ] )}
lappend lKeywords1 {rawurldecode|string rawurldecode ( string $str )}
lappend lKeywords1 {rawurlencode|string rawurlencode ( string $str )}
lappend lKeywords1 {readdir|string readdir ([ resource $dir_handle ] )}
lappend lKeywords1 {readfile|int readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )}
lappend lKeywords1 {readgzfile|int readgzfile ( string $filename [, int $use_include_path = 0 ] )}
lappend lKeywords1 {readlink|string readlink ( string $path )}
lappend lKeywords1 {read_exif_data|alias of: exif_read_data()}
lappend lKeywords1 {realpath|string realpath ( string $path )}
lappend lKeywords1 {realpath_cache_get|array realpath_cache_get ( void )}
lappend lKeywords1 {realpath_cache_size|int realpath_cache_size ( void )}
lappend lKeywords1 {recode|alias of: recode_string()}
lappend lKeywords1 {recode_file|bool recode_file ( string $request , resource $input , resource $output )}
lappend lKeywords1 {recode_string|string recode_string ( string $request , string $string )}
lappend lKeywords1 {register_shutdown_function|void register_shutdown_function ( callable $callback [, mixed $parameter [, mixed $... ]] )}
lappend lKeywords1 {register_tick_function|bool register_tick_function ( callable $function [, mixed $arg [, mixed $... ]] )}
lappend lKeywords1 {rename|bool rename ( string $oldname , string $newname [, resource $context ] )}
lappend lKeywords1 {rename_function|bool rename_function ( string $original_name , string $new_name )}
lappend lKeywords1 {reset|mixed reset ( array &$array )}
lappend lKeywords1 {rewind|bool rewind ( resource $handle )}
lappend lKeywords1 {rewinddir|void rewinddir ([ resource $dir_handle ] )}
lappend lKeywords1 {rmdir|bool rmdir ( string $dirname [, resource $context ] )}
lappend lKeywords1 {round|float round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] )}
lappend lKeywords1 {rsort|bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )}
lappend lKeywords1 {rtrim|string rtrim ( string $str [, string $character_mask ] )}
lappend lKeywords1 {scandir|array scandir ( string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource $context ]] )}
lappend lKeywords1 {serialize|string serialize ( mixed $value )}
lappend lKeywords1 {setcookie|bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] )}
lappend lKeywords1 {setlocale|string setlocale ( int $category , string $locale [, string $... ] )
string setlocale ( int $category , array $locale )}
lappend lKeywords1 {setproctitle|void setproctitle ( string $title )}
lappend lKeywords1 {setrawcookie|bool setrawcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )}
lappend lKeywords1 {setthreadtitle|bool setthreadtitle ( string $title )}
lappend lKeywords1 {settype|bool settype ( mixed &$var , string $type )}
lappend lKeywords1 {set_error_handler|mixed set_error_handler ( callable $error_handler [, int $error_types = E_ALL | E_STRICT ] )}
lappend lKeywords1 {set_exception_handler|callable set_exception_handler ( callable $exception_handler )}
lappend lKeywords1 {set_file_buffer|alias of: stream_set_write_buffer()}
lappend lKeywords1 {set_include_path|string set_include_path ( string $new_include_path )}
lappend lKeywords1 {set_time_limit|bool set_time_limit ( int $seconds )}
lappend lKeywords1 {sha1|string sha1 ( string $str [, bool $raw_output = false ] )}
lappend lKeywords1 {sha1_file|string sha1_file ( string $filename [, bool $raw_output = false ] )}
lappend lKeywords1 {shell_exec|string shell_exec ( string $cmd )}
lappend lKeywords1 {show_source|alias of: highlight_file()}
lappend lKeywords1 {shuffle|bool shuffle ( array &$array )}
lappend lKeywords1 {similar_text|int similar_text ( string $first , string $second [, float &$percent ] )}
lappend lKeywords1 {sin|float sin ( float $arg )}
lappend lKeywords1 {sinh|float sinh ( float $arg )}
lappend lKeywords1 {sizeof|alias of: count()}
lappend lKeywords1 {sleep|int sleep ( int $seconds )}
lappend lKeywords1 {solr_get_version|string solr_get_version ( void )}
lappend lKeywords1 {sort|bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )}
lappend lKeywords1 {soundex|string soundex ( string $str )}
lappend lKeywords1 {split|array split ( string $pattern , string $string [, int $limit = -1 ] )}
lappend lKeywords1 {sprintf|string sprintf ( string $format [, mixed $args [, mixed $... ]] )}
lappend lKeywords1 {sqrt|float sqrt ( float $arg )}
lappend lKeywords1 {srand|void srand ([ int $seed ] )}
lappend lKeywords1 {sscanf|mixed sscanf ( string $str , string $format [, mixed &$... ] )}
lappend lKeywords1 {stat|array stat ( string $filename )}
lappend lKeywords1 {strcasecmp|int strcasecmp ( string $str1 , string $str2 )}
lappend lKeywords1 {strchr|alias of: strstr()}
lappend lKeywords1 {strcmp|int strcmp ( string $str1 , string $str2 )}
lappend lKeywords1 {strcoll|int strcoll ( string $str1 , string $str2 )}
lappend lKeywords1 {strcspn|int strcspn ( string $subject , string $mask [, int $start [, int $length ]] )}
lappend lKeywords1 {strftime|string strftime ( string $format [, int $timestamp = time() ] )}
lappend lKeywords1 {stripcslashes|string stripcslashes ( string $str )}
lappend lKeywords1 {stripos|mixed stripos ( string $haystack , string $needle [, int $offset = 0 ] )}
lappend lKeywords1 {stripslashes|string stripslashes ( string $str )}
lappend lKeywords1 {strip_tags|string strip_tags ( string $str [, string $allowable_tags ] )}
lappend lKeywords1 {stristr|mixed stristr ( string $haystack , mixed $needle [, bool $before_needle = false ] )}
lappend lKeywords1 {strlen|int strlen ( string $string )}
lappend lKeywords1 {strnatcasecmp|int strnatcasecmp ( string $str1 , string $str2 )}
lappend lKeywords1 {strnatcmp|int strnatcmp ( string $str1 , string $str2 )}
lappend lKeywords1 {strncasecmp|int strncasecmp ( string $str1 , string $str2 , int $len )}
lappend lKeywords1 {strncmp|int strncmp ( string $str1 , string $str2 , int $len )}
lappend lKeywords1 {strpbrk|string strpbrk ( string $haystack , string $char_list )}
lappend lKeywords1 {strpos|mixed strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )}
lappend lKeywords1 {strptime|array strptime ( string $date , string $format )}
lappend lKeywords1 {strrchr|string strrchr ( string $haystack , mixed $needle )}
lappend lKeywords1 {strrev|string strrev ( string $string )}
lappend lKeywords1 {strripos|int strripos ( string $haystack , string $needle [, int $offset = 0 ] )}
lappend lKeywords1 {strrpos|int strrpos ( string $haystack , string $needle [, int $offset = 0 ] )}
lappend lKeywords1 {strspn|int strspn ( string $subject , string $mask [, int $start [, int $length ]] )}
lappend lKeywords1 {strstr|string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] )}
lappend lKeywords1 {strtok|string strtok ( string $str , string $token )
string strtok ( string $token )}
lappend lKeywords1 {strtolower|string strtolower ( string $string )}
lappend lKeywords1 {strtotime|int strtotime ( string $time [, int $now = time() ] )}
lappend lKeywords1 {strtoupper|string strtoupper ( string $string )}
lappend lKeywords1 {strtr|string strtr ( string $str , string $from , string $to )
string strtr ( string $str , array $replace_pairs )}
lappend lKeywords1 {strval|string strval ( mixed $var )}
lappend lKeywords1 {str_getcsv|array str_getcsv ( string $input [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]] )}
lappend lKeywords1 {str_ireplace|mixed str_ireplace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )}
lappend lKeywords1 {str_pad|string str_pad ( string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]] )}
lappend lKeywords1 {str_repeat|string str_repeat ( string $input , int $multiplier )}
lappend lKeywords1 {str_replace|mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )}
lappend lKeywords1 {str_rot13|string str_rot13 ( string $str )}
lappend lKeywords1 {str_shuffle|string str_shuffle ( string $str )}
lappend lKeywords1 {str_split|array str_split ( string $string [, int $split_length = 1 ] )}
lappend lKeywords1 {str_word_count|mixed str_word_count ( string $string [, int $format = 0 [, string $charlist ]] )}
lappend lKeywords1 {substr|string substr ( string $string , int $start [, int $length ] )}
lappend lKeywords1 {substr_compare|int substr_compare ( string $main_str , string $str , int $offset [, int $length [, bool $case_insensitivity = false ]] )}
lappend lKeywords1 {substr_count|int substr_count ( string $haystack , string $needle [, int $offset = 0 [, int $length ]] )}
lappend lKeywords1 {substr_replace|mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )}
lappend lKeywords1 {symlink|bool symlink ( string $target , string $link )}
lappend lKeywords1 {syslog|bool syslog ( int $priority , string $message )}
lappend lKeywords1 {system|string system ( string $command [, int &$return_var ] )}
lappend lKeywords1 {sys_getloadavg|array sys_getloadavg ( void )}
lappend lKeywords1 {sys_get_temp_dir|string sys_get_temp_dir ( void )}
lappend lKeywords1 {taint|bool taint ( string &$string [, string $... ] )}
lappend lKeywords1 {tan|float tan ( float $arg )}
lappend lKeywords1 {tanh|float tanh ( float $arg )}
lappend lKeywords1 {tcpwrap_check|bool tcpwrap_check ( string $daemon , string $address [, string $user [, bool $nodns = false ]] )}
lappend lKeywords1 {tempnam|string tempnam ( string $dir , string $prefix )}
lappend lKeywords1 {textdomain|string textdomain ( string $text_domain = NULL )}
lappend lKeywords1 {time|int time ( void )}
lappend lKeywords1 {time_nanosleep|mixed time_nanosleep ( int $seconds , int $nanoseconds )}
lappend lKeywords1 {time_sleep_until|bool time_sleep_until ( float $timestamp )}
lappend lKeywords1 {tmpfile|resource tmpfile ( void )}
lappend lKeywords1 {token_get_all|array token_get_all ( string $source [, int $flags = 0 ] )}
lappend lKeywords1 {token_name|string token_name ( int $token )}
lappend lKeywords1 {touch|bool touch ( string $filename [, int $time = time() [, int $atime ]] )}
lappend lKeywords1 {trigger_error|bool trigger_error ( string $error_msg [, int $error_type = E_USER_NOTICE ] )}
lappend lKeywords1 {trim|string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] )}
lappend lKeywords1 {uasort|bool uasort ( array &$array , callable $value_compare_func )}
lappend lKeywords1 {ucfirst|string ucfirst ( string $str )}
lappend lKeywords1 {ucwords|string ucwords ( string $str [, string $delimiters = " \t\r\n\f\v" ] )}
lappend lKeywords1 {uksort|bool uksort ( array &$array , callable $key_compare_func )}
lappend lKeywords1 {umask|int umask ([ int $mask ] )}
lappend lKeywords1 {uniqid|string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )}
lappend lKeywords1 {unixtojd|int unixtojd ([ int $timestamp = time() ] )}
lappend lKeywords1 {unlink|bool unlink ( string $filename [, resource $context ] )}
lappend lKeywords1 {unpack|array unpack ( string $format , string $data )}
lappend lKeywords1 {unregister_tick_function|void unregister_tick_function ( string $function_name )}
lappend lKeywords1 {unserialize|mixed unserialize ( string $str [, array $options ] )}
lappend lKeywords1 {untaint|bool untaint ( string &$string [, string $... ] )}
lappend lKeywords1 {urldecode|string urldecode ( string $str )}
lappend lKeywords1 {urlencode|string urlencode ( string $str )}
lappend lKeywords1 {user_error|alias of: trigger_error()}
lappend lKeywords1 {use_soap_error_handler|bool use_soap_error_handler ([ bool $handler = true ] )}
lappend lKeywords1 {usleep|void usleep ( int $micro_seconds )}
lappend lKeywords1 {usort|bool usort ( array &$array , callable $value_compare_func )}
lappend lKeywords1 {utf8_decode|string utf8_decode ( string $data )}
lappend lKeywords1 {utf8_encode|string utf8_encode ( string $data )}
lappend lKeywords1 {var_export|mixed var_export ( mixed $expression [, bool $return = false ] )}
lappend lKeywords1 {version_compare|mixed version_compare ( string $version1 , string $version2 [, string $operator ] )}
lappend lKeywords1 {vfprintf|int vfprintf ( resource $handle , string $format , array $args )}
lappend lKeywords1 {virtual|bool virtual ( string $filename )}
lappend lKeywords1 {vprintf|int vprintf ( string $format , array $args )}
lappend lKeywords1 {vsprintf|string vsprintf ( string $format , array $args )}
lappend lKeywords1 {wordwrap|string wordwrap ( string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = false ]]] )}


################################################################################
# Color #2
#  - $lKeywords2  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart2 :: char   :: all words starting with this character matches
#  - $sChars2     :: string :: every char in string matches
#  - $sRegexp2    :: regexp :: regular expression in Tcl style
lappend lKeywords2 {apache_child_terminate|bool apache_child_terminate ( void )}
lappend lKeywords2 {apache_getenv|string apache_getenv ( string $variable [, bool $walk_to_top = false ] )}
lappend lKeywords2 {apache_get_modules|array apache_get_modules ( void )}
lappend lKeywords2 {apache_get_version|string apache_get_version ( void )}
lappend lKeywords2 {apache_lookup_uri|object apache_lookup_uri ( string $filename )}
lappend lKeywords2 {apache_note|string apache_note ( string $note_name [, string $note_value = "" ] )}
lappend lKeywords2 {apache_request_headers|array apache_request_headers ( void )}
lappend lKeywords2 {apache_reset_timeout|bool apache_reset_timeout ( void )}
lappend lKeywords2 {apache_response_headers|array apache_response_headers ( void )}
lappend lKeywords2 {apache_setenv|bool apache_setenv ( string $variable , string $value [, bool $walk_to_top = false ] )}
lappend lKeywords2 {apcu_add|bool apcu_add ( string $key , mixed $var [, int $ttl = 0 ] )
array apcu_add ( array $values [, mixed $unused = NULL [, int $ttl = 0 ]] )}
lappend lKeywords2 {apcu_cache_info|array apcu_cache_info ([ bool $limited = false ] )}
lappend lKeywords2 {apcu_cas|bool apcu_cas ( string $key , int $old , int $new )}
lappend lKeywords2 {apcu_clear_cache|bool apcu_clear_cache ( void )}
lappend lKeywords2 {apcu_dec|int apcu_dec ( string $key [, int $step = 1 [, bool &$success ]] )}
lappend lKeywords2 {apcu_delete|bool apcu_delete ( mixed $key )}
lappend lKeywords2 {apcu_entry|mixed apcu_entry ( string $key , callable $generator [, int $ttl = 0 ] )}
lappend lKeywords2 {apcu_fetch|mixed apcu_fetch ( mixed $key [, bool &$success ] )}
lappend lKeywords2 {apcu_inc|int apcu_inc ( string $key [, int $step = 1 [, bool &$success ]] )}
lappend lKeywords2 {apcu_sma_info|array apcu_sma_info ([ bool $limited = false ] )}
lappend lKeywords2 {apcu_store|bool apcu_store ( string $key , mixed $var [, int $ttl = 0 ] )
array apcu_store ( array $values [, mixed $unused = NULL [, int $ttl = 0 ]] )}
lappend lKeywords2 {apc_add}
lappend lKeywords2 {apc_bin_dump}
lappend lKeywords2 {apc_bin_dumpfile}
lappend lKeywords2 {apc_bin_load}
lappend lKeywords2 {apc_bin_loadfile}
lappend lKeywords2 {apc_cache_info}
lappend lKeywords2 {apc_cas}
lappend lKeywords2 {apc_clear_cache}
lappend lKeywords2 {apc_compile_file}
lappend lKeywords2 {apc_dec}
lappend lKeywords2 {apc_define_constants}
lappend lKeywords2 {apc_delete}
lappend lKeywords2 {apc_delete_file}
lappend lKeywords2 {apc_fetch}
lappend lKeywords2 {apc_inc}
lappend lKeywords2 {apc_load_constants}
lappend lKeywords2 {apc_sma_info}
lappend lKeywords2 {apc_store}
lappend lKeywords2 {apd_breakpoint}
lappend lKeywords2 {apd_callstack}
lappend lKeywords2 {apd_clunk}
lappend lKeywords2 {apd_continue}
lappend lKeywords2 {apd_croak}
lappend lKeywords2 {apd_dump_function_table}
lappend lKeywords2 {apd_dump_persistent_resources}
lappend lKeywords2 {apd_dump_regular_resources}
lappend lKeywords2 {apd_echo}
lappend lKeywords2 {apd_get_active_symbols}
lappend lKeywords2 {apd_set_pprof_trace}
lappend lKeywords2 {apd_set_session}
lappend lKeywords2 {apd_set_session_trace}
lappend lKeywords2 {apd_set_session_trace_socket}
lappend lKeywords2 {array_change_key_case|array array_change_key_case ( array $array [, int $case = CASE_LOWER ] )}
lappend lKeywords2 {array_chunk|array array_chunk ( array $array , int $size [, bool $preserve_keys = false ] )}
lappend lKeywords2 {array_column|array array_column ( array $input , mixed $column_key [, mixed $index_key = null ] )}
lappend lKeywords2 {array_combine|array array_combine ( array $keys , array $values )}
lappend lKeywords2 {array_count_values|array array_count_values ( array $array )}
lappend lKeywords2 {array_diff|array array_diff ( array $array1 , array $array2 [, array $... ] )}
lappend lKeywords2 {array_diff_assoc|array array_diff_assoc ( array $array1 , array $array2 [, array $... ] )}
lappend lKeywords2 {array_diff_key|array array_diff_key ( array $array1 , array $array2 [, array $... ] )}
lappend lKeywords2 {array_diff_uassoc|array array_diff_uassoc ( array $array1 , array $array2 [, array $... ], callable $key_compare_func )}
lappend lKeywords2 {array_diff_ukey|array array_diff_ukey ( array $array1 , array $array2 [, array $... ], callable $key_compare_func )}
lappend lKeywords2 {array_fill|array array_fill ( int $start_index , int $num , mixed $value )}
lappend lKeywords2 {array_fill_keys|array array_fill_keys ( array $keys , mixed $value )}
lappend lKeywords2 {array_filter|array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )}
lappend lKeywords2 {array_flip|array array_flip ( array $array )}
lappend lKeywords2 {array_intersect|array array_intersect ( array $array1 , array $array2 [, array $... ] )}
lappend lKeywords2 {array_intersect_assoc|array array_intersect_assoc ( array $array1 , array $array2 [, array $... ] )}
lappend lKeywords2 {array_intersect_key|array array_intersect_key ( array $array1 , array $array2 [, array $... ] )}
lappend lKeywords2 {array_intersect_uassoc|array array_intersect_uassoc ( array $array1 , array $array2 [, array $... ], callable $key_compare_func )}
lappend lKeywords2 {array_intersect_ukey|array array_intersect_ukey ( array $array1 , array $array2 [, array $... ], callable $key_compare_func )}
lappend lKeywords2 {array_keys|array array_keys ( array $array [, mixed $search_value = null [, bool $strict = false ]] )}
lappend lKeywords2 {array_map|array array_map ( callable $callback , array $array1 [, array $... ] )}
lappend lKeywords2 {array_merge|array array_merge ( array $array1 [, array $... ] )}
lappend lKeywords2 {array_merge_recursive|array array_merge_recursive ( array $array1 [, array $... ] )}
lappend lKeywords2 {array_multisort|bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )}
lappend lKeywords2 {array_pad|array array_pad ( array $array , int $size , mixed $value )}
lappend lKeywords2 {array_pop|mixed array_pop ( array &$array )}
lappend lKeywords2 {array_product|number array_product ( array $array )}
lappend lKeywords2 {array_push|int array_push ( array &$array , mixed $value1 [, mixed $... ] )}
lappend lKeywords2 {array_rand|mixed array_rand ( array $array [, int $num = 1 ] )}
lappend lKeywords2 {array_reduce|mixed array_reduce ( array $array , callable $callback [, mixed $initial = NULL ] )}
lappend lKeywords2 {array_replace|array array_replace ( array $array1 , array $array2 [, array $... ] )}
lappend lKeywords2 {array_replace_recursive|array array_replace_recursive ( array $array1 , array $array2 [, array $... ] )}
lappend lKeywords2 {array_reverse|array array_reverse ( array $array [, bool $preserve_keys = false ] )}
lappend lKeywords2 {array_search|mixed array_search ( mixed $needle , array $haystack [, bool $strict = false ] )}
lappend lKeywords2 {array_shift|mixed array_shift ( array &$array )}
lappend lKeywords2 {array_slice|array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )}
lappend lKeywords2 {array_splice|array array_splice ( array &$input , int $offset [, int $length = count($input) [, mixed $replacement = array() ]] )}
lappend lKeywords2 {array_sum|number array_sum ( array $array )}
lappend lKeywords2 {array_udiff|array array_udiff ( array $array1 , array $array2 [, array $... ], callable $value_compare_func )}
lappend lKeywords2 {array_udiff_assoc|array array_udiff_assoc ( array $array1 , array $array2 [, array $... ], callable $value_compare_func )}
lappend lKeywords2 {array_udiff_uassoc|array array_udiff_uassoc ( array $array1 , array $array2 [, array $... ], callable $value_compare_func , callable $key_compare_func )}
lappend lKeywords2 {array_uintersect|array array_uintersect ( array $array1 , array $array2 [, array $... ], callable $value_compare_func )}
lappend lKeywords2 {array_uintersect_assoc|array array_uintersect_assoc ( array $array1 , array $array2 [, array $... ], callable $value_compare_func )}
lappend lKeywords2 {array_uintersect_uassoc|array array_uintersect_uassoc ( array $array1 , array $array2 [, array $... ], callable $value_compare_func , callable $key_compare_func )}
lappend lKeywords2 {array_unique|array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )}
lappend lKeywords2 {array_unshift|int array_unshift ( array &$array , mixed $value1 [, mixed $... ] )}
lappend lKeywords2 {array_values|array array_values ( array $array )}
lappend lKeywords2 {array_walk|bool array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] )}
lappend lKeywords2 {array_walk_recursive|bool array_walk_recursive ( array &$array , callable $callback [, mixed $userdata = NULL ] )}
lappend lKeywords2 {bbcode_add_element}
lappend lKeywords2 {bbcode_add_smiley}
lappend lKeywords2 {bbcode_create}
lappend lKeywords2 {bbcode_destroy}
lappend lKeywords2 {bbcode_parse}
lappend lKeywords2 {bbcode_set_arg_parser}
lappend lKeywords2 {bbcode_set_flags}
lappend lKeywords2 {bcompiler_load}
lappend lKeywords2 {bcompiler_load_exe}
lappend lKeywords2 {bcompiler_parse_class}
lappend lKeywords2 {bcompiler_read}
lappend lKeywords2 {bcompiler_write_class}
lappend lKeywords2 {bcompiler_write_constant}
lappend lKeywords2 {bcompiler_write_exe_footer}
lappend lKeywords2 {bcompiler_write_file}
lappend lKeywords2 {bcompiler_write_footer}
lappend lKeywords2 {bcompiler_write_function}
lappend lKeywords2 {bcompiler_write_functions_from_file}
lappend lKeywords2 {bcompiler_write_header}
lappend lKeywords2 {bcompiler_write_included_filename}
lappend lKeywords2 {cairo_create}
lappend lKeywords2 {cairo_font_face_get_type}
lappend lKeywords2 {cairo_font_options_create}
lappend lKeywords2 {cairo_font_options_equal}
lappend lKeywords2 {cairo_font_options_get_antialias}
lappend lKeywords2 {cairo_font_options_get_hint_metrics}
lappend lKeywords2 {cairo_font_options_get_hint_style}
lappend lKeywords2 {cairo_font_options_get_subpixel_order}
lappend lKeywords2 {cairo_font_options_hash}
lappend lKeywords2 {cairo_font_options_merge}
lappend lKeywords2 {cairo_font_options_set_antialias}
lappend lKeywords2 {cairo_font_options_set_hint_metrics}
lappend lKeywords2 {cairo_font_options_set_hint_style}
lappend lKeywords2 {cairo_font_options_set_subpixel_order}
lappend lKeywords2 {cairo_font_options_status}
lappend lKeywords2 {cairo_format_stride_for_width}
lappend lKeywords2 {cairo_image_surface_create}
lappend lKeywords2 {cairo_image_surface_create_for_data}
lappend lKeywords2 {cairo_image_surface_create_from_png}
lappend lKeywords2 {cairo_image_surface_get_data}
lappend lKeywords2 {cairo_image_surface_get_format}
lappend lKeywords2 {cairo_image_surface_get_height}
lappend lKeywords2 {cairo_image_surface_get_stride}
lappend lKeywords2 {cairo_image_surface_get_width}
lappend lKeywords2 {cairo_matrix_create_translate}
lappend lKeywords2 {cairo_matrix_invert}
lappend lKeywords2 {cairo_matrix_multiply}
lappend lKeywords2 {cairo_matrix_rotate}
lappend lKeywords2 {cairo_matrix_transform_distance}
lappend lKeywords2 {cairo_matrix_transform_point}
lappend lKeywords2 {cairo_matrix_translate}
lappend lKeywords2 {cairo_pattern_add_color_stop_rgb}
lappend lKeywords2 {cairo_pattern_add_color_stop_rgba}
lappend lKeywords2 {cairo_pattern_create_for_surface}
lappend lKeywords2 {cairo_pattern_create_linear}
lappend lKeywords2 {cairo_pattern_create_radial}
lappend lKeywords2 {cairo_pattern_create_rgb}
lappend lKeywords2 {cairo_pattern_create_rgba}
lappend lKeywords2 {cairo_pattern_get_color_stop_count}
lappend lKeywords2 {cairo_pattern_get_color_stop_rgba}
lappend lKeywords2 {cairo_pattern_get_extend}
lappend lKeywords2 {cairo_pattern_get_filter}
lappend lKeywords2 {cairo_pattern_get_linear_points}
lappend lKeywords2 {cairo_pattern_get_matrix}
lappend lKeywords2 {cairo_pattern_get_radial_circles}
lappend lKeywords2 {cairo_pattern_get_rgba}
lappend lKeywords2 {cairo_pattern_get_surface}
lappend lKeywords2 {cairo_pattern_get_type}
lappend lKeywords2 {cairo_pattern_set_extend}
lappend lKeywords2 {cairo_pattern_set_filter}
lappend lKeywords2 {cairo_pattern_set_matrix}
lappend lKeywords2 {cairo_pattern_status}
lappend lKeywords2 {cairo_pdf_surface_create}
lappend lKeywords2 {cairo_pdf_surface_set_size}
lappend lKeywords2 {cairo_ps_get_levels}
lappend lKeywords2 {cairo_ps_level_to_string}
lappend lKeywords2 {cairo_ps_surface_create}
lappend lKeywords2 {cairo_ps_surface_dsc_begin_page_setup}
lappend lKeywords2 {cairo_ps_surface_dsc_begin_setup}
lappend lKeywords2 {cairo_ps_surface_dsc_comment}
lappend lKeywords2 {cairo_ps_surface_get_eps}
lappend lKeywords2 {cairo_ps_surface_restrict_to_level}
lappend lKeywords2 {cairo_ps_surface_set_eps}
lappend lKeywords2 {cairo_ps_surface_set_size}
lappend lKeywords2 {cairo_scaled_font_create}
lappend lKeywords2 {cairo_scaled_font_extents}
lappend lKeywords2 {cairo_scaled_font_get_ctm}
lappend lKeywords2 {cairo_scaled_font_get_font_face}
lappend lKeywords2 {cairo_scaled_font_get_font_matrix}
lappend lKeywords2 {cairo_scaled_font_get_font_options}
lappend lKeywords2 {cairo_scaled_font_get_scale_matrix}
lappend lKeywords2 {cairo_scaled_font_get_type}
lappend lKeywords2 {cairo_scaled_font_glyph_extents}
lappend lKeywords2 {cairo_scaled_font_status}
lappend lKeywords2 {cairo_scaled_font_text_extents}
lappend lKeywords2 {cairo_surface_copy_page}
lappend lKeywords2 {cairo_surface_create_similar}
lappend lKeywords2 {cairo_surface_finish}
lappend lKeywords2 {cairo_surface_flush}
lappend lKeywords2 {cairo_surface_get_content}
lappend lKeywords2 {cairo_surface_get_device_offset}
lappend lKeywords2 {cairo_surface_get_font_options}
lappend lKeywords2 {cairo_surface_get_type}
lappend lKeywords2 {cairo_surface_mark_dirty}
lappend lKeywords2 {cairo_surface_mark_dirty_rectangle}
lappend lKeywords2 {cairo_surface_set_device_offset}
lappend lKeywords2 {cairo_surface_set_fallback_resolution}
lappend lKeywords2 {cairo_surface_show_page}
lappend lKeywords2 {cairo_surface_status}
lappend lKeywords2 {cairo_surface_write_to_png}
lappend lKeywords2 {cairo_svg_surface_create}
lappend lKeywords2 {cairo_svg_surface_restrict_to_version}
lappend lKeywords2 {cairo_svg_version_to_string}
lappend lKeywords2 {call_user_func|mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )}
lappend lKeywords2 {call_user_func_array|mixed call_user_func_array ( callable $callback , array $param_arr )}
lappend lKeywords2 {cal_days_in_month|int cal_days_in_month ( int $calendar , int $month , int $year )}
lappend lKeywords2 {cal_from_jd|array cal_from_jd ( int $jd , int $calendar )}
lappend lKeywords2 {cal_info|array cal_info ([ int $calendar = -1 ] )}
lappend lKeywords2 {cal_to_jd|int cal_to_jd ( int $calendar , int $month , int $day , int $year )}
lappend lKeywords2 {classkit_import|array classkit_import ( string $filename )}
lappend lKeywords2 {classkit_method_add|bool classkit_method_add ( string $classname , string $methodname , string $args , string $code [, int $flags = CLASSKIT_ACC_PUBLIC ] )}
lappend lKeywords2 {classkit_method_copy|bool classkit_method_copy ( string $dClass , string $dMethod , string $sClass [, string $sMethod ] )}
lappend lKeywords2 {classkit_method_redefine|bool classkit_method_redefine ( string $classname , string $methodname , string $args , string $code [, int $flags = CLASSKIT_ACC_PUBLIC ] )}
lappend lKeywords2 {classkit_method_remove|bool classkit_method_remove ( string $classname , string $methodname )}
lappend lKeywords2 {classkit_method_rename|bool classkit_method_rename ( string $classname , string $methodname , string $newname )}
lappend lKeywords2 {class_alias|bool class_alias ( string $original , string $alias [, bool $autoload = TRUE ] )}
lappend lKeywords2 {class_implements|array class_implements ( mixed $class [, bool $autoload = true ] )}
lappend lKeywords2 {class_parents|array class_parents ( mixed $class [, bool $autoload = true ] )}
lappend lKeywords2 {class_uses|array class_uses ( mixed $class [, bool $autoload = true ] )}
lappend lKeywords2 {cli_get_process_title|string cli_get_process_title ( void )}
lappend lKeywords2 {cli_set_process_title|bool cli_set_process_title ( string $title )}
lappend lKeywords2 {com_create_guid|string com_create_guid ( void )}
lappend lKeywords2 {com_event_sink|bool com_event_sink ( variant $comobject , object $sinkobject [, mixed $sinkinterface ] )}
lappend lKeywords2 {com_get_active_object|variant com_get_active_object ( string $progid [, int $code_page ] )}
lappend lKeywords2 {com_load_typelib|bool com_load_typelib ( string $typelib_name [, bool $case_insensitive = true ] )}
lappend lKeywords2 {com_message_pump|bool com_message_pump ([ int $timeoutms = 0 ] )}
lappend lKeywords2 {com_print_typeinfo|bool com_print_typeinfo ( object $comobject [, string $dispinterface [, bool $wantsink = false ]] )}
lappend lKeywords2 {crack_check|bool crack_check ( resource $dictionary , string $password )
bool crack_check ( string $password , string $username = "" , string $gecos = "" , resource $dictionary = NULL )}
lappend lKeywords2 {crack_closedict|bool crack_closedict ([ resource $dictionary ] )}
lappend lKeywords2 {crack_getlastmessage|string crack_getlastmessage ( void )}
lappend lKeywords2 {crack_opendict|resource crack_opendict ( string $dictionary )}
lappend lKeywords2 {ctype_alnum}
lappend lKeywords2 {ctype_alpha}
lappend lKeywords2 {ctype_cntrl}
lappend lKeywords2 {ctype_digit}
lappend lKeywords2 {ctype_graph}
lappend lKeywords2 {ctype_lower}
lappend lKeywords2 {ctype_print}
lappend lKeywords2 {ctype_punct}
lappend lKeywords2 {ctype_space}
lappend lKeywords2 {ctype_upper}
lappend lKeywords2 {ctype_xdigit}
lappend lKeywords2 {curl_close}
lappend lKeywords2 {curl_copy_handle}
lappend lKeywords2 {curl_errno}
lappend lKeywords2 {curl_error}
lappend lKeywords2 {curl_escape}
lappend lKeywords2 {curl_exec}
lappend lKeywords2 {curl_getinfo}
lappend lKeywords2 {curl_init}
lappend lKeywords2 {curl_multi_add_handle}
lappend lKeywords2 {curl_multi_close}
lappend lKeywords2 {curl_multi_errno}
lappend lKeywords2 {curl_multi_exec}
lappend lKeywords2 {curl_multi_getcontent}
lappend lKeywords2 {curl_multi_info_read}
lappend lKeywords2 {curl_multi_init}
lappend lKeywords2 {curl_multi_remove_handle}
lappend lKeywords2 {curl_multi_select}
lappend lKeywords2 {curl_multi_setopt}
lappend lKeywords2 {curl_multi_strerror}
lappend lKeywords2 {curl_pause}
lappend lKeywords2 {curl_reset}
lappend lKeywords2 {curl_setopt}
lappend lKeywords2 {curl_setopt_array}
lappend lKeywords2 {curl_share_close}
lappend lKeywords2 {curl_share_errno}
lappend lKeywords2 {curl_share_init}
lappend lKeywords2 {curl_share_setopt}
lappend lKeywords2 {curl_share_strerror}
lappend lKeywords2 {curl_strerror}
lappend lKeywords2 {curl_unescape}
lappend lKeywords2 {curl_version}
lappend lKeywords2 {cyrus_authenticate}
lappend lKeywords2 {cyrus_bind}
lappend lKeywords2 {cyrus_close}
lappend lKeywords2 {cyrus_connect}
lappend lKeywords2 {cyrus_query}
lappend lKeywords2 {cyrus_unbind}
lappend lKeywords2 {date_add|alias of: DateTime::add()}
lappend lKeywords2 {date_create|alias of: DateTime::__construct()}
lappend lKeywords2 {date_create_from_format|alias of: DateTime::createFromFormat()}
lappend lKeywords2 {date_create_immutable|alias of: DateTimeImmutable::__construct()}
lappend lKeywords2 {date_create_immutable_from_format|alias of: DateTimeImmutable::createFromFormat()}
lappend lKeywords2 {date_date_set|alias of: DateTime::setDate()}
lappend lKeywords2 {date_default_timezone_get|string date_default_timezone_get ( void )}
lappend lKeywords2 {date_default_timezone_set|bool date_default_timezone_set ( string $timezone_identifier )}
lappend lKeywords2 {date_diff|alias of: DateTime::diff()}
lappend lKeywords2 {date_format|alias of: DateTime::format()}
lappend lKeywords2 {date_get_last_errors|alias of: DateTime::getLastErrors()}
lappend lKeywords2 {date_interval_create_from_date_string|alias of: DateInterval::createFromDateString()}
lappend lKeywords2 {date_interval_format|alias of: DateInterval::format()}
lappend lKeywords2 {date_isodate_set|alias of: DateTime::setISODate()}
lappend lKeywords2 {date_modify|alias of: DateTime::modify()}
lappend lKeywords2 {date_offset_get|alias of: DateTime::getOffset()}
lappend lKeywords2 {date_parse|array date_parse ( string $date )}
lappend lKeywords2 {date_parse_from_format|array date_parse_from_format ( string $format , string $date )}
lappend lKeywords2 {date_sub|alias of: DateTime::sub()}
lappend lKeywords2 {date_sunrise|mixed date_sunrise ( int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get("date.default_latitude") [, float $longitude = ini_get("date.default_longitude") [, float $zenith = ini_get("date.sunrise_zenith") [, float $gmt_offset = 0 ]]]]] )}
lappend lKeywords2 {date_sunset|mixed date_sunset ( int $timestamp [, int $format = SUNFUNCS_RET_STRING [, float $latitude = ini_get("date.default_latitude") [, float $longitude = ini_get("date.default_longitude") [, float $zenith = ini_get("date.sunset_zenith") [, float $gmt_offset = 0 ]]]]] )}
lappend lKeywords2 {date_sun_info|array date_sun_info ( int $time , float $latitude , float $longitude )}
lappend lKeywords2 {date_timestamp_get|alias of: DateTime::getTimestamp()}
lappend lKeywords2 {date_timestamp_set|alias of: DateTime::setTimestamp()}
lappend lKeywords2 {date_timezone_get|alias of: DateTime::getTimezone()}
lappend lKeywords2 {date_timezone_set|alias of: DateTime::setTimezone()}
lappend lKeywords2 {date_time_set|alias of: DateTime::setTime()}
lappend lKeywords2 {dio_close}
lappend lKeywords2 {dio_fcntl}
lappend lKeywords2 {dio_open}
lappend lKeywords2 {dio_read}
lappend lKeywords2 {dio_seek}
lappend lKeywords2 {dio_stat}
lappend lKeywords2 {dio_tcsetattr}
lappend lKeywords2 {dio_truncate}
lappend lKeywords2 {dio_write}
lappend lKeywords2 {eio_busy}
lappend lKeywords2 {eio_cancel}
lappend lKeywords2 {eio_chmod}
lappend lKeywords2 {eio_chown}
lappend lKeywords2 {eio_close}
lappend lKeywords2 {eio_custom}
lappend lKeywords2 {eio_dup2}
lappend lKeywords2 {eio_event_loop}
lappend lKeywords2 {eio_fallocate}
lappend lKeywords2 {eio_fchmod}
lappend lKeywords2 {eio_fchown}
lappend lKeywords2 {eio_fdatasync}
lappend lKeywords2 {eio_fstat}
lappend lKeywords2 {eio_fstatvfs}
lappend lKeywords2 {eio_fsync}
lappend lKeywords2 {eio_ftruncate}
lappend lKeywords2 {eio_futime}
lappend lKeywords2 {eio_get_event_stream}
lappend lKeywords2 {eio_get_last_error}
lappend lKeywords2 {eio_grp}
lappend lKeywords2 {eio_grp_add}
lappend lKeywords2 {eio_grp_cancel}
lappend lKeywords2 {eio_grp_limit}
lappend lKeywords2 {eio_init}
lappend lKeywords2 {eio_link}
lappend lKeywords2 {eio_lstat}
lappend lKeywords2 {eio_mkdir}
lappend lKeywords2 {eio_mknod}
lappend lKeywords2 {eio_nop}
lappend lKeywords2 {eio_npending}
lappend lKeywords2 {eio_nready}
lappend lKeywords2 {eio_nreqs}
lappend lKeywords2 {eio_nthreads}
lappend lKeywords2 {eio_open}
lappend lKeywords2 {eio_poll}
lappend lKeywords2 {eio_read}
lappend lKeywords2 {eio_readahead}
lappend lKeywords2 {eio_readdir}
lappend lKeywords2 {eio_readlink}
lappend lKeywords2 {eio_realpath}
lappend lKeywords2 {eio_rename}
lappend lKeywords2 {eio_rmdir}
lappend lKeywords2 {eio_seek}
lappend lKeywords2 {eio_sendfile}
lappend lKeywords2 {eio_set_max_idle}
lappend lKeywords2 {eio_set_max_parallel}
lappend lKeywords2 {eio_set_max_poll_reqs}
lappend lKeywords2 {eio_set_max_poll_time}
lappend lKeywords2 {eio_set_min_parallel}
lappend lKeywords2 {eio_stat}
lappend lKeywords2 {eio_statvfs}
lappend lKeywords2 {eio_symlink}
lappend lKeywords2 {eio_sync}
lappend lKeywords2 {eio_syncfs}
lappend lKeywords2 {eio_sync_file_range}
lappend lKeywords2 {eio_truncate}
lappend lKeywords2 {eio_unlink}
lappend lKeywords2 {eio_utime}
lappend lKeywords2 {eio_write}
lappend lKeywords2 {enchant_broker_describe}
lappend lKeywords2 {enchant_broker_free}
lappend lKeywords2 {enchant_broker_free_dict}
lappend lKeywords2 {enchant_broker_get_dict_path}
lappend lKeywords2 {enchant_broker_get_error}
lappend lKeywords2 {enchant_broker_init}
lappend lKeywords2 {enchant_broker_list_dicts}
lappend lKeywords2 {enchant_broker_request_dict}
lappend lKeywords2 {enchant_broker_request_pwl_dict}
lappend lKeywords2 {enchant_broker_set_dict_path}
lappend lKeywords2 {enchant_broker_set_ordering}
lappend lKeywords2 {enchant_dict_add_to_personal}
lappend lKeywords2 {enchant_dict_add_to_session}
lappend lKeywords2 {enchant_dict_check}
lappend lKeywords2 {enchant_dict_describe}
lappend lKeywords2 {enchant_dict_get_error}
lappend lKeywords2 {enchant_dict_is_in_session}
lappend lKeywords2 {enchant_dict_quick_check}
lappend lKeywords2 {enchant_dict_store_replacement}
lappend lKeywords2 {enchant_dict_suggest}
lappend lKeywords2 {event_base_free}
lappend lKeywords2 {event_base_loop}
lappend lKeywords2 {event_base_loopbreak}
lappend lKeywords2 {event_base_loopexit}
lappend lKeywords2 {event_base_new}
lappend lKeywords2 {event_base_priority_init}
lappend lKeywords2 {event_base_reinit}
lappend lKeywords2 {event_base_set}
lappend lKeywords2 {event_buffer_base_set}
lappend lKeywords2 {event_buffer_disable}
lappend lKeywords2 {event_buffer_enable}
lappend lKeywords2 {event_buffer_fd_set}
lappend lKeywords2 {event_buffer_free}
lappend lKeywords2 {event_buffer_new}
lappend lKeywords2 {event_buffer_priority_set}
lappend lKeywords2 {event_buffer_read}
lappend lKeywords2 {event_buffer_set_callback}
lappend lKeywords2 {event_buffer_timeout_set}
lappend lKeywords2 {event_buffer_watermark_set}
lappend lKeywords2 {event_buffer_write}
lappend lKeywords2 {event_new}
lappend lKeywords2 {event_priority_set}
lappend lKeywords2 {event_timer_add}
lappend lKeywords2 {event_timer_del}
lappend lKeywords2 {event_timer_new}
lappend lKeywords2 {event_timer_set}
lappend lKeywords2 {fam_cancel_monitor}
lappend lKeywords2 {fam_close}
lappend lKeywords2 {fam_monitor_collection}
lappend lKeywords2 {fam_monitor_directory}
lappend lKeywords2 {fam_monitor_file}
lappend lKeywords2 {fam_next_event}
lappend lKeywords2 {fam_open}
lappend lKeywords2 {fam_pending}
lappend lKeywords2 {fam_resume_monitor}
lappend lKeywords2 {fam_suspend_monitor}
lappend lKeywords2 {fann_cascadetrain_on_data}
lappend lKeywords2 {fann_cascadetrain_on_file}
lappend lKeywords2 {fann_clear_scaling_params}
lappend lKeywords2 {fann_copy}
lappend lKeywords2 {fann_create_from_file}
lappend lKeywords2 {fann_create_shortcut}
lappend lKeywords2 {fann_create_shortcut_array}
lappend lKeywords2 {fann_create_sparse}
lappend lKeywords2 {fann_create_sparse_array}
lappend lKeywords2 {fann_create_standard}
lappend lKeywords2 {fann_create_standard_array}
lappend lKeywords2 {fann_create_train}
lappend lKeywords2 {fann_create_train_from_callback}
lappend lKeywords2 {fann_descale_input}
lappend lKeywords2 {fann_descale_output}
lappend lKeywords2 {fann_descale_train}
lappend lKeywords2 {fann_destroy}
lappend lKeywords2 {fann_destroy_train}
lappend lKeywords2 {fann_duplicate_train_data}
lappend lKeywords2 {fann_get_activation_function}
lappend lKeywords2 {fann_get_activation_steepness}
lappend lKeywords2 {fann_get_bias_array}
lappend lKeywords2 {fann_get_bit_fail}
lappend lKeywords2 {fann_get_bit_fail_limit}
lappend lKeywords2 {fann_get_cascade_activation_functions}
lappend lKeywords2 {fann_get_cascade_activation_functions_count}
lappend lKeywords2 {fann_get_cascade_activation_steepnesses}
lappend lKeywords2 {fann_get_cascade_activation_steepnesses_count}
lappend lKeywords2 {fann_get_cascade_candidate_change_fraction}
lappend lKeywords2 {fann_get_cascade_candidate_limit}
lappend lKeywords2 {fann_get_cascade_candidate_stagnation_epochs}
lappend lKeywords2 {fann_get_cascade_max_cand_epochs}
lappend lKeywords2 {fann_get_cascade_max_out_epochs}
lappend lKeywords2 {fann_get_cascade_min_cand_epochs}
lappend lKeywords2 {fann_get_cascade_min_out_epochs}
lappend lKeywords2 {fann_get_cascade_num_candidates}
lappend lKeywords2 {fann_get_cascade_num_candidate_groups}
lappend lKeywords2 {fann_get_cascade_output_change_fraction}
lappend lKeywords2 {fann_get_cascade_output_stagnation_epochs}
lappend lKeywords2 {fann_get_cascade_weight_multiplier}
lappend lKeywords2 {fann_get_connection_array}
lappend lKeywords2 {fann_get_connection_rate}
lappend lKeywords2 {fann_get_errno}
lappend lKeywords2 {fann_get_errstr}
lappend lKeywords2 {fann_get_layer_array}
lappend lKeywords2 {fann_get_learning_momentum}
lappend lKeywords2 {fann_get_learning_rate}
lappend lKeywords2 {fann_get_MSE}
lappend lKeywords2 {fann_get_network_type}
lappend lKeywords2 {fann_get_num_input}
lappend lKeywords2 {fann_get_num_layers}
lappend lKeywords2 {fann_get_num_output}
lappend lKeywords2 {fann_get_quickprop_decay}
lappend lKeywords2 {fann_get_quickprop_mu}
lappend lKeywords2 {fann_get_rprop_decrease_factor}
lappend lKeywords2 {fann_get_rprop_delta_max}
lappend lKeywords2 {fann_get_rprop_delta_min}
lappend lKeywords2 {fann_get_rprop_delta_zero}
lappend lKeywords2 {fann_get_rprop_increase_factor}
lappend lKeywords2 {fann_get_sarprop_step_error_shift}
lappend lKeywords2 {fann_get_sarprop_step_error_threshold_factor}
lappend lKeywords2 {fann_get_sarprop_temperature}
lappend lKeywords2 {fann_get_sarprop_weight_decay_shift}
lappend lKeywords2 {fann_get_total_connections}
lappend lKeywords2 {fann_get_total_neurons}
lappend lKeywords2 {fann_get_training_algorithm}
lappend lKeywords2 {fann_get_train_error_function}
lappend lKeywords2 {fann_get_train_stop_function}
lappend lKeywords2 {fann_init_weights}
lappend lKeywords2 {fann_length_train_data}
lappend lKeywords2 {fann_merge_train_data}
lappend lKeywords2 {fann_num_input_train_data}
lappend lKeywords2 {fann_num_output_train_data}
lappend lKeywords2 {fann_print_error}
lappend lKeywords2 {fann_randomize_weights}
lappend lKeywords2 {fann_read_train_from_file}
lappend lKeywords2 {fann_reset_errno}
lappend lKeywords2 {fann_reset_errstr}
lappend lKeywords2 {fann_reset_MSE}
lappend lKeywords2 {fann_run}
lappend lKeywords2 {fann_save}
lappend lKeywords2 {fann_save_train}
lappend lKeywords2 {fann_scale_input}
lappend lKeywords2 {fann_scale_input_train_data}
lappend lKeywords2 {fann_scale_output}
lappend lKeywords2 {fann_scale_output_train_data}
lappend lKeywords2 {fann_scale_train}
lappend lKeywords2 {fann_scale_train_data}
lappend lKeywords2 {fann_set_activation_function}
lappend lKeywords2 {fann_set_activation_function_hidden}
lappend lKeywords2 {fann_set_activation_function_layer}
lappend lKeywords2 {fann_set_activation_function_output}
lappend lKeywords2 {fann_set_activation_steepness}
lappend lKeywords2 {fann_set_activation_steepness_hidden}
lappend lKeywords2 {fann_set_activation_steepness_layer}
lappend lKeywords2 {fann_set_activation_steepness_output}
lappend lKeywords2 {fann_set_bit_fail_limit}
lappend lKeywords2 {fann_set_callback}
lappend lKeywords2 {fann_set_cascade_activation_functions}
lappend lKeywords2 {fann_set_cascade_activation_steepnesses}
lappend lKeywords2 {fann_set_cascade_candidate_change_fraction}
lappend lKeywords2 {fann_set_cascade_candidate_limit}
lappend lKeywords2 {fann_set_cascade_candidate_stagnation_epochs}
lappend lKeywords2 {fann_set_cascade_max_cand_epochs}
lappend lKeywords2 {fann_set_cascade_max_out_epochs}
lappend lKeywords2 {fann_set_cascade_min_cand_epochs}
lappend lKeywords2 {fann_set_cascade_min_out_epochs}
lappend lKeywords2 {fann_set_cascade_num_candidate_groups}
lappend lKeywords2 {fann_set_cascade_output_change_fraction}
lappend lKeywords2 {fann_set_cascade_output_stagnation_epochs}
lappend lKeywords2 {fann_set_cascade_weight_multiplier}
lappend lKeywords2 {fann_set_error_log}
lappend lKeywords2 {fann_set_input_scaling_params}
lappend lKeywords2 {fann_set_learning_momentum}
lappend lKeywords2 {fann_set_learning_rate}
lappend lKeywords2 {fann_set_output_scaling_params}
lappend lKeywords2 {fann_set_quickprop_decay}
lappend lKeywords2 {fann_set_quickprop_mu}
lappend lKeywords2 {fann_set_rprop_decrease_factor}
lappend lKeywords2 {fann_set_rprop_delta_max}
lappend lKeywords2 {fann_set_rprop_delta_min}
lappend lKeywords2 {fann_set_rprop_delta_zero}
lappend lKeywords2 {fann_set_rprop_increase_factor}
lappend lKeywords2 {fann_set_sarprop_step_error_shift}
lappend lKeywords2 {fann_set_sarprop_step_error_threshold_factor}
lappend lKeywords2 {fann_set_sarprop_temperature}
lappend lKeywords2 {fann_set_sarprop_weight_decay_shift}
lappend lKeywords2 {fann_set_scaling_params}
lappend lKeywords2 {fann_set_training_algorithm}
lappend lKeywords2 {fann_set_train_error_function}
lappend lKeywords2 {fann_set_train_stop_function}
lappend lKeywords2 {fann_set_weight}
lappend lKeywords2 {fann_set_weight_array}
lappend lKeywords2 {fann_shuffle_train_data}
lappend lKeywords2 {fann_subset_train_data}
lappend lKeywords2 {fann_test}
lappend lKeywords2 {fann_test_data}
lappend lKeywords2 {fann_train}
lappend lKeywords2 {fann_train_epoch}
lappend lKeywords2 {fann_train_on_data}
lappend lKeywords2 {fann_train_on_file}
lappend lKeywords2 {fdf_add_doc_javascript}
lappend lKeywords2 {fdf_add_template}
lappend lKeywords2 {fdf_close}
lappend lKeywords2 {fdf_create}
lappend lKeywords2 {fdf_enum_values}
lappend lKeywords2 {fdf_errno}
lappend lKeywords2 {fdf_error}
lappend lKeywords2 {fdf_get_ap}
lappend lKeywords2 {fdf_get_attachment}
lappend lKeywords2 {fdf_get_encoding}
lappend lKeywords2 {fdf_get_file}
lappend lKeywords2 {fdf_get_flags}
lappend lKeywords2 {fdf_get_opt}
lappend lKeywords2 {fdf_get_status}
lappend lKeywords2 {fdf_get_value}
lappend lKeywords2 {fdf_get_version}
lappend lKeywords2 {fdf_header}
lappend lKeywords2 {fdf_next_field_name}
lappend lKeywords2 {fdf_open}
lappend lKeywords2 {fdf_open_string}
lappend lKeywords2 {fdf_remove_item}
lappend lKeywords2 {fdf_save}
lappend lKeywords2 {fdf_save_string}
lappend lKeywords2 {fdf_set_ap}
lappend lKeywords2 {fdf_set_encoding}
lappend lKeywords2 {fdf_set_file}
lappend lKeywords2 {fdf_set_flags}
lappend lKeywords2 {fdf_set_javascript_action}
lappend lKeywords2 {fdf_set_on_import_javascript}
lappend lKeywords2 {fdf_set_opt}
lappend lKeywords2 {fdf_set_status}
lappend lKeywords2 {fdf_set_submit_form_action}
lappend lKeywords2 {fdf_set_target_frame}
lappend lKeywords2 {fdf_set_value}
lappend lKeywords2 {fdf_set_version}
lappend lKeywords2 {ftp_alloc}
lappend lKeywords2 {ftp_cdup}
lappend lKeywords2 {ftp_chdir}
lappend lKeywords2 {ftp_chmod}
lappend lKeywords2 {ftp_close}
lappend lKeywords2 {ftp_connect}
lappend lKeywords2 {ftp_delete}
lappend lKeywords2 {ftp_exec}
lappend lKeywords2 {ftp_fget}
lappend lKeywords2 {ftp_fput}
lappend lKeywords2 {ftp_get}
lappend lKeywords2 {ftp_get_option}
lappend lKeywords2 {ftp_login}
lappend lKeywords2 {ftp_mdtm}
lappend lKeywords2 {ftp_mkdir}
lappend lKeywords2 {ftp_mlsd}
lappend lKeywords2 {ftp_nb_continue}
lappend lKeywords2 {ftp_nb_fget}
lappend lKeywords2 {ftp_nb_fput}
lappend lKeywords2 {ftp_nb_get}
lappend lKeywords2 {ftp_nb_put}
lappend lKeywords2 {ftp_nlist}
lappend lKeywords2 {ftp_pasv}
lappend lKeywords2 {ftp_put}
lappend lKeywords2 {ftp_pwd}
lappend lKeywords2 {ftp_quit}
lappend lKeywords2 {ftp_raw}
lappend lKeywords2 {ftp_rawlist}
lappend lKeywords2 {ftp_rename}
lappend lKeywords2 {ftp_rmdir}
lappend lKeywords2 {ftp_set_option}
lappend lKeywords2 {ftp_site}
lappend lKeywords2 {ftp_size}
lappend lKeywords2 {ftp_ssl_connect}
lappend lKeywords2 {ftp_systype}
lappend lKeywords2 {get_browser|mixed get_browser ([ string $user_agent [, bool $return_array = false ]] )}
lappend lKeywords2 {get_called_class|string get_called_class ( void )}
lappend lKeywords2 {get_cfg_var|string get_cfg_var ( string $option )}
lappend lKeywords2 {get_class|string get_class ([ object $object ] )}
lappend lKeywords2 {get_class_methods|array get_class_methods ( mixed $class_name )}
lappend lKeywords2 {get_class_vars|array get_class_vars ( string $class_name )}
lappend lKeywords2 {get_current_user|string get_current_user ( void )}
lappend lKeywords2 {get_declared_classes|array get_declared_classes ( void )}
lappend lKeywords2 {get_declared_interfaces|array get_declared_interfaces ( void )}
lappend lKeywords2 {get_declared_traits|array get_declared_traits ( void )}
lappend lKeywords2 {get_defined_constants|array get_defined_constants ([ bool $categorize = false ] )}
lappend lKeywords2 {get_defined_functions|array get_defined_functions ([ bool $exclude_disabled = FALSE ] )}
lappend lKeywords2 {get_defined_vars|array get_defined_vars ( void )}
lappend lKeywords2 {get_extension_funcs|array get_extension_funcs ( string $module_name )}
lappend lKeywords2 {get_headers|array get_headers ( string $url [, int $format = 0 ] )}
lappend lKeywords2 {get_html_translation_table|array get_html_translation_table ([ int $table = HTML_SPECIALCHARS [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = "UTF-8" ]]] )}
lappend lKeywords2 {get_included_files|array get_included_files ( void )}
lappend lKeywords2 {get_include_path|string get_include_path ( void )}
lappend lKeywords2 {get_loaded_extensions|array get_loaded_extensions ([ bool $zend_extensions = false ] )}
lappend lKeywords2 {get_magic_quotes_gpc|bool get_magic_quotes_gpc ( void )}
lappend lKeywords2 {get_magic_quotes_runtime|bool get_magic_quotes_runtime ( void )}
lappend lKeywords2 {get_meta_tags|array get_meta_tags ( string $filename [, bool $use_include_path = false ] )}
lappend lKeywords2 {get_object_vars|array get_object_vars ( object $object )}
lappend lKeywords2 {get_parent_class|string get_parent_class ([ mixed $object ] )}
lappend lKeywords2 {get_required_files|alias of: get_included_files()}
lappend lKeywords2 {get_resources|array get_resources ([ string $type ] )}
lappend lKeywords2 {get_resource_type|string get_resource_type ( resource $handle )}
lappend lKeywords2 {geoip_asnum_by_name}
lappend lKeywords2 {geoip_continent_code_by_name}
lappend lKeywords2 {geoip_country_code3_by_name}
lappend lKeywords2 {geoip_country_code_by_name}
lappend lKeywords2 {geoip_country_name_by_name}
lappend lKeywords2 {geoip_database_info}
lappend lKeywords2 {geoip_db_avail}
lappend lKeywords2 {geoip_db_filename}
lappend lKeywords2 {geoip_db_get_all_info}
lappend lKeywords2 {geoip_domain_by_name}
lappend lKeywords2 {geoip_id_by_name}
lappend lKeywords2 {geoip_isp_by_name}
lappend lKeywords2 {geoip_netspeedcell_by_name}
lappend lKeywords2 {geoip_org_by_name}
lappend lKeywords2 {geoip_record_by_name}
lappend lKeywords2 {geoip_region_by_name}
lappend lKeywords2 {geoip_region_name_by_code}
lappend lKeywords2 {geoip_setup_custom_directory}
lappend lKeywords2 {geoip_time_zone_by_country_and_region}
lappend lKeywords2 {gmp_abs}
lappend lKeywords2 {gmp_add}
lappend lKeywords2 {gmp_and}
lappend lKeywords2 {gmp_clrbit}
lappend lKeywords2 {gmp_cmp}
lappend lKeywords2 {gmp_com}
lappend lKeywords2 {gmp_div}
lappend lKeywords2 {gmp_divexact}
lappend lKeywords2 {gmp_div_q}
lappend lKeywords2 {gmp_div_qr}
lappend lKeywords2 {gmp_div_r}
lappend lKeywords2 {gmp_export}
lappend lKeywords2 {gmp_fact}
lappend lKeywords2 {gmp_gcd}
lappend lKeywords2 {gmp_gcdext}
lappend lKeywords2 {gmp_hamdist}
lappend lKeywords2 {gmp_import}
lappend lKeywords2 {gmp_init}
lappend lKeywords2 {gmp_intval}
lappend lKeywords2 {gmp_invert}
lappend lKeywords2 {gmp_jacobi}
lappend lKeywords2 {gmp_legendre}
lappend lKeywords2 {gmp_mod}
lappend lKeywords2 {gmp_mul}
lappend lKeywords2 {gmp_neg}
lappend lKeywords2 {gmp_nextprime}
lappend lKeywords2 {gmp_or}
lappend lKeywords2 {gmp_perfect_square}
lappend lKeywords2 {gmp_popcount}
lappend lKeywords2 {gmp_pow}
lappend lKeywords2 {gmp_powm}
lappend lKeywords2 {gmp_prob_prime}
lappend lKeywords2 {gmp_random}
lappend lKeywords2 {gmp_random_bits}
lappend lKeywords2 {gmp_random_range}
lappend lKeywords2 {gmp_random_seed}
lappend lKeywords2 {gmp_root}
lappend lKeywords2 {gmp_rootrem}
lappend lKeywords2 {gmp_scan0}
lappend lKeywords2 {gmp_scan1}
lappend lKeywords2 {gmp_setbit}
lappend lKeywords2 {gmp_sign}
lappend lKeywords2 {gmp_sqrt}
lappend lKeywords2 {gmp_sqrtrem}
lappend lKeywords2 {gmp_strval}
lappend lKeywords2 {gmp_sub}
lappend lKeywords2 {gmp_testbit}
lappend lKeywords2 {gmp_xor}
lappend lKeywords2 {gnupg_adddecryptkey}
lappend lKeywords2 {gnupg_addencryptkey}
lappend lKeywords2 {gnupg_addsignkey}
lappend lKeywords2 {gnupg_cleardecryptkeys}
lappend lKeywords2 {gnupg_clearencryptkeys}
lappend lKeywords2 {gnupg_clearsignkeys}
lappend lKeywords2 {gnupg_decrypt}
lappend lKeywords2 {gnupg_decryptverify}
lappend lKeywords2 {gnupg_encrypt}
lappend lKeywords2 {gnupg_encryptsign}
lappend lKeywords2 {gnupg_export}
lappend lKeywords2 {gnupg_geterror}
lappend lKeywords2 {gnupg_getprotocol}
lappend lKeywords2 {gnupg_import}
lappend lKeywords2 {gnupg_init}
lappend lKeywords2 {gnupg_keyinfo}
lappend lKeywords2 {gnupg_setarmor}
lappend lKeywords2 {gnupg_seterrormode}
lappend lKeywords2 {gnupg_setsignmode}
lappend lKeywords2 {gnupg_sign}
lappend lKeywords2 {gnupg_verify}
lappend lKeywords2 {grapheme_extract}
lappend lKeywords2 {grapheme_stripos}
lappend lKeywords2 {grapheme_stristr}
lappend lKeywords2 {grapheme_strlen}
lappend lKeywords2 {grapheme_strpos}
lappend lKeywords2 {grapheme_strripos}
lappend lKeywords2 {grapheme_strrpos}
lappend lKeywords2 {grapheme_strstr}
lappend lKeywords2 {grapheme_substr}
lappend lKeywords2 {gupnp_context_get_host_ip}
lappend lKeywords2 {gupnp_context_get_port}
lappend lKeywords2 {gupnp_context_get_subscription_timeout}
lappend lKeywords2 {gupnp_context_host_path}
lappend lKeywords2 {gupnp_context_new}
lappend lKeywords2 {gupnp_context_set_subscription_timeout}
lappend lKeywords2 {gupnp_context_timeout_add}
lappend lKeywords2 {gupnp_context_unhost_path}
lappend lKeywords2 {gupnp_control_point_browse_start}
lappend lKeywords2 {gupnp_control_point_browse_stop}
lappend lKeywords2 {gupnp_control_point_callback_set}
lappend lKeywords2 {gupnp_control_point_new}
lappend lKeywords2 {gupnp_device_action_callback_set}
lappend lKeywords2 {gupnp_device_info_get}
lappend lKeywords2 {gupnp_device_info_get_service}
lappend lKeywords2 {gupnp_root_device_get_available}
lappend lKeywords2 {gupnp_root_device_get_relative_location}
lappend lKeywords2 {gupnp_root_device_new}
lappend lKeywords2 {gupnp_root_device_set_available}
lappend lKeywords2 {gupnp_root_device_start}
lappend lKeywords2 {gupnp_root_device_stop}
lappend lKeywords2 {gupnp_service_action_get}
lappend lKeywords2 {gupnp_service_action_return}
lappend lKeywords2 {gupnp_service_action_return_error}
lappend lKeywords2 {gupnp_service_action_set}
lappend lKeywords2 {gupnp_service_freeze_notify}
lappend lKeywords2 {gupnp_service_info_get}
lappend lKeywords2 {gupnp_service_info_get_introspection}
lappend lKeywords2 {gupnp_service_introspection_get_state_variable}
lappend lKeywords2 {gupnp_service_notify}
lappend lKeywords2 {gupnp_service_proxy_action_get}
lappend lKeywords2 {gupnp_service_proxy_action_set}
lappend lKeywords2 {gupnp_service_proxy_add_notify}
lappend lKeywords2 {gupnp_service_proxy_callback_set}
lappend lKeywords2 {gupnp_service_proxy_get_subscribed}
lappend lKeywords2 {gupnp_service_proxy_remove_notify}
lappend lKeywords2 {gupnp_service_proxy_set_subscribed}
lappend lKeywords2 {gupnp_service_thaw_notify}
lappend lKeywords2 {hash}
lappend lKeywords2 {hash_algos}
lappend lKeywords2 {hash_copy}
lappend lKeywords2 {hash_equals}
lappend lKeywords2 {hash_file}
lappend lKeywords2 {hash_final}
lappend lKeywords2 {hash_hkdf}
lappend lKeywords2 {hash_hmac}
lappend lKeywords2 {hash_hmac_algos}
lappend lKeywords2 {hash_hmac_file}
lappend lKeywords2 {hash_init}
lappend lKeywords2 {hash_pbkdf2}
lappend lKeywords2 {hash_update}
lappend lKeywords2 {hash_update_file}
lappend lKeywords2 {hash_update_stream}
lappend lKeywords2 {hwapi_attribute_new}
lappend lKeywords2 {hwapi_content_new}
lappend lKeywords2 {hwapi_hgcsp}
lappend lKeywords2 {hwapi_object_new}
lappend lKeywords2 {iconv}
lappend lKeywords2 {iconv_get_encoding}
lappend lKeywords2 {iconv_mime_decode}
lappend lKeywords2 {iconv_mime_decode_headers}
lappend lKeywords2 {iconv_mime_encode}
lappend lKeywords2 {iconv_set_encoding}
lappend lKeywords2 {iconv_strlen}
lappend lKeywords2 {iconv_strpos}
lappend lKeywords2 {iconv_strrpos}
lappend lKeywords2 {iconv_substr}
lappend lKeywords2 {id3_get_frame_long_name}
lappend lKeywords2 {id3_get_frame_short_name}
lappend lKeywords2 {id3_get_genre_id}
lappend lKeywords2 {id3_get_genre_list}
lappend lKeywords2 {id3_get_genre_name}
lappend lKeywords2 {id3_get_tag}
lappend lKeywords2 {id3_get_version}
lappend lKeywords2 {id3_remove_tag}
lappend lKeywords2 {id3_set_tag}
lappend lKeywords2 {iis_add_server}
lappend lKeywords2 {iis_get_dir_security}
lappend lKeywords2 {iis_get_script_map}
lappend lKeywords2 {iis_get_server_by_comment}
lappend lKeywords2 {iis_get_server_by_path}
lappend lKeywords2 {iis_get_server_rights}
lappend lKeywords2 {iis_get_service_state}
lappend lKeywords2 {iis_remove_server}
lappend lKeywords2 {iis_set_app_settings}
lappend lKeywords2 {iis_set_dir_security}
lappend lKeywords2 {iis_set_script_map}
lappend lKeywords2 {iis_set_server_rights}
lappend lKeywords2 {iis_start_server}
lappend lKeywords2 {iis_start_service}
lappend lKeywords2 {iis_stop_server}
lappend lKeywords2 {iis_stop_service}
lappend lKeywords2 {imap_8bit}
lappend lKeywords2 {imap_alerts}
lappend lKeywords2 {imap_append}
lappend lKeywords2 {imap_base64}
lappend lKeywords2 {imap_binary}
lappend lKeywords2 {imap_body}
lappend lKeywords2 {imap_bodystruct}
lappend lKeywords2 {imap_check}
lappend lKeywords2 {imap_clearflag_full}
lappend lKeywords2 {imap_close}
lappend lKeywords2 {imap_create}
lappend lKeywords2 {imap_createmailbox}
lappend lKeywords2 {imap_delete}
lappend lKeywords2 {imap_deletemailbox}
lappend lKeywords2 {imap_errors}
lappend lKeywords2 {imap_expunge}
lappend lKeywords2 {imap_fetchbody}
lappend lKeywords2 {imap_fetchheader}
lappend lKeywords2 {imap_fetchmime}
lappend lKeywords2 {imap_fetchstructure}
lappend lKeywords2 {imap_fetchtext}
lappend lKeywords2 {imap_fetch_overview}
lappend lKeywords2 {imap_gc}
lappend lKeywords2 {imap_getacl}
lappend lKeywords2 {imap_getmailboxes}
lappend lKeywords2 {imap_getsubscribed}
lappend lKeywords2 {imap_get_quota}
lappend lKeywords2 {imap_get_quotaroot}
lappend lKeywords2 {imap_header}
lappend lKeywords2 {imap_headerinfo}
lappend lKeywords2 {imap_headers}
lappend lKeywords2 {imap_last_error}
lappend lKeywords2 {imap_list}
lappend lKeywords2 {imap_listmailbox}
lappend lKeywords2 {imap_listscan}
lappend lKeywords2 {imap_listsubscribed}
lappend lKeywords2 {imap_lsub}
lappend lKeywords2 {imap_mail}
lappend lKeywords2 {imap_mailboxmsginfo}
lappend lKeywords2 {imap_mail_compose}
lappend lKeywords2 {imap_mail_copy}
lappend lKeywords2 {imap_mail_move}
lappend lKeywords2 {imap_mime_header_decode}
lappend lKeywords2 {imap_msgno}
lappend lKeywords2 {imap_mutf7_to_utf8}
lappend lKeywords2 {imap_num_msg}
lappend lKeywords2 {imap_num_recent}
lappend lKeywords2 {imap_open}
lappend lKeywords2 {imap_ping}
lappend lKeywords2 {imap_qprint}
lappend lKeywords2 {imap_rename}
lappend lKeywords2 {imap_renamemailbox}
lappend lKeywords2 {imap_reopen}
lappend lKeywords2 {imap_rfc822_parse_adrlist}
lappend lKeywords2 {imap_rfc822_parse_headers}
lappend lKeywords2 {imap_rfc822_write_address}
lappend lKeywords2 {imap_savebody}
lappend lKeywords2 {imap_scan}
lappend lKeywords2 {imap_scanmailbox}
lappend lKeywords2 {imap_search}
lappend lKeywords2 {imap_setacl}
lappend lKeywords2 {imap_setflag_full}
lappend lKeywords2 {imap_set_quota}
lappend lKeywords2 {imap_sort}
lappend lKeywords2 {imap_status}
lappend lKeywords2 {imap_subscribe}
lappend lKeywords2 {imap_thread}
lappend lKeywords2 {imap_timeout}
lappend lKeywords2 {imap_uid}
lappend lKeywords2 {imap_undelete}
lappend lKeywords2 {imap_unsubscribe}
lappend lKeywords2 {imap_utf7_decode}
lappend lKeywords2 {imap_utf7_encode}
lappend lKeywords2 {imap_utf8}
lappend lKeywords2 {imap_utf8_to_mutf7}
lappend lKeywords2 {kadm5_chpass_principal}
lappend lKeywords2 {kadm5_create_principal}
lappend lKeywords2 {kadm5_delete_principal}
lappend lKeywords2 {kadm5_destroy}
lappend lKeywords2 {kadm5_flush}
lappend lKeywords2 {kadm5_get_policies}
lappend lKeywords2 {kadm5_get_principal}
lappend lKeywords2 {kadm5_get_principals}
lappend lKeywords2 {kadm5_init_with_password}
lappend lKeywords2 {kadm5_modify_principal}
lappend lKeywords2 {ldap_8859_to_t61}
lappend lKeywords2 {ldap_add}
lappend lKeywords2 {ldap_bind}
lappend lKeywords2 {ldap_close}
lappend lKeywords2 {ldap_compare}
lappend lKeywords2 {ldap_connect}
lappend lKeywords2 {ldap_control_paged_result}
lappend lKeywords2 {ldap_control_paged_result_response}
lappend lKeywords2 {ldap_count_entries}
lappend lKeywords2 {ldap_delete}
lappend lKeywords2 {ldap_dn2ufn}
lappend lKeywords2 {ldap_err2str}
lappend lKeywords2 {ldap_errno}
lappend lKeywords2 {ldap_error}
lappend lKeywords2 {ldap_escape}
lappend lKeywords2 {ldap_exop}
lappend lKeywords2 {ldap_exop_passwd}
lappend lKeywords2 {ldap_exop_refresh}
lappend lKeywords2 {ldap_exop_whoami}
lappend lKeywords2 {ldap_explode_dn}
lappend lKeywords2 {ldap_first_attribute}
lappend lKeywords2 {ldap_first_entry}
lappend lKeywords2 {ldap_first_reference}
lappend lKeywords2 {ldap_free_result}
lappend lKeywords2 {ldap_get_attributes}
lappend lKeywords2 {ldap_get_dn}
lappend lKeywords2 {ldap_get_entries}
lappend lKeywords2 {ldap_get_option}
lappend lKeywords2 {ldap_get_values}
lappend lKeywords2 {ldap_get_values_len}
lappend lKeywords2 {ldap_list}
lappend lKeywords2 {ldap_modify}
lappend lKeywords2 {ldap_modify_batch}
lappend lKeywords2 {ldap_mod_add}
lappend lKeywords2 {ldap_mod_del}
lappend lKeywords2 {ldap_mod_replace}
lappend lKeywords2 {ldap_next_attribute}
lappend lKeywords2 {ldap_next_entry}
lappend lKeywords2 {ldap_next_reference}
lappend lKeywords2 {ldap_parse_exop}
lappend lKeywords2 {ldap_parse_reference}
lappend lKeywords2 {ldap_parse_result}
lappend lKeywords2 {ldap_read}
lappend lKeywords2 {ldap_rename}
lappend lKeywords2 {ldap_sasl_bind}
lappend lKeywords2 {ldap_search}
lappend lKeywords2 {ldap_set_option}
lappend lKeywords2 {ldap_set_rebind_proc}
lappend lKeywords2 {ldap_sort}
lappend lKeywords2 {ldap_start_tls}
lappend lKeywords2 {ldap_t61_to_8859}
lappend lKeywords2 {ldap_unbind}
lappend lKeywords2 {libxml_clear_errors}
lappend lKeywords2 {libxml_disable_entity_loader}
lappend lKeywords2 {libxml_get_errors}
lappend lKeywords2 {libxml_get_last_error}
lappend lKeywords2 {libxml_set_external_entity_loader}
lappend lKeywords2 {libxml_set_streams_context}
lappend lKeywords2 {libxml_use_internal_errors}
lappend lKeywords2 {log}
lappend lKeywords2 {log1p}
lappend lKeywords2 {log10}
lappend lKeywords2 {log_cmd_delete}
lappend lKeywords2 {log_cmd_insert}
lappend lKeywords2 {log_cmd_update}
lappend lKeywords2 {log_getmore}
lappend lKeywords2 {log_killcursor}
lappend lKeywords2 {log_reply}
lappend lKeywords2 {log_write_batch}
lappend lKeywords2 {lzf_compress}
lappend lKeywords2 {lzf_decompress}
lappend lKeywords2 {lzf_optimized_for}
lappend lKeywords2 {mailparse_determine_best_xfer_encoding}
lappend lKeywords2 {mailparse_msg_create}
lappend lKeywords2 {mailparse_msg_extract_part}
lappend lKeywords2 {mailparse_msg_extract_part_file}
lappend lKeywords2 {mailparse_msg_extract_whole_part_file}
lappend lKeywords2 {mailparse_msg_free}
lappend lKeywords2 {mailparse_msg_get_part}
lappend lKeywords2 {mailparse_msg_get_part_data}
lappend lKeywords2 {mailparse_msg_get_structure}
lappend lKeywords2 {mailparse_msg_parse}
lappend lKeywords2 {mailparse_msg_parse_file}
lappend lKeywords2 {mailparse_rfc822_parse_addresses}
lappend lKeywords2 {mailparse_stream_encode}
lappend lKeywords2 {mailparse_uudecode_all}
lappend lKeywords2 {mb_check_encoding}
lappend lKeywords2 {mb_convert_case}
lappend lKeywords2 {mb_convert_encoding}
lappend lKeywords2 {mb_convert_kana}
lappend lKeywords2 {mb_convert_variables}
lappend lKeywords2 {mb_decode_mimeheader}
lappend lKeywords2 {mb_decode_numericentity}
lappend lKeywords2 {mb_detect_encoding}
lappend lKeywords2 {mb_detect_order}
lappend lKeywords2 {mb_encode_mimeheader}
lappend lKeywords2 {mb_encode_numericentity}
lappend lKeywords2 {mb_encoding_aliases}
lappend lKeywords2 {mb_ereg}
lappend lKeywords2 {mb_eregi}
lappend lKeywords2 {mb_eregi_replace}
lappend lKeywords2 {mb_ereg_match}
lappend lKeywords2 {mb_ereg_replace}
lappend lKeywords2 {mb_ereg_replace_callback}
lappend lKeywords2 {mb_ereg_search}
lappend lKeywords2 {mb_ereg_search_getpos}
lappend lKeywords2 {mb_ereg_search_getregs}
lappend lKeywords2 {mb_ereg_search_init}
lappend lKeywords2 {mb_ereg_search_pos}
lappend lKeywords2 {mb_ereg_search_regs}
lappend lKeywords2 {mb_ereg_search_setpos}
lappend lKeywords2 {mb_get_info}
lappend lKeywords2 {mb_http_input}
lappend lKeywords2 {mb_http_output}
lappend lKeywords2 {mb_internal_encoding}
lappend lKeywords2 {mb_language}
lappend lKeywords2 {mb_list_encodings}
lappend lKeywords2 {mb_output_handler}
lappend lKeywords2 {mb_parse_str}
lappend lKeywords2 {mb_preferred_mime_name}
lappend lKeywords2 {mb_regex_encoding}
lappend lKeywords2 {mb_regex_set_options}
lappend lKeywords2 {mb_send_mail}
lappend lKeywords2 {mb_split}
lappend lKeywords2 {mb_strcut}
lappend lKeywords2 {mb_strimwidth}
lappend lKeywords2 {mb_stripos}
lappend lKeywords2 {mb_stristr}
lappend lKeywords2 {mb_strlen}
lappend lKeywords2 {mb_strpos}
lappend lKeywords2 {mb_strrchr}
lappend lKeywords2 {mb_strrichr}
lappend lKeywords2 {mb_strripos}
lappend lKeywords2 {mb_strrpos}
lappend lKeywords2 {mb_strstr}
lappend lKeywords2 {mb_strtolower}
lappend lKeywords2 {mb_strtoupper}
lappend lKeywords2 {mb_strwidth}
lappend lKeywords2 {mb_substitute_character}
lappend lKeywords2 {mb_substr}
lappend lKeywords2 {mb_substr_count}
lappend lKeywords2 {mcrypt_cbc}
lappend lKeywords2 {mcrypt_cfb}
lappend lKeywords2 {mcrypt_create_iv}
lappend lKeywords2 {mcrypt_decrypt}
lappend lKeywords2 {mcrypt_ecb}
lappend lKeywords2 {mcrypt_encrypt}
lappend lKeywords2 {mcrypt_enc_get_algorithms_name}
lappend lKeywords2 {mcrypt_enc_get_block_size}
lappend lKeywords2 {mcrypt_enc_get_iv_size}
lappend lKeywords2 {mcrypt_enc_get_key_size}
lappend lKeywords2 {mcrypt_enc_get_modes_name}
lappend lKeywords2 {mcrypt_enc_get_supported_key_sizes}
lappend lKeywords2 {mcrypt_enc_is_block_algorithm}
lappend lKeywords2 {mcrypt_enc_is_block_algorithm_mode}
lappend lKeywords2 {mcrypt_enc_is_block_mode}
lappend lKeywords2 {mcrypt_enc_self_test}
lappend lKeywords2 {mcrypt_generic}
lappend lKeywords2 {mcrypt_generic_deinit}
lappend lKeywords2 {mcrypt_generic_end}
lappend lKeywords2 {mcrypt_generic_init}
lappend lKeywords2 {mcrypt_get_block_size}
lappend lKeywords2 {mcrypt_get_cipher_name}
lappend lKeywords2 {mcrypt_get_iv_size}
lappend lKeywords2 {mcrypt_get_key_size}
lappend lKeywords2 {mcrypt_list_algorithms}
lappend lKeywords2 {mcrypt_list_modes}
lappend lKeywords2 {mcrypt_module_close}
lappend lKeywords2 {mcrypt_module_get_algo_block_size}
lappend lKeywords2 {mcrypt_module_get_algo_key_size}
lappend lKeywords2 {mcrypt_module_get_supported_key_sizes}
lappend lKeywords2 {mcrypt_module_is_block_algorithm}
lappend lKeywords2 {mcrypt_module_is_block_algorithm_mode}
lappend lKeywords2 {mcrypt_module_is_block_mode}
lappend lKeywords2 {mcrypt_module_open}
lappend lKeywords2 {mcrypt_module_self_test}
lappend lKeywords2 {mcrypt_ofb}
lappend lKeywords2 {mqseries_back}
lappend lKeywords2 {mqseries_begin}
lappend lKeywords2 {mqseries_close}
lappend lKeywords2 {mqseries_cmit}
lappend lKeywords2 {mqseries_conn}
lappend lKeywords2 {mqseries_connx}
lappend lKeywords2 {mqseries_disc}
lappend lKeywords2 {mqseries_get}
lappend lKeywords2 {mqseries_inq}
lappend lKeywords2 {mqseries_open}
lappend lKeywords2 {mqseries_put}
lappend lKeywords2 {mqseries_put1}
lappend lKeywords2 {mqseries_set}
lappend lKeywords2 {mqseries_strerror}
lappend lKeywords2 {msession_connect}
lappend lKeywords2 {msession_count}
lappend lKeywords2 {msession_create}
lappend lKeywords2 {msession_destroy}
lappend lKeywords2 {msession_disconnect}
lappend lKeywords2 {msession_find}
lappend lKeywords2 {msession_get}
lappend lKeywords2 {msession_get_array}
lappend lKeywords2 {msession_get_data}
lappend lKeywords2 {msession_inc}
lappend lKeywords2 {msession_list}
lappend lKeywords2 {msession_listvar}
lappend lKeywords2 {msession_lock}
lappend lKeywords2 {msession_plugin}
lappend lKeywords2 {msession_randstr}
lappend lKeywords2 {msession_set}
lappend lKeywords2 {msession_set_array}
lappend lKeywords2 {msession_set_data}
lappend lKeywords2 {msession_timeout}
lappend lKeywords2 {msession_uniq}
lappend lKeywords2 {msession_unlock}
lappend lKeywords2 {msg_get_queue}
lappend lKeywords2 {msg_receive}
lappend lKeywords2 {msg_remove_queue}
lappend lKeywords2 {msg_send}
lappend lKeywords2 {msg_set_queue}
lappend lKeywords2 {msg_stat_queue}
lappend lKeywords2 {mt_getrandmax}
lappend lKeywords2 {mt_rand}
lappend lKeywords2 {mt_srand}
lappend lKeywords2 {m_checkstatus}
lappend lKeywords2 {m_completeauthorizations}
lappend lKeywords2 {m_connect}
lappend lKeywords2 {m_connectionerror}
lappend lKeywords2 {m_deletetrans}
lappend lKeywords2 {m_destroyconn}
lappend lKeywords2 {m_destroyengine}
lappend lKeywords2 {m_getcell}
lappend lKeywords2 {m_getcellbynum}
lappend lKeywords2 {m_getcommadelimited}
lappend lKeywords2 {m_getheader}
lappend lKeywords2 {m_initconn}
lappend lKeywords2 {m_initengine}
lappend lKeywords2 {m_iscommadelimited}
lappend lKeywords2 {m_maxconntimeout}
lappend lKeywords2 {m_monitor}
lappend lKeywords2 {m_numcolumns}
lappend lKeywords2 {m_numrows}
lappend lKeywords2 {m_parsecommadelimited}
lappend lKeywords2 {m_responsekeys}
lappend lKeywords2 {m_responseparam}
lappend lKeywords2 {m_returnstatus}
lappend lKeywords2 {m_setblocking}
lappend lKeywords2 {m_setdropfile}
lappend lKeywords2 {m_setip}
lappend lKeywords2 {m_setssl}
lappend lKeywords2 {m_setssl_cafile}
lappend lKeywords2 {m_setssl_files}
lappend lKeywords2 {m_settimeout}
lappend lKeywords2 {m_sslcert_gen_hash}
lappend lKeywords2 {m_transactionssent}
lappend lKeywords2 {m_transinqueue}
lappend lKeywords2 {m_transkeyval}
lappend lKeywords2 {m_transnew}
lappend lKeywords2 {m_transsend}
lappend lKeywords2 {m_uwait}
lappend lKeywords2 {m_validateidentifier}
lappend lKeywords2 {m_verifyconnection}
lappend lKeywords2 {m_verifysslcert}
lappend lKeywords2 {ncurses_addch}
lappend lKeywords2 {ncurses_addchnstr}
lappend lKeywords2 {ncurses_addchstr}
lappend lKeywords2 {ncurses_addnstr}
lappend lKeywords2 {ncurses_addstr}
lappend lKeywords2 {ncurses_assume_default_colors}
lappend lKeywords2 {ncurses_attroff}
lappend lKeywords2 {ncurses_attron}
lappend lKeywords2 {ncurses_attrset}
lappend lKeywords2 {ncurses_baudrate}
lappend lKeywords2 {ncurses_beep}
lappend lKeywords2 {ncurses_bkgd}
lappend lKeywords2 {ncurses_bkgdset}
lappend lKeywords2 {ncurses_border}
lappend lKeywords2 {ncurses_bottom_panel}
lappend lKeywords2 {ncurses_can_change_color}
lappend lKeywords2 {ncurses_cbreak}
lappend lKeywords2 {ncurses_clear}
lappend lKeywords2 {ncurses_clrtobot}
lappend lKeywords2 {ncurses_clrtoeol}
lappend lKeywords2 {ncurses_color_content}
lappend lKeywords2 {ncurses_color_set}
lappend lKeywords2 {ncurses_curs_set}
lappend lKeywords2 {ncurses_define_key}
lappend lKeywords2 {ncurses_def_prog_mode}
lappend lKeywords2 {ncurses_def_shell_mode}
lappend lKeywords2 {ncurses_delay_output}
lappend lKeywords2 {ncurses_delch}
lappend lKeywords2 {ncurses_deleteln}
lappend lKeywords2 {ncurses_delwin}
lappend lKeywords2 {ncurses_del_panel}
lappend lKeywords2 {ncurses_doupdate}
lappend lKeywords2 {ncurses_echo}
lappend lKeywords2 {ncurses_echochar}
lappend lKeywords2 {ncurses_end}
lappend lKeywords2 {ncurses_erase}
lappend lKeywords2 {ncurses_erasechar}
lappend lKeywords2 {ncurses_filter}
lappend lKeywords2 {ncurses_flash}
lappend lKeywords2 {ncurses_flushinp}
lappend lKeywords2 {ncurses_getch}
lappend lKeywords2 {ncurses_getmaxyx}
lappend lKeywords2 {ncurses_getmouse}
lappend lKeywords2 {ncurses_getyx}
lappend lKeywords2 {ncurses_halfdelay}
lappend lKeywords2 {ncurses_has_colors}
lappend lKeywords2 {ncurses_has_ic}
lappend lKeywords2 {ncurses_has_il}
lappend lKeywords2 {ncurses_has_key}
lappend lKeywords2 {ncurses_hide_panel}
lappend lKeywords2 {ncurses_hline}
lappend lKeywords2 {ncurses_inch}
lappend lKeywords2 {ncurses_init}
lappend lKeywords2 {ncurses_init_color}
lappend lKeywords2 {ncurses_init_pair}
lappend lKeywords2 {ncurses_insch}
lappend lKeywords2 {ncurses_insdelln}
lappend lKeywords2 {ncurses_insertln}
lappend lKeywords2 {ncurses_insstr}
lappend lKeywords2 {ncurses_instr}
lappend lKeywords2 {ncurses_isendwin}
lappend lKeywords2 {ncurses_keyok}
lappend lKeywords2 {ncurses_keypad}
lappend lKeywords2 {ncurses_killchar}
lappend lKeywords2 {ncurses_longname}
lappend lKeywords2 {ncurses_meta}
lappend lKeywords2 {ncurses_mouseinterval}
lappend lKeywords2 {ncurses_mousemask}
lappend lKeywords2 {ncurses_mouse_trafo}
lappend lKeywords2 {ncurses_move}
lappend lKeywords2 {ncurses_move_panel}
lappend lKeywords2 {ncurses_mvaddch}
lappend lKeywords2 {ncurses_mvaddchnstr}
lappend lKeywords2 {ncurses_mvaddchstr}
lappend lKeywords2 {ncurses_mvaddnstr}
lappend lKeywords2 {ncurses_mvaddstr}
lappend lKeywords2 {ncurses_mvcur}
lappend lKeywords2 {ncurses_mvdelch}
lappend lKeywords2 {ncurses_mvgetch}
lappend lKeywords2 {ncurses_mvhline}
lappend lKeywords2 {ncurses_mvinch}
lappend lKeywords2 {ncurses_mvvline}
lappend lKeywords2 {ncurses_mvwaddstr}
lappend lKeywords2 {ncurses_napms}
lappend lKeywords2 {ncurses_newpad}
lappend lKeywords2 {ncurses_newwin}
lappend lKeywords2 {ncurses_new_panel}
lappend lKeywords2 {ncurses_nl}
lappend lKeywords2 {ncurses_nocbreak}
lappend lKeywords2 {ncurses_noecho}
lappend lKeywords2 {ncurses_nonl}
lappend lKeywords2 {ncurses_noqiflush}
lappend lKeywords2 {ncurses_noraw}
lappend lKeywords2 {ncurses_pair_content}
lappend lKeywords2 {ncurses_panel_above}
lappend lKeywords2 {ncurses_panel_below}
lappend lKeywords2 {ncurses_panel_window}
lappend lKeywords2 {ncurses_pnoutrefresh}
lappend lKeywords2 {ncurses_prefresh}
lappend lKeywords2 {ncurses_putp}
lappend lKeywords2 {ncurses_qiflush}
lappend lKeywords2 {ncurses_raw}
lappend lKeywords2 {ncurses_refresh}
lappend lKeywords2 {ncurses_replace_panel}
lappend lKeywords2 {ncurses_resetty}
lappend lKeywords2 {ncurses_reset_prog_mode}
lappend lKeywords2 {ncurses_reset_shell_mode}
lappend lKeywords2 {ncurses_savetty}
lappend lKeywords2 {ncurses_scrl}
lappend lKeywords2 {ncurses_scr_dump}
lappend lKeywords2 {ncurses_scr_init}
lappend lKeywords2 {ncurses_scr_restore}
lappend lKeywords2 {ncurses_scr_set}
lappend lKeywords2 {ncurses_show_panel}
lappend lKeywords2 {ncurses_slk_attr}
lappend lKeywords2 {ncurses_slk_attroff}
lappend lKeywords2 {ncurses_slk_attron}
lappend lKeywords2 {ncurses_slk_attrset}
lappend lKeywords2 {ncurses_slk_clear}
lappend lKeywords2 {ncurses_slk_color}
lappend lKeywords2 {ncurses_slk_init}
lappend lKeywords2 {ncurses_slk_noutrefresh}
lappend lKeywords2 {ncurses_slk_refresh}
lappend lKeywords2 {ncurses_slk_restore}
lappend lKeywords2 {ncurses_slk_set}
lappend lKeywords2 {ncurses_slk_touch}
lappend lKeywords2 {ncurses_standend}
lappend lKeywords2 {ncurses_standout}
lappend lKeywords2 {ncurses_start_color}
lappend lKeywords2 {ncurses_termattrs}
lappend lKeywords2 {ncurses_termname}
lappend lKeywords2 {ncurses_timeout}
lappend lKeywords2 {ncurses_top_panel}
lappend lKeywords2 {ncurses_typeahead}
lappend lKeywords2 {ncurses_ungetch}
lappend lKeywords2 {ncurses_ungetmouse}
lappend lKeywords2 {ncurses_update_panels}
lappend lKeywords2 {ncurses_use_default_colors}
lappend lKeywords2 {ncurses_use_env}
lappend lKeywords2 {ncurses_use_extended_names}
lappend lKeywords2 {ncurses_vidattr}
lappend lKeywords2 {ncurses_vline}
lappend lKeywords2 {ncurses_waddch}
lappend lKeywords2 {ncurses_waddstr}
lappend lKeywords2 {ncurses_wattroff}
lappend lKeywords2 {ncurses_wattron}
lappend lKeywords2 {ncurses_wattrset}
lappend lKeywords2 {ncurses_wborder}
lappend lKeywords2 {ncurses_wclear}
lappend lKeywords2 {ncurses_wcolor_set}
lappend lKeywords2 {ncurses_werase}
lappend lKeywords2 {ncurses_wgetch}
lappend lKeywords2 {ncurses_whline}
lappend lKeywords2 {ncurses_wmouse_trafo}
lappend lKeywords2 {ncurses_wmove}
lappend lKeywords2 {ncurses_wnoutrefresh}
lappend lKeywords2 {ncurses_wrefresh}
lappend lKeywords2 {ncurses_wstandend}
lappend lKeywords2 {ncurses_wstandout}
lappend lKeywords2 {ncurses_wvline}
lappend lKeywords2 {newt_bell}
lappend lKeywords2 {newt_button}
lappend lKeywords2 {newt_button_bar}
lappend lKeywords2 {newt_centered_window}
lappend lKeywords2 {newt_checkbox}
lappend lKeywords2 {newt_checkbox_get_value}
lappend lKeywords2 {newt_checkbox_set_flags}
lappend lKeywords2 {newt_checkbox_set_value}
lappend lKeywords2 {newt_checkbox_tree}
lappend lKeywords2 {newt_checkbox_tree_add_item}
lappend lKeywords2 {newt_checkbox_tree_find_item}
lappend lKeywords2 {newt_checkbox_tree_get_current}
lappend lKeywords2 {newt_checkbox_tree_get_entry_value}
lappend lKeywords2 {newt_checkbox_tree_get_multi_selection}
lappend lKeywords2 {newt_checkbox_tree_get_selection}
lappend lKeywords2 {newt_checkbox_tree_multi}
lappend lKeywords2 {newt_checkbox_tree_set_current}
lappend lKeywords2 {newt_checkbox_tree_set_entry}
lappend lKeywords2 {newt_checkbox_tree_set_entry_value}
lappend lKeywords2 {newt_checkbox_tree_set_width}
lappend lKeywords2 {newt_clear_key_buffer}
lappend lKeywords2 {newt_cls}
lappend lKeywords2 {newt_compact_button}
lappend lKeywords2 {newt_component_add_callback}
lappend lKeywords2 {newt_component_takes_focus}
lappend lKeywords2 {newt_create_grid}
lappend lKeywords2 {newt_cursor_off}
lappend lKeywords2 {newt_cursor_on}
lappend lKeywords2 {newt_delay}
lappend lKeywords2 {newt_draw_form}
lappend lKeywords2 {newt_draw_root_text}
lappend lKeywords2 {newt_entry}
lappend lKeywords2 {newt_entry_get_value}
lappend lKeywords2 {newt_entry_set}
lappend lKeywords2 {newt_entry_set_filter}
lappend lKeywords2 {newt_entry_set_flags}
lappend lKeywords2 {newt_finished}
lappend lKeywords2 {newt_form}
lappend lKeywords2 {newt_form_add_component}
lappend lKeywords2 {newt_form_add_components}
lappend lKeywords2 {newt_form_add_hot_key}
lappend lKeywords2 {newt_form_destroy}
lappend lKeywords2 {newt_form_get_current}
lappend lKeywords2 {newt_form_run}
lappend lKeywords2 {newt_form_set_background}
lappend lKeywords2 {newt_form_set_height}
lappend lKeywords2 {newt_form_set_size}
lappend lKeywords2 {newt_form_set_timer}
lappend lKeywords2 {newt_form_set_width}
lappend lKeywords2 {newt_form_watch_fd}
lappend lKeywords2 {newt_get_screen_size}
lappend lKeywords2 {newt_grid_add_components_to_form}
lappend lKeywords2 {newt_grid_basic_window}
lappend lKeywords2 {newt_grid_free}
lappend lKeywords2 {newt_grid_get_size}
lappend lKeywords2 {newt_grid_h_close_stacked}
lappend lKeywords2 {newt_grid_h_stacked}
lappend lKeywords2 {newt_grid_place}
lappend lKeywords2 {newt_grid_set_field}
lappend lKeywords2 {newt_grid_simple_window}
lappend lKeywords2 {newt_grid_v_close_stacked}
lappend lKeywords2 {newt_grid_v_stacked}
lappend lKeywords2 {newt_grid_wrapped_window}
lappend lKeywords2 {newt_grid_wrapped_window_at}
lappend lKeywords2 {newt_init}
lappend lKeywords2 {newt_label}
lappend lKeywords2 {newt_label_set_text}
lappend lKeywords2 {newt_listbox}
lappend lKeywords2 {newt_listbox_append_entry}
lappend lKeywords2 {newt_listbox_clear}
lappend lKeywords2 {newt_listbox_clear_selection}
lappend lKeywords2 {newt_listbox_delete_entry}
lappend lKeywords2 {newt_listbox_get_current}
lappend lKeywords2 {newt_listbox_get_selection}
lappend lKeywords2 {newt_listbox_insert_entry}
lappend lKeywords2 {newt_listbox_item_count}
lappend lKeywords2 {newt_listbox_select_item}
lappend lKeywords2 {newt_listbox_set_current}
lappend lKeywords2 {newt_listbox_set_current_by_key}
lappend lKeywords2 {newt_listbox_set_data}
lappend lKeywords2 {newt_listbox_set_entry}
lappend lKeywords2 {newt_listbox_set_width}
lappend lKeywords2 {newt_listitem}
lappend lKeywords2 {newt_listitem_get_data}
lappend lKeywords2 {newt_listitem_set}
lappend lKeywords2 {newt_open_window}
lappend lKeywords2 {newt_pop_help_line}
lappend lKeywords2 {newt_pop_window}
lappend lKeywords2 {newt_push_help_line}
lappend lKeywords2 {newt_radiobutton}
lappend lKeywords2 {newt_radio_get_current}
lappend lKeywords2 {newt_redraw_help_line}
lappend lKeywords2 {newt_reflow_text}
lappend lKeywords2 {newt_refresh}
lappend lKeywords2 {newt_resize_screen}
lappend lKeywords2 {newt_resume}
lappend lKeywords2 {newt_run_form}
lappend lKeywords2 {newt_scale}
lappend lKeywords2 {newt_scale_set}
lappend lKeywords2 {newt_scrollbar_set}
lappend lKeywords2 {newt_set_help_callback}
lappend lKeywords2 {newt_set_suspend_callback}
lappend lKeywords2 {newt_suspend}
lappend lKeywords2 {newt_textbox}
lappend lKeywords2 {newt_textbox_get_num_lines}
lappend lKeywords2 {newt_textbox_reflowed}
lappend lKeywords2 {newt_textbox_set_height}
lappend lKeywords2 {newt_textbox_set_text}
lappend lKeywords2 {newt_vertical_scrollbar}
lappend lKeywords2 {newt_wait_for_key}
lappend lKeywords2 {newt_win_choice}
lappend lKeywords2 {newt_win_entries}
lappend lKeywords2 {newt_win_menu}
lappend lKeywords2 {newt_win_message}
lappend lKeywords2 {newt_win_messagev}
lappend lKeywords2 {newt_win_ternary}
lappend lKeywords2 {nsapi_request_headers}
lappend lKeywords2 {nsapi_response_headers}
lappend lKeywords2 {nsapi_virtual}
lappend lKeywords2 {ob_clean}
lappend lKeywords2 {ob_end_clean}
lappend lKeywords2 {ob_end_flush}
lappend lKeywords2 {ob_flush}
lappend lKeywords2 {ob_get_clean}
lappend lKeywords2 {ob_get_contents}
lappend lKeywords2 {ob_get_flush}
lappend lKeywords2 {ob_get_length}
lappend lKeywords2 {ob_get_level}
lappend lKeywords2 {ob_get_status}
lappend lKeywords2 {ob_gzhandler}
lappend lKeywords2 {ob_iconv_handler}
lappend lKeywords2 {ob_implicit_flush}
lappend lKeywords2 {ob_list_handlers}
lappend lKeywords2 {ob_start}
lappend lKeywords2 {ob_tidyhandler}
lappend lKeywords2 {opcache_compile_file}
lappend lKeywords2 {opcache_get_configuration}
lappend lKeywords2 {opcache_get_status}
lappend lKeywords2 {opcache_invalidate}
lappend lKeywords2 {opcache_is_script_cached}
lappend lKeywords2 {opcache_reset}
lappend lKeywords2 {openal_buffer_create}
lappend lKeywords2 {openal_buffer_data}
lappend lKeywords2 {openal_buffer_destroy}
lappend lKeywords2 {openal_buffer_get}
lappend lKeywords2 {openal_buffer_loadwav}
lappend lKeywords2 {openal_context_create}
lappend lKeywords2 {openal_context_current}
lappend lKeywords2 {openal_context_destroy}
lappend lKeywords2 {openal_context_process}
lappend lKeywords2 {openal_context_suspend}
lappend lKeywords2 {openal_device_close}
lappend lKeywords2 {openal_device_open}
lappend lKeywords2 {openal_listener_get}
lappend lKeywords2 {openal_listener_set}
lappend lKeywords2 {openal_source_create}
lappend lKeywords2 {openal_source_destroy}
lappend lKeywords2 {openal_source_get}
lappend lKeywords2 {openal_source_pause}
lappend lKeywords2 {openal_source_play}
lappend lKeywords2 {openal_source_rewind}
lappend lKeywords2 {openal_source_set}
lappend lKeywords2 {openal_source_stop}
lappend lKeywords2 {openal_stream}
lappend lKeywords2 {openssl_cipher_iv_length}
lappend lKeywords2 {openssl_csr_export}
lappend lKeywords2 {openssl_csr_export_to_file}
lappend lKeywords2 {openssl_csr_get_public_key}
lappend lKeywords2 {openssl_csr_get_subject}
lappend lKeywords2 {openssl_csr_new}
lappend lKeywords2 {openssl_csr_sign}
lappend lKeywords2 {openssl_decrypt}
lappend lKeywords2 {openssl_dh_compute_key}
lappend lKeywords2 {openssl_digest}
lappend lKeywords2 {openssl_encrypt}
lappend lKeywords2 {openssl_error_string}
lappend lKeywords2 {openssl_free_key}
lappend lKeywords2 {openssl_get_cert_locations}
lappend lKeywords2 {openssl_get_cipher_methods}
lappend lKeywords2 {openssl_get_curve_names}
lappend lKeywords2 {openssl_get_md_methods}
lappend lKeywords2 {openssl_get_privatekey}
lappend lKeywords2 {openssl_get_publickey}
lappend lKeywords2 {openssl_open}
lappend lKeywords2 {openssl_pbkdf2}
lappend lKeywords2 {openssl_pkcs7_decrypt}
lappend lKeywords2 {openssl_pkcs7_encrypt}
lappend lKeywords2 {openssl_pkcs7_sign}
lappend lKeywords2 {openssl_pkcs7_verify}
lappend lKeywords2 {openssl_pkcs12_export}
lappend lKeywords2 {openssl_pkcs12_export_to_file}
lappend lKeywords2 {openssl_pkcs12_read}
lappend lKeywords2 {openssl_pkey_export}
lappend lKeywords2 {openssl_pkey_export_to_file}
lappend lKeywords2 {openssl_pkey_free}
lappend lKeywords2 {openssl_pkey_get_details}
lappend lKeywords2 {openssl_pkey_get_private}
lappend lKeywords2 {openssl_pkey_get_public}
lappend lKeywords2 {openssl_pkey_new}
lappend lKeywords2 {openssl_private_decrypt}
lappend lKeywords2 {openssl_private_encrypt}
lappend lKeywords2 {openssl_public_decrypt}
lappend lKeywords2 {openssl_public_encrypt}
lappend lKeywords2 {openssl_random_pseudo_bytes}
lappend lKeywords2 {openssl_seal}
lappend lKeywords2 {openssl_sign}
lappend lKeywords2 {openssl_spki_export}
lappend lKeywords2 {openssl_spki_export_challenge}
lappend lKeywords2 {openssl_spki_new}
lappend lKeywords2 {openssl_spki_verify}
lappend lKeywords2 {openssl_verify}
lappend lKeywords2 {openssl_x509_checkpurpose}
lappend lKeywords2 {openssl_x509_check_private_key}
lappend lKeywords2 {openssl_x509_export}
lappend lKeywords2 {openssl_x509_export_to_file}
lappend lKeywords2 {openssl_x509_fingerprint}
lappend lKeywords2 {openssl_x509_free}
lappend lKeywords2 {openssl_x509_parse}
lappend lKeywords2 {openssl_x509_read}
lappend lKeywords2 {parsekit_compile_file}
lappend lKeywords2 {parsekit_compile_string}
lappend lKeywords2 {parsekit_func_arginfo}
lappend lKeywords2 {pcntl_alarm}
lappend lKeywords2 {pcntl_async_signals}
lappend lKeywords2 {pcntl_errno}
lappend lKeywords2 {pcntl_exec}
lappend lKeywords2 {pcntl_fork}
lappend lKeywords2 {pcntl_getpriority}
lappend lKeywords2 {pcntl_get_last_error}
lappend lKeywords2 {pcntl_setpriority}
lappend lKeywords2 {pcntl_signal}
lappend lKeywords2 {pcntl_signal_dispatch}
lappend lKeywords2 {pcntl_signal_get_handler}
lappend lKeywords2 {pcntl_sigprocmask}
lappend lKeywords2 {pcntl_sigtimedwait}
lappend lKeywords2 {pcntl_sigwaitinfo}
lappend lKeywords2 {pcntl_strerror}
lappend lKeywords2 {pcntl_wait}
lappend lKeywords2 {pcntl_waitpid}
lappend lKeywords2 {pcntl_wexitstatus}
lappend lKeywords2 {pcntl_wifexited}
lappend lKeywords2 {pcntl_wifsignaled}
lappend lKeywords2 {pcntl_wifstopped}
lappend lKeywords2 {pcntl_wstopsig}
lappend lKeywords2 {pcntl_wtermsig}
lappend lKeywords2 {PDF_activate_item}
lappend lKeywords2 {PDF_add_annotation}
lappend lKeywords2 {PDF_add_bookmark}
lappend lKeywords2 {PDF_add_launchlink}
lappend lKeywords2 {PDF_add_locallink}
lappend lKeywords2 {PDF_add_nameddest}
lappend lKeywords2 {PDF_add_note}
lappend lKeywords2 {PDF_add_outline}
lappend lKeywords2 {PDF_add_pdflink}
lappend lKeywords2 {PDF_add_table_cell}
lappend lKeywords2 {PDF_add_textflow}
lappend lKeywords2 {PDF_add_thumbnail}
lappend lKeywords2 {PDF_add_weblink}
lappend lKeywords2 {PDF_arc}
lappend lKeywords2 {PDF_arcn}
lappend lKeywords2 {PDF_attach_file}
lappend lKeywords2 {PDF_begin_document}
lappend lKeywords2 {PDF_begin_font}
lappend lKeywords2 {PDF_begin_glyph}
lappend lKeywords2 {PDF_begin_item}
lappend lKeywords2 {PDF_begin_layer}
lappend lKeywords2 {PDF_begin_page}
lappend lKeywords2 {PDF_begin_page_ext}
lappend lKeywords2 {PDF_begin_pattern}
lappend lKeywords2 {PDF_begin_template}
lappend lKeywords2 {PDF_begin_template_ext}
lappend lKeywords2 {PDF_circle}
lappend lKeywords2 {PDF_clip}
lappend lKeywords2 {PDF_close}
lappend lKeywords2 {PDF_closepath}
lappend lKeywords2 {PDF_closepath_fill_stroke}
lappend lKeywords2 {PDF_closepath_stroke}
lappend lKeywords2 {PDF_close_image}
lappend lKeywords2 {PDF_close_pdi}
lappend lKeywords2 {PDF_close_pdi_page}
lappend lKeywords2 {PDF_concat}
lappend lKeywords2 {PDF_continue_text}
lappend lKeywords2 {PDF_create_3dview}
lappend lKeywords2 {PDF_create_action}
lappend lKeywords2 {PDF_create_annotation}
lappend lKeywords2 {PDF_create_bookmark}
lappend lKeywords2 {PDF_create_field}
lappend lKeywords2 {PDF_create_fieldgroup}
lappend lKeywords2 {PDF_create_gstate}
lappend lKeywords2 {PDF_create_pvf}
lappend lKeywords2 {PDF_create_textflow}
lappend lKeywords2 {PDF_curveto}
lappend lKeywords2 {PDF_define_layer}
lappend lKeywords2 {PDF_delete}
lappend lKeywords2 {PDF_delete_pvf}
lappend lKeywords2 {PDF_delete_table}
lappend lKeywords2 {PDF_delete_textflow}
lappend lKeywords2 {PDF_encoding_set_char}
lappend lKeywords2 {PDF_endpath}
lappend lKeywords2 {PDF_end_document}
lappend lKeywords2 {PDF_end_font}
lappend lKeywords2 {PDF_end_glyph}
lappend lKeywords2 {PDF_end_item}
lappend lKeywords2 {PDF_end_layer}
lappend lKeywords2 {PDF_end_page}
lappend lKeywords2 {PDF_end_page_ext}
lappend lKeywords2 {PDF_end_pattern}
lappend lKeywords2 {PDF_end_template}
lappend lKeywords2 {PDF_fill}
lappend lKeywords2 {PDF_fill_imageblock}
lappend lKeywords2 {PDF_fill_pdfblock}
lappend lKeywords2 {PDF_fill_stroke}
lappend lKeywords2 {PDF_fill_textblock}
lappend lKeywords2 {PDF_findfont}
lappend lKeywords2 {PDF_fit_image}
lappend lKeywords2 {PDF_fit_pdi_page}
lappend lKeywords2 {PDF_fit_table}
lappend lKeywords2 {PDF_fit_textflow}
lappend lKeywords2 {PDF_fit_textline}
lappend lKeywords2 {PDF_get_apiname}
lappend lKeywords2 {PDF_get_buffer}
lappend lKeywords2 {PDF_get_errmsg}
lappend lKeywords2 {PDF_get_errnum}
lappend lKeywords2 {PDF_get_font}
lappend lKeywords2 {PDF_get_fontname}
lappend lKeywords2 {PDF_get_fontsize}
lappend lKeywords2 {PDF_get_image_height}
lappend lKeywords2 {PDF_get_image_width}
lappend lKeywords2 {PDF_get_majorversion}
lappend lKeywords2 {PDF_get_minorversion}
lappend lKeywords2 {PDF_get_parameter}
lappend lKeywords2 {PDF_get_pdi_parameter}
lappend lKeywords2 {PDF_get_pdi_value}
lappend lKeywords2 {PDF_get_value}
lappend lKeywords2 {PDF_info_font}
lappend lKeywords2 {PDF_info_matchbox}
lappend lKeywords2 {PDF_info_table}
lappend lKeywords2 {PDF_info_textflow}
lappend lKeywords2 {PDF_info_textline}
lappend lKeywords2 {PDF_initgraphics}
lappend lKeywords2 {PDF_lineto}
lappend lKeywords2 {PDF_load_3ddata}
lappend lKeywords2 {PDF_load_font}
lappend lKeywords2 {PDF_load_iccprofile}
lappend lKeywords2 {PDF_load_image}
lappend lKeywords2 {PDF_makespotcolor}
lappend lKeywords2 {PDF_moveto}
lappend lKeywords2 {PDF_new}
lappend lKeywords2 {PDF_open_ccitt}
lappend lKeywords2 {PDF_open_file}
lappend lKeywords2 {PDF_open_gif}
lappend lKeywords2 {PDF_open_image}
lappend lKeywords2 {PDF_open_image_file}
lappend lKeywords2 {PDF_open_jpeg}
lappend lKeywords2 {PDF_open_memory_image}
lappend lKeywords2 {PDF_open_pdi}
lappend lKeywords2 {PDF_open_pdi_document}
lappend lKeywords2 {PDF_open_pdi_page}
lappend lKeywords2 {PDF_open_tiff}
lappend lKeywords2 {PDF_pcos_get_number}
lappend lKeywords2 {PDF_pcos_get_stream}
lappend lKeywords2 {PDF_pcos_get_string}
lappend lKeywords2 {PDF_place_image}
lappend lKeywords2 {PDF_place_pdi_page}
lappend lKeywords2 {PDF_process_pdi}
lappend lKeywords2 {PDF_rect}
lappend lKeywords2 {PDF_restore}
lappend lKeywords2 {PDF_resume_page}
lappend lKeywords2 {PDF_rotate}
lappend lKeywords2 {PDF_save}
lappend lKeywords2 {PDF_scale}
lappend lKeywords2 {PDF_setcolor}
lappend lKeywords2 {PDF_setdash}
lappend lKeywords2 {PDF_setdashpattern}
lappend lKeywords2 {PDF_setflat}
lappend lKeywords2 {PDF_setfont}
lappend lKeywords2 {PDF_setgray}
lappend lKeywords2 {PDF_setgray_fill}
lappend lKeywords2 {PDF_setgray_stroke}
lappend lKeywords2 {PDF_setlinecap}
lappend lKeywords2 {PDF_setlinejoin}
lappend lKeywords2 {PDF_setlinewidth}
lappend lKeywords2 {PDF_setmatrix}
lappend lKeywords2 {PDF_setmiterlimit}
lappend lKeywords2 {PDF_setpolydash}
lappend lKeywords2 {PDF_setrgbcolor}
lappend lKeywords2 {PDF_setrgbcolor_fill}
lappend lKeywords2 {PDF_setrgbcolor_stroke}
lappend lKeywords2 {PDF_set_border_color}
lappend lKeywords2 {PDF_set_border_dash}
lappend lKeywords2 {PDF_set_border_style}
lappend lKeywords2 {PDF_set_char_spacing}
lappend lKeywords2 {PDF_set_duration}
lappend lKeywords2 {PDF_set_gstate}
lappend lKeywords2 {PDF_set_horiz_scaling}
lappend lKeywords2 {PDF_set_info}
lappend lKeywords2 {PDF_set_info_author}
lappend lKeywords2 {PDF_set_info_creator}
lappend lKeywords2 {PDF_set_info_keywords}
lappend lKeywords2 {PDF_set_info_subject}
lappend lKeywords2 {PDF_set_info_title}
lappend lKeywords2 {PDF_set_layer_dependency}
lappend lKeywords2 {PDF_set_leading}
lappend lKeywords2 {PDF_set_parameter}
lappend lKeywords2 {PDF_set_text_matrix}
lappend lKeywords2 {PDF_set_text_pos}
lappend lKeywords2 {PDF_set_text_rendering}
lappend lKeywords2 {PDF_set_text_rise}
lappend lKeywords2 {PDF_set_value}
lappend lKeywords2 {PDF_set_word_spacing}
lappend lKeywords2 {PDF_shading}
lappend lKeywords2 {PDF_shading_pattern}
lappend lKeywords2 {PDF_shfill}
lappend lKeywords2 {PDF_show}
lappend lKeywords2 {PDF_show_boxed}
lappend lKeywords2 {PDF_show_xy}
lappend lKeywords2 {PDF_skew}
lappend lKeywords2 {PDF_stringwidth}
lappend lKeywords2 {PDF_stroke}
lappend lKeywords2 {PDF_suspend_page}
lappend lKeywords2 {PDF_translate}
lappend lKeywords2 {PDF_utf8_to_utf16}
lappend lKeywords2 {PDF_utf16_to_utf8}
lappend lKeywords2 {PDF_utf32_to_utf16}
lappend lKeywords2 {proc_close}
lappend lKeywords2 {proc_get_status}
lappend lKeywords2 {proc_nice}
lappend lKeywords2 {proc_open}
lappend lKeywords2 {proc_terminate}
lappend lKeywords2 {posix_access}
lappend lKeywords2 {posix_ctermid}
lappend lKeywords2 {posix_errno}
lappend lKeywords2 {posix_getcwd}
lappend lKeywords2 {posix_getegid}
lappend lKeywords2 {posix_geteuid}
lappend lKeywords2 {posix_getgid}
lappend lKeywords2 {posix_getgrgid}
lappend lKeywords2 {posix_getgrnam}
lappend lKeywords2 {posix_getgroups}
lappend lKeywords2 {posix_getlogin}
lappend lKeywords2 {posix_getpgid}
lappend lKeywords2 {posix_getpgrp}
lappend lKeywords2 {posix_getpid}
lappend lKeywords2 {posix_getppid}
lappend lKeywords2 {posix_getpwnam}
lappend lKeywords2 {posix_getpwuid}
lappend lKeywords2 {posix_getrlimit}
lappend lKeywords2 {posix_getsid}
lappend lKeywords2 {posix_getuid}
lappend lKeywords2 {posix_get_last_error}
lappend lKeywords2 {posix_initgroups}
lappend lKeywords2 {posix_isatty}
lappend lKeywords2 {posix_kill}
lappend lKeywords2 {posix_mkfifo}
lappend lKeywords2 {posix_mknod}
lappend lKeywords2 {posix_setegid}
lappend lKeywords2 {posix_seteuid}
lappend lKeywords2 {posix_setgid}
lappend lKeywords2 {posix_setpgid}
lappend lKeywords2 {posix_setrlimit}
lappend lKeywords2 {posix_setsid}
lappend lKeywords2 {posix_setuid}
lappend lKeywords2 {posix_strerror}
lappend lKeywords2 {posix_times}
lappend lKeywords2 {posix_ttyname}
lappend lKeywords2 {posix_uname}
lappend lKeywords2 {preg_filter}
lappend lKeywords2 {preg_grep}
lappend lKeywords2 {preg_last_error}
lappend lKeywords2 {preg_match}
lappend lKeywords2 {preg_match_all}
lappend lKeywords2 {preg_quote}
lappend lKeywords2 {preg_replace}
lappend lKeywords2 {preg_replace_callback}
lappend lKeywords2 {preg_replace_callback_array}
lappend lKeywords2 {preg_split}
lappend lKeywords2 {pspell_add_to_personal}
lappend lKeywords2 {pspell_add_to_session}
lappend lKeywords2 {pspell_check}
lappend lKeywords2 {pspell_clear_session}
lappend lKeywords2 {pspell_config_create}
lappend lKeywords2 {pspell_config_data_dir}
lappend lKeywords2 {pspell_config_dict_dir}
lappend lKeywords2 {pspell_config_ignore}
lappend lKeywords2 {pspell_config_mode}
lappend lKeywords2 {pspell_config_personal}
lappend lKeywords2 {pspell_config_repl}
lappend lKeywords2 {pspell_config_runtogether}
lappend lKeywords2 {pspell_config_save_repl}
lappend lKeywords2 {pspell_new}
lappend lKeywords2 {pspell_new_config}
lappend lKeywords2 {pspell_new_personal}
lappend lKeywords2 {pspell_save_wordlist}
lappend lKeywords2 {pspell_store_replacement}
lappend lKeywords2 {pspell_suggest}
lappend lKeywords2 {ps_add_bookmark}
lappend lKeywords2 {ps_add_launchlink}
lappend lKeywords2 {ps_add_locallink}
lappend lKeywords2 {ps_add_note}
lappend lKeywords2 {ps_add_pdflink}
lappend lKeywords2 {ps_add_weblink}
lappend lKeywords2 {ps_arc}
lappend lKeywords2 {ps_arcn}
lappend lKeywords2 {ps_begin_page}
lappend lKeywords2 {ps_begin_pattern}
lappend lKeywords2 {ps_begin_template}
lappend lKeywords2 {ps_circle}
lappend lKeywords2 {ps_clip}
lappend lKeywords2 {ps_close}
lappend lKeywords2 {ps_closepath}
lappend lKeywords2 {ps_closepath_stroke}
lappend lKeywords2 {ps_close_image}
lappend lKeywords2 {ps_continue_text}
lappend lKeywords2 {ps_curveto}
lappend lKeywords2 {ps_delete}
lappend lKeywords2 {ps_end_page}
lappend lKeywords2 {ps_end_pattern}
lappend lKeywords2 {ps_end_template}
lappend lKeywords2 {ps_fill}
lappend lKeywords2 {ps_fill_stroke}
lappend lKeywords2 {ps_findfont}
lappend lKeywords2 {ps_get_buffer}
lappend lKeywords2 {ps_get_parameter}
lappend lKeywords2 {ps_get_value}
lappend lKeywords2 {ps_hyphenate}
lappend lKeywords2 {ps_include_file}
lappend lKeywords2 {ps_lineto}
lappend lKeywords2 {ps_makespotcolor}
lappend lKeywords2 {ps_moveto}
lappend lKeywords2 {ps_new}
lappend lKeywords2 {ps_open_file}
lappend lKeywords2 {ps_open_image}
lappend lKeywords2 {ps_open_image_file}
lappend lKeywords2 {ps_open_memory_image}
lappend lKeywords2 {ps_place_image}
lappend lKeywords2 {ps_rect}
lappend lKeywords2 {ps_restore}
lappend lKeywords2 {ps_rotate}
lappend lKeywords2 {ps_save}
lappend lKeywords2 {ps_scale}
lappend lKeywords2 {ps_setcolor}
lappend lKeywords2 {ps_setdash}
lappend lKeywords2 {ps_setflat}
lappend lKeywords2 {ps_setfont}
lappend lKeywords2 {ps_setgray}
lappend lKeywords2 {ps_setlinecap}
lappend lKeywords2 {ps_setlinejoin}
lappend lKeywords2 {ps_setlinewidth}
lappend lKeywords2 {ps_setmiterlimit}
lappend lKeywords2 {ps_setoverprintmode}
lappend lKeywords2 {ps_setpolydash}
lappend lKeywords2 {ps_set_border_color}
lappend lKeywords2 {ps_set_border_dash}
lappend lKeywords2 {ps_set_border_style}
lappend lKeywords2 {ps_set_info}
lappend lKeywords2 {ps_set_parameter}
lappend lKeywords2 {ps_set_text_pos}
lappend lKeywords2 {ps_set_value}
lappend lKeywords2 {ps_shading}
lappend lKeywords2 {ps_shading_pattern}
lappend lKeywords2 {ps_shfill}
lappend lKeywords2 {ps_show}
lappend lKeywords2 {ps_show2}
lappend lKeywords2 {ps_show_boxed}
lappend lKeywords2 {ps_show_xy}
lappend lKeywords2 {ps_show_xy2}
lappend lKeywords2 {ps_stringwidth}
lappend lKeywords2 {ps_string_geometry}
lappend lKeywords2 {ps_stroke}
lappend lKeywords2 {ps_symbol}
lappend lKeywords2 {ps_symbol_name}
lappend lKeywords2 {ps_symbol_width}
lappend lKeywords2 {ps_translate}
lappend lKeywords2 {radius_acct_open}
lappend lKeywords2 {radius_add_server}
lappend lKeywords2 {radius_auth_open}
lappend lKeywords2 {radius_close}
lappend lKeywords2 {radius_config}
lappend lKeywords2 {radius_create_request}
lappend lKeywords2 {radius_cvt_addr}
lappend lKeywords2 {radius_cvt_int}
lappend lKeywords2 {radius_cvt_string}
lappend lKeywords2 {radius_demangle}
lappend lKeywords2 {radius_demangle_mppe_key}
lappend lKeywords2 {radius_get_attr}
lappend lKeywords2 {radius_get_tagged_attr_data}
lappend lKeywords2 {radius_get_tagged_attr_tag}
lappend lKeywords2 {radius_get_vendor_attr}
lappend lKeywords2 {radius_put_addr}
lappend lKeywords2 {radius_put_attr}
lappend lKeywords2 {radius_put_int}
lappend lKeywords2 {radius_put_string}
lappend lKeywords2 {radius_put_vendor_addr}
lappend lKeywords2 {radius_put_vendor_attr}
lappend lKeywords2 {radius_put_vendor_int}
lappend lKeywords2 {radius_put_vendor_string}
lappend lKeywords2 {radius_request_authenticator}
lappend lKeywords2 {radius_salt_encrypt_attr}
lappend lKeywords2 {radius_send_request}
lappend lKeywords2 {radius_server_secret}
lappend lKeywords2 {radius_strerror}
lappend lKeywords2 {readline}
lappend lKeywords2 {readline_add_history}
lappend lKeywords2 {readline_callback_handler_install}
lappend lKeywords2 {readline_callback_handler_remove}
lappend lKeywords2 {readline_callback_read_char}
lappend lKeywords2 {readline_clear_history}
lappend lKeywords2 {readline_completion_function}
lappend lKeywords2 {readline_info}
lappend lKeywords2 {readline_list_history}
lappend lKeywords2 {readline_on_new_line}
lappend lKeywords2 {readline_read_history}
lappend lKeywords2 {readline_redisplay}
lappend lKeywords2 {readline_write_history}
lappend lKeywords2 {restore_error_handler}
lappend lKeywords2 {restore_exception_handler}
lappend lKeywords2 {restore_include_path}
lappend lKeywords2 {rpm_close}
lappend lKeywords2 {rpm_get_tag}
lappend lKeywords2 {rpm_is_valid}
lappend lKeywords2 {rpm_open}
lappend lKeywords2 {rpm_version}
lappend lKeywords2 {rrdc_disconnect}
lappend lKeywords2 {rrd_create}
lappend lKeywords2 {rrd_error}
lappend lKeywords2 {rrd_fetch}
lappend lKeywords2 {rrd_first}
lappend lKeywords2 {rrd_graph}
lappend lKeywords2 {rrd_info}
lappend lKeywords2 {rrd_last}
lappend lKeywords2 {rrd_lastupdate}
lappend lKeywords2 {rrd_restore}
lappend lKeywords2 {rrd_tune}
lappend lKeywords2 {rrd_update}
lappend lKeywords2 {rrd_version}
lappend lKeywords2 {rrd_xport}
lappend lKeywords2 {runkit_class_adopt}
lappend lKeywords2 {runkit_class_emancipate}
lappend lKeywords2 {runkit_constant_add}
lappend lKeywords2 {runkit_constant_redefine}
lappend lKeywords2 {runkit_constant_remove}
lappend lKeywords2 {runkit_function_add}
lappend lKeywords2 {runkit_function_copy}
lappend lKeywords2 {runkit_function_redefine}
lappend lKeywords2 {runkit_function_remove}
lappend lKeywords2 {runkit_function_rename}
lappend lKeywords2 {runkit_import}
lappend lKeywords2 {runkit_lint}
lappend lKeywords2 {runkit_lint_file}
lappend lKeywords2 {runkit_method_add}
lappend lKeywords2 {runkit_method_copy}
lappend lKeywords2 {runkit_method_redefine}
lappend lKeywords2 {runkit_method_remove}
lappend lKeywords2 {runkit_method_rename}
lappend lKeywords2 {runkit_return_value_used}
lappend lKeywords2 {runkit_sandbox_output_handler}
lappend lKeywords2 {runkit_superglobals}
lappend lKeywords2 {sapi_windows_cp_conv}
lappend lKeywords2 {sapi_windows_cp_get}
lappend lKeywords2 {sapi_windows_cp_is_utf8}
lappend lKeywords2 {sapi_windows_cp_set}
lappend lKeywords2 {sem_acquire}
lappend lKeywords2 {sem_get}
lappend lKeywords2 {sem_release}
lappend lKeywords2 {sem_remove}
lappend lKeywords2 {session_abort|void session_abort ( void )}
lappend lKeywords2 {session_cache_expire|int session_cache_expire ([ string $new_cache_expire ] )}
lappend lKeywords2 {session_cache_limiter|string session_cache_limiter ([ string $cache_limiter ] )}
lappend lKeywords2 {session_commit|alias of: session_write_close()}
lappend lKeywords2 {session_create_id|string session_create_id ([ string $prefix ] )}
lappend lKeywords2 {session_decode|bool session_decode ( string $data )}
lappend lKeywords2 {session_destroy|bool session_destroy ( void )}
lappend lKeywords2 {session_encode|string session_encode ( void )}
lappend lKeywords2 {session_gc|int session_gc ( void )}
lappend lKeywords2 {session_get_cookie_params|array session_get_cookie_params ( void )}
lappend lKeywords2 {session_id|string session_id ([ string $id ] )}
lappend lKeywords2 {session_module_name|string session_module_name ([ string $module ] )}
lappend lKeywords2 {session_name|string session_name ([ string $name ] )}
lappend lKeywords2 {session_pgsql_add_error|bool session_pgsql_add_error ( int $error_level [, string $error_message ] )}
lappend lKeywords2 {session_pgsql_get_error|array session_pgsql_get_error ([ bool $with_error_message = false ] )}
lappend lKeywords2 {session_pgsql_get_field|string session_pgsql_get_field ( void )}
lappend lKeywords2 {session_pgsql_reset|bool session_pgsql_reset ( void )}
lappend lKeywords2 {session_pgsql_set_field|bool session_pgsql_set_field ( string $value )}
lappend lKeywords2 {session_pgsql_status|array session_pgsql_status ( void )}
lappend lKeywords2 {session_regenerate_id|bool session_regenerate_id ([ bool $delete_old_session = false ] )}
lappend lKeywords2 {session_register|bool session_register ( mixed $name [, mixed $... ] )}
lappend lKeywords2 {session_register_shutdown|void session_register_shutdown ( void )}
lappend lKeywords2 {session_reset|void session_reset ( void )}
lappend lKeywords2 {session_save_path|string session_save_path ([ string $path ] )}
lappend lKeywords2 {session_set_cookie_params|void session_set_cookie_params ( int $lifetime [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]] )}
lappend lKeywords2 {session_set_save_handler|bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid [, callable $validate_sid [, callable $update_timestamp ]]] )
bool session_set_save_handler ( SessionHandlerInterface $sessionhandler [, bool $register_shutdown = true ] )}
lappend lKeywords2 {session_start|bool session_start ([ array $options = [] ] )}
lappend lKeywords2 {session_status|int session_status ( void )}
lappend lKeywords2 {session_unset|void session_unset ( void )}
lappend lKeywords2 {session_write_close|void session_write_close ( void )}
lappend lKeywords2 {shmop_close}
lappend lKeywords2 {shmop_delete}
lappend lKeywords2 {shmop_open}
lappend lKeywords2 {shmop_read}
lappend lKeywords2 {shmop_size}
lappend lKeywords2 {shmop_write}
lappend lKeywords2 {shm_attach}
lappend lKeywords2 {shm_detach}
lappend lKeywords2 {shm_get_var}
lappend lKeywords2 {shm_has_var}
lappend lKeywords2 {shm_put_var}
lappend lKeywords2 {shm_remove}
lappend lKeywords2 {shm_remove_var}
lappend lKeywords2 {simplexml_import_dom|SimpleXMLElement simplexml_import_dom ( DOMNode $node [, string $class_name = "SimpleXMLElement" ] )}
lappend lKeywords2 {simplexml_load_file|SimpleXMLElement simplexml_load_file ( string $filename [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false ]]]] )}
lappend lKeywords2 {simplexml_load_string|SimpleXMLElement simplexml_load_string ( string $data [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false ]]]] )}
lappend lKeywords2 {snmp2_get}
lappend lKeywords2 {snmp2_getnext}
lappend lKeywords2 {snmp2_real_walk}
lappend lKeywords2 {snmp2_set}
lappend lKeywords2 {snmp2_walk}
lappend lKeywords2 {snmp3_get}
lappend lKeywords2 {snmp3_getnext}
lappend lKeywords2 {snmp3_real_walk}
lappend lKeywords2 {snmp3_set}
lappend lKeywords2 {snmp3_walk}
lappend lKeywords2 {snmpget}
lappend lKeywords2 {snmpgetnext}
lappend lKeywords2 {snmprealwalk}
lappend lKeywords2 {snmpset}
lappend lKeywords2 {snmpwalk}
lappend lKeywords2 {snmpwalkoid}
lappend lKeywords2 {snmp_get_quick_print}
lappend lKeywords2 {snmp_get_valueretrieval}
lappend lKeywords2 {snmp_read_mib}
lappend lKeywords2 {snmp_set_enum_print}
lappend lKeywords2 {snmp_set_oid_numeric_print}
lappend lKeywords2 {snmp_set_oid_output_format}
lappend lKeywords2 {snmp_set_quick_print}
lappend lKeywords2 {snmp_set_valueretrieval}
lappend lKeywords2 {socket_accept}
lappend lKeywords2 {socket_bind}
lappend lKeywords2 {socket_clear_error}
lappend lKeywords2 {socket_close}
lappend lKeywords2 {socket_cmsg_space}
lappend lKeywords2 {socket_connect}
lappend lKeywords2 {socket_create}
lappend lKeywords2 {socket_create_listen}
lappend lKeywords2 {socket_create_pair}
lappend lKeywords2 {socket_getopt}
lappend lKeywords2 {socket_getpeername}
lappend lKeywords2 {socket_getsockname}
lappend lKeywords2 {socket_get_option}
lappend lKeywords2 {socket_get_status}
lappend lKeywords2 {socket_import_stream}
lappend lKeywords2 {socket_last_error}
lappend lKeywords2 {socket_listen}
lappend lKeywords2 {socket_read}
lappend lKeywords2 {socket_recv}
lappend lKeywords2 {socket_recvfrom}
lappend lKeywords2 {socket_recvmsg}
lappend lKeywords2 {socket_select}
lappend lKeywords2 {socket_send}
lappend lKeywords2 {socket_sendmsg}
lappend lKeywords2 {socket_sendto}
lappend lKeywords2 {socket_setopt}
lappend lKeywords2 {socket_set_block}
lappend lKeywords2 {socket_set_blocking}
lappend lKeywords2 {socket_set_nonblock}
lappend lKeywords2 {socket_set_option}
lappend lKeywords2 {socket_set_timeout}
lappend lKeywords2 {socket_shutdown}
lappend lKeywords2 {socket_strerror}
lappend lKeywords2 {socket_write}
lappend lKeywords2 {sodium_add}
lappend lKeywords2 {sodium_bin2hex}
lappend lKeywords2 {sodium_compare}
lappend lKeywords2 {sodium_crypto_aead_aes256gcm_decrypt}
lappend lKeywords2 {sodium_crypto_aead_aes256gcm_encrypt}
lappend lKeywords2 {sodium_crypto_aead_aes256gcm_is_available}
lappend lKeywords2 {sodium_crypto_aead_aes256gcm_keygen}
lappend lKeywords2 {sodium_crypto_aead_chacha20poly1305_decrypt}
lappend lKeywords2 {sodium_crypto_aead_chacha20poly1305_encrypt}
lappend lKeywords2 {sodium_crypto_aead_chacha20poly1305_ietf_decrypt}
lappend lKeywords2 {sodium_crypto_aead_chacha20poly1305_ietf_encrypt}
lappend lKeywords2 {sodium_crypto_aead_chacha20poly1305_ietf_keygen}
lappend lKeywords2 {sodium_crypto_aead_chacha20poly1305_keygen}
lappend lKeywords2 {sodium_crypto_auth}
lappend lKeywords2 {sodium_crypto_auth_keygen}
lappend lKeywords2 {sodium_crypto_auth_verify}
lappend lKeywords2 {sodium_crypto_box}
lappend lKeywords2 {sodium_crypto_box_keypair}
lappend lKeywords2 {sodium_crypto_box_keypair_from_secretkey_and_publickey}
lappend lKeywords2 {sodium_crypto_box_open}
lappend lKeywords2 {sodium_crypto_box_publickey}
lappend lKeywords2 {sodium_crypto_box_publickey_from_secretkey}
lappend lKeywords2 {sodium_crypto_box_seal}
lappend lKeywords2 {sodium_crypto_box_seal_open}
lappend lKeywords2 {sodium_crypto_box_secretkey}
lappend lKeywords2 {sodium_crypto_box_seed_keypair}
lappend lKeywords2 {sodium_crypto_generichash}
lappend lKeywords2 {sodium_crypto_generichash_final}
lappend lKeywords2 {sodium_crypto_generichash_init}
lappend lKeywords2 {sodium_crypto_generichash_keygen}
lappend lKeywords2 {sodium_crypto_generichash_update}
lappend lKeywords2 {sodium_crypto_kdf_derive_from_key}
lappend lKeywords2 {sodium_crypto_kdf_keygen}
lappend lKeywords2 {sodium_crypto_kx_client_session_keys}
lappend lKeywords2 {sodium_crypto_kx_keypair}
lappend lKeywords2 {sodium_crypto_kx_publickey}
lappend lKeywords2 {sodium_crypto_kx_secretkey}
lappend lKeywords2 {sodium_crypto_kx_seed_keypair}
lappend lKeywords2 {sodium_crypto_kx_server_session_keys}
lappend lKeywords2 {sodium_crypto_pwhash}
lappend lKeywords2 {sodium_crypto_pwhash_scryptsalsa208sha256}
lappend lKeywords2 {sodium_crypto_pwhash_scryptsalsa208sha256_str}
lappend lKeywords2 {sodium_crypto_pwhash_scryptsalsa208sha256_str_verify}
lappend lKeywords2 {sodium_crypto_pwhash_str}
lappend lKeywords2 {sodium_crypto_pwhash_str_verify}
lappend lKeywords2 {sodium_crypto_scalarmult}
lappend lKeywords2 {sodium_crypto_scalarmult_base}
lappend lKeywords2 {sodium_crypto_secretbox}
lappend lKeywords2 {sodium_crypto_secretbox_keygen}
lappend lKeywords2 {sodium_crypto_secretbox_open}
lappend lKeywords2 {sodium_crypto_shorthash}
lappend lKeywords2 {sodium_crypto_shorthash_keygen}
lappend lKeywords2 {sodium_crypto_sign}
lappend lKeywords2 {sodium_crypto_sign_detached}
lappend lKeywords2 {sodium_crypto_sign_ed25519_pk_to_curve25519}
lappend lKeywords2 {sodium_crypto_sign_ed25519_sk_to_curve25519}
lappend lKeywords2 {sodium_crypto_sign_keypair}
lappend lKeywords2 {sodium_crypto_sign_keypair_from_secretkey_and_publickey}
lappend lKeywords2 {sodium_crypto_sign_open}
lappend lKeywords2 {sodium_crypto_sign_publickey}
lappend lKeywords2 {sodium_crypto_sign_publickey_from_secretkey}
lappend lKeywords2 {sodium_crypto_sign_secretkey}
lappend lKeywords2 {sodium_crypto_sign_seed_keypair}
lappend lKeywords2 {sodium_crypto_sign_verify_detached}
lappend lKeywords2 {sodium_crypto_stream}
lappend lKeywords2 {sodium_crypto_stream_keygen}
lappend lKeywords2 {sodium_crypto_stream_xor}
lappend lKeywords2 {sodium_hex2bin}
lappend lKeywords2 {sodium_increment}
lappend lKeywords2 {sodium_memcmp}
lappend lKeywords2 {sodium_memzero}
lappend lKeywords2 {sodium_pad}
lappend lKeywords2 {sodium_unpad}
lappend lKeywords2 {spl_autoload}
lappend lKeywords2 {spl_autoload_call}
lappend lKeywords2 {spl_autoload_extensions}
lappend lKeywords2 {spl_autoload_functions}
lappend lKeywords2 {spl_autoload_register}
lappend lKeywords2 {spl_autoload_unregister}
lappend lKeywords2 {spl_classes}
lappend lKeywords2 {spl_object_hash}
lappend lKeywords2 {ssdeep_fuzzy_compare}
lappend lKeywords2 {ssdeep_fuzzy_hash}
lappend lKeywords2 {ssdeep_fuzzy_hash_filename}
lappend lKeywords2 {ssh2_auth_agent}
lappend lKeywords2 {ssh2_auth_hostbased_file}
lappend lKeywords2 {ssh2_auth_none}
lappend lKeywords2 {ssh2_auth_password}
lappend lKeywords2 {ssh2_auth_pubkey_file}
lappend lKeywords2 {ssh2_connect}
lappend lKeywords2 {ssh2_exec}
lappend lKeywords2 {ssh2_fetch_stream}
lappend lKeywords2 {ssh2_fingerprint}
lappend lKeywords2 {ssh2_methods_negotiated}
lappend lKeywords2 {ssh2_publickey_add}
lappend lKeywords2 {ssh2_publickey_init}
lappend lKeywords2 {ssh2_publickey_list}
lappend lKeywords2 {ssh2_publickey_remove}
lappend lKeywords2 {ssh2_scp_recv}
lappend lKeywords2 {ssh2_scp_send}
lappend lKeywords2 {ssh2_sftp}
lappend lKeywords2 {ssh2_sftp_chmod}
lappend lKeywords2 {ssh2_sftp_lstat}
lappend lKeywords2 {ssh2_sftp_mkdir}
lappend lKeywords2 {ssh2_sftp_readlink}
lappend lKeywords2 {ssh2_sftp_realpath}
lappend lKeywords2 {ssh2_sftp_rename}
lappend lKeywords2 {ssh2_sftp_rmdir}
lappend lKeywords2 {ssh2_sftp_stat}
lappend lKeywords2 {ssh2_sftp_symlink}
lappend lKeywords2 {ssh2_sftp_unlink}
lappend lKeywords2 {ssh2_shell}
lappend lKeywords2 {ssh2_tunnel}
lappend lKeywords2 {stats_absolute_deviation}
lappend lKeywords2 {stats_cdf_beta}
lappend lKeywords2 {stats_cdf_binomial}
lappend lKeywords2 {stats_cdf_cauchy}
lappend lKeywords2 {stats_cdf_chisquare}
lappend lKeywords2 {stats_cdf_exponential}
lappend lKeywords2 {stats_cdf_f}
lappend lKeywords2 {stats_cdf_gamma}
lappend lKeywords2 {stats_cdf_laplace}
lappend lKeywords2 {stats_cdf_logistic}
lappend lKeywords2 {stats_cdf_negative_binomial}
lappend lKeywords2 {stats_cdf_noncentral_chisquare}
lappend lKeywords2 {stats_cdf_noncentral_f}
lappend lKeywords2 {stats_cdf_noncentral_t}
lappend lKeywords2 {stats_cdf_normal}
lappend lKeywords2 {stats_cdf_poisson}
lappend lKeywords2 {stats_cdf_t}
lappend lKeywords2 {stats_cdf_uniform}
lappend lKeywords2 {stats_cdf_weibull}
lappend lKeywords2 {stats_covariance}
lappend lKeywords2 {stats_dens_beta}
lappend lKeywords2 {stats_dens_cauchy}
lappend lKeywords2 {stats_dens_chisquare}
lappend lKeywords2 {stats_dens_exponential}
lappend lKeywords2 {stats_dens_f}
lappend lKeywords2 {stats_dens_gamma}
lappend lKeywords2 {stats_dens_laplace}
lappend lKeywords2 {stats_dens_logistic}
lappend lKeywords2 {stats_dens_normal}
lappend lKeywords2 {stats_dens_pmf_binomial}
lappend lKeywords2 {stats_dens_pmf_hypergeometric}
lappend lKeywords2 {stats_dens_pmf_negative_binomial}
lappend lKeywords2 {stats_dens_pmf_poisson}
lappend lKeywords2 {stats_dens_t}
lappend lKeywords2 {stats_dens_uniform}
lappend lKeywords2 {stats_dens_weibull}
lappend lKeywords2 {stats_harmonic_mean}
lappend lKeywords2 {stats_kurtosis}
lappend lKeywords2 {stats_rand_gen_beta}
lappend lKeywords2 {stats_rand_gen_chisquare}
lappend lKeywords2 {stats_rand_gen_exponential}
lappend lKeywords2 {stats_rand_gen_f}
lappend lKeywords2 {stats_rand_gen_funiform}
lappend lKeywords2 {stats_rand_gen_gamma}
lappend lKeywords2 {stats_rand_gen_ibinomial}
lappend lKeywords2 {stats_rand_gen_ibinomial_negative}
lappend lKeywords2 {stats_rand_gen_int}
lappend lKeywords2 {stats_rand_gen_ipoisson}
lappend lKeywords2 {stats_rand_gen_iuniform}
lappend lKeywords2 {stats_rand_gen_noncenral_chisquare}
lappend lKeywords2 {stats_rand_gen_noncentral_chisquare}
lappend lKeywords2 {stats_rand_gen_noncentral_f}
lappend lKeywords2 {stats_rand_gen_noncentral_t}
lappend lKeywords2 {stats_rand_gen_normal}
lappend lKeywords2 {stats_rand_gen_t}
lappend lKeywords2 {stats_rand_get_seeds}
lappend lKeywords2 {stats_rand_phrase_to_seeds}
lappend lKeywords2 {stats_rand_ranf}
lappend lKeywords2 {stats_rand_setall}
lappend lKeywords2 {stats_skew}
lappend lKeywords2 {stats_standard_deviation}
lappend lKeywords2 {stats_stat_binomial_coef}
lappend lKeywords2 {stats_stat_correlation}
lappend lKeywords2 {stats_stat_factorial}
lappend lKeywords2 {stats_stat_independent_t}
lappend lKeywords2 {stats_stat_innerproduct}
lappend lKeywords2 {stats_stat_paired_t}
lappend lKeywords2 {stats_stat_percentile}
lappend lKeywords2 {stats_stat_powersum}
lappend lKeywords2 {stats_variance}
lappend lKeywords2 {stomp_connect_error}
lappend lKeywords2 {stomp_version}
lappend lKeywords2 {stream_bucket_append}
lappend lKeywords2 {stream_bucket_make_writeable}
lappend lKeywords2 {stream_bucket_new}
lappend lKeywords2 {stream_bucket_prepend}
lappend lKeywords2 {stream_context_create}
lappend lKeywords2 {stream_context_get_default}
lappend lKeywords2 {stream_context_get_options}
lappend lKeywords2 {stream_context_get_params}
lappend lKeywords2 {stream_context_set_default}
lappend lKeywords2 {stream_context_set_option}
lappend lKeywords2 {stream_context_set_params}
lappend lKeywords2 {stream_copy_to_stream}
lappend lKeywords2 {stream_encoding}
lappend lKeywords2 {stream_filter_append}
lappend lKeywords2 {stream_filter_prepend}
lappend lKeywords2 {stream_filter_register}
lappend lKeywords2 {stream_filter_remove}
lappend lKeywords2 {stream_get_contents}
lappend lKeywords2 {stream_get_filters}
lappend lKeywords2 {stream_get_line}
lappend lKeywords2 {stream_get_meta_data}
lappend lKeywords2 {stream_get_transports}
lappend lKeywords2 {stream_get_wrappers}
lappend lKeywords2 {stream_is_local}
lappend lKeywords2 {stream_notification_callback}
lappend lKeywords2 {stream_register_wrapper}
lappend lKeywords2 {stream_resolve_include_path}
lappend lKeywords2 {stream_select}
lappend lKeywords2 {stream_set_blocking}
lappend lKeywords2 {stream_set_chunk_size}
lappend lKeywords2 {stream_set_read_buffer}
lappend lKeywords2 {stream_set_timeout}
lappend lKeywords2 {stream_set_write_buffer}
lappend lKeywords2 {stream_socket_accept}
lappend lKeywords2 {stream_socket_client}
lappend lKeywords2 {stream_socket_enable_crypto}
lappend lKeywords2 {stream_socket_get_name}
lappend lKeywords2 {stream_socket_pair}
lappend lKeywords2 {stream_socket_recvfrom}
lappend lKeywords2 {stream_socket_sendto}
lappend lKeywords2 {stream_socket_server}
lappend lKeywords2 {stream_socket_shutdown}
lappend lKeywords2 {stream_supports_lock}
lappend lKeywords2 {stream_wrapper_register}
lappend lKeywords2 {stream_wrapper_restore}
lappend lKeywords2 {stream_wrapper_unregister}
lappend lKeywords2 {svn_add}
lappend lKeywords2 {svn_auth_get_parameter}
lappend lKeywords2 {svn_auth_set_parameter}
lappend lKeywords2 {svn_blame}
lappend lKeywords2 {svn_cat}
lappend lKeywords2 {svn_checkout}
lappend lKeywords2 {svn_cleanup}
lappend lKeywords2 {svn_client_version}
lappend lKeywords2 {svn_commit}
lappend lKeywords2 {svn_delete}
lappend lKeywords2 {svn_diff}
lappend lKeywords2 {svn_export}
lappend lKeywords2 {svn_fs_abort_txn}
lappend lKeywords2 {svn_fs_apply_text}
lappend lKeywords2 {svn_fs_begin_txn2}
lappend lKeywords2 {svn_fs_change_node_prop}
lappend lKeywords2 {svn_fs_check_path}
lappend lKeywords2 {svn_fs_contents_changed}
lappend lKeywords2 {svn_fs_copy}
lappend lKeywords2 {svn_fs_delete}
lappend lKeywords2 {svn_fs_dir_entries}
lappend lKeywords2 {svn_fs_file_contents}
lappend lKeywords2 {svn_fs_file_length}
lappend lKeywords2 {svn_fs_is_dir}
lappend lKeywords2 {svn_fs_is_file}
lappend lKeywords2 {svn_fs_make_dir}
lappend lKeywords2 {svn_fs_make_file}
lappend lKeywords2 {svn_fs_node_created_rev}
lappend lKeywords2 {svn_fs_node_prop}
lappend lKeywords2 {svn_fs_props_changed}
lappend lKeywords2 {svn_fs_revision_prop}
lappend lKeywords2 {svn_fs_revision_root}
lappend lKeywords2 {svn_fs_txn_root}
lappend lKeywords2 {svn_fs_youngest_rev}
lappend lKeywords2 {svn_import}
lappend lKeywords2 {svn_log}
lappend lKeywords2 {svn_ls}
lappend lKeywords2 {svn_mkdir}
lappend lKeywords2 {svn_repos_create}
lappend lKeywords2 {svn_repos_fs}
lappend lKeywords2 {svn_repos_fs_begin_txn_for_commit}
lappend lKeywords2 {svn_repos_fs_commit_txn}
lappend lKeywords2 {svn_repos_hotcopy}
lappend lKeywords2 {svn_repos_open}
lappend lKeywords2 {svn_repos_recover}
lappend lKeywords2 {svn_revert}
lappend lKeywords2 {svn_status}
lappend lKeywords2 {svn_update}
lappend lKeywords2 {swoole_async_dns_lookup}
lappend lKeywords2 {swoole_async_read}
lappend lKeywords2 {swoole_async_readfile}
lappend lKeywords2 {swoole_async_set}
lappend lKeywords2 {swoole_async_write}
lappend lKeywords2 {swoole_async_writefile}
lappend lKeywords2 {swoole_client_select}
lappend lKeywords2 {swoole_cpu_num}
lappend lKeywords2 {swoole_errno}
lappend lKeywords2 {swoole_event_add}
lappend lKeywords2 {swoole_event_defer}
lappend lKeywords2 {swoole_event_del}
lappend lKeywords2 {swoole_event_exit}
lappend lKeywords2 {swoole_event_set}
lappend lKeywords2 {swoole_event_wait}
lappend lKeywords2 {swoole_event_write}
lappend lKeywords2 {swoole_get_local_ip}
lappend lKeywords2 {swoole_last_error}
lappend lKeywords2 {swoole_load_module}
lappend lKeywords2 {swoole_select}
lappend lKeywords2 {swoole_set_process_name}
lappend lKeywords2 {swoole_strerror}
lappend lKeywords2 {swoole_timer_after}
lappend lKeywords2 {swoole_timer_tick}
lappend lKeywords2 {swoole_version}
lappend lKeywords2 {tidy_access_count}
lappend lKeywords2 {tidy_config_count}
lappend lKeywords2 {tidy_error_count}
lappend lKeywords2 {tidy_get_output}
lappend lKeywords2 {tidy_load_config}
lappend lKeywords2 {tidy_reset_config}
lappend lKeywords2 {tidy_save_config}
lappend lKeywords2 {tidy_setopt}
lappend lKeywords2 {tidy_set_encoding}
lappend lKeywords2 {tidy_warning_count}
lappend lKeywords2 {timezone_abbreviations_list}
lappend lKeywords2 {timezone_identifiers_list}
lappend lKeywords2 {timezone_location_get}
lappend lKeywords2 {timezone_name_from_abbr}
lappend lKeywords2 {timezone_name_get}
lappend lKeywords2 {timezone_offset_get}
lappend lKeywords2 {timezone_open}
lappend lKeywords2 {timezone_transitions_get}
lappend lKeywords2 {timezone_version_get}
lappend lKeywords2 {trader_acos}
lappend lKeywords2 {trader_ad}
lappend lKeywords2 {trader_add}
lappend lKeywords2 {trader_adosc}
lappend lKeywords2 {trader_adx}
lappend lKeywords2 {trader_adxr}
lappend lKeywords2 {trader_apo}
lappend lKeywords2 {trader_aroon}
lappend lKeywords2 {trader_aroonosc}
lappend lKeywords2 {trader_asin}
lappend lKeywords2 {trader_atan}
lappend lKeywords2 {trader_atr}
lappend lKeywords2 {trader_avgprice}
lappend lKeywords2 {trader_bbands}
lappend lKeywords2 {trader_beta}
lappend lKeywords2 {trader_bop}
lappend lKeywords2 {trader_cci}
lappend lKeywords2 {trader_cdl2crows}
lappend lKeywords2 {trader_cdl3blackcrows}
lappend lKeywords2 {trader_cdl3inside}
lappend lKeywords2 {trader_cdl3linestrike}
lappend lKeywords2 {trader_cdl3outside}
lappend lKeywords2 {trader_cdl3starsinsouth}
lappend lKeywords2 {trader_cdl3whitesoldiers}
lappend lKeywords2 {trader_cdlabandonedbaby}
lappend lKeywords2 {trader_cdladvanceblock}
lappend lKeywords2 {trader_cdlbelthold}
lappend lKeywords2 {trader_cdlbreakaway}
lappend lKeywords2 {trader_cdlclosingmarubozu}
lappend lKeywords2 {trader_cdlconcealbabyswall}
lappend lKeywords2 {trader_cdlcounterattack}
lappend lKeywords2 {trader_cdldarkcloudcover}
lappend lKeywords2 {trader_cdldoji}
lappend lKeywords2 {trader_cdldojistar}
lappend lKeywords2 {trader_cdldragonflydoji}
lappend lKeywords2 {trader_cdlengulfing}
lappend lKeywords2 {trader_cdleveningdojistar}
lappend lKeywords2 {trader_cdleveningstar}
lappend lKeywords2 {trader_cdlgapsidesidewhite}
lappend lKeywords2 {trader_cdlgravestonedoji}
lappend lKeywords2 {trader_cdlhammer}
lappend lKeywords2 {trader_cdlhangingman}
lappend lKeywords2 {trader_cdlharami}
lappend lKeywords2 {trader_cdlharamicross}
lappend lKeywords2 {trader_cdlhighwave}
lappend lKeywords2 {trader_cdlhikkake}
lappend lKeywords2 {trader_cdlhikkakemod}
lappend lKeywords2 {trader_cdlhomingpigeon}
lappend lKeywords2 {trader_cdlidentical3crows}
lappend lKeywords2 {trader_cdlinneck}
lappend lKeywords2 {trader_cdlinvertedhammer}
lappend lKeywords2 {trader_cdlkicking}
lappend lKeywords2 {trader_cdlkickingbylength}
lappend lKeywords2 {trader_cdlladderbottom}
lappend lKeywords2 {trader_cdllongleggeddoji}
lappend lKeywords2 {trader_cdllongline}
lappend lKeywords2 {trader_cdlmarubozu}
lappend lKeywords2 {trader_cdlmatchinglow}
lappend lKeywords2 {trader_cdlmathold}
lappend lKeywords2 {trader_cdlmorningdojistar}
lappend lKeywords2 {trader_cdlmorningstar}
lappend lKeywords2 {trader_cdlonneck}
lappend lKeywords2 {trader_cdlpiercing}
lappend lKeywords2 {trader_cdlrickshawman}
lappend lKeywords2 {trader_cdlrisefall3methods}
lappend lKeywords2 {trader_cdlseparatinglines}
lappend lKeywords2 {trader_cdlshootingstar}
lappend lKeywords2 {trader_cdlshortline}
lappend lKeywords2 {trader_cdlspinningtop}
lappend lKeywords2 {trader_cdlstalledpattern}
lappend lKeywords2 {trader_cdlsticksandwich}
lappend lKeywords2 {trader_cdltakuri}
lappend lKeywords2 {trader_cdltasukigap}
lappend lKeywords2 {trader_cdlthrusting}
lappend lKeywords2 {trader_cdltristar}
lappend lKeywords2 {trader_cdlunique3river}
lappend lKeywords2 {trader_cdlupsidegap2crows}
lappend lKeywords2 {trader_cdlxsidegap3methods}
lappend lKeywords2 {trader_ceil}
lappend lKeywords2 {trader_cmo}
lappend lKeywords2 {trader_correl}
lappend lKeywords2 {trader_cos}
lappend lKeywords2 {trader_cosh}
lappend lKeywords2 {trader_dema}
lappend lKeywords2 {trader_div}
lappend lKeywords2 {trader_dx}
lappend lKeywords2 {trader_ema}
lappend lKeywords2 {trader_errno}
lappend lKeywords2 {trader_exp}
lappend lKeywords2 {trader_floor}
lappend lKeywords2 {trader_get_compat}
lappend lKeywords2 {trader_get_unstable_period}
lappend lKeywords2 {trader_ht_dcperiod}
lappend lKeywords2 {trader_ht_dcphase}
lappend lKeywords2 {trader_ht_phasor}
lappend lKeywords2 {trader_ht_sine}
lappend lKeywords2 {trader_ht_trendline}
lappend lKeywords2 {trader_ht_trendmode}
lappend lKeywords2 {trader_kama}
lappend lKeywords2 {trader_linearreg}
lappend lKeywords2 {trader_linearreg_angle}
lappend lKeywords2 {trader_linearreg_intercept}
lappend lKeywords2 {trader_linearreg_slope}
lappend lKeywords2 {trader_ln}
lappend lKeywords2 {trader_log10}
lappend lKeywords2 {trader_ma}
lappend lKeywords2 {trader_macd}
lappend lKeywords2 {trader_macdext}
lappend lKeywords2 {trader_macdfix}
lappend lKeywords2 {trader_mama}
lappend lKeywords2 {trader_mavp}
lappend lKeywords2 {trader_max}
lappend lKeywords2 {trader_maxindex}
lappend lKeywords2 {trader_medprice}
lappend lKeywords2 {trader_mfi}
lappend lKeywords2 {trader_midpoint}
lappend lKeywords2 {trader_midprice}
lappend lKeywords2 {trader_min}
lappend lKeywords2 {trader_minindex}
lappend lKeywords2 {trader_minmax}
lappend lKeywords2 {trader_minmaxindex}
lappend lKeywords2 {trader_minus_di}
lappend lKeywords2 {trader_minus_dm}
lappend lKeywords2 {trader_mom}
lappend lKeywords2 {trader_mult}
lappend lKeywords2 {trader_natr}
lappend lKeywords2 {trader_obv}
lappend lKeywords2 {trader_plus_di}
lappend lKeywords2 {trader_plus_dm}
lappend lKeywords2 {trader_ppo}
lappend lKeywords2 {trader_roc}
lappend lKeywords2 {trader_rocp}
lappend lKeywords2 {trader_rocr}
lappend lKeywords2 {trader_rocr100}
lappend lKeywords2 {trader_rsi}
lappend lKeywords2 {trader_sar}
lappend lKeywords2 {trader_sarext}
lappend lKeywords2 {trader_set_compat}
lappend lKeywords2 {trader_set_unstable_period}
lappend lKeywords2 {trader_sin}
lappend lKeywords2 {trader_sinh}
lappend lKeywords2 {trader_sma}
lappend lKeywords2 {trader_sqrt}
lappend lKeywords2 {trader_stddev}
lappend lKeywords2 {trader_stoch}
lappend lKeywords2 {trader_stochf}
lappend lKeywords2 {trader_stochrsi}
lappend lKeywords2 {trader_sub}
lappend lKeywords2 {trader_sum}
lappend lKeywords2 {trader_t3}
lappend lKeywords2 {trader_tan}
lappend lKeywords2 {trader_tanh}
lappend lKeywords2 {trader_tema}
lappend lKeywords2 {trader_trange}
lappend lKeywords2 {trader_trima}
lappend lKeywords2 {trader_trix}
lappend lKeywords2 {trader_tsf}
lappend lKeywords2 {trader_typprice}
lappend lKeywords2 {trader_ultosc}
lappend lKeywords2 {trader_var}
lappend lKeywords2 {trader_wclprice}
lappend lKeywords2 {trader_willr}
lappend lKeywords2 {trader_wma}
lappend lKeywords2 {udm_add_search_limit}
lappend lKeywords2 {udm_alloc_agent}
lappend lKeywords2 {udm_alloc_agent_array}
lappend lKeywords2 {udm_api_version}
lappend lKeywords2 {udm_cat_list}
lappend lKeywords2 {udm_cat_path}
lappend lKeywords2 {udm_check_charset}
lappend lKeywords2 {udm_clear_search_limits}
lappend lKeywords2 {udm_crc32}
lappend lKeywords2 {udm_errno}
lappend lKeywords2 {udm_error}
lappend lKeywords2 {udm_find}
lappend lKeywords2 {udm_free_agent}
lappend lKeywords2 {udm_free_ispell_data}
lappend lKeywords2 {udm_free_res}
lappend lKeywords2 {udm_get_doc_count}
lappend lKeywords2 {udm_get_res_field}
lappend lKeywords2 {udm_get_res_param}
lappend lKeywords2 {udm_hash32}
lappend lKeywords2 {udm_load_ispell_data}
lappend lKeywords2 {udm_set_agent_param}
lappend lKeywords2 {uopz_allow_exit}
lappend lKeywords2 {uopz_backup}
lappend lKeywords2 {uopz_compose}
lappend lKeywords2 {uopz_copy}
lappend lKeywords2 {uopz_delete}
lappend lKeywords2 {uopz_extend}
lappend lKeywords2 {uopz_flags}
lappend lKeywords2 {uopz_function}
lappend lKeywords2 {uopz_get_exit_status}
lappend lKeywords2 {uopz_get_mock}
lappend lKeywords2 {uopz_get_return}
lappend lKeywords2 {uopz_implement}
lappend lKeywords2 {uopz_overload}
lappend lKeywords2 {uopz_redefine}
lappend lKeywords2 {uopz_rename}
lappend lKeywords2 {uopz_restore}
lappend lKeywords2 {uopz_set_mock}
lappend lKeywords2 {uopz_set_return}
lappend lKeywords2 {uopz_undefine}
lappend lKeywords2 {uopz_unset_mock}
lappend lKeywords2 {uopz_unset_return}
lappend lKeywords2 {variant_abs}
lappend lKeywords2 {variant_add}
lappend lKeywords2 {variant_and}
lappend lKeywords2 {variant_cast}
lappend lKeywords2 {variant_cat}
lappend lKeywords2 {variant_cmp}
lappend lKeywords2 {variant_date_from_timestamp}
lappend lKeywords2 {variant_date_to_timestamp}
lappend lKeywords2 {variant_div}
lappend lKeywords2 {variant_eqv}
lappend lKeywords2 {variant_fix}
lappend lKeywords2 {variant_get_type}
lappend lKeywords2 {variant_idiv}
lappend lKeywords2 {variant_imp}
lappend lKeywords2 {variant_int}
lappend lKeywords2 {variant_mod}
lappend lKeywords2 {variant_mul}
lappend lKeywords2 {variant_neg}
lappend lKeywords2 {variant_not}
lappend lKeywords2 {variant_or}
lappend lKeywords2 {variant_pow}
lappend lKeywords2 {variant_round}
lappend lKeywords2 {variant_set}
lappend lKeywords2 {variant_set_type}
lappend lKeywords2 {variant_sub}
lappend lKeywords2 {variant_xor}
lappend lKeywords2 {vpopmail_add_alias_domain}
lappend lKeywords2 {vpopmail_add_alias_domain_ex}
lappend lKeywords2 {vpopmail_add_domain}
lappend lKeywords2 {vpopmail_add_domain_ex}
lappend lKeywords2 {vpopmail_add_user}
lappend lKeywords2 {vpopmail_alias_add}
lappend lKeywords2 {vpopmail_alias_del}
lappend lKeywords2 {vpopmail_alias_del_domain}
lappend lKeywords2 {vpopmail_alias_get}
lappend lKeywords2 {vpopmail_alias_get_all}
lappend lKeywords2 {vpopmail_auth_user}
lappend lKeywords2 {vpopmail_del_domain}
lappend lKeywords2 {vpopmail_del_domain_ex}
lappend lKeywords2 {vpopmail_del_user}
lappend lKeywords2 {vpopmail_error}
lappend lKeywords2 {vpopmail_passwd}
lappend lKeywords2 {vpopmail_set_user_quota}
lappend lKeywords2 {wddx_add_vars}
lappend lKeywords2 {wddx_deserialize}
lappend lKeywords2 {wddx_packet_end}
lappend lKeywords2 {wddx_packet_start}
lappend lKeywords2 {wddx_serialize_value}
lappend lKeywords2 {wddx_serialize_vars}
lappend lKeywords2 {win32_continue_service}
lappend lKeywords2 {win32_create_service}
lappend lKeywords2 {win32_delete_service}
lappend lKeywords2 {win32_get_last_control_message}
lappend lKeywords2 {win32_pause_service}
lappend lKeywords2 {win32_ps_list_procs}
lappend lKeywords2 {win32_ps_stat_mem}
lappend lKeywords2 {win32_ps_stat_proc}
lappend lKeywords2 {win32_query_service_status}
lappend lKeywords2 {win32_set_service_status}
lappend lKeywords2 {win32_start_service}
lappend lKeywords2 {win32_start_service_ctrl_dispatcher}
lappend lKeywords2 {win32_stop_service}
lappend lKeywords2 {wincache_fcache_fileinfo}
lappend lKeywords2 {wincache_fcache_meminfo}
lappend lKeywords2 {wincache_lock}
lappend lKeywords2 {wincache_ocache_fileinfo}
lappend lKeywords2 {wincache_ocache_meminfo}
lappend lKeywords2 {wincache_refresh_if_changed}
lappend lKeywords2 {wincache_rplist_fileinfo}
lappend lKeywords2 {wincache_rplist_meminfo}
lappend lKeywords2 {wincache_scache_info}
lappend lKeywords2 {wincache_scache_meminfo}
lappend lKeywords2 {wincache_ucache_add}
lappend lKeywords2 {wincache_ucache_cas}
lappend lKeywords2 {wincache_ucache_clear}
lappend lKeywords2 {wincache_ucache_dec}
lappend lKeywords2 {wincache_ucache_delete}
lappend lKeywords2 {wincache_ucache_get}
lappend lKeywords2 {wincache_ucache_inc}
lappend lKeywords2 {wincache_ucache_info}
lappend lKeywords2 {wincache_ucache_meminfo}
lappend lKeywords2 {wincache_ucache_set}
lappend lKeywords2 {wincache_unlock}
lappend lKeywords2 {xattr_get}
lappend lKeywords2 {xattr_list}
lappend lKeywords2 {xattr_remove}
lappend lKeywords2 {xattr_set}
lappend lKeywords2 {xattr_supported}
lappend lKeywords2 {xdiff_file_bdiff}
lappend lKeywords2 {xdiff_file_bdiff_size}
lappend lKeywords2 {xdiff_file_bpatch}
lappend lKeywords2 {xdiff_file_diff}
lappend lKeywords2 {xdiff_file_diff_binary}
lappend lKeywords2 {xdiff_file_merge3}
lappend lKeywords2 {xdiff_file_patch}
lappend lKeywords2 {xdiff_file_patch_binary}
lappend lKeywords2 {xdiff_file_rabdiff}
lappend lKeywords2 {xdiff_string_bdiff}
lappend lKeywords2 {xdiff_string_bdiff_size}
lappend lKeywords2 {xdiff_string_bpatch}
lappend lKeywords2 {xdiff_string_diff}
lappend lKeywords2 {xdiff_string_diff_binary}
lappend lKeywords2 {xdiff_string_merge3}
lappend lKeywords2 {xdiff_string_patch}
lappend lKeywords2 {xdiff_string_patch_binary}
lappend lKeywords2 {xdiff_string_rabdiff}
lappend lKeywords2 {xhprof_disable}
lappend lKeywords2 {xhprof_enable}
lappend lKeywords2 {xhprof_sample_disable}
lappend lKeywords2 {xhprof_sample_enable}
lappend lKeywords2 {xmlrpc_decode}
lappend lKeywords2 {xmlrpc_decode_request}
lappend lKeywords2 {xmlrpc_encode}
lappend lKeywords2 {xmlrpc_encode_request}
lappend lKeywords2 {xmlrpc_get_type}
lappend lKeywords2 {xmlrpc_is_fault}
lappend lKeywords2 {xmlrpc_parse_method_descriptions}
lappend lKeywords2 {xmlrpc_server_add_introspection_data}
lappend lKeywords2 {xmlrpc_server_call_method}
lappend lKeywords2 {xmlrpc_server_create}
lappend lKeywords2 {xmlrpc_server_destroy}
lappend lKeywords2 {xmlrpc_server_register_introspection_callback}
lappend lKeywords2 {xmlrpc_server_register_method}
lappend lKeywords2 {xmlrpc_set_type}
lappend lKeywords2 {xml_error_string}
lappend lKeywords2 {xml_get_current_byte_index}
lappend lKeywords2 {xml_get_current_column_number}
lappend lKeywords2 {xml_get_current_line_number}
lappend lKeywords2 {xml_get_error_code}
lappend lKeywords2 {xml_parse}
lappend lKeywords2 {xml_parser_create}
lappend lKeywords2 {xml_parser_create_ns}
lappend lKeywords2 {xml_parser_free}
lappend lKeywords2 {xml_parser_get_option}
lappend lKeywords2 {xml_parser_set_option}
lappend lKeywords2 {xml_parse_into_struct}
lappend lKeywords2 {xml_set_character_data_handler}
lappend lKeywords2 {xml_set_default_handler}
lappend lKeywords2 {xml_set_element_handler}
lappend lKeywords2 {xml_set_end_namespace_decl_handler}
lappend lKeywords2 {xml_set_external_entity_ref_handler}
lappend lKeywords2 {xml_set_notation_decl_handler}
lappend lKeywords2 {xml_set_object}
lappend lKeywords2 {xml_set_processing_instruction_handler}
lappend lKeywords2 {xml_set_start_namespace_decl_handler}
lappend lKeywords2 {xml_set_unparsed_entity_decl_handler}
lappend lKeywords2 {yaml_emit}
lappend lKeywords2 {yaml_emit_file}
lappend lKeywords2 {yaml_parse}
lappend lKeywords2 {yaml_parse_file}
lappend lKeywords2 {yaml_parse_url}
lappend lKeywords2 {yaz_addinfo}
lappend lKeywords2 {yaz_ccl_conf}
lappend lKeywords2 {yaz_ccl_parse}
lappend lKeywords2 {yaz_close}
lappend lKeywords2 {yaz_connect}
lappend lKeywords2 {yaz_database}
lappend lKeywords2 {yaz_element}
lappend lKeywords2 {yaz_errno}
lappend lKeywords2 {yaz_error}
lappend lKeywords2 {yaz_es}
lappend lKeywords2 {yaz_es_result}
lappend lKeywords2 {yaz_get_option}
lappend lKeywords2 {yaz_hits}
lappend lKeywords2 {yaz_itemorder}
lappend lKeywords2 {yaz_present}
lappend lKeywords2 {yaz_range}
lappend lKeywords2 {yaz_record}
lappend lKeywords2 {yaz_scan}
lappend lKeywords2 {yaz_scan_result}
lappend lKeywords2 {yaz_schema}
lappend lKeywords2 {yaz_search}
lappend lKeywords2 {yaz_set_option}
lappend lKeywords2 {yaz_sort}
lappend lKeywords2 {yaz_syntax}
lappend lKeywords2 {yaz_wait}
lappend lKeywords2 {yp_all}
lappend lKeywords2 {yp_cat}
lappend lKeywords2 {yp_errno}
lappend lKeywords2 {yp_err_string}
lappend lKeywords2 {yp_first}
lappend lKeywords2 {yp_get_default_domain}
lappend lKeywords2 {yp_master}
lappend lKeywords2 {yp_match}
lappend lKeywords2 {yp_next}
lappend lKeywords2 {yp_order}
lappend lKeywords2 {zend_logo_guid}
lappend lKeywords2 {zend_thread_id}
lappend lKeywords2 {zend_version}
lappend lKeywords2 {zip_close}
lappend lKeywords2 {zip_entry_close}
lappend lKeywords2 {zip_entry_compressedsize}
lappend lKeywords2 {zip_entry_compressionmethod}
lappend lKeywords2 {zip_entry_filesize}
lappend lKeywords2 {zip_entry_name}
lappend lKeywords2 {zip_entry_open}
lappend lKeywords2 {zip_entry_read}
lappend lKeywords2 {zip_open}
lappend lKeywords2 {zip_read}
lappend lKeywords2 {zlib_decode}
lappend lKeywords2 {zlib_encode}
lappend lKeywords2 {zlib_get_coding_type}


################################################################################
# Color #3
#  - $lKeywords3  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart3 :: char   :: all words starting with this character matches
#  - $sChars3     :: string :: every char in string matches
#  - $sRegexp3    :: regexp :: regular expression in Tcl style
# Database Stuff
lappend lKeywords3 {cubrid_affected_rows}
lappend lKeywords3 {cubrid_bind}
lappend lKeywords3 {cubrid_client_encoding}
lappend lKeywords3 {cubrid_close}
lappend lKeywords3 {cubrid_close_prepare}
lappend lKeywords3 {cubrid_close_request}
lappend lKeywords3 {cubrid_column_names}
lappend lKeywords3 {cubrid_column_types}
lappend lKeywords3 {cubrid_col_get}
lappend lKeywords3 {cubrid_col_size}
lappend lKeywords3 {cubrid_commit}
lappend lKeywords3 {cubrid_connect}
lappend lKeywords3 {cubrid_connect_with_url}
lappend lKeywords3 {cubrid_current_oid}
lappend lKeywords3 {cubrid_data_seek}
lappend lKeywords3 {cubrid_db_name}
lappend lKeywords3 {cubrid_disconnect}
lappend lKeywords3 {cubrid_drop}
lappend lKeywords3 {cubrid_errno}
lappend lKeywords3 {cubrid_error}
lappend lKeywords3 {cubrid_error_code}
lappend lKeywords3 {cubrid_error_code_facility}
lappend lKeywords3 {cubrid_error_msg}
lappend lKeywords3 {cubrid_execute}
lappend lKeywords3 {cubrid_fetch}
lappend lKeywords3 {cubrid_fetch_array}
lappend lKeywords3 {cubrid_fetch_assoc}
lappend lKeywords3 {cubrid_fetch_field}
lappend lKeywords3 {cubrid_fetch_lengths}
lappend lKeywords3 {cubrid_fetch_object}
lappend lKeywords3 {cubrid_fetch_row}
lappend lKeywords3 {cubrid_field_flags}
lappend lKeywords3 {cubrid_field_len}
lappend lKeywords3 {cubrid_field_name}
lappend lKeywords3 {cubrid_field_seek}
lappend lKeywords3 {cubrid_field_table}
lappend lKeywords3 {cubrid_field_type}
lappend lKeywords3 {cubrid_free_result}
lappend lKeywords3 {cubrid_get}
lappend lKeywords3 {cubrid_get_autocommit}
lappend lKeywords3 {cubrid_get_charset}
lappend lKeywords3 {cubrid_get_class_name}
lappend lKeywords3 {cubrid_get_client_info}
lappend lKeywords3 {cubrid_get_db_parameter}
lappend lKeywords3 {cubrid_get_query_timeout}
lappend lKeywords3 {cubrid_get_server_info}
lappend lKeywords3 {cubrid_insert_id}
lappend lKeywords3 {cubrid_is_instance}
lappend lKeywords3 {cubrid_list_dbs}
lappend lKeywords3 {cubrid_load_from_glo}
lappend lKeywords3 {cubrid_lob2_bind}
lappend lKeywords3 {cubrid_lob2_close}
lappend lKeywords3 {cubrid_lob2_export}
lappend lKeywords3 {cubrid_lob2_import}
lappend lKeywords3 {cubrid_lob2_new}
lappend lKeywords3 {cubrid_lob2_read}
lappend lKeywords3 {cubrid_lob2_seek}
lappend lKeywords3 {cubrid_lob2_seek64}
lappend lKeywords3 {cubrid_lob2_size}
lappend lKeywords3 {cubrid_lob2_size64}
lappend lKeywords3 {cubrid_lob2_tell}
lappend lKeywords3 {cubrid_lob2_tell64}
lappend lKeywords3 {cubrid_lob2_write}
lappend lKeywords3 {cubrid_lob_close}
lappend lKeywords3 {cubrid_lob_export}
lappend lKeywords3 {cubrid_lob_get}
lappend lKeywords3 {cubrid_lob_send}
lappend lKeywords3 {cubrid_lob_size}
lappend lKeywords3 {cubrid_lock_read}
lappend lKeywords3 {cubrid_lock_write}
lappend lKeywords3 {cubrid_move_cursor}
lappend lKeywords3 {cubrid_new_glo}
lappend lKeywords3 {cubrid_next_result}
lappend lKeywords3 {cubrid_num_cols}
lappend lKeywords3 {cubrid_num_fields}
lappend lKeywords3 {cubrid_num_rows}
lappend lKeywords3 {cubrid_pconnect}
lappend lKeywords3 {cubrid_pconnect_with_url}
lappend lKeywords3 {cubrid_ping}
lappend lKeywords3 {cubrid_prepare}
lappend lKeywords3 {cubrid_put}
lappend lKeywords3 {cubrid_query}
lappend lKeywords3 {cubrid_real_escape_string}
lappend lKeywords3 {cubrid_result}
lappend lKeywords3 {cubrid_rollback}
lappend lKeywords3 {cubrid_save_to_glo}
lappend lKeywords3 {cubrid_schema}
lappend lKeywords3 {cubrid_send_glo}
lappend lKeywords3 {cubrid_seq_drop}
lappend lKeywords3 {cubrid_seq_insert}
lappend lKeywords3 {cubrid_seq_put}
lappend lKeywords3 {cubrid_set_add}
lappend lKeywords3 {cubrid_set_autocommit}
lappend lKeywords3 {cubrid_set_db_parameter}
lappend lKeywords3 {cubrid_set_drop}
lappend lKeywords3 {cubrid_set_query_timeout}
lappend lKeywords3 {cubrid_unbuffered_query}
lappend lKeywords3 {cubrid_version}
lappend lKeywords3 {db2_autocommit}
lappend lKeywords3 {db2_bind_param}
lappend lKeywords3 {db2_client_info}
lappend lKeywords3 {db2_close}
lappend lKeywords3 {db2_columns}
lappend lKeywords3 {db2_column_privileges}
lappend lKeywords3 {db2_commit}
lappend lKeywords3 {db2_connect}
lappend lKeywords3 {db2_conn_error}
lappend lKeywords3 {db2_conn_errormsg}
lappend lKeywords3 {db2_cursor_type}
lappend lKeywords3 {db2_escape_string}
lappend lKeywords3 {db2_exec}
lappend lKeywords3 {db2_execute}
lappend lKeywords3 {db2_fetch_array}
lappend lKeywords3 {db2_fetch_assoc}
lappend lKeywords3 {db2_fetch_both}
lappend lKeywords3 {db2_fetch_object}
lappend lKeywords3 {db2_fetch_row}
lappend lKeywords3 {db2_field_display_size}
lappend lKeywords3 {db2_field_name}
lappend lKeywords3 {db2_field_num}
lappend lKeywords3 {db2_field_precision}
lappend lKeywords3 {db2_field_scale}
lappend lKeywords3 {db2_field_type}
lappend lKeywords3 {db2_field_width}
lappend lKeywords3 {db2_foreign_keys}
lappend lKeywords3 {db2_free_result}
lappend lKeywords3 {db2_free_stmt}
lappend lKeywords3 {db2_get_option}
lappend lKeywords3 {db2_last_insert_id}
lappend lKeywords3 {db2_lob_read}
lappend lKeywords3 {db2_next_result}
lappend lKeywords3 {db2_num_fields}
lappend lKeywords3 {db2_num_rows}
lappend lKeywords3 {db2_pclose}
lappend lKeywords3 {db2_pconnect}
lappend lKeywords3 {db2_prepare}
lappend lKeywords3 {db2_primary_keys}
lappend lKeywords3 {db2_procedures}
lappend lKeywords3 {db2_procedure_columns}
lappend lKeywords3 {db2_result}
lappend lKeywords3 {db2_rollback}
lappend lKeywords3 {db2_server_info}
lappend lKeywords3 {db2_set_option}
lappend lKeywords3 {db2_special_columns}
lappend lKeywords3 {db2_statistics}
lappend lKeywords3 {db2_stmt_error}
lappend lKeywords3 {db2_stmt_errormsg}
lappend lKeywords3 {db2_tables}
lappend lKeywords3 {db2_table_privileges}
lappend lKeywords3 {dbase_add_record}
lappend lKeywords3 {dbase_close}
lappend lKeywords3 {dbase_create}
lappend lKeywords3 {dbase_delete_record}
lappend lKeywords3 {dbase_get_header_info}
lappend lKeywords3 {dbase_get_record}
lappend lKeywords3 {dbase_get_record_with_names}
lappend lKeywords3 {dbase_numfields}
lappend lKeywords3 {dbase_numrecords}
lappend lKeywords3 {dbase_open}
lappend lKeywords3 {dbase_pack}
lappend lKeywords3 {dbase_replace_record}
lappend lKeywords3 {dba_close}
lappend lKeywords3 {dba_delete}
lappend lKeywords3 {dba_fetch}
lappend lKeywords3 {dba_firstkey}
lappend lKeywords3 {dba_handlers}
lappend lKeywords3 {dba_insert}
lappend lKeywords3 {dba_key_split}
lappend lKeywords3 {dba_list}
lappend lKeywords3 {dba_nextkey}
lappend lKeywords3 {dba_open}
lappend lKeywords3 {dba_optimize}
lappend lKeywords3 {dba_popen}
lappend lKeywords3 {dba_replace}
lappend lKeywords3 {dba_sync}
lappend lKeywords3 {dbplus_add}
lappend lKeywords3 {dbplus_aql}
lappend lKeywords3 {dbplus_chdir}
lappend lKeywords3 {dbplus_close}
lappend lKeywords3 {dbplus_curr}
lappend lKeywords3 {dbplus_errcode}
lappend lKeywords3 {dbplus_errno}
lappend lKeywords3 {dbplus_find}
lappend lKeywords3 {dbplus_first}
lappend lKeywords3 {dbplus_flush}
lappend lKeywords3 {dbplus_freealllocks}
lappend lKeywords3 {dbplus_freelock}
lappend lKeywords3 {dbplus_freerlocks}
lappend lKeywords3 {dbplus_getlock}
lappend lKeywords3 {dbplus_getunique}
lappend lKeywords3 {dbplus_info}
lappend lKeywords3 {dbplus_last}
lappend lKeywords3 {dbplus_lockrel}
lappend lKeywords3 {dbplus_next}
lappend lKeywords3 {dbplus_open}
lappend lKeywords3 {dbplus_prev}
lappend lKeywords3 {dbplus_rchperm}
lappend lKeywords3 {dbplus_rcreate}
lappend lKeywords3 {dbplus_rcrtexact}
lappend lKeywords3 {dbplus_rcrtlike}
lappend lKeywords3 {dbplus_resolve}
lappend lKeywords3 {dbplus_restorepos}
lappend lKeywords3 {dbplus_rkeys}
lappend lKeywords3 {dbplus_ropen}
lappend lKeywords3 {dbplus_rquery}
lappend lKeywords3 {dbplus_rrename}
lappend lKeywords3 {dbplus_rsecindex}
lappend lKeywords3 {dbplus_runlink}
lappend lKeywords3 {dbplus_rzap}
lappend lKeywords3 {dbplus_savepos}
lappend lKeywords3 {dbplus_setindex}
lappend lKeywords3 {dbplus_setindexbynumber}
lappend lKeywords3 {dbplus_sql}
lappend lKeywords3 {dbplus_tcl}
lappend lKeywords3 {dbplus_tremove}
lappend lKeywords3 {dbplus_undo}
lappend lKeywords3 {dbplus_undoprepare}
lappend lKeywords3 {dbplus_unlockrel}
lappend lKeywords3 {dbplus_unselect}
lappend lKeywords3 {dbplus_update}
lappend lKeywords3 {dbplus_xlockrel}
lappend lKeywords3 {dbplus_xunlockrel}
lappend lKeywords3 {dbx_close}
lappend lKeywords3 {dbx_compare}
lappend lKeywords3 {dbx_connect}
lappend lKeywords3 {dbx_error}
lappend lKeywords3 {dbx_escape_string}
lappend lKeywords3 {dbx_fetch_row}
lappend lKeywords3 {dbx_query}
lappend lKeywords3 {dbx_sort}
lappend lKeywords3 {fbsql_affected_rows}
lappend lKeywords3 {fbsql_autocommit}
lappend lKeywords3 {fbsql_blob_size}
lappend lKeywords3 {fbsql_change_user}
lappend lKeywords3 {fbsql_clob_size}
lappend lKeywords3 {fbsql_close}
lappend lKeywords3 {fbsql_commit}
lappend lKeywords3 {fbsql_connect}
lappend lKeywords3 {fbsql_create_blob}
lappend lKeywords3 {fbsql_create_clob}
lappend lKeywords3 {fbsql_create_db}
lappend lKeywords3 {fbsql_database}
lappend lKeywords3 {fbsql_database_password}
lappend lKeywords3 {fbsql_data_seek}
lappend lKeywords3 {fbsql_db_query}
lappend lKeywords3 {fbsql_db_status}
lappend lKeywords3 {fbsql_drop_db}
lappend lKeywords3 {fbsql_errno}
lappend lKeywords3 {fbsql_error}
lappend lKeywords3 {fbsql_fetch_array}
lappend lKeywords3 {fbsql_fetch_assoc}
lappend lKeywords3 {fbsql_fetch_field}
lappend lKeywords3 {fbsql_fetch_lengths}
lappend lKeywords3 {fbsql_fetch_object}
lappend lKeywords3 {fbsql_fetch_row}
lappend lKeywords3 {fbsql_field_flags}
lappend lKeywords3 {fbsql_field_len}
lappend lKeywords3 {fbsql_field_name}
lappend lKeywords3 {fbsql_field_seek}
lappend lKeywords3 {fbsql_field_table}
lappend lKeywords3 {fbsql_field_type}
lappend lKeywords3 {fbsql_free_result}
lappend lKeywords3 {fbsql_get_autostart_info}
lappend lKeywords3 {fbsql_hostname}
lappend lKeywords3 {fbsql_insert_id}
lappend lKeywords3 {fbsql_list_dbs}
lappend lKeywords3 {fbsql_list_fields}
lappend lKeywords3 {fbsql_list_tables}
lappend lKeywords3 {fbsql_next_result}
lappend lKeywords3 {fbsql_num_fields}
lappend lKeywords3 {fbsql_num_rows}
lappend lKeywords3 {fbsql_password}
lappend lKeywords3 {fbsql_pconnect}
lappend lKeywords3 {fbsql_query}
lappend lKeywords3 {fbsql_read_blob}
lappend lKeywords3 {fbsql_read_clob}
lappend lKeywords3 {fbsql_result}
lappend lKeywords3 {fbsql_rollback}
lappend lKeywords3 {fbsql_rows_fetched}
lappend lKeywords3 {fbsql_select_db}
lappend lKeywords3 {fbsql_set_characterset}
lappend lKeywords3 {fbsql_set_lob_mode}
lappend lKeywords3 {fbsql_set_password}
lappend lKeywords3 {fbsql_set_transaction}
lappend lKeywords3 {fbsql_start_db}
lappend lKeywords3 {fbsql_stop_db}
lappend lKeywords3 {fbsql_tablename}
lappend lKeywords3 {fbsql_table_name}
lappend lKeywords3 {fbsql_username}
lappend lKeywords3 {fbsql_warnings}
lappend lKeywords3 {filepro}
lappend lKeywords3 {filepro_fieldcount}
lappend lKeywords3 {filepro_fieldname}
lappend lKeywords3 {filepro_fieldtype}
lappend lKeywords3 {filepro_fieldwidth}
lappend lKeywords3 {filepro_retrieve}
lappend lKeywords3 {filepro_rowcount}
lappend lKeywords3 {ibase_add_user}
lappend lKeywords3 {ibase_affected_rows}
lappend lKeywords3 {ibase_backup}
lappend lKeywords3 {ibase_blob_add}
lappend lKeywords3 {ibase_blob_cancel}
lappend lKeywords3 {ibase_blob_close}
lappend lKeywords3 {ibase_blob_create}
lappend lKeywords3 {ibase_blob_echo}
lappend lKeywords3 {ibase_blob_get}
lappend lKeywords3 {ibase_blob_import}
lappend lKeywords3 {ibase_blob_info}
lappend lKeywords3 {ibase_blob_open}
lappend lKeywords3 {ibase_close}
lappend lKeywords3 {ibase_commit}
lappend lKeywords3 {ibase_commit_ret}
lappend lKeywords3 {ibase_connect}
lappend lKeywords3 {ibase_db_info}
lappend lKeywords3 {ibase_delete_user}
lappend lKeywords3 {ibase_drop_db}
lappend lKeywords3 {ibase_errcode}
lappend lKeywords3 {ibase_errmsg}
lappend lKeywords3 {ibase_execute}
lappend lKeywords3 {ibase_fetch_assoc}
lappend lKeywords3 {ibase_fetch_object}
lappend lKeywords3 {ibase_fetch_row}
lappend lKeywords3 {ibase_field_info}
lappend lKeywords3 {ibase_free_event_handler}
lappend lKeywords3 {ibase_free_query}
lappend lKeywords3 {ibase_free_result}
lappend lKeywords3 {ibase_gen_id}
lappend lKeywords3 {ibase_maintain_db}
lappend lKeywords3 {ibase_modify_user}
lappend lKeywords3 {ibase_name_result}
lappend lKeywords3 {ibase_num_fields}
lappend lKeywords3 {ibase_num_params}
lappend lKeywords3 {ibase_param_info}
lappend lKeywords3 {ibase_pconnect}
lappend lKeywords3 {ibase_prepare}
lappend lKeywords3 {ibase_query}
lappend lKeywords3 {ibase_restore}
lappend lKeywords3 {ibase_rollback}
lappend lKeywords3 {ibase_rollback_ret}
lappend lKeywords3 {ibase_server_info}
lappend lKeywords3 {ibase_service_attach}
lappend lKeywords3 {ibase_service_detach}
lappend lKeywords3 {ibase_set_event_handler}
lappend lKeywords3 {ibase_trans}
lappend lKeywords3 {ibase_wait_event}
lappend lKeywords3 {ifxus_close_slob}
lappend lKeywords3 {ifxus_create_slob}
lappend lKeywords3 {ifxus_free_slob}
lappend lKeywords3 {ifxus_open_slob}
lappend lKeywords3 {ifxus_read_slob}
lappend lKeywords3 {ifxus_seek_slob}
lappend lKeywords3 {ifxus_tell_slob}
lappend lKeywords3 {ifxus_write_slob}
lappend lKeywords3 {ifx_affected_rows}
lappend lKeywords3 {ifx_blobinfile_mode}
lappend lKeywords3 {ifx_byteasvarchar}
lappend lKeywords3 {ifx_close}
lappend lKeywords3 {ifx_connect}
lappend lKeywords3 {ifx_copy_blob}
lappend lKeywords3 {ifx_create_blob}
lappend lKeywords3 {ifx_create_char}
lappend lKeywords3 {ifx_do}
lappend lKeywords3 {ifx_error}
lappend lKeywords3 {ifx_errormsg}
lappend lKeywords3 {ifx_fetch_row}
lappend lKeywords3 {ifx_fieldproperties}
lappend lKeywords3 {ifx_fieldtypes}
lappend lKeywords3 {ifx_free_blob}
lappend lKeywords3 {ifx_free_char}
lappend lKeywords3 {ifx_free_result}
lappend lKeywords3 {ifx_getsqlca}
lappend lKeywords3 {ifx_get_blob}
lappend lKeywords3 {ifx_get_char}
lappend lKeywords3 {ifx_htmltbl_result}
lappend lKeywords3 {ifx_nullformat}
lappend lKeywords3 {ifx_num_fields}
lappend lKeywords3 {ifx_num_rows}
lappend lKeywords3 {ifx_pconnect}
lappend lKeywords3 {ifx_prepare}
lappend lKeywords3 {ifx_query}
lappend lKeywords3 {ifx_textasvarchar}
lappend lKeywords3 {ifx_update_blob}
lappend lKeywords3 {ifx_update_char}
lappend lKeywords3 {ingres_autocommit}
lappend lKeywords3 {ingres_autocommit_state}
lappend lKeywords3 {ingres_charset}
lappend lKeywords3 {ingres_close}
lappend lKeywords3 {ingres_commit}
lappend lKeywords3 {ingres_connect}
lappend lKeywords3 {ingres_cursor}
lappend lKeywords3 {ingres_errno}
lappend lKeywords3 {ingres_error}
lappend lKeywords3 {ingres_errsqlstate}
lappend lKeywords3 {ingres_escape_string}
lappend lKeywords3 {ingres_execute}
lappend lKeywords3 {ingres_fetch_array}
lappend lKeywords3 {ingres_fetch_assoc}
lappend lKeywords3 {ingres_fetch_object}
lappend lKeywords3 {ingres_fetch_proc_return}
lappend lKeywords3 {ingres_fetch_row}
lappend lKeywords3 {ingres_field_length}
lappend lKeywords3 {ingres_field_name}
lappend lKeywords3 {ingres_field_nullable}
lappend lKeywords3 {ingres_field_precision}
lappend lKeywords3 {ingres_field_scale}
lappend lKeywords3 {ingres_field_type}
lappend lKeywords3 {ingres_free_result}
lappend lKeywords3 {ingres_next_error}
lappend lKeywords3 {ingres_num_fields}
lappend lKeywords3 {ingres_num_rows}
lappend lKeywords3 {ingres_pconnect}
lappend lKeywords3 {ingres_prepare}
lappend lKeywords3 {ingres_query}
lappend lKeywords3 {ingres_result_seek}
lappend lKeywords3 {ingres_rollback}
lappend lKeywords3 {ingres_set_environment}
lappend lKeywords3 {ingres_unbuffered_query}
lappend lKeywords3 {maxdb_affected_rows}
lappend lKeywords3 {maxdb_autocommit}
lappend lKeywords3 {maxdb_bind_param}
lappend lKeywords3 {maxdb_bind_result}
lappend lKeywords3 {maxdb_change_user}
lappend lKeywords3 {maxdb_character_set_name}
lappend lKeywords3 {maxdb_client_encoding}
lappend lKeywords3 {maxdb_close}
lappend lKeywords3 {maxdb_close_long_data}
lappend lKeywords3 {maxdb_commit}
lappend lKeywords3 {maxdb_connect}
lappend lKeywords3 {maxdb_connect_errno}
lappend lKeywords3 {maxdb_connect_error}
lappend lKeywords3 {maxdb_data_seek}
lappend lKeywords3 {maxdb_debug}
lappend lKeywords3 {maxdb_disable_reads_from_master}
lappend lKeywords3 {maxdb_disable_rpl_parse}
lappend lKeywords3 {maxdb_dump_debug_info}
lappend lKeywords3 {maxdb_embedded_connect}
lappend lKeywords3 {maxdb_enable_reads_from_master}
lappend lKeywords3 {maxdb_enable_rpl_parse}
lappend lKeywords3 {maxdb_errno}
lappend lKeywords3 {maxdb_error}
lappend lKeywords3 {maxdb_escape_string}
lappend lKeywords3 {maxdb_execute}
lappend lKeywords3 {maxdb_fetch}
lappend lKeywords3 {maxdb_fetch_array}
lappend lKeywords3 {maxdb_fetch_assoc}
lappend lKeywords3 {maxdb_fetch_field}
lappend lKeywords3 {maxdb_fetch_fields}
lappend lKeywords3 {maxdb_fetch_field_direct}
lappend lKeywords3 {maxdb_fetch_lengths}
lappend lKeywords3 {maxdb_fetch_object}
lappend lKeywords3 {maxdb_fetch_row}
lappend lKeywords3 {maxdb_field_count}
lappend lKeywords3 {maxdb_field_seek}
lappend lKeywords3 {maxdb_field_tell}
lappend lKeywords3 {maxdb_free_result}
lappend lKeywords3 {maxdb_get_client_info}
lappend lKeywords3 {maxdb_get_client_version}
lappend lKeywords3 {maxdb_get_host_info}
lappend lKeywords3 {maxdb_get_metadata}
lappend lKeywords3 {maxdb_get_proto_info}
lappend lKeywords3 {maxdb_get_server_info}
lappend lKeywords3 {maxdb_get_server_version}
lappend lKeywords3 {maxdb_info}
lappend lKeywords3 {maxdb_init}
lappend lKeywords3 {maxdb_insert_id}
lappend lKeywords3 {maxdb_kill}
lappend lKeywords3 {maxdb_master_query}
lappend lKeywords3 {maxdb_more_results}
lappend lKeywords3 {maxdb_multi_query}
lappend lKeywords3 {maxdb_next_result}
lappend lKeywords3 {maxdb_num_fields}
lappend lKeywords3 {maxdb_num_rows}
lappend lKeywords3 {maxdb_options}
lappend lKeywords3 {maxdb_param_count}
lappend lKeywords3 {maxdb_ping}
lappend lKeywords3 {maxdb_prepare}
lappend lKeywords3 {maxdb_query}
lappend lKeywords3 {maxdb_real_connect}
lappend lKeywords3 {maxdb_real_escape_string}
lappend lKeywords3 {maxdb_real_query}
lappend lKeywords3 {maxdb_report}
lappend lKeywords3 {maxdb_rollback}
lappend lKeywords3 {maxdb_rpl_parse_enabled}
lappend lKeywords3 {maxdb_rpl_probe}
lappend lKeywords3 {maxdb_rpl_query_type}
lappend lKeywords3 {maxdb_select_db}
lappend lKeywords3 {maxdb_send_long_data}
lappend lKeywords3 {maxdb_send_query}
lappend lKeywords3 {maxdb_server_end}
lappend lKeywords3 {maxdb_server_init}
lappend lKeywords3 {maxdb_set_opt}
lappend lKeywords3 {maxdb_sqlstate}
lappend lKeywords3 {maxdb_ssl_set}
lappend lKeywords3 {maxdb_stat}
lappend lKeywords3 {maxdb_stmt_affected_rows}
lappend lKeywords3 {maxdb_stmt_bind_param}
lappend lKeywords3 {maxdb_stmt_bind_result}
lappend lKeywords3 {maxdb_stmt_close}
lappend lKeywords3 {maxdb_stmt_close_long_data}
lappend lKeywords3 {maxdb_stmt_data_seek}
lappend lKeywords3 {maxdb_stmt_errno}
lappend lKeywords3 {maxdb_stmt_error}
lappend lKeywords3 {maxdb_stmt_execute}
lappend lKeywords3 {maxdb_stmt_fetch}
lappend lKeywords3 {maxdb_stmt_free_result}
lappend lKeywords3 {maxdb_stmt_init}
lappend lKeywords3 {maxdb_stmt_num_rows}
lappend lKeywords3 {maxdb_stmt_param_count}
lappend lKeywords3 {maxdb_stmt_prepare}
lappend lKeywords3 {maxdb_stmt_reset}
lappend lKeywords3 {maxdb_stmt_result_metadata}
lappend lKeywords3 {maxdb_stmt_send_long_data}
lappend lKeywords3 {maxdb_stmt_sqlstate}
lappend lKeywords3 {maxdb_stmt_store_result}
lappend lKeywords3 {maxdb_store_result}
lappend lKeywords3 {maxdb_thread_id}
lappend lKeywords3 {maxdb_thread_safe}
lappend lKeywords3 {maxdb_use_result}
lappend lKeywords3 {maxdb_warning_count}
lappend lKeywords3 {msql}
lappend lKeywords3 {msql_affected_rows}
lappend lKeywords3 {msql_close}
lappend lKeywords3 {msql_connect}
lappend lKeywords3 {msql_createdb}
lappend lKeywords3 {msql_create_db}
lappend lKeywords3 {msql_data_seek}
lappend lKeywords3 {msql_dbname}
lappend lKeywords3 {msql_db_query}
lappend lKeywords3 {msql_drop_db}
lappend lKeywords3 {msql_error}
lappend lKeywords3 {msql_fetch_array}
lappend lKeywords3 {msql_fetch_field}
lappend lKeywords3 {msql_fetch_object}
lappend lKeywords3 {msql_fetch_row}
lappend lKeywords3 {msql_fieldflags}
lappend lKeywords3 {msql_fieldlen}
lappend lKeywords3 {msql_fieldname}
lappend lKeywords3 {msql_fieldtable}
lappend lKeywords3 {msql_fieldtype}
lappend lKeywords3 {msql_field_flags}
lappend lKeywords3 {msql_field_len}
lappend lKeywords3 {msql_field_name}
lappend lKeywords3 {msql_field_seek}
lappend lKeywords3 {msql_field_table}
lappend lKeywords3 {msql_field_type}
lappend lKeywords3 {msql_free_result}
lappend lKeywords3 {msql_list_dbs}
lappend lKeywords3 {msql_list_fields}
lappend lKeywords3 {msql_list_tables}
lappend lKeywords3 {msql_numfields}
lappend lKeywords3 {msql_numrows}
lappend lKeywords3 {msql_num_fields}
lappend lKeywords3 {msql_num_rows}
lappend lKeywords3 {msql_pconnect}
lappend lKeywords3 {msql_query}
lappend lKeywords3 {msql_regcase}
lappend lKeywords3 {msql_result}
lappend lKeywords3 {msql_select_db}
lappend lKeywords3 {msql_tablename}
lappend lKeywords3 {mysqli::$affected_rows}
lappend lKeywords3 {mysqli::autocommit}
lappend lKeywords3 {mysqli::begin_transaction}
lappend lKeywords3 {mysqli::change_user}
lappend lKeywords3 {mysqli::character_set_name}
lappend lKeywords3 {mysqli::$client_info}
lappend lKeywords3 {mysqli::$client_version}
lappend lKeywords3 {mysqli::close}
lappend lKeywords3 {mysqli::commit}
lappend lKeywords3 {mysqli::$connect_errno}
lappend lKeywords3 {mysqli::$connect_error}
lappend lKeywords3 {mysqli::__construct}
lappend lKeywords3 {mysqli::debug}
lappend lKeywords3 {mysqli::dump_debug_info}
lappend lKeywords3 {mysqli::$errno}
lappend lKeywords3 {mysqli::$error_list}
lappend lKeywords3 {mysqli::$error}
lappend lKeywords3 {mysqli::$field_count}
lappend lKeywords3 {mysqli::get_charset}
lappend lKeywords3 {mysqli::get_client_info}
lappend lKeywords3 {mysqli_get_client_stats}
lappend lKeywords3 {mysqli_get_client_version}
lappend lKeywords3 {mysqli::get_connection_stats}
lappend lKeywords3 {mysqli::$host_info}
lappend lKeywords3 {mysqli::$protocol_version}
lappend lKeywords3 {mysqli::$server_info}
lappend lKeywords3 {mysqli::$server_version}
lappend lKeywords3 {mysqli::get_warnings}
lappend lKeywords3 {mysqli::$info}
lappend lKeywords3 {mysqli::init}
lappend lKeywords3 {mysqli::$insert_id}
lappend lKeywords3 {mysqli::kill}
lappend lKeywords3 {mysqli::more_results}
lappend lKeywords3 {mysqli::multi_query}
lappend lKeywords3 {mysqli::next_result}
lappend lKeywords3 {mysqli::options}
lappend lKeywords3 {mysqli::ping}
lappend lKeywords3 {mysqli::poll}
lappend lKeywords3 {mysqli::prepare}
lappend lKeywords3 {mysqli::query}
lappend lKeywords3 {mysqli::real_connect}
lappend lKeywords3 {mysqli::real_escape_string}
lappend lKeywords3 {mysqli::real_query}
lappend lKeywords3 {mysqli::reap_async_query}
lappend lKeywords3 {mysqli::refresh}
lappend lKeywords3 {mysqli::release_savepoint}
lappend lKeywords3 {mysqli::rollback}
lappend lKeywords3 {mysqli::rpl_query_type}
lappend lKeywords3 {mysqli::savepoint}
lappend lKeywords3 {mysqli::select_db}
lappend lKeywords3 {mysqli::send_query}
lappend lKeywords3 {mysqli::set_charset}
lappend lKeywords3 {mysqli::set_local_infile_default}
lappend lKeywords3 {mysqli::set_local_infile_handler}
lappend lKeywords3 {mysqli::$sqlstate}
lappend lKeywords3 {mysqli::ssl_set}
lappend lKeywords3 {mysqli::stat}
lappend lKeywords3 {mysqli::stmt_init}
lappend lKeywords3 {mysqli::store_result}
lappend lKeywords3 {mysqli::$thread_id}
lappend lKeywords3 {mysqli::thread_safe}
lappend lKeywords3 {mysqli::use_result}
lappend lKeywords3 {mysqli::$warning_count}
lappend lKeywords3 {mysqli_stmt::$affected_rows}
lappend lKeywords3 {mysqli_stmt::attr_get}
lappend lKeywords3 {mysqli_stmt::attr_set}
lappend lKeywords3 {mysqli_stmt::bind_param}
lappend lKeywords3 {mysqli_stmt::bind_result}
lappend lKeywords3 {mysqli_stmt::close}
lappend lKeywords3 {mysqli_stmt::__construct}
lappend lKeywords3 {mysqli_stmt::data_seek}
lappend lKeywords3 {mysqli_stmt::$errno}
lappend lKeywords3 {mysqli_stmt::$error_list}
lappend lKeywords3 {mysqli_stmt::$error}
lappend lKeywords3 {mysqli_stmt::execute}
lappend lKeywords3 {mysqli_stmt::fetch}
lappend lKeywords3 {mysqli_stmt::$field_count}
lappend lKeywords3 {mysqli_stmt::free_result}
lappend lKeywords3 {mysqli_stmt::get_result}
lappend lKeywords3 {mysqli_stmt::get_warnings}
lappend lKeywords3 {mysqli_stmt::$insert_id}
lappend lKeywords3 {mysqli_stmt::more_results}
lappend lKeywords3 {mysqli_stmt::next_result}
lappend lKeywords3 {mysqli_stmt::$num_rows}
lappend lKeywords3 {mysqli_stmt::$param_count}
lappend lKeywords3 {mysqli_stmt::prepare}
lappend lKeywords3 {mysqli_stmt::reset}
lappend lKeywords3 {mysqli_stmt::result_metadata}
lappend lKeywords3 {mysqli_stmt::send_long_data}
lappend lKeywords3 {mysqli_stmt::$sqlstate}
lappend lKeywords3 {mysqli_stmt::store_result}
lappend lKeywords3 {mysqli_result::$current_field}
lappend lKeywords3 {mysqli_result::data_seek}
lappend lKeywords3 {mysqli_result::fetch_all}
lappend lKeywords3 {mysqli_result::fetch_array}
lappend lKeywords3 {mysqli_result::fetch_assoc}
lappend lKeywords3 {mysqli_result::fetch_field_direct}
lappend lKeywords3 {mysqli_result::fetch_field}
lappend lKeywords3 {mysqli_result::fetch_fields}
lappend lKeywords3 {mysqli_result::fetch_object}
lappend lKeywords3 {mysqli_result::fetch_row}
lappend lKeywords3 {mysqli_result::$field_count}
lappend lKeywords3 {mysqli_result::field_seek}
lappend lKeywords3 {mysqli_result::free}
lappend lKeywords3 {mysqli_result::$lengths}
lappend lKeywords3 {mysqli_result::$num_rows}
lappend lKeywords3 {mysqli_driver::embedded_server_end}
lappend lKeywords3 {mysqli_driver::embedded_server_start}
lappend lKeywords3 {mysqli_driver::$report_mode}
lappend lKeywords3 {mysqli_warning::__construct}
lappend lKeywords3 {mysqli_warning::next}
lappend lKeywords3 {mysqli_sql_exception}
lappend lKeywords3 {mysqlnd_memcache_get_config}
lappend lKeywords3 {mysqlnd_memcache_set}
lappend lKeywords3 {mysqlnd_ms_dump_servers}
lappend lKeywords3 {mysqlnd_ms_fabric_select_global}
lappend lKeywords3 {mysqlnd_ms_fabric_select_shard}
lappend lKeywords3 {mysqlnd_ms_get_last_gtid}
lappend lKeywords3 {mysqlnd_ms_get_last_used_connection}
lappend lKeywords3 {mysqlnd_ms_get_stats}
lappend lKeywords3 {mysqlnd_ms_match_wild}
lappend lKeywords3 {mysqlnd_ms_query_is_select}
lappend lKeywords3 {mysqlnd_ms_set_qos}
lappend lKeywords3 {mysqlnd_ms_set_user_pick_server}
lappend lKeywords3 {mysqlnd_ms_xa_begin}
lappend lKeywords3 {mysqlnd_ms_xa_commit}
lappend lKeywords3 {mysqlnd_ms_xa_gc}
lappend lKeywords3 {mysqlnd_ms_xa_rollback}
lappend lKeywords3 {mysqlnd_qc_clear_cache}
lappend lKeywords3 {mysqlnd_qc_get_available_handlers}
lappend lKeywords3 {mysqlnd_qc_get_cache_info}
lappend lKeywords3 {mysqlnd_qc_get_core_stats}
lappend lKeywords3 {mysqlnd_qc_get_normalized_query_trace_log}
lappend lKeywords3 {mysqlnd_qc_get_query_trace_log}
lappend lKeywords3 {mysqlnd_qc_set_cache_condition}
lappend lKeywords3 {mysqlnd_qc_set_is_select}
lappend lKeywords3 {mysqlnd_qc_set_storage_handler}
lappend lKeywords3 {mysqlnd_qc_set_user_handlers}
lappend lKeywords3 {mysqlnd_uh_convert_to_mysqlnd}
lappend lKeywords3 {mysqlnd_uh_set_connection_proxy}
lappend lKeywords3 {mysqlnd_uh_set_statement_proxy}
lappend lKeywords3 {oci_bind_array_by_name}
lappend lKeywords3 {oci_bind_by_name}
lappend lKeywords3 {oci_cancel}
lappend lKeywords3 {oci_client_version}
lappend lKeywords3 {oci_close}
lappend lKeywords3 {oci_commit}
lappend lKeywords3 {oci_connect}
lappend lKeywords3 {oci_define_by_name}
lappend lKeywords3 {oci_error}
lappend lKeywords3 {oci_execute}
lappend lKeywords3 {oci_fetch}
lappend lKeywords3 {oci_fetch_all}
lappend lKeywords3 {oci_fetch_array}
lappend lKeywords3 {oci_fetch_assoc}
lappend lKeywords3 {oci_fetch_object}
lappend lKeywords3 {oci_fetch_row}
lappend lKeywords3 {oci_field_is_null}
lappend lKeywords3 {oci_field_name}
lappend lKeywords3 {oci_field_precision}
lappend lKeywords3 {oci_field_scale}
lappend lKeywords3 {oci_field_size}
lappend lKeywords3 {oci_field_type}
lappend lKeywords3 {oci_field_type_raw}
lappend lKeywords3 {oci_free_descriptor}
lappend lKeywords3 {oci_free_statement}
lappend lKeywords3 {oci_get_implicit_resultset}
lappend lKeywords3 {oci_internal_debug}
lappend lKeywords3 {oci_lob_copy}
lappend lKeywords3 {oci_lob_is_equal}
lappend lKeywords3 {oci_new_collection}
lappend lKeywords3 {oci_new_connect}
lappend lKeywords3 {oci_new_cursor}
lappend lKeywords3 {oci_new_descriptor}
lappend lKeywords3 {oci_num_fields}
lappend lKeywords3 {oci_num_rows}
lappend lKeywords3 {oci_parse}
lappend lKeywords3 {oci_password_change}
lappend lKeywords3 {oci_pconnect}
lappend lKeywords3 {oci_register_taf_callback}
lappend lKeywords3 {oci_result}
lappend lKeywords3 {oci_rollback}
lappend lKeywords3 {oci_server_version}
lappend lKeywords3 {oci_set_action}
lappend lKeywords3 {oci_set_client_identifier}
lappend lKeywords3 {oci_set_client_info}
lappend lKeywords3 {oci_set_edition}
lappend lKeywords3 {oci_set_module_name}
lappend lKeywords3 {oci_set_prefetch}
lappend lKeywords3 {oci_statement_type}
lappend lKeywords3 {oci_unregister_taf_callback}
lappend lKeywords3 {odbc_autocommit}
lappend lKeywords3 {odbc_binmode}
lappend lKeywords3 {odbc_close}
lappend lKeywords3 {odbc_close_all}
lappend lKeywords3 {odbc_columnprivileges}
lappend lKeywords3 {odbc_columns}
lappend lKeywords3 {odbc_commit}
lappend lKeywords3 {odbc_connect}
lappend lKeywords3 {odbc_cursor}
lappend lKeywords3 {odbc_data_source}
lappend lKeywords3 {odbc_do}
lappend lKeywords3 {odbc_error}
lappend lKeywords3 {odbc_errormsg}
lappend lKeywords3 {odbc_exec}
lappend lKeywords3 {odbc_execute}
lappend lKeywords3 {odbc_fetch_array}
lappend lKeywords3 {odbc_fetch_into}
lappend lKeywords3 {odbc_fetch_object}
lappend lKeywords3 {odbc_fetch_row}
lappend lKeywords3 {odbc_field_len}
lappend lKeywords3 {odbc_field_name}
lappend lKeywords3 {odbc_field_num}
lappend lKeywords3 {odbc_field_precision}
lappend lKeywords3 {odbc_field_scale}
lappend lKeywords3 {odbc_field_type}
lappend lKeywords3 {odbc_foreignkeys}
lappend lKeywords3 {odbc_free_result}
lappend lKeywords3 {odbc_gettypeinfo}
lappend lKeywords3 {odbc_longreadlen}
lappend lKeywords3 {odbc_next_result}
lappend lKeywords3 {odbc_num_fields}
lappend lKeywords3 {odbc_num_rows}
lappend lKeywords3 {odbc_pconnect}
lappend lKeywords3 {odbc_prepare}
lappend lKeywords3 {odbc_primarykeys}
lappend lKeywords3 {odbc_procedurecolumns}
lappend lKeywords3 {odbc_procedures}
lappend lKeywords3 {odbc_result}
lappend lKeywords3 {odbc_result_all}
lappend lKeywords3 {odbc_rollback}
lappend lKeywords3 {odbc_setoption}
lappend lKeywords3 {odbc_specialcolumns}
lappend lKeywords3 {odbc_statistics}
lappend lKeywords3 {odbc_tableprivileges}
lappend lKeywords3 {odbc_tables}
lappend lKeywords3 {pg_affected_rows|int pg_affected_rows ( resource $result )}
lappend lKeywords3 {pg_cancel_query|bool pg_cancel_query ( resource $connection )}
lappend lKeywords3 {pg_client_encoding|string pg_client_encoding ([ resource $connection ] )}
lappend lKeywords3 {pg_close|bool pg_close ([ resource $connection ] )}
lappend lKeywords3 {pg_connect|resource pg_connect ( string $connection_string [, int $connect_type ] )}
lappend lKeywords3 {pg_connection_busy|bool pg_connection_busy ( resource $connection )}
lappend lKeywords3 {pg_connection_reset|bool pg_connection_reset ( resource $connection )}
lappend lKeywords3 {pg_connection_status|int pg_connection_status ( resource $connection )}
lappend lKeywords3 {pg_connect_poll|int pg_connect_poll ([ resource $connection ] )}
lappend lKeywords3 {pg_consume_input|bool pg_consume_input ( resource $connection )}
lappend lKeywords3 {pg_convert|array pg_convert ( resource $connection , string $table_name , array $assoc_array [, int $options = 0 ] )}
lappend lKeywords3 {pg_copy_from|bool pg_copy_from ( resource $connection , string $table_name , array $rows [, string $delimiter [, string $null_as ]] )}
lappend lKeywords3 {pg_copy_to|array pg_copy_to ( resource $connection , string $table_name [, string $delimiter [, string $null_as ]] )}
lappend lKeywords3 {pg_dbname|string pg_dbname ([ resource $connection ] )}
lappend lKeywords3 {pg_delete|mixed pg_delete ( resource $connection , string $table_name , array $assoc_array [, int $options = PGSQL_DML_EXEC ] )}
lappend lKeywords3 {pg_end_copy|bool pg_end_copy ([ resource $connection ] )}
lappend lKeywords3 {pg_escape_bytea|string pg_escape_bytea ([ resource $connection ], string $data )}
lappend lKeywords3 {pg_escape_identifier|string pg_escape_identifier ([ resource $connection ], string $data )}
lappend lKeywords3 {pg_escape_literal|string pg_escape_literal ([ resource $connection ], string $data )}
lappend lKeywords3 {pg_escape_string|string pg_escape_string ([ resource $connection ], string $data )}
lappend lKeywords3 {pg_execute|resource pg_execute ([ resource $connection ], string $stmtname , array $params )}
lappend lKeywords3 {pg_fetch_all|array pg_fetch_all ( resource $result )}
lappend lKeywords3 {pg_fetch_all_columns|array pg_fetch_all_columns ( resource $result [, int $column = 0 ] )}
lappend lKeywords3 {pg_fetch_array|array pg_fetch_array ( resource $result [, int $row [, int $result_type = PGSQL_BOTH ]] )}
lappend lKeywords3 {pg_fetch_assoc|array pg_fetch_assoc ( resource $result [, int $row ] )}
lappend lKeywords3 {pg_fetch_object|object pg_fetch_object ( resource $result [, int $row [, int $result_type = PGSQL_ASSOC ]] )
object pg_fetch_object ( resource $result [, int $row [, string $class_name [, array $params ]]] )}
lappend lKeywords3 {pg_fetch_result|string pg_fetch_result ( resource $result , int $row , mixed $field )
string pg_fetch_result ( resource $result , mixed $field )}
lappend lKeywords3 {pg_fetch_row|array pg_fetch_row ( resource $result [, int $row ] )}
lappend lKeywords3 {pg_field_is_null|int pg_field_is_null ( resource $result , int $row , mixed $field )
int pg_field_is_null ( resource $result , mixed $field )}
lappend lKeywords3 {pg_field_name|string pg_field_name ( resource $result , int $field_number )}
lappend lKeywords3 {pg_field_num|int pg_field_num ( resource $result , string $field_name )}
lappend lKeywords3 {pg_field_prtlen|int pg_field_prtlen ( resource $result , int $row_number , mixed $field_name_or_number )
int pg_field_prtlen ( resource $result , mixed $field_name_or_number )}
lappend lKeywords3 {pg_field_size|int pg_field_size ( resource $result , int $field_number )}
lappend lKeywords3 {pg_field_table|mixed pg_field_table ( resource $result , int $field_number [, bool $oid_only = false ] )}
lappend lKeywords3 {pg_field_type|string pg_field_type ( resource $result , int $field_number )}
lappend lKeywords3 {pg_field_type_oid|int pg_field_type_oid ( resource $result , int $field_number )}
lappend lKeywords3 {pg_flush|mixed pg_flush ( resource $connection )}
lappend lKeywords3 {pg_free_result|bool pg_free_result ( resource $result )}
lappend lKeywords3 {pg_get_notify|array pg_get_notify ( resource $connection [, int $result_type ] )}
lappend lKeywords3 {pg_get_pid|int pg_get_pid ( resource $connection )}
lappend lKeywords3 {pg_get_result|resource pg_get_result ([ resource $connection ] )}
lappend lKeywords3 {pg_host|string pg_host ([ resource $connection ] )}
lappend lKeywords3 {pg_insert|mixed pg_insert ( resource $connection , string $table_name , array $assoc_array [, int $options = PGSQL_DML_EXEC ] )}
lappend lKeywords3 {pg_last_error|string pg_last_error ([ resource $connection ] )}
lappend lKeywords3 {pg_last_notice|string pg_last_notice ( resource $connection )}
lappend lKeywords3 {pg_last_oid|string pg_last_oid ( resource $result )}
lappend lKeywords3 {pg_lo_close|bool pg_lo_close ( resource $large_object )}
lappend lKeywords3 {pg_lo_create|int pg_lo_create ([ resource $connection [, mixed $object_id ]] )
int pg_lo_create ( mixed $object_id )}
lappend lKeywords3 {pg_lo_export|bool pg_lo_export ([ resource $connection ], int $oid , string $pathname )}
lappend lKeywords3 {pg_lo_import|int pg_lo_import ([ resource $connection ], string $pathname [, mixed $object_id ] )}
lappend lKeywords3 {pg_lo_open|resource pg_lo_open ( resource $connection , int $oid , string $mode )}
lappend lKeywords3 {pg_lo_read|string pg_lo_read ( resource $large_object [, int $len = 8192 ] )}
lappend lKeywords3 {pg_lo_read_all|int pg_lo_read_all ( resource $large_object )}
lappend lKeywords3 {pg_lo_seek|bool pg_lo_seek ( resource $large_object , int $offset [, int $whence = PGSQL_SEEK_CUR ] )}
lappend lKeywords3 {pg_lo_tell|int pg_lo_tell ( resource $large_object )}
lappend lKeywords3 {pg_lo_truncate|bool pg_lo_truncate ( resource $large_object , int $size )}
lappend lKeywords3 {pg_lo_unlink|bool pg_lo_unlink ( resource $connection , int $oid )}
lappend lKeywords3 {pg_lo_write|int pg_lo_write ( resource $large_object , string $data [, int $len ] )}
lappend lKeywords3 {pg_meta_data|array pg_meta_data ( resource $connection , string $table_name [, bool $extended ] )}
lappend lKeywords3 {pg_num_fields|int pg_num_fields ( resource $result )}
lappend lKeywords3 {pg_num_rows|int pg_num_rows ( resource $result )}
lappend lKeywords3 {pg_options|string pg_options ([ resource $connection ] )}
lappend lKeywords3 {pg_parameter_status|string pg_parameter_status ([ resource $connection ], string $param_name )}
lappend lKeywords3 {pg_pconnect|resource pg_pconnect ( string $connection_string [, int $connect_type ] )}
lappend lKeywords3 {pg_ping|bool pg_ping ([ resource $connection ] )}
lappend lKeywords3 {pg_port|int pg_port ([ resource $connection ] )}
lappend lKeywords3 {pg_prepare|resource pg_prepare ([ resource $connection ], string $stmtname , string $query )}
lappend lKeywords3 {pg_put_line|bool pg_put_line ([ resource $connection ], string $data )}
lappend lKeywords3 {pg_query|resource pg_query ([ resource $connection ], string $query )}
lappend lKeywords3 {pg_query_params|resource pg_query_params ([ resource $connection ], string $query , array $params )}
lappend lKeywords3 {pg_result_error|string pg_result_error ( resource $result )}
lappend lKeywords3 {pg_result_error_field|string pg_result_error_field ( resource $result , int $fieldcode )}
lappend lKeywords3 {pg_result_seek|bool pg_result_seek ( resource $result , int $offset )}
lappend lKeywords3 {pg_result_status|mixed pg_result_status ( resource $result [, int $type = PGSQL_STATUS_LONG ] )}
lappend lKeywords3 {pg_select|mixed pg_select ( resource $connection , string $table_name , array $assoc_array [, int $options = PGSQL_DML_EXEC ] )}
lappend lKeywords3 {pg_send_execute|bool pg_send_execute ( resource $connection , string $stmtname , array $params )}
lappend lKeywords3 {pg_send_prepare|bool pg_send_prepare ( resource $connection , string $stmtname , string $query )}
lappend lKeywords3 {pg_send_query|bool pg_send_query ( resource $connection , string $query )}
lappend lKeywords3 {pg_send_query_params|bool pg_send_query_params ( resource $connection , string $query , array $params )}
lappend lKeywords3 {pg_set_client_encoding|int pg_set_client_encoding ([ resource $connection ], string $encoding )}
lappend lKeywords3 {pg_set_error_verbosity|int pg_set_error_verbosity ([ resource $connection ], int $verbosity )}
lappend lKeywords3 {pg_socket|resource pg_socket ( resource $connection )}
lappend lKeywords3 {pg_trace|bool pg_trace ( string $pathname [, string $mode = "w" [, resource $connection ]] )}
lappend lKeywords3 {pg_transaction_status|int pg_transaction_status ( resource $connection )}
lappend lKeywords3 {pg_tty|string pg_tty ([ resource $connection ] )}
lappend lKeywords3 {pg_unescape_bytea|string pg_unescape_bytea ( string $data )}
lappend lKeywords3 {pg_untrace|bool pg_untrace ([ resource $connection ] )}
lappend lKeywords3 {pg_update|mixed pg_update ( resource $connection , string $table_name , array $data , array $condition [, int $options = PGSQL_DML_EXEC ] )}
lappend lKeywords3 {pg_version|array pg_version ([ resource $connection ] )}
lappend lKeywords3 {px_close}
lappend lKeywords3 {px_create_fp}
lappend lKeywords3 {px_date2string}
lappend lKeywords3 {px_delete}
lappend lKeywords3 {px_delete_record}
lappend lKeywords3 {px_get_field}
lappend lKeywords3 {px_get_info}
lappend lKeywords3 {px_get_parameter}
lappend lKeywords3 {px_get_record}
lappend lKeywords3 {px_get_schema}
lappend lKeywords3 {px_get_value}
lappend lKeywords3 {px_insert_record}
lappend lKeywords3 {px_new}
lappend lKeywords3 {px_numfields}
lappend lKeywords3 {px_numrecords}
lappend lKeywords3 {px_open_fp}
lappend lKeywords3 {px_put_record}
lappend lKeywords3 {px_retrieve_record}
lappend lKeywords3 {px_set_blob_file}
lappend lKeywords3 {px_set_parameter}
lappend lKeywords3 {px_set_tablename}
lappend lKeywords3 {px_set_targetencoding}
lappend lKeywords3 {px_set_value}
lappend lKeywords3 {px_timestamp2string}
lappend lKeywords3 {px_update_record}
lappend lKeywords3 {sqlite_array_query|array sqlite_array_query ( resource $dbhandle , string $query [, int $result_type = SQLITE_BOTH [, bool $decode_binary = true ]] )
array sqlite_array_query ( string $query , resource $dbhandle [, int $result_type = SQLITE_BOTH [, bool $decode_binary = true ]] )
public array SQLiteDatabase::arrayQuery ( string $query [, int $result_type = SQLITE_BOTH [, bool $decode_binary = true ]] )}
lappend lKeywords3 {sqlite_busy_timeout|void sqlite_busy_timeout ( resource $dbhandle , int $milliseconds )
public void SQLiteDatabase::busyTimeout ( int $milliseconds )}
lappend lKeywords3 {sqlite_changes|int sqlite_changes ( resource $dbhandle )
public int SQLiteDatabase::changes ( void )}
lappend lKeywords3 {sqlite_close|void sqlite_close ( resource $dbhandle )}
lappend lKeywords3 {sqlite_column|mixed sqlite_column ( resource $result , mixed $index_or_name [, bool $decode_binary = true ] )
mixed SQLiteResult::column ( mixed $index_or_name [, bool $decode_binary = true ] )
mixed SQLiteUnbuffered::column ( mixed $index_or_name [, bool $decode_binary = true ] )}
lappend lKeywords3 {sqlite_create_aggregate|void sqlite_create_aggregate ( resource $dbhandle , string $function_name , callable $step_func , callable $finalize_func [, int $num_args = -1 ] )
public void SQLiteDatabase::createAggregate ( string $function_name , callable $step_func , callable $finalize_func [, int $num_args = -1 ] )}
lappend lKeywords3 {sqlite_create_function|void sqlite_create_function ( resource $dbhandle , string $function_name , callable $callback [, int $num_args = -1 ] )
public void SQLiteDatabase::createFunction ( string $function_name , callable $callback [, int $num_args = -1 ] )}
lappend lKeywords3 {sqlite_current|array sqlite_current ( resource $result [, int $result_type = SQLITE_BOTH [, bool $decode_binary = true ]] )
array SQLiteResult::current ([ int $result_type = SQLITE_BOTH [, bool $decode_binary = true ]] )
array SQLiteUnbuffered::current ([ int $result_type = SQLITE_BOTH [, bool $decode_binary = true ]] )}
lappend lKeywords3 {sqlite_error_string|string sqlite_error_string ( int $error_code )}
lappend lKeywords3 {sqlite_escape_string|string sqlite_escape_string ( string $item )}
lappend lKeywords3 {sqlite_exec|bool sqlite_exec ( resource $dbhandle , string $query [, string &$error_msg ] )
bool sqlite_exec ( string $query , resource $dbhandle )
public bool SQLiteDatabase::queryExec ( string $query [, string &$error_msg ] )}
lappend lKeywords3 {sqlite_factory|SQLiteDatabase sqlite_factory ( string $filename [, int $mode = 0666 [, string &$error_message ]] )}
lappend lKeywords3 {sqlite_fetch_all|array sqlite_fetch_all ( resource $result [, int $result_type = SQLITE_BOTH [, bool $decode_binary = true ]] )
array SQLiteResult::fetchAll ([ int $result_type = SQLITE_BOTH [, bool $decode_binary = true ]] )
array SQLiteUnbuffered::fetchAll ([ int $result_type = SQLITE_BOTH [, bool $decode_binary = true ]] )}
lappend lKeywords3 {sqlite_fetch_array|array sqlite_fetch_array ( resource $result [, int $result_type = SQLITE_BOTH [, bool $decode_binary = true ]] )
array SQLiteResult::fetch ([ int $result_type = SQLITE_BOTH [, bool $decode_binary = true ]] )
array SQLiteUnbuffered::fetch ([ int $result_type = SQLITE_BOTH [, bool $decode_binary = true ]] )}
lappend lKeywords3 {sqlite_fetch_column_types|array sqlite_fetch_column_types ( string $table_name , resource $dbhandle [, int $result_type = SQLITE_ASSOC ] )
public array SQLiteDatabase::fetchColumnTypes ( string $table_name [, int $result_type = SQLITE_ASSOC ] )}
lappend lKeywords3 {sqlite_fetch_object|object sqlite_fetch_object ( resource $result [, string $class_name [, array $ctor_params [, bool $decode_binary = true ]]] )
object SQLiteResult::fetchObject ([ string $class_name [, array $ctor_params [, bool $decode_binary = true ]]] )
object SQLiteUnbuffered::fetchObject ([ string $class_name [, array $ctor_params [, bool $decode_binary = true ]]] )}
lappend lKeywords3 {sqlite_fetch_single|string sqlite_fetch_single ( resource $result [, bool $decode_binary = true ] )
string SQLiteResult::fetchSingle ([ bool $decode_binary = true ] )
string SQLiteUnbuffered::fetchSingle ([ bool $decode_binary = true ] )}
lappend lKeywords3 {sqlite_fetch_string|alias of: sqlite_fetch_single()}
lappend lKeywords3 {sqlite_field_name|string sqlite_field_name ( resource $result , int $field_index )
string SQLiteResult::fieldName ( int $field_index )
string SQLiteUnbuffered::fieldName ( int $field_index )}
lappend lKeywords3 {sqlite_has_more|bool sqlite_has_more ( resource $result )}
lappend lKeywords3 {sqlite_has_prev|bool sqlite_has_prev ( resource $result )
bool SQLiteResult::hasPrev ( void )}
lappend lKeywords3 {sqlite_key|int SQLiteResult::key ( void )}
lappend lKeywords3 {sqlite_last_error|int sqlite_last_error ( resource $dbhandle )
public int SQLiteDatabase::lastError ( void )}
lappend lKeywords3 {sqlite_last_insert_rowid|int sqlite_last_insert_rowid ( resource $dbhandle )
public int SQLiteDatabase::lastInsertRowid ( void )}
lappend lKeywords3 {sqlite_libencoding|string sqlite_libencoding ( void )}
lappend lKeywords3 {sqlite_libversion|string sqlite_libversion ( void )}
lappend lKeywords3 {sqlite_next|bool sqlite_next ( resource $result )
bool SQLiteResult::next ( void )
bool SQLiteUnbuffered::next ( void )}
lappend lKeywords3 {sqlite_num_fields|int sqlite_num_fields ( resource $result )
int SQLiteResult::numFields ( void )
int SQLiteUnbuffered::numFields ( void )}
lappend lKeywords3 {sqlite_num_rows|int sqlite_num_rows ( resource $result )
int SQLiteResult::numRows ( void )}
lappend lKeywords3 {sqlite_open|resource sqlite_open ( string $filename [, int $mode = 0666 [, string &$error_message ]] )
final public SQLiteDatabase::__construct ( string $filename [, int $mode = 0666 [, string &$error_message ]] )}
lappend lKeywords3 {sqlite_popen|resource sqlite_popen ( string $filename [, int $mode = 0666 [, string &$error_message ]] )}
lappend lKeywords3 {sqlite_prev|bool sqlite_prev ( resource $result )
bool SQLiteResult::prev ( void )}
lappend lKeywords3 {sqlite_query|resource sqlite_query ( resource $dbhandle , string $query [, int $result_type = SQLITE_BOTH [, string &$error_msg ]] )
resource sqlite_query ( string $query , resource $dbhandle [, int $result_type = SQLITE_BOTH [, string &$error_msg ]] )
public SQLiteResult SQLiteDatabase::query ( string $query [, int $result_type = SQLITE_BOTH [, string &$error_msg ]] )}
lappend lKeywords3 {sqlite_rewind|bool sqlite_rewind ( resource $result )
bool SQLiteResult::rewind ( void )}
lappend lKeywords3 {sqlite_seek|bool sqlite_seek ( resource $result , int $rownum )
bool SQLiteResult::seek ( int $rownum )}
lappend lKeywords3 {sqlite_single_query|array sqlite_single_query ( resource $db , string $query [, bool $first_row_only [, bool $decode_binary ]] )
public array SQLiteDatabase::singleQuery ( string $query [, bool $first_row_only [, bool $decode_binary ]] )}
lappend lKeywords3 {sqlite_udf_decode_binary|string sqlite_udf_decode_binary ( string $data )}
lappend lKeywords3 {sqlite_udf_encode_binary|string sqlite_udf_encode_binary ( string $data )}
lappend lKeywords3 {sqlite_unbuffered_query|resource sqlite_unbuffered_query ( resource $dbhandle , string $query [, int $result_type = SQLITE_BOTH [, string &$error_msg ]] )
resource sqlite_unbuffered_query ( string $query , resource $dbhandle [, int $result_type = SQLITE_BOTH [, string &$error_msg ]] )
public SQLiteUnbuffered SQLiteDatabase::unbufferedQuery ( string $query [, int $result_type = SQLITE_BOTH [, string &$error_msg ]] )}
lappend lKeywords3 {sqlite_valid|bool sqlite_valid ( resource $result )
bool SQLiteResult::valid ( void )
bool SQLiteUnbuffered::valid ( void )}
lappend lKeywords3 {sqlsrv_begin_transaction}
lappend lKeywords3 {sqlsrv_cancel}
lappend lKeywords3 {sqlsrv_client_info}
lappend lKeywords3 {sqlsrv_close}
lappend lKeywords3 {sqlsrv_commit}
lappend lKeywords3 {sqlsrv_configure}
lappend lKeywords3 {sqlsrv_connect}
lappend lKeywords3 {sqlsrv_errors}
lappend lKeywords3 {sqlsrv_execute}
lappend lKeywords3 {sqlsrv_fetch}
lappend lKeywords3 {sqlsrv_fetch_array}
lappend lKeywords3 {sqlsrv_fetch_object}
lappend lKeywords3 {sqlsrv_field_metadata}
lappend lKeywords3 {sqlsrv_free_stmt}
lappend lKeywords3 {sqlsrv_get_config}
lappend lKeywords3 {sqlsrv_get_field}
lappend lKeywords3 {sqlsrv_has_rows}
lappend lKeywords3 {sqlsrv_next_result}
lappend lKeywords3 {sqlsrv_num_fields}
lappend lKeywords3 {sqlsrv_num_rows}
lappend lKeywords3 {sqlsrv_prepare}
lappend lKeywords3 {sqlsrv_query}
lappend lKeywords3 {sqlsrv_rollback}
lappend lKeywords3 {sqlsrv_rows_affected}
lappend lKeywords3 {sqlsrv_send_stream_data}
lappend lKeywords3 {sqlsrv_server_info}
lappend lKeywords3 {sybase_affected_rows}
lappend lKeywords3 {sybase_close}
lappend lKeywords3 {sybase_connect}
lappend lKeywords3 {sybase_data_seek}
lappend lKeywords3 {sybase_deadlock_retry_count}
lappend lKeywords3 {sybase_fetch_array}
lappend lKeywords3 {sybase_fetch_assoc}
lappend lKeywords3 {sybase_fetch_field}
lappend lKeywords3 {sybase_fetch_object}
lappend lKeywords3 {sybase_fetch_row}
lappend lKeywords3 {sybase_field_seek}
lappend lKeywords3 {sybase_free_result}
lappend lKeywords3 {sybase_get_last_message}
lappend lKeywords3 {sybase_min_client_severity}
lappend lKeywords3 {sybase_min_error_severity}
lappend lKeywords3 {sybase_min_message_severity}
lappend lKeywords3 {sybase_min_server_severity}
lappend lKeywords3 {sybase_num_fields}
lappend lKeywords3 {sybase_num_rows}
lappend lKeywords3 {sybase_pconnect}
lappend lKeywords3 {sybase_query}
lappend lKeywords3 {sybase_result}
lappend lKeywords3 {sybase_select_db}
lappend lKeywords3 {sybase_set_message_handler}
lappend lKeywords3 {sybase_unbuffered_query}


################################################################################
# Color #4
#  - $lKeywords4  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart4 :: char   :: all words starting with this character matches
#  - $sChars4     :: string :: every char in string matches
#  - $sRegexp4    :: regexp :: regular expression in Tcl style
lappend lKeywords4 {while|while (expr) statement}
lappend lKeywords4 {for|for (expr1; expr2; expr3) statement}
lappend lKeywords4 {foreach|foreach (array_expression as $value) statement
foreach (array_expression as $key => $value) statement}
lappend lKeywords4 {if|if (expr) statement}
lappend lKeywords4 {else|if (expr) statement else statement}
lappend lKeywords4 {elseif|if (expr) statement elseif (expr) statement}
lappend lKeywords4 {break}
lappend lKeywords4 {continue}
lappend lKeywords4 {switch}
lappend lKeywords4 {case}
lappend lKeywords4 {break}
lappend lKeywords4 {goto}
lappend lKeywords4 {do}

# okay, those four are not keywords like the other ones...
lappend lKeywords4 {true}
lappend lKeywords4 {TRUE}
lappend lKeywords4 {false}
lappend lKeywords4 {FALSE}

lappend lKeywords4 {apcu_exists|mixed apcu_exists ( mixed $keys )}
lappend lKeywords4 {apc_exists|mixed apc_exists ( mixed $keys )}
lappend lKeywords4 {array_key_exists|bool array_key_exists ( mixed $key , array $array )}
lappend lKeywords4 {class_exists|bool class_exists ( string $class_name [, bool $autoload = true ] )}
lappend lKeywords4 {dba_exists|bool dba_exists ( string $key , resource $handle )}
lappend lKeywords4 {enchant_broker_dict_exists|bool enchant_broker_dict_exists ( resource $broker , string $tag )}
lappend lKeywords4 {file_exists|bool file_exists ( string $filename )}
lappend lKeywords4 {function_exists|bool function_exists ( string $function_name )}
lappend lKeywords4 {interface_exists|bool interface_exists ( string $interface_name [, bool $autoload = true ] )}
lappend lKeywords4 {key_exists|alias of: array_key_exists()}
lappend lKeywords4 {method_exists|bool method_exists ( mixed $object , string $method_name )}
lappend lKeywords4 {msg_queue_exists|bool msg_queue_exists ( int $key )}
lappend lKeywords4 {property_exists|bool property_exists ( mixed $class , string $property )}
lappend lKeywords4 {swoole_timer_exists|bool swoole_timer_exists ( int $timer_id )}
lappend lKeywords4 {trait_exists|bool trait_exists ( string $traitname [, bool $autoload ] )}
lappend lKeywords4 {wincache_ucache_exists}

lappend lKeywords4 {defined|bool defined ( string $name )}
lappend lKeywords4 {isset|bool wincache_ucache_exists ( string $key )}
lappend lKeywords4 {is_a|bool is_a ( object $object , string $class_name [, bool $allow_string = FALSE ] )}
lappend lKeywords4 {is_array|bool is_array ( mixed $var )}
lappend lKeywords4 {is_bool|bool is_bool ( mixed $var )}
lappend lKeywords4 {is_callable|bool is_callable ( mixed $var [, bool $syntax_only = false [, string &$callable_name ]] )}
lappend lKeywords4 {is_dir|bool is_dir ( string $filename )}
lappend lKeywords4 {is_double|alias of: is_float()}
lappend lKeywords4 {is_executable|bool is_executable ( string $filename )}
lappend lKeywords4 {is_file|bool is_file ( string $filename )}
lappend lKeywords4 {is_finite|bool is_finite ( float $val )}
lappend lKeywords4 {is_float|bool is_float ( mixed $var )}
lappend lKeywords4 {is_infinite|bool is_infinite ( float $val )}
lappend lKeywords4 {is_int|bool is_int ( mixed $var )}
lappend lKeywords4 {is_integer|alias of: is_int()}
lappend lKeywords4 {is_iterable|bool is_iterable ( mixed $var )}
lappend lKeywords4 {is_link|bool is_link ( string $filename )}
lappend lKeywords4 {is_long|alias of: is_int()}
lappend lKeywords4 {is_nan|bool is_nan ( mixed $val )}
lappend lKeywords4 {is_null|bool is_null ( mixed $var )}
lappend lKeywords4 {is_numeric|bool is_numeric ( mixed $var )}
lappend lKeywords4 {is_object|bool is_object ( mixed $var )}
lappend lKeywords4 {is_readable|bool is_readable ( string $filename )}
lappend lKeywords4 {is_real|alias of: is_float()}
lappend lKeywords4 {is_resource|bool is_resource ( mixed $var )}
lappend lKeywords4 {is_scalar|bool is_scalar ( mixed $var )}
lappend lKeywords4 {is_soap_fault|bool is_soap_fault ( mixed $object )}
lappend lKeywords4 {is_string|bool is_string ( mixed $var )}
lappend lKeywords4 {is_subclass_of|bool is_subclass_of ( mixed $object , string $class_name [, bool $allow_string = TRUE ] )}
lappend lKeywords4 {is_tainted|bool is_tainted ( string $string )}
lappend lKeywords4 {is_uploaded_file|bool is_uploaded_file ( string $filename )}
lappend lKeywords4 {is_writable|bool is_writable ( string $filename )}
lappend lKeywords4 {is_writeable|alias of: is_writable()}


################################################################################
# Color #5
#  - $lKeywords5  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart5 :: char   :: all words starting with this character matches
#  - $sChars5     :: string :: every char in string matches
#  - $sRegexp5    :: regexp :: regular expression in Tcl style
# some markant things we treat separated...
lappend lKeywords5 {constant|mixed constant ( string $name )}
lappend lKeywords5 {define|bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )}
lappend lKeywords5 {die|void die ([ string $status ] )
void die ( int $status )}
lappend lKeywords5 {echo|void echo ( string $arg1 [, string $... ] )}
lappend lKeywords5 {exit|void exit ([ string $status ] )
void exit ( int $status )}
lappend lKeywords5 {global}
lappend lKeywords5 {putenv|bool putenv ( string $setting )}
lappend lKeywords5 {return}
lappend lKeywords5 {unset|void unset ( mixed $var [, mixed $... ] )}
lappend lKeywords5 {var_dump|void var_dump ( mixed $expression [, mixed $... ] )}


################################################################################
# Color #6
#  - $lKeywords6  :: list   :: keywords (optionally add to each a help text with "|")
#  - $sCharStart6 :: char   :: all words starting with this character matches
#  - $sChars6     :: string :: every char in string matches
#  - $sRegexp6    :: regexp :: regular expression in Tcl style
lappend lKeywords6 {===}
lappend lKeywords6 {==}
lappend lKeywords6 {=}
lappend lKeywords6 {!==}
lappend lKeywords6 {!=}
lappend lKeywords6 {!}
lappend lKeywords6 {<=}
lappend lKeywords6 {>=}
lappend lKeywords6 {<}
lappend lKeywords6 {>}
lappend lKeywords6 {||}
lappend lKeywords6 {=>}
lappend lKeywords6 {as}
lappend lKeywords6 {and}
lappend lKeywords6 {or}
lappend lKeywords6 {xor}
lappend lKeywords6 {empty}


################################################################################
# finished - now add your syntax
syntax_add
################################################################################


################################################################################
# FILE: tcltk/4000_setup.tcl

################################################################################
# Setup ########################################################################
################################################################################



################################################################################
# 1/4: vorbelegen (vom User noch konfigurierbar) ###############################

# Sprache vorbelegen / ermitteln
set sGuiLanguage "en"
if { [ string length [ msgcat::mclocale ] ] > 1 } {
	set sGuiLanguage [ string tolower [ string range [ msgcat::mclocale ] 0 1 ] ]
}

# Schriften
set sFontGui  [ font actual TkDefaultFont -family ]
set iFontGui  [ font actual TkDefaultFont -size   ]
set sFontEdit [ font actual TkFixedFont   -family ]
set iFontEdit [ font actual TkFixedFont   -size   ]

# Ttk-Theme
set sTtkTheme "default"

# Editor
set sIndent "Tab"
set iTabIndent 2
set iScrollbarWidth 11
set sLineFeedType "LF"
set iLongLine 80
set bAutoClose 1
set iBottomLinesInView 4

# Textcursor
set bTextCursorBlock 0
set iTextCursorWidth 2
set bTextCursorBlink 1
set iTextCursorBlinkOn  700
set iTextCursorBlinkOff 300

# Editor: schwarz/weiss, gueltige Akzentfarben
set bDarkEditor 1
set lColorAccents [ list "red" "pink" "purple" "blue" "cyanblue" "turquoise" "green" "yellow" "orange" ]

# GUI: Abstaende fuer Datei-Infozeile und Pane
set iDistances 5

# Datumsformat
set sInsertDateFormat "%Y%m%d"

# Tooltips
set bTooltips 1

# Backup-History (Tage; 0 Tage = deaktiviert)
set iBackupHistory 3

# Diff - internal oder diff
set sDiff "internal"



################################################################################
# 2/4: vorbelegen (vom User nicht zu konfigurieren) ############################

# Default Fenstergroesse
set sWinGeometry  "900x650+0+0"
set iWinWidth      900
set iWinHeight     650
set iPaneLeftWidth 220
set iPaneLeftSep   300

# Default Session Name
set sSession [::msgcat::mc {unnamed}]

# Defaults fuer Suchen und Ersetzen
# 0=nein, 1=ja
set iCaseSensitiveIndex 0
# 0=Datei, 1= Auswahl, 2=Session
set iReplaceModeIndex 0
# 0=nein, 1=ja
set iReplaceConfirm 0

# Variablen fuer Suchen & Ersetzen initialisieren
set lSearchHistory  [ list ]
set lReplaceHistory [ list ]

# fuer die Config: volle Liste merken
set lAllColorAccents $lColorAccents

# negative Schriftgroessen sind Kaese, da vom User in der Config nicht zu handhaben
if { $iFontGui < 0 } {
	set iFontGui [ expr round($iFontGui / [ tk scaling ] * -1) ]
}
if  { $iFontEdit < 0 } {
	set iFontEdit [ expr round($iFontEdit / [ tk scaling ] * -1) ]
}



################################################################################
# 3/4: uebersteuern ############################################################

# Fenstergroesse und letzte Session
if { [ file exists [ file join "~" ".config" $sProgNameShort "startup.tcl" ] ] } {
	source [ file join "~" ".config" $sProgNameShort "startup.tcl" ]
}
if { ! [ file exists [ file join "~" ".config" $sProgNameShort "session" "${sSession}.tcl" ] ] } {
	set sSession [::msgcat::mc {unnamed}]
	if { ! [ file exists [ file join "~" ".config" $sProgNameShort "session" "${sSession}.tcl" ] ] } {
		set sFile [ file join "~" ".config" $sProgNameShort "session" "${sSession}.tcl" ]
		set oFile [ open $sFile w ]
		puts $oFile ""
		close $oFile
	}
}

# Configfile einlesen
if { [ file exists [ file join "~" ".config" $sProgNameShort "config.tcl" ] ] } {
	source [ file join "~" ".config" $sProgNameShort "config.tcl" ]
}

# letzte Session ggf. mit einer uebergebener Datei uebersteuern
if { $argv != "" } {
	if { [ file exists $argv ] } {
		set sTmpFile [ file normalize $argv ]
		if { [ file isfile $sTmpFile ] } {
			set sSession [::msgcat::mc {unnamed}]
			set sHighlightLanguage ""
			set sExtension [ string tolower [ file extension $sTmpFile ] ]
			foreach lTmp $lFileTypes {
				foreach sTmp [ lindex $lTmp 1 ] {
					if { $sTmp == $sExtension } {
						set sHighlightLanguage [ lindex $lTmp 0 ]
					}
				}
			}
			set lSession [ list $sTmpFile [ list $sTmpFile $sHighlightLanguage 1.0 ] ]
			set sFile [ file join "~" ".config" $sProgNameShort "session" "${sSession}.tcl" ]
			set oFile [ open $sFile w ]
			puts $oFile $lSession
			close $oFile
		}
	}
}

# Syntax-Dateien des User einlesen
foreach sSyntaxFile [ glob -nocomplain -directory [ file join "~" ".config" $sProgNameShort "syntax" ] *.tcl ] {
	source $sSyntaxFile
}

# Sprach-Dateien des User einlesen
foreach sLangFile [ glob -nocomplain -directory [ file join "~" ".config" $sProgNameShort "language" ] *.tcl ] {
	source $sLangFile
}



################################################################################
# 4/4: aktivieren (soweit manueller Eingriff notwendig) ########################

# Farben
set i [ llength $lColorAccents ]
if { $i == 1 } {
	set sColorType [ lindex $lColorAccents 0 ]
} else {
	if { $i == 0 } {
		set lColorAccents [ list "red" "pink" "purple" "blue" "cyanblue" "turquoise" "green" "yellow" "orange" ]
	}
	set sColorType [ lindex $lColorAccents [ expr int( rand() * $i ) ] ]
}
if { $bDarkEditor == 1 } {
	# Farben (Editor, nicht Ttk-Elemente)
	set sColorBackground            "#000000"
	set sColorForeground            "#ffffff"
	set sColorBackgroundHighlighted "#393939"
	set sColorForegroundHighlighted "#a9a9a9"
	set sColorSidebarPaneAdjust     "#888888"
	set sColorMenubarBackground     "#ffffff"
	set sColorScrollpicker          "#666666"
	set sColorTextCursor            "#ffffff"
	# Akzentfarbe
	if { $sColorType == "red" } {
		set sColorForegroundActivated "#ff6666"
		set sColorBackgroundSelected  "#502020"
	} elseif { $sColorType == "pink" } {
		set sColorForegroundActivated "#ff66ff"
		set sColorBackgroundSelected  "#502050"
	} elseif { $sColorType == "purple" } {
		set sColorForegroundActivated "#9966ff"
		set sColorBackgroundSelected  "#302050"
	} elseif { $sColorType == "blue" } {
		set sColorForegroundActivated "#6666ff"
		set sColorBackgroundSelected  "#202050"
	} elseif { $sColorType == "cyanblue" } {
		set sColorForegroundActivated "#6699ff"
		set sColorBackgroundSelected  "#203050"
	} elseif { $sColorType == "turquoise" } {
		set sColorForegroundActivated "#66ffff"
		set sColorBackgroundSelected  "#205050"
	} elseif { $sColorType == "green" } {
		set sColorForegroundActivated "#99ff66"
		set sColorBackgroundSelected  "#305020"
	} elseif { $sColorType == "yellow" } {
		set sColorForegroundActivated "#ffff66"
		set sColorBackgroundSelected  "#505020"
	} elseif { $sColorType == "orange" } {
		set sColorForegroundActivated "#ffcc66"
		set sColorBackgroundSelected  "#504020"
	}
	# Syntax Highlight
	set sColorComments  "#aaaaaa"
	set sColorVars      "#ff8fbe"
	set sColorBrackets  "#8fd7ff"
	set sColorFunctions "#ff8f8f"
	set sColorKeyWords1 "#ffffb8"
	set sColorKeyWords2 "#ffd5b8"
	set sColorKeyWords3 "#ffb8f3"
	set sColorKeyWords4 "#b8d8ff"
	set sColorKeyWords5 "#b8ffff"
	set sColorKeyWords6 "#b8ffb8"

} else {
	# Farben (Editor, nicht Ttk-Elemente)
	set sColorBackground            "#ffffff"
	set sColorForeground            "#333333"
	set sColorBackgroundHighlighted "#e3e3e3"
	set sColorForegroundHighlighted "#808080"
	set sColorSidebarPaneAdjust     "#b0b0b0"
	set sColorMenubarBackground     "#f6f6f6"
	set sColorScrollpicker          "#a3a3a3"
	set sColorTextCursor            "#000000"
	# Akzentfarbe
	if { $sColorType == "red" } {
		set sColorForegroundActivated "#502020"
		set sColorBackgroundSelected  "#ff6666"
	} elseif { $sColorType == "pink" } {
		set sColorForegroundActivated "#502050"
		set sColorBackgroundSelected  "#ff66ff"
	} elseif { $sColorType == "purple" } {
		set sColorForegroundActivated "#302050"
		set sColorBackgroundSelected  "#9966ff"
	} elseif { $sColorType == "blue" } {
		set sColorForegroundActivated "#202050"
		set sColorBackgroundSelected  "#6666ff"
	} elseif { $sColorType == "cyanblue" } {
		set sColorForegroundActivated "#203050"
		set sColorBackgroundSelected  "#6699ff"
	} elseif { $sColorType == "turquoise" } {
		set sColorForegroundActivated "#205050"
		set sColorBackgroundSelected  "#66ffff"
	} elseif { $sColorType == "green" } {
		set sColorForegroundActivated "#205020"
		set sColorBackgroundSelected  "#66ff66"
	} elseif { $sColorType == "yellow" } {
		set sColorForegroundActivated "#505020"
		set sColorBackgroundSelected  "#ffff66"
	} elseif { $sColorType == "orange" } {
		set sColorForegroundActivated "#504020"
		set sColorBackgroundSelected  "#ffcc66"
	}
	# Syntax Highlight
	set sColorComments  "#777777"
	set sColorVars      "#400090"
	set sColorBrackets  "#009090"
	set sColorFunctions "#900000"
	set sColorKeyWords1 "#004090"
	set sColorKeyWords2 "#409000"
	set sColorKeyWords3 "#900040"
	set sColorKeyWords4 "#900090"
	set sColorKeyWords5 "#909000"
	set sColorKeyWords6 "#904000"

}
# ggf. Userfarben aus eigener Datei aktivieren
if { [ file exists [ file join "~" ".config" $sProgNameShort "colors.tcl" ] ] } {
	source [ file join "~" ".config" $sProgNameShort "colors.tcl" ]
}


# Linefeed
set sLineFeed "\n"
if { $sLineFeedType == "CR" } {
	set sLineFeed "\r"
} elseif { $sLineFeedType == "CRLF" } {
	set sLineFeed "\r\n"
}

# Einrueckungszeichen
if { $sIndent ==  "Blank" } {
	set sIndent " "
} else {
	set sIndent "	"
}

# Sprache setzen
foreach lLang $lLanguages {
	if { [ lindex $lLang 1 ] == $sGuiLanguage } {
		msgcat::mclocale $sGuiLanguage
		namespace import -force msgcat::mcset
	}
}

# Theme
proc setupmytheme {sTtkTheme} {
	global bDarkEditor sColorForeground sColorBackground
	if { $sTtkTheme != "" } {
		if { [ lsearch [ ttk::themes ] $sTtkTheme ] > -1 } {
			ttk::setTheme $sTtkTheme
		}
	}
	if { $bDarkEditor == 1 } {
		option add *Menu.Background $sColorForeground
	} else {
		option add *Menu.Background $sColorBackground
	}
}
option add *Menu.BorderWidth 1
option add *Menu.Relief flat
option add *Menu.activeBorderWidth 0
setupmytheme $sTtkTheme

# Schriften
set iEditFontHeight 14
proc setupmyfonts {sCreateConfigure} {
	global sFontGui iFontGui sFontEdit iFontEdit sTtkTheme iEditFontHeight iDistances bDarkEditor sColorForegroundActivated sColorBackground sColorBackgroundSelected sColorForeground
	set sAkzentColor $sColorForegroundActivated
	set sTextColor   $sColorBackground
	if { ! $bDarkEditor } {
		set sAkzentColor $sColorBackgroundSelected
		set sTextColor   $sColorForeground
	}
	set iBigFont       [ expr round($iFontGui  * 1.2) ]
	set iSmallFont     [ expr round($iFontGui  * 0.9) ]
	set iBigFontEdit   [ expr round($iFontEdit * 1.2) ]
	set iSmallFontEdit [ expr round($iFontEdit  * 0.9) ]
	font $sCreateConfigure GuiFont       -family "${sFontGui}"  -size $iFontGui       -weight normal -slant roman
	font $sCreateConfigure GuiFontSmall  -family "${sFontGui}"  -size $iSmallFont     -weight normal -slant roman
	font $sCreateConfigure GuiFontBold   -family "${sFontGui}"  -size $iFontGui       -weight bold   -slant roman
	font $sCreateConfigure GuiFontHead   -family "${sFontGui}"  -size $iBigFont       -weight bold   -slant roman
	font $sCreateConfigure GuiFontItalic -family "${sFontGui}"  -size $iFontGui       -weight normal -slant italic
	font $sCreateConfigure EditFont      -family "${sFontEdit}" -size $iFontEdit      -weight normal -slant roman
	font $sCreateConfigure EditFontSmall -family "${sFontEdit}" -size $iSmallFontEdit -weight normal -slant roman
	font $sCreateConfigure EditFontBold  -family "${sFontEdit}" -size $iFontEdit      -weight bold   -slant roman
	font $sCreateConfigure EditFontHead  -family "${sFontEdit}" -size $iBigFontEdit   -weight bold   -slant roman

	# Hoehe der Schriftart im Editor (wird fuer Positionierung der Syntaxvervollstaendigung benoetigt)
	set iEditFontHeight [ expr $iFontEdit * -1 ]
	if { $iFontEdit > 0 } {
		set iEditFontHeight [ expr round($iFontEdit * [ tk scaling ]) ]
	}

	# normale Elemente
	option add *Font GuiFont

	# Menu
	option add *Menu.activeBackground $sAkzentColor
	option add *Menu.activeForeground $sTextColor
	option add *Menu.selectColor      $sTextColor

	# Listbox
	option add *Listbox.selectBackground $sAkzentColor
	option add *Listbox.selectForeground $sTextColor

	# ttk::labelframe
	ttk::style configure TLabelframe.Label -font GuiFontItalic

	# ttk::button
	ttk::style configure TButton -font GuiFont

	# Toolbutton (ttk::menubutton->Toolbutton)
	# ttk::style configure Toolbutton -font GuiFont

	# ttk::checkbutton
	ttk::style configure TCheckbutton -font GuiFont
	ttk::style map       TCheckbutton -indicatorcolor [ list selected $sAkzentColor pressed $sAkzentColor ]

	# ttk::radiobutton
	ttk::style configure TRadiobutton -font GuiFont
	ttk::style map       TRadiobutton -indicatorcolor [ list selected $sAkzentColor pressed $sAkzentColor ]

	# ttk::treeview
	set sFieldBackground [ ttk::style lookup Treeview -fieldbackground ]
	if { $sFieldBackground == {} } {
		set sFieldBackground [ ttk::style lookup Treeview -background ]
	}
	ttk::style configure Treeview -font GuiFontSmall -indent [ expr $iDistances * 2 ] -fieldbackground $sFieldBackground -background $sFieldBackground
	ttk::style map       Treeview -background [ list selected $sAkzentColor ] -foreground [ list selected $sTextColor ]

	# ttk::notebook
	ttk::style configure TNotebook.Tab -font GuiFont

	# ttk::menubutton
	ttk::style configure TMenubutton -font GuiFont

	# ttk::combobox
	ttk::style configure TCombobox -selectbackground $sAkzentColor -selectforeground $sTextColor

	# ttk::spinbox
	ttk::style configure TSpinbox -selectbackground $sAkzentColor -selectforeground $sTextColor

}
setupmyfonts create

# Diff - Fallback auf GNU Diff
if { ! $bStructList } {
	if { [ auto_execok "diff" ] != "" } {
		set sDiff "diff"
	}
} elseif { $sDiff == "diff" } {
	# interns Diff ist verfuegbar, aber GNU diff wurde konfiguriert - haben wir das auch?
	if { [ auto_execok "diff" ] == "" } {
		set sDiff "internal"
	}
}


################################################################################
# FILE: tcltk/4100_icons.tcl

################################################################################
# icons ########################################################################
################################################################################

# 64x64 (56 mit Rand)
set gLogo64 [ image create photo -format "png -alpha 1" -data "\
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABmJLR0QA/wD/AP+gvaeTAAAA
CXBIWXMAAA06AAANOgEDIh6FAAAAB3RJTUUH4gEICysEEsTH5wAAAB1pVFh0Q29tbWVudAAA
AAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAALi0lEQVR42u1aPY8sVxE953bP7vOHLEGAiRE/
gIjECAfggICEH2EjIyyRkFnPKySERIBkI2T4DQgkEgLjAEuEkFiChADJepgMbOzdnZm+dQiq
7kfPTM/us3ef9My2dndmert7btWtqnvOqQvcHXfH3fH/fHD3xA9f+pJgAEcCE8BV95rn10p6
qPekrhyQ2fxzSuVeLr727zVpblXcr+zf/eNf/n1m87jklcuPMiwROAfSitAFkNKev6qBJGAm
xFg6w4mUDDlj9vngPPDAjFTnxWsCIHeMACQCyAJH1msAuCM6Jw7D4SfvOUCTsDbgpe99Ec8+
uwJomLZEyoKJkAzAAEkwA0xubPmcM+J9hphgU4YESAYhIRugjaCVwS4JGwGtDSBgmcgCEgx5
BGzt32e5+UjWvCQR2fx/MoKJPpaNoJH+SuCDDzLefff8oBPGQ9M/rQ1f+NyAjz6eYGsAqxKe
A7QFoOwDtmJ8gpl1nwUTYGZhvPwVGZbjvnPBRvlMbQHLgGAggSkLCmebASkpHEsAgkD/uyW0
YozRnwMCkxHctEl56qkELWTfvgOSO3hKPlAzAJcZSAOUJ/c2CGgAYHWg7dUHb6bqHGlyh6wJ
JkFQzLyqI20EMBHbrTyXY/CSG++1IYwXoC3AEwAm2EhgDeAEwMbThWzR6I67rgNaMsAuDVoR
2CbIPOdk5WE5QnOAWe5qAiEK2PiAZOYO2wgaDEwJmgBswxjzaMEEaFZDwtCIIAIe7hAEwBKA
yHPFzGPjk2NZs/GYzYvllTUAI5AvgKwEXE4++7JIA9VQ0UkCNltIQxs0PJd5ashTipzMPiVp
xHSZYQOAFb2AbAFit56wpo1/nee6JHAStPKqWHIdUPz00chajMX0EBFAd4KSAHkhk6Hm0GoE
hhHImX7yZIgvJnL28J3MoEwMQ/LoOF3B1hmDCbpHWPb7yYwpuTHFr3kqM02MI6rhZmE0gUwg
ZXl0mluRzf3g6RPGg0gEzs8zyIdMAcsWM4I6++OY8Ovf/Bvv/3MDkkgJMEsYR8GMGIYwIvfL
Xyx7dMN9CSRMBoJ7WGEXnfBAhPaYxMfh6VKW6V1sQBLjmPa/52AKxEW1AEZ4AgBPiQfvbfDk
U8lIj6uUAClVh0isgMdsiPdD99x2znNT1Uzlq4ESVpwBnKuAUZ/316oBxQn9klYr/DphGAUA
6Sc7iOpxPY5EQIZZq8SmhGzqZu2zcRyMAAceDCAT4MN8mQK4h9cf5+Pg+uBFTMiTIDoEtgA5
+zgeePHV59JnKgVIIAsQHaqWim1y5+ymwK9+9Cd78dXnrswL9qymnivIp/wr1vX2n7qkzW4V
48ryl7WYzu8LZChfQn9+9javVQTzJMgC1sbgpsmwzNf8mAKD7xrYjDMffL/UKf4wAYjlsTg5
LCCC5irIUMdCm9HtnDpfJhIcDo98GQorBzgpeW+QBqRkMBsWjf/qdz6PJ54ZylgOP1qImuKP
NwNoDmYY5xXnEZ+tgDFzNCpzQqQcQDCuNQHKjiTLvdtLw7/+cX6Qzi+sAoSJyA7JOiZlgeCE
pch54pkB28sjVbJgfBNgHekxgoUXWMDq6iDFe1bHmawaKDUnuPE2Oz+ukkcOeN1VwGqlt/A4
szAhIQ3LEdBF4WIVkOSDKXg/DKOc5DBSToFDUCOF9ZzJM8QU8bkTUSVwGVFkS/LXkgOcfuYZ
ndQAmNGJzokOFrjEK7CRiiGxrAZ5gjkzRCy1KglsmJMaxedwAhQpozLbnhYlFag2IbzuMkh6
Rc2ZHZ8XbA2ns7RFzUrHCmQX+tXAOtPODNXNHgr9LunSR41abWjXsHNSGKyuduAhUqCEfpW2
QOQkrJRC+zumsOpI6PeG+2AZs+YzG3pDocXd4NXNeg1ztNCvz1dzoBlRqcaC3pgOhT+TQTJk
i3yMubV1PloE/Vt4JPRb0SrhXFYECLDOCMWMw9pyTLV7aZhf268u6goj1CLiOmRoGIBpilnZ
dJLSqZCNi8sgQSQKFx/mWAbVRBLrQ70sa4wcFsySa3/BPfx9WSWcRktyCTgEUgWkAIiBTscL
hJJ1RZ/EtDZngnoYPcDo4b8Kfe9c4ElyUxciYDwl/vLb/3gBmgVcAJ8y6CU0SCB1aE6z6rWD
BGcIsAda8V5NZyejQPO6DiCQ15Hrmyg6bALlYvhLGE5S99Be7/fZJVuRagCWB7MmsUeC+9Um
8OEeAGYHnblTiK8BhAjKwBM5qNhqhglS0l41/e79r6c3z955LPWBgyzOlHwZ3AhTeN+GotXt
S1hvnr3z2BLktLiebV0TxFaYsmAboCqXO8fL959/pHT4lfsv3Nj3jfswGBiSz3YJ/aLf58SD
q9wvzv5oL99/Xg0G8MAagYVsR2V5vT64e2+f66+fvcVbc8AuEKpgoxH2ZZhLwrZqvQNyhr8C
qPrn1EgWSRC2h1a6BcBDdeQVXOMGHdDPfEFhx1VbIm+Er3z7GZw+naDcaKwv7h0eCGir0nAt
AmzuQJI1igsB6wvD+3+7RBr4aBxQYKdVKLpYAprDDLj3dMLmwq2w3MAP5IjOOqM8ymzG9qww
xJ7/C1ithmWkebOSmBtbaoDZXCc4FgHEXOQoTKUiwIL3K4RVZXFVhi+UVjtOCPB104J0OlgE
ByA5GG7GFxKU0Qj2jvkF7DRiwuD6TQpSOMX2GJ4qfVVPegSgwOZjOyhuIwVac8QxAVJsldES
EywMks2YWUQwhIyuJVZID9RSrE+/kL4qihNvNwJ6VqitvDmJmKFViBAjlyi/I0n0FLXNOroO
MEoh7PO+c1gVOCKadEu9mHFZuHQmNiRgOwFKQUF5hAl3YgbKrM1EkC7sUdrfmod7L3ZYE1Ed
I6QlJHFzDvCGYoRy8pwvNUCTwLwQN9GdXf/XcPJkCnHS9cTRUlN2ky+nCp2eqWxgCIPpBS8h
QYwVIgHTZZCjRxYB2zB6qzaL95YRKEkMK+Cvb33cSVBFiEDt3e/xOaJp+aH572M/7/LyFjyw
6IApETY5OClYJm2vTsRhxR1quktTO9ew4/1yQaUUOb/v9inGwRRIsVEKUxt13WuzIriDxr5/
/xvpjZ2W020eP7j/rfSzs9/brUZAXqNuYGpgqElS/fHG2duPlA7flPHLy6CAdEpobHqc1IDR
Pj395menO+zFBpguAsuTdXky8WDz4/WzP9grr73QtLMZk2Pr/KrvXM5p8j49xryIggsEu29I
7eiQvk1qdt9PX/sdr5UCRQNUh8qSBZ1dkr7hhbNHa+xo9H51PyAf1BWjyAScOaO1yVWeXs1U
N4n+jPQJakDfZUVrQ2kr8B6P+Qt5Ar78tSewuleob2uDmakSLUR3F+awGYEG63fXexuImj3P
d/C1zlLfb7DWVe4xu/I1N0tzaAvXrAgOvg8wpcM7LosqfHIvYbtW4/illa3W7ETH/KxSZczg
8O75voHSawVWukmdo2CfpghaQX+sGyAbPE5HI4Ck43rtdIRKd6YYgm7gsxYYZg3QWbd399oZ
U4zts4aHVowORkAqZEi+U8M2fiWno3JANzuqzdCe6FjPFbrGZnFWP7O9kbTm2F4kmWkKHW/4
dMtgRABjK69vY6c7gcubjuc0lTX80UdDH7Yxy9jp7dcWt1qbq2+KzgSV0Al6AeVT44BCdUsP
oG4/vRYOL7s6VHv/fcPyWDh7zeFMFYJVjr3X+PRd6/PzN4MEczE2eoLbBoAslpYlWY7Rtex3
d2B39rpWttD0QUSYsxdDtOMQoVOaWkoI+MRq8cEIIIGPPswY4Rugh9MBTAMuL5Ybo4Q7ZnNu
4Aik8jv4LxOg5IyufE6MjWHBn1L/flZdUbYVzPYH9NLZzXGBDAxDwoMH29lO8Up5h+WVII3E
e3+euuZnATQ80ASZA7wezOziucO7x4lDIPJGoLDvCN0PEh1LtBjIMB5SCnfgaQcIi4S2T59v
Wvu5O+6Ou+Pu2D/+By+0x9sIJk1kAAAAAElFTkSuQmCC" ]

# 48x48
set gLogo48 [ image create photo -format "png -alpha 1" -data "\
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QATQBuAINv2BM3AAAA
CXBIWXMAAA06AAANOgEDIh6FAAAAB3RJTUUH4gEICCA3TKbBYwAAAB1pVFh0Q29tbWVudAAA
AAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAJg0lEQVRo3s1aTatlRxVdq865r7vT6TQIsZGA
LRHBiIMMFBwKkok/IAN/QARFERUEIYQoOFOD+QP+AMe2CE6c+hVBCD2R9EClIdLpTne/1/ec
2stB7arade59id2jvnDfPfeculV7V+2Ptdd+/NE3X1TOwH4vSABJMBEU2ksAoHJDCg9Q7/Vr
UgABIr78hto0AICUALI8JwGQoF+TbG+Z6vRlqgRMvsCcs3DxYsL1z1zAyQkhAyCWH/jkUlFO
QYn6vQtkMPMVJIB1TNOtXLNfy29UJVwVn4IgAKbU13RFcgYePjSsqzCfnRquf/oCXn31E5hm
YF3LgpYJ5b5YtiKQmWDmn7J2LTMIgAmwFZAJWYIJwFI+q9AGwLL/ToJ8w0T/NKJvOgFfs4wT
llW4efMMd+6smAVgmspxPvhQsGxAIpT96EAI9MWAnAUzK4Ko3zcBlgVlQSgKWy7am5XnaoJ0
4YFyDRShYQJJGAjLZfWieLEEMzV5JWB2pbEsQs5WFl0BySA33CqgfHFZF9hUBLbsO09CcEEz
ivCop1rWKgpE0wRUBTV081uLj9QNbNaQy8mkRMx1krwAtpZdlQRSmOcySGSZMNddYDEpK6Zh
Jmgx2ERkCJaJaRI0A7ZaHzexnUBKgim5Mih/6IpZ2RRMRXi5Q0pEShgixAw/Wpnbsx/rugp3
Pthj2cOY0lpmoCtowQzcBMwGu67jLLudgzC5WSGcRA0E2f3FzaUOsnrtCjCVk18WgQTm6uGm
vpsXLiR8cDfjdzfu5Xv38jTPPKkhDSQSYzis4XeMVPV+k2SMhAcvlUla+G7rIYbUMdTOcwom
lNGcRBL2i+zu3TzljHck3EhJzwJQImCpxu5i6+QmvMJt142/XZuOSw8AyRXN8I0qHuh71kJt
YonyNYf0E7D+zhmQaZ1nnAC68ctf//PHeEpfya3RBQ8x3kQ3gWcB4Iff/vzJz77xST5tCsw9
NLn5gDAPFW7XAoArt28v7730Bbz2+ueu+IGHHAzQrFgBk29L+WHCBBBIqjmlrDGphMtyLwGp
rMecPHinPjbYnQxAEpLnilnVeVUSVDZgnifkEO4A4I3f3NFrr+MKiHeV8cK62D1oxDvFTCte
KJDAYKAr2T1YnmM44CehODGr47vcuedkyCdjKv5QTqDaf01S/n2MJMXklPHCfEJcvXbhuTQ5
7AGql4WwwhAvg/QVEAlDZIKIEMDKaJ9DwxwlFqyPStafHWrCWh6IGAVbBbQudu/qtQvPffFr
V8EEhxs4EF6G9rbsR6+Sndsz9WdtrOcWZR9vJcdprVGtPHv/X2c4u58xu4nDDM2J8yrYulE7
hPQ0FVNf93YwpAKuJlTu8ANVmHBtft0U8N9iGO/Zud73XNCc2IYw6hgna8D55UjVQG+FttKh
glXoChsQhNbm/VHCayN8PcXqUEQFc777cuSYTTD2BNU14PmJKJqOxsWioM32HUYrwOw2ThVG
9CKo3qtmVPaV7sRAwPhEDhil/WCIMH2HW+GzsXtZxTjs82QMNQWashpPZPAVDSYoY9hPV4Co
tu+YZCfY4o7MMVDSP+cTYtr1mgHGZt+ygkhLYYBwv7yT8cB5y/1g93QIXb9HYw6gqtUDyub4
HsiLGv4enTRh2mk6vZdx62+nmOZQ9FTnVQiJXqC0iks9fFbTsPD9wFyGZ37CnsxsAVI5gaJl
9jLQAOTVmgLRDwhymnl5/8Bw668PS6yPRfm2kA+n1pPWFpLG33JwsbFWjsV/Ed5NiKWGT7XK
KtcjNG6vBxC+zomXTua0MGRUppC8QgXPoEIN2QrCERGbsylRZuZmO1JDqXIMM8dIkFVEygH5
1gLnO99/eff2T/64ALjxVIE5ujp5kZeUQFrRfcBfb//ineVbb3x1AvQSE3bzLuW6FX2HO5aJ
m6rBlNwnekaBrUgFNKabv3rz92ePpYDTLs4gYCgVD2O+XQb4J1tx8fRhLiUeo+1WQLfxhrS1
75EPSpMXMdDLAP7+2HC6AqSaCSUcSbEtkUy7SwnPX5/BxBA1OMS6IYI4OVY++0bRI8rZfUPe
C0zgE9UDEceYsw7HMBqQsC46fe7atHvxK5dLBl83SSiPicgGoHYsaRH/vbXH/bMV8wntiRQw
T0KNgNJRGNd4IpLIq7CeqoOziH/OAW7SKLxZ5EfPK/c/pqSs1X6h/OSpewRVMbYnJLDu8Bbv
a8Q6GG5vuNJN8uImBzxeFEI4XpUsZ6uH3aDAFGUNO4mA7xG4nQHbbBRtSBPRbx5fhQ7mslOB
ddOT8zHTQXIdc1XlPIPAFhFlJcsOlB2hB/SEJ1DlKvC+RImceljF0CdQp74J7E4IrYUyTMFR
GfF+EphLtkfyTXKex9gTBZmeyIhmVkrbi3tlteQTiwcAoBHTDpfOPjTc+ssZ0tTxf6Unihmo
hdXRT9hLy1YbE/tTVMowPTGtYiKUBVt7fN6aDRNBIq+PtHv/vaWBuRGuod8b6h9u/hKE04ke
iSqF8/gnQHYnRmWIXeAtmDN8OU3Y7S5Omb4qK/FKjQwEO6yoMAPexoJSjU1QrlACN58YC6Ex
Er15EPfjez/40u6tN/+wAPjHU8fMgcXJrPXDdFD9vPXzPy/f/ekrMzJegXCJxBLNZ2sk1eZ5
YIeOhNSbF0OmUQPO7jo8YoA8dOK8qCUnc4jdKO3OIV4G8Fv5eHY4GqaOKFDNF7YNS2zKh+1z
O1CcR0qe2uDQmC07pTJOQoMs48HJM7x89VO7AuayWhJqhbzH+FJa9ig3lI0WWLeQF1pjw3i0
zBwguZoTh96XOfxtJ6Bhe5SVT55JeP6zO9jqCbAxbDrkehq4U+OMWhsp194bGxNXi/1kI4tn
FmyaBXuFRMbA0agwAtrUsIiNBmDdC3nfhTwgpbxVC+dczyOqjlIneWwCwjbkgmIUSkRDpCg7
Zc4/HiaCnnwUMI6g1hpShBnhZzqHeUCgIsdn6kSWPgqNIrJjXhPk2KeKTpyOFDi9/zUwa8bW
I+5sHTe+EHZZkfQNhZJ9HJxulWnfoSo0N/WhhjDJ7vzxmFs/eUPNV5OIypiGCi0qecAKnpvI
UsnC6+IJ3nuzaz7ke4hUVDXCssDU2xSSgzV5g46bQqj6T2gRDP8AUskrHKX1z1dgSsT+kfCf
f++R2Lvq66oDEyKANBP7B8Ltd9eQbRi7qR0aK7RQ1bv+9ITJUCN3v+Fx1vtIfd4SmSQ8fKiR
yGKzrzHJsESd0zs6t+9LqvV4IW4Yvk3txXOKyf8TWf8PVKEbONEzfxkAAAAASUVORK5CYII=" ]

# 32x32
set gLogo32 [ image create photo -format "png -alpha 1" -data "\
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QATQBuAINv2BM3AAAA
CXBIWXMAAA06AAANOgEDIh6FAAAAB3RJTUUH4gEICCENk7EpkAAAAB1pVFh0Q29tbWVudAAA
AAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAE70lEQVRYw72XO8seVRSFn3Vmvi9fvBERrKzs
LCysFW20svA/pFAUDXZWXqL/IAoBW/+ERCvRPoISUFAiqGAlwpvvMnP2stjnzMwbo0kTX5j3
zOXMOfuy1tp79M5rT/r4lrFBRQgBYAzOMwA7x34t9WtAedsGSZSS450Oor1fYBxg3O0qFy8+
zqOPjcQMrmCLCFMDIoJat2MlDHVu9wI8mTCETJ0gwoCwhQ3RRiFqNa6w21W++/6YMQIeuTAw
nZhS0kAb3NyKEHbkIhgjYs6zqEBAlLwXtW9uIjJWMYMGiFkg4xBzNYfnCjaMYOpZf6kAMAxg
gWZRipgrlNnMRZQzo4P0RAemTgGRm0jdayOBbDwIhymszpUCtWZKRpyhtEUpZrcLbv5ySqHg
tiA2NZze2dTJ2Cbs9m4uHpGQCBsHONJjIUymVhIgpskMgxhtM88JqlLg55tnXPv8r93RUble
xKFKaQDKRZEXQObovmtDYw4C0u0tIKG09UoR46iWghppmQQRHB1x/cpnPz3H//ArALW6HZGh
DQ4BXn33Wd1vA0a3/OIAlQRcybB++tE3fvW9Zz2frGHPHGac1UKtfNDvLvMskJu2aH2G8vkw
iDEjkCmIcFIuVgvnE/PMyxc492BpLycoQXhO4HkGh3Bt15WkZPVyTbR7c/o6nwZ/3DxODOTG
idqYN8BqQOubSyu6HE0VrUUg7bZRtCXa9TJGGu9IMEKLwDxHxsWihvdktodcRT3KdPAnRdk7
FsH2Oq/Ptb0Y6ciUNBYkvZAat7cwESpr7ggtC3Seu0EIr+F2j6p7ShqNo6UrUmvHZF7qMwfx
jxQMg/jzt2nKNGSe3QyIAPW8h/J+k+M+J+cnvghwFVGDOmVUR0RKsYCJloINTQ4LP3y9qwS3
saAzYa2gvcoteN8gf2VCArmL0kgID1ndBvXQZQRef+/5cvXyV/dVC0YVUU+bkoZ7uQbg6odf
xRvvv/Cmg7OtLyBKB1vzUku30J6J86BrVy5/ceM/DSglw977DXt/goOPzz88tGaFfdptr9EC
HRmmU2PzNnDjLkrYGoZYC8w2zfMpPPXKQ5SiVXTqKkC1riiPdg7i9xsnTCc+vnsKlJvXLgWN
KkuxUKGewdyjtFE51zQq5lXxXFlhp3vBgGi1HhStZpf9dm9RtoVynVqNjlvBiTVFxL0YAETN
hmFSNhN7pguKQEOjUaQW9V9gSlPE6DR0YkP3EIJRRUstEKueb3Xgx6+PKYOWOfS2q2N/rx4k
J+oEwPl7iICoFtQGwtq8XWoBb53t4swbsmlpzdfi2A1Lp903v3ZXAzrwsjg0DxqdLr3/Yrly
+ctP7rsQxZxULDJeewuuXP4yLn3wkuuZTzBLX9fFaPvfhwJYqzBJWwFjaUq1GBC9XW5U9L7e
x2SeePrcMB6WpchEXUuqq1pV7HrQym7VXtHqRSxqtuspcsoIuLXUmc/b0GvxwKPDQW6a/cLS
4cxdE7JEhwSl6cPyvdb9XYGObhOiWDjd9GBjgFCr5RtPl7LbFLR55v49sIlKer++d0cWLJ9j
0TJ6W8l1qG3QpLaHun3n9SN6vd+kyi0l8S+iVMogTm45w4mYpvx0WqVYTMduec2N6tIN9Ryv
XdHS9dRVL3q3dEcWjIP49depfVTm5sOwWlAOxG/fznut+KIBS1PufyJe7DUi//b7G+6FBTKA
zTMtAAAAAElFTkSuQmCC" ]

# 16x16
set gLogo16 [ image create photo -format "png -alpha 1" -data "\
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QATQBuAINv2BM3AAAA
CXBIWXMAAA06AAANOgEDIh6FAAAAB3RJTUUH4gEICCEuMdZY4gAAAB1pVFh0Q29tbWVudAAA
AAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAACFklEQVQ4y5WTv2pWQRDFf7P33uhnJLHQWETQ
xsLOF9DKQvQZxNLKxkJsBEEQWx9BfIqgbdAnsBAVC1NEE4km5H53d+eMxb1+8U/lwrDLDJyd
c86MPbl/Mc5fmOEFpMBduAeSkGIKiAAwDANrQMHeXqU9d26JG9dXyBlSSiVnMWRRspMHUbLI
JShV1ApeDblhZrx929PmQfS92Nj4zu431WRmEoQcVxDSooOIgDDMEqlJ5AFad+FS2f5S6oOn
707wn6etVcyHCiEDuPv0SqyudYRGzvhUEiiMcEAGMobeaSUx7x2vAcDqWselqyuUIVCBOoAy
1Ck8Bxog3NjdGmilIGeh8Us8w+Gek+eBZ4hieAavoDLmvABuqELrDvNeyEeA7ff59sfXhzl1
DZagsURKBg3RdalLbVpOZpHM6I4ZbQjyEGhkwMnV9tbp9eMHIYMAAiIMglnpY/PZo5eP/xAx
gFJitAhYObt07fzlGcNB4GWk5HlsfedTWQb+AEgSlDopDqPaFaKOt2pM96T+3zYGRh5iUTzY
0asPb/oDfAKNycpIMy9s/gOAoOSjRN7nxf6W56ZLADSNYQ2kFNG01t17ePMOk4hmRhuRKH5E
4dR69/zMlY7cCxVDk21eWbyVQQ4haMEItwVA0xjNktHUcfqiAatgMe2Dg/QbhcPD4PPngvsI
MP8BX99VNI1suI1j7TYulf9a7dHin9Sqfa+Hb/FnAAAAAElFTkSuQmCC" ]

set gCancel [ image create photo -format "png -alpha 1" -data "\
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA
CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QEEDi8BzEv5kQAAAB1pVFh0Q29tbWVudAAA
AAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAADYElEQVQ4y12SX2gcVRTGvzt3dnamu5ukSYxk
IX+2ZZtURJM1ta1FKSJUsYjSIGqaliwzk6AvgigI/kEhPiktCEJ3N00eLFRRH3yxDxX7UJFC
DPFP0WLEKs2m2bQm2WR3Zu/cc68PaRD6Pf/O93HOd4C7dML1M6OenwCAvOsBAFx/HMfyeXbC
9ffczRsA8LK/BR5zx4/vMtXvzUxfODlykp8tFZH3fJQKZ9DKzTeypr466nnFO0EAALbt9JLr
P/tEnL4ccwQWJDdO12OzK4o9+XmpcHvU8997Jk7vDPNNfQkJdi4wJ0uFwlsAwAHgBXd85IhN
51+0QqMRNlhChDiYjKV/jIwD/bmh3ESCXn+4VmHXl26yjkYN3S1Nj+kHhrp+mpv7mgPA0EO5
j4cdmdkpGgiFgCAJI6hhMBHrSXPsH9issBvLKyBSaIQNZNt3YlaaTbsG931qAEBNGU/P1GOX
1+I2OAMiEaEeNGBVFnFf5S+UV25BaQVBEpndGXwS2rcrih09VzqzysY8DxoMgWI7dhj6ygeJ
8H66tYwgDCCJEEkJkgpKSezJZvGRbP7354jt/2qqsDDqev8fcVtvTvjlV+Ry5/pKBSQJERFk
FKEplcKFzn583zAGvzhbnB9zXUyXSls15r2tSo57/uS+GHWqeg1RJCGkRBRFiEiiWq3iKR6i
w2SF4bzbOl0qIe+6YGOej+liAaOe//5EUr2dXS1jcbmCaHtYErQiCCLEOUffwUOY3LBmA7F+
YGrmM2IAMOL6rx116MPH18u4vlQGtAYAtKe7oGIxLP9xDavVKogIjmWh69BhnA7ilzY1jhh3
Vr/HASAiASEkIkno7+vD+UR6sRjr+KF3MIeWZBJhQ0ASQTEGvfVEjOfzeZZOJa/Mhbr/wfbm
vfcqgZ6ebpxSrcGiab9LBv/uYmg+8lxXa4o2qtj76GGcqlvX7LjzvKZojQ8MDDAJ2Mlk4url
muplqebd3yinfgNmKQatSco2IRq/zMPOdPb0Ns/U+Z+wnVcV0d9SUo3ncjnDsqw2x7bTTtxa
+DWQrMaMby1uLAHY1FrXtdZqU0S/zQsWxQw25dj2Oue8JoTYMAGAMSa01utE1JIw+UUAddM0
/zEMowKApJRtQRB0cyFuaphrSqlVxlidMab/Aw2lo/jH7vQWAAAAAElFTkSuQmCC" ]

set gOkey [ image create photo -format "png -alpha 1" -data "\
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA
CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QEFCTEXUS0C/wAAAB1pVFh0Q29tbWVudAAA
AAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAC/0lEQVQ4y72TX0hTcRTHz+/eXeeum1M3tWlz
udTZ1JloEP2T6N+oHkqtHlKnTIUehBgEhQ/Rn5eop0ERaTpfTIRCrIdMKguhIP+UqE2zPxvi
n7ld23a9u7u7f3qQiFEP9dJ5O4fD5wvn+z0A/7OabfbfZuhfAPZqmxZLwi3it8hrlKvgMbUc
8L9SbmxCFjAq5ZXpb5NaTQ7eQxva77X3lybnbwCabXYY/zABDWXVquJMU2xyxR0HKBFzlYqa
zaPkxUITSicAL1Btt0QMpcLIWh9qbrBDu+s+2I/Wmslm4xP28eIkMxeqJvNUAiCEuDEqSdWU
Nwb1WQVBPgwCx4NKlyLJB8MB+qbbjI+/nwD78Vqz/ET2NF+lTU3YqSkkPNFk//DCkGwlRpKn
c8a4eq3p08JnCAZDICIJNNM40Ndmrne9fPBMZiuqSiIbjQPhQ4nwZeYjIAyg2FFwXrPKlhP5
yZl0U1rBxMwoxLgYpGSkSSVLOSjS+bWma7j30dncY4CXyI084mAfUZFqdi/PQ8DvB/fiPBhb
dhj8RTHN0xdDEAwFQUGSUClZEHNrtrWjz9Xd0tICrue9GzbW7q9GSkvmDWjVX3AN90KMi4Eo
CiBJACBJkF9SCIexCinW5a265+ro/3lcq9X6Kwe7t+xARXssD2WX8052vuoFlokAiCJsys6C
qoyDYvSK++rexiN3owyrjkQiIYqi1mia5pDD4cDNZrNaqVSmyjA8YWTszWWuKePMncEu0GVn
Sac0BxA5ELpUXGZ5p0hU6GUyGRkOh5d8Pt+Ux+Px4uXl5YRKpdITBFEsiIIpVZky7+ubzdl9
zqozczkIdy33GLZtncMxzKBQKBCO46uiKPpYlqUCgUBIxrIszzCMnyTJeUEQtOvr61p9vqHz
++2VXZiEBdWF+tF1mqYQwFQ0GvVTFOWTJCnMMAzvdDqluF9wOByJOp0uBQAyEEJqhJAgiuIa
Qsjn9XqDTqeT/2PWbTZbXN/W1ob19PQQ3d3dRF1dXZyI1WqN2/0BN4xArVmEp+sAAAAASUVO
RK5CYII=" ]

set gBlank [ image create photo -format "png -alpha 1" -data "\
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA
CXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QESDxMnGQVn5wAAAB1pVFh0Q29tbWVudAAA
AAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAEklEQVQ4y2NgGAWjYBSMAggAAAQQAAGFP6py
AAAAAElFTkSuQmCC" ]


################################################################################
# FILE: tcltk/4200_procs.tcl

################################################################################
# Infos ausgeben
proc tkputs {sString} {
	tk_messageBox -parent . -message "${sString}" -title "Info" -icon info -type ok
}


################################################################################
# Syrtaxvervollstaendigung ausfuehren
proc syntax_docomplete {wWidget iLine iCol iOffsetBack sSuggestion} {
	set iWordStart [ expr $iCol - $iOffsetBack - 1 ]
	if { $iWordStart < 0 } {
		set iWordStart 0
	}
	$wWidget replace "${iLine}.${iWordStart}" "${iLine}.${iCol}" "${sSuggestion}"
	if { [ winfo exists .complete ] } {
		destroy .complete
	}
	focus $wWidget
}


################################################################################
# merkt sich, welche Zeilen im Editor markiert sind
#  Index 0 der Liste: Widget (hltext)
#  Index 1-n .......: markierte Zeilen
set lLinemapRegistry [ list ]
proc registerlinemap {wWidget sType iLine} {
	global lLinemapRegistry
	set iRegistryIndex [ lsearch -index 0 $lLinemapRegistry $wWidget ]

	if { $iRegistryIndex < 0 } {
		# neu eintragen - sType kann eigentlich nur "marked" sein
		if { $sType == "marked" } {
			lappend lLinemapRegistry [ list $wWidget $iLine ]
		}
	} else {

		# alle Values
		set lIndex [ lindex $lLinemapRegistry $iRegistryIndex ]

		if { $sType == "marked" } {

			# hinzufuegen
			lappend lIndex $iLine
			set lNew [ list ]
			foreach lTmp $lLinemapRegistry {
				if { [ lindex $lTmp 0 ] == $wWidget } {
					lappend lNew $lIndex
				} else {
					lappend lNew $lTmp
				}
			}
			set lLinemapRegistry $lNew

		} else {

			# entfernen
			set lTmp [ list ]
			foreach sTmp $lIndex {
				if { $sTmp != $iLine } {
					lappend lTmp $sTmp
				}
			}
			set lIndex $lTmp
			set lNew [ list ]
			foreach lTmp $lLinemapRegistry {
				if { [ lindex $lTmp 0 ] == $wWidget } {
					lappend lNew $lIndex
				} else {
					lappend lNew $lTmp
				}
			}
			set lLinemapRegistry $lNew

		}

	}

}



################################################################################
# Dateigroessen formatieren
proc format_filesize {iSize} {
	set iLength [ string length $iSize ]
	if { $iSize < 1000 } {
		format "%s B" $iSize
	} else {
		set iUnit [ expr { ( $iLength - 1 ) / 3 } ]
		format "%.1f %s" [ expr { $iSize / pow(1000,$iUnit) } ] [ lindex [ list B KB MB GB TB PB EB ZB YB ] $iUnit ]
	}
}



################################################################################
# Hervorhebung von Suchergebnissen aus aktuellem Editorwidget entfernen
# Achtung: teurer als direkt beim Suchen, daher nur fuer Einsatz aus bestimmten Anlaessen heraus
proc cleanhighlightsearch {} {
	global lOpenFiles sFileActive
	set iFileIdentifier [ lindex [ lindex $lOpenFiles [ lsearch -exact -index 0 $lOpenFiles $sFileActive ] ] 2 ]
	.editor.f${iFileIdentifier}.text.t tag remove searched 1.0 end
}



################################################################################
# Programm beenden - Groesse, Position und Session merken
proc exiteditor {} {
	global sProgNameShort sSession lSession wSessionFiles sColorForegroundActivated sPidFile bPidFileCreated lReplaceModes lCaseSensitive iReplaceConfirm lSearchHistory lReplaceHistory
	# falls es geanderte Dateien gibt...
	set bFilesAreChanged 0
	foreach wWidget [ winfo children $wSessionFiles ] {
		if { [ string range [ lindex [ split $wWidget "." ] end ] 0 6 ] == "fselect" } {
			if { [ $wWidget cget -foreground ] == $sColorForegroundActivated } {
				set bFilesAreChanged 1
			}
		}
	}
	set bExit 1
	if { $bFilesAreChanged } {
		if { [ tk_messageBox -parent . -title [::msgcat::mc {Please confirm}] -message [::msgcat::mc {There are unsaved files!}] -detail [::msgcat::mc {Do you really want to quit?}] -icon question -type yesno ] != "yes" } {
			set bExit 0
		}
	}
	# beenden
	if { $bExit } {
		if { $bPidFileCreated && [ file exists $sPidFile ] } {
			file delete $sPidFile
		}

		# Index: Gross-Kleinschreibung
		set iCaseSensitiveIndex [ lsearch -exact $lCaseSensitive [ .sidebottom.search.case get ] ]
		# Index: Erstezen-Modus
		set iReplaceModeIndex [ lsearch -exact $lReplaceModes [ .sidebottom.search.mode get ] ]

		set sFile [ file join "~" ".config" $sProgNameShort "startup.tcl" ]
		set oFile [ open $sFile w ]
		puts $oFile "# auto generated file - modifying this doesn't make any sense..."
		puts $oFile "set sWinGeometry [ wm geometry . ]"
		puts $oFile "set iPaneLeftWidth [ winfo width .sidetop ]"
		puts $oFile "set iPaneLeftSep [ winfo height .sidetop ]"
		puts $oFile "set sSession \{${sSession}\}"
		puts $oFile "set iCaseSensitiveIndex ${iCaseSensitiveIndex}"
		puts $oFile "set iReplaceModeIndex ${iReplaceModeIndex}"
		puts $oFile "set iReplaceConfirm ${iReplaceConfirm}"
		puts $oFile "set lSearchHistory \{${lSearchHistory}\}"
		puts $oFile "set lReplaceHistory \{${lReplaceHistory}\}"
		close $oFile
		closesession
		exit
	}
}


################################################################################
# FILE: tcltk/4201_treebrowser.tcl

################################################################################
# Treebrowser Funktionen
################################################################################


################################################################################
# Scrollbalken ggf. verbergen
proc showhidetreescroll {} {
	if { [ .sidebottom.filetree.scroll state ] == "disabled" } {
		grid forget .sidebottom.filetree.scroll
	} else {
		grid .sidebottom.filetree.scroll -row 0 -column 1 -sticky ns
	}
}


################################################################################
# Treeview befuellen
proc updatefiletree {wWidget sItem} {
	if { [ $wWidget set $sItem type ] != "directory" || [ $wWidget set $sItem type ] == "processedDirectory" } {
		return
	}
	$wWidget delete [ $wWidget children $sItem ]
	set lFiles [ list ]
	foreach sFile [ lsort -dictionary [ glob -nocomplain -directory [ $wWidget set $sItem path ] * ] ] {
		if { [ file isdirectory $sFile ] } {
			set sId [ $wWidget insert $sItem end -text [ file tail $sFile ] -values [ list $sFile "directory" ] ]
			$wWidget insert $sId 0 -text dummy
			$wWidget item $sId -text [ file tail $sFile ]
		} else {
			lappend lFiles $sFile
		}
	}
	foreach sFile $lFiles {
		$wWidget insert $sItem end -text [ file tail $sFile ] -values [ list $sFile "file" ]
	}
	$wWidget set $sItem type processedDirectory
	update
	showhidetreescroll
}


################################################################################
# Pfad zur aktuellen Datei aufklappen (sofern im Basisvereichnis auch vorhanden)
proc updatefiletree_open {sFile} {

	set bSelected 0

	# aktuellen Pfad auslesen
	set sTop [ .sidebottom.filetree.tree children {} ]
	if { $sTop != "" } {
		set lPathTop [ file split [ .sidebottom.filetree.tree item $sTop -text ] ]

		# aufzuklappender Pfad
		set lPathNeeded [ lrange [ file split [  file nativename $sFile ] ] 0 end-1 ]

		# Laenge der beiden Listen
		set iPathTop    [ expr [ llength $lPathTop ] -1 ]
		set iPathNeeded [ expr [ llength $lPathNeeded ] -1 ]

		set bBaseMatches 1
		for { set i 0 } { $i <= $iPathNeeded } { incr i } {
			set sPath [ lindex $lPathNeeded $i ]
			if { $i <= $iPathTop } {
				if { [ lindex $lPathTop $i ] != $sPath } {
					set bBaseMatches 0
				}
			} elseif { $bBaseMatches } {
				# ab hier: jeder aufzuklappende Pfadeintrag ab dem aktuell gezeigten Basisverzeichnis
				foreach sItem [ .sidebottom.filetree.tree children $sTop ] {
					set sName [ .sidebottom.filetree.tree item $sItem -text ]
					if { $sPath == $sName } {

						# Item anzeigen, aufklappen und als Basis fuer nachfolgendes Aufklappen setzen
						updatefiletree .sidebottom.filetree.tree $sItem
						.sidebottom.filetree.tree item $sItem -open 1
						set sTop $sItem

						# letzter Pfad-Eintrag: Datei markieren
						if { $i == $iPathNeeded } {
							foreach sEntry [ .sidebottom.filetree.tree children $sItem ] {
								if { [ .sidebottom.filetree.tree item $sEntry -text ] == [ file tail $sFile ] } {
									.sidebottom.filetree.tree selection set $sEntry
									.sidebottom.filetree.tree see $sEntry
									set bSelected 1
								}
							}
						}

					}
				}
			}
		}
	}
	if { ! $bSelected } {
		foreach sEntry [ .sidebottom.filetree.tree children $sTop ] {
			if { [ .sidebottom.filetree.tree item $sEntry -text ] == [ file tail $sFile ] } {
				.sidebottom.filetree.tree selection set $sEntry
				.sidebottom.filetree.tree see $sEntry
			}
		}
	}
}


################################################################################
# Sprung: Projektverzeichnis
proc updatefiletree_session {} {
	global lOpenFiles sSessionBaseDir
	if { $sSessionBaseDir == "dynamic" } {
		set lBasePath [ list ]
		set bFirst 1
		set iDepth 999999
		foreach lTmp $lOpenFiles {
			set lTmpPath [ lrange [ file split [ lindex $lTmp 0 ] ] 0 end-1 ]
			lappend lBasePath $lTmpPath
			if { [ llength $lTmpPath ] < $iDepth } {
				set iDepth [ llength $lTmpPath ]
			}
		}
		set lIdentPath [ list ]
		for { set i 0 } { $i < $iDepth } { incr i } {
			set sLast ""
			set bFirst 1
			set bMatch 1
			foreach lFile $lBasePath {
				if { $bFirst } {
					set sLast [ lindex $lFile $i ]
					set bFirst 0
				} elseif { [ lindex $lFile $i ] != $sLast } {
					set bMatch 0
				}
			}
			if { $bMatch } {
				lappend lIdentPath $sLast
			}
		}
		if { [ llength $lIdentPath ] == 0 } {
			set lTmp [ file split [ file nativename "~" ] ]
		}
		set sBaseDir [ file join {*}$lIdentPath ]
	} else {
		set sBaseDir $sSessionBaseDir
	}
	.sidebottom.filetree.tree delete [ .sidebottom.filetree.tree children {} ]
	updatefiletree .sidebottom.filetree.tree [ .sidebottom.filetree.tree insert {} end -text $sBaseDir -values [ list $sBaseDir "directory" ] -open 1 ]
}


################################################################################
# Sprung: Home
proc updatefiletree_home {} {
	set sBaseDir [ file nativename "~" ]
	.sidebottom.filetree.tree delete [ .sidebottom.filetree.tree children {} ]
	updatefiletree .sidebottom.filetree.tree [ .sidebottom.filetree.tree insert {} end -text $sBaseDir -values [ list $sBaseDir "directory" ] -open 1 ]
}


################################################################################
# Sprung: Root
proc updatefiletree_root {} {
	set sBaseDir [ lindex [  file split [ file nativename "~" ] ] 0 ]
	.sidebottom.filetree.tree delete [ .sidebottom.filetree.tree children {} ]
	updatefiletree .sidebottom.filetree.tree [ .sidebottom.filetree.tree insert {} end -text $sBaseDir -values [ list $sBaseDir "directory" ] -open 1 ]
}


################################################################################
# Sprung: Verzeichnis hoeher
proc updatefiletree_up {} {
	set sTop [ .sidebottom.filetree.tree children {} ]
	set lPath [ file split [ .sidebottom.filetree.tree item $sTop -text ] ]
	set iLastItem [ expr [ llength $lPath ] - 2 ]
	if { $iLastItem >= 0 } {
		set sBaseDir [ file join {*}[ lrange $lPath 0 $iLastItem ] ]
		.sidebottom.filetree.tree delete $sTop
		updatefiletree .sidebottom.filetree.tree [ .sidebottom.filetree.tree insert {} end -text $sBaseDir -values [ list $sBaseDir "directory" ] -open 1 ]
	}
}


################################################################################
# FILE: tcltk/4202_tooltips.tcl

################################################################################
# Tooltips
################################################################################


namespace eval balloon { set last 0 ; namespace export balloon }

proc ::balloon::balloon {args} {
	variable last
	variable tips
	set numArgs [ llength $args ]
	set w [ lindex $args 0 ]
	if { $numArgs == "1" } {
		if { [ info exists tips($w) ] } {
			return $tips($w);
		} else {
			return "";
		}
	}
	set text [ lindex $args 1 ]
	if { $text == "" } {
		if { [ set x [ lsearch [ bindtags $w ] "Balloon" ] ] >= 0 } { bindtags $w [ lreplace [ bindtags $w ] $x $x ] }
		unset -nocomplain tips($w)
		trace remove command $w delete ::balloon::autoclear
		return;
	}
	if { [ lsearch [ bindtags $w ] "Balloon" ] < 0 } { bindtags $w [ linsert [ bindtags $w ] 0 "Balloon" ] }
	if { [ lsearch [ trace info command $w ] { delete ::balloon::autoclear } ] < 0 } { trace add command $w delete ::balloon::autoclear }
	set tips($w) $text
}
proc ::balloon::show {w} {
	global bTooltips sColorBackgroundHighlighted sColorForeground sColorForegroundActivated iDistances
	if { $bTooltips } {
		variable tips
		if { ! [ info exists tips($w) ] } { return }
		if { [ eval winfo containing [ winfo pointerxy . ] ] != $w } { return }
		if { [ eval $w cget -state ] != "normal" && [ eval $w cget -state ] != "active" && [ winfo class $w ] != "TCombobox" } { return }
		set top "$w.balloon"
		catch { destroy $top }
		toplevel $top
		bind $top <Button-1> [ list destroy $top ]
		wm overrideredirect $top 1
		pack [ label $top.txt -text $tips($w) -background $sColorBackgroundHighlighted -foreground $sColorForeground -pady $iDistances -padx $iDistances -borderwidth 0 -highlightbackground $sColorForegroundActivated -highlightthickness 1 -font GuiFontSmall ]
		set wmx [ winfo rootx $w ]
		set wmy [ expr [ winfo rooty $w ]+[ winfo height $w ] ]
		# falls ueber den rechten Bildschirmtrand hinaus: Tooltip rechts anschlagen
		if { [ expr [ winfo reqwidth $top.txt ] + $wmx ] > [ winfo screenwidth . ] } {
			set wmx [ expr [ winfo screenwidth . ] - [ winfo reqwidth $top.txt ] ]
		}
		# falls Tooltip unter dem unteren Bildschirmrand: ueber dem Element anzeigen
		if { [ expr [ winfo reqheight $top.txt ] + $wmy ] > [ winfo screenheight . ] } {
			set wmy [ expr [ winfo rooty $w ] - [ winfo reqheight $top.txt ] ]
		}
		wm geometry $top [ winfo reqwidth $top.txt ]x[ winfo reqheight $top.txt ]+$wmx+$wmy
		raise $top
	}
}
proc ::balloon::delay {} {
	variable last
	set then $last
	set last [ clock seconds ]
	if { [ expr {$last - $then} ] < 3 } {
		return 50
	} else {
		return 1000
	}
}
proc ::balloon::autoclear {old new op} {
	variable tips
	unset -nocomplain tips([ namespace tail $old ]);
}
namespace import ::balloon::balloon
bind Balloon <Enter> { after [::balloon::delay] [ list ::balloon::show %W ] }
bind Balloon <Leave> { destroy %W.balloon }


################################################################################
# FILE: tcltk/4210_session.tcl

################################################################################
# Session schliesen
proc closesession {} {
	global sProgNameShort lOpenFiles sSession wSessionFiles sFileActive sSessionBaseDir

	# Filebuttons entfernen
	foreach wWidget [ grid slaves $wSessionFiles ] {
		destroy $wWidget
	}

	# Editorwidgets auslesen und entfernen
	set lSession [ list $sFileActive $sSessionBaseDir ]
	foreach lFile $lOpenFiles {
		set iFileIdentifier [ lindex $lFile 2 ]
		lappend lSession [ list [ lindex $lFile 0 ] [ lindex $lFile 1 ] [ .editor.f${iFileIdentifier}.text.t index insert ] ]
		destroy .editor.f${iFileIdentifier}
	}

	set sFile [ file join "~" ".config" $sProgNameShort "session" "${sSession}.tcl" ]
	set oFile [ open $sFile w ]
	puts $oFile $lSession
	close $oFile

	set lOpenFiles [ list ]
	set sFileActive ""
	set sSessionBaseDir "dynamic"

	update

}


################################################################################
# Session oeffnen
set bSessionLoadBlocker 0
proc loadsession {sNewSession bClosePrevious} {
	global bSessionLoadBlocker sSession sProgNameShort sFileActive sSessionBaseDir wSessionFiles wSessionSessions sColorBackground sColorBackgroundHighlighted sColorForegroundActivated
	if { $bSessionLoadBlocker == 1 } {
		return
	}
	set bSessionLoadBlocker 1
	update

	# falls es geanderte Dateien gibt...
	set bFilesAreChanged 0
	foreach wWidget [ winfo children $wSessionFiles ] {
		if { [ string range [ lindex [ split $wWidget "." ] end ] 0 6 ] == "fselect" } {
			if { [ $wWidget cget -foreground ] == $sColorForegroundActivated } {
				set bFilesAreChanged 1
			}
		}
	}
	set bGo 1
	if { $bFilesAreChanged } {
		if { [ tk_messageBox -parent . -title [::msgcat::mc {Please confirm}] -message [::msgcat::mc {There are unsaved files!}] -detail [::msgcat::mc {Do you really want to close the current session?}] -icon question -type yesno ] != "yes" } {
			set bGo 0
			.sidetop.sessionframe.tab_file invoke
		}
	}

	if { $bGo && [ file exists [ file join "~" ".config" $sProgNameShort "session" "${sNewSession}.tcl" ] ] } {
		if { $bClosePrevious } {
			closesession
		}
		set sSession $sNewSession
		set oFile [ open [ file join "~" ".config" $sProgNameShort "session" "${sSession}.tcl" ] r ]
		set lSession [ read $oFile ]
		close $oFile

		set sAktivateFile ""
		set lAktivateFile [ list ]
		set lFirsFile [ list ]
		set iCount 0
		foreach lTmp $lSession {
			if { [ llength $lTmp ] == 3 } {
				set sFile      [ lindex $lTmp 0 ]
				set sSyntax    [ lindex $lTmp 1 ]
				set sCursorPos [ lindex $lTmp 2 ]
				if { [ file exists $sFile ] } {
					set iIdentifier [ openfile [ list $sFile $sSyntax $sCursorPos ] 0 ]
					if { $sFile == $sAktivateFile } {
						set lAktivateFile [ list $sFile $sSyntax $iIdentifier ]
					}
					if { [ llength $lFirsFile ] == 0 } {
						set lFirsFile [ list $sFile $sSyntax $iIdentifier ]
					}
				}
			} elseif { $iCount == 0 } {
				set sAktivateFile $lTmp
			} elseif { $iCount == 1 } {
				# hier koennte ich ein absolutes Baisverzeichnis auslesen
				set sSessionBaseDir $lTmp
			}
			incr iCount
		}
		if { [ llength $lAktivateFile ] > 2 } {
			switcheditorto $lAktivateFile
		} elseif { [ llength $lFirsFile ] > 0 } {
			# okay, die zuletzt geoeffnete Datei gibts nimmer - alternativ verschen: erste der Liste
			switcheditorto $lFirsFile
		}

		# in der Liste markieren
		set iSessionIdentifier -1
		foreach wWidget [ grid slaves $wSessionSessions ] {
			if { [ string trim [ $wWidget cget -text ] ] == $sNewSession } {
				set iSessionIdentifier [ string range [ lindex [ split $wWidget "." ] end ] 7 end ]
			} else {
				$wWidget configure -background $sColorBackground
			}
		}
		if { $iSessionIdentifier > -1 } {
			${wSessionSessions}.fclose${iSessionIdentifier}  configure -background $sColorBackgroundHighlighted
			${wSessionSessions}.fselect${iSessionIdentifier} configure -background $sColorBackgroundHighlighted
		}

		# Verzeichnisbaum
		updatefiletree_session
		updatefiletree_open $sAktivateFile

		# Tab der Dateien oeffnen
		.sidetop.sessionframe.tab_file invoke
	}
	set bSessionLoadBlocker 0
	update
}


################################################################################
# Session loeschen
proc deletesession {sName wWidget1 wWidget2} {
	global sSession sProgNameShort
	if { $sName == $sSession } {
		tk_messageBox -parent . -title [::msgcat::mc {Ups!}] -message [::msgcat::mc {That session is currently used!}] -detail [::msgcat::mc {To delete that session you've got to open another one first.}] -icon warning -type ok
	} else {
		if { [ tk_messageBox -parent . -title [::msgcat::mc {Please confirm}] -message "[::msgcat::mc {Session}]: ${sName}" -detail [::msgcat::mc {Do you really want to delete that session?}] -icon question -type yesno ] == "yes" } {
			if { [ winfo exists $wWidget1 ] } {
				grid forget $wWidget1
				destroy $wWidget1
			}
			if { [ winfo exists $wWidget2 ] } {
				grid forget $wWidget2
				destroy $wWidget2
			}
			if { [ file exists [ file join "~" ".config" $sProgNameShort "session" "${sName}.tcl" ] ] } {
				file delete [ file join "~" ".config" $sProgNameShort "session" "${sName}.tcl" ]
			}
			update
			::sframe::resize .sidetop.session
		}
	}
}


################################################################################
# FILE: tcltk/4211_session_menu.tcl

################################################################################
# Session-Dropdown
################################################################################

# Sessionname validieren
proc is_sessionname_valid {sName bRename} {
	global sProgNameShort
	set sMessage [::msgcat::mc {Session name invalid!}]
	if { $bRename } {
		set sMessage [::msgcat::mc {Renaming failed!}]
	}
	# Syntax: 0-9, a-z, A-Z, -_.+
	set bReturn [ regexp {^[A-Za-z0-9._+-]+$} $sName ]
	if { ! $bReturn } {
		tk_messageBox -parent . -title [::msgcat::mc {Ups!}] -message $sMessage -detail [::msgcat::mc {The session name can only contain the following chars: 0-9, A-Z, a-z, "-", "+", "_" and ".".}] -icon error -type ok
	} else {
		# Datei schon vorhanden?
		foreach sSessionFile [ glob -nocomplain -directory [ file join "~" ".config" $sProgNameShort "session" ] *.tcl ] {
			if { [ file rootname [ file tail $sSessionFile ] ] == $sName } {
				set bReturn 0
				tk_messageBox -parent . -title [::msgcat::mc {Ups!}] -message $sMessage -detail [::msgcat::mc {The chosen session name has already been assigned.}] -icon error -type ok
			}
		}
	}
	return $bReturn
}


# neue Session anlegen (Variable "iCountSessionIdentifier" wird auch im Hauptfenster verwendet)
set iCountSessionIdentifier 0
proc newsession {} {
	global sProgNameShort wSessionFiles wSessionSessions sColorForeground sColorForegroundActivated iCountSessionIdentifier sColorBackgroundSelected
	if { [ winfo exists .sessionmenu ] } {
		set sNewSessionName [ .sessionmenu.frame.newname get ]
		destroy .sessionmenu
		# gibts auch nix noch zu speichern?
		set bFilesAreChanged 0
		foreach wWidget [ winfo children $wSessionFiles ] {
			if { [ string range [ lindex [ split $wWidget "." ] end ] 0 6 ] == "fselect" } {
				if { [ $wWidget cget -foreground ] == $sColorForegroundActivated } {
					set bFilesAreChanged 1
				}
			}
		}
		set bGo 1
		if { $bFilesAreChanged } {
			if { [ tk_messageBox -parent . -title [::msgcat::mc {Please confirm}] -message [::msgcat::mc {There are unsaved files!}] -detail [::msgcat::mc {Do you really want to quit?}] -icon question -type yesno ] != "yes" } {
				set bGo 0
			}
		}
		if { $bGo && $sNewSessionName != "" } {
			if { [ is_sessionname_valid $sNewSessionName 0 ] } {
				# Datei anlegen
				set sFile [ file join "~" ".config" $sProgNameShort "session" "${sNewSessionName}.tcl" ]
				set oFile [ open $sFile w ]
				puts $oFile ""
				close $oFile
				# Session-Liste ergaenzen
				incr iCountSessionIdentifier
				button ${wSessionSessions}.fclose${iCountSessionIdentifier}  -borderwidth 0 -highlightthickness 0 -padx 0 -pady 0 -foreground $sColorForegroundActivated -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -font GuiFontHead -text " \u2620 "             -command "deletesession ${sNewSessionName} ${wSessionSessions}.fclose${iCountSessionIdentifier} ${wSessionSessions}.fselect${iCountSessionIdentifier}"
				button ${wSessionSessions}.fselect${iCountSessionIdentifier} -borderwidth 0 -highlightthickness 0 -padx 0 -pady 0 -foreground $sColorForeground          -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground                   -text " ${sNewSessionName} " -command "loadsession ${sNewSessionName} 1" -anchor w
				grid   ${wSessionSessions}.fclose${iCountSessionIdentifier}  -row $iCountSessionIdentifier -column 0 -sticky ns
				grid   ${wSessionSessions}.fselect${iCountSessionIdentifier} -row $iCountSessionIdentifier -column 1 -sticky nesw
				bind   ${wSessionSessions}.fclose${iCountSessionIdentifier}  <Button-4> { .sidetop.session.canvas yview scroll -1 units }
				bind   ${wSessionSessions}.fclose${iCountSessionIdentifier}  <Button-5> { .sidetop.session.canvas yview scroll  1 units }
				bind   ${wSessionSessions}.fselect${iCountSessionIdentifier} <Button-4> { .sidetop.session.canvas yview scroll -1 units }
				bind   ${wSessionSessions}.fselect${iCountSessionIdentifier} <Button-5> { .sidetop.session.canvas yview scroll  1 units }
				# neue Session oeffnen
				${wSessionSessions}.fselect${iCountSessionIdentifier} invoke
				# Session-Liste ans Ende scrollen
				update
				::sframe::resize .sidetop.session
				.sidetop.session.canvas yview moveto 1
			}
		}
	}
}


# Basisverzeichnis einer Session setzen
proc sessionsetbasedir {} {
	global sSessionBaseDir
	if { [ winfo exists .sessionmenu ] } {
		destroy .sessionmenu
	}
	set sDir [ tk_chooseDirectory -initialdir [ file nativename "~" ] -parent . -title [::msgcat::mc {Choose a directory}] ]
	if { $sDir != "" } {
		if { [ file isdirectory $sDir ] && [ file exists $sDir] } {
			set sSessionBaseDir [ file nativename $sDir ]
		}
	}
}


# Dropdown selbst
proc session_dropdown {wEditor} {
	global sColorBackgroundHighlighted sColorForeground wSessionSessions sColorBackgroundSelected sColorForegroundActivated sSessionBaseDir

	if { [ winfo exists .sessionmenu ] } {
		raise .sessionmenu
	} else {

		# aktellen Namen ermitteln
		set sGetSessionName [ $wEditor cget -text ]

		# Fenster initialisieren
		toplevel            .sessionmenu
		wm overrideredirect .sessionmenu true
		wm geometry         .sessionmenu +[ winfo rootx $wEditor ]+[ winfo rooty $wEditor ]
		frame .sessionmenu.frame -borderwidth 0 -background $sColorForeground -padx 1 -pady 1
		pack .sessionmenu.frame

		# zwei Dummies um die Werte im Command lesen zu koennen (Variablen nicht verfuegbar)
		label .sessionmenu.frame.session -text $sGetSessionName
		label .sessionmenu.frame.weditor -text $wEditor

		# Alle Dateien speichern
		button .sessionmenu.frame.saveall -text "  [::msgcat::mc {Save all}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command {
			file_save_all
			destroy .sessionmenu
		}

		# Umbennenen
		entry .sessionmenu.frame.name -width 15
		.sessionmenu.frame.name insert end $sGetSessionName
		button .sessionmenu.frame.namego -text "  [::msgcat::mc {Rename Session}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 2 -padx 0 -borderwidth 0 -highlightthickness 0 -command {
			set sNewName [ .sessionmenu.frame.name get ]
			set sOldName [ .sessionmenu.frame.session cget -text ]
			set swEditor [ .sessionmenu.frame.weditor cget -text ]
			if { $sOldName != $sNewName } {
				if { [ is_sessionname_valid $sNewName 1 ] } {
					# Editorfenster
					$swEditor configure -text $sNewName
					# Sessionliste
					set iIdentifier ""
					foreach wChild [ winfo children $wSessionSessions ] {
						if { [ string trim [ $wChild cget -text ] ] == $sOldName } {
							$wChild configure -text " ${sNewName} " -command "loadsession ${sNewName} 1"
							# Pfad zum Delete-Button ermitteln
							set iWidget [ string range [ lindex [ split $wChild "." ] end ] 7 end ]
							${wSessionSessions}.fclose${iWidget} configure -command "deletesession ${sNewName} ${wSessionSessions}.fclose${iWidget} ${wSessionSessions}.fselect${iWidget}"
						}
					}
					# Sessiondatei umbenennen
					global sSession sProgNameShort
					if { [ file exists [ file join "~" ".config" $sProgNameShort "session" "${sOldName}.tcl" ] ] } {
						file rename [ file join "~" ".config" $sProgNameShort "session" "${sOldName}.tcl" ] [ file join "~" ".config" $sProgNameShort "session" "${sNewName}.tcl" ]
					}
					# globale Sessionvariable anpassen
					set sSession $sNewName
				}
			}
			destroy .sessionmenu
		}

		# Basisverzeichnis
		frame .sessionmenu.frame.basdir -background $sColorBackgroundHighlighted
		set sTitel [::msgcat::mc {Dynamic Base Directory}]
		if { $sSessionBaseDir != "dynamic" } {
			set sTitel $sSessionBaseDir
			button .sessionmenu.frame.basdir.drop -font GuiFontHead -text " \u2717 " -background $sColorBackgroundHighlighted -foreground $sColorForegroundActivated -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 2 -padx 0 -borderwidth 0 -highlightthickness 0 -command {
				if { [ winfo exists .sessionmenu ] } {
					destroy .sessionmenu
				}
				set sSessionBaseDir "dynamic"
			}
			pack .sessionmenu.frame.basdir.drop -side left
		}
		button .sessionmenu.frame.basdir.new -text "  ${sTitel}  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 2 -padx 0 -borderwidth 0 -highlightthickness 0 -command { sessionsetbasedir }
		pack .sessionmenu.frame.basdir.new -side left -fill x -expand true

		# neue Session anlegen
		entry  .sessionmenu.frame.newname -width 15
		button .sessionmenu.frame.newgo -text "  [::msgcat::mc {Create Session}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 2 -padx 0 -borderwidth 0 -highlightthickness 0 -command { newsession }

		# Grid der Elemente
		grid .sessionmenu.frame.saveall -row 0 -column 0 -sticky we              -columnspan 2
		grid .sessionmenu.frame.name    -row 1 -column 0 -sticky wns -pady 1
		grid .sessionmenu.frame.namego  -row 1 -column 1 -sticky we  -pady 1
		grid .sessionmenu.frame.basdir  -row 2 -column 0 -sticky we              -columnspan 2
		grid .sessionmenu.frame.newname -row 3 -column 0 -sticky wns -pady {1 0}
		grid .sessionmenu.frame.newgo   -row 3 -column 1 -sticky we  -pady {1 0}

		# Fenster zeigen
		update
		raise .sessionmenu
		focus .sessionmenu.frame.name

		# Enter in Entry-Feldern fuehrt aus
		bind .sessionmenu.frame.name <Return> {
			.sessionmenu.frame.namego invoke
		}
		bind .sessionmenu.frame.newname <Return> {
			.sessionmenu.frame.newgo invoke
		}

		# Fenster beim Verlassen oder mit Escape schliessen
		bind .sessionmenu.frame <Leave> {
			if { [ winfo exists .sessionmenu ] } {
				destroy .sessionmenu
			}
		}
		bind .sessionmenu <Escape> {
			if { [ winfo exists .sessionmenu ] } {
				destroy .sessionmenu
			}
		}

	}

}


################################################################################
# FILE: tcltk/4220_file.tcl

################################################################################
# andere Datei anzeigen
#  0: Datei
#  1: Syntax (wird hier aber nicht benoetigt)
#  2: Identifier
proc switcheditorto {lFileInfos} {
	global sFileActive wSessionFiles sColorBackground sColorBackgroundHighlighted sColorForeground
	# okay, eigentlich egal...
	set sFileActive [ lindex $lFileInfos 0 ]
	# alten Editor schliessen
	foreach wWidget [ pack slaves .editor ] {
		pack forget $wWidget
	}
	# ggf. Overlays schliessen
	closeoverlays
	# ggf. Backup History schliessen
	if { [ winfo exists .backup ] } {
		destroy .backup
	}
	# neuen oeffnen
	set iFileIdentifier [ lindex $lFileInfos 2 ]
	pack .editor.f${iFileIdentifier} -fill both -expand true
	focus .editor.f${iFileIdentifier}.text.t
	# andere Dateien der Liste nicht mehr aktiv
	foreach wWidget [ grid slaves $wSessionFiles ] {
		$wWidget configure -background $sColorBackground
	}
	${wSessionFiles}.fclose${iFileIdentifier}  configure -background $sColorBackgroundHighlighted
	${wSessionFiles}.fselect${iFileIdentifier} configure -background $sColorBackgroundHighlighted
	updatefiletree_open $sFileActive
	update
	showhidetreescroll
}


################################################################################
# Datei schliessen
#  0: Datei
#  1: Syntax (wird hier aber nicht benoetigt)
#  2: Identifier
proc closefile {lFileInfos} {
	global lOpenFiles sFileActive wSessionFiles sColorForegroundActivated

	# Uebergabe auslesen
	set sFile [ lindex $lFileInfos 0 ]
	set iFileIdentifier [ lindex $lFileInfos 2 ]

	# gibts auch nix noch zu speichern?
	set bFilesAreChanged 0
	if { [ ${wSessionFiles}.fselect${iFileIdentifier} cget -foreground ] == $sColorForegroundActivated } {
		set bFilesAreChanged 1
	}
	set bGo 1
	if { $bFilesAreChanged } {
		if { [ tk_messageBox -parent . -title [::msgcat::mc {Please confirm}] -message [::msgcat::mc {File has been modified!}] -detail [::msgcat::mc {Do you really want to close this file without saving it?}] -icon question -type yesno ] != "yes" } {
			set bGo 0
		}
	}
	if { $bGo } {

		# alten Editor schliessen
		foreach wWidget [ pack slaves .editor.f${iFileIdentifier} ] {
			destroy $wWidget
		}
		destroy .editor.f${iFileIdentifier}

		# ggf. Overlays schliessen
		closeoverlays

		# ggf. Backup History schliessen
		if { [ winfo exists .backup ] } {
			destroy .backup
		}

		# aus Dateiliste entfernen
		destroy ${wSessionFiles}.fclose${iFileIdentifier}
		destroy ${wSessionFiles}.fselect${iFileIdentifier}
		update
		::sframe resize .sidetop.file

		# aus lOpenFiles entfernen
		set lLast [ list ]
		set lBefore [ list ]
		set bFlag 0
		set lTmp [ list ]
		foreach lTmp2 $lOpenFiles {
			if { [ lindex $lTmp2 0 ] != $sFile } {
				lappend lTmp $lTmp2
				set lLast $lTmp2
				if { ! $bFlag } {
					set lBefore $lTmp2
				}
			} else {
				set bFlag 1
			}
		}
		set lOpenFiles $lTmp

		# falls die aktive Datei geschlossen wurde, andere aktivieren
		if { $sFile == $sFileActive } {
			set sFileActive ""
			if { [ llength $lBefore ] > 2 } {
				switcheditorto [ list [ lindex $lBefore 0 ] [ lindex $lBefore 1 ] [ lindex $lBefore 2 ] ]
			} elseif { [ llength $lLast ] > 2 } {
				switcheditorto [ list [ lindex $lLast 0 ] [ lindex $lLast 1 ] [ lindex $lLast 2 ] ]
			}
		}

		# Dateiliste Scrollbereich aktualisieren
		update
		::sframe::resize .sidetop.file
	}
}


################################################################################
# Editor Overlays wegputzen
proc closeoverlays {} {
	if { [ winfo exists .sessionmenu ] } {
		destroy .sessionmenu
	}
	if { [ winfo exists .syntaxchooser ] } {
		destroy .syntaxchooser
	}
	if { [ winfo exists .filemenu ] } {
		destroy .filemenu
	}
	if { [ winfo exists .svnmenu ] } {
		destroy .svnmenu
	}
	if { [ winfo exists .e2l ] } {
		destroy .e2l
	}
	if { [ winfo exists .complete ] } {
		destroy .complete
	}
	if { [ winfo exists .syntaxhelp ] } {
		destroy .syntaxhelp
	}
}


################################################################################
# Datei oeffnen
#  lData 0: Datei
#  lData 1: anzuwendende Syntax
#  lData 2: Cursorposition
#  bPackit: soll das Frame gleich gepackt werden, oder geschieht das spaeter (Session setzt am Schluss das aktive Fenster)
set iFileIdentifier 0
proc openfile {lData bPackit} {
	global sSvnBinary iFileIdentifier lOpenFiles sFileActive sSessionBaseDir sSession lFileTypes wSessionFiles iDistances iTabIndent iScrollbarWidth sColorBackground sColorForeground sColorForegroundActivated sColorBackgroundHighlighted sColorForegroundHighlighted sColorSidebarPaneAdjust sColorMenubarBackground sColorScrollpicker sColorKeyWords1 sColorKeyWords2 sColorKeyWords3 sColorFunctions sColorKeyWords4 sColorKeyWords5 sColorKeyWords6 sColorBrackets sColorComments sColorVars bTextCursorBlock iTextCursorWidth sColorTextCursor sColorTextCursor bTextCursorBlink iTextCursorBlinkOn iTextCursorBlinkOff sIndent sColorBackgroundSelected iEditFontHeight iLongLine iBottomLinesInView
	set sFile [ file normalize [ file nativename [ lindex $lData 0 ] ] ]

	# evtl ist die Datei schon offen?
	set iFound -1
	foreach lTmp $lOpenFiles {
		if { [ file normalize [ lindex $lTmp 0 ] ]  == $sFile } {
			set iFound [ lindex $lTmp 2 ]
		}
	}
	if { $iFound >= 0 } {
		switcheditorto [ list $sFile "" $iFound ]
		set sFileActive $sFile
	} elseif { [ file exists $sFile ] } {
		set sFileActive $sFile

		# neue Datei oeffnen
		incr iFileIdentifier

		# Syntax ermitteln
		set sSyntax ""
		set sSyntaxTmp [ lindex $lData 1 ]
		set lHighlight [ list {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} 0 ]
		foreach lTmp $lFileTypes {
			if { [ lindex $lTmp 0 ] == $sSyntaxTmp } {
				set sSyntax $sSyntaxTmp
				set lHighlight $lTmp
			}
		}

		# Datei lesen
		set oFile     [ open $sFile r ]
		set sEditCode [ read $oFile ]
		close $oFile

		# alten Editor schliessen
		foreach wWidget [ pack slaves .editor ] {
			pack forget $wWidget
		}

		############################################################################
		# neues Editorfenster erstellen
		frame .editor.f${iFileIdentifier} -background $sColorBackgroundHighlighted
		if { $bPackit } {
			pack .editor.f${iFileIdentifier} -fill both -expand true
		}

		# Titelleiste ##############################################################
		frame .editor.f${iFileIdentifier}.title -borderwidth 0 -relief flat -background $sColorBackground

		# Info-Elemente
		button  .editor.f${iFileIdentifier}.title.session -text $sSession -background $sColorBackgroundHighlighted -foreground $sColorForegroundActivated -activebackground $sColorBackground -activeforeground $sColorForegroundActivated -pady 2 -padx $iDistances -borderwidth 0 -highlightthickness 0 -command "session_dropdown .editor.f${iFileIdentifier}.title.session"
		balloon .editor.f${iFileIdentifier}.title.session [::msgcat::mc {Session Menu}]
		button  .editor.f${iFileIdentifier}.title.file    -text $sFile    -background $sColorBackgroundHighlighted -foreground $sColorForeground          -activebackground $sColorBackground -activeforeground $sColorForegroundActivated -pady 2 -padx $iDistances -borderwidth 0 -highlightthickness 0 -command "file_dropdown .editor.f${iFileIdentifier}.title.file ${sFile} ${iFileIdentifier}"
		balloon .editor.f${iFileIdentifier}.title.file    [::msgcat::mc {File Menu}]
		set bSvn 0
		if { $sSessionBaseDir != "dynamic" && $sSvnBinary != "" } {
			if { [ file exists [ file join $sSessionBaseDir ".svn" ] ] && [ file isdirectory [ file join $sSessionBaseDir ".svn" ] ] } {
				set bSvn 1
				button .editor.f${iFileIdentifier}.title.svn -text {SVN} -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackground -activeforeground $sColorForegroundActivated -pady 2 -padx $iDistances -borderwidth 0 -highlightthickness 0 -command "svn_dropdown .editor.f${iFileIdentifier} ${sFile} ${sSessionBaseDir}"
				balloon .editor.f${iFileIdentifier}.title.svn [::msgcat::mc {Subversion Menu}]
			}
		}
		button  .editor.f${iFileIdentifier}.title.type    -text $sSyntax  -background $sColorBackgroundHighlighted -foreground $sColorForeground          -activebackground $sColorBackground -activeforeground $sColorForegroundActivated -pady 2 -padx $iDistances -borderwidth 0 -highlightthickness 0 -command "choosesyntax [ list $sFile $sSyntax $iFileIdentifier ]"
		balloon .editor.f${iFileIdentifier}.title.type    [::msgcat::mc {Syntax Menu}]
		pack .editor.f${iFileIdentifier}.title.session -side left
		pack .editor.f${iFileIdentifier}.title.file    -side left -padx "${iDistances} 0"
		if { $bSvn } {
			pack .editor.f${iFileIdentifier}.title.svn   -side left -padx "${iDistances} 0"
		}
		pack .editor.f${iFileIdentifier}.title.type    -side left -padx "${iDistances} 0"
		if { $sSyntax == "" } {
			.editor.f${iFileIdentifier}.title.type configure -text [::msgcat::mc {unknown}]
		}

		# fuellendes Dummy-Element
		frame .editor.f${iFileIdentifier}.title.fill -borderwidth 0 -relief flat -background $sColorBackgroundHighlighted
		pack .editor.f${iFileIdentifier}.title.fill -side left -fill both -expand true -padx "${iDistances} 0"

		# Zeile/Spalte Element
		button .editor.f${iFileIdentifier}.title.rowcol -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackground -activeforeground $sColorForegroundActivated -pady 2 -padx $iDistances -borderwidth 0 -highlightthickness 0 -width 12 -command "editor2line \".editor.f${iFileIdentifier}.text.t\""
		balloon .editor.f${iFileIdentifier}.title.rowcol [::msgcat::mc {Line Jumper}]
		pack   .editor.f${iFileIdentifier}.title.rowcol -side left -padx "${iDistances} 0"

		# Text #####################################################################
		set iBlinkOn  $iTextCursorBlinkOn
		set iBlinkOff $iTextCursorBlinkOff
		if { ! $bTextCursorBlink } {
			set iBlinkOn  0
			set iBlinkOff 0
		}
		hltext .editor.f${iFileIdentifier}.text -undo 1 -tabs "[ expr { ${iTabIndent} * [ font measure EditFont 0 ] } ] left" -highlightthickness 0 -tabstyle wordprocessor -background $sColorBackground -foreground $sColorForeground -selectbackground $sColorBackgroundSelected -selectforeground $sColorForeground -wrap none -blockcursor $bTextCursorBlock -insertbackground $sColorTextCursor -insertofftime $iBlinkOff -insertontime $iBlinkOn -insertwidth $iTextCursorWidth -linemap 1 -linemap_markable 1 -linemapfg $sColorForegroundHighlighted -linemapbg $sColorBackgroundHighlighted -linemap_select_fg $sColorForegroundActivated -linemap_select_bg $sColorBackground -linemap_mark_command registerlinemap -yscrollcommand ".editor.f${iFileIdentifier}.scrolly set" -xscrollcommand ".editor.f${iFileIdentifier}.scrollx set"
		.editor.f${iFileIdentifier}.text.l configure -highlightbackground $sColorBackgroundHighlighted -relief flat -font EditFont
		.editor.f${iFileIdentifier}.text.t configure -highlightbackground $sColorBackground            -relief flat -font EditFont
		scrollbar .editor.f${iFileIdentifier}.scrolly -background $sColorScrollpicker -activebackground $sColorForegroundHighlighted -troughcolor $sColorBackgroundHighlighted -borderwidth 0 -elementborderwidth 0 -width $iScrollbarWidth -orient vertical   -command ".editor.f${iFileIdentifier}.text yview"
		scrollbar .editor.f${iFileIdentifier}.scrollx -background $sColorScrollpicker -activebackground $sColorForegroundHighlighted -troughcolor $sColorBackgroundHighlighted -borderwidth 0 -elementborderwidth 0 -width $iScrollbarWidth -orient horizontal -command ".editor.f${iFileIdentifier}.text xview"
		grid .editor.f${iFileIdentifier}.title   -row 0 -column 0 -sticky we   -columnspan 2
		grid .editor.f${iFileIdentifier}.text    -row 1 -column 0 -sticky nesw
		grid .editor.f${iFileIdentifier}.scrolly -row 1 -column 1 -sticky ns
		grid .editor.f${iFileIdentifier}.scrollx -row 2 -column 0 -sticky we
		grid columnconfigure .editor.f${iFileIdentifier} 0 -weight 1
		grid rowconfigure    .editor.f${iFileIdentifier} 1 -weight 1

		# Farbe / Tag fuers Suchen (und Ersetzen)
		.editor.f${iFileIdentifier}.text.t tag configure searched -background $sColorBackgroundHighlighted -underline true

		# Syntax Highlight - vorbereiten
		hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text variables  $sColorVars      [ lindex $lHighlight 4 ]
		if { [ lindex $lHighlight 10 ] != "" } {
			hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text regexp1    $sColorKeyWords1 [ lindex $lHighlight 10 ]
		}
		hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text keywords1  $sColorKeyWords1 [ lindex $lHighlight 7 ]
		hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text charstart1 $sColorKeyWords1 [ lindex $lHighlight 8 ]
		hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text chars1     $sColorKeyWords1 [ lindex $lHighlight 9 ]
		if { [ lindex $lHighlight 14 ] != "" } {
			hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text regexp2    $sColorKeyWords2 [ lindex $lHighlight 14 ]
		}
		hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text keywords2  $sColorKeyWords2 [ lindex $lHighlight 11 ]
		hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text charstart2 $sColorKeyWords2 [ lindex $lHighlight 12 ]
		hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text chars2     $sColorKeyWords2 [ lindex $lHighlight 13 ]
		if { [ lindex $lHighlight 18 ] != "" } {
			hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text regexp3    $sColorKeyWords3 [ lindex $lHighlight 18 ]
		}
		hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text keywords3  $sColorKeyWords3 [ lindex $lHighlight 15 ]
		hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text charstart3 $sColorKeyWords3 [ lindex $lHighlight 16 ]
		hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text chars3     $sColorKeyWords3 [ lindex $lHighlight 17 ]
		if { [ lindex $lHighlight 22 ] != "" } {
			hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text regexp4    $sColorKeyWords4 [ lindex $lHighlight 22 ]
		}
		hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text keywords4  $sColorKeyWords4 [ lindex $lHighlight 19 ]
		hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text charstar4  $sColorKeyWords4 [ lindex $lHighlight 20 ]
		hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text chars4     $sColorKeyWords4 [ lindex $lHighlight 21 ]
		if { [ lindex $lHighlight 26 ] != "" } {
			hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text regexp5    $sColorKeyWords5 [ lindex $lHighlight 26 ]
		}
		hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text keywords5  $sColorKeyWords5 [ lindex $lHighlight 23 ]
		hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text charstart5 $sColorKeyWords5 [ lindex $lHighlight 24 ]
		hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text chars5     $sColorKeyWords5 [ lindex $lHighlight 25 ]
		if { [ lindex $lHighlight 30 ] != "" } {
			hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text regexp6    $sColorKeyWords6 [ lindex $lHighlight 30 ]
		}
		hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text keywords6  $sColorKeyWords6 [ lindex $lHighlight 27 ]
		hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text charstart6 $sColorKeyWords6 [ lindex $lHighlight 28 ]
		hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text chars6     $sColorKeyWords6 [ lindex $lHighlight 29 ]
		hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text brackets   $sColorBrackets  [ lindex $lHighlight 5 ]
		hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text functions  $sColorFunctions [ lindex $lHighlight 6 ]
		if { [ lindex $lHighlight 3 ] != "" } {
			hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text comments   $sColorComments  [ lindex $lHighlight 3 ]
		}
		if { [ lindex $lHighlight 31 ] == 1 } {
			hltext::enableComments                   .editor.f${iFileIdentifier}.text
			.editor.f${iFileIdentifier}.text.t tag configure _cComment -foreground $sColorComments
		}

		# Text einfuegen, highlight starten und Cursor setzen ######################
		.editor.f${iFileIdentifier}.text fastinsert end $sEditCode
		.editor.f${iFileIdentifier}.text edit reset
		.editor.f${iFileIdentifier}.text highlight 1.0 end
		set sCursorPos [ lindex $lData 2 ]
		if { [ string length $sCursorPos ] > 2 } {
			set lPos [ split $sCursorPos "." ]
			set iLine [ lindex $lPos 0 ]
			set iCol [ lindex $lPos 1 ]
			focus .editor.f${iFileIdentifier}.text.t
			set iMaxLines [ .editor.f${iFileIdentifier}.text.t count -lines 1.0 end ]
			if { $iLine <= $iMaxLines } {
				if { $iCol > [ string length [ .editor.f${iFileIdentifier}.text.t get "${iLine}.0" "${iLine}.end" ] ] } {
					set iCol 0
				}
				.editor.f${iFileIdentifier}.text.t mark set insert "${iLine}.${iCol}"
				.editor.f${iFileIdentifier}.text.t see "${iLine}.0"
				set sTmpColor $sColorForeground
				if { $iCol > $iLongLine } {
					set sTmpColor $sColorForegroundActivated
				}
				.editor.f${iFileIdentifier}.title.rowcol configure -text "${iLine} / ${iCol}" -foreground $sTmpColor
			} else {
				.editor.f${iFileIdentifier}.text.t mark set insert end
				.editor.f${iFileIdentifier}.text.t see end
				set lPos [ split [ .editor.f${iFileIdentifier}.text.t index insert ] "." ]
				set iLine [ lindex $lPos 0 ]
				set iCol [ lindex $lPos 1 ]
				set sTmpColor $sColorForeground
				if { $iCol > $iLongLine } {
					set sTmpColor $sColorForegroundActivated
				}
				.editor.f${iFileIdentifier}.title.rowcol configure -text "${iLine} / ${iCol}" -foreground $sTmpColor
			}
		} else {
			.editor.f${iFileIdentifier}.text.t mark set insert 1.0
			.editor.f${iFileIdentifier}.title.rowcol configure -text "1 / 0" -foreground $sColorForeground
		}

		##############################################################################
		# Bindings und Veraenderungen registrieren
		update

		# Modified Flag
		bind .editor.f${iFileIdentifier}.text <<Modified>> "${wSessionFiles}.fselect${iFileIdentifier} configure -foreground ${sColorForegroundActivated}"

		# alles markieren
		bind .editor.f${iFileIdentifier}.text <Control-a> {
			%W tag add sel 1.0 end
			break
		}

		# Syntaxvervollstaendigung, Zeile / Spalte, Autoclose usw.
		bind .editor.f${iFileIdentifier}.text <KeyRelease> {
			# Zeile / Spalte stets aktualisieren (ButtonRelease feuert global nicht, darum hier)
			set lPos  [ split [ %W index insert ] "." ]
			set iLine [ lindex $lPos 0 ]
			set iCol  [ lindex $lPos 1 ]
			set iEditorTmp [ string range [ lindex [ split %W "." ] 2 ] 1 end ]
			set sTmpColor $sColorForeground
			if { [ lindex $lPos 1 ] > $iLongLine } {
				set sTmpColor $sColorForegroundActivated
			}
			.editor.f${iEditorTmp}.title.rowcol configure -text "${iLine} / [ lindex $lPos 1 ]" -foreground $sTmpColor
			# Return erfordert Update des Linemaps - Funktion aus hltext hierher verschoben
			set sKeyPressed "%K"
			if { $sKeyPressed == "Return" } {
				hltext::linemapUpdate .editor.f${iFileIdentifier}.text
			} else {
				# Autoclose
				set bAutoclosed 0
				if { $bAutoClose } {
					set i [ lsearch -exact -index 0 $lOpenFiles $sFileActive ]
					if { $i >= 0 } {
						set iTmpSyntax [ lsearch -exact -index 0 $lSyntaxBrackets [ lindex [ lindex $lOpenFiles $i ] 1 ] ]
						if { $iTmpSyntax >= 0 } {
							foreach sChar [ lindex [ lrange [ lindex $lSyntaxBrackets $iTmpSyntax ] 1 end ] 0 ] {
								if { "%A" == $sChar } {
									if { $sChar == "\{" } {
										%W insert [ %W index insert ] "\}"
										%W mark set insert "[ %W index insert ] -1c"
										set bAutoclosed 1
									} elseif { $sChar == {[} } {
										%W insert [ %W index insert ] {]}
										%W mark set insert "[ %W index insert ] -1c"
										set bAutoclosed 1
									} elseif { $sChar == {(} } {
										%W insert [ %W index insert ] {)}
										%W mark set insert "[ %W index insert ] -1c"
										set bAutoclosed 1
									} elseif { $sChar == {"} } {
										%W insert [ %W index insert ] {"}
										%W mark set insert "[ %W index insert ] -1c"
										set bAutoclosed 1
									} elseif { $sChar == {'} } {
										%W insert [ %W index insert ] {'}
										%W mark set insert "[ %W index insert ] -1c"
										set bAutoclosed 1
									} elseif { $sChar == {<} } {
										%W insert [ %W index insert ] {>}
										%W mark set insert "[ %W index insert ] -1c"
										set bAutoclosed 1
									}
								}
							}
						}
					}
				}
				if { ! $bAutoclosed } {
					# Zahleingabe fuer Autocomplete anfangen
					if { [ string length $sKeyPressed ] == 4 && [ string range $sKeyPressed 0 2 ] == "KP_" } {
						set sKeyPressed [ string index $sKeyPressed 3 ]
					} elseif { $sKeyPressed == "KP_Insert" } {
						set sKeyPressed "0"
					} elseif { $sKeyPressed == "KP_End" } {
						set sKeyPressed "1"
					} elseif { $sKeyPressed == "KP_Down" } {
						set sKeyPressed "2"
					} elseif { $sKeyPressed == "KP_Next" } {
						set sKeyPressed "3"
					} elseif { $sKeyPressed == "KP_Left" } {
						set sKeyPressed "4"
					} elseif { $sKeyPressed == "KP_Begin" } {
						set sKeyPressed "5"
					} elseif { $sKeyPressed == "KP_Right" } {
						set sKeyPressed "6"
					} elseif { $sKeyPressed == "KP_Home" } {
						set sKeyPressed "7"
					} elseif { $sKeyPressed == "KP_Up" } {
						set sKeyPressed "8"
					} elseif { $sKeyPressed == "KP_Prior" } {
						set sKeyPressed "9"
					}
					if { [ winfo exists .complete.frame.suggestion${sKeyPressed} ] } {
						# Autocomplete
						.complete.frame.suggestion${sKeyPressed} invoke
						# da eben eingefuegt wurde: Position neu lesen
						set lPos  [ split [ %W index insert ] "." ]
						set iLine [ lindex $lPos 0 ]
						set iCol2 [ lindex $lPos 1 ]
						set iCol1 [ expr $iCol2 - 1 ]
						%W delete "${iLine}.${iCol1}" "${iLine}.${iCol2}"
						break
					} elseif { ![ winfo exists .syntaxhelp ] } {
						# Fenster fuer Autocomplete
						if { [ winfo exists .complete ] } {
							destroy .complete
						}
						set sLine [ %W get "${iLine}.0" "${iLine}.${iCol}" ]
						set sWord [ string trimleft [ string range $sLine [ string last " " $sLine ] end ] {	 "([\{$} ]
						set iWord [ string length $sWord ]
						set lBbox [ %W bbox "${iLine}.[ expr ${iCol} - ${iWord} ]" ]
						if { $iWord >= 3 } {
							incr iWord -1
							set lSuggestions [ list ]
							foreach sKeyword [ lindex $lCompletions [ lsearch -index 0 $lCompletions [ lindex [ lindex $lOpenFiles [ lsearch -index 0 $lOpenFiles $sFileActive ] ] 1 ] ] 1 ] {
								if { [ expr [ string length $sKeyword ] -1 ] > $iWord } {
									if { [ string range $sKeyword 0 $iWord ] == $sWord } {
										lappend lSuggestions $sKeyword
									}
								}
							}
							if { [ llength $lSuggestions ] && [ llength $lBbox ] > 0 } {

								# Fenster initialisieren
								set wWidget .
								toplevel            .complete
								wm overrideredirect .complete true
								wm geometry         .complete +[ expr [ winfo rootx %W ] + [ lindex $lBbox 0 ] ]+[ expr [ winfo rooty %W ] + [ lindex $lBbox 1 ] + $iEditFontHeight + 3 ]
								set sWidget ".complete.frame"
								frame $sWidget -borderwidth 0 -background $sColorForeground -padx 1 -pady 1
								pack $sWidget

								set i 0
								foreach sSuggestion $lSuggestions {
									button ${sWidget}.suggestion${i} -text " ${i}: ${sSuggestion} " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -font GuiFontSmall -command "syntax_docomplete %W ${iLine} ${iCol} ${iWord} \"${sSuggestion}\""
									pack ${sWidget}.suggestion${i} -side top -fill x -anchor w
									incr i
									# leider haben wir nur einen Tastendruck zur Verfügung...
									if { $i > 9 } {
										break
									}
								}
								# Fenster beim Verlassen oder mit Escape schliessen
								bind $sWidget <Leave> {
									if { [ winfo exists .complete ] } {
										destroy .complete
									}
								}
								bind .complete <Escape> {
									if { [ winfo exists .complete ] } {
										destroy .complete
									}
								}
							}
						}
					}
				}
			}
		}

		# Syntax Hilfe
		bind .editor.f${iFileIdentifier}.text <Control-h> {
			if { [ winfo exists .syntaxhelp ] } {
				destroy .syntaxhelp
			}
			if { [ winfo exists .complete ] } {
				destroy .complete
			}
			set lPos  [ split [ %W index insert ] "." ]
			set iLine [ lindex $lPos 0 ]
			set iCol  [ lindex $lPos 1 ]
			set sLine [ %W get "${iLine}.0" "${iLine}.end" ]
			set iFirst [ string last  " " $sLine [ expr $iCol - 1 ] ]
			if { $iFirst < 0 } {
				set iFirst 0
			}
			set iLast  [ string first " " $sLine $iCol ]
			if { $iLast < 0 } {
				set iLast "end"
			}
			set sWord [ string trimright [ string trimleft [ string trim [ string range $sLine $iFirst $iLast ] ] {	 "([\{$} ] { ")]\}} ]
			set iWord [ string length $sWord ]
			set lBbox [ %W bbox "${iLine}.${iFirst}" ]
			set lHelp [ lindex $lSyntaxHelp [ lsearch -index 0 $lSyntaxHelp [ lindex [ lindex $lOpenFiles [ lsearch -index 0 $lOpenFiles $sFileActive ] ] 1 ] ] 1 ]
			set iHelp [ lsearch -exact -index 0 $lHelp $sWord ]
			if { $iHelp >= 0 } {

				# Hilfetext fuer mehrzeilige Hilfen aufbereiten (Leerzeichen zwecks padding)
				set sHelp   {}
				set sPrefix {}
				foreach sHelpLine [ split [ lindex [ lindex ${lHelp} ${iHelp} ] 1 ] "\n" ] {
					append sHelp "${sPrefix} ${sHelpLine} "
					set sPrefix "\n"
				}

				# leere Hilfe ggf. abfangen
				if { [ string trim $sHelp ] == {|} } {
					break
				}

				# Fenster initialisieren
				set wWidget .
				toplevel            .syntaxhelp
				wm overrideredirect .syntaxhelp true
				wm geometry         .syntaxhelp +[ expr [ winfo rootx %W ] + [ lindex $lBbox 0 ] ]+[ expr [ winfo rooty %W ] + [ lindex $lBbox 1 ] + $iEditFontHeight + 3 ]
				set sWidget ".syntaxhelp.frame"
				frame $sWidget -borderwidth 0 -background $sColorForeground -padx 1 -pady 1
				pack $sWidget

				label ${sWidget}.help -text $sHelp -anchor w -justify left -background $sColorBackgroundHighlighted -foreground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -font GuiFontSmall
				pack ${sWidget}.help -side top -fill x -anchor w

				# Fenster beim Verlassen oder mit Escape schliessen
				bind $sWidget <Leave> {
					if { [ winfo exists .syntaxhelp ] } {
						destroy .syntaxhelp
					}
				}
				bind .syntaxhelp <Escape> {
					if { [ winfo exists .syntaxhelp ] } {
						destroy .syntaxhelp
					}
				}

				# nach 6 Sekunden automatisch entfernen
				after 6000 {
					if { [ winfo exists .syntaxhelp ] } {
						destroy .syntaxhelp
					}
				}

			}
			break
		}

		# Datum einfügen
		bind .editor.f${iFileIdentifier}.text <Control-d> {
			%W insert [ %W index insert ] [ clock format [ clock seconds ] -format $sInsertDateFormat ]
			break
		}

		# Return: Einrückung
		bind .editor.f${iFileIdentifier}.text <Return> {
			set iLine [ lindex [ split [ %W index insert ] "." ] 0 ]
			set sLine [ %W get ${iLine}.0 ${iLine}.end ]
			set sLineStart [ string range $sLine 0 [ expr [ string length $sLine ] - [ string length [ string trimleft $sLine " 	" ] ] -1 ] ]
			%W insert [ %W index insert ] "${sLineFeed}${sLineStart}"
			%W xview moveto 0
			# ggf. weiter scrollen
			%W see "[ expr ${iLine} + ${iBottomLinesInView} + 1 ].0"
			break
		}

		# sichtbare Fusszeilen
		bind .editor.f${iFileIdentifier}.text <Down> {
			%W see "[ expr [ lindex [ split [ %W index insert ] "." ] 0 ] + ${iBottomLinesInView} + 1 ].0"
		}

		# Intelligente Pos1-Taste
		bind .editor.f${iFileIdentifier}.text <Shift-Home> { }
		bind .editor.f${iFileIdentifier}.text <Home> {
			set iLine [ lindex [ split [ %W index insert ] "." ] 0 ]
			set sLine [ %W get ${iLine}.0 ${iLine}.end ]
			set iLineStart [ expr [ string length $sLine ] - [ string length [ string trimleft $sLine " 	" ] ] ]
			if { [ %W index insert ] == "${iLine}.${iLineStart}" } {
				%W mark set insert ${iLine}.0
			} else {
				%W mark set insert ${iLine}.${iLineStart}
			}
			%W xview moveto 0
			break
		}

		# Einfuegen
		bind .editor.f${iFileIdentifier}.text <Control-v> {
			if { [ catch { clipboard get } sPaste ] } {
			} else {
				tk_textCut %W
				set iLineStart [ lindex [ split [ %W index insert ] {.} ] 0 ]
				set iLineEnd   [ expr $iLineStart + [ regexp -all \n $sPaste ] ]
				%W insert [ %W index insert ] $sPaste
				clipboard clear
				clipboard append $sPaste
				%W see [ %W index insert ]
				%W highlight "${iLineStart}.0" "${iLineEnd}.end"
			}
			break
		}
		bind .editor.f${iFileIdentifier}.text <Shift-Insert> {
			if { [ catch { clipboard get } sPaste ] } {
			} else {
				tk_textCut %W
				set iLineStart [ lindex [ split [ %W index insert ] {.} ] 0 ]
				set iLineEnd   [ expr $iLineStart + [ regexp -all \n $sPaste ] ]
				%W insert [ %W index insert ] $sPaste
				clipboard clear
				clipboard append $sPaste
				%W see [ %W index insert ]
				%W highlight "${iLineStart}.0" "${iLineEnd}.end"
			}
			break
		}

		# Tab (globales Setzen leider nicht moeglich)
		bind .editor.f${iFileIdentifier}.text.t <Tab> {
			set sSelPositions [ %W tag nextrange sel 1.0 ]
			if { $sSelPositions != "" } {
				set lPos [ split $sSelPositions " " ]
				set iLineStart [ lindex [ split [ lindex $lPos 0 ] "." ] 0 ]
				set iLineEnd   [ lindex [ split [ lindex $lPos 1 ] "." ] 0 ]
				for { set i $iLineStart } { $i <= $iLineEnd } { incr i } {
					%W insert "${i}.0" $sIndent
				}
				%W tag add sel "${iLineStart}.0" "${iLineEnd}.end"
				break
			}
		}

		# Conrol-Tab (globales Setzen leider nicht moeglich, shift-tab nicht abfangbar da zu tief in focus-Reihenfolge der Widgets verankert)
		bind .editor.f${iFileIdentifier}.text.t <Control-Tab> {
			set sSelPositions [ %W tag nextrange sel 1.0 ]
			if { $sSelPositions != "" } {
				set lPos [ split $sSelPositions " " ]
				set iLineStart [ lindex [ split [ lindex $lPos 0 ] "." ] 0 ]
				set iLineEnd   [ lindex [ split [ lindex $lPos 1 ] "." ] 0 ]
				for { set i $iLineStart } { $i <= $iLineEnd } { incr i } {
					set sFirstChar [ %W get "${i}.0" "${i}.1" ]
					if { $sFirstChar == "	" || $sFirstChar == " " } {
						%W delete "${i}.0" "${i}.1"
					}
				}
				%W highlight "${iLineStart}.0" "${iLineEnd}.end"
				%W tag add sel "${iLineStart}.0" "${iLineEnd}.end"
				break
			}
		}

		# Zeile / Spalte stets aktualisieren (ButtonRelease feuert global nicht, darum hier)
		bind .editor.f${iFileIdentifier}.text.t <ButtonRelease> {
			set lCursor [ split [ %W index insert ] "." ]
			set iEditorTmp [ string range [ lindex [ split %W "." ] 2 ] 1 end ]
			set iLine [ lindex $lCursor 0 ]
			set sTmpColor $sColorForeground
			if { [ lindex $lCursor 1 ] > $iLongLine } {
				set sTmpColor $sColorForegroundActivated
			}
			.editor.f${iEditorTmp}.title.rowcol configure -text "${iLine} / [ lindex $lCursor 1 ]" -foreground $sTmpColor
		}

		# Undo: geht das nimmer weiter, ist die Datei unveraendert
		bind .editor.f${iFileIdentifier}.text.t <Control-z> {
			if { ! [ %W edit canundo ] } {
				%W edit modified 0
				set iFileSaveIdentifier [ string range [ lindex  [ split %W  "." ] 2 ] 1 end ]
				set wButton "${wSessionFiles}.fselect${iFileSaveIdentifier}"
				if { [ winfo exists $wButton ] } {
					$wButton configure -foreground $sColorForeground
				}
			}
		}

		# klicke ich mit der Maus irgend wo ins Editorfenster, sollten jene Overlays verschwinden (gehoeren nicht zur neuen Position)
		bind .editor.f${iFileIdentifier}.text.t <Button> {
			if { [ winfo exists .complete ] } {
				destroy .complete
			}
			if { [ winfo exists .syntaxhelp ] } {
				destroy .syntaxhelp
			}
		}

		# Dateiinfos zusammenstellen
		set lFileInfos [ list $sFile $sSyntax $iFileIdentifier ]

		# andere Dateien der Liste nicht mehr aktiv
		foreach wWidget [ grid slaves $wSessionFiles ] {
			$wWidget configure -background $sColorBackground
		}

		# Button in Dateiliste eintragen
		set sListName [ file tail $sFile ]
		button ${wSessionFiles}.fclose${iFileIdentifier}  -borderwidth 0 -highlightthickness 0 -padx 0 -pady 0 -background $sColorBackgroundHighlighted -foreground $sColorForegroundActivated -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -font GuiFontHead -text " \u2717 "       -command "closefile [ list ${lFileInfos} ]"
		button ${wSessionFiles}.fselect${iFileIdentifier} -borderwidth 0 -highlightthickness 0 -padx 0 -pady 0 -background $sColorBackgroundHighlighted -foreground $sColorForeground          -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground                   -text " ${sListName} " -command "switcheditorto [ list ${lFileInfos} ]" -anchor w
		bind   ${wSessionFiles}.fclose${iFileIdentifier}  <Button-4> { .sidetop.file.canvas yview scroll -1 units }
		bind   ${wSessionFiles}.fclose${iFileIdentifier}  <Button-5> { .sidetop.file.canvas yview scroll  1 units }
		bind   ${wSessionFiles}.fselect${iFileIdentifier} <Button-4> { .sidetop.file.canvas yview scroll -1 units }
		bind   ${wSessionFiles}.fselect${iFileIdentifier} <Button-5> { .sidetop.file.canvas yview scroll  1 units }
		grid   ${wSessionFiles}.fclose${iFileIdentifier}  -row $iFileIdentifier -column 0 -sticky ns
		grid   ${wSessionFiles}.fselect${iFileIdentifier} -row $iFileIdentifier -column 1 -sticky nesw
		grid columnconfigure $wSessionFiles 1 -weight 1

		# Datei registrieren
		lappend lOpenFiles $lFileInfos

		# Scrollbar im sframe aktualisieren
		update
		::sframe resize .sidetop.file

		# Readonly?
		if { ! [ file writable $sFile ] } {
			.editor.f${iFileIdentifier}.text.t configure -state disabled
		}

		# den brauchen wir zurueck
		return $iFileIdentifier

	}
}


################################################################################
# Datei speichern
proc file_save_all {} {
	global lOpenFiles wSessionFiles sColorForegroundActivated
	foreach lFile $lOpenFiles {
		set iIdentifier [ lindex $lFile 2 ]
		if { [ ${wSessionFiles}.fselect${iIdentifier} cget -foreground ] == $sColorForegroundActivated } {
			file_save [ lindex $lFile 0 ]
		}
	}
}
set iUniqueBakFileName 0
proc file_save {sFile} {
	global lOpenFiles wSessionFiles sColorForeground sLineFeed sProgNameShort iBackupHistory iUniqueBakFileName
	incr iUniqueBakFileName

	# ist die Datei auch schreibbar?
	if { ! [ file writable $sFile ] } {
		tk_messageBox -parent . -title [::msgcat::mc {Error!}] -message $sFile -detail [::msgcat::mc {Due to permission problems the file cannot be saved.}] -icon error -type ok
	} else {

		# Infos zusammensuchen
		set iTmp [ lsearch -index 0 $lOpenFiles $sFile ]
		if { $iTmp >= 0 } {
			set lFile [ lindex $lOpenFiles $iTmp ]
			if { [ llength $lFile ] >= 2 } {

				# Widgetpfade
				set iFileSaveIdentifier [ lindex $lFile 2 ]
				set wPath ".editor.f${iFileSaveIdentifier}"
				set wEditor "${wPath}.text.t"

				# Leerzeichen an Zeilenenden entfernen, und nur eine Leerzeile am Dateiende belassen
				set iLines [ $wEditor count -lines 1.0 end ]
				set bBlank 1
				for { set iLine $iLines } { $iLine > 0 } { incr iLine -1 } {
					set sLine [ $wEditor get ${iLine}.0 "${iLine}.end" ]
					set sLineTrimmed [ string trimright $sLine ]
					if { $sLine != $sLineTrimmed } {
						$wEditor replace "${iLine}.0" "${iLine}.end" $sLineTrimmed
						$wEditor highlight "${iLine}.0" "${iLine}.end"
					}
					if { $sLineTrimmed != "" } {
						set bBlank 0
					}
					if { $bBlank && $sLineTrimmed == "" } {
						set iBefore [ expr $iLine -1 ]
						if { $iBefore > 0 } {
							$wEditor delete ${iBefore}.end ${iLine}.end
						}
					}
				}
				$wEditor insert end $sLineFeed

				# Linefeed
				if { $sLineFeed == "\r\n" } {
					set sNl "crlf"
				} elseif { $sLineFeed == "\r" } {
					set sNl "cr"
				} else {
					set sNl "lf"
				}

				# Sicherungskopie erstellen
				if { [ file exists $sFile ] && $iBackupHistory > 0 } {
					set iSeconds     [ clock seconds ]
					set iOld         [ expr $iSeconds - ( 60 * 60 * 24 * $iBackupHistory ) ]
					set sBakFile     [ file join "~" ".cache" $sProgNameShort "${iSeconds}_${iUniqueBakFileName}" ]
					set sHistoryFile [ file join "~" ".cache" $sProgNameShort "index.tcl" ]
					set lHistory [ list ]
					if { [ file exists $sHistoryFile ] } {
						set oFile [ open $sHistoryFile r ]
						set lTmp [ read $oFile ]
						close $oFile
						foreach lEntry $lTmp {
							if { [ lindex [ split [ lindex $lEntry 1 ] "_" ] 0 ] > $iOld } {
								lappend lHistory $lEntry
							} else {
								set sDelFile [ file join "~" ".cache" $sProgNameShort [ lindex $lEntry 1 ] ]
								if { [ file exists $sDelFile ] } {
									file delete $sDelFile
								}
							}
						}
					}
					lappend lHistory [ list $sFile "${iSeconds}_${iUniqueBakFileName}" ]
					set oFile [ open $sHistoryFile w ]
					puts $oFile $lHistory
					close $oFile
					file copy $sFile $sBakFile
				}

				# Inhalt auslesen und Datei speichern
				set oFile [ open $sFile w ]
				fconfigure $oFile -translation $sNl
				puts $oFile [ string trimright [ $wEditor get 1.0 end ] $sLineFeed ]
				close $oFile

				# Datei wieder als unveraendert markieren
				$wEditor edit modified 0
				$wEditor edit reset
				${wSessionFiles}.fselect${iFileSaveIdentifier} configure -foreground $sColorForeground

			}
		}
	}
}


################################################################################
# FILE: tcltk/4221_choosesyntax.tcl

# Dropdown Fenster erstellen

proc choosesyntax {sFile sSyntax iFileIdentifier} {
	global lFileTypes sColorBackgroundHighlighted sColorForegroundActivated sColorForeground sColorBackgroundSelected

	if { [ winfo exists .syntaxchooser ] } {
		raise .syntaxchooser
	} else {

		# aktuelle Syntax kann falsch uebergeben werden, da der Button von einer vorigen Aenderung nix mitbekommt...
		set sSyntax [ .editor.f${iFileIdentifier}.title.type cget -text ]

		set lSyntax [ list ]
		foreach lTmp $lFileTypes {
			lappend lSyntax [ lindex $lTmp 0 ]
		}

		# Fenster initialisieren
		toplevel            .syntaxchooser
		wm overrideredirect .syntaxchooser true
		wm geometry         .syntaxchooser +[ winfo rootx .editor.f${iFileIdentifier}.title.type ]+[ winfo rooty .editor.f${iFileIdentifier}.title.type ]
		set sWidget ".syntaxchooser.frame"
		frame $sWidget -borderwidth 0 -background $sColorForeground -padx 1 -pady 1
		pack $sWidget

		set i 0
		button ${sWidget}.syntax${i} -text " [::msgcat::mc {none}] " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "switchsyntax [ list ${sFile} {} ${iFileIdentifier} ]"
		pack ${sWidget}.syntax${i} -side top -fill x -anchor w
		foreach sNewSyntax [ lsort -dictionary $lSyntax ] {
			incr i
			if { $sNewSyntax == $sSyntax } {
				button ${sWidget}.syntax${i} -text " ${sNewSyntax} " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForegroundActivated -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "switchsyntax [ list ${sFile} ${sNewSyntax} ${iFileIdentifier} ]"
			} else {
				button ${sWidget}.syntax${i} -text " ${sNewSyntax} " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground          -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "switchsyntax [ list ${sFile} ${sNewSyntax} ${iFileIdentifier} ]"
			}
			pack ${sWidget}.syntax${i} -side top -fill x -anchor w
		}

		# Fenster zeigen
		update
		raise .syntaxchooser
		focus .syntaxchooser

		# Fenster beim Verlassen oder mit Escape schliessen
		bind $sWidget <Leave> {
			if { [ winfo exists .syntaxchooser ] } {
				destroy .syntaxchooser
			}
		}
		bind .syntaxchooser <Escape> {
			if { [ winfo exists .syntaxchooser ] } {
				destroy .syntaxchooser
			}
		}

	}

}

# aendern
proc switchsyntax {sFile sSyntax iFileIdentifier} {
	global lFileTypes lOpenFiles wSessionFiles sColorForeground sColorKeyWords1 sColorKeyWords2 sColorKeyWords3 sColorFunctions sColorKeyWords4 sColorKeyWords5 sColorKeyWords6 sColorBrackets sColorComments sColorVars
	if { [ winfo exists .syntaxchooser ] } {
		destroy .syntaxchooser
	}
	set lFileTypesNow $lFileTypes
	if { $sSyntax == "" } {
		set lFileTypesNow [ list {} ]
	}
	foreach lTmp $lFileTypesNow {
		if { [ lindex $lTmp 0 ] == $sSyntax } {
			if { $sSyntax != "" } {
				.editor.f${iFileIdentifier}.title.type configure -text $sSyntax
			} else {
				.editor.f${iFileIdentifier}.title.type configure -text [::msgcat::mc {unknown}]
			}
			set lTmp2 [ list ]
			foreach lTmp3 $lOpenFiles {
				if { [ lindex $lTmp3 0 ] == $sFile } {
					lappend lTmp2 [ list [ lindex $lTmp3 0 ] $sSyntax [ lindex $lTmp3 2 ] ]
				} else {
					lappend lTmp2 $lTmp3
				}
			}
			set lOpenFiles $lTmp2
			set lHighlight $lTmp

			# wurde die Datei als veraendert registriert?
			set sFg [ ${wSessionFiles}.fselect${iFileIdentifier} cget -foreground ]

			# auslesen
			set sCursorPos [ .editor.f${iFileIdentifier}.text.t index insert ]
			set lScrollX   [ .editor.f${iFileIdentifier}.scrollx get ]
			set lScrollY   [ .editor.f${iFileIdentifier}.scrolly get ]
			set sEditCode  [ .editor.f${iFileIdentifier}.text get 1.0 end ]
			.editor.f${iFileIdentifier}.text delete 1.0 end

			# Editor aendern
			hltext::clearHighlightClasses .editor.f${iFileIdentifier}.text
			if { $sSyntax != "" } {
				hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text variables  $sColorVars      [ lindex $lHighlight 4 ]
				if { [ lindex $lHighlight 10 ] != "" } {
					hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text regexp1    $sColorKeyWords1 [ lindex $lHighlight 10 ]
				}
				hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text keywords1  $sColorKeyWords1 [ lindex $lHighlight 7 ]
				hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text charstart1 $sColorKeyWords1 [ lindex $lHighlight 8 ]
				hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text chars1     $sColorKeyWords1 [ lindex $lHighlight 9 ]
				if { [ lindex $lHighlight 14 ] != "" } {
					hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text regexp2    $sColorKeyWords2 [ lindex $lHighlight 14 ]
				}
				hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text keywords2  $sColorKeyWords2 [ lindex $lHighlight 11 ]
				hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text charstart2 $sColorKeyWords2 [ lindex $lHighlight 12 ]
				hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text chars2     $sColorKeyWords2 [ lindex $lHighlight 13 ]
				if { [ lindex $lHighlight 18 ] != "" } {
					hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text regexp3    $sColorKeyWords3 [ lindex $lHighlight 18 ]
				}
				hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text keywords3  $sColorKeyWords3 [ lindex $lHighlight 15 ]
				hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text charstart3 $sColorKeyWords3 [ lindex $lHighlight 16 ]
				hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text chars3     $sColorKeyWords3 [ lindex $lHighlight 17 ]
				if { [ lindex $lHighlight 22 ] != "" } {
					hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text regexp4    $sColorKeyWords4 [ lindex $lHighlight 22 ]
				}
				hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text keywords4  $sColorKeyWords4 [ lindex $lHighlight 19 ]
				hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text charstar4  $sColorKeyWords4 [ lindex $lHighlight 20 ]
				hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text chars4     $sColorKeyWords4 [ lindex $lHighlight 21 ]
				if { [ lindex $lHighlight 26 ] != "" } {
					hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text regexp5    $sColorKeyWords5 [ lindex $lHighlight 26 ]
				}
				hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text keywords5  $sColorKeyWords5 [ lindex $lHighlight 23 ]
				hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text charstart5 $sColorKeyWords5 [ lindex $lHighlight 24 ]
				hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text chars5     $sColorKeyWords5 [ lindex $lHighlight 25 ]
				if { [ lindex $lHighlight 30 ] != "" } {
					hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text regexp6    $sColorKeyWords6 [ lindex $lHighlight 30 ]
				}
				hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text keywords6  $sColorKeyWords6 [ lindex $lHighlight 27 ]
				hltext::addHighlightClassWithOnlyCharStart .editor.f${iFileIdentifier}.text charstart6 $sColorKeyWords6 [ lindex $lHighlight 28 ]
				hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text chars6     $sColorKeyWords6 [ lindex $lHighlight 29 ]
				hltext::addHighlightClassForSpecialChars   .editor.f${iFileIdentifier}.text brackets   $sColorBrackets  [ lindex $lHighlight 5 ]
				hltext::addHighlightClass                  .editor.f${iFileIdentifier}.text functions  $sColorFunctions [ lindex $lHighlight 6 ]
				if { [ lindex $lHighlight 3 ] != "" } {
					hltext::addHighlightClassForRegexp       .editor.f${iFileIdentifier}.text comments   $sColorComments  [ lindex $lHighlight 3 ]
				}
				if { [ lindex $lHighlight 31 ] == 1 } {
					hltext::enableComments                   .editor.f${iFileIdentifier}.text
					.editor.f${iFileIdentifier}.text.t tag configure _cComment -foreground $sColorComments
				}
			}

			# Daten wieder herstellen
			.editor.f${iFileIdentifier}.text fastinsert end $sEditCode
			.editor.f${iFileIdentifier}.text highlight 1.0 end
			.editor.f${iFileIdentifier}.text.t mark set insert $sCursorPos
			.editor.f${iFileIdentifier}.text.t see $sCursorPos
			focus .editor.f${iFileIdentifier}.text.t

			# ggf. modified wieder zuruecksetzen
			if { $sFg == $sColorForeground } {
				.editor.f${iFileIdentifier}.text.t edit modified 0
				${wSessionFiles}.fselect${iFileIdentifier} configure -foreground $sColorForeground
			}

		}
	}
}


################################################################################
# FILE: tcltk/4222_file_menu.tcl

################################################################################
# Drowpdown zur Datei
################################################################################


# Datei neu lesen
proc file_dropdown_reload {wWidget sFile bConfirm} {
	global wSessionFiles sColorForeground

	# ggf Bestaetigung holen
	if { $bConfirm } {
		set bOk 0
		if { [ tk_messageBox -parent . -title [::msgcat::mc {Warning}] -message [::msgcat::mc {All changes will be lost!}] -detail [::msgcat::mc {Do you really want to reload this file?}] -icon question -type okcancel ] == "ok" } {
			set bOk 1
		}
	} else {
		set bOk 1
	}
	if { $bOk } {

		# Widget des Editors selbst ermitteln (uebergeben wurde das des Dropdown-Buttons)
		set wTitleBar [ winfo parent $wWidget ]
		set wBase     [ winfo parent $wTitleBar ]
		set wEditor   "${wBase}.text"

		# Identifier ermitteln
		set iFileSaveIdentifier [ string range [ lindex [ split $wBase "." ] end ] 1 end ]

		# Datei lesen
		set oFile     [ open $sFile r ]
		set sEditCode [ read $oFile ]
		close $oFile

		# Editor aktualisieren
		$wEditor configure -state normal
		$wEditor fastdelete 1.0 end
		$wEditor fastinsert end $sEditCode
		$wEditor edit reset
		$wEditor highlight 1.0 end
		$wEditor mark set insert 1.0
		${wTitleBar}.rowcol configure -text "1 / 0" -foreground $sColorForeground

		# Readonly?
		if { ! [ file writable $sFile ] } {
			${wEditor}.t configure -state disabled
		}

		# als unveraendert markieren
		${wEditor}.t edit modified 0
		${wSessionFiles}.fselect${iFileSaveIdentifier} configure -foreground $sColorForeground

	}

	# Drodown schliessen
	if { [ winfo exists .filemenu ] } {
		destroy .filemenu
	}

}


# Undo / Redo
proc file_dropdown_undo {wWidget} {
	global wSessionFiles sColorForeground
	set wEditor "[ winfo parent [ winfo parent ${wWidget} ] ].text.t"
	if { [ $wEditor edit canundo ] } {
  	$wEditor edit undo
  	if { ! [ $wEditor edit canundo ] } {
	  	$wEditor edit modified 0
			set iFileSaveIdentifier [ string range [ lindex  [ split $wEditor  "." ] 2 ] 1 end ]
			set wButton "${wSessionFiles}.fselect${iFileSaveIdentifier}"
			if { [ winfo exists $wButton ] } {
				$wButton configure -foreground $sColorForeground
			}
		}
  	if { [ winfo exists .filemenu ] } {
  		if { [ $wEditor edit canundo ] } {
	  		.filemenu.frame.undo configure -state normal
	  	} else {
	  		.filemenu.frame.undo configure -state disabled
	  	}
	  	if { [ $wEditor edit canredo ] } {
	  		.filemenu.frame.redo configure -state normal
	  	} else {
	  		.filemenu.frame.redo configure -state disabled
	  	}
	  }
  }
}
proc file_dropdown_redo {wWidget} {
	global wSessionFiles sColorForeground
	set wEditor "[ winfo parent [ winfo parent ${wWidget} ] ].text.t"
	if { [ $wEditor edit canredo ] } {
  	$wEditor edit redo
  	if { ! [ $wEditor edit canundo ] } {
	  	$wEditor edit modified 0
			set iFileSaveIdentifier [ string range [ lindex  [ split $wEditor  "." ] 2 ] 1 end ]
			set wButton "${wSessionFiles}.fselect${iFileSaveIdentifier}"
			if { [ winfo exists $wButton ] } {
				$wButton configure -foreground $sColorForeground
			}
		}
  	if { [ winfo exists .filemenu ] } {
  		if { [ $wEditor edit canundo ] } {
	  		.filemenu.frame.undo configure -state normal
	  	} else {
	  		.filemenu.frame.undo configure -state disabled
	  	}
	  	if { [ $wEditor edit canredo ] } {
	  		.filemenu.frame.redo configure -state normal
	  	} else {
	  		.filemenu.frame.redo configure -state disabled
	  	}
	  }
  }
}


# Dropdown
proc file_dropdown {wWidget sFile iFileIdentifier} {
	global sColorBackgroundHighlighted sColorForeground sColorForegroundActivated sColorBackgroundSelected

	if { [ winfo exists .filemenu ] } {
		raise .filemenu
	} else {

		# Editor Widget
		set wEditor "[ winfo parent [ winfo parent ${wWidget} ] ].text.t"

		# aktuelle Datei ermitteln
		set sFileActive [ $wWidget cget -text ]

		# Breite in Pixeln
		set iMinWidth [ winfo width $wWidget ]

		# Fenster initialisieren
		toplevel            .filemenu
		wm overrideredirect .filemenu true
		wm geometry         .filemenu +[ winfo rootx $wWidget ]+[ winfo rooty $wWidget ]
		set wMenu ".filemenu.frame"
		frame $wMenu -borderwidth 0 -background $sColorForeground -padx 1 -pady 1
		pack $wMenu -fill x

		# Open File
		button ${wMenu}.open -text "  [::msgcat::mc {Open File}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command {
			set sOpenDir [ file nativename ~ ]
			if { [ file dirname $sFileActive ] != "" } {
				set sOpenDir [ file nativename [ file dirname $sFileActive ] ]
			}
			set sTmpFile [ tk_getOpenFile -initialdir $sOpenDir -multiple 0 -parent . ]
			if { $sTmpFile != "" } {
				set sTmpFile [ file nativename $sTmpFile ]
				if { [ file exists $sTmpFile ] && [ file isfile $sTmpFile ] } {
					# ggf. Backup History schliessen
					if { [ winfo exists .backup ] } {
						destroy .backup
					}
					set sTmpExtension [ string tolower [ file extension $sTmpFile ] ]
					set sTmpSyntax ""
					foreach lTmp $lFileTypes {
						foreach sTmp [ lindex $lTmp 1 ] {
							if { $sTmp == $sTmpExtension } {
								set sTmpSyntax [ lindex $lTmp 0 ]
							}
						}
					}
					openfile [ list $sTmpFile $sTmpSyntax 1.0 ] 1
					.sidetop.file.canvas yview moveto 1
				}
			}
		}
		pack ${wMenu}.open -side top -fill x -anchor w

		# New File
		button ${wMenu}.new -text "  [::msgcat::mc {New File}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command {
			set sOpenDir [ file nativename ~ ]
			if { [ file dirname $sFileActive ] != "" } {
				set sOpenDir [ file nativename [ file dirname $sFileActive ] ]
			}
			set sTmpFile [ tk_getSaveFile -initialdir $sOpenDir -title [::msgcat::mc {New File}] -parent . -confirmoverwrite 0 ]
			if { $sTmpFile != "" } {
				set sTmpFile [ file nativename $sTmpFile ]
				if { ! [ file exists $sTmpFile ] } {
					set oFile [ open $sTmpFile w ]
					close $oFile
				}
				if { [ file exists $sTmpFile ] && [ file isfile $sTmpFile ] } {
					# ggf. Backup History schliessen
					if { [ winfo exists .backup ] } {
						destroy .backup
					}
					set sTmpExtension [ string tolower [ file extension $sTmpFile ] ]
					set sTmpSyntax ""
					foreach lTmp $lFileTypes {
						foreach sTmp [ lindex $lTmp 1 ] {
							if { $sTmp == $sTmpExtension } {
								set sTmpSyntax [ lindex $lTmp 0 ]
							}
						}
					}
					openfile [ list $sTmpFile $sTmpSyntax 1.0 ] 1
					.sidetop.file.canvas yview moveto 1
				}
			}
		}
		pack ${wMenu}.new -side top -fill x -anchor w

    # Reload File
    button ${wMenu}.reload -text "  [::msgcat::mc {Reload File}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "file_dropdown_reload ${wWidget} ${sFileActive} 1"
		pack ${wMenu}.reload -side top -fill x -anchor w -pady {1 0}

		# Backup History
    button ${wMenu}.backup -text "  [::msgcat::mc {Backup History}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command { window_backup }
		pack ${wMenu}.backup -side top -fill x -anchor w

    # Undo
    button ${wMenu}.undo -text "  [::msgcat::mc {Undo}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "file_dropdown_undo ${wWidget}"
		pack ${wMenu}.undo -side top -fill x -anchor w -pady {1 0}
		if { ! [ $wEditor edit canundo ] } {
	  	${wMenu}.undo configure -state disabled
	  }

    # Redo
    button ${wMenu}.redo -text "  [::msgcat::mc {Redo}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "file_dropdown_redo ${wWidget}"
		pack ${wMenu}.redo -side top -fill x -anchor w
		if { ! [ $wEditor edit canredo ] } {
	  	${wMenu}.redo configure -state disabled
	  }

    # Save
    button ${wMenu}.save -text "  [::msgcat::mc {Save}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "
    	file_save ${sFileActive}
    	destroy .filemenu
    "
		pack ${wMenu}.save -side top -fill x -anchor w -pady {1 0}

    # Close
    button ${wMenu}.close -text "  [::msgcat::mc {Close}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "closefile [ list [ list ${sFile} {} ${iFileIdentifier} ] ]"
		pack ${wMenu}.close -side top -fill x -anchor w

		# Fenster zeigen
		update
		if { [ winfo reqwidth .filemenu ] < $iMinWidth } {
			wm geometry .filemenu ${iMinWidth}x[ winfo reqheight .filemenu ]
		}
		raise .filemenu
		focus .filemenu

		# Fenster beim Verlassen oder mit Escape schliessen
		bind $wMenu <Leave> {
			if { [ winfo exists .filemenu ] } {
				destroy .filemenu
			}
		}
		bind .filemenu <Escape> {
			if { [ winfo exists .filemenu ] } {
				destroy .filemenu
			}
		}

	}
}


################################################################################
# FILE: tcltk/4223_searchreplace.tcl

################################################################################
# Suchen + Ersetzen
################################################################################


# Suchen & Ersetzen
proc replacetext {} {
	global sSearchAndReplaceUserAction lOpenFiles sFileActive lSearchHistory sSearchString lReplaceHistory sReplaceString sCaseSensitive lCaseSensitive iReplaceConfirm lReplaceModes wSessionFiles sColorForegroundActivated

	if { $iReplaceConfirm } {
		.sidebottom.replace.pos.search  configure -text $sSearchString
		.sidebottom.replace.pos.replace configure -text $sReplaceString
		pack .sidebottom.replace -side top -fill x
		pack configure .sidebottom.replace -before .sidebottom.search
		pack forget .sidebottom.search
		if { [ winfo exists .backup ] } {
			destroy .backup
		}
	}

	set iSearchString [ string length $sSearchString ]
	set iReplaceString [ string length $sReplaceString ]
	if { $iSearchString > 0 } {

		# Suche: History neu aufbauen
		set lTmp [ list ]
		lappend lTmp $sSearchString
		set i 0
		foreach sTmp $lSearchHistory {
			if { [ lsearch -exact $lTmp $sTmp ] < 0 } {
				incr i
				if { $i < 15 } {
					lappend lTmp $sTmp
				}
			}
		}
		set lSearchHistory $lTmp
		.sidebottom.search.search configure -values $lSearchHistory

		# Replace: History neu aufbauen
		set lTmp [ list ]
		lappend lTmp $sReplaceString
		set i 0
		foreach sTmp $lReplaceHistory {
			if { [ lsearch -exact $lTmp $sTmp ] < 0 } {
				incr i
				if { $i < 15 } {
					lappend lTmp $sTmp
				}
			}
		}
		set lReplaceHistory $lTmp
		.sidebottom.search.replace configure -values $lReplaceHistory

		# Gross-Kleinschreibung auswerten
		set bCaseSensitive 0
		if { [ lsearch $lCaseSensitive $sCaseSensitive ] == 1 } {
			set bCaseSensitive 1
			set sSearchReal $sSearchString
		} else {
			set sSearchReal [ string tolower $sSearchString ]
		}

		# Search = Replace
		if { ! $bCaseSensitive && $sSearchReal == [ string tolower $sReplaceString ] } {
			tk_messageBox -parent . -title [::msgcat::mc {Ups!}] -message [::msgcat::mc "Won't work, because case insensitive both strings are the same\u2026"] -icon info -type ok
			return
		} elseif { $bCaseSensitive && $sSearchReal == $sReplaceString } {
			tk_messageBox -parent . -title [::msgcat::mc {Ups!}] -message [::msgcat::mc "Won't work, because both strings are the same\u2026"] -icon info -type ok
			return
		}

		# Modus auswerten; 0: Datei; 1: Auswahl; 2: Session
		set iReplaceModeIndex [ lsearch -exact $lReplaceModes [ .sidebottom.search.mode get ] ]

		# Liste der betroffenen Editoren erstellen
		if { $iReplaceModeIndex < 2 } {
			# nur in der aktuellen Datei
			set lReplaceFileData [ list [ lindex $lOpenFiles [ lsearch -exact -index 0 $lOpenFiles $sFileActive ] ] ]
		} else {
			# in allen Dateien
			set lReplaceFileData $lOpenFiles
		}

		# Dateien durchgehen
		foreach lEditorIndex $lReplaceFileData {
			set sLastModPos ""
			set bReplaced 0
			if { [ llength $lEditorIndex ] > 2 } {
				set iEditorIndex [ lindex $lEditorIndex 2 ]
				set wWidget ".editor.f${iEditorIndex}.text.t"
				$wWidget tag remove searched 1.0 end
				if { [ winfo exists $wWidget ] } {
					set iLines [ $wWidget count -lines 1.0 end ]
					set iLineStart 1
					set iColStart  0
					set iLineEnd   $iLines
					set iColEnd    [ string length [ $wWidget get "${iLineEnd}.0" "${iLineEnd}.end"] ]
					if { $iReplaceModeIndex == 1 } {

						# nur in Auswahl
						set sSelPositions [ $wWidget tag nextrange sel 1.0 ]
						if { $sSelPositions != "" } {
							set lSelPositions [ split $sSelPositions " " ]
							set lTmpStart [ split [ lindex $lSelPositions 0 ] "." ]
							set lTmpEnd   [ split [ lindex $lSelPositions 1 ] "." ]
							set iLineStart [ lindex $lTmpStart 0 ]
							set iColStart  [ lindex $lTmpStart 1 ]
							set iLineEnd   [ lindex $lTmpEnd 0 ]
							set iColEnd    [ lindex $lTmpEnd 1 ]
						} else {
							tk_messageBox -parent . -title [::msgcat::mc {Ups!}] -message [::msgcat::mc "Won't work, because none text is selected\u2026"] -icon info -type ok
							return
						}

					}

					# Suchtext zweilenweise durchgehen
					set iOffsetOverwrite 0
					for { set iLine $iLineStart } { $iLine <= $iLineEnd } { incr iLine } {
						set iFound 0
						while { $iFound >= 0 } {

							if { $iLineStart == $iLineEnd } {
								# nur eine Zeile insgesammt
								set iEnd    $iColEnd
								set iOffset $iColStart
							} elseif { $iLine == $iLineStart } {
								# erste Zeile
								set iEnd    "end"
								set iOffset $iColStart
							} elseif { $iLine == $iLineEnd } {
								# letzte Zeile
								set iEnd    $iColEnd
								set iOffset 0
							} else {
								# ganze Zeile
								set iEnd    "end"
								set iOffset 0
							}
							set sLine [ $wWidget get "${iLine}.0" "${iLine}.${iEnd}" ]
							if { ! $bCaseSensitive } {
								set sLine [ string tolower $sLine ]
							}
							if { $iOffsetOverwrite > 0 } {
								set iOffset $iOffsetOverwrite
							}
							set iOffsetOverwrite 0

							set iFound [ string first $sSearchReal $sLine $iOffset ]
							if { $iFound >= 0 } {

								# Bestaetigen?
								set bReplace 1
								if { $iReplaceConfirm } {
									$wWidget see "${iLine}.${iFound}"
									set iEndSearch [ expr $iFound + $iSearchString ]
									$wWidget tag remove searched 1.0 end
									$wWidget tag add searched "${iLine}.${iFound}" "${iLine}.${iEndSearch}"
									.sidebottom.replace.pos.colrow configure -text "${iLine} / ${iFound}"
									set sSearchAndReplaceUserAction {}
									set sStateWas [ $wWidget cget -state ]
									$wWidget configure -state disabled
									tkwait variable sSearchAndReplaceUserAction
									$wWidget configure -state $sStateWas
									if { $sSearchAndReplaceUserAction == "cancel" } {
										pack .sidebottom.search -side top -fill x
										pack configure .sidebottom.search -before .sidebottom.replace
										pack forget .sidebottom.replace
										return
									} elseif { $sSearchAndReplaceUserAction != "yes" } {
										set bReplace 0
									}
								}
								if { $bReplace } {

									# Ersetzen
									set iEndReplace [ expr $iFound + $iSearchString ]
									set sLastModPos "${iLine}.${iFound}"
									$wWidget replace $sLastModPos "${iLine}.${iEndReplace}" $sReplaceString
									set bReplaced 1
									set iOffsetOverwrite [ expr $iFound + $iReplaceString ]

								} else {
									set iOffsetOverwrite [ expr $iFound + 1 ]
								}
							}
						}
					}
				}
			}
			if { $bReplaced } {
				# Datei als veraendert markieren und Cursor an letzte Aenderung setzen
				$wWidget mark set insert $sLastModPos
				$wWidget see $sLastModPos
				$wWidget highlight 1.0 end
				${wSessionFiles}.fselect${iEditorIndex} configure -foreground $sColorForegroundActivated
			}
			focus $wWidget
		}
	}
	if { $iReplaceConfirm } {
		pack .sidebottom.search -side top -fill x
		pack configure .sidebottom.search -before .sidebottom.replace
		pack forget .sidebottom.replace
	}
}


# einfache Suche
# args: optionale Uebergabe, wenn der String nicht leer ist wird vom Dateianfang gesucht
proc searchtext {args} {
	global lOpenFiles sFileActive lSearchHistory sSearchString sCaseSensitive lCaseSensitive

	if { $sSearchString != "" } {

		# History neu aufbauen
		set lTmp [ list ]
		lappend lTmp $sSearchString
		set i 0
		foreach sTmp $lSearchHistory {
			if { [ lsearch -exact $lTmp $sTmp ] < 0 } {
				incr i
				if { $i < 15 } {
					lappend lTmp $sTmp
				}
			}
		}
		set lSearchHistory $lTmp
		.sidebottom.search.search configure -values $lSearchHistory

		# aktives Editorfenster ermitteln
		set lEditorIndex [ lindex $lOpenFiles [ lsearch -exact -index 0 $lOpenFiles $sFileActive ] ]
		if { [ llength $lEditorIndex ] > 2 } {
			set iEditorIndex [ lindex $lEditorIndex 2 ]
			set wWidget ".editor.f${iEditorIndex}.text.t"
			$wWidget tag remove searched 1.0 end
			if { [ winfo exists $wWidget ] } {

				# wir benoetigen ein paar Infos zum Cursor...
				if { $args != "" } {
					set sCursor "1.0"
					set iCursorLine 1
					set iCursorCol  0
				} else {
					set sCursor     [ $wWidget index insert ]
					set lCursor     [ split $sCursor "." ]
					set iCursorLine [ lindex $lCursor 0 ]
					set iCursorCol  [ expr [ lindex $lCursor 1 ] + 1 ]
				}

				# Nummer der letzten Zeile
				set iLines [ $wWidget count -lines 1.0 end ]

				# Gross-Kleinschreibung auswerten
				set bCaseSensitive 0
				if { [ lsearch $lCaseSensitive $sCaseSensitive ] == 1 } {
					set bCaseSensitive 1
					set sSearchReal $sSearchString
				} else {
					set sSearchReal [ string tolower $sSearchString ]
				}

				# Laenge des Suchstrings
				set iSearchString [ string length $sSearchString ]

				# Suche
				set bFound 0
				for { set iLine $iCursorLine } { $iLine <= $iLines } { incr iLine } {
					set iFound 0
					set iOffset 0
					if { $iCursorCol > 0 } {
						set iOffset $iCursorCol
						set iCursorCol 0
					}
					set sLine [ $wWidget get "${iLine}.0" "${iLine}.end" ]
					if { ! $bCaseSensitive } {
						set sLine [ string tolower $sLine ]
					}
					set iFound [ string first $sSearchReal $sLine $iOffset ]
					if { $iFound >= 0 } {
						set sPos "${iLine}.${iFound}"
						focus $wWidget
						$wWidget mark set insert $sPos
						$wWidget see $sPos
						set bFound 1
						set iEndSearch [ expr $iFound + $iSearchString ]
						$wWidget tag add searched $sPos "${iLine}.${iEndSearch}"
						break
					}
				}

				# Dateiende erreicht - nochmal von oben beginnen?
				if { ! $bFound } {
					if { [ tk_messageBox -parent . -title [::msgcat::mc {End of File}] -message [::msgcat::mc {End of file reached.}] -detail [::msgcat::mc {Should we start again from top?}] -icon question -type yesno ] == "yes" } {
						searchtext 1
					}
				}

			}
		}
	}
}


################################################################################
# FILE: tcltk/4224_editor2line.tcl

################################################################################
# Dropdown oben rechts: zu einer Zeile springen


# Sprung auf eine Zeile ausfuehren
proc editor2line_linemap {wEditor iLine wPosition} {
	$wEditor mark set insert "${iLine}.0"
	$wEditor see "${iLine}.0"
	$wPosition configure -text "${iLine} / 0"
	focus $wEditor
	destroy .e2l
}


# Overlay Eingabe und Sprungmarkenauswahl
proc editor2line {wEditor} {
	global lLinemapRegistry sColorBackgroundHighlighted sColorForeground sColorForegroundActivated sColorBackgroundSelected

	if { [ winfo exists .e2l ] } {
		raise .e2l
	} else {

		# Pfad zum Zeilenzahl-Element wird benoetigt
		set wCtext [ winfo parent $wEditor ]
		set wPosition [ winfo parent $wCtext ]
		append wPosition ".title.rowcol"

		# Fenster initialisieren
		toplevel            .e2l
		wm overrideredirect .e2l true
		frame .e2l.frame -borderwidth 0 -background $sColorForeground -padx 1 -pady 1
		pack .e2l.frame

		# Zeilenzahl ermitteln und neben den Widget-Pfaden in Dummy-Feldern merken
		set iMaxLines [ $wEditor count -lines 1.0 end ]
		label .e2l.lines  -text $iMaxLines
		label .e2l.editor -text $wEditor
		label .e2l.parent -text $wPosition
		label .e2l.actual -text [ string trim [ lindex [ split [ $wPosition cget -text ] "/" ] 0 ] ]

		# Eingabefeld (im Frame wegen ggf. nachfolgenden Buttons), hoch, runter
		frame  .e2l.frame.goto -background $sColorBackgroundHighlighted
		pack   .e2l.frame.goto        -side top -fill x
		label  .e2l.frame.goto.label  -text [::msgcat::mc {Line}] -background $sColorBackgroundHighlighted -foreground $sColorForeground -pady 1 -padx 5 -borderwidth 0 -highlightthickness 0
		pack   .e2l.frame.goto.label  -side left
		entry  .e2l.frame.goto.entry  -width 15
		pack   .e2l.frame.goto.entry  -side left
		button .e2l.frame.goto.top    -text " \u2b06 " -background $sColorBackgroundHighlighted -foreground $sColorForegroundActivated -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 1 -padx 5 -borderwidth 1 -relief raised -highlightthickness 0 -command { editor2line_linemap [ .e2l.editor cget -text ] 1 [ .e2l.parent cget -text ] }
		pack   .e2l.frame.goto.top    -side left -fill x -expand true
		button .e2l.frame.goto.actual -text " \u26ab " -background $sColorBackgroundHighlighted -foreground $sColorForegroundActivated -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 1 -padx 5 -borderwidth 1 -relief raised -highlightthickness 0 -command { editor2line_linemap [ .e2l.editor cget -text ] [ .e2l.actual cget -text ] [ .e2l.parent cget -text ] }
		pack   .e2l.frame.goto.actual -side left -fill x -expand true
		button .e2l.frame.goto.end    -text " \u2b07 " -background $sColorBackgroundHighlighted -foreground $sColorForegroundActivated -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 1 -padx 5 -borderwidth 1 -relief raised -highlightthickness 0 -command { editor2line_linemap [ .e2l.editor cget -text ] [ .e2l.lines cget -text ] [ .e2l.parent cget -text ] }
		pack   .e2l.frame.goto.end    -side left -fill x -expand true


		# verfuegbare Functions
		set i 0
		set iChars [ string length $iMaxLines ]
		set bFirst 1
		foreach {sStart sEnd} [ $wEditor tag ranges functions ] {
			set iLine [ lindex [ split $sStart "." ] 0 ]
			incr i
			set sNumber $iLine
			while { [ string length $sNumber ] < $iChars } {
				set sNumber "0${sNumber}"
			}
			set sTxt [ string trim [ $wEditor get ${iLine}.0 ${iLine}.end ] ]
			button .e2l.frame.jumper${i} -text "  ${sNumber}: ${sTxt}  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "editor2line_linemap ${wEditor} ${iLine} ${wPosition}"
			if { $bFirst } {
				pack .e2l.frame.jumper${i} -side top -fill x -pady {1 0}
			} else {
				pack .e2l.frame.jumper${i} -side top -fill x
			}
			set bFirst 0
		}


		# verfuegbare Sprungmarken
		set bFirst 1
		foreach lLinemap $lLinemapRegistry {
			if { [ lindex $lLinemap 0 ] == $wCtext } {
				foreach iLine [ lsort -integer -unique [ lrange $lLinemap 1 end ] ] {
					if { $iLine <= $iMaxLines } {
						incr i
						set sNumber $iLine
						while { [ string length $sNumber ] < $iChars } {
							set sNumber "0${sNumber}"
						}
						set sTxt [ string trim [ $wEditor get ${iLine}.0 ${iLine}.end ] ]
						button .e2l.frame.jumper${i} -text "  ${sNumber}: ${sTxt}  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "editor2line_linemap ${wEditor} ${iLine} ${wPosition}"
						if { $bFirst } {
							pack .e2l.frame.jumper${i} -side top -fill x -pady {1 0}
						} else {
							pack .e2l.frame.jumper${i} -side top -fill x
						}
						set bFirst 0
					}
				}
			}
		}

		# Breite limitieren - maximal so breit wie 40 8en
		update
		set iDesiredWidth [ winfo reqwidth .e2l ]
		set iMaxWidth [ font measure GuiFont "8888888888888888888888888888888888888888" ]
		if { $iMaxWidth < $iDesiredWidth } {
			set iDesiredWidth $iMaxWidth
		}

		# Fenster zeigen
		update
		wm geometry .e2l ${iDesiredWidth}x[ winfo reqheight .e2l ]+[ expr [ winfo rootx $wPosition ] + [ winfo width $wPosition ] - $iDesiredWidth ]+[ winfo rooty $wPosition ]
		raise .e2l
		focus .e2l.frame.goto.entry

		# Enter springt zur Zeile
		bind .e2l.frame.goto.entry <Return> {
			set iGoto [ .e2l.frame.goto.entry get ]
			if { [ string is integer $iGoto ] } {
				if { $iGoto > 0 } {
					set wEditor [ .e2l.editor cget -text ]
					if { [ string is integer $iGoto ] } {
						set iLines  [ .e2l.lines  cget -text ]
						set wParent [ .e2l.parent cget -text ]
						if { $iGoto > $iLines } {
							$wEditor mark set insert "${iLines}.0"
							$wEditor see "${iLines}.0"
							$wParent configure -text "${iLines} / 0"
						} else {
							$wEditor mark set insert "${iGoto}.0"
							$wEditor see "${iGoto}.0"
							$wParent configure -text "${iGoto} / 0"
						}
					}
				}
			}
			focus $wEditor
			destroy .e2l
		}

		# Fenster beim Verlassen oder mit Escape schliessen
		bind .e2l.frame <Leave> {
			if { [ winfo exists .e2l ] } {
				destroy .e2l
			}
		}
		bind .e2l <Escape> {
			if { [ winfo exists .e2l ] } {
				destroy .e2l
			}
		}

	}
}


################################################################################
# FILE: tcltk/4225_backup.tcl

################################################################################
# Backup File History
################################################################################


# einen alten Stand wieder herstellen
proc backup_restore {sBackupFile} {
	global sFileActive lOpenFiles
	set bRestore 0
	if { [ tk_messageBox -parent .backup -title [::msgcat::mc {Please confirm}] -message [::msgcat::mc {Restoring means that the actual version will be overwritten by the selected one. Should this really be done?}] -icon question -type yesno ] == "yes" } {
		set bRestore 1
	}
	if { $bRestore } {
		if { [ winfo exists .backup ] } {
			diffwinsizesave
			destroy .backup
		}
		set iEditorWidget [ lindex [ lindex $lOpenFiles [ lsearch -index 0 $lOpenFiles $sFileActive ] ] 2 ]
		file copy -force $sBackupFile $sFileActive
		file_dropdown_reload .editor.f${iEditorWidget}.title.file $sFileActive 0
	}
}


# aktuellen Stand des Editors auslesen
proc backup_compare_getedit {} {
	global sFileActive lOpenFiles
	set iEditorWidget [ lindex [ lindex $lOpenFiles [ lsearch -index 0 $lOpenFiles $sFileActive ] ] 2 ]
	return [ .editor.f${iEditorWidget}.text.t get 1.0 end ]
}


# Compare
proc backup_compare {} {
	global aCompare sProgNameShort bStructList sDiff
	.backup.content.diff configure -state normal
	.backup.content.diff delete 1.0 end
	update
	set lSelected [ list ]
	foreach iId [ lsort -integer [ array names aCompare ] ] {
		if { $aCompare($iId) == 1 } {
			lappend lSelected [ .backup.file${iId} cget -text ]
		}
	}
	if { [ llength $lSelected ] == 1 } {

		# einzelne Datei anzeigen
		if { [ lindex $lSelected 0 ] == {++++++++} } {
			set sContent [ backup_compare_getedit ]
		} else {
			set oFile    [ open [ lindex $lSelected 0 ] r ]
			set sContent [ read $oFile ]
			close $oFile
		}
		.backup.content.diff insert 1.0 $sContent

	} elseif { [ llength $lSelected ] == 2 } {

		##########
		# Compare
		##########

		if { ! $bStructList || $sDiff == "diff" } {
			set sDiffExec [ auto_execok "diff" ]
			if { $sDiffExec == "" } {
				.backup.content.diff insert 1.0 "Sorry\u2026\n" titletext
				.backup.content.diff insert end "\n\u2026but to compare two files you need either tcllib installed or diff available.\n"
				.backup.content.diff insert end "\nYou may also take a look into your configuration.\n"
			} else {

				if { [ file isfile [ lindex $lSelected 0 ] ] && [ file isfile [ lindex $lSelected 1 ] ] } {
					set iStatus [ catch { exec $sDiffExec [ file nativename [ lindex $lSelected 0 ] ] [ file nativename [ lindex $lSelected 1 ] ] } sResult ]
					foreach sLine [ split $sResult "\n" ] {
						if { $sLine != "child process exited abnormally" } {
							.backup.content.diff insert end "${sLine}\n"
						}
					}
				}

			}
		} else {

			# Hinweistext
			.backup.content.diff insert 1.0 "\u2026 working - please wait \u2026\n" titletext
			.backup.content.diff configure -state disabled
			update

			# Datei 1 lesen
			if { [ lindex $lSelected 0 ] == {++++++++} } {
				set sContent1 [ backup_compare_getedit ]
			} else {
				set oFile     [ open [ lindex $lSelected 0 ] r ]
				set sContent1 [ read $oFile ]
				close $oFile
			}

			# Datei 2 lesen
			if { [ lindex $lSelected 1 ] == {++++++++} } {
				set sContent2 [ backup_compare_getedit ]
			} else {
				set oFile     [ open [ lindex $lSelected 1 ] r ]
				set sContent2 [ read $oFile ]
				close $oFile
			}

			# Diff generieren
			if {0} {
				set lList1 [ split $sContent1 "" ]
				set lList2 [ split $sContent2 "" ]
			} else {
				set lList1 [ regexp -all -inline {\S+|\s+} $sContent1 ]
				set lList2 [ regexp -all -inline {\S+|\s+} $sContent2 ]
			}
			set lCsData   [ ::struct::list longestCommonSubsequence $lList1 $lList2 ]
			set lDiffData [ ::struct::list lcsInvertMerge $lCsData [ llength $lList1 ] [ llength $lList2 ] ]

			# Ausgabe ins Diff Widget
			.backup.content.diff configure -state normal
			.backup.content.diff delete 1.0 end
			foreach lItem $lDiffData {
				lassign $lItem sType iIndex1 iIndex2
				switch -exact $sType {
					added     { .backup.content.diff insert end [ join [ lrange $lList2 {*}$iIndex2 ] "" ] inserted }
					deleted   { .backup.content.diff insert end [ join [ lrange $lList1 {*}$iIndex1 ] "" ] deleted  }
					changed   {
						.backup.content.diff insert end [ join [ lrange $lList1 {*}$iIndex1 ] "" ] deleted
						.backup.content.diff insert end [ join [ lrange $lList2 {*}$iIndex2 ] "" ] inserted
					}
					unchanged { .backup.content.diff insert end [ join [ lrange $lList1 {*}$iIndex1 ] "" ] {} }
				}
			}
		}

	} else {

		# 0 oder mehr als 2 Eintraege markiert
		set iSize 0
		foreach sTmpFile [ glob -nocomplain -directory [ file join "~" ".cache" $sProgNameShort ] * ] {
			incr iSize [ file size $sTmpFile ]
		}
		set sSize [ format_filesize $iSize ]
		.backup.content.diff insert 1.0 "About this Backup History\n" headlinetext
		.backup.content.diff insert end "\nSelecting one version displays it, selecting two versions compare"
		.backup.content.diff insert end "\nthem.\n"
		.backup.content.diff insert end "\nThe Backup History is only a short time versioning. \"Time\" means"
		.backup.content.diff insert end "\nthat there is an automatic cleanup of old versions. How many days"
		.backup.content.diff insert end "\nYou are able to roll back can be configured by You. Setting the"
		.backup.content.diff insert end "\ntime to zero days disables the whole backup thing."
		.backup.content.diff insert end "\n"
		.backup.content.diff insert end "\nAt the moment the cache reservers ${sSize}."
		.backup.content.diff insert end "\n"
		.backup.content.diff insert end "\nPlease note that this functionality isn't intended to replace"
		.backup.content.diff insert end "\ncommon software version control systems!"
		.backup.content.diff insert end "\n"

	}
	.backup.content.diff configure -state disabled
}



# History loeschen (ueberarbeitet wird bei jedem Speichervorgang)
proc backup_clean {} {
	global sProgNameShort
	if { [ winfo exists .backup ] } {
		destroy .backup
	}
	set iSize 0
	foreach sBackFile [ glob -nocomplain -directory [ file join "~" ".cache" $sProgNameShort ] * ] {
		incr iSize [ file size $sBackFile ]
		file delete $sBackFile
	}
	return [ format_filesize $iSize ]
}
if { $iBackupHistory < 1 } {
	backup_clean
}


# speichern der Fenstergroesse
set sDiffConfFile [ file join "~" ".config" $sProgNameShort "diff.tcl" ]
proc diffwinsizesave {} {
	global sDiffConfFile
	set oFile [ open $sDiffConfFile w ]
	puts $oFile "# auto generated file - modifying this doesn't make any sense..."
	puts $oFile "set iDiffWidth [ winfo width .backup.content ]"
	puts $oFile "set iDiffHeight [ winfo height .backup.content ]"
	close $oFile
}


# eigentliche Funktion
proc window_backup {} {
	global sDiffConfFile aCompare sProgName gLogo32 gCancel sProgNameShort sFileActive sColorBackgroundHighlighted sColorForegroundActivated sColorBackgroundHighlighted sColorForeground iTabIndent

	if { [ winfo exists .filemenu ] } {
		destroy .filemenu
	}
	if { [ winfo exists .backup ] } {
		raise .backup
	} else {


		# History auslesen
		set sHistoryFile [ file join "~" ".cache" $sProgNameShort "index.tcl" ]
		set lHistory [ list ]
		if { [ file exists $sHistoryFile ] } {
			set oFile [ open $sHistoryFile r ]
			set lTmp [ read $oFile ]
			close $oFile
			foreach lEntry $lTmp {
				if { [ lindex $lEntry 0 ] == $sFileActive } {
					set sBakFile [ file join "~" ".cache" $sProgNameShort [ lindex $lEntry 1 ] ]
					set sDate [ clock format [ lindex [ split [ lindex $lEntry 1 ] "_" ] 0 ] -format {%Y-%m-%d %H:%M:%S} ]
					lappend lHistory [ list $sDate $sBakFile ]
				}
			}
		}

		# aktuell gespeicherte Datei hinzufuegen
		if { [ file exists $sFileActive ] } {
			lappend lHistory [ list [::msgcat::mc {saved}] $sFileActive ]
		}

		# Stand im Editor
		if { [ file exists $sFileActive ] } {
			lappend lHistory [ list [::msgcat::mc {edited}] {++++++++} ]
		}

		# Fenster initialisieren
		toplevel     .backup
		wm title     .backup "${sProgName}: [::msgcat::mc {Backup History}]"
		wm resizable .backup true true
		wm transient .backup .
		wm withdraw  .backup

		# Kopf
		ttk::label .backup.title -text " ${sProgName}: [::msgcat::mc {Backup History}]" -font GuiFontHead -image $gLogo32 -compound left -padding 10

		# Frame
		if { [ file exists $sDiffConfFile ] } {
			source $sDiffConfFile
			ttk::frame .backup.content -padding {5 0} -width $iDiffWidth -height $iDiffHeight
		} else {
			# eine Mindestgroesse beim ersten Aufruf
			ttk::frame .backup.content -padding {5 0} -width 850 -height 450
		}

		# Liste
		sframe new .backup.content.list
		set wContent [ sframe content .backup.content.list ]
		set iCount -1
		foreach lBackup $lHistory {
			incr iCount
			button           ${wContent}.v${iCount}_restore -text "  \u2b08  " -command "backup_restore [ lindex $lBackup 1 ]" -borderwidth 0 -highlightthickness 0 -padx 0 -pady 0 -background $sColorBackgroundHighlighted -foreground $sColorForegroundActivated -activebackground $sColorBackgroundHighlighted -activeforeground $sColorForeground -font GuiFontHead
			set aCompare(${iCount}) 0
			ttk::checkbutton ${wContent}.v${iCount}_compare -text "[ lindex ${lBackup} 0 ] " -onvalue 1 -offvalue 0 -variable aCompare(${iCount}) -command { backup_compare }
			grid ${wContent}.v${iCount}_restore -row $iCount -column 0 -sticky nse  -pady {1 0}
			grid ${wContent}.v${iCount}_compare -row $iCount -column 2 -sticky nesw -pady {1 0}
			balloon ${wContent}.v${iCount}_restore [::msgcat::mc {restore}]
			balloon ${wContent}.v${iCount}_compare [::msgcat::mc {view or compare}]
			bind ${wContent}.v${iCount}_restore <Button-4> { .backup.content.list.canvas yview scroll -1 units }
			bind ${wContent}.v${iCount}_restore <Button-5> { .backup.content.list.canvas yview scroll  1 units }
			bind ${wContent}.v${iCount}_compare <Button-4> { .backup.content.list.canvas yview scroll -1 units }
			bind ${wContent}.v${iCount}_compare <Button-5> { .backup.content.list.canvas yview scroll  1 units }
			# Dummy-Element um beim Compare leicher die Dateinamen zu ermitteln
			label .backup.file${iCount} -text [ lindex ${lBackup} 1 ]
			if { [ lindex ${lBackup} 0 ] == [::msgcat::mc {saved}] || [ lindex ${lBackup} 0 ] == [::msgcat::mc {edited}] } {
				${wContent}.v${iCount}_restore configure -state disabled
			}
		}

		# Diff
		text .backup.content.diff -padx 5 -pady 5 -relief flat -font EditFont -tabs "[ expr { ${iTabIndent} * [ font measure EditFont 0 ] } ] left" -highlightthickness 0 -tabstyle wordprocessor -wrap none -state disabled -yscrollcommand { .backup.content.scrolly set } -xscrollcommand { .backup.content.scrollx set }
		ttk::scrollbar .backup.content.scrollx -orient horizontal -command { .backup.content.diff xview }
		ttk::scrollbar .backup.content.scrolly -orient vertical   -command { .backup.content.diff yview }
		.backup.content.diff tag configure inserted     -foreground "#00aa00" -underline  true
		.backup.content.diff tag configure deleted      -foreground "#aa0000" -overstrike true
		.backup.content.diff tag configure titletext    -font EditFontBold
		.backup.content.diff tag configure headlinetext -font EditFontHead

		# Grid der Contentelemente
		grid .backup.content.list    -row 0 -column 0 -sticky ns -rowspan 2
		grid .backup.content.diff    -row 0 -column 1 -sticky nesw
		grid .backup.content.scrolly -row 0 -column 2 -sticky ns
		grid .backup.content.scrollx -row 1 -column 1 -sticky ew
		grid columnconfigure .backup.content 1 -weight 1
		grid rowconfigure    .backup.content 0 -weight 1
		grid propagate       .backup.content 0

		# Button
		ttk::frame .backup.close -padding 5
		ttk::button .backup.close.button -text [::msgcat::mc {Close}] -image $gCancel -compound left -command {
			diffwinsizesave
			destroy .backup
		}
		pack .backup.close.button -fill x

		# dieses mal Grid, denn sonst verschwindet wegen fehlendem Minsize der Close-Button beim Resize...
		grid .backup.title   -row 0 -column 0 -sticky we
		grid .backup.content -row 1 -column 0 -sticky nesw
		grid .backup.close   -row 2 -column 0 -sticky we
		grid rowconfigure    .backup 1 -weight 1
		grid columnconfigure .backup 0 -weight 1

		bind .backup <Escape> {
			diffwinsizesave
			destroy .backup
		}
		backup_compare
		wm deiconify  .backup
		if { $iCount >= 0 } {
			update
			.backup.content.list.canvas configure -width [ expr [ winfo reqwidth ${wContent}.v0_restore ] + [ winfo reqwidth ${wContent}.v0_compare ] ]
			.backup.content.list.canvas yview moveto 1
		}
		focus         .backup
		tkwait window .backup

	}

}


################################################################################
# FILE: tcltk/4230_svn.tcl

################################################################################
# subversion
#
# nur Baiscs vorhanden: commit und update
#
# automatisch vorhanden, wenn
#  a) ein basisverzeichnis gesetzt wurde, und
#  b) in diesem ein .svn-Verzeichnis existiert
#
################################################################################


# SVN Commit Notiz abfragen
set SvnChanged {}
set sSvnCommitMessage {}
proc svnmessage {} {
	global sSvnCommitMessage SvnChanged sProgName gLogo32 gCancel gOkey
	set sSvnCommitMessage {}

	if { [ winfo exists .svnmessage ] } {
		raise .svnmessage
	} else {

		toplevel     .svnmessage
		wm title     .svnmessage "${sProgName}: Subversion Commit"
		wm resizable .svnmessage true true
		wm transient .svnmessage .
		focus        .svnmessage

		# Kopf
		ttk::label .svnmessage.title -text " ${sProgName}: Subversion Commit" -font GuiFontHead -image $gLogo32 -compound left -padding 10
		pack .svnmessage.title -side top -fill x

		# Body Frame
		ttk::frame .svnmessage.f -padding {5 0}
		pack .svnmessage.f -side top -fill both -expand true

		# Hinweistext
		set sStatus {}
		set sSeparator ""
		foreach sChanged [ split $SvnChanged "\n" ] {
			append sStatus "${sSeparator}${sChanged}"
			set sSeparator "\n"
		}
		if { $sStatus != {} } {
			ttk::labelframe .svnmessage.f.status -text [::msgcat::mc {So far modified files:}] -padding 5
			pack .svnmessage.f.status -side top -fill x -pady {0 5}
			ttk::label .svnmessage.f.status.text -text $sStatus
			pack .svnmessage.f.status.text -anchor w
		}
		ttk::label .svnmessage.f.hint -text [::msgcat::mc {Important Note: Related files will be saved before a "svn commit" will be performed!}] -font GuiFontBold
		pack .svnmessage.f.hint -side top -fill x -pady {0 5}

		# Labelframe
		ttk::labelframe .svnmessage.f.body -text "Commit: [::msgcat::mc {Message}]" -padding 5
		pack .svnmessage.f.body -side top -fill both -expand true

		# Eingabefeld
		text .svnmessage.f.body.text -width 60 -height 15
		pack .svnmessage.f.body.text -fill both -expand true

		# Button-Frame
		ttk::frame .svnmessage.close -padding 5
		pack .svnmessage.close -side top -fill x

		# Abbrechen
		ttk::button .svnmessage.close.cancel -text [::msgcat::mc {Cancel}] -image $gCancel -compound left -command { destroy .svnmessage }
		pack .svnmessage.close.cancel -side left -padx {0 5}

		# Speichern
		ttk::button .svnmessage.close.save -text {Commit} -image $gOkey -compound left -command {
			set sSvnCommitMessage [ string trim [ .svnmessage.f.body.text get 1.0 end ] ]
			destroy .svnmessage
		}
		pack .svnmessage.close.save -side left -fill x -expand true

		# anzeigen, bindings usw.
		bind .svnmessage <Escape> { destroy .svnmessage }
		update
		wm minsize .svnmessage [ winfo reqwidth .svnmessage ] [ winfo reqheight .svnmessage ]
		focus .svnmessage.f.body.text
		tkwait window .svnmessage

	}
	return $sSvnCommitMessage
}


# Funktionen
proc svnfunctions {sAction sType sTarget} {
	global sSvnBinary SvnChanged lOpenFiles
	if { [ winfo exists .svnmenu ] } {
		destroy .svnmenu
	}
	set sReturn {}
	if { $sAction == "status" } {

		# Status
		set SvnChanged [ exec $sSvnBinary status $sTarget ]
		tk_messageBox -parent . -title "Subversion: [::msgcat::mc {Status}]" -message "Subversion: [::msgcat::mc {Status}]\n\n${SvnChanged}" -icon info -type ok

	} elseif { $sAction == "commit" } {
		set SvnChanged {}
		if { $sType == "file" } {

			# Commit Datei
			if { [ exec $sSvnBinary status -q $sTarget ] == "" } {
				tk_messageBox -parent . -title {Subversion} -message [::msgcat::mc {There is nothing to commit.}] -icon info -type ok
			} else {
				set sText [ svnmessage ]
				if { $sText == "" } {
					tk_messageBox -parent . -title {Subversion} -message [::msgcat::mc {Commit aborted: Got no message.}] -icon info -type ok
				} else {
					file_save $sTarget
					set sReturn [ exec $sSvnBinary commit -m $sText $sTarget ]
				}
			}

		} elseif { $sType == "project" } {

			# Commit Projekt
			set SvnChanged [ exec $sSvnBinary status -q $sTarget ]
			if { $SvnChanged == "" } {
				tk_messageBox -parent . -title {Subversion} -message [::msgcat::mc {There is nothing to commit.}] -icon info -type ok
			} else {
				set sText [ svnmessage ]
				if { $sText == "" } {
					tk_messageBox -parent . -title {Subversion} -message [::msgcat::mc {Commit aborted: Got no message.}] -icon info -type ok
				} else {
					file_save_all
					set sReturn [ exec $sSvnBinary commit -m $sText $sTarget ]
				}
			}

		}
	} elseif { $sAction == "update" } {
		if { $sType == "file" } {

			# Update Datei
			if { [ tk_messageBox -parent . -title {Subversion} -message [::msgcat::mc {Note that running "svn update" may overwrite your local copy and forces a reload in the editor.}] -icon question -type okcancel ] == "ok" } {
				set i [ lsearch -exact -index 0 $lOpenFiles $sTarget ]
				if { $i >= 0 } {
					set sReturn [ exec $sSvnBinary update $sTarget ]
					set iFileIdentifier [ lindex [ lindex $lOpenFiles $i ] 2 ]
					file_dropdown_reload .editor.f${iFileIdentifier}.title.file $sTarget 0
				}
			}

		} elseif { $sType == "project" } {

			# Update Projekt
			if { [ tk_messageBox -parent . -title {Subversion} -message [::msgcat::mc {Note that running "svn update" may overwrite your local copy and forces a reload in the editor.}] -icon question -type okcancel ] == "ok" } {
				set sReturn [ exec $sSvnBinary update $sTarget ]
				foreach lTmp $lOpenFiles {
					set iFileIdentifier [ lindex $lTmp 2 ]
					file_dropdown_reload .editor.f${iFileIdentifier}.title.file [ lindex $lTmp 0 ] 0
				}
			}

		}
	}
	set sReturn [ string trim $sReturn ]
	if { $sReturn != "" } {
		 tk_messageBox -parent . -title {Subversion} -message [::msgcat::mc {Subversion returned the following information:}] -detail $sReturn -icon info -type ok
	}
}


# Dropdown
proc svn_dropdown {wWidget sFile sSessionBaseDir} {
	if { [ winfo exists .svnmenu ] } {
		raise .svnmenu
	} else {
		global sColorBackgroundHighlighted sColorForeground sColorForegroundActivated sColorBackgroundSelected
		set sFileDir [ file dirname $sFile ]

		# Editor Widget
		set wEditor "${wWidget}.text.t"

		# Fenster initialisieren
		toplevel            .svnmenu
		wm overrideredirect .svnmenu true
		wm geometry         .svnmenu +[ winfo rootx ${wWidget}.title.svn ]+[ winfo rooty ${wWidget}.title.svn ]
		set wMenu ".svnmenu.frame"
		frame $wMenu -borderwidth 0 -background $sColorForeground -padx 1 -pady 1
		pack $wMenu -fill x

		# Status
		button ${wMenu}.status -text "  [::msgcat::mc {Status}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "svnfunctions status project ${sSessionBaseDir}"
		pack ${wMenu}.status -side top -fill x -anchor w

		# Update
		label ${wMenu}.update -text "  \u2b0a [::msgcat::mc {Update}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForegroundActivated -pady 2 -padx 0 -borderwidth 0 -highlightthickness 0
		pack ${wMenu}.update -side top -fill x -anchor w -pady 1

    # Update: File
    button ${wMenu}.update_file -text "  [::msgcat::mc {File}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "svnfunctions update file ${sFile}"
		pack ${wMenu}.update_file -side top -fill x -anchor w

    # Update: Project
    button ${wMenu}.update_project -text "  [::msgcat::mc {Project}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "svnfunctions update project ${sSessionBaseDir}"
		pack ${wMenu}.update_project -side top -fill x -anchor w

		# Commit
		label ${wMenu}.commit -text "  \u2b08 [::msgcat::mc {Commit}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForegroundActivated -pady 2 -padx 0 -borderwidth 0 -highlightthickness 0
		pack ${wMenu}.commit -side top -fill x -anchor w -pady 1

		# Commit: File
		button ${wMenu}.commit_file -text "  [::msgcat::mc {File}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "svnfunctions commit file ${sFile}"
		pack ${wMenu}.commit_file -side top -fill x -anchor w

    # Commit: Project
    button ${wMenu}.commit_project -text "  [::msgcat::mc {Project}]  " -anchor w -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -pady 0 -padx 0 -borderwidth 0 -highlightthickness 0 -command "svnfunctions commit project ${sSessionBaseDir}"
		pack ${wMenu}.commit_project -side top -fill x -anchor w

		# Fenster zeigen
		update
		raise .svnmenu
		focus .svnmenu

		# Fenster beim Verlassen oder mit Escape schliessen
		bind $wMenu <Leave> {
			if { [ winfo exists .svnmenu ] } {
				destroy .svnmenu
			}
		}
		bind .svnmenu <Escape> {
			if { [ winfo exists .svnmenu ] } {
				destroy .svnmenu
			}
		}

	}

}


################################################################################
# FILE: tcltk/4280_hltext.tcl

################################################################################
# hltext - ein Highlight Text Widget
# abgeaenderte Variante des ctext 3 Widgets
################################################################################

namespace eval hltext {}

#win is used as a unique token to create arrays for each hltext instance
proc hltext::getAr {win suffix name} {
	set arName __hltext[set win][set suffix]
	uplevel [list upvar \#0 $arName $name]
	return $arName
}

proc hltext {win args} {
	if { [ llength $args ] & 1 } {
		return -code error "invalid number of arguments given to hltext (uneven number after window) : $args"
	}

	frame $win -class hltext

	set tmp [text .__hltextTemp]

	hltext::getAr $win config ar

	set ar(-fg) [$tmp cget -foreground]
	set ar(-bg) [$tmp cget -background]
	set ar(-font) [$tmp cget -font]
	set ar(-relief) [$tmp cget -relief]
	destroy $tmp
	set ar(-yscrollcommand) ""
	set ar(-linemap) 1
	set ar(-linemapfg) $ar(-fg)
	set ar(-linemapbg) $ar(-bg)
	set ar(-linemap_mark_command) {}
	set ar(-linemap_markable) 1
	set ar(-linemap_select_fg) black
	set ar(-linemap_select_bg) yellow
	set ar(-highlight) 1
	set ar(win) $win
	set ar(modified) 0
	set ar(commentsAfterId) ""
	set ar(highlightAfterId) ""

	set ar(hltextFlags) [ list -yscrollcommand -linemap -linemapfg -linemapbg -font -linemap_mark_command -highlight -linemap_markable -linemap_select_fg -linemap_select_bg ]

	array set ar $args

	foreach flag {foreground background} short {fg bg} {
		if {[info exists ar(-$flag)] == 1} {
			set ar(-$short) $ar(-$flag)
			unset ar(-$flag)
		}
	}

	# Now remove flags that will confuse text and those that need modification:
	foreach arg $ar(hltextFlags) {
		if {[set loc [lsearch $args $arg]] >= 0} {
			set args [lreplace $args $loc [expr {$loc + 1}]]
		}
	}

	text $win.l -font $ar(-font) -width 1 -height 1 -relief $ar(-relief) -fg $ar(-linemapfg) -bg $ar(-linemapbg) -takefocus 0

	set topWin [winfo toplevel $win]
	bindtags $win.l [list $win.l $topWin all]

	if {$ar(-linemap) == 1} {
		grid $win.l -sticky ns -row 0 -column 0
	}

	set args [concat $args [list -yscrollcommand [list hltext::event:yscroll $win $ar(-yscrollcommand)]]]

	#escape $win, because it could have a space
	eval text \$win.t -font \$ar(-font) $args

	grid $win.t -row 0 -column 1 -sticky news
	grid rowconfigure $win 0 -weight 100
	grid columnconfigure $win 1 -weight 100

	bind $win.t <Configure> [list hltext::linemapUpdate $win]
	bind $win.l <ButtonPress-1> [list hltext::linemapToggleMark $win %y]
	rename $win __hltextJunk$win
	rename $win.t $win._t

	bind $win <Destroy> [list hltext::event:Destroy $win %W]
	bindtags $win.t [linsert [bindtags $win.t] 0 $win]

	interp alias {} $win {} hltext::instanceCmd $win
	interp alias {} $win.t {} $win

	# If the user wants C comments they should call hltext::enableComments
	hltext::disableComments $win
	hltext::modified $win 0
	hltext::buildArgParseTable $win

	return $win
}

proc hltext::event:yscroll {win clientData args} {
	hltext::linemapUpdate $win
	if { $clientData == "" } {
		return
	}
	uplevel \#0 $clientData $args
}

proc hltext::event:Destroy {win dWin} {
	if {![string equal $win $dWin]} {
		return
	}

	hltext::getAr $win config configAr

	catch {after cancel $configAr(commentsAfterId)}
	catch {after cancel $configAr(highlightAfterId)}

	catch {rename $win {}}
	interp alias {} $win.t {}
	hltext::clearHighlightClasses $win
	array unset [hltext::getAr $win config ar]
}

# This stores the arg table within the config array for each instance. It's used by the configure instance command.
proc hltext::buildArgParseTable win {
	set argTable [list]

	lappend argTable any -linemap_mark_command {
		set configAr(-linemap_mark_command) $value
		break
	}

	lappend argTable {1 true yes} -linemap {
		grid $self.l -sticky ns -row 0 -column 0
		grid columnconfigure $self 0 -minsize [winfo reqwidth $self.l]
		set configAr(-linemap) 1
		break
	}

	lappend argTable {0 false no} -linemap {
		grid forget $self.l
		grid columnconfigure $self 0 -minsize 0
		set configAr(-linemap) 0
		break
	}

	lappend argTable any -yscrollcommand {
		set cmd [list $self._t config -yscrollcommand [list hltext::event:yscroll $self $value]]
		if {[catch $cmd res]} {
			return $res
		}
		set configAr(-yscrollcommand) $value
		break
	}

	lappend argTable any -linemapfg {
		if {[catch {winfo rgb $self $value} res]} {
			return -code error $res
		}
		$self.l config -fg $value
		set configAr(-linemapfg) $value
		break
	}

	lappend argTable any -linemapbg {
		if {[catch {winfo rgb $self $value} res]} {
			return -code error $res
		}
		$self.l config -bg $value
		set configAr(-linemapbg) $value
		break
	}

	lappend argTable any -font {
		if {[catch {$self.l config -font $value} res]} {
			return -code error $res
		}
		$self._t config -font $value
		set configAr(-font) $value
		break
	}

	lappend argTable {0 false no} -highlight {
		set configAr(-highlight) 0
		break
	}

	lappend argTable {1 true yes} -highlight {
		set configAr(-highlight) 1
		break
	}

	lappend argTable {0 false no} -linemap_markable {
		set configAr(-linemap_markable) 0
		break
	}

	lappend argTable {1 true yes} -linemap_markable {
		set configAr(-linemap_markable) 1
		break
	}

	lappend argTable any -linemap_select_fg {
		if {[catch {winfo rgb $self $value} res]} {
			return -code error $res
		}
		set configAr(-linemap_select_fg) $value
		$self.l tag configure lmark -foreground $value
		break
	}

	lappend argTable any -linemap_select_bg {
		if {[catch {winfo rgb $self $value} res]} {
			return -code error $res
		}
		set configAr(-linemap_select_bg) $value
		$self.l tag configure lmark -background $value
		break
	}

	hltext::getAr $win config ar
	set ar(argTable) $argTable
}

proc hltext::commentsAfterIdle {win} {
	hltext::getAr $win config configAr
	if {"" eq $configAr(commentsAfterId)} {
		set configAr(commentsAfterId) [after idle [list hltext::comments $win [set afterTriggered 1]]]
	}
}

proc hltext::highlightAfterIdle {win lineStart lineEnd} {
	hltext::getAr $win config configAr
	if {"" eq $configAr(highlightAfterId)} {
		set configAr(highlightAfterId) [after idle [list hltext::highlight $win $lineStart $lineEnd [set afterTriggered 1]]]
	}
}

proc hltext::instanceCmd {self cmd args} {
	#slightly different than the RE used in hltext::comments
	set commentRE {\"|\\|'|/|\*}

	switch -glob -- $cmd {
		append {
			if {[catch {$self._t get sel.first sel.last} data] == 0} {
				clipboard append -displayof $self $data
			}
		}

		cget {
			set arg [lindex $args 0]
			hltext::getAr $self config configAr
			foreach flag $configAr(hltextFlags) {
				if {[string match ${arg}* $flag]} {
					return [set configAr($flag)]
				}
			}
			return [$self._t cget $arg]
		}

		conf* {
			hltext::getAr $self config configAr
			if {0 == [llength $args]} {
				set res [$self._t configure]
				set del [lsearch -glob $res -yscrollcommand*]
				set res [lreplace $res $del $del]
				foreach flag $configAr(hltextFlags) {
					lappend res [list $flag [set configAr($flag)]]
				}
				return $res
			}

			array set flags {}
			foreach flag $configAr(hltextFlags) {
				set loc [lsearch $args $flag]
				if {$loc < 0} {
					continue
				}

				if {[llength $args] <= ($loc + 1)} {
					#.t config -flag
					return [set configAr($flag)]
				}

				set flagArg [lindex $args [expr {$loc + 1}]]
				set args [lreplace $args $loc [expr {$loc + 1}]]
				set flags($flag) $flagArg
			}

			foreach {valueList flag cmd} $configAr(argTable) {
				if {[info exists flags($flag)]} {
					foreach valueToCheckFor $valueList {
						set value [set flags($flag)]
						if {[string equal "any" $valueToCheckFor]} $cmd elseif {[string equal $valueToCheckFor [set flags($flag)]]} $cmd
					}
				}
			}

			if {[llength $args]} {
				#we take care of configure without args at the top of this branch
				uplevel 1 [linsert $args 0 $self._t configure]
			}
		}

		copy {
			tk_textCopy $self
		}

		cut {
			if {[catch {$self.t get sel.first sel.last} data] == 0} {
				clipboard clear -displayof $self.t
				clipboard append -displayof $self.t $data
				$self delete [$self.t index sel.first] [$self.t index sel.last]
				hltext::modified $self 1
			}
		}

		delete {
			#delete n.n ?n.n

			set argsLength [llength $args]

			#first deal with delete n.n
			if {$argsLength == 1} {
				set deletePos [lindex $args 0]
				set prevChar [$self._t get $deletePos]

				$self._t delete $deletePos
				set char [$self._t get $deletePos]

				set prevSpace [hltext::findPreviousSpace $self._t $deletePos]
				set nextSpace [hltext::findNextSpace $self._t $deletePos]

				set lineStart [$self._t index "$deletePos linestart"]
				set lineEnd [$self._t index "$deletePos + 1 chars lineend"]

				set removeStart $lineStart
				set removeEnd $lineEnd

				foreach tag [$self._t tag names] {
					if {[string equal $tag "_cComment"] != 1} {
						$self._t tag remove $tag $removeStart $removeEnd
					}
				}

				set checkStr "$prevChar[set char]"

				if {[regexp $commentRE $checkStr]} {
					hltext::commentsAfterIdle $self
				}

				hltext::highlightAfterIdle $self $lineStart $lineEnd
				hltext::linemapUpdate $self
			} elseif {$argsLength == 2} {
				#now deal with delete n.n ?n.n?
				set deleteStartPos [lindex $args 0]
				set deleteEndPos [lindex $args 1]

				set data [$self._t get $deleteStartPos $deleteEndPos]

				set lineStart [$self._t index "$deleteStartPos linestart"]
				set lineEnd [$self._t index "$deleteEndPos + 1 chars lineend"]
				eval \$self._t delete $args

				foreach tag [$self._t tag names] {
					if {[string equal $tag "_cComment"] != 1} {
						$self._t tag remove $tag $lineStart $lineEnd
					}
				}

				if {[regexp $commentRE $data]} {
					hltext::commentsAfterIdle $self
				}

				hltext::highlightAfterIdle $self $lineStart $lineEnd
				if {[string first "\n" $data] >= 0} {
					hltext::linemapUpdate $self
				}
			} else {
				return -code error "invalid argument(s) sent to $self delete: $args"
			}
			hltext::modified $self 1
		}

		fastdelete {
			eval \$self._t delete $args
			hltext::modified $self 1
			hltext::linemapUpdate $self
		}

		fastinsert {
			eval \$self._t insert $args
			hltext::modified $self 1
			hltext::linemapUpdate $self
		}

		highlight {
			hltext::highlight $self [lindex $args 0] [lindex $args 1]
			hltext::comments $self
		}

		insert {
			if {[llength $args] < 2} {
				return -code error "please use at least 2 arguments to $self insert"
			}

			set insertPos [lindex $args 0]
			set prevChar [$self._t get "$insertPos - 1 chars"]
			set nextChar [$self._t get $insertPos]
			set lineStart [$self._t index "$insertPos linestart"]
			set prevSpace [hltext::findPreviousSpace $self._t ${insertPos}-1c]
			set data [lindex $args 1]
			eval \$self._t insert $args

			set nextSpace [hltext::findNextSpace $self._t insert]
			set lineEnd [$self._t index "insert lineend"]

			if {[$self._t compare $prevSpace < $lineStart]} {
				set prevSpace $lineStart
			}

			if {[$self._t compare $nextSpace > $lineEnd]} {
				set nextSpace $lineEnd
			}

			foreach tag [$self._t tag names] {
				if {[string equal $tag "_cComment"] != 1} {
					$self._t tag remove $tag $prevSpace $nextSpace
				}
			}

			set REData $prevChar
			append REData $data
			append REData $nextChar
			if {[regexp $commentRE $REData]} {
				hltext::commentsAfterIdle $self
			}

			hltext::highlightAfterIdle $self $lineStart $lineEnd

			hltext::modified $self 1
			hltext::linemapUpdate $self
		}

		paste {
			tk_textPaste $self
			hltext::modified $self 1
		}

		edit {
			set subCmd [lindex $args 0]
			set argsLength [llength $args]

			hltext::getAr $self config ar

			if {"modified" == $subCmd} {
				if {$argsLength == 1} {
					return $ar(modified)
				} elseif {$argsLength == 2} {
					set value [lindex $args 1]
					set ar(modified) $value
				} else {
					return -code error "invalid arg(s) to $self edit modified: $args"
				}
			} else {
				#Tk 8.4 has other edit subcommands that I don't want to emulate.
				return [uplevel 1 [linsert $args 0 $self._t $cmd]]
			}
		}

		default {
			return [uplevel 1 [linsert $args 0 $self._t $cmd]]
		}
	}
}

proc hltext::enableComments {win} {
	$win tag configure _cComment -foreground khaki
}
proc hltext::disableComments {win} {
	catch {$win tag delete _cComment}
}

proc hltext::comments {win {afterTriggered 0}} {
	if {[catch {$win tag cget _cComment -foreground}]} {
		#C comments are disabled
		return
	}

	if {$afterTriggered} {
		hltext::getAr $win config configAr
		set configAr(commentsAfterId) ""
	}

	set startIndex 1.0
	set commentRE {\\\\|\"|\\\"|\\'|'|/\*|\*/}
	set commentStart 0
	set isQuote 0
	set isSingleQuote 0
	set isComment 0
	$win tag remove _cComment 1.0 end
	while 1 {
		set index [$win search -count length -regexp $commentRE $startIndex end]

		if {$index == ""} {
			break
		}

		set endIndex [$win index "$index + $length chars"]
		set str [$win get $index $endIndex]
		set startIndex $endIndex

		if {$str == "\\\\"} {
			continue
		} elseif {$str == "\\\""} {
			continue
		} elseif {$str == "\\'"} {
			continue
		} elseif {$str == "\"" && $isComment == 0 && $isSingleQuote == 0} {
			if {$isQuote} {
				set isQuote 0
			} else {
				set isQuote 1
			}
		} elseif {$str == "'" && $isComment == 0 && $isQuote == 0} {
			if {$isSingleQuote} {
				set isSingleQuote 0
			} else {
				set isSingleQuote 1
			}
		} elseif {$str == "/*" && $isQuote == 0 && $isSingleQuote == 0} {
			if {$isComment} {
				#comment in comment
				break
			} else {
				set isComment 1
				set commentStart $index
			}
		} elseif {$str == "*/" && $isQuote == 0 && $isSingleQuote == 0} {
			if {$isComment} {
				set isComment 0
				$win tag add _cComment $commentStart $endIndex
				$win tag raise _cComment
			} else {
				#comment end without beginning
				break
			}
		}
	}
}

proc hltext::addHighlightClass {win class color keywords} {
	set ref [hltext::getAr $win highlight ar]
	foreach word $keywords {
		set ar($word) [list $class $color]
	}
	$win tag configure $class

	hltext::getAr $win classes classesAr
	set classesAr($class) [list $ref $keywords]
}

#For [ ] { } # etc.
proc hltext::addHighlightClassForSpecialChars {win class color chars} {
	set charList [split $chars ""]

	set ref [hltext::getAr $win highlightSpecialChars ar]
	foreach char $charList {
		set ar($char) [list $class $color]
	}
	$win tag configure $class

	hltext::getAr $win classes classesAr
	set classesAr($class) [list $ref $charList]
}

proc hltext::addHighlightClassForRegexp {win class color re} {
	set ref [hltext::getAr $win highlightRegexp ar]

	set ar($class) [list $re $color]
	$win tag configure $class

	hltext::getAr $win classes classesAr
	set classesAr($class) [list $ref $class]
}

#For things like $blah
proc hltext::addHighlightClassWithOnlyCharStart {win class color char} {
	set ref [hltext::getAr $win highlightCharStart ar]

	set ar($char) [list $class $color]
	$win tag configure $class

	hltext::getAr $win classes classesAr
	set classesAr($class) [list $ref $char]
}

proc hltext::deleteHighlightClass {win classToDelete} {
	hltext::getAr $win classes classesAr

	if {![info exists classesAr($classToDelete)]} {
		return -code error "$classToDelete doesn't exist"
	}

	foreach {ref keyList} [set classesAr($classToDelete)] {
		upvar #0 $ref refAr
		foreach key $keyList {
			if {![info exists refAr($key)]} {
				continue
			}
			unset refAr($key)
		}
	}
	unset classesAr($classToDelete)
}

proc hltext::getHighlightClasses win {
	hltext::getAr $win classes classesAr

	array names classesAr
}

proc hltext::findNextChar {win index char} {
	set i [$win index "$index + 1 chars"]
	set lineend [$win index "$i lineend"]
	while 1 {
		set ch [$win get $i]
		if {[$win compare $i >= $lineend]} {
			return ""
		}
		if {$ch == $char} {
			return $i
		}
		set i [$win index "$i + 1 chars"]
	}
}

proc hltext::findNextSpace {win index} {
	set i [$win index $index]
	set lineStart [$win index "$i linestart"]
	set lineEnd [$win index "$i lineend"]
	#Sometimes the lineend fails (I don't know why), so add 1 and try again.
	if {[$win compare $lineEnd == $lineStart]} {
		set lineEnd [$win index "$i + 1 chars lineend"]
	}

	while {1} {
		set ch [$win get $i]

		if {[$win compare $i >= $lineEnd]} {
			set i $lineEnd
			break
		}

		if {[string is space $ch]} {
			break
		}
		set i [$win index "$i + 1 chars"]
	}
	return $i
}

proc hltext::findPreviousSpace {win index} {
	set i [$win index $index]
	set lineStart [$win index "$i linestart"]
	while {1} {
		set ch [$win get $i]

		if {[$win compare $i <= $lineStart]} {
			set i $lineStart
			break
		}

		if {[string is space $ch]} {
			break
		}

		set i [$win index "$i - 1 chars"]
	}
	return $i
}

proc hltext::clearHighlightClasses {win} {
	hltext::getAr $win highlight ar
	array unset ar

	hltext::getAr $win highlightSpecialChars ar
	array unset ar

	hltext::getAr $win highlightRegexp ar
	array unset ar

	hltext::getAr $win highlightCharStart ar
	array unset ar

	hltext::getAr $win classes ar
	array unset ar
}

#This is a proc designed to be overwritten by the user. It can be used to update a cursor or animation while the text is being highlighted.
proc hltext::update {} {
}

proc hltext::highlight {win start end {afterTriggered 0}} {
	hltext::getAr $win config configAr

	if {$afterTriggered} {
		set configAr(highlightAfterId) ""
	}

	if {!$configAr(-highlight)} {
		return
	}

	set si $start
	set twin "$win._t"

	#The number of times the loop has run.
	set numTimesLooped 0
	set numUntilUpdate 600

	hltext::getAr $win highlight highlightAr
	hltext::getAr $win highlightSpecialChars highlightSpecialCharsAr
	hltext::getAr $win highlightRegexp highlightRegexpAr
	hltext::getAr $win highlightCharStart highlightCharStartAr

	while 1 {
		set res [$twin search -count length -regexp -- {([^\s\(\{\[\}\]\)\.\t\n\r;\"'\|,]+)} $si $end]
		if {$res == ""} {
			break
		}

		set wordEnd [$twin index "$res + $length chars"]
		set word [$twin get $res $wordEnd]
		set firstOfWord [string index $word 0]

		if {[info exists highlightAr($word)] == 1} {
			set wordAttributes [set highlightAr($word)]
			foreach {tagClass color} $wordAttributes break

			$twin tag add $tagClass $res $wordEnd
			$twin tag configure $tagClass -foreground $color

		} elseif {[info exists highlightCharStartAr($firstOfWord)] == 1} {
			set wordAttributes [set highlightCharStartAr($firstOfWord)]
			foreach {tagClass color} $wordAttributes break

			$twin tag add $tagClass $res $wordEnd
			$twin tag configure $tagClass -foreground $color

		}
		set si $wordEnd

		incr numTimesLooped
		if {$numTimesLooped >= $numUntilUpdate} {
			hltext::update
			set numTimesLooped 0
		}
	}

	foreach {ichar tagInfo} [array get highlightSpecialCharsAr] {
		set si $start
		foreach {tagClass color} $tagInfo break

		while 1 {
			set res [$twin search -- $ichar $si $end]
			if {"" == $res} {
				break
			}
			set wordEnd [$twin index "$res + 1 chars"]

			$twin tag add $tagClass $res $wordEnd
			$twin tag configure $tagClass -foreground $color
			set si $wordEnd

			incr numTimesLooped
			if {$numTimesLooped >= $numUntilUpdate} {
				hltext::update
				set numTimesLooped 0
			}
		}
	}

	foreach {tagClass tagInfo} [array get highlightRegexpAr] {
		set si $start
		foreach {re color} $tagInfo break
		while 1 {
			set res [$twin search -count length -regexp -- $re $si $end]
			if {"" == $res} {
				break
			}

			set wordEnd [$twin index "$res + $length chars"]
			$twin tag add $tagClass $res $wordEnd
			$twin tag configure $tagClass -foreground $color
			set si $wordEnd

			incr numTimesLooped
			if {$numTimesLooped >= $numUntilUpdate} {
				hltext::update
				set numTimesLooped 0
			}
		}
	}
}

proc hltext::linemapToggleMark {win y} {
	hltext::getAr $win config configAr

	if {!$configAr(-linemap_markable)} {
		return
	}

	set markChar [ $win.l index @0,$y ]
	set lineSelected [ lindex [ split $markChar {.} ] 0 ]
	set line [ string trim [ $win.l get $lineSelected.0 $lineSelected.end ] ]

	if {$line == ""} {
		return
	}

	hltext::getAr $win linemap linemapAr

	if {[info exists linemapAr($line)] == 1} {
		#It's already marked, so unmark it.
		array unset linemapAr $line
		hltext::linemapUpdate $win
		set type unmarked
	} else {
		#This means that the line isn't toggled, so toggle it.
		array set linemapAr [list $line {}]
		$win.l tag add lmark $markChar [$win.l index "$markChar lineend"]
		$win.l tag configure lmark -foreground $configAr(-linemap_select_fg) -background $configAr(-linemap_select_bg)
		set type marked
	}

	if {[string length $configAr(-linemap_mark_command)]} {
		uplevel #0 [linsert $configAr(-linemap_mark_command) end $win $type $line]
	}
}

# falls -yscrollcommand: args (wird nicht ausgewertet)
proc hltext::linemapUpdate {win args} {
	if { ! [ winfo exists ${win}.l ] } {
		return
	}

	set pixel 0
	set lastLine {}
	set lineList [list]
	set fontMetrics [font metrics [$win._t cget -font]]
	set incrBy [expr {1 + ([lindex $fontMetrics 5] / 2)}]

	while {$pixel < [winfo height $win.l]} {
		set idx [$win._t index @0,$pixel]

		if {$idx != $lastLine} {
			set line [lindex [split $idx .] 0]
			set lastLine $idx
			lappend lineList $line
		}
		incr pixel $incrBy
	}

	hltext::getAr $win linemap linemapAr

	$win.l delete 1.0 end
	set lastLine {}
	set iLength [ ${win}.l cget -width ]
	foreach line $lineList {
		if { $line == $lastLine } {
			$win.l insert end "\n"
		} else {
			set sName $line
			while { [ string length $sName ] < $iLength } {
				set sName " ${sName}"
			}
			if { [ info exists linemapAr($line) ] } {
				$win.l insert end "${sName}\n" lmark
			} else {
				$win.l insert end "${sName}\n"
			}
		}
		set lastLine $line
	}
	if {[llength $lineList] > 0} {
		linemapUpdateOffset $win $lineList
	}
	set endrow [lindex [split [$win._t index end-1c] .] 0]
	$win.l configure -width [string length $endrow]
}

# this code calculates the offset for the line numbering text widget and scrolls by the specified amount of pixels
proc hltext::linemapUpdateOffset {win lineList} {
	# reset view for line numbering widget
	$win.l yview 0.0

	# find the first line that is visible and calculate the corresponding line in the line numbers widget
	set lline 1
	foreach line $lineList {
		set tystart [lindex [$win.t bbox $line.0] 1]
		if {$tystart != ""} {
			break
		}
		incr lline
	}

	# return in case the line numbers text widget is not up to date
	if {[catch { set lystart [lindex [$win.l bbox $lline.0] 1] }]} {
		return
	}

	# return in case the bbox for any of the lines returned an empty value
	if {($tystart == "") || ($lystart == "")} {
		return
	}

	# calculate the offset and then scroll by specified number of pixels
	set offset [expr {$lystart - $tystart}]
	$win.l yview scroll $offset pixels
}

proc hltext::modified {win value} {
	hltext::getAr $win config ar
	set ar(modified) $value
	event generate $win <<Modified>>
	return $value
}


################################################################################
# FILE: tcltk/4290_sframe.tcl

################################################################################
# sframe - scrollbares canvas frame
################################################################################

namespace eval ::sframe {
	namespace ensemble create
	namespace export *

	proc new {wWidget} {
		global sColorBackground sColorScrollpicker sColorForegroundHighlighted sColorBackgroundHighlighted iScrollbarWidth

		# Basis Frame
		frame $wWidget

		# Canvas Element - immer so gross wie das Basis Frame
		set wCanvas [ canvas ${wWidget}.canvas -background $sColorBackground -borderwidth 0 -highlightthickness 0 -yscrollcommand "${wWidget}.scroll set" ]
		scrollbar ${wWidget}.scroll -background $sColorScrollpicker -activebackground $sColorForegroundHighlighted -troughcolor $sColorBackgroundHighlighted -borderwidth 0 -elementborderwidth 0 -width $iScrollbarWidth -orient vertical -command "${wCanvas} yview"

		# Container erstellen
		set wContainer [ frame ${wCanvas}.container -background $sColorBackground ]
		pack propagate $wContainer 0

		# Content Frame
		set wContent [ frame ${wContainer}.content -background $sColorBackground ]
		pack $wContent -anchor nw -fill both -expand true
		$wCanvas create window 0 0 -window $wContainer -anchor nw

		# Grid
		grid $wCanvas -row 0 -column 0 -sticky nsew
		grid rowconfigure    $wWidget 0 -weight 1
		grid columnconfigure $wWidget 0 -weight 1

		# Binding Groessenaenderung
		bind ${wWidget}.canvas <Expose> "::sframe::resize ${wWidget}"

		return $wWidget
	}

	# Widget fuer Content zurueckgeben
	proc content {wWidget} {
		return ${wWidget}.canvas.container.content
	}

	# Groessenaenderungen
	proc resize {wWidget} {

		# Widget Elemente
		set wCanvas    ${wWidget}.canvas
		set wContainer ${wCanvas}.container
		set wContent   ${wContainer}.content

		# Groessen ermitteln und setzen
		set iWidth  [ winfo width  $wCanvas ]
		if { [ winfo reqwidth $wContent ] > $iWidth } {
			set iWidth [ winfo reqwidth $wContent ]
		}
		set iHeight [ winfo height $wCanvas ]
		if { [ winfo reqheight $wContent ] > $iHeight } {
			set iHeight [ winfo reqheight $wContent ]
		}
		$wContainer configure -width $iWidth -height $iHeight

		# Canvas Scrollbereich auf Groesse des Containers setzen
		$wCanvas configure -scrollregion [ list 0 0 $iWidth $iHeight ]

		# Scrollbar anzeigen oder verbergen
		if { [ winfo reqheight $wContent ] > [ winfo height $wCanvas ] } {
			grid ${wWidget}.scroll -row 0 -column 1 -sticky ns
		} else {
			grid forget ${wWidget}.scroll
		}

		return
	}

}


################################################################################
# FILE: tcltk/5000_mainwindow.tcl

################################################################################
# main window ##################################################################
################################################################################

# Basis Fensterinfos
wm title     . $sProgName
wm iconname  . $sProgName
wm geometry  . $sWinGeometry
wm withdraw  .
wm iconphoto . -default $gLogo64 $gLogo48 $gLogo32 $gLogo16

# Window Maker...
wm command . [ concat $argv0 $argv ]
wm group . .

# Beenden abfangen
wm protocol . WM_DELETE_WINDOW {
	exiteditor
}



################################################################################
# Basiselemente
################################################################################

panedwindow .pane -orient horizontal -borderwidth 0 -relief flat -background $sColorBackground -showhandle 0 -sashwidth $iDistances
pack        .pane -side top -fill both -expand true

panedwindow .side -orient vertical -borderwidth 0 -relief flat -background $sColorSidebarPaneAdjust -showhandle 0 -sashwidth $iDistances
frame       .editor -borderwidth 0 -relief flat -background $sColorBackgroundHighlighted
.pane add   .side
.pane add   .editor

frame     .sidetop    -borderwidth 0 -relief flat
frame     .sidebottom -borderwidth 0 -relief flat
.side add .sidetop
.side add .sidebottom



################################################################################
# Mehrfachstart
################################################################################

set bPidFileCreated 0
if {  [ file exists $sPidFile ] } {
	button .sidetop.doublestart -background "#cc0000" -foreground "#ffffff" -text [::msgcat::mc {Am I running more than once?}] -borderwidth 0 -highlightthickness 0 -anchor w -padx $iDistances -pady 2 -command {
		set bPidFileCreated 1
		pack forget .sidetop.doublestart
		destroy .sidetop.doublestart
	}
	pack .sidetop.doublestart -side top -fill x
	balloon .sidetop.doublestart [::msgcat::mc {If that's not true just klick on me!}]
} else {
	set bPidFileCreated 1
	set oPidFile [ open $sPidFile w ]
	puts $oPidFile [ pid ]
	close $oPidFile
}



################################################################################
# Menu / Toolbar
################################################################################

set wToolbar ".sidetop.toolbar"
frame $wToolbar -background $sColorMenubarBackground
pack $wToolbar -side top -fill x

# Datei
set wMenuFile "${wToolbar}.file"
menubutton ${wToolbar}.file -background $sColorMenubarBackground -relief flat -borderwidth 0 -text [::msgcat::mc {File}] -image $gLogo16 -compound left -menu ${wMenuFile}.menu
pack ${wToolbar}.file -side left
menu ${wMenuFile}.menu -tearoff 0
set wLastSessionsMenu [ menu "${wToolbar}.file.sessions" -tearoff 0 -postcommand getLastSessions ]
proc getLastSessions {} {
	global wLastSessionsMenu sProgNameShort sColorBackgroundHighlighted sColorForeground sColorBackgroundSelected sColorForeground
	$wLastSessionsMenu delete 0 end
	set lTmp [ list ]
	foreach sSessionFile [ glob -nocomplain -directory [ file join "~" ".config" $sProgNameShort "session" ] *.tcl ] {
		lappend lTmp [ list [ file mtime $sSessionFile ] [ file rootname [ file tail $sSessionFile ] ] ]
	}
	foreach lEntry [ lrange [ lreverse [ lsort -index 0 $lTmp ] ] 0 9 ] {
		$wLastSessionsMenu add command -label [ lindex $lEntry 1 ] -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -command "loadsession [ lindex ${lEntry} 1 ] 1"
	}
}
${wMenuFile}.menu add cascade -label " [::msgcat::mc {Last Sessions}]" -image $gBlank -compound left -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -menu ${wLastSessionsMenu}
${wMenuFile}.menu add command -label " [::msgcat::mc {Settings}]" -image $gBlank -compound left -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -command window_settings
${wMenuFile}.menu add command -label " [::msgcat::mc {Clean Backup History}]" -image $gBlank -compound left -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -command {
	set sSize [ backup_clean ]
	tk_messageBox -parent . -title [::msgcat::mc {Done}] -message "[::msgcat::mc {Done. Freed space:}]\n${sSize}" -icon info -type ok
}
${wMenuFile}.menu add command -label " [::msgcat::mc {Quit}]" -accelerator "[::msgcat::mc {Ctrl}]+q" -image $gCancel -compound left -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -command exiteditor

# Hilfe
set wMenuHelp "${wToolbar}.help"
menubutton ${wToolbar}.help -background $sColorMenubarBackground -relief flat -borderwidth 0 -text [::msgcat::mc {Help}] -menu ${wMenuHelp}.menu
pack ${wToolbar}.help -side right
menu ${wMenuHelp}.menu -tearoff 0
${wMenuHelp}.menu add command -label " [::msgcat::mc {Documentation}]" -accelerator "F1" -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -command { window_help }
${wMenuHelp}.menu add command -label " [::msgcat::mc {About}]\u2026" -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -command { window_about }

################################################################################
# Tabs Session / File
################################################################################

# Tabs
frame .sidetop.sessionframe -background $sColorBackgroundHighlighted
pack  .sidetop.sessionframe -side top -fill x
frame .sidetop.line         -background $sColorForegroundHighlighted
pack  .sidetop.line         -side top -fill x

button .sidetop.sessionframe.tab_session -text [::msgcat::mc {Sessions}] -pady 2 -padx $iDistances -borderwidth 0 -highlightthickness 0 -command {
	pack forget .sidetop.file
	pack .sidetop.session -side top -fill both -expand true
	.sidetop.sessionframe.tab_session configure -background $sColorBackground            -foreground $sColorForegroundActivated   -activebackground $sColorBackground            -activeforeground $sColorForegroundActivated
	.sidetop.sessionframe.tab_file    configure -background $sColorBackgroundHighlighted -foreground $sColorForegroundHighlighted -activebackground $sColorBackgroundHighlighted -activeforeground $sColorForeground
}
button .sidetop.sessionframe.tab_file -text [::msgcat::mc {Files}] -pady 2 -padx $iDistances -borderwidth 0 -highlightthickness 0 -command {
	pack forget .sidetop.session
	pack .sidetop.file -side top -fill both -expand true
	.sidetop.sessionframe.tab_session configure -background $sColorBackgroundHighlighted -foreground $sColorForegroundHighlighted -activebackground $sColorBackgroundHighlighted -activeforeground $sColorForeground
	.sidetop.sessionframe.tab_file    configure -background $sColorBackground            -foreground $sColorForegroundActivated   -activebackground $sColorBackground            -activeforeground $sColorForegroundActivated
}
pack .sidetop.sessionframe.tab_session -side left -fill x -expand true
pack .sidetop.sessionframe.tab_file    -side left -fill x -expand true

# Tab Session
sframe new .sidetop.session
set wSessionSessions [ sframe content .sidetop.session ]

# Tab Files
sframe new .sidetop.file
set wSessionFiles [ sframe content .sidetop.file ]

# wird das Pane verschoben, muessen evtl die Scollbars angepasst werden...
bind .side <ButtonRelease> {
	::sframe resize .sidetop.file
	::sframe resize .sidetop.session
}

# verfuegbaren Sessions einlesen - Variable ist bereits gesetzt
foreach sSessionFile [ lsort -dictionary [ glob -nocomplain -directory [ file join "~" ".config" $sProgNameShort "session" ] *.tcl ] ] {
	incr iCountSessionIdentifier
	set sName [ file rootname [ file tail $sSessionFile ] ]
	button ${wSessionSessions}.fclose${iCountSessionIdentifier}  -borderwidth 0 -highlightthickness 0 -padx 0 -pady 0 -foreground $sColorForegroundActivated -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground -font GuiFontHead -text " \u2620 "   -command "deletesession ${sName} ${wSessionSessions}.fclose${iCountSessionIdentifier} ${wSessionSessions}.fselect${iCountSessionIdentifier}"
	button ${wSessionSessions}.fselect${iCountSessionIdentifier} -borderwidth 0 -highlightthickness 0 -padx 0 -pady 0 -foreground $sColorForeground          -activebackground $sColorBackgroundSelected -activeforeground $sColorForeground                   -text " ${sName} " -command "loadsession ${sName} 1" -anchor w
	grid ${wSessionSessions}.fclose${iCountSessionIdentifier}  -row $iCountSessionIdentifier -column 0 -sticky ns
	grid ${wSessionSessions}.fselect${iCountSessionIdentifier} -row $iCountSessionIdentifier -column 1 -sticky nesw
	bind ${wSessionSessions}.fclose${iCountSessionIdentifier}  <Button-4> { .sidetop.session.canvas yview scroll -1 units }
	bind ${wSessionSessions}.fclose${iCountSessionIdentifier}  <Button-5> { .sidetop.session.canvas yview scroll  1 units }
	bind ${wSessionSessions}.fselect${iCountSessionIdentifier} <Button-4> { .sidetop.session.canvas yview scroll -1 units }
	bind ${wSessionSessions}.fselect${iCountSessionIdentifier} <Button-5> { .sidetop.session.canvas yview scroll  1 units }
}
if { $iCountSessionIdentifier > 0 } {
	grid columnconfigure $wSessionSessions 1 -weight 1
}


################################################################################
# Suchen / Ersetzen
################################################################################

ttk::frame .sidebottom.search -padding $iDistances
pack .sidebottom.search -side top -fill x
ttk::label .sidebottom.search.title -text "[::msgcat::mc {Search}] & [::msgcat::mc {Replace}]"

# Suchen
set sSearchString ""
ttk::combobox .sidebottom.search.search -takefocus 0 -exportselection 0 -width 15 -values $lSearchHistory -textvariable sSearchString
button .sidebottom.search.searchgo -borderwidth 0 -highlightthickness 0 -padx 0 -pady 0 -background $sColorBackgroundHighlighted -foreground $sColorForegroundActivated -activebackground $sColorBackgroundHighlighted -activeforeground $sColorForeground -font GuiFontHead -text " \u2714 " -command { searchtext }
balloon .sidebottom.search.searchgo [::msgcat::mc {just search}]
bind .sidebottom.search.search <Escape> {
	cleanhighlightsearch
	set sSearchString {}
}

# Ersetzen
set sReplaceString ""
ttk::combobox .sidebottom.search.replace -takefocus 0 -exportselection 0 -width 15 -values $lReplaceHistory -textvariable sReplaceString
button .sidebottom.search.replacego -borderwidth 0 -highlightthickness 0 -padx 0 -pady 0 -background $sColorBackgroundHighlighted -foreground $sColorForegroundActivated -activebackground $sColorBackgroundHighlighted -activeforeground $sColorForeground -font GuiFontHead -text " \u2714 " -command { replacetext }
balloon .sidebottom.search.replacego [::msgcat::mc {search & replace}]
bind .sidebottom.search.replace <Escape> {
	cleanhighlightsearch
	set sReplaceString {}
}

# Modus
set     lReplaceModes [ list ]
lappend lReplaceModes [::msgcat::mc {File}]
lappend lReplaceModes [::msgcat::mc {Selection}]
lappend lReplaceModes [::msgcat::mc {Session}]
set     sReplaceMode  [ lindex $lReplaceModes $iReplaceModeIndex ]
ttk::combobox .sidebottom.search.mode -takefocus 0 -exportselection 0 -state readonly -values $lReplaceModes -textvariable sReplaceMode
balloon       .sidebottom.search.mode [::msgcat::mc {replace only: target}]
bind .sidebottom.search.mode <<ComboboxSelected>> {
	if { [ %W get ] == [::msgcat::mc {File}] } {
		.sidebottom.search.confirm configure -state normal
	} else {
		set iReplaceConfirm 0
		.sidebottom.search.confirm configure -state disabled
	}
}

# Gross-Kleinschreibung
set     lCaseSensitive [ list ]
lappend lCaseSensitive {A == a}
lappend lCaseSensitive {A != a}
set     sCaseSensitive [ lindex $lCaseSensitive $iCaseSensitiveIndex ]
ttk::combobox .sidebottom.search.case -takefocus 0 -exportselection 0 -state readonly -values $lCaseSensitive -textvariable sCaseSensitive
balloon       .sidebottom.search.case [::msgcat::mc {case sensitive on/off}]

# bestaetigen ja/nein
ttk::checkbutton .sidebottom.search.confirm -text [::msgcat::mc {confirm replace}] -variable iReplaceConfirm -onvalue 1 -offvalue 0 -takefocus 0
if { $sReplaceMode  == [::msgcat::mc {File}] } {
	.sidebottom.search.confirm configure -state normal
} else {
	set iReplaceConfirm 0
	.sidebottom.search.confirm configure -state disabled
}

# Grid der Elemente
grid .sidebottom.search.title     -row 0 -column 0 -columnspan 3 -sticky w
grid .sidebottom.search.search    -row 1 -column 0 -columnspan 2 -sticky we                         -pady $iDistances
grid .sidebottom.search.searchgo  -row 1 -column 2               -sticky ns -padx "${iDistances} 0" -pady $iDistances
grid .sidebottom.search.replace   -row 2 -column 0 -columnspan 2 -sticky we
grid .sidebottom.search.replacego -row 2 -column 2               -sticky ns -padx "${iDistances} 0"
grid .sidebottom.search.mode      -row 3 -column 0               -sticky we -padx "0 ${iDistances}" -pady $iDistances
grid .sidebottom.search.case      -row 3 -column 1 -columnspan 2 -sticky we -padx "${iDistances} 0" -pady $iDistances
grid .sidebottom.search.confirm   -row 4 -column 0 -columnspan 3 -sticky w
grid columnconfigure .sidebottom.search 0 -weight 1
grid columnconfigure .sidebottom.search 1 -weight 1
grid columnconfigure .sidebottom.search 2 -weight 0

################################################################################
# alternativer Dialog zum Bestaetigen - wird erst im Suchen und Ersetzen Vorgang angezeigt
ttk::frame  .sidebottom.replace
ttk::label  .sidebottom.replace.title -text "[::msgcat::mc {Search}] & [::msgcat::mc {Replace}]" -font GuiFontBold
pack        .sidebottom.replace.title -side top -fill x -padx $iDistances -pady "${iDistances} 0"
ttk::frame  .sidebottom.replace.pos
pack        .sidebottom.replace.pos -side top -fill x
ttk::label  .sidebottom.replace.pos.t_line   -text "[::msgcat::mc {Line}] "
ttk::label  .sidebottom.replace.pos.line
ttk::label  .sidebottom.replace.pos.t_column -text "[::msgcat::mc {Column}] "
ttk::label  .sidebottom.replace.pos.column
ttk::label  .sidebottom.replace.pos.search_t  -text "[::msgcat::mc {Search}] "   -font GuiFontItalic
ttk::label  .sidebottom.replace.pos.search
ttk::label  .sidebottom.replace.pos.replace_t -text "[::msgcat::mc {Replace}] "  -font GuiFontItalic
ttk::label  .sidebottom.replace.pos.replace
ttk::label  .sidebottom.replace.pos.colrow_t  -text "[::msgcat::mc {Position}] " -font GuiFontItalic
ttk::label  .sidebottom.replace.pos.colrow
grid        .sidebottom.replace.pos.search_t  -row 0 -column 0 -sticky e -padx "${iDistances} 0"
grid        .sidebottom.replace.pos.search    -row 0 -column 1 -sticky w
grid        .sidebottom.replace.pos.replace_t -row 1 -column 0 -sticky e -padx "${iDistances} 0"
grid        .sidebottom.replace.pos.replace   -row 1 -column 1 -sticky w
grid        .sidebottom.replace.pos.colrow_t  -row 2 -column 0 -sticky e -padx "${iDistances} 0"
grid        .sidebottom.replace.pos.colrow    -row 2 -column 1 -sticky w
ttk::frame  .sidebottom.replace.action
pack        .sidebottom.replace.action -side bottom -fill x -pady "${iDistances} 0"
button      .sidebottom.replace.action.cancel -text "  \u2717  "                          -borderwidth 0 -highlightthickness 0 -padx 0 -pady 2 -background $sColorBackgroundHighlighted -foreground $sColorForegroundActivated -activebackground $sColorBackground -activeforeground $sColorForegroundActivated -command "set sSearchAndReplaceUserAction {cancel}"
button      .sidebottom.replace.action.no     -text "  [::msgcat::mc {No}]  "             -borderwidth 0 -highlightthickness 0 -padx 0 -pady 2 -background $sColorBackgroundHighlighted -foreground $sColorForeground          -activebackground $sColorBackground -activeforeground $sColorForegroundActivated -command "set sSearchAndReplaceUserAction {no}"
button      .sidebottom.replace.action.yes    -text "  \u2714 [::msgcat::mc {Replace}]  " -borderwidth 0 -highlightthickness 0 -padx 0 -pady 2 -background $sColorBackgroundHighlighted -foreground $sColorForeground          -activebackground $sColorBackground -activeforeground $sColorForegroundActivated -command "set sSearchAndReplaceUserAction {yes}"
pack        .sidebottom.replace.action.cancel -side left
pack        .sidebottom.replace.action.no     -side left
pack        .sidebottom.replace.action.yes    -side left -fill x -expand true
balloon     .sidebottom.replace.action.cancel [::msgcat::mc {cancel search & replace operation}]
balloon     .sidebottom.replace.action.no     [::msgcat::mc {skip this position}]
balloon     .sidebottom.replace.action.yes    [::msgcat::mc {replace this position}]


################################################################################
# Treebrowser
################################################################################

set wFiles ".sidebottom.filetree"
ttk::frame $wFiles
pack $wFiles -side top -fill both -expand true
ttk::treeview  ${wFiles}.tree -columns {path type} -displaycolumns {} -show tree -selectmode browse -yscroll "${wFiles}.scroll set"
ttk::scrollbar ${wFiles}.scroll -orient vertical -command "${wFiles}.tree yview"

grid ${wFiles}.tree   -row 0 -column 0 -sticky nesw
grid ${wFiles}.scroll -row 0 -column 1 -sticky ns
grid columnconfigure $wFiles 0 -weight 1
grid rowconfigure    $wFiles 0 -weight 1

bind ${wFiles}.tree <<TreeviewOpen>> {
	updatefiletree %W [ %W focus ]
}
bind ${wFiles}.tree <ButtonRelease> {
	showhidetreescroll
}
bind ${wFiles}.tree <Double-Button-1> {
	set lSelected [ %W item [ %W focus ] -values ]
	if { [ lindex $lSelected 1 ] == "file" } {
		set sTmpFile [ lindex $lSelected 0 ]
		set sTmpExtension [ string tolower [ file extension $sTmpFile ] ]
		set sTmpSyntax ""
		foreach lTmp $lFileTypes {
			foreach sTmp [ lindex $lTmp 1 ] {
				if { $sTmp == $sTmpExtension } {
					set sTmpSyntax [ lindex $lTmp 0 ]
				}
			}
		}
		openfile [ list $sTmpFile $sTmpSyntax 1.0 ] 1
		.sidetop.file.canvas yview moveto 1
	}
}

# Buttons
frame   .sidebottom.treebuttons
pack    .sidebottom.treebuttons -side top -fill x
button  .sidebottom.treebuttons.refresh -text "\u21c4" -borderwidth 0 -highlightthickness 0 -padx 0 -pady 0 -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackground -activeforeground $sColorForegroundActivated -font GuiFontHead -command { updatefiletree_session }
button  .sidebottom.treebuttons.home    -text "~"      -borderwidth 0 -highlightthickness 0 -padx 0 -pady 0 -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackground -activeforeground $sColorForegroundActivated -font GuiFontHead -command { updatefiletree_home }
button  .sidebottom.treebuttons.root    -text "/"      -borderwidth 0 -highlightthickness 0 -padx 0 -pady 0 -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackground -activeforeground $sColorForegroundActivated -font GuiFontHead -command { updatefiletree_root }
button  .sidebottom.treebuttons.dirup   -text "\u2b06" -borderwidth 0 -highlightthickness 0 -padx 0 -pady 0 -background $sColorBackgroundHighlighted -foreground $sColorForeground -activebackground $sColorBackground -activeforeground $sColorForegroundActivated -font GuiFontHead -command { updatefiletree_up }
balloon .sidebottom.treebuttons.refresh [::msgcat::mc {refreshs session file tree}]
balloon .sidebottom.treebuttons.home    [::msgcat::mc {file tree basis: home directory}]
balloon .sidebottom.treebuttons.root    [::msgcat::mc {file tree basis: root}]
balloon .sidebottom.treebuttons.dirup   [::msgcat::mc {file tree one level up}]
pack    .sidebottom.treebuttons.refresh -side left -fill x -expand true
pack    .sidebottom.treebuttons.home    -side left -fill x -expand true
pack    .sidebottom.treebuttons.root    -side left -fill x -expand true
pack    .sidebottom.treebuttons.dirup   -side left -fill x -expand true


################################################################################
# FILE: tcltk/5100_config.tcl

################################################################################
# Einstellungen
################################################################################

proc window_settings {} {
	global bStructList sProgName gLogo32 gCancel gOkey lLanguages sGuiLanguage sFontGui iFontGui bTooltips iDistances iScrollbarWidth bDarkEditor lAllColorAccents lColorAccents sTtkTheme sFontEdit iFontEdit sIndent iTabIndent sLineFeedType iLongLine bAutoClose iBottomLinesInView bTextCursorBlock iTextCursorWidth bTextCursorBlink iTextCursorBlinkOn iTextCursorBlinkOff sInsertDateFormat iBackupHistory sDiff

	if { [ winfo exists .conf ] } {
		raise .conf
	} else {


		# wir arbeiten hier besser stets mit einer Kopie, so dass nix verdreht in die aktuelle Session funken kann
		global csGuiLanguage csFontGui ciFontGui cbTooltips ciDistances ciScrollbarWidth csTtkTheme cbDarkEditor clColorAccents csFontEdit ciFontEdit csIndent ciTabIndent csLineFeedType ciLongLine cbAutoClose ciBottomLinesInView cbTextCursorBlock ciTextCursorWidth cbTextCursorBlink ciTextCursorBlinkOn ciTextCursorBlinkOff csInsertDateFormat ciBackupHistory csDiff
		set csGuiLanguage        $sGuiLanguage
		set csFontGui            $sFontGui
		set ciFontGui            $iFontGui
		set cbTooltips           $bTooltips
		set ciDistances          $iDistances
		set ciScrollbarWidth     $iScrollbarWidth
		set cbDarkEditor         $bDarkEditor
		set clColorAccents       $lColorAccents
		set csTtkTheme           $sTtkTheme
		set csFontEdit           $sFontEdit
		set ciFontEdit           $iFontEdit
		if { $sIndent == " " } {
			set csIndent           {Blank}
		} else {
			set csIndent           {Tab}
		}
		set ciTabIndent          $iTabIndent
		set csLineFeedType       $sLineFeedType
		set ciLongLine           $iLongLine
		set cbAutoClose          $bAutoClose
		set ciBottomLinesInView  $iBottomLinesInView
		set cbTextCursorBlock    $bTextCursorBlock
		set ciTextCursorWidth    $iTextCursorWidth
		set cbTextCursorBlink    $bTextCursorBlink
		set ciTextCursorBlinkOn  $iTextCursorBlinkOn
		set ciTextCursorBlinkOff $iTextCursorBlinkOff
		set csInsertDateFormat   $sInsertDateFormat
		set ciBackupHistory      $iBackupHistory
		set csDiff               $sDiff


		# Liste der Schriften wird mehrfach benoetigt, daher einmal holen
		set lAllFonts [ lsort -unique -dictionary [ font families ] ]



		##############################################################################
		# Fenster initalisieren
		toplevel     .conf
		wm title     .conf "${sProgName}: [::msgcat::mc {Settings}]"
		wm resizable .conf true true
		wm transient .conf .
		focus        .conf

		# Kopf
		ttk::label .conf.title -text " ${sProgName}: [::msgcat::mc {Settings}]" -font GuiFontHead -image $gLogo32 -compound left -padding 10
		pack .conf.title -side top -fill x

		# Tabs
		ttk::notebook .conf.tab -padding 5
		pack .conf.tab -side top -fill both -expand true
		ttk::frame .conf.tab.tab0 -padding 5
		pack .conf.tab.tab0
		ttk::frame .conf.tab.tab1 -padding 5
		pack .conf.tab.tab1
		ttk::frame .conf.tab.tab2 -padding 5
		pack .conf.tab.tab2
		ttk::frame .conf.tab.tab3 -padding 5
		pack .conf.tab.tab3
		.conf.tab add .conf.tab.tab0 -text [::msgcat::mc {Interface}]
		.conf.tab add .conf.tab.tab1 -text [::msgcat::mc {Appearance}]
		.conf.tab add .conf.tab.tab2 -text [::msgcat::mc {Editor}]
		.conf.tab add .conf.tab.tab3 -text [::msgcat::mc {Else}]


		##############################################################################
		# Allgemeines

		# Sprache
		ttk::label      .conf.tab.tab0.language_txt -text [::msgcat::mc {Language}]
		ttk::menubutton .conf.tab.tab0.language     -menu .conf.tab.tab0.language.menu -text [ lindex [ lindex $lLanguages [ lsearch -exact -index 1 $lLanguages $sGuiLanguage ] ] 0 ]
		menu .conf.tab.tab0.language.menu -tearoff 0
		foreach lTmp [ lsort -dictionary $lLanguages ] {
			.conf.tab.tab0.language.menu add radiobutton -label [ lindex $lTmp 0 ] -value [ lindex $lTmp 1 ] -variable csGuiLanguage -command ".conf.tab.tab0.language configure -text [ lindex ${lTmp} 0 ]"
		}

		# Tooltips
		ttk::label       .conf.tab.tab0.ttip_txt -text [::msgcat::mc {Tooltips}]
		ttk::checkbutton .conf.tab.tab0.ttip     -text [::msgcat::mc {show tooltips}] -variable cbTooltips -onvalue 1 -offvalue 0 -takefocus 0

		# Abstaende
		ttk::label   .conf.tab.tab0.dist_txt -text [::msgcat::mc {Distances}]
		ttk::frame   .conf.tab.tab0.dist
		ttk::spinbox .conf.tab.tab0.dist.select -state readonly -textvariable ciDistances -from 1 -to 30 -width 3 -justify center -takefocus 0
		ttk::label   .conf.tab.tab0.dist.hint -text " [::msgcat::mc {space between some elements}]" -font GuiFontSmall
		pack .conf.tab.tab0.dist.select .conf.tab.tab0.dist.hint -side left

		# Scrollbar Breite
		ttk::label   .conf.tab.tab0.scroll_txt -text [::msgcat::mc {Scrollbar}]
		ttk::frame   .conf.tab.tab0.scroll
		ttk::spinbox .conf.tab.tab0.scroll.select -state readonly -textvariable ciScrollbarWidth -from 3 -to 30 -width 3 -justify center -takefocus 0
		ttk::label   .conf.tab.tab0.scroll.hint -text " [::msgcat::mc {thickness of the plain scrollbars}]" -font GuiFontSmall
		pack .conf.tab.tab0.scroll.select .conf.tab.tab0.scroll.hint -side left

		# Schrift
		ttk::labelframe .conf.tab.tab0.font -text [::msgcat::mc {Font}] -padding 5

		# Schriftart
		listbox        .conf.tab.tab0.font.gui     -width 25 -height 8 -selectmode single -exportselection false -activestyle none -highlightthickness 0 -yscrollcommand { .conf.tab.tab0.font.scroll set }
		ttk::scrollbar .conf.tab.tab0.font.scroll  -command { .conf.tab.tab0.font.gui yview } -orient vertical
		ttk::label     .conf.tab.tab0.font.example -text "This is just a 0815\nexample text." -font GuiFont
		foreach sTmp $lAllFonts {
			if { [ string index $sTmp 0 ] != "@" } {
				.conf.tab.tab0.font.gui insert end $sTmp
				if { $sTmp == $csFontGui } {
					.conf.tab.tab0.font.gui selection set end
					.conf.tab.tab0.font.gui see end
				}
			}
		}
		bind .conf.tab.tab0.font.gui <ButtonRelease-1> { set csFontGui [ %W get [ %W curselection ] ] }

		# Schriftgroesse
		ttk::frame   .conf.tab.tab0.font.size
		ttk::label   .conf.tab.tab0.font.size.txt    -text "[::msgcat::mc {Font Size}] "
		ttk::spinbox .conf.tab.tab0.font.size.select -state readonly -textvariable ciFontGui -from 4 -to 30 -width 3 -justify center -takefocus 0
		pack .conf.tab.tab0.font.size.txt .conf.tab.tab0.font.size.select -side left

		# Grid zur Schrift
		grid .conf.tab.tab0.font.gui     -row 0 -column 0
		grid .conf.tab.tab0.font.scroll  -row 0 -column 1 -sticky ns
		grid .conf.tab.tab0.font.example -row 0 -column 2 -sticky w  -padx {5 0}
		grid .conf.tab.tab0.font.size    -row 1 -column 0 -sticky w  -pady {5 0} -columnspan 3

		# Tracings fuer Beispieltext
		trace variable csFontGui w "examplefont gui ;#"
		trace variable ciFontGui w "examplefont gui ;#"

		# Grid Tab 0
		grid .conf.tab.tab0.language_txt -row 0 -column 0 -sticky e  -padx {0 5}
		grid .conf.tab.tab0.language     -row 0 -column 1 -sticky w
		grid .conf.tab.tab0.ttip_txt     -row 1 -column 0 -sticky e  -padx {0 5} -pady 5
		grid .conf.tab.tab0.ttip         -row 1 -column 1 -sticky w              -pady 5
		grid .conf.tab.tab0.dist_txt     -row 2 -column 0 -sticky e  -padx {0 5}
		grid .conf.tab.tab0.dist         -row 2 -column 1 -sticky w
		grid .conf.tab.tab0.scroll_txt   -row 3 -column 0 -sticky e  -padx {0 5} -pady 5
		grid .conf.tab.tab0.scroll       -row 3 -column 1 -sticky w              -pady 5
		grid .conf.tab.tab0.font         -row 4 -column 0 -sticky we                     -columnspan 2
		grid columnconfigure .conf.tab.tab0 1 -weight 1



		##############################################################################
		# Erscheinungsbild

		# Schwarz-Weiss
		ttk::labelframe  .conf.tab.tab1.darklight -text [::msgcat::mc {Base Color}] -padding 5
		pack             .conf.tab.tab1.darklight -side top -fill x
		ttk::radiobutton .conf.tab.tab1.darklight.light -variable cbDarkEditor -value 0 -takefocus 0 -text [::msgcat::mc {white background}]
		ttk::radiobutton .conf.tab.tab1.darklight.dark  -variable cbDarkEditor -value 1 -takefocus 0 -text [::msgcat::mc {black background}]
		pack .conf.tab.tab1.darklight.light -side top -anchor w
		pack .conf.tab.tab1.darklight.dark  -side top -anchor w

		# Farbschema Wahl
		ttk::labelframe  .conf.tab.tab1.accent -text [::msgcat::mc {Accent Colors}] -padding 5
		pack             .conf.tab.tab1.accent -side top -fill x -pady 10
		foreach sColor $lAllColorAccents {
			global "sChecked${sColor}"
			set "sChecked${sColor}" 0
			ttk::checkbutton .conf.tab.tab1.accent.${sColor} -text [::msgcat::mc $sColor] -variable "sChecked${sColor}" -onvalue 1 -offvalue 0 -takefocus 0
			pack             .conf.tab.tab1.accent.${sColor} -side top -anchor w
			if { [ lsearch $clColorAccents $sColor ] >= 0 } {
				set "sChecked${sColor}" 1
			}
		}

		# Ttk Themes
		ttk::labelframe .conf.tab.tab1.ttksel     -text [::msgcat::mc {Ttk Widget Theme}] -padding 5
		pack            .conf.tab.tab1.ttksel     -side top -fill x
		ttk::menubutton .conf.tab.tab1.ttksel.config -menu .conf.tab.tab1.ttksel.config.menu -text $csTtkTheme
		pack            .conf.tab.tab1.ttksel.config -side top -anchor w
		menu .conf.tab.tab1.ttksel.config.menu -tearoff 0
		foreach sTmpTheme [ lsort -dictionary [ ttk::themes ] ] {
			.conf.tab.tab1.ttksel.config.menu add radiobutton -label $sTmpTheme -value $sTmpTheme -variable csTtkTheme -command ".conf.tab.tab1.ttksel.config configure -text ${sTmpTheme}"
		}



		##############################################################################
		# Editor

		# Schrift Editor - Art
		ttk::labelframe .conf.tab.tab2.font -text [::msgcat::mc {Font}] -padding 5

		# Schriftart
		listbox        .conf.tab.tab2.font.gui     -width 25 -height 5 -selectmode single -exportselection false -activestyle none -highlightthickness 0 -yscrollcommand { .conf.tab.tab2.font.scroll set }
		ttk::scrollbar .conf.tab.tab2.font.scroll  -command { .conf.tab.tab2.font.gui yview } -orient vertical
		ttk::label     .conf.tab.tab2.font.example -text "This is just a 0815\nexample text." -font EditFont
		foreach sTmp $lAllFonts {
			if { [ font metrics [ list "${sTmp}" ] -fixed ] } {
				if { [ string index $sTmp 0 ] != "@" } {
					.conf.tab.tab2.font.gui insert end $sTmp
					if { $sTmp == $csFontEdit } {
						.conf.tab.tab2.font.gui selection set end
						.conf.tab.tab2.font.gui see end
					}
				}
			}
		}
		bind .conf.tab.tab2.font.gui <ButtonRelease-1> { set csFontEdit [ %W get [ %W curselection ] ] }

		# Schriftgroesse Editor
		ttk::frame   .conf.tab.tab2.font.size
		ttk::label   .conf.tab.tab2.font.size.txt    -text "[::msgcat::mc {Font Size}] "
		ttk::spinbox .conf.tab.tab2.font.size.select -state readonly -textvariable ciFontEdit -from 4 -to 30 -width 3 -justify center -takefocus 0
		pack .conf.tab.tab2.font.size.txt .conf.tab.tab2.font.size.select -side left

		# Grid zur Schrift
		grid .conf.tab.tab2.font.gui     -row 0 -column 0
		grid .conf.tab.tab2.font.scroll  -row 0 -column 1 -sticky ns
		grid .conf.tab.tab2.font.example -row 0 -column 2 -sticky w  -padx {5 0}
		grid .conf.tab.tab2.font.size    -row 1 -column 0 -sticky w  -pady {5 0} -columnspan 3

		# Tracings fuer Beispieltext
		trace variable csFontEdit w "examplefont editor ;#"
		trace variable ciFontEdit w "examplefont editor ;#"

		# csIndent
		ttk::label      .conf.tab.tab2.indent_txt -text [::msgcat::mc {Indent}]
		ttk::frame      .conf.tab.tab2.indent
		ttk::menubutton .conf.tab.tab2.indent.sel     -menu .conf.tab.tab2.indent.sel.menu -text [::msgcat::mc ${csIndent}]
		ttk::label      .conf.tab.tab2.indent.hint -text " [::msgcat::mc {default indent character}]" -font GuiFontSmall
		pack .conf.tab.tab2.indent.sel .conf.tab.tab2.indent.hint -side left
		menu .conf.tab.tab2.indent.sel.menu -tearoff 0
		.conf.tab.tab2.indent.sel.menu add radiobutton -label [::msgcat::mc {Tab}]   -value {Tab}   -variable csIndent -command { .conf.tab.tab2.indent.sel configure -text [::msgcat::mc {Tab}] }
		.conf.tab.tab2.indent.sel.menu add radiobutton -label [::msgcat::mc {Blank}] -value {Blank} -variable csIndent -command { .conf.tab.tab2.indent.sel configure -text [::msgcat::mc {Blank}] }

		# ciTabIndent
		ttk::label   .conf.tab.tab2.tabindent_txt -text [::msgcat::mc {Tab Indent}]
		ttk::frame   .conf.tab.tab2.tabindent
		ttk::spinbox .conf.tab.tab2.tabindent.sel -state readonly -textvariable ciTabIndent -from 1 -to 8 -width 2 -justify center -takefocus 0
		ttk::label   .conf.tab.tab2.tabindent.hint -text " [::msgcat::mc {display tabs with the width of X blanks}]" -font GuiFontSmall
		pack .conf.tab.tab2.tabindent.sel .conf.tab.tab2.tabindent.hint -side left

		# csLineFeedType
		ttk::label      .conf.tab.tab2.lf_txt -text [::msgcat::mc {Linefeed}]
		ttk::menubutton .conf.tab.tab2.lf     -menu .conf.tab.tab2.lf.menu -text [::msgcat::mc ${csLineFeedType}]
		menu .conf.tab.tab2.lf.menu -tearoff 0
		.conf.tab.tab2.lf.menu add radiobutton -label [::msgcat::mc {LF}]   -value {LF}   -variable csLineFeedType -command { .conf.tab.tab2.lf configure -text [::msgcat::mc {LF}] }
		.conf.tab.tab2.lf.menu add radiobutton -label [::msgcat::mc {CR}]   -value {CR}   -variable csLineFeedType -command { .conf.tab.tab2.lf configure -text [::msgcat::mc {CR}] }
		.conf.tab.tab2.lf.menu add radiobutton -label [::msgcat::mc {CRLF}] -value {CRLF} -variable csLineFeedType -command { .conf.tab.tab2.lf configure -text [::msgcat::mc {CRLF}] }

		# ciLongLine
		ttk::label   .conf.tab.tab2.longline_txt -text [::msgcat::mc {Long Lines}]
		ttk::frame   .conf.tab.tab2.longline
		ttk::spinbox .conf.tab.tab2.longline.sel -state readonly -textvariable ciLongLine -from 10 -to 500 -width 4 -justify center -takefocus 0
		ttk::label   .conf.tab.tab2.longline.hint -text " [::msgcat::mc {get a hint if lines are longer}]" -font GuiFontSmall
		pack .conf.tab.tab2.longline.sel .conf.tab.tab2.longline.hint -side left

		# cbAutoClose
		ttk::label       .conf.tab.tab2.brackets_txt -text [::msgcat::mc {Brackets}]
		ttk::checkbutton .conf.tab.tab2.brackets     -text [::msgcat::mc {auto bracket completion}] -variable cbAutoClose -onvalue 1 -offvalue 0 -takefocus 0

		# ciBottomLinesInView
		ttk::label   .conf.tab.tab2.bottomlines_txt -text [::msgcat::mc {Bottom Lines}]
		ttk::frame   .conf.tab.tab2.bottomlines
		ttk::spinbox .conf.tab.tab2.bottomlines.sel -state readonly -textvariable ciBottomLinesInView -from 0 -to 15 -width 3 -justify center -takefocus 0
		ttk::label   .conf.tab.tab2.bottomlines.hint -text " [::msgcat::mc {try to display at least X lines after the cursor}]" -font GuiFontSmall
		pack .conf.tab.tab2.bottomlines.sel .conf.tab.tab2.bottomlines.hint -side left

		# csInsertDateFormat
		ttk::label .conf.tab.tab2.dateformat_txt -text [::msgcat::mc {Date Format}]
		ttk::frame .conf.tab.tab2.dateformat
		ttk::entry .conf.tab.tab2.dateformat.txt -width 20 -textvariable csInsertDateFormat
		ttk::label   .conf.tab.tab2.dateformat.hint -text " [::msgcat::mc {in Tcl "clock" format}]" -font GuiFontSmall
		pack .conf.tab.tab2.dateformat.txt .conf.tab.tab2.dateformat.hint -side left


		# Cursor
		ttk::labelframe .conf.tab.tab2.cursor -text [::msgcat::mc {Cursor}] -padding 5
		ttk::checkbutton .conf.tab.tab2.cursor.block -text [::msgcat::mc {blockcursor}] -variable cbTextCursorBlock -onvalue 1 -offvalue 0 -takefocus 0 -command {
			if { $cbTextCursorBlock } {
				.conf.tab.tab2.cursor.width configure -state disabled
			} else {
				.conf.tab.tab2.cursor.width configure -state readonly
			}
		}
		ttk::checkbutton .conf.tab.tab2.cursor.blink -text [::msgcat::mc {blinking cursor}] -variable cbTextCursorBlink -onvalue 1 -offvalue 0 -takefocus 0 -command {
			if { $cbTextCursorBlink } {
				.conf.tab.tab2.cursor.blinkon  configure -state readonly
				.conf.tab.tab2.cursor.blinkoff configure -state readonly
			} else {
				.conf.tab.tab2.cursor.blinkon  configure -state disabled
				.conf.tab.tab2.cursor.blinkoff configure -state disabled
			}
		}
		ttk::label   .conf.tab.tab2.cursor.blinkontxt -text [::msgcat::mc {blink on duration}]
		ttk::spinbox .conf.tab.tab2.cursor.blinkon    -state readonly -textvariable ciTextCursorBlinkOn -from 100 -to 1000 -width 5 -justify center -takefocus 0
		ttk::label   .conf.tab.tab2.cursor.blinkofftxt -text [::msgcat::mc {blink off duration}]
		ttk::spinbox .conf.tab.tab2.cursor.blinkoff    -state readonly -textvariable ciTextCursorBlinkOff -from 100 -to 1000 -width 5 -justify center -takefocus 0
		ttk::label   .conf.tab.tab2.cursor.widthtxt -text [::msgcat::mc {cursor width}]
		ttk::spinbox .conf.tab.tab2.cursor.width    -state readonly -textvariable ciTextCursorWidth -from 1 -to 30 -width 3 -justify center -takefocus 0

		# Grid Cursor
		grid .conf.tab.tab2.cursor.block       -row 0 -column 0 -sticky w             -columnspan 2
		grid .conf.tab.tab2.cursor.blink       -row 1 -column 0 -sticky w             -columnspan 2
		grid .conf.tab.tab2.cursor.blinkontxt  -row 2 -column 0 -sticky e -padx {0 5}
		grid .conf.tab.tab2.cursor.blinkon     -row 2 -column 1 -sticky w
		grid .conf.tab.tab2.cursor.blinkofftxt -row 3 -column 0 -sticky e -padx {0 5}
		grid .conf.tab.tab2.cursor.blinkoff    -row 3 -column 1 -sticky w
		grid .conf.tab.tab2.cursor.widthtxt    -row 4 -column 0 -sticky e -padx {0 5}
		grid .conf.tab.tab2.cursor.width       -row 4 -column 1 -sticky w

		# Cursor: disabled / readonly setzen
		if { $cbTextCursorBlock } {
			.conf.tab.tab2.cursor.width configure -state disabled
		} else {
			.conf.tab.tab2.cursor.width configure -state readonly
		}
		if { $cbTextCursorBlink } {
			.conf.tab.tab2.cursor.blinkon  configure -state readonly
			.conf.tab.tab2.cursor.blinkoff configure -state readonly
		} else {
			.conf.tab.tab2.cursor.blinkon  configure -state disabled
			.conf.tab.tab2.cursor.blinkoff configure -state disabled
		}

		# Grid Tab 2
		grid .conf.tab.tab2.font            -row 0 -column 0 -sticky we                     -columnspan 2
		grid .conf.tab.tab2.indent_txt      -row 1 -column 0 -sticky e  -padx {0 5} -pady 5
		grid .conf.tab.tab2.indent          -row 1 -column 1 -sticky w              -pady 5
		grid .conf.tab.tab2.tabindent_txt   -row 2 -column 0 -sticky e  -padx {0 5}
		grid .conf.tab.tab2.tabindent       -row 2 -column 1 -sticky w
		grid .conf.tab.tab2.lf_txt          -row 3 -column 0 -sticky e  -padx {0 5} -pady 5
		grid .conf.tab.tab2.lf              -row 3 -column 1 -sticky w              -pady 5
		grid .conf.tab.tab2.longline_txt    -row 4 -column 0 -sticky e  -padx {0 5}
		grid .conf.tab.tab2.longline        -row 4 -column 1 -sticky w
		grid .conf.tab.tab2.brackets_txt    -row 5 -column 0 -sticky e  -padx {0 5} -pady 5
		grid .conf.tab.tab2.brackets        -row 5 -column 1 -sticky w              -pady 5
		grid .conf.tab.tab2.bottomlines_txt -row 6 -column 0 -sticky e  -padx {0 5}
		grid .conf.tab.tab2.bottomlines     -row 6 -column 1 -sticky w
		grid .conf.tab.tab2.dateformat_txt  -row 7 -column 0 -sticky e  -padx {0 5} -pady 5
		grid .conf.tab.tab2.dateformat      -row 7 -column 1 -sticky w              -pady 5
		grid .conf.tab.tab2.cursor          -row 8 -column 0 -sticky we                     -columnspan 2
		grid columnconfigure .conf.tab.tab2 1 -weight 1



		##############################################################################
		# Sonstiges

		# ciBackupHistory
		ttk::label   .conf.tab.tab3.backuphist_txt -text [::msgcat::mc {Backup History}]
		ttk::frame   .conf.tab.tab3.backuphist
		ttk::spinbox .conf.tab.tab3.backuphist.select -state readonly -textvariable ciBackupHistory -from 0 -to 31 -width 3 -justify center -takefocus 0
		ttk::label   .conf.tab.tab3.backuphist.hint -text " [::msgcat::mc {days to keep backup copies}]" -font GuiFontSmall
		pack .conf.tab.tab3.backuphist.select .conf.tab.tab3.backuphist.hint -side left

		# csDiff
		ttk::labelframe .conf.tab.tab3.diff -text [::msgcat::mc {Compare Files}] -padding 5
		if { $bStructList } {
			ttk::radiobutton .conf.tab.tab3.diff.intern -variable csDiff -value "internal" -takefocus 0 -text [::msgcat::mc {internal}]
		} else {
			ttk::radiobutton .conf.tab.tab3.diff.intern -variable csDiff -value "internal" -takefocus 0 -text "[::msgcat::mc {internal}] ([::msgcat::mc {tcllib required}])" -state disabled
		}
		set sExecDiff [ auto_execok "diff" ]
		if { $sExecDiff == "" } {
			ttk::radiobutton .conf.tab.tab3.diff.diff -variable csDiff -value "diff" -takefocus 0 -text [::msgcat::mc {diff (not available!)}] -state disabled
		} else {
			ttk::radiobutton .conf.tab.tab3.diff.diff -variable csDiff -value "diff" -takefocus 0 -text $sExecDiff
		}
		pack .conf.tab.tab3.diff.intern -side top -anchor w
		pack .conf.tab.tab3.diff.diff -side top -anchor w

		grid .conf.tab.tab3.backuphist_txt -row 0 -column 0 -sticky e
		grid .conf.tab.tab3.backuphist     -row 0 -column 1 -sticky w  -padx {5 0}
		grid .conf.tab.tab3.diff           -row 1 -column 0 -sticky we             -pady {5 0} -columnspan 2
		grid columnconfigure .conf.tab.tab3 1 -weight 1



		##############################################################################
		# Cancel + Save
		ttk::frame .conf.hint
		pack .conf.hint -side top -fill x
		ttk::label .conf.hint.txt -text [::msgcat::mc {Note that any changes here requires a restart to take effect.}] -font GuiFontSmall
		pack .conf.hint.txt -side top -anchor w -padx 5
		ttk::frame .conf.close -padding 5
		pack .conf.close -side top -fill x
		ttk::button .conf.close.cancel -text [::msgcat::mc {Cancel}] -image $gCancel -compound left -command { destroy .conf }
		pack .conf.close.cancel -side left -padx {0 5}
		ttk::button .conf.close.save -text [::msgcat::mc {Save}] -image $gOkey -compound left -command {

			# Akzentfarben ermitteln
			set clColorAccents [ list ]
			foreach wWidget [ winfo children .conf.tab.tab1.accent ] {
				if { [ set [ $wWidget cget -variable ] ] } {
					lappend clColorAccents [ lindex [ split $wWidget "." ] end ]
				}
			}

			# Datei schreiben
			set sFile [ file join "~" ".config" $sProgNameShort "config.tcl" ]
			set oFile [ open $sFile w ]
			puts $oFile "# basic configuration file"
			puts $oFile "set sGuiLanguage \{${csGuiLanguage}\}"
			puts $oFile "set sFontGui \{${csFontGui}\}"
			puts $oFile "set iFontGui ${ciFontGui}"
			puts $oFile "set bTooltips ${cbTooltips}"
			puts $oFile "set iDistances ${ciDistances}"
			puts $oFile "set iScrollbarWidth ${ciScrollbarWidth}"
			puts $oFile "set bDarkEditor ${cbDarkEditor}"
			puts $oFile "set lColorAccents \{${clColorAccents}\}"
			puts $oFile "set sTtkTheme \{${csTtkTheme}\}"
			puts $oFile "set sFontEdit \{${csFontEdit}\}"
			puts $oFile "set iFontEdit ${ciFontEdit}"
			puts $oFile "set sIndent \{${csIndent}\}"
			puts $oFile "set iTabIndent ${ciTabIndent}"
			puts $oFile "set sLineFeedType \{${csLineFeedType}\}"
			puts $oFile "set iLongLine ${ciLongLine}"
			puts $oFile "set bAutoClose ${cbAutoClose}"
			puts $oFile "set iBottomLinesInView ${ciBottomLinesInView}"
			puts $oFile "set sInsertDateFormat \{${csInsertDateFormat}\}"
			puts $oFile "set bTextCursorBlock ${cbTextCursorBlock}"
			puts $oFile "set bTextCursorBlink ${cbTextCursorBlink}"
			puts $oFile "set iTextCursorBlinkOn ${ciTextCursorBlinkOn}"
			puts $oFile "set iTextCursorBlinkOff ${ciTextCursorBlinkOff}"
			puts $oFile "set iTextCursorWidth ${ciTextCursorWidth}"
			puts $oFile "set iBackupHistory ${ciBackupHistory}"
			puts $oFile "set sDiff \{${csDiff}\}"
			close $oFile

			destroy .conf
		}
		pack .conf.close.save -side left -fill x -expand true


		bind .conf <Escape> "destroy .conf"
		update
		wm minsize .conf [ winfo reqwidth .conf ] [ winfo reqheight .conf ]
		tkwait window .conf
	}
}

# Beispielschriften
font create GuiExampleFont  -family "${sFontGui}"  -size $iFontGui  -weight normal -slant roman
font create EditExampleFont -family "${sFontEdit}" -size $iFontEdit -weight normal -slant roman
proc examplefont {sType} {
	if { $sType == "gui" } {
		global csFontGui ciFontGui
		font configure GuiExampleFont -family "${csFontGui}" -size $ciFontGui -weight normal -slant roman
		if { [ winfo exists .conf.tab.tab0.font.example ] } {
			.conf.tab.tab0.font.example configure -font GuiExampleFont
		}
	} elseif { $sType == "editor" } {
		global csFontEdit ciFontEdit
		font configure EditExampleFont -family "${csFontEdit}" -size $ciFontEdit -weight normal -slant roman
		if { [ winfo exists .conf.tab.tab2.font.example ] } {
			.conf.tab.tab2.font.example configure -font EditExampleFont
		}
	}
}


################################################################################
# FILE: tcltk/5200_help.tcl

################################################################################
# Hilfe ########################################################################
################################################################################

proc window_help {} {
	global sProgName sWww gLogo32 gCancel

	if { [ winfo exists .help ] } {
		raise .help
	} else {

		toplevel     .help
		wm title     .help "${sProgName}: [::msgcat::mc {Documentation}]"
		wm resizable .help true true
		wm transient .help .
		focus        .help

		# Kopf
		ttk::label .help.title -text " ${sProgName}: [::msgcat::mc {Documentation}]" -font GuiFontHead -image $gLogo32 -compound left -padding 10
		pack .help.title -side top -fill x

		# Tabs
		ttk::notebook .help.tab -padding 5
		pack .help.tab -side top -fill both -expand true
		ttk::frame .help.tab.tab0 -padding 5
		pack .help.tab.tab0
		ttk::frame .help.tab.tab1 -padding 5
		pack .help.tab.tab1
		.help.tab add .help.tab.tab0 -text [::msgcat::mc {Documentation}]
		.help.tab add .help.tab.tab1 -text [::msgcat::mc {Keyboard Reference}]

		# Tab: Tastaturbelegung
		text .help.tab.tab0.text -wrap word -width 70 -height 20 -padx 5 -pady 5 -yscrollcommand { .help.tab.tab0.scroll set }
		ttk::scrollbar .help.tab.tab0.scroll -command { .help.tab.tab0.text yview }
		pack .help.tab.tab0.text   -side left -fill both -expand true
		pack .help.tab.tab0.scroll -side left -fill y

		# Fonts
		.help.tab.tab0.text tag configure fixedhead  -font EditFontHead
		.help.tab.tab0.text tag configure fixedbold  -font EditFontBold
		.help.tab.tab0.text tag configure fixedsmall -font EditFontSmall
		.help.tab.tab0.text tag configure fixed      -font EditFont

		# Content
		.help.tab.tab0.text insert 0.0 "\u2026 hm, I think that the best solution for a detailed documentation will be on the webpage (project home: ${sWww}) or a PDF. So here You will find just a few words:" fixedsmall
		.help.tab.tab0.text insert end "\n" fixed
		.help.tab.tab0.text insert end "\n\u279e Working with Sessions" fixedhead
		.help.tab.tab0.text insert end "\nThis editor uses sessions (think of a group of files). If You start the editor with a file a default session will be created for it. On the top editor bar there is a session dropdown. You can save all modfied files of Your session at once, rename the active session, set a base directory for a session (belongs to the filetree and SVN stuff) and create a new session. On the left column there are tabs for (available) sessions and their open files. On the sessions tab you can switch the session or delete them. On the file tab You can switch between them or close them. To open a file use the filetree at the bottom left, or the file dropdown next to the session dropdown. To create a new file You can also use the file dropdown." fixed
		.help.tab.tab0.text insert end "\n" fixed
		.help.tab.tab0.text insert end "\n\u279e Syntax Completion" fixedhead
		.help.tab.tab0.text insert end "\nIf You're typing a part of a keyword You will get up to 10 suggestions. Every suggestion got a number. Pressing one of those numbers completes Your typing." fixed
		.help.tab.tab0.text insert end "\n" fixed
		.help.tab.tab0.text insert end "\n\u279e History?" fixedhead
		.help.tab.tab0.text insert end "\nWhen You're saving a file Undo and Redo are resetted. You might dislike this, but as saving a file means \"save that\" any undo would be a design mistake. To get older versions of Your code there is by default a builtin backup history: Saving a file backups the old version. You can display those versions, compare them, copy out of them and restore them. The time period therefore can be configured. If that's not enough You should think about using a version control system like Subversion / SVN. And if You're defining a base directory to a session and that contains SVN stuff (and svn or svnlite is installed) You'll get an additional SVN dropdown inside the editors top bar." fixed
		.help.tab.tab0.text insert end "\n" fixed
		.help.tab.tab0.text insert end "\n\u279e The Line Jumper" fixedhead
		.help.tab.tab0.text insert end "\nTop right of the editor window You see the line and column of the cursor. Clicking on it opens a dropdown showing You a text entry to jump to a line, a button to go to the position 0/1, a button to go to the cursor position, and a button to jump to the end of the file. Next there are buttons to jump to every function of Your file (how functions are recognized is defined by the syntax definitions)." fixed
		.help.tab.tab0.text insert end "\n" fixed
		.help.tab.tab0.text insert end "\nThe Linemap: " fixedbold
		.help.tab.tab0.text insert end "On the left edge of the editor area there is a linemap with the line numbers. They can be clicked & marked. Any clicked line will also be shown in the line jumper, so You can easily navigate to Your code." fixed
		.help.tab.tab0.text insert end "\n" fixed
		.help.tab.tab0.text insert end "\n\u279e Extend the Editor" fixedhead
		.help.tab.tab0.text insert end "\nYou can create and use Your own color theme, add (or modify) a translation and language syntax. Take a look into the source package, there are examples for that included." fixed
		.help.tab.tab0.text insert end "\n" fixed
		.help.tab.tab0.text configure -state disabled

		# Tab: Doku
		text .help.tab.tab1.text -wrap word -width 70 -height 20 -padx 5 -pady 5 -yscrollcommand { .help.tab.tab1.scroll set }
		ttk::scrollbar .help.tab.tab1.scroll -command { .help.tab.tab1.text yview }
		pack .help.tab.tab1.text   -side left -fill both -expand true
		pack .help.tab.tab1.scroll -side left -fill y

		# Fonts
		.help.tab.tab1.text tag configure fixedhead  -font EditFontHead
		.help.tab.tab1.text tag configure fixedbold  -font EditFontBold
		.help.tab.tab1.text tag configure fixedsmall -font EditFontSmall
		.help.tab.tab1.text tag configure fixed      -font EditFont

		# Content
		.help.tab.tab1.text insert 0.0 "This editor uses standard keyboard bindings used by modeless editing. So here are just the specials:" fixed
		.help.tab.tab1.text insert end "\n" fixed
		.help.tab.tab1.text insert end "\n  \[ctrl-d\]    inserts date as configured" fixed
		.help.tab.tab1.text insert end "\n  \[ctrl-h\]    help - syntax assistance (if available)" fixed
		.help.tab.tab1.text insert end "\n  \[ctrl-b\]    opens the backup history" fixed
		.help.tab.tab1.text insert end "\n  \[tab\]       if lines are marked indent them all" fixed
		.help.tab.tab1.text insert end "\n  \[ctrl-tab\]  if lines are marked re-indent them all" fixed
		.help.tab.tab1.text insert end "\n  \[ctrl-f\]    jumps to the search field" fixed
		.help.tab.tab1.text insert end "\n  \[ctrl-r\]    jumps to the replace field" fixed
		.help.tab.tab1.text insert end "\n  \[esc\]       in search or replace field: clear it" fixed
		.help.tab.tab1.text insert end "\n  \[insert\]    does nothing (as this is a non modal editor!)" fixed

		.help.tab.tab1.text insert end "\n" fixed
		.help.tab.tab1.text configure -state disabled

		# Button
		ttk::frame .help.close -padding 5
		pack .help.close -side top -fill x
		ttk::button .help.close.button -text [::msgcat::mc {Close}] -image $gCancel -compound left -command { destroy .help }
		pack .help.close.button -fill x -expand true


		bind .help <Escape> { destroy .help }
		update
		wm minsize .help [ winfo reqwidth .help ] [ winfo reqheight .help ]
		tkwait window .help

	}
}


################################################################################
# FILE: tcltk/5300_about.tcl

################################################################################
# Hilfe + About ################################################################
################################################################################

proc window_about {} {
	global sProgName sVersion sSubversionrevision sAuthor sEmail sWww sAbout sYear gLogo32 gCancel lLanguages sCompileDate

	if { [ winfo exists .about ] } {
		raise .about
	} else {

		toplevel     .about
		wm title     .about "${sProgName}: [::msgcat::mc {About}]"
		wm resizable .about true true
		wm transient .about .
		focus        .about

		# Kopf
		ttk::label .about.title -text " ${sProgName}: [::msgcat::mc {About}]" -font GuiFontHead -image $gLogo32 -compound left -padding 10
		pack .about.title -side top -fill x

		# Tabs
		ttk::notebook .about.tab -padding 5
		pack .about.tab -side top -fill both -expand true
		ttk::frame .about.tab.tab0 -padding 5
		pack .about.tab.tab0
		ttk::frame .about.tab.tab1 -padding 5
		pack .about.tab.tab1
		.about.tab add .about.tab.tab0 -text [::msgcat::mc {About}]
		.about.tab add .about.tab.tab1 -text [::msgcat::mc {License}]

		# Tab: About
		text .about.tab.tab0.text -wrap word -width 70 -height 20 -padx 5 -pady 5 -yscrollcommand { .about.tab.tab0.scroll set }
		ttk::scrollbar .about.tab.tab0.scroll -command { .about.tab.tab0.text yview }
		pack .about.tab.tab0.text   -side left -fill both -expand true
		pack .about.tab.tab0.scroll -side left -fill y

		# Content
		.about.tab.tab0.text tag configure fixedbold -font EditFontBold
		.about.tab.tab0.text tag configure fixed     -font EditFont

		.about.tab.tab0.text insert 0.0 "[::msgcat::mc {Version}] ${sVersion}, ${sYear}" fixedbold
		.about.tab.tab0.text insert end "\n[::msgcat::mc {generated}]: ${sCompileDate} (SVN-Revision ${sSubversionrevision})" fixed
		.about.tab.tab0.text insert end "\n" fixed
		.about.tab.tab0.text insert end "\n[::msgcat::mc ${sAbout}]" fixed
		.about.tab.tab0.text insert end "\n" fixed
		.about.tab.tab0.text insert end "\n[::msgcat::mc {Author}]" fixedbold
		.about.tab.tab0.text insert end "\n  ${sAuthor}" fixed
		.about.tab.tab0.text insert end "\n  ${sEmail}" fixed
		.about.tab.tab0.text insert end "\n  ${sWww}" fixed
		.about.tab.tab0.text insert end "\n" fixed
		.about.tab.tab0.text insert end "\n[::msgcat::mc {Available Languages} ]" fixedbold
		foreach sLang [ lsort -dictionary -index 0 $lLanguages ] {
			.about.tab.tab0.text insert end "\n  \u2022 [ lindex ${sLang} 0 ] ([ lindex ${sLang} 2 ])" fixed
		}

		.about.tab.tab0.text insert end "\n" fixed
		.about.tab.tab0.text configure -state disabled

		# Tab: Lizenz
		text .about.tab.tab1.text -wrap word -width 70 -height 20 -padx 5 -pady 5 -yscrollcommand { .about.tab.tab1.scroll set }
		ttk::scrollbar .about.tab.tab1.scroll -command { .about.tab.tab1.text yview }
		pack .about.tab.tab1.text   -side left -fill both -expand true
		pack .about.tab.tab1.scroll -side left -fill y

		# Content
		.about.tab.tab1.text tag configure fixedbold -font EditFontBold
		.about.tab.tab1.text tag configure fixed     -font EditFont

		.about.tab.tab1.text insert 0.0 "[::msgcat::mc {License}]: BSD 2-clause" fixedbold
		.about.tab.tab1.text insert end "\n\nCopyright \u00a9 ${sYear} ${sAuthor} <${sEmail}>." fixed
		.about.tab.tab1.text insert end "\nAll rights reserved." fixed
		.about.tab.tab1.text insert end "\n" fixed
		.about.tab.tab1.text insert end "\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:" fixed
		.about.tab.tab1.text insert end "\n" fixed
		.about.tab.tab1.text insert end "\n \u2022 Redistributions of source code must retain the above" fixed
		.about.tab.tab1.text insert end "\n   copyright notice, this list of conditions and the" fixed
		.about.tab.tab1.text insert end "\n   following disclaimer." fixed
		.about.tab.tab1.text insert end "\n" fixed
		.about.tab.tab1.text insert end "\n \u2022 Redistributions in binary form must reproduce the" fixed
		.about.tab.tab1.text insert end "\n   above copyright notice, this list of conditions and" fixed
		.about.tab.tab1.text insert end "\n   the following disclaimer in the documentation and/or" fixed
		.about.tab.tab1.text insert end "\n   other materials provided with the distribution." fixed
		.about.tab.tab1.text insert end "\n" fixed
		.about.tab.tab1.text insert end "\nTHIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." fixed

		.about.tab.tab1.text insert end "\n" fixed
		.about.tab.tab1.text configure -state disabled

		# Button
		ttk::frame .about.close -padding 5
		pack .about.close -side top -fill x
		ttk::button .about.close.button -text [::msgcat::mc {Close}] -image $gCancel -compound left -command { destroy .about }
		pack .about.close.button -fill x -expand true


		bind .about <Escape> { destroy .about }
		update
		wm minsize .about [ winfo reqwidth .about ] [ winfo reqheight .about ]
		tkwait window .about

	}
}


################################################################################
# FILE: tcltk/9000_bindings.tcl

################################################################################
# globale Bindings #############################################################
################################################################################


################################################################################
# Programm beenden
bind all <Control-q> {
	exiteditor
}


################################################################################
# Hilfe
bind all <F1> {
	window_help
}


################################################################################
# Backup-History
bind all <Control-b> {
	window_backup
}


################################################################################
# Suchen und Ersetzen
bind all <Control-f> {
	cleanhighlightsearch
	focus .sidebottom.search.search
}
bind .sidebottom.search.search <Return> {
	.sidebottom.search.searchgo invoke
}
bind all <Control-r> {
	cleanhighlightsearch
	focus .sidebottom.search.replace
}
bind .sidebottom.search.replace <Return> {
	.sidebottom.search.replacego invoke
}


################################################################################
# Datei speichern
bind all <Control-s> {
	global sFileActive
	file_save $sFileActive
}
bind all <F2> {
	global sFileActive
	file_save $sFileActive
}


################################################################################
# FILE: tcltk/9999_startup.tcl

# letzte Session laden
loadsession $sSession 0

# wenn keine Datei geoeffnet: Dateibrowser anzeigen, um welche oeffnen zu koennen
if { [ llength [ pack slaves .editor ] ] == 0 } {
	updatefiletree_home
}

# Groessen der Fensterelemente
update
.side    configure -width  $iPaneLeftWidth
.sidetop configure -height $iPaneLeftSep

# Fenster anzeigen
wm deiconify .

# Scrollbalken - so lange das Fenster gar nicht sichbar war, klappt das nicht...
update
showhidetreescroll


