mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Merge conflict fixed
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							@@ -591,3 +591,6 @@
 | 
				
			|||||||
[submodule "vendor/grammars/AutoHotkey"]
 | 
					[submodule "vendor/grammars/AutoHotkey"]
 | 
				
			||||||
	path = vendor/grammars/AutoHotkey
 | 
						path = vendor/grammars/AutoHotkey
 | 
				
			||||||
	url = https://github.com/ahkscript/SublimeAutoHotkey
 | 
						url = https://github.com/ahkscript/SublimeAutoHotkey
 | 
				
			||||||
 | 
					[submodule "vendor/grammars/ec.tmbundle"]
 | 
				
			||||||
 | 
						path = vendor/grammars/ec.tmbundle
 | 
				
			||||||
 | 
						url = https://github.com/ecere/ec.tmbundle
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -200,6 +200,8 @@ vendor/grammars/dylan.tmbundle:
 | 
				
			|||||||
- source.makegen
 | 
					- source.makegen
 | 
				
			||||||
vendor/grammars/ebundles/Bundles/MSDOS batch file.tmbundle:
 | 
					vendor/grammars/ebundles/Bundles/MSDOS batch file.tmbundle:
 | 
				
			||||||
- source.dosbatch
 | 
					- source.dosbatch
 | 
				
			||||||
 | 
					vendor/grammars/ec.tmbundle/:
 | 
				
			||||||
 | 
					- source.c.ec
 | 
				
			||||||
vendor/grammars/eiffel.tmbundle:
 | 
					vendor/grammars/eiffel.tmbundle:
 | 
				
			||||||
- source.eiffel
 | 
					- source.eiffel
 | 
				
			||||||
vendor/grammars/elixir-tmbundle:
 | 
					vendor/grammars/elixir-tmbundle:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3331,7 +3331,7 @@ eC:
 | 
				
			|||||||
  extensions:
 | 
					  extensions:
 | 
				
			||||||
  - .ec
 | 
					  - .ec
 | 
				
			||||||
  - .eh
 | 
					  - .eh
 | 
				
			||||||
  tm_scope: none
 | 
					  tm_scope: source.c.ec
 | 
				
			||||||
  ace_mode: text
 | 
					  ace_mode: text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
