interim commit. added some code for qse_sed_t
This commit is contained in:
parent
a76f07bc88
commit
4536d7308f
@ -57,6 +57,27 @@ void qse_sed_close (
|
||||
);
|
||||
/******/
|
||||
|
||||
/****f* Text Processor/qse_sed_init
|
||||
* NAME
|
||||
* qse_sed_init - initialize a stream editor
|
||||
* SYNOPSIS
|
||||
*/
|
||||
qse_sed_t* qse_sed_init (
|
||||
qse_sed_t* sed,
|
||||
qse_mmgr_t* mmgr
|
||||
);
|
||||
/******/
|
||||
|
||||
/****f* Text Processor/qse_sed_fini
|
||||
* NAME
|
||||
* qse_sed_fini - finalize a stream editor
|
||||
* SYNOPSIS
|
||||
*/
|
||||
void qse_sed_fini (
|
||||
qse_sed_t* sed
|
||||
);
|
||||
/******/
|
||||
|
||||
|
||||
int qse_sed_execute (
|
||||
qse_sed_t* sed
|
||||
|
@ -219,7 +219,7 @@ map_t* qse_map_open (mmgr_t* mmgr, size_t ext, size_t capa, int factor)
|
||||
if (mmgr == QSE_NULL) return QSE_NULL;
|
||||
}
|
||||
|
||||
map = (qse_map_t*) QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(qse_map_t) + ext);
|
||||
map = (map_t*) QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(map_t) + ext);
|
||||
if (map == QSE_NULL) return QSE_NULL;
|
||||
|
||||
if (qse_map_init (map, mmgr, capa, factor) == QSE_NULL)
|
||||
|
@ -2,6 +2,9 @@
|
||||
AM_CFLAGS = -I$(top_builddir)/include
|
||||
|
||||
lib_LTLIBRARIES = libqseutl.la
|
||||
libqseutl_la_SOURCES = assert.c http.c main.c stdio.c sed.c tgp.c
|
||||
libqseutl_la_SOURCES = \
|
||||
assert.c http.c main.c stdio.c \
|
||||
sed.c tgp.c \
|
||||
sed.h
|
||||
libqseutl_la_LDFLAGS = -version-info 1:0:0 -no-undefined -L../cmn
|
||||
libqseutl_la_LIBADD = -lqsecmn
|
||||
|
@ -197,7 +197,11 @@ top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
AM_CFLAGS = -I$(top_builddir)/include
|
||||
lib_LTLIBRARIES = libqseutl.la
|
||||
libqseutl_la_SOURCES = assert.c http.c main.c stdio.c sed.c tgp.c
|
||||
libqseutl_la_SOURCES = \
|
||||
assert.c http.c main.c stdio.c \
|
||||
sed.c tgp.c \
|
||||
sed.h
|
||||
|
||||
libqseutl_la_LDFLAGS = -version-info 1:0:0 -no-undefined -L../cmn
|
||||
libqseutl_la_LIBADD = -lqsecmn
|
||||
all: all-am
|
||||
|
@ -16,16 +16,89 @@
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
#include <qse/utl/sed.h>
|
||||
#include "sed.h"
|
||||
#include "../cmn/mem.h"
|
||||
|
||||
QSE_IMPLEMENT_COMMON_FUNCTIONS (sed)
|
||||
|
||||
qse_sed_t* qse_sed_open (qse_mmgr_t* mmgr, qse_size_t xtn)
|
||||
{
|
||||
qse_sed_t* sed;
|
||||
|
||||
if (mmgr == QSE_NULL)
|
||||
{
|
||||
mmgr = QSE_MMGR_GETDFL();
|
||||
|
||||
QSE_ASSERTX (mmgr != QSE_NULL,
|
||||
"Set the memory manager with QSE_MMGR_SETDFL()");
|
||||
|
||||
if (mmgr == QSE_NULL) return QSE_NULL;
|
||||
}
|
||||
|
||||
sed = (qse_sed_t*) QSE_MMGR_ALLOC (mmgr, QSE_SIZEOF(qse_sed_t) + xtn);
|
||||
if (sed == QSE_NULL) return QSE_NULL;
|
||||
|
||||
if (qse_sed_init (sed, mmgr) == QSE_NULL)
|
||||
{
|
||||
QSE_MMGR_FREE (sed->mmgr, sed);
|
||||
return QSE_NULL;
|
||||
}
|
||||
|
||||
return sed;
|
||||
}
|
||||
|
||||
void qse_sed_close (qse_sed_t* sed)
|
||||
{
|
||||
qse_sed_fini (sed);
|
||||
QSE_MMGR_FREE (sed->mmgr, sed);
|
||||
}
|
||||
|
||||
qse_sed_t* qse_sed_init (qse_sed_t* sed, qse_mmgr_t* mmgr)
|
||||
{
|
||||
QSE_MEMSET (sed, 0, sizeof(*sed));
|
||||
sed->mmgr = mmgr;
|
||||
|
||||
return sed;
|
||||
}
|
||||
|
||||
void qse_sed_fini (qse_sed_t* sed)
|
||||
{
|
||||
}
|
||||
|
||||
static const qse_char_t* address (const qse_char_t* cp, qse_sed_a_t* a)
|
||||
{
|
||||
qse_char_t c;
|
||||
|
||||
if ((c = *cp++) == QSE_T('$'))
|
||||
a->type = QSE_SED_A_DOL;
|
||||
else if (c == QSE_T('/'))
|
||||
{
|
||||
}
|
||||
|
||||
return cp;
|
||||
}
|
||||
|
||||
static void compile (const qse_char_t* str)
|
||||
{
|
||||
const qse_char_t* cp = str;
|
||||
|
||||
while (1)
|
||||
{
|
||||
/* TODO: should use ISSPACE()? or is it enough to
|
||||
* check for a ' ' and '\t' because the input 'str'
|
||||
* is just a line
|
||||
*/
|
||||
while (*cp == QSE_T(' ') || *cp == QSE_T('\t')) cp++;
|
||||
|
||||
if (*cp == QSE_T('\0') || *cp == QSE_T('#')) break;
|
||||
|
||||
if (*cp == QSE_T(';'))
|
||||
{
|
||||
cp++;
|
||||
continue;
|
||||
}
|
||||
|
||||
cp = address (cp/*, &rep->ad1*/);
|
||||
}
|
||||
|
||||
}
|
||||
|
73
qse/lib/utl/sed.h
Normal file
73
qse/lib/utl/sed.h
Normal file
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
Copyright 2006-2009 Chung, Hyung-Hwan.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef _QSE_LIB_UTL_SED_H_
|
||||
#define _QSE_LIB_UTL_SED_H_
|
||||
|
||||
#include <qse/utl/sed.h>
|
||||
|
||||
typedef qse_int_t qse_sed_line_t;
|
||||
|
||||
typedef struct qse_sed_a_t qse_sed_a_t; /* address */
|
||||
typedef struct qse_sed_c_t qse_sed_c_t; /* command */
|
||||
typedef struct qse_sed_l_t qse_sed_l_t; /* label */
|
||||
|
||||
struct qse_sed_a_t
|
||||
{
|
||||
enum
|
||||
{
|
||||
QSE_SED_A_NONE, /* no address */
|
||||
QSE_SED_A_DOL, /* $ */
|
||||
QSE_SED_A_LINE, /* line # */
|
||||
QSE_SED_A_REX, /* regular expression */
|
||||
QSE_SED_A_LAST /* the last regular expression */
|
||||
} type;
|
||||
|
||||
union
|
||||
{
|
||||
qse_sed_line_t line;
|
||||
void* rex;
|
||||
} u;
|
||||
};
|
||||
|
||||
struct qse_sed_c_t
|
||||
{
|
||||
qse_sed_a_t a1; /* optional start address */
|
||||
qse_sed_a_t a2; /* optional end address */
|
||||
|
||||
union
|
||||
{
|
||||
void* rex; /* regular expression */
|
||||
qse_char_t* text; /* added text or file name */
|
||||
qse_sed_c_t* lbl; /* destination command of branch */
|
||||
|
||||
} u;
|
||||
|
||||
qse_char_t* rhs; /* right-hand side of sustitution */
|
||||
};
|
||||
|
||||
struct qse_sed_l_t
|
||||
{
|
||||
qse_char_t name[9]; /* label name */
|
||||
qse_sed_c_t* chain;
|
||||
qse_sed_c_t* address; /* command associated with label */
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user