From: Tara L Andrews Date: Sun, 2 Oct 2011 00:08:38 +0000 (+0200) Subject: Fix graphml output / input format X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=94c00c71ffabc3dc155d237364e76af4385dcb96;hp=3a5d151b91cc8cf4e0e7a8643285e4da30b91531;p=scpubgit%2Fstemmatology.git Fix graphml output / input format --- diff --git a/.gitignore b/.gitignore index 91d1e48..cca283e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *~ data +Tradition.bbprojectd/tla.bbprojectsettings diff --git a/Tradition.bbprojectd/tla.bbprojectsettings b/Tradition.bbprojectd/tla.bbprojectsettings deleted file mode 100644 index d363f44..0000000 --- a/Tradition.bbprojectd/tla.bbprojectsettings +++ /dev/null @@ -1,855 +0,0 @@ - - - - - EmbeddedEditorHidden:tla - - ExpandedEditorWidth:tla:displays([(0, 0), (1440, 900)]) - 788 - ExpandedItems:tla - - BA45EE3F-4E79-4734-A808-E988ECE32C18 - - AliasData - - AAAAAAGYAAIAAQxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADK - PI0jSCsAAAAIMZoJVHJhZGl0aW9uAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgx - m8pUoC8AAAAAAAAAAP////8AAAkgAAAAAAAAAAAAAAAAAAAABFRl - eHQAEAAIAADKPHEDAAAAEQAIAADKVIQPAAAAAQAYAAgxmgAIMZkA - CC6IAAckkwAFBAYAAL8xAAIARU1hY2ludG9zaCBIRDpVc2VyczoA - dGxhOgBQcm9qZWN0czoAc3RlbW1hdG9sb2d5OgBsaWI6AFRleHQ6 - AFRyYWRpdGlvbgAADgAUAAkAVAByAGEAZABpAHQAaQBvAG4ADwAa - AAwATQBhAGMAaQBuAHQAbwBzAGgAIABIAEQAEgAyVXNlcnMvdGxh - L1Byb2plY3RzL3N0ZW1tYXRvbG9neS9saWIvVGV4dC9UcmFkaXRp - b24AEwABLwAAFQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/ - TypeID - _CFileLocator - Version - 1 - - - AliasData - - AAAAAAG2AAIAAQxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADK - PI0jSCsAAAAIMZsJQ29sbGF0aW9uAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgx - nMovk3cAAAAAAAAAAP////8AAAkgAAAAAAAAAAAAAAAAAAAACVRy - YWRpdGlvbgAAEAAIAADKPHEDAAAAEQAIAADKL3dXAAAAAQAcAAgx - mwAIMZoACDGZAAguiAAHJJMABQQGAAC/MQACAFBNYWNpbnRvc2gg - SEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1tYXRvbG9neToA - bGliOgBUZXh0OgBUcmFkaXRpb246AENvbGxhdGlvbgAOABQACQBD - AG8AbABsAGEAdABpAG8AbgAPABoADABNAGEAYwBpAG4AdABvAHMA - aAAgAEgARAASADxVc2Vycy90bGEvUHJvamVjdHMvc3RlbW1hdG9s - b2d5L2xpYi9UZXh0L1RyYWRpdGlvbi9Db2xsYXRpb24AEwABLwAA - FQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Collation/ - TypeID - _CFileLocator - Version - 1 - - - AliasData - - AAAAAAGsAAIAAQxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADK - PI0jSCsAAAAIMZsGUGFyc2VyAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgx - pMpezGEAAAAAAAAAAP////8AAAkgAAAAAAAAAAAAAAAAAAAACVRy - YWRpdGlvbgAAEAAIAADKPHEDAAAAEQAIAADKXrBBAAAAAQAcAAgx - mwAIMZoACDGZAAguiAAHJJMABQQGAAC/MQACAE1NYWNpbnRvc2gg - SEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1tYXRvbG9neToA - bGliOgBUZXh0OgBUcmFkaXRpb246AFBhcnNlcgAADgAOAAYAUABh - AHIAcwBlAHIADwAaAAwATQBhAGMAaQBuAHQAbwBzAGgAIABIAEQA - EgA5VXNlcnMvdGxhL1Byb2plY3RzL3N0ZW1tYXRvbG9neS9saWIv - VGV4dC9UcmFkaXRpb24vUGFyc2VyAAATAAEvAAAVAAIACv//AAA= - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Parser/ - TypeID - _CFileLocator - Version - 1 - - - FileFilterID:tla - msng - OpenDocuments:tla - - - AliasData - - AAAAAAG2AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADK - PI0jSCsAAAAIMZsJU3RlbW1hLnBtAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvk - 9so6UGBURVhUAAAAAP////8AAAkgAAAAAAAAAAAAAAAAAAAACVRy - YWRpdGlvbgAAEAAIAADKPHEDAAAAEQAIAADKOjRAAAAAAQAcAAgx - mwAIMZoACDGZAAguiAAHJJMABQQGAAC/MQACAFBNYWNpbnRvc2gg - SEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1tYXRvbG9neToA - bGliOgBUZXh0OgBUcmFkaXRpb246AFN0ZW1tYS5wbQAOABQACQBT - AHQAZQBtAG0AYQAuAHAAbQAPABoADABNAGEAYwBpAG4AdABvAHMA - aAAgAEgARAASADxVc2Vycy90bGEvUHJvamVjdHMvc3RlbW1hdG9s - b2d5L2xpYi9UZXh0L1RyYWRpdGlvbi9TdGVtbWEucG0AEwABLwAA - FQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Stemma.pm - RelativePath - ./lib/Text/Tradition/Stemma.pm - TypeID - _CFileLocator - Version - 1 - - - AliasData - - AAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADK - PI0jSCsAAAAIMZsMQ29sbGF0aW9uLnBtAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxu - 8MphvU5URVhUAAAAAP////8AAAkgAAAAAAAAAAAAAAAAAAAACVRy - YWRpdGlvbgAAEAAIAADKPHEDAAAAEQAIAADKYaEuAAAAAQAcAAgx - mwAIMZoACDGZAAguiAAHJJMABQQGAAC/MQACAFNNYWNpbnRvc2gg - SEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1tYXRvbG9neToA - bGliOgBUZXh0OgBUcmFkaXRpb246AENvbGxhdGlvbi5wbQAADgAa - AAwAQwBvAGwAbABhAHQAaQBvAG4ALgBwAG0ADwAaAAwATQBhAGMA - aQBuAHQAbwBzAGgAIABIAEQAEgA/VXNlcnMvdGxhL1Byb2plY3Rz - L3N0ZW1tYXRvbG9neS9saWIvVGV4dC9UcmFkaXRpb24vQ29sbGF0 - aW9uLnBtAAATAAEvAAAVAAIACv//AAA= - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Collation.pm - RelativePath - ./lib/Text/Tradition/Collation.pm - TypeID - _CFileLocator - Version - 1 - - - AliasData - - AAAAAAHUAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADK - PI0jSCsAAAAIMZwKUmVhZGluZy5wbQAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABv8 - WMoshoNURVhUAAAAAP////8AAAkgAAAAAAAAAAAAAAAAAAAACUNv - bGxhdGlvbgAAEAAIAADKPHEDAAAAEQAIAADKLGpjAAAAAQAgAAgx - nAAIMZsACDGaAAgxmQAILogABySTAAUEBgAAvzEAAgBcTWFjaW50 - b3NoIEhEOlVzZXJzOgB0bGE6AFByb2plY3RzOgBzdGVtbWF0b2xv - Z3k6AGxpYjoAVGV4dDoAVHJhZGl0aW9uOgBDb2xsYXRpb246AFJl - YWRpbmcucG0ADgAWAAoAUgBlAGEAZABpAG4AZwAuAHAAbQAPABoA - DABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEdVc2Vycy90bGEv - UHJvamVjdHMvc3RlbW1hdG9sb2d5L2xpYi9UZXh0L1RyYWRpdGlv - bi9Db2xsYXRpb24vUmVhZGluZy5wbQAAEwABLwAAFQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Collation/Reading.pm - RelativePath - ./lib/Text/Tradition/Collation/Reading.pm - TypeID - _CFileLocator - Version - 1 - - - AliasData - - AAAAAAG6AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADK - PI0jSCsAAAAIMaQGVEVJLnBtAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJQ - SMp/M1tURVhUAAAAAP////8AAAkgAAAAAAAAAAAAAAAAAAAABlBh - cnNlcgAQAAgAAMo8cQMAAAARAAgAAMp/FzsAAAABACAACDGkAAgx - mwAIMZoACDGZAAguiAAHJJMABQQGAAC/MQACAFVNYWNpbnRvc2gg - SEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1tYXRvbG9neToA - bGliOgBUZXh0OgBUcmFkaXRpb246AFBhcnNlcjoAVEVJLnBtAAAO - AA4ABgBUAEUASQAuAHAAbQAPABoADABNAGEAYwBpAG4AdABvAHMA - aAAgAEgARAASAEBVc2Vycy90bGEvUHJvamVjdHMvc3RlbW1hdG9s - b2d5L2xpYi9UZXh0L1RyYWRpdGlvbi9QYXJzZXIvVEVJLnBtABMA - AS8AABUAAgAK//8AAA== - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Parser/TEI.pm - RelativePath - ./lib/Text/Tradition/Parser/TEI.pm - TypeID - _CFileLocator - Version - 1 - - - AliasData - - AAAAAAG+AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADK - PI0jSCsAAAAIMaQHVXRpbC5wbQAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABv7 - isppmKBURVhUUipjaP////8AAAkgAAAAAAAAAAAAAAAAAAAABlBh - cnNlcgAQAAgAAMo8cQMAAAARAAgAAMppfIAAAAABACAACDGkAAgx - mwAIMZoACDGZAAguiAAHJJMABQQGAAC/MQACAFZNYWNpbnRvc2gg - SEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1tYXRvbG9neToA - bGliOgBUZXh0OgBUcmFkaXRpb246AFBhcnNlcjoAVXRpbC5wbQAO - ABAABwBVAHQAaQBsAC4AcABtAA8AGgAMAE0AYQBjAGkAbgB0AG8A - cwBoACAASABEABIAQVVzZXJzL3RsYS9Qcm9qZWN0cy9zdGVtbWF0 - b2xvZ3kvbGliL1RleHQvVHJhZGl0aW9uL1BhcnNlci9VdGlsLnBt - AAATAAEvAAAVAAIACv//AAA= - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Parser/Util.pm - RelativePath - ./lib/Text/Tradition/Parser/Util.pm - TypeID - _CFileLocator - Version - 1 - - - AliasData - - AAAAAAGkAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADK - PI0jSCsAAAAILogRbWFrZV90cmFkaXRpb24ucGwAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJK - 7cp/KfxURVhUAAAAAP////8AAAkgAAAAAAAAAAAAAAAAAAAADHN0 - ZW1tYXRvbG9neQAQAAgAAMo8cQMAAAARAAgAAMp/DdwAAAABABAA - CC6IAAckkwAFBAYAAL8xAAIAQk1hY2ludG9zaCBIRDpVc2VyczoA - dGxhOgBQcm9qZWN0czoAc3RlbW1hdG9sb2d5OgBtYWtlX3RyYWRp - dGlvbi5wbAAOACQAEQBtAGEAawBlAF8AdAByAGEAZABpAHQAaQBv - AG4ALgBwAGwADwAaAAwATQBhAGMAaQBuAHQAbwBzAGgAIABIAEQA - EgAxVXNlcnMvdGxhL1Byb2plY3RzL3N0ZW1tYXRvbG9neS9tYWtl - X3RyYWRpdGlvbi5wbAAAEwABLwAAFQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/make_tradition.pl - RelativePath - ./make_tradition.pl - TypeID - _CFileLocator - Version - 1 - - - AliasData - - AAAAAAGkAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADK - PI0jSCsAAAAIMZoMVHJhZGl0aW9uLnBtAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvm - YsoJl7BURVhUAAAAAP////8AAAkgAAAAAAAAAAAAAAAAAAAABFRl - eHQAEAAIAADKPHEDAAAAEQAIAADKCXuQAAAAAQAYAAgxmgAIMZkA - CC6IAAckkwAFBAYAAL8xAAIASE1hY2ludG9zaCBIRDpVc2VyczoA - dGxhOgBQcm9qZWN0czoAc3RlbW1hdG9sb2d5OgBsaWI6AFRleHQ6 - AFRyYWRpdGlvbi5wbQAOABoADABUAHIAYQBkAGkAdABpAG8AbgAu - AHAAbQAPABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASADVV - c2Vycy90bGEvUHJvamVjdHMvc3RlbW1hdG9sb2d5L2xpYi9UZXh0 - L1RyYWRpdGlvbi5wbQAAEwABLwAAFQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition.pm - RelativePath - ./lib/Text/Tradition.pm - TypeID - _CFileLocator - Version - 1 - - - AliasData - - AAAAAAHOAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAAAAAAAADK - PI0jSCsAAAAIMaQLQmFzZVRleHQucG0AAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJQ - Lsp/MxVURVhUAAAAAP////8AAAkgAAAAAAAAAAAAAAAAAAAABlBh - cnNlcgAQAAgAAMo8cQMAAAARAAgAAMp/FvUAAAABACAACDGkAAgx - mwAIMZoACDGZAAguiAAHJJMABQQGAAC/MQACAFpNYWNpbnRvc2gg - SEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1tYXRvbG9neToA - bGliOgBUZXh0OgBUcmFkaXRpb246AFBhcnNlcjoAQmFzZVRleHQu - cG0ADgAYAAsAQgBhAHMAZQBUAGUAeAB0AC4AcABtAA8AGgAMAE0A - YQBjAGkAbgB0AG8AcwBoACAASABEABIARVVzZXJzL3RsYS9Qcm9q - ZWN0cy9zdGVtbWF0b2xvZ3kvbGliL1RleHQvVHJhZGl0aW9uL1Bh - cnNlci9CYXNlVGV4dC5wbQAAEwABLwAAFQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Parser/BaseText.pm - RelativePath - ./lib/Text/Tradition/Parser/BaseText.pm - TypeID - _CFileLocator - Version - 1 - - - OpenDocumentsExpanded - - OpenDocumentsVisible - - ProjectViewVisible - - RecentItems:tla - - - Date - 2011-10-01T18:51:11Z - Location - - AliasData - - AAAAAAHUAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMZwKUmVhZGluZy5wbQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAABv8WMoshoNURVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAACUNvbGxhdGlvbgAA - EAAIAADKPHEDAAAAEQAIAADKLGpjAAAAAQAgAAgxnAAI - MZsACDGaAAgxmQAILogABySTAAUEBgAAvzEAAgBcTWFj - aW50b3NoIEhEOlVzZXJzOgB0bGE6AFByb2plY3RzOgBz - dGVtbWF0b2xvZ3k6AGxpYjoAVGV4dDoAVHJhZGl0aW9u - OgBDb2xsYXRpb246AFJlYWRpbmcucG0ADgAWAAoAUgBl - AGEAZABpAG4AZwAuAHAAbQAPABoADABNAGEAYwBpAG4A - dABvAHMAaAAgAEgARAASAEdVc2Vycy90bGEvUHJvamVj - dHMvc3RlbW1hdG9sb2d5L2xpYi9UZXh0L1RyYWRpdGlv - bi9Db2xsYXRpb24vUmVhZGluZy5wbQAAEwABLwAAFQAC - AAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Collation/Reading.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-10-01T18:42:03Z - Location - - AliasData - - AAAAAAG+AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMaQHVXRpbC5wbQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAABv7isppmKBURVhUUipjaP// - //8AAAkgAAAAAAAAAAAAAAAAAAAABlBhcnNlcgAQAAgA - AMo8cQMAAAARAAgAAMppfIAAAAABACAACDGkAAgxmwAI - MZoACDGZAAguiAAHJJMABQQGAAC/MQACAFZNYWNpbnRv - c2ggSEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1t - YXRvbG9neToAbGliOgBUZXh0OgBUcmFkaXRpb246AFBh - cnNlcjoAVXRpbC5wbQAOABAABwBVAHQAaQBsAC4AcABt - AA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIA - QVVzZXJzL3RsYS9Qcm9qZWN0cy9zdGVtbWF0b2xvZ3kv - bGliL1RleHQvVHJhZGl0aW9uL1BhcnNlci9VdGlsLnBt - AAATAAEvAAAVAAIACv//AAA= - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Parser/Util.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-30T20:37:59Z - Location - - AliasData - - AAAAAAHOAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMaQLQmFzZVRleHQucG0AAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAACJQLsp/MxVURVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAABlBhcnNlcgAQAAgA - AMo8cQMAAAARAAgAAMp/FvUAAAABACAACDGkAAgxmwAI - MZoACDGZAAguiAAHJJMABQQGAAC/MQACAFpNYWNpbnRv - c2ggSEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1t - YXRvbG9neToAbGliOgBUZXh0OgBUcmFkaXRpb246AFBh - cnNlcjoAQmFzZVRleHQucG0ADgAYAAsAQgBhAHMAZQBU - AGUAeAB0AC4AcABtAA8AGgAMAE0AYQBjAGkAbgB0AG8A - cwBoACAASABEABIARVVzZXJzL3RsYS9Qcm9qZWN0cy9z - dGVtbWF0b2xvZ3kvbGliL1RleHQvVHJhZGl0aW9uL1Bh - cnNlci9CYXNlVGV4dC5wbQAAEwABLwAAFQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Parser/BaseText.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-30T20:30:48Z - Location - - AliasData - - AAAAAAHIAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMZwHUGF0aC5wbQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAgxncoFjyAAAAAAAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAACUNvbGxhdGlvbgAA - EAAIAADKPHEDAAAAEQAIAADKBXMAAAAAAQAgAAgxnAAI - MZsACDGaAAgxmQAILogABySTAAUEBgAAvzEAAgBZTWFj - aW50b3NoIEhEOlVzZXJzOgB0bGE6AFByb2plY3RzOgBz - dGVtbWF0b2xvZ3k6AGxpYjoAVGV4dDoAVHJhZGl0aW9u - OgBDb2xsYXRpb246AFBhdGgucG0AAA4AEAAHAFAAYQB0 - AGgALgBwAG0ADwAaAAwATQBhAGMAaQBuAHQAbwBzAGgA - IABIAEQAEgBEVXNlcnMvdGxhL1Byb2plY3RzL3N0ZW1t - YXRvbG9neS9saWIvVGV4dC9UcmFkaXRpb24vQ29sbGF0 - aW9uL1BhdGgucG0AEwABLwAAFQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Collation/Path.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:43Z - Location - - AliasData - - AAAAAAHEAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMZsMQ29sbGF0aW9uLnBtAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAABxu8MphvU5URVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAACVRyYWRpdGlvbgAA - EAAIAADKPHEDAAAAEQAIAADKYaEuAAAAAQAcAAgxmwAI - MZoACDGZAAguiAAHJJMABQQGAAC/MQACAFNNYWNpbnRv - c2ggSEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1t - YXRvbG9neToAbGliOgBUZXh0OgBUcmFkaXRpb246AENv - bGxhdGlvbi5wbQAADgAaAAwAQwBvAGwAbABhAHQAaQBv - AG4ALgBwAG0ADwAaAAwATQBhAGMAaQBuAHQAbwBzAGgA - IABIAEQAEgA/VXNlcnMvdGxhL1Byb2plY3RzL3N0ZW1t - YXRvbG9neS9saWIvVGV4dC9UcmFkaXRpb24vQ29sbGF0 - aW9uLnBtAAATAAEvAAAVAAIACv//AAA= - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Collation.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:43Z - Location - - AliasData - - AAAAAAGkAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMZoMVHJhZGl0aW9uLnBtAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAABvmYsoJl7BURVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAABFRleHQAEAAIAADK - PHEDAAAAEQAIAADKCXuQAAAAAQAYAAgxmgAIMZkACC6I - AAckkwAFBAYAAL8xAAIASE1hY2ludG9zaCBIRDpVc2Vy - czoAdGxhOgBQcm9qZWN0czoAc3RlbW1hdG9sb2d5OgBs - aWI6AFRleHQ6AFRyYWRpdGlvbi5wbQAOABoADABUAHIA - YQBkAGkAdABpAG8AbgAuAHAAbQAPABoADABNAGEAYwBp - AG4AdABvAHMAaAAgAEgARAASADVVc2Vycy90bGEvUHJv - amVjdHMvc3RlbW1hdG9sb2d5L2xpYi9UZXh0L1RyYWRp - dGlvbi5wbQAAEwABLwAAFQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:43Z - Location - - AliasData - - AAAAAAGkAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAILogRbWFrZV90cmFkaXRpb24u - cGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAACJK7cp/KfxURVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAADHN0ZW1tYXRvbG9n - eQAQAAgAAMo8cQMAAAARAAgAAMp/DdwAAAABABAACC6I - AAckkwAFBAYAAL8xAAIAQk1hY2ludG9zaCBIRDpVc2Vy - czoAdGxhOgBQcm9qZWN0czoAc3RlbW1hdG9sb2d5OgBt - YWtlX3RyYWRpdGlvbi5wbAAOACQAEQBtAGEAawBlAF8A - dAByAGEAZABpAHQAaQBvAG4ALgBwAGwADwAaAAwATQBh - AGMAaQBuAHQAbwBzAGgAIABIAEQAEgAxVXNlcnMvdGxh - L1Byb2plY3RzL3N0ZW1tYXRvbG9neS9tYWtlX3RyYWRp - dGlvbi5wbAAAEwABLwAAFQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/make_tradition.pl - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:43Z - Location - - AliasData - - AAAAAAG6AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMaQGQ1RFLnBtAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAgxqcpezGFURVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAABlBhcnNlcgAQAAgA - AMo8cQMAAAARAAgAAMpesEEAAAABACAACDGkAAgxmwAI - MZoACDGZAAguiAAHJJMABQQGAAC/MQACAFVNYWNpbnRv - c2ggSEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1t - YXRvbG9neToAbGliOgBUZXh0OgBUcmFkaXRpb246AFBh - cnNlcjoAQ1RFLnBtAAAOAA4ABgBDAFQARQAuAHAAbQAP - ABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEBV - c2Vycy90bGEvUHJvamVjdHMvc3RlbW1hdG9sb2d5L2xp - Yi9UZXh0L1RyYWRpdGlvbi9QYXJzZXIvQ1RFLnBtABMA - AS8AABUAAgAK//8AAA== - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Parser/CTE.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:43Z - Location - - AliasData - - AAAAAAHOAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMaQLQ29sbGF0ZVgucG0AAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAABsbDcovlGtURVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAABlBhcnNlcgAQAAgA - AMo8cQMAAAARAAgAAMoveEsAAAABACAACDGkAAgxmwAI - MZoACDGZAAguiAAHJJMABQQGAAC/MQACAFpNYWNpbnRv - c2ggSEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1t - YXRvbG9neToAbGliOgBUZXh0OgBUcmFkaXRpb246AFBh - cnNlcjoAQ29sbGF0ZVgucG0ADgAYAAsAQwBvAGwAbABh - AHQAZQBYAC4AcABtAA8AGgAMAE0AYQBjAGkAbgB0AG8A - cwBoACAASABEABIARVVzZXJzL3RsYS9Qcm9qZWN0cy9z - dGVtbWF0b2xvZ3kvbGliL1RleHQvVHJhZGl0aW9uL1Bh - cnNlci9Db2xsYXRlWC5wbQAAEwABLwAAFQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Parser/CollateX.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:43Z - Location - - AliasData - - AAAAAAG2AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMZsJU3RlbW1hLnBtAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAABvk9so6UGBURVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAACVRyYWRpdGlvbgAA - EAAIAADKPHEDAAAAEQAIAADKOjRAAAAAAQAcAAgxmwAI - MZoACDGZAAguiAAHJJMABQQGAAC/MQACAFBNYWNpbnRv - c2ggSEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1t - YXRvbG9neToAbGliOgBUZXh0OgBUcmFkaXRpb246AFN0 - ZW1tYS5wbQAOABQACQBTAHQAZQBtAG0AYQAuAHAAbQAP - ABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASADxV - c2Vycy90bGEvUHJvamVjdHMvc3RlbW1hdG9sb2d5L2xp - Yi9UZXh0L1RyYWRpdGlvbi9TdGVtbWEucG0AEwABLwAA - FQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Stemma.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:43Z - Location - - AliasData - - AAAAAAG6AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMaQGVEVJLnBtAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAACJQSMp/M1tURVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAABlBhcnNlcgAQAAgA - AMo8cQMAAAARAAgAAMp/FzsAAAABACAACDGkAAgxmwAI - MZoACDGZAAguiAAHJJMABQQGAAC/MQACAFVNYWNpbnRv - c2ggSEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1t - YXRvbG9neToAbGliOgBUZXh0OgBUcmFkaXRpb246AFBh - cnNlcjoAVEVJLnBtAAAOAA4ABgBUAEUASQAuAHAAbQAP - ABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEBV - c2Vycy90bGEvUHJvamVjdHMvc3RlbW1hdG9sb2d5L2xp - Yi9UZXh0L1RyYWRpdGlvbi9QYXJzZXIvVEVJLnBtABMA - AS8AABUAAgAK//8AAA== - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Parser/TEI.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:42Z - Location - - AliasData - - AAAAAAHKAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMaQKVGFidWxhci5wbQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAACLQhsqFAChURVhUUipjaP// - //8AAAkgAAAAAAAAAAAAAAAAAAAABlBhcnNlcgAQAAgA - AMo8cQMAAAARAAgAAMqE5AgAAAABACAACDGkAAgxmwAI - MZoACDGZAAguiAAHJJMABQQGAAC/MQACAFlNYWNpbnRv - c2ggSEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1t - YXRvbG9neToAbGliOgBUZXh0OgBUcmFkaXRpb246AFBh - cnNlcjoAVGFidWxhci5wbQAADgAWAAoAVABhAGIAdQBs - AGEAcgAuAHAAbQAPABoADABNAGEAYwBpAG4AdABvAHMA - aAAgAEgARAASAERVc2Vycy90bGEvUHJvamVjdHMvc3Rl - bW1hdG9sb2d5L2xpYi9UZXh0L1RyYWRpdGlvbi9QYXJz - ZXIvVGFidWxhci5wbQATAAEvAAAVAAIACv//AAA= - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Parser/Tabular.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:42Z - Location - - AliasData - - AAAAAAG8AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMZsKV2l0bmVzcy5wbQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAgxscpUnZsAAAAAAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAACVRyYWRpdGlvbgAA - EAAIAADKPHEDAAAAEQAIAADKVIF7AAAAAQAcAAgxmwAI - MZoACDGZAAguiAAHJJMABQQGAAC/MQACAFFNYWNpbnRv - c2ggSEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1t - YXRvbG9neToAbGliOgBUZXh0OgBUcmFkaXRpb246AFdp - dG5lc3MucG0AAA4AFgAKAFcAaQB0AG4AZQBzAHMALgBw - AG0ADwAaAAwATQBhAGMAaQBuAHQAbwBzAGgAIABIAEQA - EgA9VXNlcnMvdGxhL1Byb2plY3RzL3N0ZW1tYXRvbG9n - eS9saWIvVGV4dC9UcmFkaXRpb24vV2l0bmVzcy5wbQAA - EwABLwAAFQACAAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Witness.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:42Z - Location - - AliasData - - AAAAAAHUAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMZwKU2VnbWVudC5wbQAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAABxTecoO7XVURVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAACUNvbGxhdGlvbgAA - EAAIAADKPHEDAAAAEQAIAADKDtFVAAAAAQAgAAgxnAAI - MZsACDGaAAgxmQAILogABySTAAUEBgAAvzEAAgBcTWFj - aW50b3NoIEhEOlVzZXJzOgB0bGE6AFByb2plY3RzOgBz - dGVtbWF0b2xvZ3k6AGxpYjoAVGV4dDoAVHJhZGl0aW9u - OgBDb2xsYXRpb246AFNlZ21lbnQucG0ADgAWAAoAUwBl - AGcAbQBlAG4AdAAuAHAAbQAPABoADABNAGEAYwBpAG4A - dABvAHMAaAAgAEgARAASAEdVc2Vycy90bGEvUHJvamVj - dHMvc3RlbW1hdG9sb2d5L2xpYi9UZXh0L1RyYWRpdGlv - bi9Db2xsYXRpb24vU2VnbWVudC5wbQAAEwABLwAAFQAC - AAr//wAA - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Collation/Segment.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:42Z - Location - - AliasData - - AAAAAAG6AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMaQGS1VMLnBtAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAABt9B8oPILtURVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAABlBhcnNlcgAQAAgA - AMo8cQMAAAARAAgAAMoPBJsAAAABACAACDGkAAgxmwAI - MZoACDGZAAguiAAHJJMABQQGAAC/MQACAFVNYWNpbnRv - c2ggSEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1t - YXRvbG9neToAbGliOgBUZXh0OgBUcmFkaXRpb246AFBh - cnNlcjoAS1VMLnBtAAAOAA4ABgBLAFUATAAuAHAAbQAP - ABoADABNAGEAYwBpAG4AdABvAHMAaAAgAEgARAASAEBV - c2Vycy90bGEvUHJvamVjdHMvc3RlbW1hdG9sb2d5L2xp - Yi9UZXh0L1RyYWRpdGlvbi9QYXJzZXIvS1VMLnBtABMA - AS8AABUAAgAK//8AAA== - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Parser/KUL.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:42Z - Location - - AliasData - - AAAAAAG+AAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMaQHU2VsZi5wbQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAABsbdsovPUhURVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAABlBhcnNlcgAQAAgA - AMo8cQMAAAARAAgAAMovISgAAAABACAACDGkAAgxmwAI - MZoACDGZAAguiAAHJJMABQQGAAC/MQACAFZNYWNpbnRv - c2ggSEQ6VXNlcnM6AHRsYToAUHJvamVjdHM6AHN0ZW1t - YXRvbG9neToAbGliOgBUZXh0OgBUcmFkaXRpb246AFBh - cnNlcjoAU2VsZi5wbQAOABAABwBTAGUAbABmAC4AcABt - AA8AGgAMAE0AYQBjAGkAbgB0AG8AcwBoACAASABEABIA - QVVzZXJzL3RsYS9Qcm9qZWN0cy9zdGVtbWF0b2xvZ3kv - bGliL1RleHQvVHJhZGl0aW9uL1BhcnNlci9TZWxmLnBt - AAATAAEvAAAVAAIACv//AAA= - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Parser/Self.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:42Z - Location - - AliasData - - AAAAAAHoAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMZwPUmVsYXRpb25zaGlwLnBt - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAgxoMoRzYZURVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAACUNvbGxhdGlvbgAA - EAAIAADKPHEDAAAAEQAIAADKEbFmAAAAAQAgAAgxnAAI - MZsACDGaAAgxmQAILogABySTAAUEBgAAvzEAAgBhTWFj - aW50b3NoIEhEOlVzZXJzOgB0bGE6AFByb2plY3RzOgBz - dGVtbWF0b2xvZ3k6AGxpYjoAVGV4dDoAVHJhZGl0aW9u - OgBDb2xsYXRpb246AFJlbGF0aW9uc2hpcC5wbQAADgAg - AA8AUgBlAGwAYQB0AGkAbwBuAHMAaABpAHAALgBwAG0A - DwAaAAwATQBhAGMAaQBuAHQAbwBzAGgAIABIAEQAEgBM - VXNlcnMvdGxhL1Byb2plY3RzL3N0ZW1tYXRvbG9neS9s - aWIvVGV4dC9UcmFkaXRpb24vQ29sbGF0aW9uL1JlbGF0 - aW9uc2hpcC5wbQATAAEvAAAVAAIACv//AAA= - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Collation/Relationship.pm - TypeID - _CFileLocator - Version - 1 - - - - Date - 2011-09-29T14:18:42Z - Location - - AliasData - - AAAAAAHYAAIAAAxNYWNpbnRvc2ggSEQAAAAAAAAAAAAA - AAAAAADKPI0jSCsAAAAIMZwLUG9zaXRpb24ucG0AAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAABvWmsoTFlRURVhUAAAAAP// - //8AAAkgAAAAAAAAAAAAAAAAAAAACUNvbGxhdGlvbgAA - EAAIAADKPHEDAAAAEQAIAADKEvo0AAAAAQAgAAgxnAAI - MZsACDGaAAgxmQAILogABySTAAUEBgAAvzEAAgBdTWFj - aW50b3NoIEhEOlVzZXJzOgB0bGE6AFByb2plY3RzOgBz - dGVtbWF0b2xvZ3k6AGxpYjoAVGV4dDoAVHJhZGl0aW9u - OgBDb2xsYXRpb246AFBvc2l0aW9uLnBtAAAOABgACwBQ - AG8AcwBpAHQAaQBvAG4ALgBwAG0ADwAaAAwATQBhAGMA - aQBuAHQAbwBzAGgAIABIAEQAEgBIVXNlcnMvdGxhL1By - b2plY3RzL3N0ZW1tYXRvbG9neS9saWIvVGV4dC9UcmFk - aXRpb24vQ29sbGF0aW9uL1Bvc2l0aW9uLnBtABMAAS8A - ABUAAgAK//8AAA== - - FileURL - file://localhost/Users/tla/Projects/stemmatology/lib/Text/Tradition/Collation/Position.pm - TypeID - _CFileLocator - Version - 1 - - - - RecentItemsExpanded - - RecentItemsVisible - - ScratchpadItemsExpanded - - ScratchpadItemsVisible - - ShowInvisibles:tla - - ShowSCMData:tla - - TextFilesOnly:tla - - ToolbarVisible:tla - - ViewSplitterPosition:tla - 0.19427402317523956 - WindowFrame:tla:displays([(0, 0), (1440, 900)]) - rect(44,47,878,1025) - - diff --git a/lib/Text/Tradition.pm b/lib/Text/Tradition.pm index c508d54..3dc6338 100644 --- a/lib/Text/Tradition.pm +++ b/lib/Text/Tradition.pm @@ -78,11 +78,6 @@ sub BUILD { return; } - # Start and end points for all texts - $collation->add_reading( '#START#' ); - $collation->add_reading( '#END#' ); - - # Now do the parsing. my @sigla; if( $format ) { diff --git a/lib/Text/Tradition/Collation.pm b/lib/Text/Tradition/Collation.pm index 036624e..bed4fc3 100644 --- a/lib/Text/Tradition/Collation.pm +++ b/lib/Text/Tradition/Collation.pm @@ -8,7 +8,6 @@ use Text::CSV_XS; use Text::Tradition::Collation::Path; use Text::Tradition::Collation::Reading; use Text::Tradition::Collation::Relationship; -use Text::Tradition::Collation::Segment; use XML::LibXML; use Moose; @@ -19,13 +18,11 @@ has 'graph' => ( add_reading => 'add_node', add_lacuna => 'add_node', del_reading => 'del_node', - del_segment => 'del_node', add_path => 'add_edge', del_path => 'del_edge', reading => 'node', path => 'edge', readings => 'nodes', - segments => 'nodes', paths => 'edges', relationships => 'edges', }, @@ -120,6 +117,10 @@ sub BUILD { # Pass through any graph-specific options. my $shape = exists( $args->{'shape'} ) ? $args->{'shape'} : 'ellipse'; $self->graph->set_attribute( 'node', 'shape', $shape ); + + # Start and end points for all texts + $self->start( 'INIT' ); + $self->end( 'INIT' ); } around add_lacuna => sub { @@ -174,22 +175,7 @@ around relationships => sub { return @result; }; -around readings => sub { - my $orig = shift; - my $self = shift; - my @result = grep { $_->sub_class ne 'segment' } $self->$orig( @_ ); - return @result; -}; - -around segments => sub { - my $orig = shift; - my $self = shift; - my @result = grep { $_->sub_class eq 'segment' } $self->$orig( @_ ); - return @result; -}; - # Wrapper around merge_nodes - sub merge_readings { my $self = shift; my $first_node = shift; @@ -207,14 +193,6 @@ sub has_path { return scalar @relevant; } -## Dealing with groups of readings, i.e. segments. - -sub add_segment { - my( $self, @items ) = @_; - my $segment = Text::Tradition::Collation::Segment->new( 'members' => \@items ); - return $segment; -} - ## Dealing with relationships between readings. This is a different ## sort of graph edge. Return a success/failure value and a list of ## node pairs that have been linked. @@ -223,7 +201,7 @@ sub add_relationship { my( $self, $source, $target, $options ) = @_; # Make sure there is not another relationship between these two - # readings or segments already + # readings already $source = $self->reading( $source ) unless ref( $source ) && $source->isa( 'Graph::Easy::Node' ); $target = $self->reading( $target ) @@ -343,8 +321,6 @@ sub as_dot { foreach my $reading ( $self->readings ) { # Need not output nodes without separate labels next if $reading->name eq $reading->label; - # TODO output readings or segments, but not both - next if $reading->class eq 'node.segment'; $dot .= sprintf( "\t\"%s\" [ label=\"%s\" ];\n", $reading->name, $reading->label ); } @@ -407,11 +383,11 @@ sub as_graphml { # Add the data keys for edges, i.e. witnesses my $edi = 0; my %edge_data_keys; - foreach my $edge_key( qw/ witness_main witness_ante_corr relationship class / ) { + foreach my $edge_key( qw/ witness extra relationship class / ) { $edge_data_keys{$edge_key} = 'de'.$edi++; my $key = $root->addNewChild( $graphml_ns, 'key' ); $key->setAttribute( 'attr.name', $edge_key ); - $key->setAttribute( 'attr.type', 'string' ); + $key->setAttribute( 'attr.type', $edge_key eq 'extra' ? 'boolean' : 'string' ); $key->setAttribute( 'for', 'edge' ); $key->setAttribute( 'id', $edge_data_keys{$edge_key} ); } @@ -419,7 +395,7 @@ sub as_graphml { # Add the graph, its nodes, and its edges my $graph = $root->addNewChild( $graphml_ns, 'graph' ); $graph->setAttribute( 'edgedefault', 'directed' ); - $graph->setAttribute( 'id', 'g0' ); # TODO make this meaningful + $graph->setAttribute( 'id', $self->tradition->name ); $graph->setAttribute( 'parse.edgeids', 'canonical' ); $graph->setAttribute( 'parse.edges', scalar($self->paths) ); $graph->setAttribute( 'parse.nodeids', 'canonical' ); @@ -440,20 +416,10 @@ sub as_graphml { if $n->has_rank; _add_graphml_data( $node_el, $node_data_keys{'class'}, $n->sub_class ); _add_graphml_data( $node_el, $node_data_keys{'identical'}, $n->primary->name ) - if $n->has_primary; + if $n->has_primary && $n->primary ne $n; } - # Add any segments we have - foreach my $n ( sort { $a->name cmp $b->name } $self->segments ) { - my $node_el = $graph->addNewChild( $graphml_ns, 'node' ); - my $node_xmlid = 'n' . $node_ctr++; - $node_hash{ $n->name } = $node_xmlid; - $node_el->setAttribute( 'id', $node_xmlid ); - _add_graphml_data( $node_el, $node_data_keys{'class'}, $n->sub_class ); - _add_graphml_data( $node_el, $node_data_keys{'name'}, $n->name ); - } - - # Add the path, relationship, and segment edges + # Add the path and relationship edges my $edge_ctr = 0; foreach my $e ( sort { $a->from->name cmp $b->from->name } $self->graph->edges() ) { my( $name, $from, $to ) = ( 'e'.$edge_ctr++, @@ -465,25 +431,31 @@ sub as_graphml { $edge_el->setAttribute( 'id', $name ); # Add the edge class _add_graphml_data( $edge_el, $edge_data_keys{'class'}, $e->sub_class ); + + # For some classes we have extra information to save. if( $e->sub_class eq 'path' ) { # It's a witness path, so add the witness my $base = $e->label; my $key = $edge_data_keys{'witness_main'}; - # TODO kind of hacky - if( $e->label =~ /^(.*?)\s+(\(a\.c\.\))$/ ) { + # Is this an ante-corr witness? + my $aclabel = $self->ac_label; + if( $e->label =~ /^(.*)\Q$aclabel\E$/ ) { + # Keep the base witness $base = $1; - $key = $edge_data_keys{'witness_ante_corr'}; + # ...and record that this is an 'extra' reading path + _add_graphml_data( $edge_el, $edge_data_keys{'extra'}, 'true' ); } - _add_graphml_data( $edge_el, $key, $base ); + _add_graphml_data( $edge_el, $edge_data_keys{'witness'}, $base ); } elsif( $e->sub_class eq 'relationship' ) { - # It's a relationship + # It's a relationship, so save the relationship type _add_graphml_data( $edge_el, $edge_data_keys{'relationship'}, $e->label ); - } # else a segment, nothing to record but source, target, class + } } - # Return the thing - $self->_save_graphml( $graphml->toString(1) ); - return $graphml->toString(1); + # Save and return the thing + my $result = decode_utf8( $graphml->toString(1) ); + $self->_save_graphml( $result ); + return $result; } sub _add_graphml_data { @@ -681,17 +653,24 @@ Returns the beginning of the collation, a meta-reading with label '#START#'. sub start { # Return the beginning reading of the graph. - my $self = shift; - my( $new_start ) = @_; - if( $new_start ) { + my( $self, $new_start ) = @_; + my $start = $self->reading( '#START#' ); + if( ref( $new_start ) eq 'Text::Tradition::Collation::Reading' ) { + # Replace the existing start node. $self->del_reading( '#START#' ); $self->graph->rename_node( $new_start, '#START#' ); + $start = $new_start; + } elsif ( $new_start && $new_start eq 'INIT' ) { + # Make a new start node. + $start = $self->add_reading( '#START#' ); } + # Make sure the start node is a meta node + $start->is_meta( 1 ); # Make sure the start node has a start position. - unless( $self->reading( '#START#' )->has_rank ) { - $self->reading( '#START#' )->rank( '0' ); + unless( $start->has_rank ) { + $start->rank( '0' ); } - return $self->reading('#START#'); + return $start; } =item B @@ -705,11 +684,18 @@ Returns the end of the collation, a meta-reading with label '#END#'. sub end { my $self = shift; my( $new_end ) = @_; - if( $new_end ) { + my $end = $self->reading( '#END#' ); + if( ref( $new_end ) eq 'Text::Tradition::Collation::Reading' ) { $self->del_reading( '#END#' ); $self->graph->rename_node( $new_end, '#END#' ); + $end = $new_end + } elsif ( $new_end && $new_end eq 'INIT' ) { + # Make a new start node. + $end = $self->add_reading( '#END#' ); } - return $self->reading('#END#'); + # Make sure the start node is a meta node + $end->is_meta( 1 ); + return $end; } =item B diff --git a/lib/Text/Tradition/Collation/Reading.pm b/lib/Text/Tradition/Collation/Reading.pm index f598418..050f67d 100644 --- a/lib/Text/Tradition/Collation/Reading.pm +++ b/lib/Text/Tradition/Collation/Reading.pm @@ -58,6 +58,14 @@ around position => sub { $self->$orig( @args ); }; +# A lacuna node is also a meta node. +before is_lacuna => sub { + my( $self, $arg ) = @_; + if( $arg ) { + $self->is_meta( 1 ); + } +}; + # Initialize the identity pool. sub BUILD { my( $self, $args ) = @_; @@ -165,6 +173,20 @@ sub is_at_position { return $self->position->is_colocated( @_ ); } +# Looks from the outside like an accessor for a Boolean, but really +# sets the node's class. Should apply to start, end, and lacunae. + +sub is_meta { + my $self = shift; + my $arg = shift; + if( defined $arg && $arg ) { + $self->set_attribute( 'class', 'meta' ); + } elsif ( defined $arg ) { + $self->del_attribute( 'class' ); + } + return $self->sub_class eq 'meta'; +} + # Returns all readings that adjoin this one on any path. sub neighbor_readings { my( $self, $direction ) = @_; @@ -201,6 +223,7 @@ sub is_common { return $self->get_attribute( 'class' ) eq 'common'; } +## TODO Rationalize make_common, is_meta, etc. sub make_common { my( $self ) = shift; $self->set_attribute( 'class', 'common' ); diff --git a/lib/Text/Tradition/Parser/GraphML.pm b/lib/Text/Tradition/Parser/GraphML.pm index 7807189..be36407 100644 --- a/lib/Text/Tradition/Parser/GraphML.pm +++ b/lib/Text/Tradition/Parser/GraphML.pm @@ -67,7 +67,8 @@ sub parse { my $node_reg = {}; - # Add the nodes to the graph hash. + # Add the nodes to the graph hash. + print STDERR "Reading graphml nodes\n"; my @nodes = $xpc->findnodes( '//g:node' ); foreach my $n ( @nodes ) { # Could use a better way of registering these @@ -82,6 +83,7 @@ sub parse { } # Now add the edges, and cross-ref with the node objects. + print STDERR "Reading graphml edges\n"; my @edges = $xpc->findnodes( '//g:edge' ); foreach my $e ( @edges ) { my $from = $e->getAttribute('source'); @@ -107,7 +109,13 @@ sub parse { sub _lookup_node_data { my( $xmlnode, $key ) = @_; my $lookup_xpath = './g:data[@key="%s"]/child::text()'; - my $data = $xpc->findvalue( sprintf( $lookup_xpath, $key ), $xmlnode ); + my $data = $xpc->find( sprintf( $lookup_xpath, $key ), $xmlnode ); + # If we get back an empty nodelist, we return undef. + if( ref( $data ) ) { + return undef unless $data->size; + return $data->to_literal->value; + } + # Otherwise we got back a value. Return it. return $data; } diff --git a/lib/Text/Tradition/Parser/Self.pm b/lib/Text/Tradition/Parser/Self.pm index 5311660..addff13 100644 --- a/lib/Text/Tradition/Parser/Self.pm +++ b/lib/Text/Tradition/Parser/Self.pm @@ -27,11 +27,16 @@ graph. =cut -my( $IDKEY, $TOKENKEY, $TRANSPOS_KEY, $RANK_KEY, $CLASS_KEY ) - = qw/ name reading identical rank class /; +# TODO share these with Collation.pm somehow +my( $IDKEY, $TOKENKEY, $TRANSPOS_KEY, $RANK_KEY, $CLASS_KEY, + $SOURCE_KEY, $TARGET_KEY, $WITNESS_KEY, $EXTRA_KEY, $RELATIONSHIP_KEY ) + = qw/ name reading identical rank class + source target witness extra relationship/; sub parse { my( $tradition, $graphml_str ) = @_; + + # TODO this is begging for stream parsing instead of multiple loops. my $graph_data = Text::Tradition::Parser::GraphML::parse( $graphml_str ); my $collation = $tradition->collation; @@ -44,78 +49,71 @@ sub parse { # after the nodes & edges are created. print STDERR "Adding graph nodes\n"; foreach my $n ( @{$graph_data->{'nodes'}} ) { - # Each node is either a segment or a reading, depending on - # its class. Readings have text, segments don't. - my %node_data = %$n; + # First extract the data that we can use without reference to + # anything else. + my %node_data = %$n; # Need $n itself untouched for edge processing my $nodeid = delete $node_data{$IDKEY}; my $reading = delete $node_data{$TOKENKEY}; - my $class = $node_data{$CLASS_KEY} || ''; - # TODO this is a hack, fix it? - $class = 'reading' unless $class eq 'segment'; - my $method = $class eq 'segment' ? "add_$class" : "add_reading"; - my $gnode = $collation->$method( $nodeid ); - $gnode->label( $reading ); - $gnode->set_common if $class eq 'common'; - - # Now save the rest of the data, i.e. not the ID or label, + my $class = delete $node_data{$CLASS_KEY} || ''; + my $rank = delete $node_data{$RANK_KEY}; + + # Create the node. Current valid classes are common and meta. + # Everything else is a normal reading. + my $gnode = $collation->add_reading( $nodeid ); + $gnode->text( $reading ); + $gnode->make_common if $class eq 'common'; + $gnode->is_meta( 1 ) if $class eq 'meta'; + $gnode->rank( $rank ) if defined $rank; + + # Now save the data that we need for post-processing, # if it exists. if ( keys %node_data ) { - $extra_data->{$nodeid} = \%node_data; + $extra_data->{$nodeid} = \%node_data } } # Now add the edges. print STDERR "Adding graph edges\n"; + $DB::single = 1; foreach my $e ( @{$graph_data->{'edges'}} ) { - my %edge_data = %$e; - my $from = delete $edge_data{'source'}; - my $to = delete $edge_data{'target'}; - my $class = delete $edge_data{'class'}; - - # Whatever is left tells us what kind of edge it is. - foreach my $wkey ( keys %edge_data ) { - if( $wkey =~ /^witness/ ) { - unless( $class eq 'path' ) { - warn "Cannot add witness label to a $class edge"; - next; - } - my $wit = $edge_data{$wkey}; - unless( $witnesses{$wit} ) { - $tradition->add_witness( sigil => $wit ); - $witnesses{$wit} = 1; - } - my $label = $wkey eq 'witness_ante_corr' - ? $wit . $collation->ac_label : $wit; - $collation->add_path( $from->{$IDKEY}, $to->{$IDKEY}, $label ); - } elsif( $wkey eq 'relationship' ) { - unless( $class eq 'relationship' ) { - warn "Cannot add relationship label to a $class edge"; - next; - } - my $rel = $edge_data{$wkey}; - # TODO handle global relationships - $collation->add_relationship( $rel, $from->{$IDKEY}, $to->{$IDKEY} ); - } else { - my $seg_edge = $collation->graph->add_edge( $from->{$IDKEY}, $to->{$IDKEY} ); - $seg_edge->set_attribute( 'class', 'segment' ); - } - } + my $from = $e->{$SOURCE_KEY}; + my $to = $e->{$TARGET_KEY}; + my $class = $e->{$CLASS_KEY}; + + # We may have more information depending on the class. + if( $class eq 'path' ) { + # We need the witness, and whether it is an 'extra' reading path. + my $wit = $e->{$WITNESS_KEY}; + warn "No witness label on path edge!" unless $wit; + my $extra = $e->{$EXTRA_KEY}; + my $label = $wit . ( $extra ? $collation->ac_label : '' ); + $collation->add_path( $from->{$IDKEY}, $to->{$IDKEY}, $label ); + # Add the witness if we don't have it already. + unless( $witnesses{$wit} ) { + $tradition->add_witness( sigil => $wit ); + $witnesses{$wit} = 1; + } + } elsif( $class eq 'relationship' ) { + # We need the relationship type. + my $rel = $e->{$RELATIONSHIP_KEY}; + warn "No relationship type for relationship edge!" unless $rel; + $collation->add_relationship( $rel, $from->{$IDKEY}, $to->{$IDKEY} ); + } } ## Deal with node information (transposition, relationships, etc.) that ## needs to be processed after all the nodes are created. - print STDERR "Adding second-pass data\n"; + print STDERR "Adding second-pass node data\n"; my $linear = undef; foreach my $nkey ( keys %$extra_data ) { foreach my $edkey ( keys %{$extra_data->{$nkey}} ) { my $this_reading = $collation->reading( $nkey ); if( $edkey eq $TRANSPOS_KEY ) { + $DB::single = 1; my $other_reading = $collation->reading( $extra_data->{$nkey}->{$edkey} ); # We evidently have a linear graph. $linear = 1; $this_reading->set_identical( $other_reading ); - } elsif ( $edkey eq $RANK_KEY ) { - $this_reading->rank( $extra_data->{$nkey}->{$edkey} ); } else { warn "Unfamiliar reading node data $edkey for $nkey"; } diff --git a/make_tradition.pl b/make_tradition.pl old mode 100644 new mode 100755