summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2016-05-11 12:24:45 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2016-05-11 17:05:20 +0100
commitc6dd93676776b6df8ef45b30b90294bd4129c2cd (patch)
tree1af3b77867a561e3b3d7fda89028b404a383dbc1
parent3474d20fe8716608b1156701fdb043add10ebb7d (diff)
downloadgobject-introspection-c6dd93676776b6df8ef45b30b90294bd4129c2cd.tar.gz
docs: Add RelaxNG schema for GIR's XML format
This is an attempt at standardising the GIR XML in a way that we can reliably validate; the schema is enough to validate simple GIR files, but it still needs work for complex ones, like GTK's. I've decided to use the compact Relax NG syntax as the schema format because it's definitely easier to read and write that the DTD format. Since the current XML version is 1.2, let's standardise on that instead of making up a version 1.0.
-rw-r--r--docs/gir-1.2.rnc231
1 files changed, 231 insertions, 0 deletions
diff --git a/docs/gir-1.2.rnc b/docs/gir-1.2.rnc
new file mode 100644
index 00000000..7ff6f002
--- /dev/null
+++ b/docs/gir-1.2.rnc
@@ -0,0 +1,231 @@
+namespace core = "http://www.gtk.org/introspection/core/1.0"
+namespace c = "http://www.gtk.org/introspection/c/1.0"
+namespace glib = "http://www.gtk.org/introspection/glib/1.0"
+
+grammar {
+ start = Repository
+
+ Repository =
+ element repository {
+ Include*
+ & Package*
+ & Alias*
+ & Class*
+ & Record*
+ & Enum*
+ & Function*
+ }
+
+ Include =
+ element \include {
+ attribute name { xsd:string }
+ attribute version { xsd:string }
+ empty
+ }
+
+ Package =
+ element package {
+ attribute name { xsd:string }
+ empty
+ }
+
+ Alias =
+ element alias {
+ attribute name { xsd:string }
+ attribute c:type { xsd:string }
+ attribute introspectable { string "0" }?
+
+ Doc?
+ & Type
+ }
+
+ Class =
+ element class {
+ attribute name { xsd:string }
+ attribute c:symbol-prefix { xsd:string }
+ attribute c:type { xsd:string }
+ attribute parent { xsd:string }
+ attribute glib:type-name { xsd:string }
+ attribute glib:get-type { xsd:string }
+ attribute glib:type-struct { xsd:string }
+ attribute introspectable { string "0" }?
+
+ Doc?
+ & DocDeprecated?
+ & Implements*
+ & Constructor?
+ & Method*
+ & Field*
+ & Property*
+ & Signal*
+ }
+
+ Record =
+ element record {
+ attribute name { xsd:string }
+ attribute version { xsd:string }?
+ attribute c:type { xsd:string }
+ attribute disguised { xsd:string }?
+ attribute glib:is-gtype-struct-for { xsd:string }?
+ attribute introspectable { string "0" }?
+
+ Field*
+ }
+
+ Property =
+ element property {
+ attribute name { xsd:string }
+ attribute version { xsd:string }?
+ attribute writable { string "0" | string "1" }?
+ attribute readable { string "0" | string "1" }?
+
+ Doc?
+ & DocDeprecated?
+ & Type
+ }
+
+ Signal =
+ element glib:signal {
+ attribute name { xsd:string }
+ attribute version { xsd:string }?
+ attribute when { string "first" | string "last" }
+ attribute no-recurse { xsd:string }?
+
+ Doc?
+ & DocDeprecated
+ & Callable.params?
+ & Callable.return?
+ }
+
+ Field =
+ element field {
+ attribute name { xsd:string }
+ attribute introspectable { xsd:string }?
+
+ Type
+ | Callback
+ }
+
+ Callback =
+ element callback {
+ attribute name { xsd:string }
+ attribute introspectable { xsd:string }
+
+ Callable.params?
+ & Callable.return?
+
+ Doc =
+ element doc { text }
+
+ DocDeprecated =
+ element doc-deprecated { text }
+
+ Implements =
+ element implements { attribute name { xsd:string } }
+
+ Type =
+ element type {
+ attribute name { xsd:string }
+ attribute c:type { xsd:string }
+ attribute introspectable { xsd:string }?
+ empty
+ }
+
+ ArrayType =
+ element array {
+ attribute c:type { xsd:string }
+ attribute zero-terminated { string "0" | string "1" }?
+ attribute fixed-size { xsd:string }?
+ attribute introspectable { xsd:string }?
+ Type
+ }
+
+ TransferOwnership =
+ attribute transfer-ownership { string "none" | string "container" | string "full" }
+
+ Constructor =
+ element constructor {
+ Callable.attrs
+ & Callable.params?
+ & Callable.return?
+ & Doc?
+ & DocDeprecated?
+ }
+
+ Callable.attrs &= attribute name { xsd:string }
+ Callable.attrs &= attribute version { xsd:string }?
+ Callable.attrs &= attribute c:identifier { xsd:string }
+ Callable.attrs &= attribute deprecated { xsd:string }?
+ Callable.attrs &= attribute deprecation-version { xsd:string }?
+ Callable.attrs &= attribute introspectable { xsd:string }?
+
+ Callable.params =
+ element parameters {
+ element parameter {
+ attribute name { xsd:string }
+ attribute nullable { xsd:string }?
+ attribute allow-none { xsd:string }?
+ attribute introspectable { xsd:string }
+ TransferOwnership?
+
+ Doc?
+ & DocDeprecated?
+ & (Type | ArrayType)
+ }*
+
+ & element instance-parameter {
+ attribute name { xsd:string }
+ TransferOwnership?
+ }?
+ }
+
+ Callable.return =
+ element return-value {
+ attribute introspectable { xsd:string }
+ TransferOwnership?
+ & Doc?
+ & (Type | ArrayType)
+ }
+
+ Function =
+ element function {
+ Callable.attrs
+ & Callable.params?
+ & Callable.return?
+ & Doc?
+ & DocDeprecated?
+ }
+
+ Method =
+ element method {
+ Callable.attrs
+ & Callable.params
+ & Callable.return?
+ & Doc?
+ & DocDeprecated?
+ }
+
+ Enum =
+ element enumeration {
+ attribute name { xsd:string }
+ attribute glib:type-name { xsd:string }?
+ attribute glib:get-type { xsd:string }?
+ attribute c:type { xsd:string }
+
+ Doc?
+ & DocDeprecated?
+
+ EnumMember+
+ }
+
+ EnumMember =
+ element member {
+ attribute name { xsd:string }
+ attribute value { xsd:string }
+ attribute c:identifier { xsd:string }
+ attribute glib:nick { xsd:string }?
+
+ Doc?
+ & DocDeprecated?
+ }
+}