NeoMutt  2024-10-02-34-g9dd811
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
expando.h File Reference

Parsed Expando. More...

#include <stdbool.h>
#include "render.h"
+ Include dependency graph for expando.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  Expando
 Parsed Expando trees. More...
 

Functions

void expando_free (struct Expando **ptr)
 Free an Expando object.
 
struct Expandoexpando_new (const char *format)
 Create an Expando from a string.
 
bool expando_equal (const struct Expando *a, const struct Expando *b)
 Compare two expandos.
 
struct Expandoexpando_parse (const char *str, const struct ExpandoDefinition *defs, struct Buffer *err)
 Parse an Expando string.
 
int expando_render (const struct Expando *exp, const struct ExpandoRenderData *rdata, void *data, MuttFormatFlags flags, int max_cols, struct Buffer *buf)
 Render an Expando + data into a string.
 

Detailed Description

Parsed Expando.

Authors
  • Tóth János
  • Richard Russon

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file expando.h.

Function Documentation

◆ expando_free()

void expando_free ( struct Expando **  ptr)

Free an Expando object.

Parameters
[out]ptrExpando to free

Definition at line 58 of file expando.c.

59{
60 if (!ptr || !*ptr)
61 return;
62
63 struct Expando *exp = *ptr;
64
65 node_free(&exp->node);
66 FREE(&exp->string);
67
68 FREE(ptr);
69}
#define FREE(x)
Definition: memory.h:45
void node_free(struct ExpandoNode **ptr)
Free an ExpandoNode and its private data.
Definition: node.c:48
Parsed Expando trees.
Definition: expando.h:41
struct ExpandoNode * node
Parsed tree.
Definition: expando.h:43
const char * string
Pointer to the parsed string.
Definition: expando.h:42
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ expando_new()

struct Expando * expando_new ( const char *  format)

Create an Expando from a string.

Parameters
formatFormat string to parse
Return values
ptrNew Expando object

Definition at line 46 of file expando.c.

47{
48 struct Expando *exp = mutt_mem_calloc(1, sizeof(struct Expando));
49 exp->string = mutt_str_dup(format);
50 exp->node = node_container_new();
51 return exp;
52}
void * mutt_mem_calloc(size_t nmemb, size_t size)
Allocate zeroed memory on the heap.
Definition: memory.c:51
char * mutt_str_dup(const char *str)
Copy a string, safely.
Definition: string.c:253
struct ExpandoNode * node_container_new(void)
Create a new Container ExpandoNode.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ expando_equal()

bool expando_equal ( const struct Expando a,
const struct Expando b 
)

Compare two expandos.

Parameters
aFirst Expando
bSecond Expando
Return values
trueThey are identical

Definition at line 143 of file expando.c.

144{
145 if (!a && !b) /* both empty */
146 return true;
147 if (!a ^ !b) /* one is empty, but not the other */
148 return false;
149
150 return mutt_str_equal(a->string, b->string);
151}
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
Definition: string.c:660
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ expando_parse()

struct Expando * expando_parse ( const char *  str,
const struct ExpandoDefinition defs,
struct Buffer err 
)

Parse an Expando string.

Parameters
strString to parse
defsData defining Expando
errBuffer for error messages
Return values
ptrNew Expando

Definition at line 78 of file expando.c.

80{
81 if (!str || (*str == '\0') || !defs)
82 return NULL;
83
84 struct Expando *exp = expando_new(str);
85
86 struct ExpandoParseError error = { 0 };
87 const char *end = NULL;
88 const char *start = exp->string;
89
90 while (*start)
91 {
92 struct ExpandoNode *node = node_parse(start, NULL, CON_NO_CONDITION, &end, defs, &error);
93 if (!node)
94 break;
95
96 node_add_child(exp->node, node);
97 start = end;
98 }
99
100 if (error.position)
101 {
102 buf_strcpy(err, error.message);
103 expando_free(&exp);
104 return NULL;
105 }
106
107 // Optimise the tree layout
110
111 return exp;
112}
size_t buf_strcpy(struct Buffer *buf, const char *s)
Copy a string into a Buffer.
Definition: buffer.c:395
struct ExpandoNode * node_parse(const char *str, const char *end, enum ExpandoConditionStart condition_start, const char **parsed_until, const struct ExpandoDefinition *defs, struct ExpandoParseError *err)
Parse a format string into ExpandoNodes.
Definition: parse.c:124
struct Expando * expando_new(const char *format)
Create an Expando from a string.
Definition: expando.c:46
void expando_free(struct Expando **ptr)
Free an Expando object.
Definition: expando.c:58
void node_add_child(struct ExpandoNode *node, struct ExpandoNode *child)
Add a child to an ExpandoNode.
Definition: node.c:76
@ CON_NO_CONDITION
Parser is not currently in a condition.
void node_container_collapse_all(struct ExpandoNode **ptr)
Remove unnecessary Containers.
void node_padding_repad(struct ExpandoNode **ptr)
Rearrange Padding in a tree of ExpandoNodes.
Definition: node_padding.c:282
Basic Expando Node.
Definition: node.h:67
Buffer for parsing errors.
Definition: parse.h:35
const char * position
Position of error in original string.
Definition: parse.h:37
char message[256]
Error message.
Definition: parse.h:36
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ expando_render()

int expando_render ( const struct Expando exp,
const struct ExpandoRenderData rdata,
void *  data,
MuttFormatFlags  flags,
int  max_cols,
struct Buffer buf 
)

Render an Expando + data into a string.

Parameters
[in]expExpando containing the expando tree
[in]rdataExpando render data
[in]dataCallback data
[in]flagsCallback flags
[in]max_colsNumber of screen columns (-1 means unlimited)
[out]bufBuffer in which to save string
Return values
numNumber of bytes written to buf and screen columns used

Definition at line 124 of file expando.c.

126{
127 if (!exp || !exp->node || !rdata)
128 return 0;
129
130 // Give enough space for a long command line
131 if (max_cols == -1)
132 max_cols = 8192;
133
134 return node_render(exp->node, rdata, buf, max_cols, data, flags);
135}
int node_render(const struct ExpandoNode *node, const struct ExpandoRenderData *rdata, struct Buffer *buf, int max_cols, void *data, MuttFormatFlags flags)
Render a tree of ExpandoNodes into a string.
Definition: render.c:45
+ Here is the call graph for this function:
+ Here is the caller graph for this function: