X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/6f1539320b7b2701d391c9921177b31898767bb7..d872e2977db984286deadb378429cd697f69cde1:/IkiWiki/Plugin/table.pm?ds=sidebyside

diff --git a/IkiWiki/Plugin/table.pm b/IkiWiki/Plugin/table.pm
index 479f3d745..f3c425a37 100644
--- a/IkiWiki/Plugin/table.pm
+++ b/IkiWiki/Plugin/table.pm
@@ -8,7 +8,7 @@ use IkiWiki 3.00;
 
 sub import {
 	hook(type => "getsetup", id => "table", call => \&getsetup);
-	hook(type => "preprocess", id => "table", call => \&preprocess);
+	hook(type => "preprocess", id => "table", call => \&preprocess, scan => 1);
 }
 
 sub getsetup () {
@@ -16,6 +16,7 @@ sub getsetup () {
 		plugin => {
 			safe => 1,
 			rebuild => undef,
+			section => "widget",
 		},
 }
 
@@ -27,13 +28,31 @@ sub preprocess (@) {
 	);
 
 	if (exists $params{file}) {
-		if (! $pagesources{$params{file}}) {
+		if (! exists $pagesources{$params{file}}) {
 			error gettext("cannot find file");
 		}
 		$params{data} = readfile(srcfile($params{file}));
 		add_depends($params{page}, $params{file});
 	}
 
+	if (! defined wantarray) {
+		# scan mode --	if the table uses an external file, need to
+		# scan that file too.
+		return unless exists $params{file};
+
+		# Preprocess in scan-only mode.
+		IkiWiki::preprocess($params{page}, $params{page}, $params{data}, 1);
+
+		IkiWiki::run_hooks(scan => sub {
+			shift->(
+				page => $params{page},
+				content => $params{data},
+			);
+		});
+
+		return;
+	}
+
 	if (lc $params{format} eq 'auto') {
 		# first try the more simple format
 		if (is_dsv_data($params{data})) {
@@ -50,22 +69,18 @@ sub preprocess (@) {
 			defined $params{delimiter} ? $params{delimiter} : ",",);
 		# linkify after parsing since html link quoting can
 		# confuse CSV parsing
-		if (! exists $params{file}) {
-			@data=map {
-				[ map {
-					IkiWiki::linkify($params{page},
-						$params{destpage}, $_);
-				} @$_ ]
-			} @data;
-		}
+		@data=map {
+			[ map {
+				IkiWiki::linkify($params{page},
+					$params{destpage}, $_);
+			} @$_ ]
+		} @data;
 	}
 	elsif (lc $params{format} eq 'dsv') {
 		# linkify before parsing since wikilinks can contain the
 		# delimiter
-		if (! exists $params{file}) {
-			$params{data} = IkiWiki::linkify($params{page},
-				$params{destpage}, $params{data});
-		}
+		$params{data} = IkiWiki::linkify($params{page},
+			$params{destpage}, $params{data});
 		@data=split_dsv($params{data},
 			defined $params{delimiter} ? $params{delimiter} : "|",);
 	}