Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env bash
- #static const inline QgsSettingsEntryString settingsLocaleUserLocale = String( QStringLiteral( "locale/userLocale" ), QString() );
- #ag -c 'QgsSettingsEntry.*QgsSettings' | cut -d: -f1 | xargs gsed -i -r 's/QgsSettingsEntry([^ ]+)\( QStringLiteral\( "(.*)" \), QgsSettings::([^ ]+),/QgsSettingsEntry\1( QStringLiteral( "\l\3\/\2" ),/'
- # TODO sections
- SETTING_TYPE=StringList
- SETTING_TYPE_TO=StringList
- MODULE=core
- MODULE_CODE=Core
- while read -u 3 -r LINE; do
- # echo "****"
- echo $LINE
- FILE=$(echo "${LINE}" | cut -d: -f1)
- CODE=$(echo "${LINE}" | cut -d: -f2,3,4,5,6)
- SETTING_DEFAULT=$(echo "${CODE}" | gsed -r 's/^.*value\( QStringLiteral\( "([^ ]+)" \)(, ([^ ]+))?(, QgsSettings::(\w+))? \).*$/\1!\3!\5/')
- SETTING=$(echo "${SETTING_DEFAULT}" | cut -d! -f1)
- DEFAULT=$(echo "${SETTING_DEFAULT}" | cut -d! -f2)
- SECTION=$(echo "${SETTING_DEFAULT}" | cut -d! -f3)
- PREFIX_STR="${SECTION,,}"$(echo "$SETTING" | gsed -r 's|(/?%[0-9]+/.*)?/?[^/]+$||; ')
- KEY=$(echo "$SETTING" | gsed "s|${PREFIX_STR}/||")
- #SETTING_VAR_NAME=$(echo "${KEY}" | gsed -r 's/^(.)/\U\1/; s/-')
- SETTING_VAR_NAME=${KEY}
- # PREPEND LAST PREFIX PART
- if [[ ! ${PREFIX_STR} =~ ^(UI)$ ]]; then
- SETTING_VAR_NAME=$(echo "${PREFIX_STR}" | gsed 's|^/?(\w+/)+||g'| gsed -r 's/^(.)/\U\1/')"${SETTING_VAR_NAME}"
- fi
- SETTING_VAR_NAME="settings"$(echo "${SETTING_VAR_NAME}" | gsed -r 's/^(.*)$/_\1/; s|/|_|g; s/__/_/; s/(_|-)([a-z])/\1\U\2/g; s/-//g; s/^_//;')
- PREFIX_VAR=$(echo ${PREFIX_STR} | gsed -r 's/^(.*)$/_\1/; s|/|_|g; s/__/_/; s/(_|-)([a-z])/\1\U\2/g; s/-//g; s/^_//;' | gsed -r 's/^(.*)$/\U\1/')
- # for regexes
- SETTING_ESC=$(echo "${SETTING}" | gsed 's|/|.|g')
- HEADER=$(echo ${FILE} | gsed 's|\.cpp$|.h|')
- BASECLASS=$(basename ${HEADER} | gsed 's/\.h$//')
- if [[ ! ${HEADER} =~ \.h$ ]]; then
- echo "wrong header: $HEADER"
- exit 1
- fi
- # echo "$HEADER $BASECLASS"
- HAS_CLASS=$(git grep -i -c "^ *class ${MODULE}_EXPORT ${BASECLASS}" ${HEADER} | cut -d: -f2)
- CLASS_DEF=$(git grep -i "^ *class ${MODULE}_EXPORT ${BASECLASS}" ${HEADER} | cut -d: -f2 | gsed -r "s/^ *class ${MODULE}_EXPORT (${BASECLASS}).*$/\1/i")
- echo -e " FILE: $FILE\n SETTING: $SETTING\n DEFAULT: $DEFAULT\n KEY: $KEY\n PREFIX_STR: $PREFIX_STR\n PREFIX_VAR: $PREFIX_VAR\n SECTION: $SECTION\n CLASS_DEF: $CLASS_DEF\n HAS_CLASS: $HAS_CLASS"
- MODE=0
- while read C_LINE; do
- C_SETTING=$(echo "$C_LINE" | cut -d: -f1)
- C_ACTION=$(echo "$C_LINE" | cut -d: -f2)
- if [[ "$C_SETTING" == "$SETTING" ]]; then
- echo "setting already in config"
- MODE="${C_ACTION}"
- break
- fi
- done<scripts/settings-migration.dat
- if [[ "${MODE}" == 0 ]]; then
- echo "***"
- echo -e "Add ${SETTING}" to
- echo -e " c) class ${CLASS_DEF}"
- echo -e " r) registry"
- echo -e " s) skip and continue"
- echo -e " e) exit"
- while read -n 1 n; do
- echo ""0
- case $n in
- c)
- echo -e "add to class"
- MODE=class
- # https://unix.stackexchange.com/a/533708/238014
- #gsed -e "/^ *class ${MODULE}_EXPORT ${BASECLASS}/{:a; N; /\n *public:/!ba; a\XXXX" -e '}' ${HEADER}
- break
- ;;
- r)
- echo -e "add to registry"
- MODE=registry
- break
- ;;
- s)
- echo -e "skip"
- MODE=SKIP
- break
- ;;
- e)
- exit 1
- ;;
- *) invalid option;;
- esac
- done
- fi
- if [[ ${MODE} != skip ]]; then
- echo "$SETTING:$MODE" >> scripts/settings-migration.dat
- if [[ ${MODE} == class ]]; then
- SETTING_VAR_NAME_COMPLETE="${CLASS_DEF}::${SETTING_VAR_NAME}"
- SETTING_VAR_NAME_CLASS="${SETTING_VAR_NAME}"
- SETTING_VAR_NAME_REGISTRY="${CLASS_DEF}::${SETTING_VAR_NAME}"
- CLASS_FOUND=0
- shopt -s nocasematch
- IFS=''
- INCLUDE_IMPL_COUNT=$(git grep -c '#include "qgssettingsentryimpl.h"' ${HEADER} | cut -d: -f2)
- if [[ -z $INCLUDE_IMPL_COUNT ]]; then
- gsed -i '20 i #include "qgssettingsentryimpl.h"' ${HEADER}
- fi
- LINE_NUMBER=0
- while read F_LINE; do
- (( LINE_NUMBER++ ))
- if [[ $CLASS_FOUND -eq 0 ]]; then
- #echo '[[ "'${F_LINE//\"/\\\"g}'" =~ class\ '${MODULE}'_EXPORT\ '${BASECLASS}' ]]'
- if eval '[[ "'${F_LINE//\"/\\\"g}'" =~ class\ '${MODULE}'_EXPORT\ '${BASECLASS}' ]]'; then
- echo "CLASS_FOUND"
- CLASS_FOUND=1
- fi
- else
- if [[ "${F_LINE}" =~ ^\ *public:$ ]]; then
- echo "public found"
- gsed -i "$(( $LINE_NUMBER+2 )) i \ \ \ \ static const inline QgsSettingsEntry${SETTING_TYPE} ${SETTING_VAR_NAME} = QgsSettingsEntry${SETTING_TYPE}( QStringLiteral( \"${KEY}\" ), QgsSettings::Prefix::${PREFIX_VAR} ) SIP_SKIP;\n" $HEADER
- break
- fi
- fi
- done < ${HEADER}
- shopt -u nocasematch
- else
- SETTING_VAR_NAME_COMPLETE="QgsSettingsRegistry${MODULE_CODE}::${SETTING_VAR_NAME}"
- SETTING_VAR_NAME_CLASS="QgsSettingsRegistry${MODULE_CODE}::${SETTING_VAR_NAME}"
- SETTING_VAR_NAME_REGISTRY="${SETTING_VAR_NAME}"
- fi
- PREFIX_DECL_COUNT=$(git grep -c "static const inline char \*${PREFIX_VAR} = \"${PREFIX_STR}\";" src/core/settings/qgssettings.h | cut -d: -f2)
- if [[ -z $PREFIX_DECL_COUNT ]]; then
- gsed -i "105 i \ \ \ \ \ \ \ \ static const inline char *${PREFIX_VAR} = \"${PREFIX_STR}\";" src/core/settings/qgssettings.h
- fi
- #gsed -i "185 i static const inline QgsSettingsEntry${SETTING_TYPE} ${SETTING_VAR_NAME_REGISTRY} = QgsSettingsEntry${SETTING_TYPE}( QStringLiteral( \"${KEY}\" ), QgsSettings::Prefix::${PREFIX_VAR} );"
- # Add setting to registry
- MODULE_REG=src/${MODULE}/settings/qgssettingsregistry${MODULE}.cpp
- HEADER_BASENAME=$(basename ${HEADER})
- gsed -i "102 i \ \ addSettingsEntry( &${SETTING_VAR_NAME_REGISTRY} );" ${MODULE_REG}
- INCLUDE_REG_COUNT=$(git grep -c "#include \"${HEADER_BASENAME}\"" ${MODULE_REG} | cut -d: -f2)
- if [[ -z $INCLUDE_REG_COUNT ]]; then
- gsed -i "28 i #include \"${HEADER_BASENAME}\"" ${MODULE_REG}
- fi
- while read -r S_FILE; do
- SVARNAME=$([[ ${S_FILE} =~ ${HEADER} ]] && echo "${SETTING_VAR_NAME}" || echo "${SETTING_VAR_NAME_COMPLETE}")
- gsed -i -r "s/(QgsSettings|QSettings|mSettings|settings)\.value\( QStringLiteral. .${SETTING_ESC}. \)(, ([^ ]+))* \).to${SETTING_TYPE_TO}\(\)/${SVARNAME}.value()/" ${S_FILE}
- gsed -i -r "s/(QgsSettings|QSettings|mSettings|settings)\.setValue\( QStringLiteral. .${SETTING_ESC}. \), ([^ ]+)(, ([^ ]+))? \)/${SVARNAME}.setValue( \2 )/" ${S_FILE}
- done<<<$(git grep -E -c "${SETTING_ESC}" src | cut -d: -f1)
- fi
- done 3< <( unbuffer ag --noaffinity --only-matching --nonumber --no-group --nocolor -G '\.cpp$' "settings\.value\( QStringLiteral\( \"[^ ]+\" \)(, [^ ]+)+ \).to${SETTING_TYPE_TO}" src/${MODULE})
- exit 0
- # REPLACING THE STRINGS
- while read -r LINE; do
- #echo $LINE
- FILE=$(echo "${LINE}" | cut -d: -f1)
- #echo $LINE
- KEY=$(echo "$LINE" | gsed -r 's/^.*QgsSettingsEntry([^ ]+)\( QStringLiteral\( "([^ ]+)" \).*$/\2/' | gsed -r 's|(/?%[0-9]+/.*)?/?[^/]+$||; ')
- KEY_WO_SL=$(echo $KEY | gsed 's|^/||')
- #echo $KEY
- VAR=$(echo ${KEY} | gsed -r 's/^(.*)$/_\1/; s|/|_|g; s/__/_/; s/(_|-)([a-z])/\1\U\2/g; s/-//g; s/^_//;')
- #echo $VAR
- echo "$VAR $KEY"
- #gsed -i -r "s|QgsSettingsEntry([^ ]+)\( QStringLiteral\( .${KEY}/([^ ]+). \)|QgsSettingsEntry\1\( QStringLiteral\( \"\2\" \), ${VAR}|" $FILE
- done <<< $(ag -G '.h$' --no-group '= QgsSettingsEntry\w+\( QStringLiteral' )
- exit
- ag -c 'QgsSettingsEntry\(' | cut -d: -f1 | xargs gsed -i -r 's/QgsSettingsEntry([^ ]+) ([^ ]+) = QgsSettingsEntry\(.*\)/QgsSettingsEntry\1 \2 = QgsSettingsEntry\1/'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement