Ultra-portable, petite bibliothèque de fichiers de configuration complexe en ANSI C?

Je recherche une bibliothèque de langage de configuration / XML très portable et minimaliste / minimal en ANSI C sans dépendance externe (ou très peu), avec une compilation inférieure à 100K. J’en ai besoin pour un fichier de configuration moyennement complexe, et il doit prendre en charge Unicode.

Quelques autres exigences:

  1. OK pour utiliser / incorporer / lien statique dans le code propriétaire . Le crédit sera toujours accordé là où le crédit est dû.
  2. Pas nécessairement XML.
  3. Vraiment, code propre / aucune manipulation de chaîne étrange ou incohérente.
  4. UTF-8 .

Merci les gars.

Ceci est en quelque sorte similaire à cette question: Existe – t-il un bon parsingur XML pour un projet C intégré?

J’ai pu modifier les indicateurs de compilation des bibliothèques d’parsingur XML suivantes pour le langage C et réduire de plus de 50% leur taille sur ma machine Ubuntu. Mini-XML est le seul proche de ce que vous avez demandé:

  • Mini-XML (36 Ko)
  • Expat (124K)
  • RXP (184K)

Les tampons de protocole IMO constituent une bien meilleure solution que XML pour ce type de cas d’utilisation. Avec les tampons de protocole, vous obtenez des types réels et un schéma sans devoir les superposer au XML de base. En outre, la syntaxe est plus agréable.

// The schema file: can serve as documentation for what // configuration values are available. message MyAppConfig { // Set to control the port the app listens on. optional int32 port = 1 [default=1234]; // Set to control the local hostname. optional ssortingng hostname = 2 [default="localhost"]; } 

La configuration réelle de l’utilisateur ressemblerait alors à ceci:

 # I want to listen on a very high port. port: 50000 

La bibliothèque de mémoire tampon de protocole principale ne correspond pas à vos critères car elle est en C ++ et est très volumineuse. Je travaille sur une implémentation beaucoup plus petite du même upb (ie “micro” protobufs). Il est écrit en ~ 5k lignes de ANSI C et est compilé à <50k.

Les tampons de protocole ont un format binary et un format texte, qui sont équivalents. Ma bibliothèque ne prend pas (encore) en charge la lecture du format texte, mais vos utilisateurs pourraient éventuellement utiliser l’outil standard de Google pour convertir la version texte de leur configuration au format binary à l’avance. Ensuite, votre application elle-même n’aurait besoin que de lire le format binary et pourrait simplement utiliser upb.

Jusqu’à présent, upb en est au point où des utilisateurs aventureux pourraient l’essayer, mais la situation est encore un peu rude et les API changent encore quelque peu. Si cela vous convient, vous pouvez essayer de plonger maintenant. Si vous préférez quelque chose de plus stable, restz au moins sur votre radar.