From 46c27e2883a78388c895dc883dbb9b902fc8350d Mon Sep 17 00:00:00 2001
From: Jonathan McDowell <noodles@earth.li>
Date: Mon, 31 May 2004 23:48:22 +0000
Subject: [PATCH] cscvs to tla changeset 129 Author: noodles Date: 2004/05/27
 03:34:35 Moving makewordlist to its own file so we can use it elsewhere
 (dsilvers).

---
 wordlist.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 wordlist.h | 47 +++++++++++++++++++++++++++
 2 files changed, 142 insertions(+)
 create mode 100644 wordlist.c
 create mode 100644 wordlist.h

diff --git a/wordlist.c b/wordlist.c
new file mode 100644
index 0000000..0a9a836
--- /dev/null
+++ b/wordlist.c
@@ -0,0 +1,95 @@
+/*
+ * wordlist.c - Routines for manipulating word lists
+ *
+ * Jonathan McDowell <noodles@earth.li>
+ *
+ * Copyright 2004 Project Purple
+ *
+ * $Id: wordlist.c,v 1.1 2004/05/27 03:34:35 noodles Exp $
+ */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "ll.h"
+#include "decodekey.h"
+#include "log.h"
+#include "wordlist.h"
+
+/**
+ *	makewordlist - Takes a string and splits it into a set of unique words.
+ *	@wordlist: The current word list.
+ *	@words: The string to split and add.
+ *
+ *	We take words and split it on non alpha numeric characters. These get
+ *	added to the word list if they're not already present. If the wordlist
+ *	is NULL then we start a new list, otherwise it's search for already
+ *	added words. Note that words is modified in the process of scanning.
+ *
+ *	Returns the new word list.
+ */
+struct ll *makewordlist(struct ll *wordlist, char *word)
+{
+	char *start = NULL;
+	char *end = NULL;
+
+	/*
+	 * Walk through the words string, spliting on non alphanumerics and
+	 * then checking if the word already exists in the list. If not then
+	 * we add it.
+	 */
+	end = word;
+	while (end != NULL && *end != 0) {
+		start = end;
+		while (*start != 0 && !isalnum(*start)) {
+			start++;
+		}
+		end = start;
+		while (*end != 0 && isalnum(*end)) {
+			*end = tolower(*end);
+			end++;
+		}
+		if (end - start > 1) {
+			if (*end != 0) {
+				*end = 0;
+				end++;
+			}
+
+			if (llfind(wordlist, start, strcmp) == NULL) {
+				wordlist = lladd(wordlist, start);
+			}
+		}
+	}
+	return wordlist;
+}
+
+/**
+ *	makewordlistfromkey - Takes a public key and splits it into a set of 
+ *                     unique words.
+ *	@wordlist: The current word list.
+ *	@key: The key to return the words from.
+ *
+ *	We take words and split it on non alpha numeric characters. These get
+ *	added to the word list if they're not already present. If the wordlist
+ *	is NULL then we start a new list, otherwise it's search for already
+ *	added words. Note that words is modified in the process of scanning.
+ *
+ *	Returns the new word list.
+ */
+struct ll *makewordlistfromkey(struct ll *wordlist,
+			       struct openpgp_publickey *key)
+{
+	char **uids;
+	int i;
+
+	uids = keyuids(key, NULL);
+	for (i = 0; uids[i] != NULL; ++i) {
+		wordlist = makewordlist(wordlist, uids[i]);
+		free(uids[i]);
+		uids[i] = NULL;
+	}
+	free(uids);
+
+	return wordlist;
+}
diff --git a/wordlist.h b/wordlist.h
new file mode 100644
index 0000000..e696693
--- /dev/null
+++ b/wordlist.h
@@ -0,0 +1,47 @@
+/*
+ * wordlist.h - Routines for manipulating word lists
+ *
+ * Jonathan McDowell <noodles@earth.li>
+ *
+ * Copyright 2004 Project Purple
+ *
+ * $Id: wordlist.h,v 1.1 2004/05/27 03:34:35 noodles Exp $
+ */
+
+#ifndef __WORDLIST_H__
+#define __WORDLIST_H__
+
+#include "ll.h"
+#include "keystructs.h"
+
+/**
+ *	makewordlist - Takes a string and splits it into a set of unique words.
+ *	@wordlist: The current word list.
+ *	@words: The string to split and add.
+ *
+ *	We take words and split it on non alpha numeric characters. These get
+ *	added to the word list if they're not already present. If the wordlist
+ *	is NULL then we start a new list, otherwise it's search for already
+ *	added words. Note that words is modified in the process of scanning.
+ *
+ *	Returns the new word list.
+ */
+struct ll *makewordlist(struct ll *wordlist, char *word);
+
+/**
+ *	makewordlistfromkey - Takes a public key and splits it into a set of 
+ *                     unique words.
+ *	@wordlist: The current word list.
+ *	@key: The key to return the words from.
+ *
+ *	We take words and split it on non alpha numeric characters. These get
+ *	added to the word list if they're not already present. If the wordlist
+ *	is NULL then we start a new list, otherwise it's search for already
+ *	added words. Note that words is modified in the process of scanning.
+ *
+ *	Returns the new word list.
+ */
+struct ll *makewordlistfromkey(struct ll *wordlist,
+			       struct openpgp_publickey *key);
+
+#endif /* __WORDLIST_H__ */
-- 
2.39.5