summaryrefslogtreecommitdiffstats
path: root/modules/libpref/prefread.h
diff options
context:
space:
mode:
Diffstat (limited to 'modules/libpref/prefread.h')
-rw-r--r--modules/libpref/prefread.h118
1 files changed, 118 insertions, 0 deletions
diff --git a/modules/libpref/prefread.h b/modules/libpref/prefread.h
new file mode 100644
index 000000000..2a09b30b6
--- /dev/null
+++ b/modules/libpref/prefread.h
@@ -0,0 +1,118 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef prefread_h__
+#define prefread_h__
+
+#include "prefapi.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Callback function used to notify consumer of preference name value pairs.
+ * The pref name and value must be copied by the implementor of the callback
+ * if they are needed beyond the scope of the callback function.
+ *
+ * @param closure
+ * user data passed to PREF_InitParseState
+ * @param pref
+ * preference name
+ * @param val
+ * preference value
+ * @param type
+ * preference type (PREF_STRING, PREF_INT, or PREF_BOOL)
+ * @param defPref
+ * preference type (true: default, false: user preference)
+ * @param stickyPref
+ * default preference marked as a "sticky" pref
+ */
+typedef void (*PrefReader)(void *closure,
+ const char *pref,
+ PrefValue val,
+ PrefType type,
+ bool defPref,
+ bool stickyPref);
+
+/**
+ * Report any errors or warnings we encounter during parsing.
+ */
+typedef void (*PrefParseErrorReporter)(const char* message, int line, bool error);
+
+/* structure fields are private */
+typedef struct PrefParseState {
+ PrefReader reader;
+ PrefParseErrorReporter reporter;
+ void *closure;
+ int state; /* PREF_PARSE_... */
+ int nextstate; /* sometimes used... */
+ const char *smatch; /* string to match */
+ int sindex; /* next char of smatch to check */
+ /* also, counter in \u parsing */
+ char16_t utf16[2]; /* parsing UTF16 (\u) escape */
+ int esclen; /* length in esctmp */
+ char esctmp[6]; /* raw escape to put back if err */
+ char quotechar; /* char delimiter for quotations */
+ char *lb; /* line buffer (only allocation) */
+ char *lbcur; /* line buffer cursor */
+ char *lbend; /* line buffer end */
+ char *vb; /* value buffer (ptr into lb) */
+ PrefType vtype; /* PREF_STRING,INT,BOOL */
+ bool fdefault; /* true if (default) pref */
+ bool fstickydefault; /* true if (sticky) pref */
+} PrefParseState;
+
+/**
+ * PREF_InitParseState
+ *
+ * Called to initialize a PrefParseState instance.
+ *
+ * @param ps
+ * PrefParseState instance.
+ * @param reader
+ * PrefReader callback function, which will be called once for each
+ * preference name value pair extracted.
+ * @param reporter
+ * PrefParseErrorReporter callback function, which will be called if we
+ * encounter any errors (stop) or warnings (continue) during parsing.
+ * @param closure
+ * PrefReader closure.
+ */
+void PREF_InitParseState(PrefParseState *ps, PrefReader reader,
+ PrefParseErrorReporter reporter, void *closure);
+
+/**
+ * PREF_FinalizeParseState
+ *
+ * Called to release any memory in use by the PrefParseState instance.
+ *
+ * @param ps
+ * PrefParseState instance.
+ */
+void PREF_FinalizeParseState(PrefParseState *ps);
+
+/**
+ * PREF_ParseBuf
+ *
+ * Called to parse a buffer containing some portion of a preference file. This
+ * function may be called repeatedly as new data is made available. The
+ * PrefReader callback function passed PREF_InitParseState will be called as
+ * preference name value pairs are extracted from the data.
+ *
+ * @param ps
+ * PrefParseState instance. Must have been initialized.
+ * @param buf
+ * Raw buffer containing data to be parsed.
+ * @param bufLen
+ * Length of buffer.
+ *
+ * @return false if buffer contains malformed content.
+ */
+bool PREF_ParseBuf(PrefParseState *ps, const char *buf, int bufLen);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* prefread_h__ */