<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sciteco/src/interface-ncurses.h, branch v2.5.2</title>
<subtitle>Scintilla-based Text Editor and COrrector</subtitle>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/'/>
<entry>
<title>renamed the "NCurses" UI to "Curses" internally</title>
<updated>2014-11-17T03:41:18+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>robin.haberkorn@googlemail.com</email>
</author>
<published>2014-11-17T03:41:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=dceabff6cfc6bd6572a98b5c8f7775b42dc732a7'/>
<id>dceabff6cfc6bd6572a98b5c8f7775b42dc732a7</id>
<content type='text'>
 * does not change ./configure parameters
   You still have to specifiy --with-interface=ncurses for
   the Curses interface with default settings
 * the "NCurses" UI was used for many different Curses
   variants, so plain "Curses" is a better name.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
 * does not change ./configure parameters
   You still have to specifiy --with-interface=ncurses for
   the Curses interface with default settings
 * the "NCurses" UI was used for many different Curses
   variants, so plain "Curses" is a better name.
</pre>
</div>
</content>
</entry>
<entry>
<title>Make sure QRegister::view is properly initialized and cleaned up</title>
<updated>2014-11-17T02:56:42+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>robin.haberkorn@googlemail.com</email>
</author>
<published>2014-11-16T22:46:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=2542eb02648294256a01ae4ecb6ac81bc8ab5094'/>
<id>2542eb02648294256a01ae4ecb6ac81bc8ab5094</id>
<content type='text'>
 * it must be initialized after the UI (Interface::main), so I added
   a View::initialize() function
 * the old initialize() method was renamed to setup()
 * use a global instance of QRegister::view so it is guaranteed to
   be destroyed only after any QRegisters that could still need it
 * Document API adapted to work with ViewCurrent references
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
 * it must be initialized after the UI (Interface::main), so I added
   a View::initialize() function
 * the old initialize() method was renamed to setup()
 * use a global instance of QRegister::view so it is guaranteed to
   be destroyed only after any QRegisters that could still need it
 * Document API adapted to work with ViewCurrent references
</pre>
</div>
</content>
</entry>
<entry>
<title>simplified (User) Interface API</title>
<updated>2014-11-17T02:56:38+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>robin.haberkorn@googlemail.com</email>
</author>
<published>2014-11-17T02:11:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=e762a43754ba375789fa749ca2e00a3548500d6a'/>
<id>e762a43754ba375789fa749ca2e00a3548500d6a</id>
<content type='text'>
Both UIs have a current_view, so this field, the
ssm(), undo_ssm() and get_current_view() methods can be
refactored into the Interface base class
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Both UIs have a current_view, so this field, the
ssm(), undo_ssm() and get_current_view() methods can be
refactored into the Interface base class
</pre>
</div>
</content>
</entry>
<entry>
<title>rewritten View and Interface base classes using the Curiously Recurring Template Pattern.</title>
<updated>2014-11-16T22:34:25+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>robin.haberkorn@googlemail.com</email>
</author>
<published>2014-11-16T18:31:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=38fcf6d15cdf09591e7d7a142ad724164875e433'/>
<id>38fcf6d15cdf09591e7d7a142ad724164875e433</id>
<content type='text'>
 * without the one-view-per-buffer designs, many Scintilla send message (SSM)
   calls could be inlined
 * with the new design, this was no longer possible using the abstract
   base classes. the CRT pattern allows inlining again but introduces
   a strange level of code obscurity.
 * tests suggest that at high optimization levels, the one-view-per-buffer
   design and the CRT pattern reduces typical macro runtimes by 30%
   (e.g. for symbols-extract.tes).
 * only updated the NCurses UI for the time being
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
 * without the one-view-per-buffer designs, many Scintilla send message (SSM)
   calls could be inlined
 * with the new design, this was no longer possible using the abstract
   base classes. the CRT pattern allows inlining again but introduces
   a strange level of code obscurity.
 * tests suggest that at high optimization levels, the one-view-per-buffer
   design and the CRT pattern reduces typical macro runtimes by 30%
   (e.g. for symbols-extract.tes).
 * only updated the NCurses UI for the time being
