@@ -1160,6 +1160,120 @@ pcmk__xml_needs_escape(const char *text, enum pcmk__xml_escape_type type)
11601160 return false;
11611161}
11621162
1163+ /*!
1164+ * \internal
1165+ * \brief Append an XML-escaped character to a buffer (text escaping)
1166+ *
1167+ * This appends an escaped character in \c pcmk__xml_escape_text mode.
1168+ *
1169+ * \param[in] current_char Character to escape
1170+ * \param[in,out] buffer Buffer
1171+ */
1172+ static void
1173+ append_xml_escaped_char_text (char current_char , GString * buffer )
1174+ {
1175+ switch (current_char ) {
1176+ case '<' :
1177+ g_string_append (buffer , PCMK__XML_ENTITY_LT );
1178+ return ;
1179+
1180+ case '>' :
1181+ g_string_append (buffer , PCMK__XML_ENTITY_GT );
1182+ return ;
1183+
1184+ case '&' :
1185+ g_string_append (buffer , PCMK__XML_ENTITY_AMP );
1186+ return ;
1187+
1188+ case '\n' :
1189+ case '\t' :
1190+ g_string_append_c (buffer , current_char );
1191+ return ;
1192+
1193+ default :
1194+ if (g_ascii_iscntrl (current_char )) {
1195+ g_string_append_printf (buffer , "&#x%.2X;" , current_char );
1196+ } else {
1197+ g_string_append_c (buffer , current_char );
1198+ }
1199+ return ;
1200+ }
1201+ }
1202+
1203+ /*!
1204+ * \internal
1205+ * \brief Append an XML-escaped character to a buffer (attribute escaping)
1206+ *
1207+ * This appends an escaped character in \c pcmk__xml_escape_attr mode.
1208+ *
1209+ * \param[in] current_char Character to escape
1210+ * \param[in,out] buffer Buffer
1211+ */
1212+ static void
1213+ append_xml_escaped_char_attr (char current_char , GString * buffer )
1214+ {
1215+ switch (current_char ) {
1216+ case '<' :
1217+ g_string_append (buffer , PCMK__XML_ENTITY_LT );
1218+ return ;
1219+
1220+ case '>' :
1221+ g_string_append (buffer , PCMK__XML_ENTITY_GT );
1222+ return ;
1223+
1224+ case '&' :
1225+ g_string_append (buffer , PCMK__XML_ENTITY_AMP );
1226+ return ;
1227+
1228+ case '"' :
1229+ g_string_append (buffer , PCMK__XML_ENTITY_QUOT );
1230+ return ;
1231+
1232+ default :
1233+ if (g_ascii_iscntrl (current_char )) {
1234+ g_string_append_printf (buffer , "&#x%.2X;" , current_char );
1235+ } else {
1236+ g_string_append_c (buffer , current_char );
1237+ }
1238+ return ;
1239+ }
1240+ }
1241+
1242+ /*!
1243+ * \internal
1244+ * \brief Append an XML-escaped character to a buffer (pretty escaping)
1245+ *
1246+ * This appends an escaped character in \c pcmk__xml_escape_attr_pretty mode.
1247+ *
1248+ * \param[in] current_char Character to escape
1249+ * \param[in,out] buffer Buffer
1250+ */
1251+ static void
1252+ append_xml_escaped_char_pretty (char current_char , GString * buffer )
1253+ {
1254+ switch (current_char ) {
1255+ case '"' :
1256+ g_string_append (buffer , "\\\"" );
1257+ return ;
1258+
1259+ case '\n' :
1260+ g_string_append (buffer , "\\n" );
1261+ return ;
1262+
1263+ case '\r' :
1264+ g_string_append (buffer , "\\r" );
1265+ return ;
1266+
1267+ case '\t' :
1268+ g_string_append (buffer , "\\t" );
1269+ return ;
1270+
1271+ default :
1272+ g_string_append_c (buffer , current_char );
1273+ return ;
1274+ }
1275+ }
1276+
11631277/*!
11641278 * \internal
11651279 * \brief Append an XML-escaped character to a buffer
@@ -1174,72 +1288,16 @@ append_xml_escaped_char(char current_char, enum pcmk__xml_escape_type type,
11741288{
11751289 switch (type ) {
11761290 case pcmk__xml_escape_text :
1177- switch (current_char ) {
1178- case '<' :
1179- g_string_append (buffer , PCMK__XML_ENTITY_LT );
1180- return ;
1181- case '>' :
1182- g_string_append (buffer , PCMK__XML_ENTITY_GT );
1183- return ;
1184- case '&' :
1185- g_string_append (buffer , PCMK__XML_ENTITY_AMP );
1186- return ;
1187- case '\n' :
1188- case '\t' :
1189- g_string_append_c (buffer , current_char );
1190- return ;
1191- default :
1192- if (g_ascii_iscntrl (current_char )) {
1193- g_string_append_printf (buffer , "&#x%.2X;" ,
1194- current_char );
1195- } else {
1196- g_string_append_c (buffer , current_char );
1197- }
1198- return ;
1199- }
1291+ append_xml_escaped_char_text (current_char , buffer );
1292+ return ;
12001293
12011294 case pcmk__xml_escape_attr :
1202- switch (current_char ) {
1203- case '<' :
1204- g_string_append (buffer , PCMK__XML_ENTITY_LT );
1205- return ;
1206- case '>' :
1207- g_string_append (buffer , PCMK__XML_ENTITY_GT );
1208- return ;
1209- case '&' :
1210- g_string_append (buffer , PCMK__XML_ENTITY_AMP );
1211- return ;
1212- case '"' :
1213- g_string_append (buffer , PCMK__XML_ENTITY_QUOT );
1214- return ;
1215- default :
1216- if (g_ascii_iscntrl (current_char )) {
1217- g_string_append_printf (buffer , "&#x%.2X;" ,
1218- current_char );
1219- } else {
1220- g_string_append_c (buffer , current_char );
1221- }
1222- return ;
1223- }
1295+ append_xml_escaped_char_attr (current_char , buffer );
1296+ return ;
12241297
12251298 case pcmk__xml_escape_attr_pretty :
1226- switch (current_char ) {
1227- case '"' :
1228- g_string_append (buffer , "\\\"" );
1229- return ;
1230- case '\n' :
1231- g_string_append (buffer , "\\n" );
1232- return ;
1233- case '\r' :
1234- g_string_append (buffer , "\\r" );
1235- return ;
1236- case '\t' :
1237- g_string_append (buffer , "\\t" );
1238- return ;
1239- default :
1240- g_string_append_c (buffer , current_char );
1241- return ;
1242- }
1299+ append_xml_escaped_char_pretty (current_char , buffer );
1300+ return ;
12431301
12441302 default : // Invalid enum value
12451303 pcmk__assert (false);
0 commit comments