diff --git a/main/src/com/google/refine/importers/WikitextImporter.java b/main/src/com/google/refine/importers/WikitextImporter.java index f67fa9972..08ce76e6a 100644 --- a/main/src/com/google/refine/importers/WikitextImporter.java +++ b/main/src/com/google/refine/importers/WikitextImporter.java @@ -16,19 +16,16 @@ import com.google.common.io.CharStreams; import de.fau.cs.osr.ptk.common.AstVisitor; import de.fau.cs.osr.ptk.common.ParserCommon; -/* -import org.sweble.wikitext.engine.PageId; -import org.sweble.wikitext.engine.PageTitle; -import org.sweble.wikitext.engine.WtEngineImpl; -import org.sweble.wikitext.engine.EngineException; -import org.sweble.wikitext.engine.config.WikiConfig; -import org.sweble.wikitext.engine.nodes.EngProcessedPage; -import org.sweble.wikitext.engine.utils.DefaultConfigEnWp; */ import org.sweble.wikitext.parser.ParserConfig; import org.sweble.wikitext.parser.utils.SimpleParserConfig; import org.sweble.wikitext.parser.WikitextParser; import org.sweble.wikitext.parser.nodes.WtNode; import org.sweble.wikitext.parser.nodes.WtText; +import org.sweble.wikitext.parser.nodes.WtInternalLink; +import org.sweble.wikitext.parser.nodes.WtExternalLink; +import org.sweble.wikitext.parser.nodes.WtLinkTitle; +import org.sweble.wikitext.parser.nodes.WtLinkTitle.WtNoLinkTitle; +import org.sweble.wikitext.parser.nodes.WtUrl; import org.sweble.wikitext.parser.nodes.WtTable; import org.sweble.wikitext.parser.nodes.WtTableHeader; import org.sweble.wikitext.parser.nodes.WtTableRow; @@ -77,13 +74,15 @@ public class WikitextImporter extends TabularImportingParserBase { public List> rows; private List currentRow; private StringBuilder currentCellString; - // private String currentCellLink; + private String currentInternalLink; + private String currentExternalLink; public WikitextTableVisitor() { header = null; rows = new ArrayList>(); currentCellString = null; - // currentCellLink = null; + currentInternalLink = null; + currentExternalLink = null; } @Override @@ -145,6 +144,31 @@ public class WikitextImporter extends TabularImportingParserBase { currentCellString.append(text.getContent()); } + public void visit(WtNoLinkTitle e) { + if (currentInternalLink != null) { + currentCellString.append(currentInternalLink); + } else if (currentExternalLink != null) { + currentCellString.append(currentExternalLink); + } + } + + public void visit(WtLinkTitle e) { + iterate(e); + } + + public void visit(WtInternalLink e) { + currentInternalLink = e.getTarget().getAsString(); + iterate(e); + currentInternalLink = null; + } + + public void visit(WtExternalLink e) { + WtUrl url = e.getTarget(); + currentExternalLink = url.getProtocol() + ":" + url.getPath(); + iterate(e); + currentExternalLink = null; + } + @Override protected Object after(WtNode node, Object result) { diff --git a/main/tests/server/src/com/google/refine/tests/importers/WikitextImporterTests.java b/main/tests/server/src/com/google/refine/tests/importers/WikitextImporterTests.java index a841af6a4..018b4a922 100644 --- a/main/tests/server/src/com/google/refine/tests/importers/WikitextImporterTests.java +++ b/main/tests/server/src/com/google/refine/tests/importers/WikitextImporterTests.java @@ -99,7 +99,67 @@ public class WikitextImporterTests extends ImporterTest { Assert.assertEquals(project.rows.get(0).cells.get(0).value, "a"); Assert.assertEquals(project.rows.get(1).cells.get(2).value, "f"); } + + @Test + public void readTableWithLinks() { + // Data credits: Wikipedia contributors, https://de.wikipedia.org/w/index.php?title=Agenturen_der_Europäischen_Union&action=edit + String input = "\n" + +"{|\n" + +"|-\n" + +"| [[Europäisches Zentrum für die Förderung der Berufsbildung|Cedefop]] || Cedefop || [http://www.cedefop.europa.eu/]\n" + +"|-\n" + +"| [[Europäische Stiftung zur Verbesserung der Lebens- und Arbeitsbedingungen]] || EUROFOUND || [http://www.eurofound.europa.eu/]\n" + +"|-\n" + +"| [[Europäische Beobachtungsstelle für Drogen und Drogensucht]] || EMCDDA || [http://www.emcdda.europa.eu/]\n" + +"|-\n" + +"|}\n"; + try { + prepareOptions(0, 0, 0, 0, true); + parse(input); + } catch (Exception e) { + Assert.fail("Parsing failed", e); + } + Assert.assertEquals(project.columnModel.columns.size(), 3); + Assert.assertEquals(project.rows.size(), 3); + Assert.assertEquals(project.rows.get(0).cells.size(), 3); + Assert.assertEquals(project.rows.get(0).cells.get(0).value, "Cedefop"); + Assert.assertEquals(project.rows.get(1).cells.get(2).value, "http://www.eurofound.europa.eu/"); + } +/* + @Test + public void readStyledTableWithHeader() { + // Data credits: Wikipedia contributors, https://de.wikipedia.org/w/index.php?title=Agenturen_der_Europäischen_Union&action=edit + String input = "\n" + +"{| class=\"wikitable sortable\"\n" + +"! style=\"text-align:left; width: 60em\" | Offizieller Name\n" + +"! style=\"text-align:left; width: 9em\" | Abkürzung\n" + +"! style=\"text-align:left; width: 6em\" | Website\n" + +"! style=\"text-align:left; width: 15em\" | Standort\n" + +"! style=\"text-align:left; width: 18em\" | Staat\n" + +"! style=\"text-align:left; width: 6em\" | Gründung\n" + +"! style=\"text-align:left; width: 50em\" | Anmerkungen\n" + +"|-\n" + +"| [[Europäisches Zentrum für die Förderung der Berufsbildung]] || Cedefop || [http://www.cedefop.europa.eu/] || [[Thessaloniki]] || {{Griechenland}} || 1975 ||\n" + +"|-\n" + +"| [[Europäische Stiftung zur Verbesserung der Lebens- und Arbeitsbedingungen]] || EUROFOUND || [http://www.eurofound.europa.eu/] || [[Dublin]] || {{Irland}} || 1975 ||\n" + +"|-\n" + +"| [[Europäische Beobachtungsstelle für Drogen und Drogensucht]] || EMCDDA || [http://www.emcdda.europa.eu/] || [[Lissabon]] || {{Portugal}} || 1993 ||\n" + +"|-\n" + +"|}\n"; + + try { + prepareOptions(0, 0, 0, 0, true); + parse(input); + } catch (Exception e) { + Assert.fail("Parsing failed", e); + } + Assert.assertEquals(project.columnModel.columns.size(), 7); + Assert.assertEquals(project.rows.size(), 3); + Assert.assertEquals(project.rows.get(0).cells.size(), 7); + Assert.assertEquals(project.rows.get(0).cells.get(0).value, "Europäisches Zentrum für die Förderung der Berufsbildung"); + Assert.assertEquals(project.rows.get(1).cells.get(2).value, "http://www.eurofound.europa.eu/"); + }*/ //--helpers--