2001-10-19 18:36:57 +04:00
/*
2004-03-30 23:35:44 +04:00
* Copyright ( C ) 2001 - 2004 Sistina Software , Inc . All rights reserved .
2010-04-21 12:01:51 +04:00
* Copyright ( C ) 2004 - 2010 Red Hat , Inc . All rights reserved .
2001-10-19 18:36:57 +04:00
*
2004-03-30 23:35:44 +04:00
* This file is part of LVM2 .
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
* of the GNU General Public License v .2 .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software Foundation ,
2016-01-21 13:49:46 +03:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
2001-10-19 18:36:57 +04:00
*/
2010-04-21 12:01:51 +04:00
/* hack - using unexported internal function */
2010-04-22 21:42:38 +04:00
# define DEBUG
2010-04-21 12:01:51 +04:00
# include "regex/parse_rx.c"
2001-10-19 18:36:57 +04:00
# include <stdio.h>
# include <ctype.h>
static void _pretty_print ( struct rx_node * rx , int depth )
{
int i ;
for ( i = 0 ; i < depth ; i + + )
printf ( " " ) ;
/* display info about the node */
switch ( rx - > type ) {
case CAT :
printf ( " Cat " ) ;
break ;
case OR :
printf ( " Or " ) ;
break ;
case STAR :
printf ( " Star " ) ;
break ;
case PLUS :
printf ( " Plus " ) ;
break ;
case QUEST :
printf ( " Quest " ) ;
break ;
case CHARSET :
printf ( " Charset : " ) ;
for ( i = 0 ; i < 256 ; i + + ) {
2010-04-21 12:01:51 +04:00
if ( dm_bit ( rx - > charset , i ) & & isprint ( i ) )
2001-10-19 18:36:57 +04:00
printf ( " %c " , ( char ) i ) ;
}
break ;
default :
printf ( " Unknown type " ) ;
}
printf ( " \n " ) ;
if ( rx - > left )
_pretty_print ( rx - > left , depth + 1 ) ;
if ( rx - > right )
_pretty_print ( rx - > right , depth + 1 ) ;
}
int main ( int argc , char * * argv )
{
2005-10-17 03:03:59 +04:00
struct dm_pool * mem ;
2001-10-19 18:36:57 +04:00
struct rx_node * rx ;
2010-04-22 07:12:01 +04:00
int regex_print = 0 ;
2010-04-22 21:42:38 +04:00
int show_nodes = 0 ;
2010-04-22 07:12:01 +04:00
int regex_arg = 1 ;
if ( argc = = 3 & & ! strcmp ( argv [ 1 ] , " -r " ) ) {
regex_print + + ;
regex_arg + + ;
argc - - ;
}
2001-10-19 18:36:57 +04:00
2010-04-22 21:42:38 +04:00
if ( argc = = 3 & & ! strcmp ( argv [ 1 ] , " -R " ) ) {
regex_print + + ;
show_nodes + + ;
regex_arg + + ;
argc - - ;
}
2001-10-19 18:36:57 +04:00
if ( argc ! = 2 ) {
2010-04-22 07:12:01 +04:00
fprintf ( stderr , " Usage : %s [-r] <regex> \n " , argv [ 0 ] ) ;
2001-10-19 18:36:57 +04:00
exit ( 0 ) ;
}
2010-04-21 12:01:51 +04:00
dm_log_init_verbose ( _LOG_DEBUG ) ;
2001-10-19 18:36:57 +04:00
2010-04-21 12:01:51 +04:00
if ( ! ( mem = dm_pool_create ( " parse_regex " , 1024 ) ) ) {
2001-10-19 18:36:57 +04:00
fprintf ( stderr , " Couldn't create pool \n " ) ;
exit ( 1 ) ;
}
2010-04-22 07:12:01 +04:00
if ( ! ( rx = rx_parse_str ( mem , argv [ regex_arg ] ) ) ) {
2010-04-21 12:01:51 +04:00
dm_pool_destroy ( mem ) ;
2001-10-19 18:36:57 +04:00
fprintf ( stderr , " Couldn't parse regex \n " ) ;
exit ( 1 ) ;
}
2010-04-22 07:12:01 +04:00
if ( regex_print )
2010-04-22 21:42:38 +04:00
_regex_print ( rx , 0 , show_nodes ) ;
2010-04-22 07:12:01 +04:00
else
_pretty_print ( rx , 0 ) ;
2005-10-17 03:03:59 +04:00
dm_pool_destroy ( mem ) ;
2001-10-19 18:36:57 +04:00
return 0 ;
}