Add tm_get_current_tag()
Fix an off-by-one issue in sci_get_position_from_line()

Scintilla counts lines from 0 but TagManager from 1, so convert them.
Improve symbols_get_current_function() a lot and make it more flexible

Finding the current function now better handles the case the current
line is after a function but outside its scope, and many other issues
the scope reporting had.
Report scope including classes, namespaces and alike

Don't only match the current function as the current scope, but also
classes, namespaces and others containers.

Closes #1996778.
Merge branch 'improve-scope-detection'
Update NEWS for a few recently fixed bugs
Set scope information for JavaScript tags

Instead of adding the scope to the tag name, properly add it as the
tag's scope.

Closes #3570192.
Use faster squiggle underlining

Geany performance suffered with a lot of error underlining visible.
Matthew Brush developed an improved implementation that was accepted
into Scintilla, this selects that implementation.
Remove illegal signal handling

The SIGTERM handler called the standard exit callback which uses
functions that are illegal in signal handlers.  Commented out as
a prelude to full removal if no use case can be made.
Fix multiline comments at end of file

Multiline comments did not work at end of file because there is no
style there so also check if at end of file as well as style.
Closes #3026691
Fix pointer warning

GCC 4.7.1 gives a incompatible pointer warning because gtk_adjustment_new
returns a GObject* not a GtkAdjustment* (new compiler default).
ctags: fix improper use of "const" type qualifier

The external declaration of "File" in read.h (defined in read.c) was
improperly tagged as "const" for it not to be modifiable outside of
read.c.  Although it is good to protect this global variable against
improper modification, the use of "const" here makes it perfectly valid
for the compiler to assume that the fields in this structure never
changes during runtime, thus allowing it to do optimizations on this
assumption.  However, this assumption is wrong because this structure
actually gets modified by many read.c's functions, and thus possibly
lead to improper and unexpected behavior if the compiler sees a window
for optimizing fields access.

Moreover, protecting "File" as it was with the "const" type qualifier
required a hack to be able to include read.h in read.c since "const"
and non-"const" declarations conflicts.

Actually, at least the JavaScript parser did suffer of the issue,
because it calls getSourceLineNumber() macro (expanding to a direct
"File" member access) several times in one single function, making it
easy for the compilers to cache the value as an optimization.  Both GCC
and CLang showed this behavior with optimization enabled.  As a result,
the line numbers of JavaScript tags were often incorrect.
JavaScript parser: don't set token position information again and again

There is no need to set the token position information in the loop
searching for the initial token character, simply do that when we
finally found the token start.
Add proper scope for JS tags including their own context

This makes `Foo.bar = function()` properly report a function tag "bar"
with scope "Foo" rather than a function tag "Foo.bar" with no scope.

Part of #3570192.
In ctags JavaScript parser fix recognizing functions inside methods
JavaScript parser: Don't drop the token after an unbraced if

If an `if` haven't had braces, the code used to check itself for an
`else` after it, eating the next token if it wasn't actually an `else`.

So, drop the check for the else altogether since parseLine() handles
`else`s by calling parseIf() anyway.

This fixes constructs like:

	if (foo)
		bar();
	function baz() {
		// ...
	}

Closes #3568542.
JavaScript parser: Simplify parseJfFile() code (no functional changes)
JavaScript parser: properly consume closing brace after a block in findCmdTerm()
JavaScript parser: fix some unterminated statement corner case issues

This fixes parsing of the following unterminated statements:

	if () {
		foo = 42
	}

	if () {
		foo = new Object()
	}

	if () {
		foo = ({a:1,b:2})
	}
JavaScript parser: lowercase "object" isn't a keyword

Closes #3036476.