<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sciteco/contrib/terex, branch lsp</title>
<subtitle>Scintilla-based Text Editor and COrrector</subtitle>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/'/>
<entry>
<title>terex: fixed tarballs (`make dist` and `make distcheck`)</title>
<updated>2026-08-06T09:03:30+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-08-06T09:03:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=8dcbfc4ed13401a2ee7578fa18fe9215091ff763'/>
<id>8dcbfc4ed13401a2ee7578fa18fe9215091ff763</id>
<content type='text'>
It was missing a few files.
Should also fix CI runs.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It was missing a few files.
Should also fix CI runs.
</pre>
</div>
</content>
</entry>
<entry>
<title>fixed case-insensitive searches with non-ANSI (Unicode) patterns</title>
<updated>2026-07-24T13:20:20+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-07-24T13:20:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=1ce474195699345584aaa5a8999d3158d7d8ed87'/>
<id>1ce474195699345584aaa5a8999d3158d7d8ed87</id>
<content type='text'>
* Since case-insensitivity is the default, you couldn't effectively
  search for non-ANSI characters, although character classes were not affected.
* This was a terex bug, i.e. wasn't broken in v2.5.2.
* Test cases have been added.
  The test case for searching for ^E (5) has been simplified using `^E&lt;5&gt;`.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Since case-insensitivity is the default, you couldn't effectively
  search for non-ANSI characters, although character classes were not affected.
* This was a terex bug, i.e. wasn't broken in v2.5.2.
* Test cases have been added.
  The test case for searching for ^E (5) has been simplified using `^E&lt;5&gt;`.
</pre>
</div>
</content>
</entry>
<entry>
<title>terex is built with assertions now on --enable-debug</title>
<updated>2026-07-05T10:11:23+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-07-05T10:11:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=01d77dafb8fc4d40f8603e0d776b9b4b9283918d'/>
<id>01d77dafb8fc4d40f8603e0d776b9b4b9283918d</id>
<content type='text'>
* terex disables assertions by default unless you add `-DREG_DEBUG`.
  Since we heavily modified the original by Henry Spencer it makes sense
  to enable assertions.
* dlmalloc will still be built without assertions even if --enable-debug
  is given since that has a significant speed impact and I consider
  dlmalloc to be rock solid. It would need `-DDEBUG=1` to enable assertions
  (among other things).
  We only disable additional checks in dlmalloc if --disable-debug.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* terex disables assertions by default unless you add `-DREG_DEBUG`.
  Since we heavily modified the original by Henry Spencer it makes sense
  to enable assertions.
* dlmalloc will still be built without assertions even if --enable-debug
  is given since that has a significant speed impact and I consider
  dlmalloc to be rock solid. It would need `-DDEBUG=1` to enable assertions
  (among other things).
  We only disable additional checks in dlmalloc if --disable-debug.
</pre>
</div>
</content>
</entry>
<entry>
<title>terex, dlmalloc and rb3ptr are now built with `-Wall`</title>
<updated>2026-07-03T16:15:26+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-07-03T16:15:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=5ef8d4c32df083b8da0d40ed3cf3e2840245f05b'/>
<id>5ef8d4c32df083b8da0d40ed3cf3e2840245f05b</id>
<content type='text'>
dlmalloc had one bogus unused variable warning, so we also added `-Wno-unused-but-set-variable`.
We don't want to change upstream sources unless absolutely necessary.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
dlmalloc had one bogus unused variable warning, so we also added `-Wno-unused-but-set-variable`.
We don't want to change upstream sources unless absolutely necessary.
</pre>
</div>
</content>
</entry>
<entry>
<title>regular expression matching can now be reliably interrupted using CTRL+C</title>
<updated>2026-06-29T17:20:55+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-06-29T17:20:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=49587788101dce76111a8b16dfed0889c26b0e61'/>
<id>49587788101dce76111a8b16dfed0889c26b0e61</id>
<content type='text'>
* The previous checks for interruptions only helped in a few corner cases
  like for very high search-repeat counts or during backwards searches across
  the entire buffer.
