コード例 #1
0
static WordRefType WordRefTypeGet(const char **args, WordBookmark *bookmark)
{
    size_t argCount = DFStringArrayCount(args);
    WordRefType type = WordRefText;

    for (size_t argno = 2; argno < argCount; argno++) {
        const char *arg = args[argno];
        if (!strcmp(arg,"\\r"))
            type = WordRefNum; // Numbered reference (normal)
        else if (!strcmp(arg,"\\n"))
            type = WordRefNum; // Numbered reference (no context)
        else if (!strcmp(arg,"\\w"))
            type = WordRefNum; // Numbered reference (full context)
        else if (!strcmp(arg,"\\p"))
            type = WordRefDirection;
    }

    if ((bookmark->type == WordBookmarkTable) ||
        (bookmark->type == WordBookmarkFigure) ||
        (bookmark->type == WordBookmarkEquation)) {
        if (type == WordRefText) {
            DFNode *p = WordFindContainingParagraph(bookmark->element);
            if (p != NULL) {
                CaptionParts parts = WordBookmarkGetCaptionParts(bookmark);

                if (parts.beforeNum && !parts.num && !parts.afterNum)
                    type = WordRefCaptionText;
                else if (parts.beforeNum && parts.num && !parts.afterNum)
                    type = WordRefLabelNum;
            }
        }
    }

    return type;
}
コード例 #2
0
ファイル: WordBookmark.c プロジェクト: flyonok/DocFormats
static void findTargetAndType(WordBookmark *bookmark, WordSheet *sheet)
{
    if (DFStringEquals(bookmark->bookmarkName,"_GoBack")) {
        bookmark->type = WordBookmarkCursor;
        bookmark->target = NULL;
        return;
    }
    // FIXME: Check if the following line is still relevant with the new bookmarks model
    assert(bookmark->element != NULL);
    DFNode *p = WordFindContainingParagraph(bookmark->element);
    if (p == NULL)
        return;
    DFNode *pPr = DFChildWithTag(p,WORD_PPR);
    if (pPr == NULL)
        return;
    DFNode *pStyle = DFChildWithTag(pPr,WORD_PSTYLE);
    if (pStyle == NULL)
        return;
    const char *styleId = DFGetAttribute(pStyle,WORD_VAL);
    if (styleId == NULL)
        return;
    WordStyle *style = WordSheetStyleForTypeId(sheet,"paragraph",styleId);
    if ((style != NULL) && isHeadingOutlineLvl(style->outlineLvl)) {
        bookmark->type = WordBookmarkHeading;
        bookmark->target = p;
    }
    else if (DFStringEquals(styleId,"Caption")) {
        DFNode *prev = findPreviousElement(p);
        if (prev == NULL)
            return;

        if (prev->tag == WORD_TBL) {
            bookmark->type = WordBookmarkTable;
            bookmark->target = prev;
        }
        else if (Word_isFigureParagraph(prev)) {
            bookmark->type = WordBookmarkFigure;
            bookmark->target = prev;
        }
        else if (Word_isEquationParagraph(prev)) {
            bookmark->type = WordBookmarkEquation;
            bookmark->target = prev;
        }
    }
}