廣論原文的資料位於TheoryData.java中,結構如下,末學在設計此資料結構的時候,稟持著幾個原則,一是此資料必須易於修改,二是此資料必須讓人一眼就知道如何修改,換句話說,此資料結構盡可能符合人類閱讀習慣,複雜的格式轉換盡量使用程式來解決。 使用LamrimRader.Core處理論文的部分是TheoryUtil.parsePage(),如下範例程式所示,傳入要處理的頁數與監聽器二項,即可協助您生成論文文字,經過如下程式處理後,即可產生論文頁面。為了達到上述的目的,程式在處理廣論原文時使用下列的步驟: 1. 從每一行的廣論原文中刪除標點符號,並記錄該符號的位置與類型(逗號、句號)。 2. 印出該行不含標點符號的文字。 3. 根據第一步所記錄的位置,在該位置畫上實心圓(逗號)或空心圓(句號)。 4. 重複上面三點,直到整頁列印完成。 除此之外,會發現標題的部分仍然過長,如第九行的「由是菩提道次引導分四一為顯其法根源淨故開示造者殊勝二令於教授起敬重故開示其 ...... 引導學徒之次第。 今初」,檢視紙本廣論原文會發現標題的部分字型縮小並變為粗體字,為還原該格式,末學定義了二種標籤:
小字型的部分,在廣論App中是設定為一般字體的90%大小呈現。 最後,在標題中,列表數字不易分辨,常有二個數字連在一起的狀況,如「由是菩提道次引導分四一為顯其法根源淨故開示造者殊勝」,為令使用者易於辨別,末學在數字列表的部分也加上顏色區別,讓使用者更容易閱讀,於是定義了數字標籤:
TheoryUtil tu=new TheoryUtil(TheoryData.content); TheoryParseListener listener = new TheoryParseListener() { @Override public void onSegmentFound(int line, int index, int length, String segText, boolean isBold, boolean isNum, boolean isSmall) { Log.d(getClass().getName(), "Found segment =" + segText); SpannableString str = new SpannableString(segText); if (isBold) { Log.d(getClass().getName(), "Set bold."); str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, str.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } if (isNum) { Log.d(getClass().getName(), "Set num."); str.setSpan(new ForegroundColorSpan(Color.rgb(0, 0, 255)), 0, str.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } if (isSmall) { Log.d(getClass().getName(), "Set small."); str.setSpan(new RelativeSizeSpan(smallSize), 0, str.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } pageView.append(str); } @Override public void onNewLineFound(int line, int index) { Log.d(getClass().getName(), "Found new line"); pageView.append("\n"); } @Override public void onFinishParse(ArrayList<Dot> dotList) { if(highlightMark != null && pageIndex == highlightMark.page) highlightText(); pageView.drawDot(dotList); } }; } tu.parsePage(num,listener); 請注意,處理廣論文字的部分與平台無關,但繪製標點符號在不同平台有不同的作法,端看您所開發的平台,標點符號列表會在onFinishParse()函示中交給您的程式,您必須自行實作繪製標點符號的功能。 |