6 n__diff_8h
gullradriel edited this page 2026-10-09 00:55:18 +02:00

include/nilorea/n_diff.h

Line oriented text comparison (Myers shortest edit script). More...

Structures

Name
struct N_DIFF_RESULT
edit script turning one text into another
struct N_DIFF_LINE
one line of an edit script

Detailed Description

Line oriented text comparison (Myers shortest edit script).

Author: Castagnier Mickael

Version: 1.0

Date: 31/07/2026

Source code

/*
 * Nilorea Library
 * Copyright (C) 2005-2026 Castagnier Mickael
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License.
 *
 * SPDX-License-Identifier: Apache-2.0
 */


#ifndef __N_DIFF_H
#define __N_DIFF_H

#ifdef __cplusplus
extern "C" {
#endif


#include "nilorea/n_list.h"
#include "nilorea/n_str.h"

#define N_DIFF_COMMON 0
#define N_DIFF_DELETE 1
#define N_DIFF_INSERT 2

#define N_DIFF_NO_LINE ((size_t)-1)

#define N_DIFF_CONTEXT_FULL ((size_t)-1)

#define N_DIFF_MAX_EDITS_DEFAULT 1000

#define N_DIFF_MAX_EDITS_CEILING 4000

typedef struct N_DIFF_LINE {
    char* text;
    size_t line_a;
    size_t line_b;
    int op;
} N_DIFF_LINE;

typedef struct N_DIFF_RESULT {
    LIST* lines;
    size_t nb_common;
    size_t nb_deleted;
    size_t nb_inserted;
    int truncated;
} N_DIFF_RESULT;

N_DIFF_RESULT* n_diff_lines(const char* text_a, const char* text_b, size_t max_edits);

void n_diff_result_free(N_DIFF_RESULT** result);

N_STR* n_diff_to_unified(const N_DIFF_RESULT* result, size_t context);


#ifdef __cplusplus
}
#endif

/* #ifndef __N_DIFF_H */
#endif