Outro dia, me vi numa situação em %n
que resolveria bem meu problema. Ao contrário da minha resposta anterior , neste caso, não consigo conceber uma boa alternativa.
Eu tenho um controle GUI que exibe algum texto especificado. Esse controle pode exibir parte desse texto em negrito (ou em itálico ou sublinhado etc.), e posso especificar qual parte especificando os índices de caracteres inicial e final.
No meu caso, estou gerando o texto para o controle com snprintf
e gostaria que uma das substituições estivesse em negrito. A localização dos índices inicial e final dessa substituição não é trivial porque:
A cadeia contém várias substituições e uma das substituições é um texto arbitrário especificado pelo usuário. Isso significa que fazer uma pesquisa textual pela substituição com a qual me preocupo é potencialmente ambíguo.
A cadeia de formato pode estar localizada e pode usar a $
extensão POSIX para especificadores de formato posicional. Portanto, pesquisar a sequência de formato original pelos próprios especificadores de formato não é trivial.
O aspecto da localização também significa que não posso dividir facilmente a sequência de formatação em várias chamadas para snprintf
.
Portanto, a maneira mais direta de encontrar os índices em torno de uma substituição específica seria:
char buf[256];
int start;
int end;
snprintf(buf, sizeof buf,
"blah blah %s %f yada yada %n%s%n yakety yak",
someUserSpecifiedString,
someFloat,
&start, boldString, &end);
control->set_text(buf);
control->set_bold(start, end);