102 lines
3.3 KiB
Markdown
102 lines
3.3 KiB
Markdown
QSESED Embedding Guide {#sed-embed}
|
|
================================================================================
|
|
|
|
Overview
|
|
--------
|
|
|
|
The QSESED library is divided into the core layer and the standard layer.
|
|
The core layer is a skeleton implmenetation that requires various callbacks
|
|
to be useful. The standard layer provides these callbacks in a general respect.
|
|
|
|
You can find core layer routines in <qse/sed/sed.h> while you can find standard
|
|
layer routines in <qse/sed/std.h>.
|
|
|
|
Embedding QSESED involves the following steps in the simplest form:
|
|
|
|
- create a new sed object
|
|
- compile commands
|
|
- execute commands
|
|
- destroy the sed object
|
|
|
|
The sample here shows a simple stream editor than can accepts a command string,
|
|
and optionally an input file name and an output file name.
|
|
|
|
\includelineno sed01.c
|
|
|
|
You can call qse_sed_compstdfile() instead of qse_sed_compstdstr() to compile
|
|
sed commands stored in a file. You can use qse_sed_compstd() or qse_sed_comp()
|
|
for more flexibility.
|
|
|
|
Locale
|
|
------
|
|
|
|
While QSESED can use a wide character type as the default character type,
|
|
the hosting program still has to initialize the locale whenever necessary.
|
|
All the samples shown in this page calls a common function
|
|
init_sed_sample_locale(), use the qse_main() macro as the main function,
|
|
and call qse_runmain() for cross-platform and cross-character-set support.
|
|
|
|
Here is the function prototype.
|
|
|
|
\includelineno sed00.h
|
|
|
|
Here goes the actual function.
|
|
|
|
\includelineno sed00.c
|
|
|
|
Note that these two files do not constitute QSEAWK and are used for samples
|
|
here only.
|
|
|
|
Customizing Streams
|
|
-------------------
|
|
|
|
You can use qse_sed_execstd() in customzing the input and output streams.
|
|
The sample below uses I/O resources of the #QSE_SED_IOSTD_STR type to use
|
|
an argument as input data and let the output to be dynamically allocated.
|
|
|
|
\includelineno sed02.c
|
|
|
|
You can use the core layer function qse_sed_exec() and implement the
|
|
::qse_sed_io_impl_t interface for more flexibility. No samples will
|
|
be provided here because the standard layer functions qse_sed_execstd()
|
|
and qse_sed_execstdfile() are the good samples.
|
|
|
|
Accessing Pattern and Hold Space
|
|
--------------------------------
|
|
|
|
The qse_sed_getspace() allows to you get the pointer and the length
|
|
of the pattern space and the hold space. It may not be so useful you
|
|
access them after execution is completed. The qse_sed_setopt()
|
|
function called with #QSE_SED_TRACER lets you set up a hook function
|
|
that can inspect various things during execution time.
|
|
|
|
The following sample prints the contents of the pattern space and
|
|
hold space at each phase of execution.
|
|
|
|
\includelineno sed03.c
|
|
|
|
Embedding In C++
|
|
----------------
|
|
|
|
The QSE::Sed and QSE::StdSed classes are provided for C++. The sample here shows
|
|
how to embed QSE::StdSed for stream editing.
|
|
|
|
\includelineno sed21.cpp
|
|
|
|
The following sample shows how to inherit QSE::StdSed and and create a
|
|
customized stream editor.
|
|
|
|
\includelineno sed22.cpp
|
|
|
|
|
|
|
|
|
|
\skipline ---------------------------------------------------------------------
|
|
\skipline the sample files are listed here for example list generation purpose.
|
|
\skipline ---------------------------------------------------------------------
|
|
\example sed01.c
|
|
\example sed02.c
|
|
\example sed03.c
|
|
\example sed21.cpp
|
|
\example sed22.cpp
|