Common code indentation, now using astyle

Derek Atkins warlord at MIT.EDU
Sat Aug 29 20:43:48 EDT 2009


Looks good to me!

-derek

Christian Stimming <stimming at tuhh.de> writes:

> Another program, another try: I propose to unify some aspects of indentation 
> using the "astyle" program, http://astyle.sourceforge.net . Different from 
> the "indent" program, astyle has much less options and doesn't allow as many 
> aspects to be fine-tuned. Instead, the astyle program can be used to unify 
> only some aspects of the code (like the indentation itself) but leaving other 
> aspects alone (like comment reformatting).
>
> Also, there are no arguments to switch off something like in indent. Instead, 
> by default everything is switched off and we only explicitly switch on those 
> reformatting features which we want.
>
> Hence, I propose the following arguments:
>
> --indent=spaces=4     # Indent using 4 spaces per indent
>
> --brackets=break        # Break brackets from their pre-block statements ( 
> e.g. ANSI C / C++ style ).
>
> # No "--indent-brackets", Add extra indentation to brackets.
> # No "--indent-blocks", Add extra indentation to blocks within a function.
>
> --pad-oper                   # Insert space padding around operators.
>
> # No "--pad-paren-out", Insert space padding around parenthesis on the outside 
> only.
> # No "--unpad-paren", Remove extra space padding around parenthesis; in 
> combination with the previous one this removes the extra space on the inside. 
> This parenthesis padding doesn't work well enough, e.g. two opening 
> parenthesis appear to get an extra padding, but two closing ones don't. 
> Hence, we just leave it as-is.
>
> As a one-liner:
>
> $ astyle --indent=spaces=4 --brackets=break --pad-oper  *.[hc]
>
> Below you will find some excerpts from src/engine/Account.c, reformatted with 
> version astyle-1.23 and the above options. I think this is already quite some 
> progress, and I'd suggest to apply this to all of trunk in the next weeks, so 
> that we have done it before another stable branch is started later this year. 
>
> What do you think?
>
> Regards,
>
> Christian
>
>
>
> #include "config.h"
> #include "AccountP.h"
> #include "Split.h"
>
> #define GNC_ID_ROOT_ACCOUNT        "RootAccount"
>
> static QofLogModule log_module = GNC_MOD_ACCOUNT;
>
> /* The Canonical Account Separator.  Pre-Initialized. */
> static gchar account_separator[8] = ".";
> gunichar account_uc_separator = ':';
>
> enum
> {
>     LAST_SIGNAL
> };
>
> enum
> {
>     PROP_0,
>     PROP_NAME,
>     PROP_FULL_NAME,
>     PROP_CODE,
> };
>
> typedef struct AccountPrivate
> {
>     /* The accountName is an arbitrary string assigned by the user.
>      * It is intended to a short, 5 to 30 character long string that
>      * is displayed by the GUI as the account mnemonic.
>      */
>     char *accountName;
>
>     /* The description is an arbitrary string assigned by the user.
>      * It is intended to be a longer, 1-5 sentence description of what
>      * this account is all about.
>      */
>     char *description;
>
>     /* cached parameters */
>     gnc_numeric balance;
>     gnc_numeric cleared_balance;
>     gnc_numeric reconciled_balance;
>
>     gboolean balance_dirty;     /* balances in splits incorrect */
>
>     GList *splits;              /* list of split pointers */
>     gboolean sort_dirty;        /* sort order of splits is bad */
> } AccountPrivate;
>
> #define GET_PRIVATE(o)  \
>    (G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_ACCOUNT, AccountPrivate))
>
>
> /********************************************************************\
>  * gnc_get_account_separator                                        *
>  *   returns the current account separator character                *
>  *                                                                  *
>  * Args: none                                                       *
>  * Returns: account separator character                             *
>  \*******************************************************************/
> const gchar *
> gnc_get_account_separator_string (void)
> {
>     return account_separator;
> }
>
> void
> gnc_set_account_separator (const gchar *separator)
> {
>     gunichar uc;
>     gint count;
>
>     uc = g_utf8_get_char_validated(separator, -1);
>     if ((uc == (gunichar) - 2) || (uc == (gunichar) - 1) || 
> g_unichar_isalnum(uc))
>     {
>         account_uc_separator = ':';
>         strcpy(account_separator, ":");
>         return;
>     }
>
>     account_uc_separator = uc;
>     count = g_unichar_to_utf8(uc, account_separator);
>     account_separator[count] = '\0';
> }
>
> /********************************************************************\
> \********************************************************************/
>
> G_INLINE_FUNC void mark_account (Account *acc);
> void
> mark_account (Account *acc)
> {
>     qof_instance_set_dirty(&acc->inst);
> }
>
> /********************************************************************\
> \********************************************************************/
>
>
> static void
> gnc_account_get_property (GObject         *object,
>                           guint            prop_id,
>                           GValue          *value,
>                           GParamSpec      *pspec)
> {
>     Account *account;
>     AccountPrivate *priv;
>
>     g_return_if_fail(GNC_IS_ACCOUNT(object));
>
>     account = GNC_ACCOUNT(object);
>     priv = GET_PRIVATE(account);
>     switch (prop_id)
>     {
>     case PROP_NAME:
>         g_value_set_string(value, priv->accountName);
>         break;
>     case PROP_FULL_NAME:
>         g_value_take_string(value, xaccAccountGetFullName(account));
>         break;
>     case PROP_PLACEHOLDER:
>         g_value_set_boolean(value, xaccAccountGetPlaceholder(account));
>         break;
>     default:
>         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
>         break;
>     }
> }
>
> static void
> gnc_account_class_init (AccountClass *klass)
> {
>     GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
>
>     gobject_class->dispose = gnc_account_dispose;
>     gobject_class->finalize = gnc_account_finalize;
>     gobject_class->set_property = gnc_account_set_property;
>     gobject_class->get_property = gnc_account_get_property;
>
>     g_type_class_add_private(klass, sizeof(AccountPrivate));
>
>     g_object_class_install_property
>     (gobject_class,
>      PROP_NAME,
>      g_param_spec_string ("name",
>                           "Account Name",
>                           "The accountName is an arbitrary string "
>                           "assigned by the user.  It is intended to "
>                           "a short, 5 to 30 character long string "
>                           "that is displayed by the GUI as the "
>                           "account mnemonic.  Account names may be "
>                           "repeasted. but no two accounts that share "
>                           "a parent may have the same name.",
>                           NULL,
>                           G_PARAM_READWRITE));
>
>
>     g_object_class_install_property
>     (gobject_class,
>      PROP_PLACEHOLDER,
>      g_param_spec_boolean ("placeholder",
>                            "Placeholder",
>                            "Whether the account is a placeholder account which 
> does not "
>                            "allow transactions to be created, edited or 
> deleted.",
>                            FALSE,
>                            G_PARAM_READWRITE));
> }
>
> void
> xaccAccountSetNotes (Account *acc, const char *str)
> {
>     g_return_if_fail(GNC_IS_ACCOUNT(acc));
>
>     xaccAccountBeginEdit(acc);
>     if (str)
>     {
>         gchar *tmp = g_strstrip(g_strdup(str));
>         kvp_frame_set_slot_nc(acc->inst.kvp_data, "notes",
>                               strlen(tmp) ? kvp_value_new_string(tmp) : NULL);
>         g_free(tmp);
>     }
>     else
>     {
>         kvp_frame_set_slot_nc(acc->inst.kvp_data, "notes", NULL);
>     }
>     mark_account(acc);
>     xaccAccountCommitEdit(acc);
> }
>
> gnc_numeric
> xaccAccountGetProjectedMinimumBalance (const Account *acc)
> {
>     AccountPrivate *priv;
>     GList *node;
>     time_t today;
>     gnc_numeric lowest = gnc_numeric_zero ();
>     int seen_a_transaction = 0;
>
>     g_return_val_if_fail(GNC_IS_ACCOUNT(acc), gnc_numeric_zero());
>
>     priv = GET_PRIVATE(acc);
>     today = gnc_timet_get_today_end();
>     for (node = g_list_last(priv->splits); node; node = node->prev)
>     {
>         Split *split = node->data;
>
>         if (!seen_a_transaction)
>         {
>             lowest = xaccSplitGetBalance (split);
>             seen_a_transaction = 1;
>         }
>         else if (gnc_numeric_compare(xaccSplitGetBalance (split), lowest) < 0)
>         {
>             lowest = xaccSplitGetBalance (split);
>         }
>
>         if (xaccTransGetDate (xaccSplitGetParent (split)) <= today)
>             return lowest;
>     }
>
>     return lowest;
> }
> _______________________________________________
> gnucash-devel mailing list
> gnucash-devel at gnucash.org
> https://lists.gnucash.org/mailman/listinfo/gnucash-devel
>
>

-- 
       Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
       Member, MIT Student Information Processing Board  (SIPB)
       URL: http://web.mit.edu/warlord/    PP-ASEL-IA     N1NWH
       warlord at MIT.EDU                        PGP key available


More information about the gnucash-devel mailing list