source: style.c @ 5d9c664

barnowl_perlaimdebianowlrelease-1.4release-1.5release-1.6release-1.7release-1.8release-1.9
Last change on this file since 5d9c664 was f1e629d, checked in by Erik Nygren <nygren@mit.edu>, 18 years ago
New API for perl message formatting functions. Legacy variables are still supported for owl::format_msg and owl::receive_msg, but these functions are now also passed an owl::Message object which contains methods for accessing the contents of the message. See perlwrap.pm (and docs TBD) for the available methods. *** WARNING: The exact API for owl::Message has *** not yet stabilized. Added "style" command for creating new styles. Usage: style <name> perl <function_name> Added support for "show styles". Changed global style table from list to dictionary. Changed AIM password prompt from "Password:" to "AIM Password:". Messages are reformatted after a window resize to allow styles to take into account the width of the window. When perl throws an error, the message is put in the msgwin if possible. Added perl functions for: owl::getcurmsg() -- returns an owl::Message object for the active message in the current view. owl::getnumcols() -- returns the column width of the window owl::zephyr_getrealm() -- returns the zephyr realm owl::zephyr_getsender() -- returns the zephyr sender Made owl::COMMAND("foo"); be syntactic sugar for owl::command("COMMAND foo"); *** Is this a good or bad idea? *** This feature may be taken out before release. Added perlwrap.pm to contain perl code to be compiled into the binary. This is transformed into perlwrap.c by encapsulate.pl. Renamed readconfig.c to perlconfig.c and changed variables accordingly. Minor bugfixes in cmd.c and commands.c
  • Property mode set to 100644
File size: 2.3 KB
Line 
1#include "owl.h"
2
3static const char fileIdent[] = "$Id$";
4
5void owl_style_create_internal(owl_style *s, char *name, void (*formatfunc) (owl_fmtext *fm, owl_message *m), char *description)
6{
7  s->type=OWL_STYLE_TYPE_INTERNAL;
8  s->name=owl_strdup(name);
9  if (description) {
10    s->description=owl_strdup(description);
11  } else {
12    s->description=owl_sprintf("Owl internal style %s", name);
13  }
14  s->perlfuncname=NULL;
15  s->formatfunc=formatfunc;
16}
17
18void owl_style_create_perl(owl_style *s, char *name, char *perlfuncname, char *description)
19{
20  s->type=OWL_STYLE_TYPE_PERL;
21  s->name=owl_strdup(name);
22  s->perlfuncname=owl_strdup(perlfuncname);
23  if (description) {
24    s->description=owl_strdup(description);
25  } else {
26    s->description=owl_sprintf("User-defined perl style that calls %s", 
27                               perlfuncname);
28  }
29  s->formatfunc=NULL;
30}
31
32int owl_style_matches_name(owl_style *s, char *name)
33{
34  if (!strcmp(s->name, name)) return(1);
35  return(0);
36}
37
38char *owl_style_get_name(owl_style *s)
39{
40  return(s->name);
41}
42
43char *owl_style_get_description(owl_style *s)
44{
45  return(s->description);
46}
47
48/* Use style 's' to format message 'm' into fmtext 'fm'.
49 * 'fm' should already be be initialzed
50 */
51void owl_style_get_formattext(owl_style *s, owl_fmtext *fm, owl_message *m)
52{
53  if (s->type==OWL_STYLE_TYPE_INTERNAL) {
54    (* s->formatfunc)(fm, m);
55  } else if (s->type==OWL_STYLE_TYPE_PERL) {
56    char *body, *indent;
57
58    /* run the perl function */
59    body=owl_perlconfig_getmsg(m, 1, s->perlfuncname);
60   
61    /* indent */
62    indent=owl_malloc(strlen(body)+owl_text_num_lines(body)*OWL_TAB+10);
63    owl_text_indent(indent, body, OWL_TAB);
64   
65    /* fmtext_append.  This needs to change */
66    owl_fmtext_append_ztext(fm, indent);
67   
68    owl_free(indent);
69    owl_free(body);
70  }
71}
72
73int owl_style_validate(owl_style *s) {
74  if (!s) {
75    return -1;
76  } else if (s->type==OWL_STYLE_TYPE_INTERNAL) {
77    return 0;
78  } else if (s->type==OWL_STYLE_TYPE_PERL
79             && s->perlfuncname
80             && owl_perlconfig_is_function(s->perlfuncname)) {
81    return 0;
82  } else {
83    return -1;
84  }
85}
86
87void owl_style_free(owl_style *s)
88{
89  if (s->name) owl_free(s->name);
90  if (s->description) owl_free(s->description);
91  if (s->type==OWL_STYLE_TYPE_PERL && s->perlfuncname) {
92    owl_free(s->perlfuncname);
93  }
94}
Note: See TracBrowser for help on using the repository browser.