diff options
Diffstat (limited to 'bin/mail')
| -rwxr-xr-x | bin/mail/comment.sh | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/bin/mail/comment.sh b/bin/mail/comment.sh index 299299a..f13b03d 100755 --- a/bin/mail/comment.sh +++ b/bin/mail/comment.sh | |||
| @@ -6,9 +6,10 @@ | |||
| 6 | 6 | ||
| 7 | # 1. Check mail is for comment {{{ | 7 | # 1. Check mail is for comment {{{ |
| 8 | 8 | ||
| 9 | # Restore mail into variable | 9 | # Restore mail into variables |
| 10 | MAIL="$(tr -d '\r')" | 10 | MAIL="$(tr -d '\r')" |
| 11 | header="$(<<<"$MAIL" sed '/^$/ q')" | 11 | # join multi-line field value into one line |
| 12 | header="$(<<<"$MAIL" sed '/^$/ q; :a; N; s/\n\s\+//; ta')" | ||
| 12 | body="$(<<<"$MAIL" sed -n '/^$/,$ p' | sed '1d')" | 13 | body="$(<<<"$MAIL" sed -n '/^$/,$ p' | sed '1d')" |
| 13 | 14 | ||
| 14 | # determine mail is for comment by pattern | 15 | # determine mail is for comment by pattern |
| @@ -38,8 +39,9 @@ markdown_bin=${markdown_bin:-markdown} | |||
| 38 | shopt -s lastpipe; set +m; | 39 | shopt -s lastpipe; set +m; |
| 39 | 40 | ||
| 40 | # save each field of header into variables | 41 | # save each field of header into variables |
| 41 | <<<"$header" grep '^[a-zA-Z]' \ | 42 | echo "$header" | \ |
| 42 | | while read field value; do | 43 | while read field value; do |
| 44 | echo "$field" "$value" >>/tmp/header | ||
| 43 | declare field=$(<<<$field tr [:lower:] [:upper:] | tr '-' '_' | tr -d ':') | 45 | declare field=$(<<<$field tr [:lower:] [:upper:] | tr '-' '_' | tr -d ':') |
| 44 | declare $field="${value}" | 46 | declare $field="${value}" |
| 45 | done | 47 | done |
| @@ -66,13 +68,8 @@ output=$output_dir/${path}.comment.html | |||
| 66 | # 5. Get comment from mail body {{{ | 68 | # 5. Get comment from mail body {{{ |
| 67 | 69 | ||
| 68 | # check mail includes multiple part | 70 | # check mail includes multiple part |
| 69 | if [[ "$CONTENT_TYPE" =~ mixed ]]; then | 71 | boundary="$(<<<"$CONTENT_TYPE" sed -En 's/^.*boundary="?([^"]+)"?.*$/\1/p')" |
| 70 | boundary="$(<<<"$CONTENT_TYPE" sed -En 's/^.*boundary="(.*)".*$/\1/p')" | 72 | if [ -n "${boundary}" ]; then |
| 71 | if [ $boundary = "" ]; then | ||
| 72 | echo 'cannot get boundary from mail header' >&2 | ||
| 73 | exit 1 | ||
| 74 | fi | ||
| 75 | |||
| 76 | # print content of first mail part | 73 | # print content of first mail part |
| 77 | boundaryPat="\\|^--${boundary}\$|" | 74 | boundaryPat="\\|^--${boundary}\$|" |
| 78 | body="$(<<<"$body" sed -n "${boundaryPat},${boundaryPat} p" | sed -n "1,4d; ${boundaryPat} q; p")" | 75 | body="$(<<<"$body" sed -n "${boundaryPat},${boundaryPat} p" | sed -n "1,4d; ${boundaryPat} q; p")" |
| @@ -85,10 +82,17 @@ fi | |||
| 85 | if [ ! -f $output ] || ! xmllint --html --nofixup-base-uris $output &>/dev/null; then | 82 | if [ ! -f $output ] || ! xmllint --html --nofixup-base-uris $output &>/dev/null; then |
| 86 | <<-LAYOUT cat >$output | 83 | <<-LAYOUT cat >$output |
| 87 | <style> | 84 | <style> |
| 85 | ul { | ||
| 86 | padding-inline: 1rem; | ||
| 87 | li { | ||
| 88 | margin-block: 1rem; | ||
| 89 | } | ||
| 90 | } | ||
| 88 | .comment-body { | 91 | .comment-body { |
| 92 | margin-top: 0.5rem; | ||
| 89 | padding: 0.5rem; | 93 | padding: 0.5rem; |
| 90 | width: fit-content; | 94 | overflow-x: scroll; |
| 91 | border-radius: 8px; | 95 | border-radius: 4px; |
| 92 | background: lightblue; | 96 | background: lightblue; |
| 93 | p { | 97 | p { |
| 94 | margin: 0.5rem; | 98 | margin: 0.5rem; |
| @@ -100,6 +104,9 @@ if [ ! -f $output ] || ! xmllint --html --nofixup-base-uris $output &>/dev/null; | |||
| 100 | &:has(li) { | 104 | &:has(li) { |
| 101 | display: block; | 105 | display: block; |
| 102 | } | 106 | } |
| 107 | ul { | ||
| 108 | padding-inline: 1rem 0; | ||
| 109 | } | ||
| 103 | } | 110 | } |
| 104 | </style> | 111 | </style> |
| 105 | <ul> | 112 | <ul> |
| @@ -113,6 +120,8 @@ if [ -n "${IN_REPLY_TO}" ]; then | |||
| 113 | fi | 120 | fi |
| 114 | # }}} | 121 | # }}} |
| 115 | # insert comment into output file {{{ | 122 | # insert comment into output file {{{ |
| 123 | |||
| 124 | # FIXME prevent pattern <!-- ${MESSAGE_ID} --> shown in <pre> block | ||
| 116 | <<-COMMENT sed -i "${line:-/<ul>/}r /dev/stdin" $output | 125 | <<-COMMENT sed -i "${line:-/<ul>/}r /dev/stdin" $output |
| 117 | <li> | 126 | <li> |
| 118 | 127 | ||
| @@ -136,3 +145,5 @@ COMMENT | |||
| 136 | # }}} | 145 | # }}} |
| 137 | 146 | ||
| 138 | # }}} | 147 | # }}} |
| 148 | |||
| 149 | # vim:fdm=marker | ||