* But even with terex' more predictable runtime properties
  a single regex execution can hang quite a long time.
  E.g. `S^EM^X$` on a huge buffer or even more so with backreferences as in
  `S^~(.*)\1$`.
* We now use the new tere_set_is_interrupted_cb() to register
  teco_interface_is_interrupted(). Types should be compatible as long
  as gboolean resolves to int.
* It's no longer necessary to manually check for teco_interface_is_interrupted()
  since tere_exec() now returns REG_EINTR in case the callback returned TRUE
  in which case it's handled by teco_error_regex_set().
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* The previous checks for interruptions only helped in a few corner cases
  like for very high search-repeat counts or during backwards searches across
  the entire buffer.
* But even with terex' more predictable runtime properties
  a single regex execution can hang quite a long time.
  E.g. `S^EM^X$` on a huge buffer or even more so with backreferences as in
  `S^~(.*)\1$`.
* We now use the new tere_set_is_interrupted_cb() to register
  teco_interface_is_interrupted(). Types should be compatible as long
  as gboolean resolves to int.
* It's no longer necessary to manually check for teco_interface_is_interrupted()
  since tere_exec() now returns REG_EINTR in case the callback returned TRUE
  in which case it's handled by teco_error_regex_set().
</pre>
</div>
</content>
</entry>
<entry>
<title>terex is the new regular expression engine now and replaces PCRE (GRegex)</title>
<updated>2026-06-27T22:39:51+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>rhaberkorn@fmsbw.de</email>
</author>
<published>2026-06-27T22:39:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=4fe5bc6f3867096965270c90f2e1e5df77b8825f'/>
<id>4fe5bc6f3867096965270c90f2e1e5df77b8825f</id>
<content type='text'>
* terex is based on Henry Spencer's regular expression engine for Tcl.
  It is a hybrid NFA/DFA design which has better worst-time runtimes than
  the backtracking PCRE. Memory usage is also limited and can no longer
  increase catastrophically.
* It should no longer be possible to crash SciTECO with pathological
  searches.
* Since it reliably supports partial matches (REG_EXPECT) we can
  now enable the new backwards-search algorithm by default.
  This used to be broken because of a glib bug, which I already
  fixed. It would however take a long time until this ends up
  on the majority of glib installations.
* Regexp executions can still be quite slow if you are looking
  for a pattern at the end of a huge file, which can hang the editor,
  but this can now at least theoretically be solved by adding
  hooks into terex to poll for interruptions.
* We can now also get rid of a TECO-pattern to regexp translation
  step by directly generating terex tokens (TODO).
* Performance-wise terex appears to be slower than PCRE for simple
  forward searches even when linking everything with optimzations (FIXME).
* Having a stand-alone regular expression engine is also a huge
  step in getting rid of glib.

See also: https://git.fmsbw.de/terex/about/
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* terex is based on Henry Spencer's regular expression engine for Tcl.
  It is a hybrid NFA/DFA design which has better worst-time runtimes than
  the backtracking PCRE. Memory usage is also limited and can no longer
  increase catastrophically.
* It should no longer be possible to crash SciTECO with pathological
  searches.
* Since it reliably supports partial matches (REG_EXPECT) we can
  now enable the new backwards-search algorithm by default.
  This used to be broken because of a glib bug, which I already
  fixed. It would however take a long time until this ends up
  on the majority of glib installations.
* Regexp executions can still be quite slow if you are looking
  for a pattern at the end of a huge file, which can hang the editor,
  but this can now at least theoretically be solved by adding
  hooks into terex to poll for interruptions.
* We can now also get rid of a TECO-pattern to regexp translation
  step by directly generating terex tokens (TODO).
* Performance-wise terex appears to be slower than PCRE for simple
  forward searches even when linking everything with optimzations (FIXME).
* Having a stand-alone regular expression engine is also a huge
  step in getting rid of glib.

See also: https://git.fmsbw.de/terex/about/
</pre>
</div>
</content>
</entry>
</feed>
