docs: function modelParser(prefs, spc, srvName, fName, fltIndex) {//{{{
  
      var forms = spc[fName];
      if ( // Make 'form' become shorthand for 'form.all'.//{{{
          typeof forms != "object"
          || forms instanceof Array
      ) {
          forms = {all: forms};
      };//}}}
      for (var m in forms) { // Allow to define Jade template as array of rows.//{{{
          if (forms[m] instanceof Array) {
              forms[m] = forms[m].join("\n") + "\n";
          };
      };//}}}
  
      var model = {
          meta: spc.meta,
          srvName: spc.srvName,
          path: spc.path,
          name: fName,
          prefs: prefs.client,
          filters: fltIndex,
      };
      if (! model.meta) model.meta = {};
  
      model.methods = Util.mapMethods (//{{{
          spc,
          forms,
          defaultTemplate,
          function expandMethodTemplate(tpl, unimplemented, method, isDefault) {
              var compileError;
              try {
                  if (tpl === undefined || tpl === "") {
                      tpl = Jade.compile(defaultTemplate)();
                      isDefault = true;
                  } else {
                      if ((typeof tpl != "string") || ! tpl.length) throw "Wrong template";
                      tpl = Jade.compile(tpl)();
                  };
              } catch (err) {
                  tpl = Jade.compile(defaultTemplate)();
                  compileError = err;
                  isDefault = true;
              };
              return {
                  tpl: tpl,
                  isDefault: isDefault,
                  unimplemented: unimplemented,
                  error: compileError,
              };
          }
      );
      //}}}
  
      return model;
  }