Skip to content
Snippets Groups Projects
Scroll.cs 3.96 KiB
Newer Older
  • Learn to ignore specific revisions
  • using System.Collections;
    using System.Collections.Generic;
    
    Richard Marcus's avatar
    Richard Marcus committed
    using System.Linq;
    
    using System;
    using UnityEngine;
    
    using static JSONManager;
    
    using JsonSubTypes;
    
    using Newtonsoft.Json;
    
    Richard Marcus's avatar
    Richard Marcus committed
    
    /*
    
    [Serializable]
    public class Declaration
    {
        public string name;
    
        public string isProof;
        public string value;
    
        public string identifier;
    
        public string description;
    
    }
    
    
    [Serializable]
    public class Scroll
    {
        public string problemTheory;
        public string solutionTheory;
        public string label;
        public string description;
        public Declaration[] declarations;
        //public string output;
    
        public static Scroll generateFromJson(string json) {
           return JsonUtility.FromJson<Scroll>(json);
        }
    
        public string toJson() {
            return JsonUtility.ToJson(this);
        } 
    }
    
    Richard Marcus's avatar
    Richard Marcus committed
    */
    public class Scroll : LightScroll
    {
        public string label;
        public string description;
        public List<ScrollFact> requiredFacts;
    
        public List<ScrollFact> acquiredFacts;
    
    Richard Marcus's avatar
    Richard Marcus committed
    
        public static List<Scroll> FromJSON(string json)
        {
    
            List<Scroll> scrolls = JsonConvert.DeserializeObject<List<Scroll>>(json);
    
    Richard Marcus's avatar
    Richard Marcus committed
            return scrolls;
        }
        public static string ToJSON(FilledScroll scroll)
        {
    
            string json = Newtonsoft.Json.JsonConvert.SerializeObject(scroll);
    
    Richard Marcus's avatar
    Richard Marcus committed
            return json;
        }
    
        // id of fact, positions in Description
        public static List<KeyValuePair<int,int>>[] FactOccurences;
    
        public static void InitDynamicScroll(int n)
        {
            FactOccurences = new List<KeyValuePair<int, int>>[n];
        }
    
    
        //also collects occurences to be changed later
        public static string ParseString(int stringId, string raw, List<ScrollFact> scrollFacts)
        {
           
            int i = 0;
            while(true)
            {
                char[] rawChars = raw.ToCharArray();
                i = Array.FindIndex(rawChars,i, c => c == '$');
                if (i == -1) break;
               // Debug.Log(i);
    
                //id of Fact, specified after the $
                int toChange = (int) Char.GetNumericValue(raw[i + 1]);
    
                //label of this Fact
                string label = scrollFacts[toChange].label;
    
                raw = raw.Remove(i,2);
                raw = raw.Insert(i,label);
    
                if(FactOccurences[toChange] == null)
                {
                    FactOccurences[toChange] = new List<KeyValuePair<int, int>>();
                }
                //if (toChange >= 0) Debug.Log(stringId);
                FactOccurences[toChange].Add(new KeyValuePair<int, int>(stringId,i));
    
            
            }
    
            return raw;
        }
    
      
    
    
    
    /*
        public class ScrollList
        {
            public List<Scroll> scrolls;
           
        }*/
    
        public class ScrollAssignment
        {
           public KeyValuePair<string, JSONManager.MMTTerm> assignment;
        }
    
        public class FilledScroll
        {
            LightScroll scroll;
            List<ScrollAssignment> assignments;
    
            public FilledScroll(LightScroll scroll, List<ScrollAssignment> assignments)
            {
                this.scroll = scroll;
                this.assignments = assignments;
            }
        }
    
    
    
        [JsonConverter(typeof(JsonSubtypes), "kind")]
        [JsonSubtypes.KnownSubType(typeof(ScrollSymbolFact), "general")]
        [JsonSubtypes.KnownSubType(typeof(ScrollValueFact), "veq")]
    
    Richard Marcus's avatar
    Richard Marcus committed
        public class ScrollFact
        {
    
            public string kind;
    
            public UriReference @ref;
    
    Richard Marcus's avatar
    Richard Marcus committed
            public string label;
        }
    
    
        public class UriReference
        {
            public string uri;
        }
    
    
        /**
        * Class used for deserializing incoming symbol-declarations from mmt
        */
        public class ScrollSymbolFact : ScrollFact
        {
            public MMTTerm tp;
            public MMTTerm df;
        }
    
        /**
        * Class used for deserializing incoming value-declarations from mmt
        */
        public class ScrollValueFact : ScrollFact
    
    Richard Marcus's avatar
    Richard Marcus committed
        {
    
            MMTTerm lhs;
            MMTTerm valueTp;
            MMTTerm value;
            MMTTerm proof;
    
    Richard Marcus's avatar
    Richard Marcus committed
        }
    
    }
    
    public class LightScroll
    
    {
        public ScrollTheoryReference @ref;
    }
    
    public class ScrollTheoryReference
    
    Richard Marcus's avatar
    Richard Marcus committed
    {
        public string problemTheory;
        public string solutionTheory;
    }