#!/bin/bash # (re)quote input lines email using $QUOTE to appropriate level. # It's intended use is for cleaning up mails or reformatting comments etc. # # License: LGPLv2 # # Note fmt has the --prefix option that does the appropriate thing # for C comments for e.g. so the main use of this script is for # badly formatted email. global QUOTE := '"> '" global MIN_TEXT_LEN := '8' if test $Argc == 3 { global QUOTE := $1 shift } if test $Argc != 2 { echo "Usage: $0 [quote_string(> )] response_level(starting at 0) line_width" > !2 exit 1 } global RESPONSE_LEVEL := $1 global TEXT_WIDTH := $[expr $2 - $1 '*' $(#QUOTE)] if test $TEXT_WIDTH -lt $MIN_TEXT_LEN { echo "Aborting as line length will be less than $MIN_TEXT_LEN" > !2 exit 1 } for i in [$[seq 1 $RESPONSE_LEVEL]] { global RESPONSE_DELIM := ""$RESPONSE_DELIM$QUOTE"" } global RESPONSE_DELIM := $[echo $RESPONSE_DELIM | sed 's/[ ]*$//] #remove tailing spaces global QUOTE_DEL := $[echo $QUOTE | tr -d ' ] tr -ds "$QUOTE_DEL\\n" ' ' | fmt -w$TEXT_WIDTH | sed -e "s/^[ ]*\(.*\)/$RESPONSE_DELIM \1/" (CommandList children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:QUOTE) op:Equal rhs:{(DQ ("> "))} spids:[28])] spids: [28] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:MIN_TEXT_LEN) op:Equal rhs:{(8)} spids:[33])] spids: [33] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {($ VSub_Pound "$#")} {(Lit_Other "=") (Lit_Other "=")} {(3)} {(Lit_Other "]")} ) terminator: ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:QUOTE) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [54] ) ] spids: [54] ) (C {(shift)}) ] spids: [-1 51] ) ] spids: [-1 62] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {($ VSub_Pound "$#")} {(KW_Bang "!") (Lit_Other "=")} {(2)} {(Lit_Other "]")} ) terminator: ) ] action: [ (SimpleCommand words: [ {(echo)} { (DQ ("Usage: ") ($ VSub_Number "$0") (" [quote_string(> )] response_level(starting at 0) line_width") ) } ] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[90])] ) (C {(exit)} {(1)}) ] spids: [-1 79] ) ] spids: [-1 98] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESPONSE_LEVEL) op: Equal rhs: {($ VSub_Number "$1")} spids: [101] ) ] spids: [101] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TEXT_WIDTH) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(expr)} {($ VSub_Number "$2")} {(-)} {($ VSub_Number "$1")} {(EscapedLiteralPart token:)} {(BracedVarSub token: prefix_op:VSub_Pound spids:[116119])} ) ] ) left_token: spids: [105 120] ) } spids: [104] ) ] spids: [104] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {($ VSub_Name "$TEXT_WIDTH")} {(-lt)} {($ VSub_Name "$MIN_TEXT_LEN")} {(Lit_Other "]")} ) terminator: ) ] action: [ (SimpleCommand words: [ {(echo)} {(DQ ("Aborting as line length will be less than ") ($ VSub_Name "$MIN_TEXT_LEN"))} ] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[146])] ) (C {(exit)} {(1)}) ] spids: [-1 136] ) ] spids: [-1 154] ) (ForEach iter_name: i iter_words: [ { (CommandSubPart command_list: (CommandList children: [(C {(seq)} {(1)} {($ VSub_Name "$RESPONSE_LEVEL")})] ) left_token: spids: [163 169] ) } ] do_arg_iter: False body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESPONSE_DELIM) op: Equal rhs: {(DQ ($ VSub_Name "$RESPONSE_DELIM") ($ VSub_Name "$QUOTE"))} spids: [175] ) ] spids: [175] ) ] spids: [172 181] ) spids: [162 170] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RESPONSE_DELIM) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name "$RESPONSE_DELIM"))}) (C {(sed)} {(SQ <"s/[ ]*$//">)}) ] negated: False ) ] ) left_token: spids: [184 198] ) } spids: [183] ) ] spids: [183] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:QUOTE_DEL) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(DQ ($ VSub_Name "$QUOTE"))}) (C {(tr)} {(-d)} {(SQ <" ">)}) ] negated: False ) ] ) left_token: spids: [205 221] ) } spids: [204] ) ] spids: [204] ) (Pipeline children: [ (C {(tr)} {(-ds)} {(DQ ($ VSub_Name "$QUOTE_DEL") (EscapedLiteralPart token:) (n))} {(SQ <" ">)} ) (C {(fmt)} {(-w) ($ VSub_Name "$TEXT_WIDTH")}) (C {(sed)} {(-e)} { (DQ ("s/^[ ]*") (EscapedLiteralPart token:) (".*") (EscapedLiteralPart token:) (/) ($ VSub_Name "$RESPONSE_DELIM") (" ") (EscapedLiteralPart token:) (/) ) } ) ] negated: False ) ] )