Merge branch 'autodetect' into develop
This commit is contained in:
commit
3a9969e439
91
zaaReloaded2/Importer/ZaaImporter/AutoDetect.cs
Executable file
91
zaaReloaded2/Importer/ZaaImporter/AutoDetect.cs
Executable file
@ -0,0 +1,91 @@
|
|||||||
|
using Microsoft.Office.Interop.Word;
|
||||||
|
/* AutoDetect.cs
|
||||||
|
* part of zaaReloaded2
|
||||||
|
*
|
||||||
|
* Copyright 2015 Daniel Kraus
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace zaaReloaded2.Importer.ZaaImporter
|
||||||
|
{
|
||||||
|
static class AutoDetect
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Attempts to automatically detect laboratory data in the Word
|
||||||
|
/// document.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="document">Document which to parse for laboratory
|
||||||
|
/// data.</param>
|
||||||
|
/// <returns>True if laboratory data was detected, false if not.</returns>
|
||||||
|
/// <exception cref="ArgumentNullException">if <paramref name="document"/>
|
||||||
|
/// is null.</exception>
|
||||||
|
public static bool Detect(Document document)
|
||||||
|
{
|
||||||
|
if (document == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(
|
||||||
|
"Automatic laboratory detection requires a document.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Try to make this algorithm more elegant.
|
||||||
|
Paragraph start = null;
|
||||||
|
Paragraph end = null;
|
||||||
|
int i = 1;
|
||||||
|
while (i <= document.Paragraphs.Count)
|
||||||
|
{
|
||||||
|
if (IsLabParagraph(document.Paragraphs[i]))
|
||||||
|
{
|
||||||
|
start = document.Paragraphs[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (start != null)
|
||||||
|
{
|
||||||
|
end = start;
|
||||||
|
while (i <= document.Paragraphs.Count - 1)
|
||||||
|
{
|
||||||
|
if (!IsLabParagraph(document.Paragraphs[i+1]))
|
||||||
|
{
|
||||||
|
end = document.Paragraphs[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
document.Range(start.Range.Start, end.Range.End).Select();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if a paragraph is either a time stamp line
|
||||||
|
/// or a paragraph with laboratory items.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="paragraph"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private static bool IsLabParagraph(Paragraph paragraph)
|
||||||
|
{
|
||||||
|
string text = paragraph.Range.Text;
|
||||||
|
return (LaurisParagraph.ResemblesLaurisParagraph(text)
|
||||||
|
|| LaurisTimePoint.IsTimeStampLine(text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -162,9 +162,10 @@ namespace zaaReloaded2
|
|||||||
/// </remarks>
|
/// </remarks>
|
||||||
public bool CanFormat(Office.IRibbonControl control)
|
public bool CanFormat(Office.IRibbonControl control)
|
||||||
{
|
{
|
||||||
Word.Selection s = Globals.ThisAddIn.Application.ActiveWindow.Selection;
|
return Globals.ThisAddIn.Application.ActiveDocument != null;
|
||||||
return s.Paragraphs.Count > 1 ||
|
//Word.Selection s = Globals.ThisAddIn.Application.ActiveWindow.Selection;
|
||||||
(s.Text.Length > 1 && s.Text.EndsWith("\r"));
|
//return s.Paragraphs.Count > 1 ||
|
||||||
|
// (s.Text.Length > 1 && s.Text.EndsWith("\r"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -173,6 +174,24 @@ namespace zaaReloaded2
|
|||||||
|
|
||||||
void DoFormat()
|
void DoFormat()
|
||||||
{
|
{
|
||||||
|
// If no "real" selection exists, attempt to auto-detect the lab data.
|
||||||
|
// (NB Technically, there is never _no_ selection in a document.)
|
||||||
|
Word.Window activeWindow = Globals.ThisAddIn.Application.ActiveWindow;
|
||||||
|
Word.Selection sel = activeWindow.Selection;
|
||||||
|
if (!(sel.Paragraphs.Count > 1
|
||||||
|
|| (sel.Text.Length > 1 && sel.Text.EndsWith("\r"))))
|
||||||
|
{
|
||||||
|
if (!AutoDetect.Detect(activeWindow.Document))
|
||||||
|
{
|
||||||
|
NotificationAction a = new NotificationAction();
|
||||||
|
a.Caption = "Formatieren nicht möglich";
|
||||||
|
a.Message = "Das Dokument scheint keine Lauris-Labordaten zu enthalten.";
|
||||||
|
a.OkButtonLabel = "Schließen";
|
||||||
|
a.Invoke();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (CanFormat(null))
|
if (CanFormat(null))
|
||||||
{
|
{
|
||||||
SettingsRepository repository = SettingsRepository.Load();
|
SettingsRepository repository = SettingsRepository.Load();
|
||||||
|
@ -192,6 +192,7 @@
|
|||||||
can be found.
|
can be found.
|
||||||
-->
|
-->
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="Importer\ZaaImporter\AutoDetect.cs" />
|
||||||
<Compile Include="Controller\Elements\ControlElementBase.cs" />
|
<Compile Include="Controller\Elements\ControlElementBase.cs" />
|
||||||
<Compile Include="Controller\Elements\FormatElementBase.cs" />
|
<Compile Include="Controller\Elements\FormatElementBase.cs" />
|
||||||
<Compile Include="Controller\Elements\NextColumn.cs" />
|
<Compile Include="Controller\Elements\NextColumn.cs" />
|
||||||
|
Loading…
Reference in New Issue
Block a user