133 lines
3.9 KiB
Bash
133 lines
3.9 KiB
Bash
#!/bin/bash
|
|
|
|
# shellcheck disable=2002,2004,2028,2034,2053,2068,2086,2116,2143,2207
|
|
|
|
## Need "rpl" package
|
|
RPL_INSTALLED=$(dpkg -s rpl)
|
|
if [[ -z ${RPL_INSTALLED} ]]; then
|
|
echo "This bash need rpl command, you can install it with: sudo apt install rpl"
|
|
fi
|
|
|
|
DIR_HTDOCS=$( cd "$( dirname "${BASH_SOURCE[0]}" )/../../htdocs" >/dev/null && pwd )
|
|
|
|
PATTERN=""
|
|
if [[ -f $1 ]]; then
|
|
TFile=("$1") # specific file
|
|
elif [[ -n $1 ]]; then
|
|
PATTERN=$1 # name of a particular file or pattern (ex: societe.class.php)
|
|
else
|
|
PATTERN="*.class.php" # *.lib.php
|
|
fi
|
|
|
|
if [[ -n ${PATTERN} ]]; then
|
|
TCLASSFILE=$(find "${DIR_HTDOCS}" -name "${PATTERN}" | grep -v "/custom/" | grep -v "/includes/" | grep -v -F -f "${DIR_HTDOCS}/../.gitignore")
|
|
TFile=()
|
|
I=0
|
|
for f in ${TCLASSFILE}; do
|
|
TFile[${I}]="${f}"
|
|
((I++))
|
|
done
|
|
fi
|
|
|
|
|
|
REGEX_FNC_W='^([[:blank:]]*)(public|private|protected)?[ \t]*(static)?[ \t]*[^\$\(]function[ \t]*([a-zA-Z0-9\-\_]*)[\(](.*)[\)][ \t]*([\{]?)$'
|
|
INDENT=" "
|
|
|
|
for f in ${TFile[@]}; do
|
|
# echo ${f}
|
|
|
|
IFS=$'\n'
|
|
TLine=($(cat "${f}" | grep -E "${REGEX_FNC_W}"))
|
|
|
|
for LINE in ${TLine[@]}; do
|
|
|
|
if [[ ${LINE} =~ ^${REGEX_FNC_W}$ ]]; then
|
|
FIRST_INDENT=${BASH_REMATCH[1]} # seem not work
|
|
FNC_TYPE=${BASH_REMATCH[2]}
|
|
STATIC=${BASH_REMATCH[3]}
|
|
FNC_NAME=${BASH_REMATCH[4]}
|
|
PARAMETERS_ORIGIN=${BASH_REMATCH[5]}
|
|
BRACKET_END=${BASH_REMATCH[6]}
|
|
|
|
if [[ ${LINE} =~ ^([[:blank:]]*) ]]; then # but this seems work to get indentation
|
|
FIRST_INDENT=${BASH_REMATCH[1]}
|
|
fi
|
|
|
|
[[ ${FNC_NAME} =~ ^__ ]] && continue # skip magic function
|
|
|
|
CAMEL_CASE=$(echo "${FNC_NAME}" | sed -r 's/(_)([a-zA-Z0-9])/\U\2/g')
|
|
[[ ${CAMEL_CASE} = ${FNC_NAME} ]] && continue # skip if no difference
|
|
|
|
#echo A: ${#FIRST_INDENT}
|
|
#printf "${FIRST_INDENT}TEST INDENT\n"
|
|
#echo B: ${FNC_TYPE}
|
|
#echo C: ${STATIC}
|
|
#echo D: ${FNC_NAME}
|
|
#echo D: ${CAMEL_CASE}
|
|
#echo E: ${PARAMETERS_ORIGIN}
|
|
#echo F: ${BRACKET_END}
|
|
#exit
|
|
|
|
[[ -n $(cat "${f}" | grep -i "function[[:blank:]]*${CAMEL_CASE}") ]] && continue # skip if already exists
|
|
|
|
TCommentLine=()
|
|
J=1
|
|
while :; do
|
|
COMMENT=$(cat ${f} | grep -B ${J} ${LINE/\$/\\$} | head -n1 | grep -P '^[\t\ ]*(/\*\*|\*[^/]?|\*/)')
|
|
if [[ -n ${COMMENT} ]]; then
|
|
TCommentLine[${J}]="${COMMENT}"
|
|
((J++))
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
|
|
COMMENT_ORIGIN=""
|
|
COMMENT_ORIGIN_WITH_DEPRECATED=""
|
|
COMMENT_DUPLICATE=""
|
|
if [[ ${#TCommentLine[@]} -gt 0 ]]; then
|
|
for (( idx=${#TCommentLine[@]} ; idx>0 ; idx-- )) ; do
|
|
COMMENT_ORIGIN="${COMMENT_ORIGIN}\n${TCommentLine[idx]}"
|
|
done
|
|
|
|
COMMENT_DUPLICATE=${COMMENT_ORIGIN}
|
|
|
|
COMMENT_ORIGIN_WITH_DEPRECATED=$(echo "${COMMENT_ORIGIN%?} @deprecated\n${FIRST_INDENT} * @see ${CAMEL_CASE}\n${FIRST_INDENT} */")
|
|
fi
|
|
|
|
PARAMETERS=${PARAMETERS_ORIGIN}
|
|
TParam=()
|
|
I=0
|
|
while [[ ${PARAMETERS} =~ (\$[a-zA-Z0-9\_\-]+) ]]; do
|
|
TParam[${I}]=${BASH_REMATCH[1]}
|
|
PARAMETERS=${PARAMETERS#*"${BASH_REMATCH[1]}"}
|
|
((I++))
|
|
done
|
|
|
|
PARAMS_STR=$(printf ", %s" "${TParam[@]}")
|
|
PARAMS_STR=${PARAMS_STR:2}
|
|
|
|
REPLACE=${LINE}
|
|
[[ -z ${BRACKET_END} ]] && REPLACE="${LINE}\n${FIRST_INDENT}{\n${FIRST_INDENT}${INDENT}" || REPLACE="${LINE}\n${FIRST_INDENT}${INDENT}"
|
|
[[ -n ${STATIC} ]] && REPLACE="${REPLACE}return self::" || REPLACE="${REPLACE}return \$this->"
|
|
REPLACE="${REPLACE}${CAMEL_CASE}(${PARAMS_STR});\n${FIRST_INDENT}}\n\n"
|
|
REPLACE="${REPLACE}${FIRST_INDENT}${COMMENT_ORIGIN}\n${FIRST_INDENT}"
|
|
[[ -n ${STATIC} ]] && REPLACE="${REPLACE}${STATIC} "
|
|
[[ -n ${FNC_TYPE} ]] && REPLACE="${REPLACE}${FNC_TYPE} "
|
|
REPLACE="${REPLACE}function ${CAMEL_CASE}(${PARAMETERS_ORIGIN})"
|
|
[[ -n ${BRACKET_END} ]] && REPLACE="${REPLACE}\n${FIRST_INDENT}{"
|
|
|
|
echo " ${FNC_NAME} -> ${CAMEL_CASE}"
|
|
|
|
if [[ -n ${COMMENT_ORIGIN_WITH_DEPRECATED} ]]; then
|
|
rpl -e --quiet "${COMMENT_ORIGIN}" ${COMMENT_ORIGIN_WITH_DEPRECATED} "${f}"
|
|
fi
|
|
rpl -e --quiet "${LINE}" ${REPLACE} "${f}"
|
|
|
|
fi
|
|
|
|
done
|
|
done
|
|
|
|
|