</pre>
</div>
</content>
</entry>
<entry>
<title>first working version of the one-view-per-buffer design</title>
<updated>2014-11-16T22:34:24+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>robin.haberkorn@googlemail.com</email>
</author>
<published>2014-11-14T01:43:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=8be99d3863a305046f0133116782734e87be0822'/>
<id>8be99d3863a305046f0133116782734e87be0822</id>
<content type='text'>
The user interface provides a Scintilla view abstraction and
every buffer is based on a view. All Q-Register strings use
a single dedicated view to save memory and initialization time
when using many string registers.

 * this means we can finally implement a working lexer configuration
   and it only has to be done once when the buffer is first added
   to the ring. It is unnecessary to magically restore the lexer
   styles upon rubout of EB (very hard to implement anyway). It
   is also not necessary to rerun the lexer configuration macro
   upon rubout which would be hard to reconcile with SciTECO's
   basic design since every side-effect should be attached to a
   character.
 * this means that opening buffers is slightly slower now
   because of the view initialization
 * on the other hand, macros with many string q-reg operations
   are faster now, since the document must no longer be changed
   on the buffer's view and restored later on.
 * also now we can make a difference between editing a document
   in a view and changing the current view, which reduces UI calls
 * the Document class has been retained as an abstraction about
   Scintilla documents, used by QRegister Strings.
   It had to be made virtual, so the view on which the document
   is created can be specified by a virtual function.
   There is no additional space overhead for Documents.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The user interface provides a Scintilla view abstraction and
every buffer is based on a view. All Q-Register strings use
a single dedicated view to save memory and initialization time
when using many string registers.

 * this means we can finally implement a working lexer configuration
   and it only has to be done once when the buffer is first added
   to the ring. It is unnecessary to magically restore the lexer
   styles upon rubout of EB (very hard to implement anyway). It
   is also not necessary to rerun the lexer configuration macro
   upon rubout which would be hard to reconcile with SciTECO's
   basic design since every side-effect should be attached to a
   character.
 * this means that opening buffers is slightly slower now
   because of the view initialization
 * on the other hand, macros with many string q-reg operations
   are faster now, since the document must no longer be changed
   on the buffer's view and restored later on.
 * also now we can make a difference between editing a document
   in a view and changing the current view, which reduces UI calls
 * the Document class has been retained as an abstraction about
   Scintilla documents, used by QRegister Strings.
   It had to be made virtual, so the view on which the document
   is created can be specified by a virtual function.
   There is no additional space overhead for Documents.
</pre>
</div>
</content>
</entry>
<entry>
<title>added all of SciTECO's declarations to the "SciTECO" namespace</title>
<updated>2014-11-11T03:14:01+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>robin.haberkorn@googlemail.com</email>
</author>
<published>2014-11-11T03:14:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=7206f6d1249da0dd8e879d0c0b26185fc6ef89d9'/>
<id>7206f6d1249da0dd8e879d0c0b26185fc6ef89d9</id>
<content type='text'>
normally, since SciTECO is not a library, this is not strictly
necessary since every library should use proper name prefixes
or namespaces for all global declarations to avoid name clashes.

However

 * you cannot always rely on that
 * Scintilla does violate the practice of using prefixes or namespaces.
   The public APIs are OK, but it does define global functions/methods,
   e.g. for "Document" that clashed with SciTECO's "TECODocument" class at
   link-time.
   Scintilla can put its definitions in a namespace, but this feature
   cannot be easily enabled without patching Scintilla.
 * a "SciTECO" namespace will be necessary if "SciTECO" is ever to be
   turned into a library. Even if this library will have only a C-linkage
   API, it must ensure it doesn't clutter the global namespace.

