mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	rc.xml: move nodename() to nodename.c
This commit is contained in:
		
							parent
							
								
									a97428020e
								
							
						
					
					
						commit
						9eac349046
					
				
					 4 changed files with 58 additions and 34 deletions
				
			
		
							
								
								
									
										19
									
								
								include/common/nodename.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								include/common/nodename.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
#ifndef __LABWC_NODENAME_H
 | 
			
		||||
#define __LABWC_NODENAME_H
 | 
			
		||||
 | 
			
		||||
#include <libxml/parser.h>
 | 
			
		||||
#include <libxml/tree.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * nodename - give xml node an ascii name
 | 
			
		||||
 * @node: xml-node
 | 
			
		||||
 * @buf: buffer to receive the name
 | 
			
		||||
 * @len: size of buffer
 | 
			
		||||
 *
 | 
			
		||||
 * For example, the xml structure <a><b><c></c></b></a> would return the
 | 
			
		||||
 * name c.b.a
 | 
			
		||||
 */
 | 
			
		||||
char *nodename(xmlNode *node, char *buf, int len);
 | 
			
		||||
 | 
			
		||||
#endif /* __LABWC_NODENAME_H */
 | 
			
		||||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ labwc_sources += files(
 | 
			
		|||
  'font.c',
 | 
			
		||||
  'grab-file.c',
 | 
			
		||||
  'log.c',
 | 
			
		||||
  'nodename.c',
 | 
			
		||||
  'spawn.c',
 | 
			
		||||
  'string-helpers.c',
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										37
									
								
								src/common/nodename.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/common/nodename.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
#include <ctype.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "common/nodename.h"
 | 
			
		||||
 | 
			
		||||
char *
 | 
			
		||||
nodename(xmlNode *node, char *buf, int len)
 | 
			
		||||
{
 | 
			
		||||
	if (!node || !node->name) {
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Ignore superflous 'text.' in node name */
 | 
			
		||||
	if (node->parent && !strcmp((char *)node->name, "text")) {
 | 
			
		||||
		node = node->parent;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	char *p = buf;
 | 
			
		||||
	p[--len] = 0;
 | 
			
		||||
	for (;;) {
 | 
			
		||||
		const char *name = (char *)node->name;
 | 
			
		||||
		char c;
 | 
			
		||||
		while ((c = *name++) != 0) {
 | 
			
		||||
			*p++ = tolower(c);
 | 
			
		||||
			if (!--len)
 | 
			
		||||
				return buf;
 | 
			
		||||
		}
 | 
			
		||||
		*p = 0;
 | 
			
		||||
		node = node->parent;
 | 
			
		||||
		if (!node || !node->name) {
 | 
			
		||||
			return buf;
 | 
			
		||||
		}
 | 
			
		||||
		*p++ = '.';
 | 
			
		||||
		if (!--len) {
 | 
			
		||||
			return buf;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -14,6 +14,7 @@
 | 
			
		|||
#include "common/dir.h"
 | 
			
		||||
#include "common/font.h"
 | 
			
		||||
#include "common/log.h"
 | 
			
		||||
#include "common/nodename.h"
 | 
			
		||||
#include "common/string-helpers.h"
 | 
			
		||||
#include "config/keybind.h"
 | 
			
		||||
#include "config/rcxml.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -146,40 +147,6 @@ entry(xmlNode *node, char *nodename, char *content)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *
 | 
			
		||||
nodename(xmlNode *node, char *buf, int len)
 | 
			
		||||
{
 | 
			
		||||
	if (!node || !node->name) {
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Ignore superflous 'text.' in node name */
 | 
			
		||||
	if (node->parent && !strcmp((char *)node->name, "text")) {
 | 
			
		||||
		node = node->parent;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	char *p = buf;
 | 
			
		||||
	p[--len] = 0;
 | 
			
		||||
	for (;;) {
 | 
			
		||||
		const char *name = (char *)node->name;
 | 
			
		||||
		char c;
 | 
			
		||||
		while ((c = *name++) != 0) {
 | 
			
		||||
			*p++ = tolower(c);
 | 
			
		||||
			if (!--len)
 | 
			
		||||
				return buf;
 | 
			
		||||
		}
 | 
			
		||||
		*p = 0;
 | 
			
		||||
		node = node->parent;
 | 
			
		||||
		if (!node || !node->name) {
 | 
			
		||||
			return buf;
 | 
			
		||||
		}
 | 
			
		||||
		*p++ = '.';
 | 
			
		||||
		if (!--len) {
 | 
			
		||||
			return buf;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
process_node(xmlNode *node)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue