procmail
[Top] [All Lists]

fold.inc (was: Re: Folding E-mail Headers)

2006-04-26 10:05:37
Craig schreef:

One can't know too much. There is always more to learn!

Here a version in 'just procmail' ('pure procmail')

test95.rc
---------
#!/usr/local/bin/procmail -m

  DEFAULT = '/dev/null'

  NL    = '
' SPC   = ' '
  TAB   = '     '
  WS    = "$SPC$TAB"

  DOT1  = '.?'
  DOT2  = "$DOT1$DOT1"
  DOT4  = "$DOT2$DOT2"
  DOT8  = "$DOT4$DOT4"
  DOT16 = "$DOT8$DOT8"
  DOT32 = "$DOT16$DOT16"
  DOT64 = "$DOT32$DOT32"


  H2FOLD1 = 'X-Very-Long: a bb ccc dddd eeeee ffffff ggggggg hhhhhhhh
iiiiiiiii'
  H2FOLD1 = "${H2FOLD1} jjjjjjjjjj kkkkkkkkkkk llllllllllll
mmmmmmmmmmmmm"
  H2FOLD1 = "${H2FOLD1} nnnnnnnnnnnnnn ooooooooooooooo pppppppppppppppp"
  H2FOLD1 = "${H2FOLD1} qqqqqqqqqqqqqqqqq rrrrrrrrrrrrrrrrrr
sssssssssssssssssss"
  H2FOLD1 = "${H2FOLD1} tttttttttttttttttttt uuuuuuuuuuuuuuuuuuuuuz"

  H2FOLD2 = 'X-Very-Long: abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiii'
  H2FOLD2 = "${H2FOLD2}jjjjjjjjjjkkkkkkkkkkkllllllllllllmmmmmmmmmmmmm"
  H2FOLD2 = "${H2FOLD2}nnnnnnnnnnnnnnooooooooooooooopppppppppppppppp"
  H2FOLD2 =
"${H2FOLD2}qqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrsssssssssssssssssss"
  H2FOLD2 = "${H2FOLD2}ttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuz"

  fold_REGEX = "$DOT64$DOT8"   # for a max. of 72

  fold_ME   = "$H2FOLD1"
        LOG = "$NL<$fold_ME>$NL"
  INCLUDERC = 'fold.inc'
        LOG = "$NL<$fold_RETURN>$NL$NL"

  fold_ME   = "$H2FOLD2"
        LOG = "$NL<$fold_ME>$NL"
  INCLUDERC = 'fold.inc'
        LOG = "$NL<$fold_RETURN>$NL$NL"


fold.inc
--------
# pre-processing
  :0   # s/^([^:]+:) +/\1:/1  # (': ' -> '::')
  * fold_ME ?? ^^\/[^:]+:
  { fold_HEAD = "$MATCH"
    :0
    *$ fold_ME ?? ^^$\fold_HEAD[$WS]+\/.*($.*)*
    { fold_ME = $fold_HEAD:$MATCH }
  }
  :0   # s/$/ /  # (append a space)
  * ! fold_ME ?? [$WS]^^
  { fold_ME = "$fold_ME " }

  fold_RETURN  # unset
  fold_HEAD    # unset

# loop
  INCLUDERC = "$_.inc"  # fold.inc.inc

# post-processing
  :0
  *$ fold_ME ?? ^^$\fold_HEAD\/.+
  * MATCH ?? ..
  { fold_RETURN = "$fold_RETURN${fold_RETURN:+$NL$TAB}$MATCH" }

  :0  # s/ +$//  # (rtrim)
  *$ fold_RETURN ?? [$WS]^^
  *$ fold_RETURN ?? ^^\/.*($.*)*[^$WS][$WS]
  *$ fold_RETURN ?? ^^\/.*($.*)*[^$WS]
  { fold_RETURN = "$MATCH" }

  :0   # s/^([^:]+:):/\1 /  # ('::' -> ': ')
  * fold_RETURN ?? ^^\/[^:]+:
  { fold_HEAD = "$MATCH"
    :0
    *$ fold_RETURN ?? ^^$\fold_HEAD:\/.*($.*)*
    { fold_RETURN = "$fold_HEAD $MATCH" }
  }
  fold_HEAD  # unset


fold.inc.inc
------------
  :0
  *$ fold_ME ?? ^^$\fold_HEAD\/$fold_REGEX
  *$ MATCH   ?? ^^\/.*[$WS]
  *$ MATCH   ?? ^^\/.*[^$WS]
  {
    fold_HEAD   = "$fold_HEAD$MATCH"
    fold_RETURN = "$fold_RETURN${fold_RETURN:+$NL$TAB}$MATCH"
    INCLUDERC = "$_"
  }
  :0E
  *$ fold_ME ?? ^^$\fold_HEAD\/$fold_REGEX
  * MATCH ?? ..
  {
    fold_HEAD   = "$fold_HEAD$MATCH"
    fold_RETURN = "$fold_RETURN${fold_RETURN:+$NL$TAB}$MATCH"
    INCLUDERC = "$_"
  }

(not tested extensively yet)

-- 
Groet, Ruud


____________________________________________________________
procmail mailing list   Procmail homepage: http://www.procmail.org/
procmail(_at_)lists(_dot_)RWTH-Aachen(_dot_)DE
http://MailMan.RWTH-Aachen.DE/mailman/listinfo/procmail

<Prev in Thread] Current Thread [Next in Thread>