aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/qregisters.cpp
AgeCommit message (Collapse)AuthorFilesLines
2014-11-16cleaned up Scintilla document "updating"Robin Haberkorn1-40/+28
* allowed me to remove some obscure global functions and methods like QRegister::update_string(). * Document updating is concentrated in qregisters.cpp now * also fixes some bugs introduced earlier, like undo tokens being generated for non-undo registers (resulting in segfaults on rubout)
2014-11-16first working version of the one-view-per-buffer designRobin Haberkorn1-51/+56
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.
2014-11-11refactored SciTECO runtime errors: moved from parser.cpp to error.cppRobin Haberkorn1-4/+5
* the GError expection has been renamed to GlibError, to avoid nameclashes when working from the SciTECO namespace
2014-11-11added all of SciTECO's declarations to the "SciTECO" namespaceRobin Haberkorn1-0/+4
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).
2014-11-10extended ^U command: allow setting and appending of strings and characters fromRobin Haberkorn1-5/+58
the expression stack now it's more like standard TECO's ^U command
2014-11-09revised U command: fail if no argument is providedRobin Haberkorn1-5/+22
* there is no reasonable default value for U * omitting the parameter for U might be a frequent programming error * U can be colon-modified now, in which case it may be used * to check for the presence of arguments in macros
2014-11-02changed syntax for long Q-Register names: use [] brackets instead of {}Robin Haberkorn1-3/+3
this breaks many existing scripts, and means you may have to rebuild SciTECO with ./configure --enable-bootstrap The syntax of SciTECO might change in backwards-incompatible until version 1.0 is released.
2014-02-18removed unreliable CHR2STR() macroRobin Haberkorn1-1/+1
* referencing temporaries is unreliable/buggy in GNU C++, at least since v4.7 * in higher optimization levels it resulted in massive memory corruptions * this is responsible for the build issues (PPA build issues) * instead, always declare a buffer on the stack which guarantees that the variable lives long enough * the g_strdup(CHR2STR(x)) idiom has been replaced with String::chrdup(x)
2014-02-15updated Copyright to year 2014Robin Haberkorn1-1/+1
2014-02-15use GLib's GError information to yield errorsRobin Haberkorn1-8/+6
* results in better error messages, e.g. when opening files * the case that a file to be opened (EB) exists but is not readably is handled for the first time
2014-02-15removed most exception specifications: allow bad_allocs to propagateRobin Haberkorn1-16/+16
* specifications resulted in runtime errors (unexpected exception) when bad_alloc ocurred * specs should be used scarcely: only when the errors that may be thrown are all known and for documentary purposes
2014-02-15added support for TECO stack tracingRobin Haberkorn1-3/+7
* when an error is thrown, stack frames are collected on clean up, up to the toplevel macro * the toplevel macro decides how to display the error * now errors in interactive and batch mode are displayed differently * in batch mode, a backtrace is displayed as a sequence of messages * Execute::file() forwards errors correctly * the correct error in the file is displayed in interactive mode * necessary to build the stack trace
2013-03-18explicitly instantiate MicroStateMachine: fixes compilation with gcc-4.4Robin Haberkorn1-1/+1
2013-03-18declare all global inter-dependant objects in main.cpp and get rid of ↵Robin Haberkorn1-7/+0
init_priority attribute * 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
2013-03-16fixed: prevent accessing registers in parse-only modeRobin Haberkorn1-0/+10
* they might not already exist, yielding bogus errors * in case the register might be initialized we do not want to do so in parse-only-mode * this fix is only a workaround: currently we must return a register sind got_register() expects one and must be called to determine the next state in parse only mode * proper solution would be to better separate parsing and execution
2013-03-16documented remaining commandsRobin Haberkorn1-0/+124
* flow control and other structures have not been documented this ways. I have not yet decided whether they should be documented in separate sections or use the documentation tool.
2013-02-25EM...$ command to read macro from file and execute immediately (just like "M")Robin Haberkorn1-0/+13
* useful for using macro libraries
2013-02-22use typedef for SciTECO integers and make it configurable at configure timeRobin Haberkorn1-5/+5
* storage size should always be 64 (gint64) to aid macro portability * however, for performance reasons users compiling from source might explicitly compile with 32 bit integers
2013-02-22fixed global object initialization order issueRobin Haberkorn1-0/+6
* Scintilla is now initialized from main() using Interface::main() * Scintilla initialization depends on initialization of objects in the global namespace (otherwise the Lexer catalogue may not be filled properly and lexing may not work). Lexer modules were initialized after SciTECO interface initialization * merged Scintilla initialization (Interface::main()) with interface option parsing
2013-02-22clean up QRegisterTable::insert|initialize usageRobin Haberkorn1-3/+3
* distinction no longer useful since string part of register is now never pre-initialized
2013-02-22clean up QRegister vs. Buffer redundancies using TECODocument classRobin Haberkorn1-33/+25
* also encapsulates data properly (previously there were many public attributes to avoid permission issues) * new class also cares about saving/and restoring scroll state. now, buffer/q-reg edits and temporary accesses do not reset the scroll state anymore.
2013-02-14hide some implementation details in MicroStateMachinesRobin Haberkorn1-4/+1
2013-02-14undo q-register table initializations (insertions) on ruboutRobin Haberkorn1-0/+1
2013-02-14option for q-reg spec state machine to allocate (insert) new q-registersRobin Haberkorn1-6/+10
* enabled for all modifying Q-Reg commands
2013-02-14micro state machine for Q-Register specifications: allow long Q-Reg namesRobin Haberkorn1-15/+78
syntax is as follows: ["."]("#" CHR1 CHR2 | "{" STRING_BUILDING "}" | CHR1) * the short one/two char names are turned upper case, while no case folding is performed on verbose names
2013-02-08fixed ring.current/QRegisters::current corruptionRobin Haberkorn1-0/+8
occurs when rubbing out a switch from q-reg string or to q-reg string
2013-02-08delegate commandline replacements ("}") to the cmdline macro levelRobin Haberkorn1-3/+3
allows commandline editing scripted by macros
2013-02-01fixed buffer Ring initializationRobin Haberkorn1-3/+2
* there was a dependency on interface initialization. it did not cause issues because destruction order was by chance. * introduced INIT_PRIO and PRIO_* macros to easy initialization order declaration (using a PRIO_* formula makes code self-documenting) * also used this to clean up QRegisterTable initialization (we do not need the explicit initialize() method) * also used to clean up symbols initialization
2013-01-23cleaned up QRegister state interface (can pass register by reference)Robin Haberkorn1-40/+40
2013-01-23moved StateExpectQReg from parser.h to qregisters.hRobin Haberkorn1-0/+28
* parser.cpp|h should be reserved for generic and misc. stuff. the StateExpectQReg class is used almost exclusively by qregisters.cpp|h * resolves a circular header dependency issue
2013-01-19updated copyright (2012-2013)Robin Haberkorn1-1/+1
2012-12-04added copyright notice to every source fileRobin Haberkorn1-0/+17
2012-12-04first working version of autotools based build-systemRobin Haberkorn1-0/+4
2012-12-04autoconf preparation: move everything into src/ subdirRobin Haberkorn1-0/+522