So the old "TECODocument" class was renamed back to "Document"
(SciTECO::Document).
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
normally, since SciTECO is not a library, this is not strictly
necessary since every library should use proper name prefixes
or namespaces for all global declarations to avoid name clashes.

However

 * you cannot always rely on that
 * Scintilla does violate the practice of using prefixes or namespaces.
   The public APIs are OK, but it does define global functions/methods,
   e.g. for "Document" that clashed with SciTECO's "TECODocument" class at
   link-time.
   Scintilla can put its definitions in a namespace, but this feature
   cannot be easily enabled without patching Scintilla.
 * a "SciTECO" namespace will be necessary if "SciTECO" is ever to be
   turned into a library. Even if this library will have only a C-linkage
   API, it must ensure it doesn't clutter the global namespace.

So the old "TECODocument" class was renamed back to "Document"
(SciTECO::Document).
</pre>
</div>
</content>
</entry>
<entry>
<title>updated Copyright to year 2014</title>
<updated>2014-02-15T17:48:29+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>robin.haberkorn@googlemail.com</email>
</author>
<published>2014-02-15T17:48:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=340f47ff2162865d93c4e4c47fec0c8584fe8743'/>
<id>340f47ff2162865d93c4e4c47fec0c8584fe8743</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>all interface classes define the same type InterfaceCurrent, simplifying the interface object definition</title>
<updated>2014-02-15T17:38:25+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>robin.haberkorn@googlemail.com</email>
</author>
<published>2013-06-04T11:32:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=a30c90206d7011905955063ae432a5be30dca6f4'/>
<id>a30c90206d7011905955063ae432a5be30dca6f4</id>
<content type='text'>
 * they still define their own classes (e.g. InterfaceNCurses),
   InterfaceCurrent is a typedef
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
 * they still define their own classes (e.g. InterfaceNCurses),
   InterfaceCurrent is a typedef
</pre>
</div>
</content>
</entry>
<entry>
<title>added EMCurses/Emscripten support</title>
<updated>2014-02-15T14:18:09+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>robin.haberkorn@googlemail.com</email>
</author>
<published>2014-02-15T14:18:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=6d4668bdaf393aa45d9adb640774f998c6b4aa58'/>
<id>6d4668bdaf393aa45d9adb640774f998c6b4aa58</id>
<content type='text'>
by building with Emscripten support, SciTECO may be
embedded into web pages.

 * sciteco.html is not a piece of documentation but a sample SciTECO embedding
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
by building with Emscripten support, SciTECO may be
embedded into web pages.

 * sciteco.html is not a piece of documentation but a sample SciTECO embedding
</pre>
</div>
</content>
</entry>
<entry>
<title>declare all global inter-dependant objects in main.cpp and get rid of init_priority attribute</title>
<updated>2013-03-18T19:47:29+00:00</updated>
<author>
<name>Robin Haberkorn</name>
<email>robin.haberkorn@googlemail.com</email>
</author>
<published>2013-03-18T19:47:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.fmsbw.de/sciteco/commit/?id=efdea080a27d51b522f2414873e5c112201b71e6'/>
<id>efdea080a27d51b522f2414873e5c112201b71e6</id>
<content type='text'>
 * we cannot use weak symbols in MinGW, so we avoid init_priority for symbol
   initialization by compiling the empty definitions into
   sciteco-minimal but the real ones into sciteco
   (had to add new file symbols-minimal.cpp)
 * this fixes compilation/linking on LLVM Clang AND Dragonegg
   since their init_priority attribute is broken!
   this will likely be fixed in the near future but broken versions
   will be around for some time
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
 * we cannot use weak symbols in MinGW, so we avoid init_priority for symbol
   initialization by compiling the empty definitions into
   sciteco-minimal but the real ones into sciteco
   (had to add new file symbols-minimal.cpp)
 * this fixes compilation/linking on LLVM Clang AND Dragonegg
   since their init_priority attribute is broken!
   this will likely be fixed in the near future but broken versions
   will be around for some time
</pre>
</div>
</content>
</entry>
</feed>
