On Fri, Sep 28, 2018 at 02:44:11PM +0300, Gabriel Ivăncescu wrote:
@@ -229,6 +231,54 @@ static LRESULT change_selection(IAutoCompleteImpl *ac, HWND hwnd, UINT key) return 0; }
+static void aclist_expand(IAutoCompleteImpl *ac, WCHAR *txt) +{
- /* call IACList::Expand only when needed
'/' is allowed as a delim for unix paths */- WCHAR c, *p, *last_delim, *old_txt = ac->txtbackup;
- size_t i = 0;
- /* skip the shared prefix */
- while ((c = tolowerW(txt[i])) == tolowerW(old_txt[i]))
- {
if (c == '\0') return;i++;- }
- /* they differ at this point, check for a delim further in txt */
- last_delim = NULL;
- for (p = &txt[i]; *p != '\0'; p++)
if (*p == '\\' || *p == '/')last_delim = p;- if (last_delim)
goto expand;- /* txt has no delim after i, check for a delim further in old_txt */
- for (p = &old_txt[i]; *p != '\0'; p++)
if (*p == '\\' || *p == '/'){/* find the delim before i (if any) */while (i--){if (txt[i] == '\\' || txt[i] == '/'){last_delim = &txt[i];goto expand;}}break; /* Windows doesn't expand without a delim */}- /* they differ, but without any different delims, so no need to expand */
- return;
+expand:
- c = last_delim[1];
- last_delim[1] = '\0';
- IACList_Expand(ac->aclist, txt);
- last_delim[1] = c;
+}
This is going to need some work; trying to follow this code is just too hard.
Huw.