• R/O
  • SSH
  • HTTPS

catalpa: コミット


コミットメタ情報

リビジョン91 (tree)
日時2020-10-21 18:11:49
作者hirukawa_ryo

ログメッセージ

* catalpa 0.8.2
自動的に定義される変数 contentLastModified、url、path を追加しました。

変更サマリ

差分

--- catalpa/trunk/src/main/java/net/osdn/catalpa/handler/TemplateHandler.java (revision 90)
+++ catalpa/trunk/src/main/java/net/osdn/catalpa/handler/TemplateHandler.java (revision 91)
@@ -75,37 +75,35 @@
7575 context.setLastModifiedTime(entry.getValue());
7676 }
7777 }
78-
78+
7979 if(template != null) {
8080 context.setLastModifiedTime(context.getConfigLastModifiedTime());
81- context.setContentLastModifiedTime(context.getLastModifiedTime());
82- if(template != null) {
83- try {
84- context.getDataModel().put("_INPUT_PATH", context.getInputPath());
85- context.getDataModel().put("_OUTPUT_PATH", context.getOutputPath());
81+ context.setContentLastModifiedTime(Files.getLastModifiedTime(context.getInputPath()));
82+ try {
83+ context.getDataModel().put("_INPUT_PATH", context.getInputPath());
84+ context.getDataModel().put("_OUTPUT_PATH", context.getOutputPath());
8685
87- synchronized (context.getFreeMarker()) {
88- LastModifiedTracker.reset(context.getFreeMarker());
89-
90- StringWriter out = new StringWriter();
91- template.process(context.getDataModel(), out);
92-
93- context.setLastModifiedTime(FileTime.fromMillis(LastModifiedTracker.getLastModified()));
94- Matcher m = BLOCK_LAST_MODIFIED.matcher(out.toString());
95- int start = 0;
96- while(m.find(start)) {
97- context.setLastModifiedTime(
98- FileTime.from(Instant.from(DateTimeFormatter.ISO_INSTANT.parse(m.group(1)))));
99- start = m.end();
100- }
101- writer.write(m.replaceAll(""));
86+ synchronized (context.getFreeMarker()) {
87+ LastModifiedTracker.reset(context.getFreeMarker());
88+
89+ StringWriter out = new StringWriter();
90+ template.process(context.getDataModel(), out);
91+
92+ context.setLastModifiedTime(FileTime.fromMillis(LastModifiedTracker.getLastModified()));
93+ Matcher m = BLOCK_LAST_MODIFIED.matcher(out.toString());
94+ int start = 0;
95+ while(m.find(start)) {
96+ context.setLastModifiedTime(
97+ FileTime.from(Instant.from(DateTimeFormatter.ISO_INSTANT.parse(m.group(1)))));
98+ start = m.end();
10299 }
103- } finally {
104- context.getDataModel().remove("_OUTPUT_PATH");
105- context.getDataModel().remove("_INPUT_PATH");
100+ writer.write(m.replaceAll(""));
106101 }
107- return;
102+ } finally {
103+ context.getDataModel().remove("_OUTPUT_PATH");
104+ context.getDataModel().remove("_INPUT_PATH");
108105 }
106+ return;
109107 }
110108
111109 // template not found
--- catalpa/trunk/src/main/java/net/osdn/catalpa/Catalpa.java (revision 90)
+++ catalpa/trunk/src/main/java/net/osdn/catalpa/Catalpa.java (revision 91)
@@ -195,8 +195,9 @@
195195 public void process(Path outputPath, Map<String, Object> options, ProgressObserver observer) throws Exception {
196196 this.observer = (observer != null) ? observer : ProgressObserver.EMPTY;
197197
198- freeMarker = new Configuration(Configuration.VERSION_2_3_28);
198+ freeMarker = new Configuration(Configuration.VERSION_2_3_30);
199199 freeMarker.setDefaultEncoding("UTF-8");
200+ freeMarker.setURLEscapingCharset("UTF-8");
200201 freeMarker.setSharedVariable("baseurl", new BaseurlMethod());
201202 freeMarker.setSharedVariable("markdown", new MarkdownDirective(getMarkdownOptions()));
202203 freeMarker.setTemplateLoader(new MultiTemplateLoader(new TemplateLoader[] {
--- catalpa/trunk/src/main/java/net/osdn/catalpa/Context.java (revision 90)
+++ catalpa/trunk/src/main/java/net/osdn/catalpa/Context.java (revision 91)
@@ -89,7 +89,7 @@
8989
9090 /** コンテンツ(通常は.md)の最終更新日時を設定します。
9191 *
92- * @param contentLastModifiedTime コンテンツの最終更新日時
92+ * @param t コンテンツの最終更新日時
9393 */
9494 public void setContentLastModifiedTime(FileTime t) {
9595 if(t != null) {
@@ -101,7 +101,7 @@
101101 }
102102
103103 /** コンテンツ(通常は.md)の最終更新日時を取得します。
104- * この値は ${dateModified} で参照することができ、Webページ内で最終更新日時を表示する目的に適しています。
104+ * この値は ${contentLastModified} で参照することができ、Webページ内で最終更新日時を表示する目的に適しています。
105105 *
106106 * @return コンテンツの最終更新日時
107107 */
@@ -111,12 +111,13 @@
111111
112112 /** 設定ファイルの最終更新日時を設定します。
113113 *
114- * @param configLastModifiedTime 設定ファイルの最終更新日時
114+ * @param t 設定ファイルの最終更新日時
115115 */
116116 public void setConfigLastModifiedTime(FileTime t) {
117117 if(t != null) {
118118 if(configLastModifiedTime == null || t.compareTo(configLastModifiedTime) > 0) {
119119 configLastModifiedTime = t;
120+ dataModel = null;
120121 }
121122 }
122123 }
@@ -131,12 +132,13 @@
131132
132133 /** 最終更新日時を設定します。
133134 *
134- * @param lastModifiedTime 最終更新日時
135+ * @param t 最終更新日時
135136 */
136137 public void setLastModifiedTime(FileTime t) {
137138 if(t != null) {
138139 if(lastModifiedTime == null || t.compareTo(lastModifiedTime) > 0) {
139140 lastModifiedTime = t;
141+ dataModel = null;
140142 }
141143 }
142144 }
@@ -144,7 +146,8 @@
144146 /** 最終更新日時を取得します。
145147 * この値はコンテンツだけでなく関連するテンプレート・ファイルも含めもっとも新しい更新日時を表しています。
146148 * 出力するファイルのタイムスタンプに使用することを目的としています。
147- *
149+ * この値は ${dateModified} で参照することができます。
150+ *
148151 * @return 最終更新日時
149152 */
150153 public FileTime getLastModifiedTime() {
@@ -189,8 +192,11 @@
189192 if(dataModel == null) {
190193 Map<String, Object> dm = new HashMap<String, Object>();
191194 dm.put("baseurl", getBaseUrl());
195+ if(lastModifiedTime != null) {
196+ dm.put("dateModified", new Date(lastModifiedTime.toMillis()));
197+ }
192198 if(contentLastModifiedTime != null) {
193- dm.put("dateModified", new Date(contentLastModifiedTime.toMillis()));
199+ dm.put("contentLastModified", new Date(contentLastModifiedTime.toMillis()));
194200 }
195201 if(systemDataModel != null) {
196202 for(Entry<String, Object> entry : systemDataModel.entrySet()) {
@@ -209,6 +215,24 @@
209215 }
210216 }
211217 }
218+
219+ Path relativeOutputPath = getRelativeOutputPath();
220+ if(relativeOutputPath != null) {
221+ String path = relativeOutputPath.toString().replace('\\', '/');
222+ dm.put("path", path);
223+
224+ String siteurl = "";
225+ Object obj = dm.get("siteurl");
226+ if(obj instanceof String) {
227+ siteurl = ((String)obj).trim();
228+ if(siteurl.endsWith("/")) {
229+ siteurl = siteurl.substring(0, siteurl.length() - 1);
230+ }
231+ }
232+ String url = siteurl + "/" + URLEncoder.encode(path);
233+ dm.put("url", url);
234+ }
235+
212236 for(Entry<String, String> block : blocks.entrySet()) {
213237 Template template = new Template(null, block.getValue(), getFreeMarker());
214238 StringWriter out = new StringWriter();
旧リポジトリブラウザで表示