EOF
f="|${f#\~}|"
- printf '*\n%s\n$\n' "$w_tagcategories" \
- | while read -r category; do
- lbid="cat_${n}_${category}"
-
- t=''
- [ "$category" = '*' -a "${f%%|${category}:*}" ] && t=checked
- [ "$category" != '*' -a ! "${f%%|${category}:*}" ] && t=checked
- [ "$category" != '*' -a ! "${f%%|-${category}:*}" ] && t=checked
-
- printf '[radio "cat_%i" "%s" .cat %s id="%s"][label for="%s" %s]
- [div .catselect\n' \
- $n "$category" "$t" "$lbid" "$lbid" "$category"
-
- printf '%s\n' "$w_tags" \
- | { [ "$category" = '*' ] && grep -avF ':' || grep -awF "${category}"; } \
- | while read -r tag; do
- [ "$tag" ] || continue
- t=''; [ ! "${f%%*|${tag}|*}" ] && t=checked
- d="${tag#-}"; d="${d#*:}"
- printf '[label [checkbox "tag_%s" "%s" %s] %s]' "$n" "$tag" "$t" "$d"
- done
- d="${f##*\$:}" d="${d%%\|*}"
- [ "$category" = \$ ] && printf '[input name="tag_%i" value="%s"]' "$n" "$(HTML "$d")"
- printf '\n]'
+ printf '%s\n$:\n' "$w_tags" \
+ | while read tctag; do
+ [ "$tctag" ] || continue
+ category="${tctag#-}"; category="${category%%:*}"
+ tag="${tctag#-}"; tag="${tag#*:}"
+ [ "${tag}" = "${tctag#-}" ] \
+ && category="*"
+
+ if [ "$category" != "$oldcat" ]; then
+ [ "$oldcat" ] && printf '\n]'
+ lbid="cat_${n}_${category}"
+
+ t=''
+ [ "$category" = '*' -a "${f%%|${category}:*}" ] && t=checked
+ [ "$category" != '*' -a ! "${f%%|${category}:*}" ] && t=checked
+ [ "$category" != '*' -a ! "${f%%|-${category}:*}" ] && t=checked
+
+ printf '[radio "cat_%i" "%s" .cat %s id="%s"][label for="%s" %s]
+ [div .catselect\n' \
+ $n "$category" "$t" "$lbid" "$lbid" "$category"
+ fi
+
+ if [ "$category" = '$' ]; then
+ tag="${f##*\$:}" tag="${tag%%\|*}"
+ printf '[input name="tag_%i" value="%s"]' "$n" "$(HTML "$tag")"
+ else
+ t=''; [ ! "${f%%*|${tctag}|*}" ] && t=checked
+ printf '[label [checkbox "tag_%s" "%s" %s] %s]' "$n" "$tctag" "$t" "$tag"
+ fi
+
+ oldcat="$category"
done
+ [ "$w_tags" ] && printf '\n]'
printf ']'
done