edn:
 | 
					edn:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										337
									
								
								samples/eC/Designer.ec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										337
									
								
								samples/eC/Designer.ec
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,337 @@
 | 
				
			|||||||
 | 
					import "ide"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Designer : DesignerBase
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   ~Designer()
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      if(GetActiveDesigner() == this)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         SetActiveDesigner(null);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if(classDesigner)
 | 
				
			||||||
 | 
					         delete classDesigner;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   // *** DesignerBase Implementation ***
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void ModifyCode()
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      codeEditor.ModifyCode();
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void UpdateProperties()
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      codeEditor.DesignerModifiedObject();
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void CodeAddObject(Instance instance, ObjectInfo * object)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      codeEditor.AddObject(instance, object);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void SheetAddObject(ObjectInfo object)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      codeEditor.sheet.AddObject(object, object.name, typeData, true); //className, true);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void AddToolBoxClass(Class _class)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      ((IDEWorkSpace)master).toolBox.AddControl(_class);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void AddDefaultMethod(Instance instance, Instance classInstance)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      Class _class = instance._class;
 | 
				
			||||||
 | 
					      Method defaultMethod = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      for( ; _class; _class = _class.base)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         Method method;
 | 
				
			||||||
 | 
					         int minID = MAXINT;
 | 
				
			||||||
 | 
					         for(method = (Method)_class.methods.first; method; method = (Method)((BTNode)method).next)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            if(method.type == virtualMethod)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					               if(!method.dataType)
 | 
				
			||||||
 | 
					                  method.dataType = ProcessTypeString(method.dataTypeString, false);
 | 
				
			||||||
 | 
					               if(method.vid < minID && (instance == classInstance || (method.dataType.thisClass && eClass_IsDerived(classInstance._class, method.dataType.thisClass.registered))))
 | 
				
			||||||
 | 
					               {
 | 
				
			||||||
 | 
					                  defaultMethod = method;
 | 
				
			||||||
 | 
					                  minID = method.vid;
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         if(defaultMethod)
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      codeEditor.AddMethod(defaultMethod);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   bool ObjectContainsCode(ObjectInfo object)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      // Confirmation if control contains code
 | 
				
			||||||
 | 
					      if(object.instCode)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         MembersInit members;
 | 
				
			||||||
 | 
					         if(object.instCode.members)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            for(members = object.instCode.members->first; members; members = members.next)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					               if(members.type == methodMembersInit)
 | 
				
			||||||
 | 
					               {
 | 
				
			||||||
 | 
					                  //if(!Code_IsFunctionEmpty(members.function))
 | 
				
			||||||
 | 
					                  {
 | 
				
			||||||
 | 
					                     return true;
 | 
				
			||||||
 | 
					                  }
 | 
				
			||||||
 | 
					               }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return false;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void DeleteObject(ObjectInfo object)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      if(codeEditor)
 | 
				
			||||||
 | 
					         codeEditor.DeleteObject(object);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void RenameObject(ObjectInfo object, const char * name)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      if(object && (name || !object.classDefinition))
 | 
				
			||||||
 | 
					         codeEditor.RenameObject(object, name);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   bool FindObject(Instance * object, const char * string)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      ObjectInfo classObject;
 | 
				
			||||||
 | 
					      for(classObject = codeEditor.classes.first; classObject; classObject = classObject.next)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         ObjectInfo check;
 | 
				
			||||||
 | 
					         if(classObject.name && !strcmp(string, classObject.name))
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            *object = classObject.instance;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         for(check = classObject.instances.first; check; check = check.next)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            if(check.name && !strcmp(string, check.name))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					               *object = check.instance;
 | 
				
			||||||
 | 
					               break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         if(check)
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return false;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void SelectObjectFromDesigner(ObjectInfo object)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      codeEditor.SelectObjectFromDesigner(object);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   borderStyle = sizable;
 | 
				
			||||||
 | 
					   isActiveClient = true;
 | 
				
			||||||
 | 
					   hasVertScroll = true;
 | 
				
			||||||
 | 
					   hasHorzScroll = true;
 | 
				
			||||||
 | 
					   hasClose = true;
 | 
				
			||||||
 | 
					   hasMaximize = true;
 | 
				
			||||||
 | 
					   hasMinimize = true;
 | 
				
			||||||
 | 
					   text = $"Designer";
 | 
				
			||||||
 | 
					   menu = Menu { };
 | 
				
			||||||
 | 
					   anchor = Anchor { left = 300, right = 150, top = 0, bottom = 0 };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   ToolBox toolBox;
 | 
				
			||||||
 | 
					   CodeEditor codeEditor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   Menu fileMenu { menu, $"File", f };
 | 
				
			||||||
 | 
					   MenuItem fileSaveItem
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      fileMenu, $"Save", s, ctrlS;
 | 
				
			||||||
 | 
					      bool NotifySelect(MenuItem selection, Modifiers mods)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         return codeEditor.MenuFileSave(selection, mods);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   };
 | 
				
			||||||
 | 
					   MenuItem fileSaveAsItem
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      fileMenu, $"Save As...", a;
 | 
				
			||||||
 | 
					      bool NotifySelect(MenuItem selection, Modifiers mods)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         return codeEditor.MenuFileSaveAs(selection, mods);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   };
 | 
				
			||||||
 | 
					   bool debugClosing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   bool OnClose(bool parentClosing)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      if(!parentClosing)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         if(codeEditor && codeEditor.inUseDebug && !debugClosing)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            debugClosing = true;
 | 
				
			||||||
 | 
					            closing = false;
 | 
				
			||||||
 | 
					            if(CloseConfirmation(false))
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					               visible = false;
 | 
				
			||||||
 | 
					               if(modifiedDocument)
 | 
				
			||||||
 | 
					                  OnFileModified({ modified = true }, null);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            debugClosing = false;
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         if(codeEditor && !codeEditor.closing && !debugClosing)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            if(!codeEditor.visible)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					               if(!codeEditor.Destroy(0))
 | 
				
			||||||
 | 
					                  return false;
 | 
				
			||||||
 | 
					               else
 | 
				
			||||||
 | 
					                  codeEditor = null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					               visible = false;
 | 
				
			||||||
 | 
					               return false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   bool OnActivate(bool active, Window previous, bool * goOnWithActivation, bool direct)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      if(active)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         codeEditor.EnsureUpToDate();
 | 
				
			||||||
 | 
					         codeEditor.fixCaret = true;
 | 
				
			||||||
 | 
					         /*
 | 
				
			||||||
 | 
					         if(classDesigner)
 | 
				
			||||||
 | 
					            classDesigner.Activate();
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   bool OnKeyHit(Key key, unichar ch)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      return codeEditor.sheet.OnKeyHit(key, ch);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   watch(modifiedDocument)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      fileSaveItem.disabled = !modifiedDocument && codeEditor.fileName;
 | 
				
			||||||
 | 
					   };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   // *** METHODS ACCESSED FROM PROPERTY SHEET/TOOLBOX/CODE EDITOR ***
 | 
				
			||||||
 | 
					   void Reset()
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      if(classDesigner)
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         classDesigner.Reset();
 | 
				
			||||||
 | 
					         classDesigner.SelectObject(null, null);
 | 
				
			||||||
 | 
					         classDesigner.Destroy(0);
 | 
				
			||||||
 | 
					         delete classDesigner;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void FillToolBox()
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      if(this && classDesigner)
 | 
				
			||||||
 | 
					         classDesigner.ListToolBoxClasses(this);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void SelectObject(ObjectInfo object, Instance instance)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      ClassDesignerBase classDesigner = this.classDesigner;
 | 
				
			||||||
 | 
					#ifdef _DEBUG
 | 
				
			||||||
 | 
					      if(instance && instance._class.module.application != codeEditor.privateModule)
 | 
				
			||||||
 | 
					         printf("warning: SelectObject: instance._class.module.application != codeEditor.privateModule\n");
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					      if(!classDesigner || !instance || classDesigner._class != (Class)eInstance_GetDesigner(instance))
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					         if(classDesigner)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            classDesigner.SelectObject(null, null);
 | 
				
			||||||
 | 
					            classDesigner.Destroy(0);
 | 
				
			||||||
 | 
					            classDesigner = null;
 | 
				
			||||||
 | 
					            delete this.classDesigner;
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					         if(instance)
 | 
				
			||||||
 | 
					         {
 | 
				
			||||||
 | 
					            this.classDesigner = classDesigner = eInstance_New(eInstance_GetDesigner(instance));
 | 
				
			||||||
 | 
					            incref classDesigner;
 | 
				
			||||||
 | 
					            //if(!classDesigner.parent)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					               classDesigner.parent = this;
 | 
				
			||||||
 | 
					               classDesigner.anchor = Anchor { left = 0, right = 0, top = 0, bottom = 0 };
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            classDesigner.Create();
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      // Call class editor SelectObject
 | 
				
			||||||
 | 
					      if(classDesigner)
 | 
				
			||||||
 | 
					         classDesigner.SelectObject(object, instance);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void AddObject()
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      // Call class editor AddObject
 | 
				
			||||||
 | 
					      if(classDesigner)
 | 
				
			||||||
 | 
					         classDesigner.AddObject();
 | 
				
			||||||
 | 
					      if(visible)
 | 
				
			||||||
 | 
					         Activate();
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					         codeEditor.Activate();
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void CreateObject(Instance instance, ObjectInfo object, bool isClass, Instance iclass)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Call class editor CreateObject
 | 
				
			||||||
 | 
					      if(designerClass)
 | 
				
			||||||
 | 
					         designerClass.CreateObject(this, instance, object, isClass, iclass);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void ::PostCreateObject(Instance instance, ObjectInfo object, bool isClass, Instance iclass)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Call class editor PostCreateObject
 | 
				
			||||||
 | 
					      if(designerClass)
 | 
				
			||||||
 | 
					         designerClass.PostCreateObject(instance, object, isClass, iclass);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void ::DroppedObject(Instance instance, ObjectInfo object, bool isClass, Instance iclass)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Call class editor PostCreateObject
 | 
				
			||||||
 | 
					      if(designerClass)
 | 
				
			||||||
 | 
					         designerClass.DroppedObject(instance, object, isClass, iclass);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void PrepareTestObject(Instance instance)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance);
 | 
				
			||||||
 | 
					      if(designerClass)
 | 
				
			||||||
 | 
					         designerClass.PrepareTestObject(this, instance);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void ::DestroyObject(Instance instance)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance);
 | 
				
			||||||
 | 
					      if(designerClass)
 | 
				
			||||||
 | 
					         designerClass.DestroyObject(instance);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   void ::FixProperty(Property prop, Instance instance)
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					      subclass(ClassDesignerBase) designerClass = eInstance_GetDesigner(instance);
 | 
				
			||||||
 | 
					      if(designerClass)
 | 
				
			||||||
 | 
					         designerClass.FixProperty(prop, instance);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1
									
								
								vendor/grammars/ec.tmbundle
									
									
									
									
										vendored
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								vendor/grammars/ec.tmbundle
									
									
									
									
										vendored
									
									
										Submodule
									
								
							 Submodule vendor/grammars/ec.tmbundle added at b8ec2d32af
									
								
							
		Reference in New Issue
	
	Block a user